From: Jarkko Sakkinen <jarkko@kernel.org>
To: linux-integrity@vger.kernel.org
Cc: Lukasz Majczak <lma@semihalf.com>,
Laurent Bigonville <bigon@debian.org>,
Jarkko Sakkinen <jarkko@kernel.org>,
Guenter Roeck <linux@roeck-us.net>,
Peter Huewe <peterhuewe@gmx.de>, Jason Gunthorpe <jgg@ziepe.ca>,
Stefan Berger <stefanb@linux.ibm.com>,
James Bottomley <James.Bottomley@HansenPartnership.com>,
Jerry Snitselaar <jsnitsel@redhat.com>
Subject: [PATCH] tpm, tpm_tis: Acquire locality in tpm_tis_gen_interrupt() and tpm_get_timeouts()
Date: Tue, 16 Feb 2021 10:17:49 +0200 [thread overview]
Message-ID: <20210216081750.191250-1-jarkko@kernel.org> (raw)
From: Lukasz Majczak <lma@semihalf.com>
This is shown with Samsung Chromebook Pro (Caroline) with TPM 1.2
(SLB 9670):
[ 4.324298] TPM returned invalid status
[ 4.324806] WARNING: CPU: 2 PID: 1 at drivers/char/tpm/tpm_tis_core.c:275 tpm_tis_status+0x86/0x8f
Background
==========
TCG PC Client Platform TPM Profile (PTP) Specification, paragraph 6.1 FIFO
Interface Locality Usage per Register, Table 39 Register Behavior Based on
Locality Setting for FIFO - a read attempt to TPM_STS_x Registers returns
0xFF in case of lack of locality. The described situation manifests itself
with the following warning trace:
The fix
=======
Add the proper decorations to tpm_tis_gen_interrupt() and
tpm_get_timeouts().
Cc: Laurent Bigonville <bigon@debian.org>
Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
Signed-off-by: Lukasz Majczak <lma@semihalf.com>
Co-developed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
---
It was easier to write a new patch based on v5. Since v5 had a crippled
change log I just restarted the version count.
drivers/char/tpm/tpm-interface.c | 16 ++++++++++++++--
drivers/char/tpm/tpm_tis_core.c | 16 +++++++++++++---
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 1621ce818705..9ab155ae5726 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -238,13 +238,25 @@ EXPORT_SYMBOL_GPL(tpm_transmit_cmd);
int tpm_get_timeouts(struct tpm_chip *chip)
{
+ int ret;
+
if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
return 0;
+ /* TPM 2.0 */
if (chip->flags & TPM_CHIP_FLAG_TPM2)
return tpm2_get_timeouts(chip);
- else
- return tpm1_get_timeouts(chip);
+
+
+ ret = tpm_chip_start(chip);
+ if (ret)
+ return ret;
+
+ ret = tpm1_get_timeouts(chip);
+
+ tpm_chip_stop(chip);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(tpm_get_timeouts);
diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index 431919d5f48a..ce80e7a2d420 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -707,12 +707,22 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)
const char *desc = "attempting to generate an interrupt";
u32 cap2;
cap_t cap;
+ int ret;
+ /* TPM 2.0 */
if (chip->flags & TPM_CHIP_FLAG_TPM2)
return tpm2_get_tpm_pt(chip, 0x100, &cap2, desc);
- else
- return tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc,
- 0);
+
+ /* TPM 1.2 */
+ ret = request_locality(chip, 0);
+ if (ret < 0)
+ return ret;
+
+ ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0);
+
+ release_locality(chip, 0);
+
+ return ret;
}
/* Register the IRQ and issue a command that will cause an interrupt. If an
--
2.30.1
next reply other threads:[~2021-02-16 8:20 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-16 8:17 Jarkko Sakkinen [this message]
2021-02-16 8:26 ` [PATCH] tpm, tpm_tis: Acquire locality in tpm_tis_gen_interrupt() and tpm_get_timeouts() Paul Menzel
2021-02-16 8:39 ` Jarkko Sakkinen
2021-02-16 8:50 ` Paul Menzel
2021-02-16 16:14 ` Jarkko Sakkinen
2021-02-16 11:02 ` Laurent Bigonville
[not found] ` <CAFJ_xbo2Tvfjjbt-xFAkEAdqVEg0ZhDnGJa2qkJOYURx47hE+Q@mail.gmail.com>
2021-02-16 11:21 ` Laurent Bigonville
2021-02-16 14:09 ` Lukasz Majczak
2021-02-16 16:18 ` Jarkko Sakkinen
2021-02-16 16:16 ` Jarkko Sakkinen
2021-02-16 16:26 ` Jarkko Sakkinen
2021-02-16 16:34 ` Jarkko Sakkinen
2021-02-16 19:06 ` Laurent Bigonville
2021-02-17 11:51 ` Lukasz Majczak
2021-02-17 22:29 ` Jarkko Sakkinen
2021-06-01 21:17 ` Laurent Bigonville
2021-06-03 5:28 ` Jarkko Sakkinen
2021-06-03 9:42 ` Laurent Bigonville
2021-06-09 12:43 ` Jarkko Sakkinen
2021-06-10 11:35 ` Laurent Bigonville
2021-06-10 12:29 ` Jarkko Sakkinen
2021-06-10 14:00 ` Laurent Bigonville
2021-06-14 20:40 ` Jarkko Sakkinen
2021-06-15 11:19 ` Laurent Bigonville
2021-06-15 12:56 ` Jarkko Sakkinen
2021-06-15 16:27 ` Laurent Bigonville
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=20210216081750.191250-1-jarkko@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=bigon@debian.org \
--cc=jgg@ziepe.ca \
--cc=jsnitsel@redhat.com \
--cc=linux-integrity@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=lma@semihalf.com \
--cc=peterhuewe@gmx.de \
--cc=stefanb@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).