From 2c31b4d6ca6723b6682cf0b2fa1752cb628a305c Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Wed, 21 Nov 2012 13:15:54 -0800 Subject: [PATCH] --- yaml --- r: 352863 b: refs/heads/master c: 4643826a3da17767494b85c956c73c138c96a7ea h: refs/heads/master i: 352861: 7821af21c1a5a6419c7312aaea70f24bb51bc360 352859: 909b4f648e229c6cfd2f0b31342a4ff115ddd5db 352855: 845cd248e142fb0855262d4609f9058c0d98fd7f 352847: e9ffb297520ebd70fc60656959d98a8a6fec0547 352831: 1e7a4cdb1ebd81f3fff54867ae72c4b829d0916c v: v3 --- [refs] | 2 +- trunk/drivers/char/tpm/tpm.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index c712b74cd777..3182ef50c051 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1fbc5e95356a4600fab3a04a82dc8bb49591aedd +refs/heads/master: 4643826a3da17767494b85c956c73c138c96a7ea diff --git a/trunk/drivers/char/tpm/tpm.c b/trunk/drivers/char/tpm/tpm.c index 023dfbaffe73..e38054b33bb4 100644 --- a/trunk/drivers/char/tpm/tpm.c +++ b/trunk/drivers/char/tpm/tpm.c @@ -843,7 +843,7 @@ int tpm_do_selftest(struct tpm_chip *chip) { int rc; unsigned int loops; - unsigned int delay_msec = 1000; + unsigned int delay_msec = 100; unsigned long duration; struct tpm_cmd_t cmd; @@ -864,6 +864,14 @@ int tpm_do_selftest(struct tpm_chip *chip) cmd.header.in = pcrread_header; cmd.params.pcrread_in.pcr_idx = cpu_to_be32(0); rc = tpm_transmit(chip, (u8 *) &cmd, READ_PCR_RESULT_SIZE); + /* Some buggy TPMs will not respond to tpm_tis_ready() for + * around 300ms while the self test is ongoing, keep trying + * until the self test duration expires. */ + if (rc == -ETIME) { + dev_info(chip->dev, HW_ERR "TPM command timed out during continue self test"); + msleep(delay_msec); + continue; + } if (rc < TPM_HEADER_SIZE) return -EFAULT;