summaryrefslogtreecommitdiff
path: root/board/cr50/board.c
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2020-05-27 10:26:27 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-05 04:29:38 +0000
commitdd15f8676d55ef1c78f78016ce6c6175d3806174 (patch)
treec7e39fca212acee742f8dd668953d4c6446ad471 /board/cr50/board.c
parent398315c41f2111135f2510e88d55ad3dbe83b5d6 (diff)
downloadchrome-ec-dd15f8676d55ef1c78f78016ce6c6175d3806174.tar.gz
ap_ro: add handling of the corrupted hash
This patch closes the AP RO verification loop on the Cr50 side. If the check is triggered, the valid AP hash is found, and the RO contents is found to not match the hash, the Cr50 will - assert the EC reset; - set a flag to prevent the code from deasserting EC reset; - start a periodic hook to reassert EC reset in case the user hits power+refresh. This will prevent the Chrome OS device from booting. A new CLI command is being added to display the verification state. In developer images the new command would allow to clear the failure state, when running prod images the only way out of the failure state would be the powercycle. BUG=b:153764696 TEST=verified that erasing or programming AP RO hash when board ID is set is impossible. Verified proper shutdown in case AP RO has is present and the AP RO space is corrupted and recovery using the new cli command when running a dev image. Verified that 'ecrst off' properly reports the override. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Change-Id: I1029114126a9a79f80385af7bc8d5467738e04ca Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2218676 Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'board/cr50/board.c')
-rw-r--r--board/cr50/board.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/board/cr50/board.c b/board/cr50/board.c
index 6843673662..defb033d52 100644
--- a/board/cr50/board.c
+++ b/board/cr50/board.c
@@ -1175,6 +1175,12 @@ void assert_ec_rst(void)
void deassert_ec_rst(void)
{
+ if (ec_rst_override()) {
+ ccprintf("EC un-reset blocked, try powercycle or Cr50 reboot."
+ "\n");
+ return;
+ }
+
wait_ec_rst(0);
if (uart_bitbang_is_enabled())