diff options
author | Bill Richardson <wfrichar@chromium.org> | 2012-05-17 13:26:05 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-05-18 18:15:58 -0700 |
commit | b75d8adcc01f08cf5a6d87b78aeb1d7cdfcd22af (patch) | |
tree | 9106f87dab43facc5a707df7ea4e604a30444641 /tests/vboot_api_firmware_tests.c | |
parent | e97760cec3a4e08f6b3b3266bfcb02137197a7a7 (diff) | |
download | vboot-b75d8adcc01f08cf5a6d87b78aeb1d7cdfcd22af.tar.gz |
Use virtual dev-mode switch when told to.factory-2338.B
If VbInit() is instructed to look at a virtual dev-mode switch, then it will
use value contained in the TPM's firmware space instead of a hardware GPIO
to determine if developer mode is enabled.
This change just makes it look. It doesn't provide a way to actually set
the value in the TPM. VbInit() isn't being told to look yet, either. Those
changes are coming.
BUG=chrome-os-partner:9706
TEST=none
The usual sanity-check applies:
make
make runtests
But to actually test that this stuff is working IRL requires special tweaks
to other components and monitoring the serial debug output from both EC and
CPU. We'll save the hands-on tests for when it's all done.
Change-Id: Ie485ad2180224e192238bf2a5dbf95bbcb9130f9
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/23067
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'tests/vboot_api_firmware_tests.c')
-rw-r--r-- | tests/vboot_api_firmware_tests.c | 48 |
1 files changed, 3 insertions, 45 deletions
diff --git a/tests/vboot_api_firmware_tests.c b/tests/vboot_api_firmware_tests.c index c3c651af..03f67b5b 100644 --- a/tests/vboot_api_firmware_tests.c +++ b/tests/vboot_api_firmware_tests.c @@ -31,12 +31,10 @@ static int nv_write_called; static uint32_t mock_tpm_version; static uint32_t mock_lf_tpm_version; /* TPM version set by LoadFirmware() */ /* Variables for tracking params passed to mock functions */ -static uint32_t mock_rfs_got_flags; static uint32_t mock_stbms_got_flags; static uint64_t mock_stbms_got_fw_flags; static int mock_rfl_called; /* Mock return values, so we can simulate errors */ -static VbError_t mock_rfs_retval; static VbError_t mock_rfw_retval; static VbError_t mock_rfl_retval; static VbError_t mock_lf_retval; @@ -61,11 +59,12 @@ static void ResetMocks(void) { mock_timer = 10; nv_write_called = mock_rfl_called = 0; - mock_rfs_got_flags = mock_stbms_got_flags = 0; + mock_stbms_got_flags = 0; mock_stbms_got_fw_flags = 0; mock_tpm_version = mock_lf_tpm_version = 0x20004; - mock_rfs_retval = mock_rfw_retval = mock_rfl_retval = 0; + shared->fw_version_tpm_start = mock_tpm_version; + mock_rfw_retval = mock_rfl_retval = 0; mock_lf_retval = mock_stbms_retval = 0; } @@ -92,17 +91,6 @@ uint64_t VbExGetTimer(void) { return mock_timer; } -uint32_t RollbackFirmwareSetup(int recovery_mode, int developer_mode, - uint32_t* version) { - if (recovery_mode) - mock_rfs_got_flags |= MOCK_REC_FLAG; - if (developer_mode) - mock_rfs_got_flags |= MOCK_DEV_FLAG; - - *version = mock_tpm_version; - return mock_rfs_retval; -} - uint32_t RollbackFirmwareWrite(uint32_t version) { mock_tpm_version = version; return mock_rfw_retval; @@ -153,7 +141,6 @@ static void VbSelectFirmwareTest(void) { TEST_EQ(shared->timer_vb_select_firmware_enter, 21, " time enter"); TEST_EQ(shared->timer_vb_select_firmware_exit, 43, " time exit"); TEST_EQ(nv_write_called, 0, " NV write not called since nothing changed"); - TEST_EQ(mock_rfs_got_flags, 0, " RollbackFirmwareSetup() flags"); TEST_EQ(mock_stbms_got_flags, 0, " SetTPMBootModeState() flags"); TEST_EQ(mock_stbms_got_fw_flags, 0xABCDE0, " fw keyblock flags"); TEST_EQ(mock_rfl_called, 1, " RollbackFirmwareLock() called"); @@ -162,7 +149,6 @@ static void VbSelectFirmwareTest(void) { ResetMocks(); shared->flags |= VBSD_BOOT_DEV_SWITCH_ON; TestVbSf(0, 0, "Developer mode"); - TEST_EQ(mock_rfs_got_flags, MOCK_DEV_FLAG, " RollbackFirmwareSetup() flags"); TEST_EQ(mock_stbms_got_flags, MOCK_DEV_FLAG, " SetTPMBootModeState() flags"); TEST_EQ(mock_rfl_called, 1, " RollbackFirmwareLock() called"); @@ -175,7 +161,6 @@ static void VbSelectFirmwareTest(void) { TestVbSf(0, 0, "Recovery mode"); TEST_EQ(fparams.selected_firmware, VB_SELECT_FIRMWARE_RECOVERY, " select recovery"); - TEST_EQ(mock_rfs_got_flags, MOCK_REC_FLAG, " RollbackFirmwareSetup() flags"); TEST_EQ(mock_stbms_got_flags, MOCK_REC_FLAG, " SetTPMBootModeState() flags"); TEST_EQ(mock_rfl_called, 0, " RollbackFirmwareLock() not called"); @@ -186,37 +171,10 @@ static void VbSelectFirmwareTest(void) { TestVbSf(0, 0, "Recovery+developer mode"); TEST_EQ(fparams.selected_firmware, VB_SELECT_FIRMWARE_RECOVERY, " select recovery"); - TEST_EQ(mock_rfs_got_flags, MOCK_DEV_FLAG|MOCK_REC_FLAG, - " RollbackFirmwareSetup() flags"); TEST_EQ(mock_stbms_got_flags, MOCK_DEV_FLAG|MOCK_REC_FLAG, " SetTPMBootModeState() flags"); TEST_EQ(mock_rfl_called, 0, " RollbackFirmwareLock() not called"); - /* Rollback setup needs to reboot */ - ResetMocks(); - mock_rfs_retval = TPM_E_MUST_REBOOT; - TestVbSf(VBERROR_TPM_REBOOT_REQUIRED, 0, "Rollback TPM reboot (rec=0)"); - ResetMocks(); - mock_rfs_retval = TPM_E_MUST_REBOOT; - shared->recovery_reason = VBNV_RECOVERY_US_TEST; - TestVbSf(VBERROR_TPM_REBOOT_REQUIRED, VBNV_RECOVERY_RO_TPM_REBOOT, - "Rollback TPM reboot, in recovery, first time"); - /* Ignore if we already tried rebooting */ - ResetMocks(); - mock_rfs_retval = TPM_E_MUST_REBOOT; - shared->recovery_reason = VBNV_RECOVERY_RO_TPM_REBOOT; - TestVbSf(0, 0, "Rollback TPM reboot, in recovery, already retried"); - - /* Other rollback setup errors */ - ResetMocks(); - mock_rfs_retval = TPM_E_IOERROR; - TestVbSf(VBERROR_TPM_FIRMWARE_SETUP, VBNV_RECOVERY_RO_TPM_ERROR, - "Rollback TPM setup error"); - ResetMocks(); - mock_rfs_retval = TPM_E_IOERROR; - shared->recovery_reason = VBNV_RECOVERY_US_TEST; - TestVbSf(0, 0, "Rollback TPM setup error ignored in recovery"); - /* LoadFirmware() error code passed through */ ResetMocks(); mock_lf_retval = 0x12345; |