summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2016-09-02 14:45:53 -0700
committerDuncan Laurie <dlaurie@chromium.org>2016-09-06 22:59:07 +0200
commit112ab9183754a81c8100fcc37593ef4905a9d3a3 (patch)
tree1e39a0e57d63755d842ba07f811d8b8c835d06f1
parentc2875872c8852ccb261bdb20d145795ade832118 (diff)
downloadcoreboot-112ab9183754a81c8100fcc37593ef4905a9d3a3.tar.xz
drivers/i2c/tpm: Fix error handling for tis structure not initialized
If the TPM completely fails to respond then the vendor structure may not have assigned handlers yet, so catch that case and return error so the boot can continue to recovery mode instead of asserting over and over. Change-Id: If3a11567df89bc73b4d4878bf89d877974044f34 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/16416 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r--src/drivers/i2c/tpm/tis.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/drivers/i2c/tpm/tis.c b/src/drivers/i2c/tpm/tis.c
index c6173b47ed..ce0de8953b 100644
--- a/src/drivers/i2c/tpm/tis.c
+++ b/src/drivers/i2c/tpm/tis.c
@@ -114,6 +114,9 @@ static ssize_t tpm_transmit(const uint8_t *buf, size_t bufsiz)
memcpy(&ordinal, buf + TPM_CMD_ORDINAL_BYTE, sizeof(ordinal));
ordinal = be32_to_cpu(ordinal);
+ if (!chip->vendor.send || !chip->vendor.status || !chip->vendor.cancel)
+ return -1;
+
if (count == 0) {
printk(BIOS_DEBUG, "tpm_transmit: no data\n");
return -1;