* [PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s @ 2026-06-20 19:22 Oliver Lin 2026-06-21 1:29 ` Baolu Lu 0 siblings, 1 reply; 8+ messages in thread From: Oliver Lin @ 2026-06-20 19:22 UTC (permalink / raw) To: baolu.lu, dwmw2; +Cc: joro, will, robin.murphy, iommu, linux-kernel, Oliver Lin 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@liuxiaozhen.dev> --- 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s 2026-06-20 19:22 [PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s Oliver Lin @ 2026-06-21 1:29 ` Baolu Lu [not found] ` <e4deced7-aabf-44d2-859c-d0b0add48d76@liuxiaozhen.dev> 0 siblings, 1 reply; 8+ messages in thread From: Baolu Lu @ 2026-06-21 1:29 UTC (permalink / raw) To: Oliver Lin, dwmw2; +Cc: baolu.lu, joro, will, robin.murphy, iommu, linux-kernel On 6/21/2026 3:22 AM, Oliver Lin wrote: > 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@liuxiaozhen.dev> > --- > 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"), > + }, > + }, > + {} > +}; Is this a broken ACPI DMAR table? If so, please try updating to the latest firmware. Otherwise, report the issue to the laptop vendor and ask them to resolve it, especially if they claim their product supports Linux. Thanks, baolu ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <e4deced7-aabf-44d2-859c-d0b0add48d76@liuxiaozhen.dev>]
* Re: [PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s [not found] ` <e4deced7-aabf-44d2-859c-d0b0add48d76@liuxiaozhen.dev> @ 2026-07-01 17:03 ` Oliver Lin 2026-07-02 10:31 ` [PATCH] iommu/vt-d: respect user override for intel_iommu=on " Oliver Lin 0 siblings, 1 reply; 8+ messages in thread From: Oliver Lin @ 2026-07-01 17:03 UTC (permalink / raw) To: Baolu Lu; +Cc: iommu, linux-kernel, dwmw2 Hi Baolu, Thanks for the feedback. I will investigate the DMAR table further and provide acpidump + dmesg comparison in the next revision. Best regards, Oliver ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] iommu/vt-d: respect user override for intel_iommu=on on Lenovo ThinkPad P50s 2026-07-01 17:03 ` Oliver Lin @ 2026-07-02 10:31 ` Oliver Lin 2026-07-03 1:26 ` Baolu Lu 0 siblings, 1 reply; 8+ messages in thread From: Oliver Lin @ 2026-07-02 10:31 UTC (permalink / raw) To: baolu.lu; +Cc: iommu, linux-kernel, joro, robin.murphy, will, oliver From: oliver <oliver@liuxiaozhen.dev> The current DMI quirk disables VT-d on ThinkPad P50s unconditionally, even when intel_iommu=on is explicitly requested via kernel command line. This breaks kernel parameter precedence and user intent. Make the quirk conditional so that it does not override explicit user enabling of Intel IOMMU. Signed-off-by: Oliver <oliver@liuxiaozhen.dev> --- drivers/iommu/intel/iommu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index a072e9ef63ef..b34b5a60f349 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -201,6 +201,7 @@ static void intel_iommu_domain_free(struct iommu_domain *domain); int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON); +static int intel_iommu_cmdline_on; int intel_iommu_enabled = 0; EXPORT_SYMBOL_GPL(intel_iommu_enabled); @@ -241,10 +242,12 @@ static int __init intel_iommu_setup(char *str) while (*str) { if (!strncmp(str, "on", 2)) { dmar_disabled = 0; + intel_iommu_cmdline_on = 1; pr_info("IOMMU enabled\n"); } else if (!strncmp(str, "off", 3)) { dmar_disabled = 1; no_platform_optin = 1; + intel_iommu_cmdline_on = 0; pr_info("IOMMU disabled\n"); } else if (!strncmp(str, "igfx_off", 8)) { disable_igfx_iommu = 1; @@ -2578,7 +2581,8 @@ 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)) { + if (!force_on && !intel_iommu_cmdline_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"); -- 2.53.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] iommu/vt-d: respect user override for intel_iommu=on on Lenovo ThinkPad P50s 2026-07-02 10:31 ` [PATCH] iommu/vt-d: respect user override for intel_iommu=on " Oliver Lin @ 2026-07-03 1:26 ` Baolu Lu 2026-07-03 9:23 ` [PATCH v3] iommu/vt-d: Disable IOMMU by default " Oliver Lin 0 siblings, 1 reply; 8+ messages in thread From: Baolu Lu @ 2026-07-03 1:26 UTC (permalink / raw) To: Oliver Lin; +Cc: iommu, linux-kernel, joro, robin.murphy, will On 7/2/26 18:31, Oliver Lin wrote: > From: oliver<oliver@liuxiaozhen.dev> > > The current DMI quirk disables VT-d on ThinkPad P50s unconditionally, > even when intel_iommu=on is explicitly requested via kernel command line. The current driver doesn't have the DMI quirk, so this patch cannot be applied to the tree as-is. > This breaks kernel parameter precedence and user intent. > > Make the quirk conditional so that it does not override explicit user > enabling of Intel IOMMU. > > Signed-off-by: Oliver<oliver@liuxiaozhen.dev> > --- > drivers/iommu/intel/iommu.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) Thanks, baolu ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3] iommu/vt-d: Disable IOMMU by default on Lenovo ThinkPad P50s 2026-07-03 1:26 ` Baolu Lu @ 2026-07-03 9:23 ` Oliver Lin 2026-07-13 1:55 ` Baolu Lu 0 siblings, 1 reply; 8+ messages in thread From: Oliver Lin @ 2026-07-03 9:23 UTC (permalink / raw) To: baolu.lu; +Cc: iommu, linux-kernel, joro, robin.murphy, will, Oliver Lin Lenovo ThinkPad P50s exhibits firmware issues when Intel VT-d is enabled. With IOMMU enabled, the system reports DMAR DMA faults during boot, TPM 2.0 (tpm_crb) fails to initialize with timeout errors, and the machine cannot shut down or resume reliably. Booting with intel_iommu=off avoids these issues. Add a DMI quirk to disable Intel IOMMU by default on this platform. If the user explicitly specifies intel_iommu=on on the kernel command line, do not apply the quirk so that VT-d can still be enabled for testing and debugging. Signed-off-by: Oliver Lin <oliver@liuxiaozhen.dev> --- drivers/iommu/intel/iommu.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 849d06dfe1ae..b34b5a60f349 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -201,6 +201,7 @@ static void intel_iommu_domain_free(struct iommu_domain *domain); int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON); +static int intel_iommu_cmdline_on; int intel_iommu_enabled = 0; EXPORT_SYMBOL_GPL(intel_iommu_enabled); @@ -241,10 +242,12 @@ static int __init intel_iommu_setup(char *str) while (*str) { if (!strncmp(str, "on", 2)) { dmar_disabled = 0; + intel_iommu_cmdline_on = 1; pr_info("IOMMU enabled\n"); } else if (!strncmp(str, "off", 3)) { dmar_disabled = 1; no_platform_optin = 1; + intel_iommu_cmdline_on = 0; pr_info("IOMMU disabled\n"); } else if (!strncmp(str, "igfx_off", 8)) { disable_igfx_iommu = 1; @@ -278,6 +281,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 +2581,13 @@ int __init intel_iommu_init(void) force_on = (!intel_iommu_tboot_noforce && tboot_force_iommu()) || platform_optin_force_iommu(); + if (!force_on && !intel_iommu_cmdline_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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3] iommu/vt-d: Disable IOMMU by default on Lenovo ThinkPad P50s 2026-07-03 9:23 ` [PATCH v3] iommu/vt-d: Disable IOMMU by default " Oliver Lin @ 2026-07-13 1:55 ` Baolu Lu 2026-07-13 2:27 ` Oliver Lin 0 siblings, 1 reply; 8+ messages in thread From: Baolu Lu @ 2026-07-13 1:55 UTC (permalink / raw) To: Oliver Lin; +Cc: iommu, linux-kernel, joro, robin.murphy, will On 7/3/26 17:23, Oliver Lin wrote: > Lenovo ThinkPad P50s exhibits firmware issues when Intel VT-d is enabled. Why not fix the firmware issue instead? > With IOMMU enabled, the system reports DMAR DMA faults during boot, > TPM 2.0 (tpm_crb) fails to initialize with timeout errors, and the > machine cannot shut down or resume reliably. Booting with > intel_iommu=off avoids these issues. So the driver already provides a command-line workaround for this firmware issue, right? Why is a hardcoded kernel quirk necessary here? > > Add a DMI quirk to disable Intel IOMMU by default on this platform. > If the user explicitly specifies intel_iommu=on on the kernel command > line, do not apply the quirk so that VT-d can still be enabled for > testing and debugging. > > Signed-off-by: Oliver Lin <oliver@liuxiaozhen.dev> > --- > drivers/iommu/intel/iommu.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) [..snip...] Thanks, baolu ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] iommu/vt-d: Disable IOMMU by default on Lenovo ThinkPad P50s 2026-07-13 1:55 ` Baolu Lu @ 2026-07-13 2:27 ` Oliver Lin 0 siblings, 0 replies; 8+ messages in thread From: Oliver Lin @ 2026-07-13 2:27 UTC (permalink / raw) To: Baolu Lu; +Cc: iommu, linux-kernel, joro, robin.murphy, will On 13/7/2026 09:55, Baolu Lu wrote: >Why not fix the firmware issue instead? >So the driver already provides a command-line workaround for this > firmware issue, right? Why is a hardcoded kernel quirk necessary here? Thanks for the review. The machine is already running the latest available Lenovo BIOS, version 1.45. I am not aware of any newer firmware update that fixes the issue, and the ThinkPad P50s is no longer receiving firmware updates from Lenovo. Yes, intel_iommu=off provides a working command-line workaround. With VT-d enabled, however, the issue occurs during a normal default boot and causes several unrelated failures: DMAR faults are reported, tpm_crb times out during initialization, and shutdown and suspend/resume are unreliable. Adding intel_iommu=off consistently avoids all of these failures. My reason for proposing a DMI quirk was that users installing a current kernel on this platform would otherwise encounter a partially unusable system without knowing that the failures are caused by VT-d or that intel_iommu=off is required. That said, I understand the concern about disabling IOMMU functionality based on a single platform report. At the moment, my testing is limited to one ThinkPad P50s. I can provide the full DMAR, TPM, shutdown, and resume logs for both configurations, and I can also look for reports or testing from additional P50s systems before pursuing the quirk further. Would additional reproductions from other P50s machines be required before a DMI quirk could be considered, or would you prefer that this remain a documented command-line workaround? Thanks, Oliver ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-07-13 2:27 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-20 19:22 [PATCH] iommu/vt-d: Disable IOMMU on Lenovo ThinkPad P50s Oliver Lin
2026-06-21 1:29 ` Baolu Lu
[not found] ` <e4deced7-aabf-44d2-859c-d0b0add48d76@liuxiaozhen.dev>
2026-07-01 17:03 ` Oliver Lin
2026-07-02 10:31 ` [PATCH] iommu/vt-d: respect user override for intel_iommu=on " Oliver Lin
2026-07-03 1:26 ` Baolu Lu
2026-07-03 9:23 ` [PATCH v3] iommu/vt-d: Disable IOMMU by default " Oliver Lin
2026-07-13 1:55 ` Baolu Lu
2026-07-13 2:27 ` Oliver Lin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox