summaryrefslogtreecommitdiff
path: root/common/i2cs_tpm.c
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2017-10-31 18:51:51 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-11-07 17:52:15 -0800
commit3919001a390f593ba8e022f223bf1e43b7dbc0a2 (patch)
tree5a5534aca31394c15d4cc6f09197348b66f786ef /common/i2cs_tpm.c
parent0354ad02cba910c90fd0c0e622c3b0b698802a1c (diff)
downloadchrome-ec-3919001a390f593ba8e022f223bf1e43b7dbc0a2.tar.gz
tpm: provide means of shutting down comms layer while in reset
Currently the Cr50 code resets TPM communications layer at a certain point during TPM reset process. It turns out that this is not sufficient - the comms layer keeps receiving and trying to invoke TPM layer, which does not mesh well with TPM reset. Let's provide two callbacks for each comms layer - to shut it down and to bring it back up. We shut down the comms when starting TPM reset and bring them back up when reset is completed. BRANCH=cr50 BUG=b:68012381 TEST=ran AP firmware test suite on both SPI and I2C based devices. Change-Id: I7caf4a09b9a5c6e5fc6bfe60eae1c0d64ab24904 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/754502 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'common/i2cs_tpm.c')
-rw-r--r--common/i2cs_tpm.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/common/i2cs_tpm.c b/common/i2cs_tpm.c
index 42089681dd..4518eddbb9 100644
--- a/common/i2cs_tpm.c
+++ b/common/i2cs_tpm.c
@@ -211,7 +211,12 @@ static void wr_complete_handler(void *i2cs_data, size_t i2cs_data_size)
gpio_set_level(GPIO_INT_AP_L, 1);
}
-static void i2cs_tpm_enable(void)
+static void i2cs_if_stop(void)
+{
+ i2cs_register_write_complete_handler(NULL);
+}
+
+static void i2cs_if_start(void)
{
i2cs_register_write_complete_handler(wr_complete_handler);
}
@@ -221,7 +226,7 @@ static void i2cs_if_register(void)
if (!board_tpm_uses_i2c())
return;
- tpm_register_interface(i2cs_tpm_enable);
+ tpm_register_interface(i2cs_if_start, i2cs_if_stop);
i2cs_fifo_adjust_count = 0;
i2cs_write_error_count = 0;
}