summaryrefslogtreecommitdiff
path: root/tests/vboot_api_firmware_tests.c
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2012-05-17 13:26:05 -0700
committerGerrit <chrome-bot@google.com>2012-05-18 18:15:58 -0700
commitb75d8adcc01f08cf5a6d87b78aeb1d7cdfcd22af (patch)
tree9106f87dab43facc5a707df7ea4e604a30444641 /tests/vboot_api_firmware_tests.c
parente97760cec3a4e08f6b3b3266bfcb02137197a7a7 (diff)
downloadvboot-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.c48
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;