diff options
author | Vadim Sukhomlinov <sukhomlinov@google.com> | 2020-07-30 17:10:39 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-06 00:45:28 +0000 |
commit | 4e9e48219c254654027040a09a181f377784b281 (patch) | |
tree | b6e4dca528bf6786fd130173d1ab598b41f371e0 /board/cr50/board.c | |
parent | ca9f95fecec76373fbb26adcc5090dfcce114918 (diff) | |
download | chrome-ec-4e9e48219c254654027040a09a181f377784b281.tar.gz |
fips: move FIPS power-up test completion to PMU_PWRDN_SCRATCH22
Status of completion of power-up tests was in long life register
which survives reboots and even firmware upgrades, which is not
an intended behavior. Moving status to PWRDN register makes it
reset on graceful reboots and firmware upgrades, but avoid
running tests on wake from deep sleep. This switch also enables
use of multiple bits to indicate status of tests, which makes it
more fault tolerant.
BUG=b:138577491
TEST=make BOARD=cr50, then deassert DIOM3 to trigger deep sleep
FIPS power-on tests shouldn't run on wake.
Signed-off-by: Vadim Sukhomlinov <sukhomlinov@google.com>
Change-Id: I098940e45afd5b5b9447b2780ff69372a922c03f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2330976
Reviewed-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Tested-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Commit-Queue: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Diffstat (limited to 'board/cr50/board.c')
-rw-r--r-- | board/cr50/board.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/board/cr50/board.c b/board/cr50/board.c index 180d33af9d..a28c901b72 100644 --- a/board/cr50/board.c +++ b/board/cr50/board.c @@ -194,22 +194,17 @@ int board_get_ccd_rec_lid_pin(void) bool board_fips_power_up_done(void) { - return !!(board_properties & BOARD_FIPS_POWERUP_DONE); + return !!(GREG32(PMU, PWRDN_SCRATCH22) == BOARD_FIPS_POWERUP_DONE); } /* Set status of FIPS power-up tests. */ void board_set_fips_policy_test(bool asserted) { /* Enable writing to the long life register */ - GWRITE_FIELD(PMU, LONG_LIFE_SCRATCH_WR_EN, REG1, 1); - if (asserted) - GREG32(PMU, LONG_LIFE_SCRATCH1) |= BOARD_FIPS_POWERUP_DONE; + GREG32(PMU, PWRDN_SCRATCH22) = BOARD_FIPS_POWERUP_DONE; else - GREG32(PMU, LONG_LIFE_SCRATCH1) &= ~BOARD_FIPS_POWERUP_DONE; - - /* Disable writing to the long life register */ - GWRITE_FIELD(PMU, LONG_LIFE_SCRATCH_WR_EN, REG1, 0); + GREG32(PMU, PWRDN_SCRATCH22) = 0; } /* Get header address of the backup RW copy. */ |