From: Jim Broadus <jbroadus@gmail.com>
To: jarkko@kernel.org, linux-integrity@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: peterhuewe@gmx.de, jgg@ziepe.ca, Jim Broadus <jbroadus@gmail.com>
Subject: [PATCH v3 2/2] tpm: tpm_tis: Add settle time for some TPMs
Date: Tue, 26 May 2026 16:22:44 -0700 [thread overview]
Message-ID: <20260526232245.5409-3-jbroadus@gmail.com> (raw)
In-Reply-To: <20260526232245.5409-1-jbroadus@gmail.com>
Some TPMs fail to grant locality when requested immediately after being
relinquished. In this case, the TPM_ACCESS_REQUEST_USE bit of the
TPM_ACCESS register is cleared immediately without setting
TPM_ACCESS_ACTIVE_LOCALITY.
This issue can be seen at boot since tpm_chip_start, called right
after locality is relinquished, will fail. This causes the probe to
fail:
tpm_tis MSFT0101:00: probe with driver tpm_tis failed with error -1
This occurs on some older Dell Latitudes. For the Nuvoton TPM used in
these machines, add a delay after locality is relinquished.
Signed-off-by: Jim Broadus <jbroadus@gmail.com>
---
drivers/char/tpm/tpm_tis_core.c | 6 ++++++
drivers/char/tpm/tpm_tis_core.h | 1 +
2 files changed, 7 insertions(+)
diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index d0b87f5daa3e..e0ee98e93ede 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -171,6 +171,9 @@ static int __tpm_tis_relinquish_locality(struct tpm_tis_data *priv, int l)
{
tpm_tis_write8(priv, TPM_ACCESS(l), TPM_ACCESS_ACTIVE_LOCALITY);
+ if (test_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags))
+ tpm_msleep(TPM_TIMEOUT);
+
return 0;
}
@@ -1166,6 +1169,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
if (vendor_id == TPM_VID_IFX)
set_bit(TPM_TIS_STATUS_VALID_RETRY, &priv->flags);
+ if (vendor_id == TPM_VID_WINBOND && device_id == 0x00FE)
+ set_bit(TPM_TIS_SETTLE_AFTER_RELINQUISH, &priv->flags);
+
if (is_bsw()) {
priv->ilb_base_addr = ioremap(INTEL_LEGACY_BLK_BASE_ADDR,
ILB_REMAP_SIZE);
diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
index f2c77844062a..aa6d78898ef3 100644
--- a/drivers/char/tpm/tpm_tis_core.h
+++ b/drivers/char/tpm/tpm_tis_core.h
@@ -90,6 +90,7 @@ enum tpm_tis_flags {
TPM_TIS_DEFAULT_CANCELLATION = 2,
TPM_TIS_IRQ_TESTED = 3,
TPM_TIS_STATUS_VALID_RETRY = 4,
+ TPM_TIS_SETTLE_AFTER_RELINQUISH = 5,
};
struct tpm_tis_data {
--
2.54.0
next prev parent reply other threads:[~2026-05-26 23:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-19 15:45 [PATCH v2] tpm: tpm_tis: Add optional delay after relinquish Jim Broadus
2026-05-26 23:22 ` [PATCH v3 0/2] tpm: tpm_tis: Fix probe of some older TPMs Jim Broadus
2026-05-26 23:22 ` [PATCH v3 1/2] tpm: tpm_tis: store entire did_vid Jim Broadus
2026-05-26 23:22 ` Jim Broadus [this message]
2026-05-29 23:01 ` [PATCH v3 0/2] tpm: tpm_tis: Fix probe of some older TPMs Jarkko Sakkinen
2026-06-01 20:14 ` Jarkko Sakkinen
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=20260526232245.5409-3-jbroadus@gmail.com \
--to=jbroadus@gmail.com \
--cc=jarkko@kernel.org \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
/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.