summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2018-04-30 15:32:48 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-07-20 01:51:25 +0000
commit943072603f083cf1b7a94ca4cf3d555f51732a86 (patch)
tree9f846425dcc831a52eb59571fedf91333312e113
parent6eec2d9c9f908773119b082da5b06bfbab7669ad (diff)
downloadvboot-943072603f083cf1b7a94ca4cf3d555f51732a86.tar.gz
depthcharge: add Alt OS TPM flags and utility functions
BUG=b:70804764 TEST=None BRANCH=firmware-eve-campfire-9584.131.B Change-Id: I42621854968dc26f86110f3de82a293a88934638 Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/1034484 Commit-Queue: Joel Kitching <kitching@chromium.org> Tested-by: Joel Kitching <kitching@chromium.org> Trybot-Ready: Joel Kitching <kitching@chromium.org> Reviewed-by: Joel Kitching <kitching@chromium.org>
-rw-r--r--firmware/lib/include/rollback_index.h15
-rw-r--r--firmware/lib/mocked_rollback_index.c11
-rw-r--r--firmware/lib/rollback_index.c33
3 files changed, 58 insertions, 1 deletions
diff --git a/firmware/lib/include/rollback_index.h b/firmware/lib/include/rollback_index.h
index ef30c5a4..9152d549 100644
--- a/firmware/lib/include/rollback_index.h
+++ b/firmware/lib/include/rollback_index.h
@@ -36,8 +36,10 @@ typedef struct RollbackSpaceKernel {
uint32_t uid;
/* Kernel versions */
uint32_t kernel_versions;
+ /* Flags for Alt OS mode */
+ uint8_t alt_os_flags;
/* Reserved for future expansion */
- uint8_t reserved[3];
+ uint8_t reserved[2];
/* Checksum (v2 and later only) */
uint8_t crc8;
} __attribute__((packed)) RollbackSpaceKernel;
@@ -160,4 +162,15 @@ uint32_t SafeWrite(uint32_t index, const void *data, uint32_t length);
*/
uint32_t SetVirtualDevMode(int val);
+enum alt_os_flags {
+ ALT_OS_ENABLE = (1 << 0),
+ ALT_OS_HOT_KEY = (1 << 1),
+};
+
+/**
+ * Utility functions to get/set Alt OS flags in the TPM secdatak space.
+ */
+uint32_t SetAltOSFlags(uint8_t val);
+uint32_t GetAltOSFlags(uint8_t *val);
+
#endif /* VBOOT_REFERENCE_ROLLBACK_INDEX_H_ */
diff --git a/firmware/lib/mocked_rollback_index.c b/firmware/lib/mocked_rollback_index.c
index a4b0ceb0..a0a56013 100644
--- a/firmware/lib/mocked_rollback_index.c
+++ b/firmware/lib/mocked_rollback_index.c
@@ -45,3 +45,14 @@ uint32_t RollbackFwmpRead(struct RollbackSpaceFwmp *fwmp)
memset(fwmp, 0, sizeof(*fwmp));
return TPM_SUCCESS;
}
+
+uint32_t SetAltOSModeFlags(uint8_t val)
+{
+ return TPM_SUCCESS;
+}
+
+uint32_t GetAltOSModeFlags(uint8_t *val)
+{
+ *val = 0;
+ return TPM_SUCCESS;
+}
diff --git a/firmware/lib/rollback_index.c b/firmware/lib/rollback_index.c
index 289c0d73..d5cfef11 100644
--- a/firmware/lib/rollback_index.c
+++ b/firmware/lib/rollback_index.c
@@ -169,6 +169,39 @@ uint32_t SetVirtualDevMode(int val)
return VBERROR_SUCCESS;
}
+uint32_t SetAltOSFlags(uint8_t val)
+{
+ RollbackSpaceKernel rsk;
+
+ VB2_DEBUG("TPM: Entering");
+ if (TPM_SUCCESS != ReadSpaceKernel(&rsk))
+ return VBERROR_TPM_FIRMWARE_SETUP;
+
+ VB2_DEBUG("TPM: flags were 0x%02x\n", rsk.alt_os_flags);
+ rsk.alt_os_flags = val;
+ VB2_DEBUG("TPM: flags are now 0x%02x\n", rsk.alt_os_flags);
+
+ if (TPM_SUCCESS != WriteSpaceKernel(&rsk))
+ return VBERROR_TPM_SET_BOOT_MODE_STATE;
+
+ VB2_DEBUG("TPM: Leaving\n");
+ return VBERROR_SUCCESS;
+}
+
+uint32_t GetAltOSFlags(uint8_t *val)
+{
+ RollbackSpaceKernel rsk;
+
+ VB2_DEBUG("TPM: Entering");
+ if (TPM_SUCCESS != ReadSpaceKernel(&rsk))
+ return VBERROR_TPM_FIRMWARE_SETUP;
+
+ *val = rsk.alt_os_flags;
+
+ VB2_DEBUG("TPM: Leaving\n");
+ return VBERROR_SUCCESS;
+}
+
uint32_t ReadSpaceKernel(RollbackSpaceKernel *rsk)
{
uint32_t r;