[PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s

From: Oliver Lin

Date: Sat Jun 20 2026 - 15:24:01 EST


On Lenovo ThinkPad P50s, enabling Intel IOMMU causes TPM
initialization failures, suspend/resume issues, and prevents the
system from powering off completely.

The system works correctly with intel_iommu=off. A locally tested
kernel with this DMI quirk also works correctly without requiring the
kernel parameter.

Add a DMI quirk to disable Intel IOMMU on this platform.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=221674
Signed-off-by: Oliver Lin <oliver@xxxxxxxxxxxxxxx>
---
drivers/iommu/intel/iommu.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 849d06dfe1ae..a072e9ef63ef 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -278,6 +278,19 @@ static int __init intel_iommu_setup(char *str)

return 1;
}
+
+static const struct dmi_system_id intel_iommu_broken_dmar_table[] __initconst = {
+ {
+ .ident = "Lenovo ThinkPad P50s",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "20FLCTO1WW"),
+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad P50s"),
+ },
+ },
+ {}
+};
+
__setup("intel_iommu=", intel_iommu_setup);

/*
@@ -2565,6 +2578,12 @@ int __init intel_iommu_init(void)
force_on = (!intel_iommu_tboot_noforce && tboot_force_iommu()) ||
platform_optin_force_iommu();

+ if (!force_on && dmi_check_system(intel_iommu_broken_dmar_table)) {
+ dmar_disabled = 1;
+ no_platform_optin = 1;
+ pr_info("DMAR: IOMMU disabled on Lenovo ThinkPad P50s due to firmware issue\n");
+ }
+
down_write(&dmar_global_lock);
if (dmar_table_init()) {
if (force_on)
--
2.53.0