[coreboot-gerrit] New patch to review for coreboot: drivers/i2c/tpm/cr50: Increase IRQ timeout

Duncan Laurie (dlaurie@chromium.org) gerrit at coreboot.org
Tue Nov 1 23:05:11 CET 2016


Duncan Laurie (dlaurie at chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17204

-gerrit

commit 08eff339f107bf68efbf435c7c20f6c88f6372e2
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Tue Nov 1 15:03:13 2016 -0700

    drivers/i2c/tpm/cr50: Increase IRQ timeout
    
    Increase the IRQ timeout to prevent issues if there is a delay
    in the TPM responding to a command.
    
    BUG=chrome-os-partner:59191
    TEST=suspend/resume testing on eve board
    
    Change-Id: I1ea7859bc7a056a450b2b0ee32153ae43ee8699f
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
---
 src/drivers/i2c/tpm/cr50.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/drivers/i2c/tpm/cr50.c b/src/drivers/i2c/tpm/cr50.c
index f7e667b..4b1f03b 100644
--- a/src/drivers/i2c/tpm/cr50.c
+++ b/src/drivers/i2c/tpm/cr50.c
@@ -48,6 +48,7 @@
 #define CR50_MAX_BUFSIZE	63
 #define CR50_TIMEOUT_LONG_MS	2000	/* Long timeout while waiting for TPM */
 #define CR50_TIMEOUT_SHORT_MS	2	/* Short timeout during transactions */
+#define CR50_TIMEOUT_IRQ_MS	50	/* Timeout waiting for TPM ready */
 #define CR50_DID_VID		0x00281ae0L
 
 struct tpm_inf_dev {
@@ -65,11 +66,11 @@ static int cr50_i2c_wait_tpm_ready(struct tpm_chip *chip)
 
 	if (!chip->vendor.irq_status) {
 		/* Fixed delay if interrupt not supported */
-		mdelay(CR50_TIMEOUT_SHORT_MS);
+		mdelay(CR50_TIMEOUT_IRQ_MS);
 		return 0;
 	}
 
-	stopwatch_init_msecs_expire(&sw, 5 * CR50_TIMEOUT_SHORT_MS);
+	stopwatch_init_msecs_expire(&sw, CR50_TIMEOUT_IRQ_MS);
 
 	while (!chip->vendor.irq_status(chip->vendor.irq))
 		if (stopwatch_expired(&sw))
@@ -429,6 +430,11 @@ static void cr50_vendor_init(struct tpm_chip *chip)
 		chip->vendor.irq = -1;
 #endif
 	}
+
+	if (chip->vendor.irq <= 0)
+		printk(BIOS_WARNING,
+		       "%s: No IRQ, will use %ums delay for TPM ready\n",
+		       __func__, CR50_TIMEOUT_IRQ_MS);
 }
 
 int tpm_vendor_probe(unsigned bus, uint32_t addr)



More information about the coreboot-gerrit mailing list