[PATCH] platform/x86/amd/pmc: Add T14 Gen2 AMD (20XL) to s2idle quirk list

Yap Weei Choong posted 1 patch 1 week ago
drivers/platform/x86/amd/pmc/pmc-quirks.c | 8 ++++++++
1 file changed, 8 insertions(+)
[PATCH] platform/x86/amd/pmc: Add T14 Gen2 AMD (20XL) to s2idle quirk list
Posted by Yap Weei Choong 1 week ago
The ThinkPad T14 Gen 2 AMD was sold under two machine types, 20XK and
20XL, but only 20XK has been in the s2idle quirk list since the quirk
was introduced in commit 455cd867b85b ("platform/x86: thinkpad_acpi:
Add a s2idle resume quirk for a number of laptops").

On 20XL machines the firmware SMI handler therefore still runs on the
NVMe D3->D0 transition when exiting suspend-to-idle. With IOMMU
translation enabled (the default), this intermittently stalls resume
for ~10.25 seconds: seven devices across three root ports (nvme, both
xhci_hcd functions, xhci-pci-renesas, snd_hda_intel x2, snd_rn_pci_acp3x)
block in pci_pm_resume_noirq and are released simultaneously, consistent
with all cores being held in SMM.

Add the missing 20XL machine type, mirroring the existing 20XK entry.
This is the same class of omission fixed by commit 9a469c6dfab3
("platform/x86: thinkpad_acpi: Add missing T14s Gen1 type to s2idle
quirk list").

Verified on a ThinkPad T14 Gen 2a (type 20XLS41C00, BIOS R1MET62W 1.32,
kernel 6.12.95): with this entry the quirk message appears at probe and
a 14-hour suspend resumes in ~1s with no noirq stalls, where previously
even short suspends could hit the ~10s delay. A further two-day soak
(short naps and two ~14-hour suspends) showed every resume clean.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=221755
Signed-off-by: Yap Weei Choong <ywc8891@gmail.com>
Tested-by: Yap Weei Choong <ywc8891@gmail.com>
---
 drivers/platform/x86/amd/pmc/pmc-quirks.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/platform/x86/amd/pmc/pmc-quirks.c b/drivers/platform/x86/amd/pmc/pmc-quirks.c
index 74ddf1d82..09a30f333 100644
--- a/drivers/platform/x86/amd/pmc/pmc-quirks.c
+++ b/drivers/platform/x86/amd/pmc/pmc-quirks.c
@@ -71,6 +71,14 @@ static const struct dmi_system_id fwbug_list[] = {
 			DMI_MATCH(DMI_PRODUCT_NAME, "20XK"),
 		}
 	},
+	{
+		.ident = "T14 Gen2 AMD",
+		.driver_data = &quirk_s2idle_spurious_8042,
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "20XL"),
+		}
+	},
 	{
 		.ident = "T14 Gen1 AMD",
 		.driver_data = &quirk_s2idle_spurious_8042,
-- 
2.47.3
Re: [PATCH] platform/x86/amd/pmc: Add T14 Gen2 AMD (20XL) to s2idle quirk list
Posted by Ilpo Järvinen 3 days, 12 hours ago
On Fri, 17 Jul 2026 14:07:45 +0800, Yap Weei Choong wrote:

> The ThinkPad T14 Gen 2 AMD was sold under two machine types, 20XK and
> 20XL, but only 20XK has been in the s2idle quirk list since the quirk
> was introduced in commit 455cd867b85b ("platform/x86: thinkpad_acpi:
> Add a s2idle resume quirk for a number of laptops").
> 
> On 20XL machines the firmware SMI handler therefore still runs on the
> NVMe D3->D0 transition when exiting suspend-to-idle. With IOMMU
> translation enabled (the default), this intermittently stalls resume
> for ~10.25 seconds: seven devices across three root ports (nvme, both
> xhci_hcd functions, xhci-pci-renesas, snd_hda_intel x2, snd_rn_pci_acp3x)
> block in pci_pm_resume_noirq and are released simultaneously, consistent
> with all cores being held in SMM.
> 
> [...]

Thank you for your contribution, it has been applied to my local
review-ilpo-next branch. Note it will show up in the public
platform-drivers-x86/review-ilpo-next branch only once I've pushed my
local branch there, which might take a while.

FYI [if applicable to your patch], as per Linus' policy change, also
fixes are mostly routed through for-next unless the fix is for a
commit introduced in the most recent cycle or is clearly a regression
fix.

The list of commits applied:
[1/1] platform/x86/amd/pmc: Add T14 Gen2 AMD (20XL) to s2idle quirk list
      commit: e25fb2258bddbcf70df69d1358be3e1274bdc5f2

--
 i.
Re: [PATCH] platform/x86/amd/pmc: Add T14 Gen2 AMD (20XL) to s2idle quirk list
Posted by Mario Limonciello 1 week ago

On 7/17/26 01:07, Yap Weei Choong wrote:
> The ThinkPad T14 Gen 2 AMD was sold under two machine types, 20XK and
> 20XL, but only 20XK has been in the s2idle quirk list since the quirk
> was introduced in commit 455cd867b85b ("platform/x86: thinkpad_acpi:
> Add a s2idle resume quirk for a number of laptops").
> 
> On 20XL machines the firmware SMI handler therefore still runs on the
> NVMe D3->D0 transition when exiting suspend-to-idle. With IOMMU
> translation enabled (the default), this intermittently stalls resume
> for ~10.25 seconds: seven devices across three root ports (nvme, both
> xhci_hcd functions, xhci-pci-renesas, snd_hda_intel x2, snd_rn_pci_acp3x)
> block in pci_pm_resume_noirq and are released simultaneously, consistent
> with all cores being held in SMM.
> 
> Add the missing 20XL machine type, mirroring the existing 20XK entry.
> This is the same class of omission fixed by commit 9a469c6dfab3
> ("platform/x86: thinkpad_acpi: Add missing T14s Gen1 type to s2idle
> quirk list").
> 
> Verified on a ThinkPad T14 Gen 2a (type 20XLS41C00, BIOS R1MET62W 1.32,
> kernel 6.12.95): with this entry the quirk message appears at probe and
> a 14-hour suspend resumes in ~1s with no noirq stalls, where previously
> even short suspends could hit the ~10s delay. A further two-day soak
> (short naps and two ~14-hour suspends) showed every resume clean.
> 
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=221755
> Signed-off-by: Yap Weei Choong <ywc8891@gmail.com>
> Tested-by: Yap Weei Choong <ywc8891@gmail.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
> ---
>   drivers/platform/x86/amd/pmc/pmc-quirks.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/platform/x86/amd/pmc/pmc-quirks.c b/drivers/platform/x86/amd/pmc/pmc-quirks.c
> index 74ddf1d82..09a30f333 100644
> --- a/drivers/platform/x86/amd/pmc/pmc-quirks.c
> +++ b/drivers/platform/x86/amd/pmc/pmc-quirks.c
> @@ -71,6 +71,14 @@ static const struct dmi_system_id fwbug_list[] = {
>   			DMI_MATCH(DMI_PRODUCT_NAME, "20XK"),
>   		}
>   	},
> +	{
> +		.ident = "T14 Gen2 AMD",
> +		.driver_data = &quirk_s2idle_spurious_8042,
> +		.matches = {
> +			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
> +			DMI_MATCH(DMI_PRODUCT_NAME, "20XL"),
> +		}
> +	},
>   	{
>   		.ident = "T14 Gen1 AMD",
>   		.driver_data = &quirk_s2idle_spurious_8042,