Re: [PATCH v2] ACPI: x86: Disable wakeup on MSI MS-1592 and MS-1594 dGPU root port
From: Rafael J. Wysocki (Intel)
Date: Mon Nov 09 2026 - 14:33:14 EST
On Sat, Oct 24, 2026 at 7:47 AM Victor Carreras <vicajilau@xxxxxxxxx> wrote:
>
> On MSI Summit E16 Flip A12UCT (motherboard MS-1592, BIOS E1592IMS.111)
> and MSI Prestige 16 Studio A13VE / Summit E16 Flip A13VET (motherboard
> MS-1594, BIOS E1594IMS.115), the I2C touchpad (ELAN0305:00, 04F3:31FD)
> permanently stops generating interrupts as soon as the discrete NVIDIA
> GPU (0000:01:00.0) and its parent PCIe Root Port (0000:00:06.0,
> \_SB.PC00.PEG0) enter D3cold.
>
> In the platform's SSDT (MSI_NB / AdlP_Rvp), \_SB.PC00.PEG0 sets its wake
> GPIO (WAKG) from the BIOS NVS variable P1WP, which erroneously points to
> GPP_A20 (INTC1055:00 pin 62) -- the GPIO interrupt line wired to the
> touchpad.
>
> During boot, \_SB.PC00.PEG0.PON() calls \_SB.SHPO(WAKG, One), setting
> PAD_CFG0_GPP_A20.GPIROUTSCI = 0 and HostSwOwn = 1 so the OS GPIO driver
> owns the pin. However, when the root port runtime-suspends to D3cold,
> Linux enables ACPI wakeup via \_SB.PC00.PEG0._DSW(1, 0, 3), which sets
> WKEN = 1. Subsequent evaluation of \_SB.PC00.PEG0.PXP._OFF -> POFF()
> executes:
>
> If (CondRefOf (WAKG))
> {
> If (((WAKG != Zero) && WKEN))
> {
> \_SB.SHPO (WAKG, Zero)
> }
> }
>
> This switches GPP_A20 ownership to ACPI GPE mode (HostSwOwn = 0,
> GPIROUTSCI = 1), silencing the touchpad interrupt until the dGPU wakes
> back up to D0. Under Windows, _DSW is not armed for S0 D3cold on this
> root port, leaving WKEN = 0 so POFF() powers off the dGPU (\PIN.OFF(PWRG))
> without touching GPP_A20.
>
> Add a PCI quirk in drivers/acpi/x86/utils.c for boards MS-1592 and
> MS-1594 on root port 0000:00:06.0 (8086:464d on 12th Gen Alder Lake-P
> and 8086:a74d on 13th Gen Raptor Lake-P/H) to disable wakeup capability.
> This keeps WKEN = 0 so the root port and dGPU still reach D3cold
> normally while leaving GPP_A20 owned by the GPIO driver.
>
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220725
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Victor Carreras <vicajilau@xxxxxxxxx>
Please see Sashiko's feedback on this one and let me know what you
think about it:
https://sashiko.dev/#/patchset/20261024054711.21587-1-vicajilau%40gmail.com
> ---
> Changes in v2:
> - Move the quirk from drivers/pci/quirks.c to drivers/acpi/x86/utils.c
> as it is x86-specific (Lukas Wunner).
> - Drop clearing adev->wakeup.flags.valid in the final fixup so ACPI
> power resource dependent tracking between pci_acpi_setup() and
> pci_acpi_cleanup() remains balanced.
> - Link to v1: https://lore.kernel.org/r/179272791966.20251.3697951431087014523@xxxxxxxxx
>
> drivers/acpi/x86/utils.c | 47 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c
> index 4189516..84a6ca7 100644
> --- a/drivers/acpi/x86/utils.c
> +++ b/drivers/acpi/x86/utils.c
> @@ -665,3 +665,50 @@ void __init acpi_proc_quirk_mwait_check(void)
> */
> dmi_check_system(acpi_proc_quirk_mwait_dmi_table);
> }
> +
> +/*
> + * On MSI Summit E16 Flip A12UCT (board MS-1592) and MSI Prestige 16 Studio
> + * A13VE / Summit E16 Flip A13VET (board MS-1594), the BIOS SSDT (MSI_NB /
> + * AdlP_Rvp) assigns the touchpad's GPIO interrupt pin (GPP_A20) as the PCIe
> + * wake GPIO (WAKG / P1WP) for the dGPU root port (\_SB.PC00.PEG0, 0000:00:06.0).
> + *
> + * When ACPI wakeup is armed on this root port via _DSW (setting WKEN = 1),
> + * subsequent D3cold transitions (\_SB.PC00.PEG0.PXP._OFF -> POFF) call
> + * \_SB.SHPO(WAKG, Zero), switching GPP_A20 ownership from GPIO driver mode
> + * to ACPI GPE mode and permanently freezing the I2C touchpad (ELAN0305:00).
> + *
> + * Disable wakeup on this root port so _DSW is not armed and WKEN remains zero
> + * during D3cold transitions.
> + */
> +static const struct dmi_system_id msi_peg0_no_wakeup_dmi_table[] = {
> + {
> + .ident = "MSI MS-1592",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
> + DMI_MATCH(DMI_BOARD_NAME, "MS-1592"),
> + },
> + },
> + {
> + .ident = "MSI MS-1594",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
> + DMI_MATCH(DMI_BOARD_NAME, "MS-1594"),
> + },
> + },
> + {}
> +};
> +
> +static void quirk_msi_peg0_no_wakeup(struct pci_dev *dev)
> +{
> + if (pci_dev_id(dev) != PCI_DEVID(0, PCI_DEVFN(6, 0)))
> + return;
> +
> + if (!dmi_check_system(msi_peg0_no_wakeup_dmi_table))
> + return;
> +
> + pci_info(dev, FW_BUG "Disabling ACPI wakeup to avoid touchpad GPIO (GPP_A20) takeover in D3cold\n");
> + device_wakeup_disable(&dev->dev);
> + device_set_wakeup_capable(&dev->dev, false);
> +}
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x464d, quirk_msi_peg0_no_wakeup);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0xa74d, quirk_msi_peg0_no_wakeup);
> --
> 2.55.0
>