summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@google.com>2018-02-06 17:14:03 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-02-08 01:59:41 +0000
commit1d03e567a7f2655f91618dc566de988ac15d6b86 (patch)
tree11ce72ec90e43b98f03950b1b208bf4118e4f07c
parentbb19ebf1dffcc894f1406c47d6b2bb8cdd6d363a (diff)
downloadchrome-ec-1d03e567a7f2655f91618dc566de988ac15d6b86.tar.gz
tpm: set waiting task ID earlier.
The TPM task is running on a higher priority than the hook task invoking TPM reset for RMA purposes. The waiting task ID value needs to be set before TPM task is signaled to reset. BRANCH=cr50, cr50-mp BUG=b:37952913 TEST=with the corresponding ccd_config.c changes fully verified RMA process (not just generating and processing the challenge). Change-Id: Id112d59ae0c3fd31a32e652c6a043fc3fd3bbe07 Signed-off-by: Vadim Bendebury <vbendeb@google.com> Reviewed-on: https://chromium-review.googlesource.com/905925 Commit-Ready: Vadim Bendebury <vbendeb@chromium.org> Tested-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> (cherry picked from commit 41a308abcb02474e3883a5be7c3001738c020789) Reviewed-on: https://chromium-review.googlesource.com/907962 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
-rw-r--r--common/tpm_registers.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/common/tpm_registers.c b/common/tpm_registers.c
index fab6616f54..06eb7ee638 100644
--- a/common/tpm_registers.c
+++ b/common/tpm_registers.c
@@ -768,6 +768,13 @@ int tpm_reset_request(int wait_until_done, int wipe_nvmem_first)
/* We can't change our minds about wiping. */
wipe_requested |= wipe_nvmem_first;
+ if (wait_until_done)
+ /*
+ * Completion could take a while, if other things have
+ * higher priority.
+ */
+ waiting_for_reset = task_get_current();
+
/* Ask the TPM task to reset itself */
task_set_event(TASK_ID_TPM, TPM_EVENT_RESET, 0);
@@ -775,11 +782,11 @@ int tpm_reset_request(int wait_until_done, int wipe_nvmem_first)
return EC_SUCCESS;
if (in_interrupt_context() ||
- task_get_current() == TASK_ID_TPM)
+ task_get_current() == TASK_ID_TPM) {
+ waiting_for_reset = TASK_ID_INVALID;
return EC_ERROR_BUSY; /* Can't sleep. Clown'll eat me. */
+ }
- /* Completion could take a while, if other things have priority */
- waiting_for_reset = task_get_current();
evt = task_wait_event_mask(TPM_EVENT_RESET, 5 * SECOND);
/* We were notified of completion */