ACPI: PM: Only mark EC GPE for wakeup on Intel systems
authorMario Limonciello <mario.limonciello@amd.com>
Wed, 30 Jun 2021 19:46:06 +0000 (14:46 -0500)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 1 Jul 2021 16:47:02 +0000 (18:47 +0200)
When using s2idle on a variety of AMD notebook systems, they are
experiencing spurious events that the EC or SMU are in the wrong
state leading to a hard time waking up or higher than expected
power consumption.

These events only occur when the EC GPE is inadvertently set as a wakeup
source. Originally the EC GPE was only set as a wakeup source when using
the intel-vbtn or intel-hid drivers in commit 10a08fd65ec1 ("ACPI: PM:
Set up EC GPE for system wakeup from drivers that need it") but during
testing a reporter discovered that this was not enough for their ASUS
Zenbook UX430UNR/i7-8550U to wakeup by lid event or keypress.
Marking the EC GPE for wakeup universally resolved this for that
reporter in commit b90ff3554aa3 ("ACPI: PM: s2idle: Always set up EC GPE
for system wakeup").

However this behavior has lead to a number of problems:

 * On both Lenovo T14 and P14s the keyboard wakeup doesn't work, and
   sometimes the power button event doesn't work.
 * On HP 635 G7 detaching or attaching AC during suspend will cause
   the system not to wakeup
 * On Asus vivobook to prevent detaching AC causing resume problems
 * On Lenovo 14ARE05 to prevent detaching AC causing resume problems
 * On HP ENVY x360  to prevent detaching AC causing resume problems

As there may be other Intel systems besides ASUS Zenbook UX430UNR/i7-8550U
that don't use intel-vbtn or intel-hid, avoid these problems by only
universally marking the EC GPE wakesource on non-AMD systems.

Link: https://patchwork.kernel.org/project/linux-pm/cover/5997740.FPbUVk04hV@kreacher/#22825489
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1230
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1629
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/x86/s2idle.c

index 816bf2c..1c50780 100644 (file)
@@ -417,11 +417,15 @@ static int lps0_device_attach(struct acpi_device *adev,
                mem_sleep_current = PM_SUSPEND_TO_IDLE;
 
        /*
-        * Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the
-        * EC GPE to be enabled while suspended for certain wakeup devices to
-        * work, so mark it as wakeup-capable.
+        * Some Intel based LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U don't
+        * use intel-hid or intel-vbtn but require the EC GPE to be enabled while
+        * suspended for certain wakeup devices to work, so mark it as wakeup-capable.
+        *
+        * Only enable on !AMD as enabling this universally causes problems for a number
+        * of AMD based systems.
         */
-       acpi_ec_mark_gpe_for_wake();
+       if (!acpi_s2idle_vendor_amd())
+               acpi_ec_mark_gpe_for_wake();
 
        return 0;
 }