From 10d50fe301e93cfb586af4efcb8d28a913740d6b Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Fri, 2 Sep 2016 14:45:53 -0700 Subject: [PATCH] UPSTREAM: 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. BUG=None BRANCH=None TEST=None Signed-off-by: Duncan Laurie Reviewed-on: https://review.coreboot.org/16416 Reviewed-by: Aaron Durbin Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Change-Id: If3a11567df89bc73b4d4878bf89d877974044f34 Reviewed-on: https://chromium-review.googlesource.com/382079 Commit-Ready: Furquan Shaikh Tested-by: Furquan Shaikh Reviewed-by: Aaron Durbin --- src/drivers/i2c/tpm/tis.c | 3 +++ 1 file changed, 3 insertions(+) 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;