diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2017-10-23 10:41:47 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-10-24 12:57:45 -0700 |
commit | e3d15afa68d9e4c8866a0301b33ff6e6d78b1750 (patch) | |
tree | b8589583f7211d8e919bb120c9be5baf0258bdf5 /board/cr50 | |
parent | 9eac4de2efaf253ba9e89b822f430c060e59bf6b (diff) | |
download | chrome-ec-e3d15afa68d9e4c8866a0301b33ff6e6d78b1750.tar.gz |
tpm: let the caller of TPM reset decide if the EC needs to be reset too
TPM reset sequence when TPM wipeout is requested has a side effect of
rebooting the entire device. This is not always desirable, in some
cases other actions need to happen before the device is rebooted.
This patch makes resetting the EC the TPM reset caller's responsibility,
BRANCH=cr50
BUG=none
TEST=verified that RMA reset and WP disable properly wipe out the TPM
and reboot the device.
Change-Id: I6e827ce923a2454ae5b2e2597d1a4c9390bbb8b6
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/733813
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'board/cr50')
-rw-r--r-- | board/cr50/wp.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/board/cr50/wp.c b/board/cr50/wp.c index 0edb681fcd..e4fc54c630 100644 --- a/board/cr50/wp.c +++ b/board/cr50/wp.c @@ -189,6 +189,14 @@ int board_wipe_tpm(void) { int rc; + /* + * Blindly zapping the TPM space while the AP is awake and poking at + * it will bork the TPM task and the AP itself, so force the whole + * system off by holding the EC in reset. + */ + CPRINTS("%s: force EC off", __func__); + assert_ec_rst(); + /* Wipe the TPM's memory and reset the TPM task. */ rc = tpm_reset_request(1, 1); if (rc != EC_SUCCESS) { @@ -204,9 +212,10 @@ int board_wipe_tpm(void) SYSTEM_RESET_HARD); /* - * That should never return, but if it did, pass through the - * error we got. + * That should never return, but if it did, release EC reset + * and pass through the error we got. */ + deassert_ec_rst(); return rc; } @@ -215,6 +224,10 @@ int board_wipe_tpm(void) /* Tell the TPM task to re-enable NvMem commits. */ tpm_reinstate_nvmem_commits(); + /* Let the rest of the system boot. */ + CPRINTS("%s: release EC reset", __func__); + deassert_ec_rst(); + return EC_SUCCESS; } |