From: Andy Isaacson <adi@vmware.com>
To: linux-kernel@vger.kernel.org, tpmdd-devel@lists.sourceforge.net
Cc: adi@hexapodia.org, Rajiv Andrade <srajiv@linux.vnet.ibm.com>,
dds@google.com, Mimi Zohar <zohar@linux.vnet.ibm.com>,
Shahbaz Khan <shaz.linux@gmail.com>,
seiji.munetoh@gmail.com, Andy Isaacson <adi@vmware.com>
Subject: [PATCH 6/6] tpm_tis: add workarounds for iTPM
Date: Tue, 30 Jun 2009 18:04:15 -0700 [thread overview]
Message-ID: <1246410255-6839-7-git-send-email-adi@vmware.com> (raw)
In-Reply-To: <1246410255-6839-1-git-send-email-adi@vmware.com>
Some Lenovo platforms (X200 and T400, maybe others) have an "iTPM" which
does not quite conform to the TPM spec. With one small hack the iTPM
seems to work OK.
iTPM does not set TPM_STS_DATA_EXPECT reliably during multi-burst
transfers. (STS_DATA_EXPECT appears to be set after the final burst,
not after each burst.) So we give up and don't attempt to report
errors during write.
Based on a patch from Colin Didier and the tpmdd-devel mailing list:
http://cybione.org/~cdidier/log/data/200812020841/itpm.diff
Signed-off-by: Andy Isaacson <adi@vmware.com>
---
drivers/char/tpm/tpm_tis.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 7f0cb6c..07ac7e0 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -85,6 +85,7 @@ struct tpm_data {
void __iomem *tpm_address;
int tpm_size;
int tpm_irq;
+ int itpm;
};
static int check_locality(struct tpm_chip *chip, int l)
@@ -277,6 +278,7 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
int rc, status, burstcnt;
size_t count = 0;
u32 ordinal;
+ struct tpm_data *tpm = to_acpi_device(chip->dev)->driver_data;
if (request_locality(chip, 0) < 0)
return -EBUSY;
@@ -303,7 +305,7 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
&chip->vendor.int_queue);
status = tpm_tis_status(chip);
- if ((status & TPM_STS_DATA_EXPECT) == 0) {
+ if (!tpm->itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
rc = -EIO;
goto out_err;
}
@@ -444,12 +446,17 @@ static int interrupts = 1;
module_param(interrupts, bool, 0444);
MODULE_PARM_DESC(interrupts, "Enable interrupts");
+static int itpm;
+module_param(itpm, bool, 0444);
+MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
+
static int tpm_tis_init(struct device *dev, resource_size_t start,
resource_size_t len, unsigned int irq)
{
u32 vendor, intfcaps, intmask;
int rc, i;
struct tpm_chip *chip;
+ struct tpm_data *tpm = to_acpi_device(dev)->driver_data;
if (!(chip = tpm_register_hardware(dev, &tpm_tis)))
return -ENODEV;
@@ -477,6 +484,11 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
"1.2 TPM (%04X:%04X rev %d)\n", vendor & 0xffff,
vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
+ if (itpm || vendor == 0x10208086) {
+ dev_info(dev, "Intel iTPM workaround enabled\n");
+ tpm->itpm = 1;
+ }
+
/* Figure out the capabilities */
intfcaps =
ioread32(chip->vendor.iobase +
--
1.6.3.1
next prev parent reply other threads:[~2009-07-01 1:23 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-01 1:04 [PATCH 0/6] tpm_tis: various cleanups, and support for Intel iTPM Andy Isaacson
2009-07-01 1:04 ` [PATCH 1/6] tpm_tis: various cleanups Andy Isaacson
2009-09-10 19:56 ` Rajiv Andrade
2009-07-01 1:04 ` [PATCH 2/6] tpm_tis: add MODULE_DEVICE_TABLE to enable autoload Andy Isaacson
2009-09-10 19:56 ` Rajiv Andrade
2009-07-01 1:04 ` [PATCH 3/6] tpm_tis: set timeouts before calling request_locality Andy Isaacson
2009-07-01 1:04 ` [PATCH 4/6] tpm_tis: print complete vendor information Andy Isaacson
2009-09-10 19:57 ` Rajiv Andrade
2009-07-01 1:04 ` [PATCH 5/6] tpm_tis: convert from pnp_driver to acpi_driver Andy Isaacson
2009-07-01 10:01 ` Alan Cox
2009-07-01 13:45 ` Rajiv Andrade
2009-07-16 17:26 ` Rajiv Andrade
2009-07-16 17:43 ` [PATCH] TPM: DATA_EXPECT bit check bypass Rajiv Andrade
2009-07-16 20:08 ` Valdis.Kletnieks
2009-07-16 20:50 ` Rajiv Andrade
2009-07-16 21:20 ` Rajiv Andrade
2009-07-20 23:28 ` Andy Isaacson
2009-07-24 17:12 ` Rajiv Andrade
2009-07-20 18:27 ` [PATCH 5/6] tpm_tis: convert from pnp_driver to acpi_driver Andy Isaacson
2009-09-10 19:08 ` Rajiv Andrade
2009-09-10 19:54 ` [PATCH] tpm_tis: TPM_STS_DATA_EXPECT workaround Rajiv Andrade
2009-09-10 19:58 ` Daniel Walker
2009-09-10 20:06 ` Rajiv Andrade
2009-09-10 20:09 ` Rajiv Andrade
2009-09-11 23:34 ` Seiji Munetoh
2009-09-24 18:43 ` Rajiv Andrade
2009-10-28 2:45 ` David Smith
2009-10-31 14:24 ` Eric Paris
2009-11-01 22:09 ` James Morris
2009-09-10 20:27 ` Andy Isaacson
2009-07-01 1:04 ` Andy Isaacson [this message]
2009-07-03 18:18 ` [tpmdd-devel] [PATCH 6/6] tpm_tis: add workarounds for iTPM Marcin Obara
2009-07-03 19:33 ` Andy Isaacson
2009-07-03 20:10 ` Marcin Obara
2009-07-03 20:20 ` Andy Isaacson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1246410255-6839-7-git-send-email-adi@vmware.com \
--to=adi@vmware.com \
--cc=adi@hexapodia.org \
--cc=dds@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=seiji.munetoh@gmail.com \
--cc=shaz.linux@gmail.com \
--cc=srajiv@linux.vnet.ibm.com \
--cc=tpmdd-devel@lists.sourceforge.net \
--cc=zohar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.