linux/drivers/acpi
Mario Limonciello d6ebb17ccc ACPI: PM: Revert "Only mark EC GPE for wakeup on Intel systems"
Testing on various upcoming OEM systems shows commit 7b167c4cb4 ("ACPI:
PM: Only mark EC GPE for wakeup on Intel systems") was short
sighted and the symptoms were indicative of other problems. Some OEMs
do have the dedicated GPIOs for the power button but also rely upon
an interrupt to the EC SCI to let the lid work.

The original commit showed spurious activity on Lenovo systems:
     * On both Lenovo T14 and P14s the keyboard wakeup doesn't work, and
       sometimes the power button event doesn't work.

This was confirmed on my end at that time.

However further development in the kernel showed that the issue was
actually the IRQ for the GPIO controller was also shared with the EC SCI.
This was actually fixed by commit 2d54067fcd ("pinctrl: amd: Fix
wakeups when IRQ is shared with SCI").

The original commit also showed problems with AC adapter:
     * 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

Detaching AC adapter causing problems appears to have been a problem
because the EC SCI went off to notify the OS of the power adapter change
but the SCI was ignored and there was no other way to wake up this system
since GPIO controller wasn't properly enabled.  The wakeups were fixed by
enabling the GPIO controller in commit acd47b9f28 ("pinctrl: amd: Handle
wake-up interrupt").

I've confirmed on a variety of OEM notebooks with the following test

 1) echo 1 | sudo tee /sys/power/pm_debug_messages
 2) sudo systemctl suspend
 3) unplug AC adapter, make sure system is still asleep
 4) wake system from lid (which is provided by ACPI SCI on some of them)
 5) dmesg
    a) see the EC GPE dispatched, timekeeping for X seconds (matching ~time
       until AC adapter plug out)
    b) see timekeeping for Y seconds until woke (matching ~time from AC
       adapter until lid event)
 6) Look at /sys/kernel/debug/amd_pmc/s0ix_stats
    "Time (in us) in S0i3" = X + Y - firmware processing time

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2022-02-07 21:02:31 +01:00
..
acpica ACPICA: Fixed a couple of warnings under MSVC 2021-12-27 17:01:28 +01:00
apei x86/sgx: Add check for SGX pages to ghes_do_memory_failure() 2021-11-15 11:13:16 -08:00
arm64 acpi/arm64: fix next_platform_timer() section mismatch error 2021-10-12 17:41:19 +01:00
dptf ACPI: DPTF: Support Raptor Lake 2022-01-17 19:45:38 +01:00
nfit ACPI: NFIT: Import GUID before use 2021-12-18 08:12:40 -08:00
numa cxl for 5.17 2022-01-12 15:57:59 -08:00
pmic ACPI: PMIC: xpower: Fix _TMP ACPI errors 2021-12-08 15:34:57 +01:00
x86 ACPI: PM: Revert "Only mark EC GPE for wakeup on Intel systems" 2022-02-07 21:02:31 +01:00
ac.c ACPI / x86: Introduce an acpi_quirk_skip_acpi_ac_and_battery() helper 2022-01-04 15:40:48 +01:00
acpi_adxl.c
acpi_amba.c
acpi_apd.c More ACPI updates for 5.17-rc1 2022-01-18 08:51:51 +02:00
acpi_cmos_rtc.c
acpi_configfs.c ACPI: configfs: Make get_header() to return error pointer 2021-07-16 19:20:28 +02:00
acpi_dbg.c
acpi_extlog.c
acpi_fpdt.c ACPI: tables: FPDT: Do not print FW_BUG message if record types are reserved 2021-08-25 20:01:07 +02:00
acpi_ipmi.c
acpi_lpat.c
acpi_lpit.c
acpi_lpss.c Merge branches 'acpi-glue', 'acpi-pnp', 'acpi-processor' and 'acpi-soc' 2021-11-02 18:36:40 +01:00
acpi_memhotplug.c ACPI: memhotplug: use a single static memory group for a single memory device 2021-09-08 11:50:23 -07:00
acpi_pad.c ACPI: processor: Replace deprecated CPU-hotplug functions 2021-08-04 20:25:54 +02:00
acpi_pcc.c ACPI: PCC: pcc_ctx can be static 2022-01-12 19:40:31 +01:00
acpi_platform.c
acpi_pnp.c ACPI: PNP: remove duplicated BRI0A49 and BDP3336 entries 2021-09-24 18:12:15 +02:00
acpi_processor.c ACPI: processor: Replace deprecated CPU-hotplug functions 2021-08-04 20:25:54 +02:00
acpi_tad.c
acpi_video.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
acpi_watchdog.c
battery.c Merge branches 'acpi-tables', 'acpi-numa', 'acpi-sysfs', 'acpi-cppc', 'acpi-thermal' and 'acpi-battery' 2022-01-10 17:22:15 +01:00
bgrt.c
blacklist.c
bus.c USB/Thunderbolt changes for 5.17-rc1 2022-01-12 11:27:57 -08:00
button.c ACPI: button: Add DMI quirk for Lenovo Yoga 9 (14INTL5) 2021-08-25 19:57:01 +02:00
container.c
cppc_acpi.c ACPI: CPPC: Drop redundant local variable from cpc_read() 2022-01-17 19:38:55 +01:00
custom_method.c
debugfs.c
device_pm.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
device_sysfs.c ACPI: sysfs: use default_groups in kobj_type 2021-12-28 19:15:41 +01:00
dock.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
ec_sys.c ACPI: EC: Mark the ec_sys write_support param as module_param_hw() 2021-12-01 20:19:30 +01:00
ec.c ACPI: EC: Relocate acpi_ec_create_query() and drop acpi_ec_delete_query() 2021-12-01 20:17:32 +01:00
event.c
evged.c
fan.c
fan.h ACPI: DPTF: Support Raptor Lake 2022-01-17 19:45:38 +01:00
glue.c Revert "ACPI: scan: Release PM resources blocked by unused objects" 2021-11-17 17:05:41 +01:00
hed.c
internal.h ACPI: scan: Change acpi_scan_init() return value type to void 2022-01-12 15:58:49 +01:00
ioapic.c
irq.c
Kconfig ACPI: require CRC32 to build 2022-01-31 20:16:28 +01:00
Makefile Kbuild updates for v5.17 2022-01-19 11:15:19 +02:00
nvs.c
osi.c
osl.c Revert "ACPI: Add memory semantics to acpi_os_map_memory()" 2021-09-23 20:39:36 +02:00
pci_irq.c
pci_link.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
pci_mcfg.c
pci_root.c Merge branches 'acpi-scan', 'acpi-pm', 'acpi-power' and 'acpi-pci' 2022-01-10 16:48:27 +01:00
pci_slot.c
pfr_telemetry.c ACPI: pfr_telemetry: Fix info leak in pfrt_log_ioctl() 2022-01-10 16:36:45 +01:00
pfr_update.c ACPI: pfr_update: Fix return value check in pfru_write() 2022-01-06 18:53:31 +01:00
platform_profile.c ACPI: platform-profile: call sysfs_notify() from platform_profile_store() 2021-08-16 18:32:02 +02:00
power.c Merge branches 'acpi-scan', 'acpi-pm', 'acpi-power' and 'acpi-pci' 2022-01-10 16:48:27 +01:00
pptt.c topology: Represent clusters of CPUs within a die 2021-10-15 11:25:15 +02:00
prmt.c ACPI: PRM: Handle memory allocation and memory remap failure 2021-10-26 15:29:07 +02:00
proc.c proc: remove PDE_DATA() completely 2022-01-22 08:33:37 +02:00
processor_core.c
processor_driver.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
processor_idle.c Merge branches 'acpi-ec' and 'acpi-processor' 2022-01-10 16:57:59 +01:00
processor_pdc.c
processor_perflib.c
processor_thermal.c ACPI: processor: thermal: avoid cpufreq_get_policy() 2021-12-30 19:39:34 +01:00
processor_throttling.c
property.c Merge branches 'acpi-scan', 'acpi-pm', 'acpi-power' and 'acpi-pci' 2022-01-10 16:48:27 +01:00
reboot.c
resource.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
sbs.c
sbshc.c
sbshc.h
scan.c More ACPI updates for 5.17-rc1 2022-01-18 08:51:51 +02:00
sleep.c Power management updates for 5.17-rc1 2022-01-10 20:34:00 -08:00
sleep.h
spcr.c ACPI: SPCR: check if table->serial_port.access_width is too wide 2022-01-11 16:39:14 +01:00
sysfs.c ACPI: sysfs: use default_groups in kobj_type 2021-12-28 19:15:41 +01:00
tables.c cxl for 5.17 2022-01-12 15:57:59 -08:00
thermal.c Merge branches 'acpi-tables', 'acpi-numa', 'acpi-sysfs', 'acpi-cppc', 'acpi-thermal' and 'acpi-battery' 2022-01-10 17:22:15 +01:00
tiny-power-button.c
utils.c ACPI: utils: Fix reference counting in for_each_acpi_dev_match() 2021-07-19 16:22:01 +02:00
video_detect.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
viot.c
wakeup.c