linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] tpm_tis: Disable interrupts on ThinkPad T490s
@ 2020-10-15 21:44 Jerry Snitselaar
  2020-10-15 22:01 ` Jerry Snitselaar
                   ` (3 more replies)
  0 siblings, 4 replies; 22+ messages in thread
From: Jerry Snitselaar @ 2020-10-15 21:44 UTC (permalink / raw)
  To: linux-integrity
  Cc: linux-kernel, jarkko, Peter Huewe, Jason Gunthorpe,
	Hans de Goede, James Bottomley

There is a misconfiguration in the bios of the gpio pin used for the
interrupt in the T490s. When interrupts are enabled in the tpm_tis
driver code this results in an interrupt storm. This was initially
reported when we attempted to enable the interrupt code in the tpm_tis
driver, which previously wasn't setting a flag to enable it. Due to
the reports of the interrupt storm that code was reverted and we went back
to polling instead of using interrupts. Now that we know the T490s problem
is a firmware issue, add code to check if the system is a T490s and
disable interrupts if that is the case. This will allow us to enable
interrupts for everyone else. If the user has a fixed bios they can
force the enabling of interrupts with tpm_tis.interrupts=1 on the
kernel command line.

Cc: jarkko@kernel.org
Cc: Peter Huewe <peterhuewe@gmx.de>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Jerry Snitselaar <jsnitsel@redhat.com>
---
 drivers/char/tpm/tpm_tis.c | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 0b214963539d..4ed6e660273a 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -27,6 +27,7 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/kernel.h>
+#include <linux/dmi.h>
 #include "tpm.h"
 #include "tpm_tis_core.h"
 
@@ -49,8 +50,8 @@ static inline struct tpm_tis_tcg_phy *to_tpm_tis_tcg_phy(struct tpm_tis_data *da
 	return container_of(data, struct tpm_tis_tcg_phy, priv);
 }
 
-static bool interrupts = true;
-module_param(interrupts, bool, 0444);
+static int interrupts = -1;
+module_param(interrupts, int, 0444);
 MODULE_PARM_DESC(interrupts, "Enable interrupts");
 
 static bool itpm;
@@ -63,6 +64,28 @@ module_param(force, bool, 0444);
 MODULE_PARM_DESC(force, "Force device probe rather than using ACPI entry");
 #endif
 
+static int tpm_tis_disable_irq(const struct dmi_system_id *d)
+{
+	if (interrupts == -1) {
+		pr_notice("tpm_tis: %s detected: disabling interrupts.\n", d->ident);
+		interrupts = 0;
+	}
+
+	return 0;
+}
+
+static const struct dmi_system_id tpm_tis_dmi_table[] = {
+	{
+		.callback = tpm_tis_disable_irq,
+		.ident = "ThinkPad T490s",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T490s"),
+		},
+	},
+	{}
+};
+
 #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
 static int has_hid(struct acpi_device *dev, const char *hid)
 {
@@ -192,6 +215,8 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info)
 	int irq = -1;
 	int rc;
 
+	dmi_check_system(tpm_tis_dmi_table);
+
 	rc = check_acpi_tpm2(dev);
 	if (rc)
 		return rc;
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2020-12-02 16:08 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-15 21:44 [PATCH] tpm_tis: Disable interrupts on ThinkPad T490s Jerry Snitselaar
2020-10-15 22:01 ` Jerry Snitselaar
2020-10-15 22:39 ` Matthew Garrett
2020-10-16  6:12   ` Hans de Goede
2020-11-19  6:36   ` Jerry Snitselaar
2020-11-19 14:42     ` Hans de Goede
2020-11-19 17:05       ` Jerry Snitselaar
2020-11-23 12:19         ` Hans de Goede
2020-11-24  3:27       ` Jarkko Sakkinen
2020-11-24  3:29         ` Jarkko Sakkinen
2020-11-24  3:26     ` Jarkko Sakkinen
2020-11-24 17:52       ` Jerry Snitselaar
2020-11-24 18:10         ` James Bottomley
2020-11-29  3:21           ` Jarkko Sakkinen
2020-11-24 21:45         ` Hans de Goede
2020-11-29  3:23           ` Jarkko Sakkinen
2020-11-29 11:34             ` Hans de Goede
2020-12-02 16:07               ` Jarkko Sakkinen
2020-11-29  3:18         ` Jarkko Sakkinen
2020-10-16  6:10 ` Hans de Goede
2020-10-18 21:11 ` Jarkko Sakkinen
2020-10-18 21:14   ` Jarkko Sakkinen

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).