summaryrefslogtreecommitdiff
path: root/board/cr50/dcrypto/dcrypto_runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/cr50/dcrypto/dcrypto_runtime.c')
-rw-r--r--board/cr50/dcrypto/dcrypto_runtime.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/board/cr50/dcrypto/dcrypto_runtime.c b/board/cr50/dcrypto/dcrypto_runtime.c
index da1f854c68..7ed1add4f3 100644
--- a/board/cr50/dcrypto/dcrypto_runtime.c
+++ b/board/cr50/dcrypto/dcrypto_runtime.c
@@ -86,7 +86,7 @@ void dcrypto_unlock(void)
}
#ifndef DCRYPTO_CALL_TIMEOUT_US
-#define DCRYPTO_CALL_TIMEOUT_US (700 * 1000)
+#define DCRYPTO_CALL_TIMEOUT_US (1000 * 1000)
#endif
/*
* When running on Cr50 this event belongs in the TPM task event space. Make
@@ -108,6 +108,7 @@ uint32_t dcrypto_call(uint32_t adr)
event = fips_vtable->task_wait_event_mask(TASK_EVENT_DCRYPTO_DONE,
DCRYPTO_CALL_TIMEOUT_US);
+ state = GREG32(CRYPTO, INT_STATE);
/* TODO(ngm): switch return value to an enum. */
switch (event) {
case TASK_EVENT_DCRYPTO_DONE:
@@ -117,7 +118,6 @@ uint32_t dcrypto_call(uint32_t adr)
* all other bits are indicative of error.
* Except for MOD_OPERAND_OUT_OF_RANGE, which is noise.
*/
- state = GREG32(CRYPTO, INT_STATE);
if ((state &
~(GC_CRYPTO_INT_STATE_MOD_OPERAND_OUT_OF_RANGE_MASK |
GC_CRYPTO_INT_STATE_HOST_CMD_RECV_MASK)) == 0)
@@ -126,9 +126,13 @@ uint32_t dcrypto_call(uint32_t adr)
default:
dcrypto_reset_and_wipe();
#ifdef CONFIG_FLASH_LOG
+ /* dcrypto status is only 12 bits, but for analysis we
+ * add dcrypto function address in top 16 bits.
+ */
+ state |= (adr << 16);
/* State value of zero indicates event timeout. */
fips_vtable->flash_log_add_event(FE_LOG_DCRYPTO_FAILURE,
- sizeof(state), &state);
+ sizeof(state), &state);
#endif
return 1;
}