summaryrefslogtreecommitdiff
path: root/board/cr50
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2017-10-23 10:41:47 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-10-24 12:57:45 -0700
commite3d15afa68d9e4c8866a0301b33ff6e6d78b1750 (patch)
treeb8589583f7211d8e919bb120c9be5baf0258bdf5 /board/cr50
parent9eac4de2efaf253ba9e89b822f430c060e59bf6b (diff)
downloadchrome-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.c17
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;
}