diff options
author | Ting Shen <phoenixshen@google.com> | 2018-04-30 15:32:48 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-07-20 01:51:25 +0000 |
commit | 943072603f083cf1b7a94ca4cf3d555f51732a86 (patch) | |
tree | 9f846425dcc831a52eb59571fedf91333312e113 | |
parent | 6eec2d9c9f908773119b082da5b06bfbab7669ad (diff) | |
download | vboot-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.h | 15 | ||||
-rw-r--r-- | firmware/lib/mocked_rollback_index.c | 11 | ||||
-rw-r--r-- | firmware/lib/rollback_index.c | 33 |
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; |