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. Split the no-IRQ case out so it doesn't suffer unnecessarily. BUG=chrome-os-partner:59191 TEST=suspend/resume testing on eve board Change-Id: I1ea7859bc7a056a450b2b0ee32153ae43ee8699f Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/17204 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
parent
a84fa908e2
commit
ed4fa099d9
|
@ -48,6 +48,8 @@
|
||||||
#define CR50_MAX_BUFSIZE 63
|
#define CR50_MAX_BUFSIZE 63
|
||||||
#define CR50_TIMEOUT_LONG_MS 2000 /* Long timeout while waiting for TPM */
|
#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_SHORT_MS 2 /* Short timeout during transactions */
|
||||||
|
#define CR50_TIMEOUT_NOIRQ_MS 20 /* Timeout for TPM ready without IRQ */
|
||||||
|
#define CR50_TIMEOUT_IRQ_MS 100 /* Timeout for TPM ready with IRQ */
|
||||||
#define CR50_DID_VID 0x00281ae0L
|
#define CR50_DID_VID 0x00281ae0L
|
||||||
|
|
||||||
struct tpm_inf_dev {
|
struct tpm_inf_dev {
|
||||||
|
@ -65,11 +67,11 @@ static int cr50_i2c_wait_tpm_ready(struct tpm_chip *chip)
|
||||||
|
|
||||||
if (!chip->vendor.irq_status) {
|
if (!chip->vendor.irq_status) {
|
||||||
/* Fixed delay if interrupt not supported */
|
/* Fixed delay if interrupt not supported */
|
||||||
mdelay(CR50_TIMEOUT_SHORT_MS);
|
mdelay(CR50_TIMEOUT_NOIRQ_MS);
|
||||||
return 0;
|
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))
|
while (!chip->vendor.irq_status(chip->vendor.irq))
|
||||||
if (stopwatch_expired(&sw))
|
if (stopwatch_expired(&sw))
|
||||||
|
@ -429,6 +431,11 @@ static void cr50_vendor_init(struct tpm_chip *chip)
|
||||||
chip->vendor.irq = -1;
|
chip->vendor.irq = -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chip->vendor.irq <= 0)
|
||||||
|
printk(BIOS_WARNING,
|
||||||
|
"%s: No IRQ, will use %ums delay for TPM ready\n",
|
||||||
|
__func__, CR50_TIMEOUT_NOIRQ_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
int tpm_vendor_probe(unsigned bus, uint32_t addr)
|
int tpm_vendor_probe(unsigned bus, uint32_t addr)
|
||||||
|
|
Loading…
Reference in New Issue