• Mario Limonciello's avatar
    ACPI: PM: Revert "Only mark EC GPE for wakeup on Intel systems" · d6ebb17c
    Mario Limonciello authored
    Testing on various upcoming OEM systems shows commit 7b167c4c ("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 2d54067f ("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 acd47b9f ("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: default avatarMario Limonciello <mario.limonciello@amd.com>
    Tested-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    d6ebb17c
s2idle.c 14.1 KB