system76 / ec

System76 Open Source Embedded Controller
GNU General Public License v3.0
328 stars 72 forks source link

galp3-c: Touchpad not always restored on S3 resume #195

Open crawfxrd opened 3 years ago

crawfxrd commented 3 years ago

This blocks the Open Firmware release for galp3-c and galp4.

Affects

Steps to reproduce

To ease reproduction of this issue, I am using a modified suspender.sh script from the private testing repo. It checks for the existence of/sys/devices/platform/i8042/serio1/input instead of running a certain number of times.

Expected behavior

The touchpad functions on every resume.

Actual behavior

Consistently, but after an arbitrary amount of suspends, the touchpad no longer functions.

After enabling TRACE debugging, I see that all kbc mouse logs stop occurring once the device is lost.

In the case of the galp3-c, functionality does not seem to be restored until a reboot. (Although I was not particularly interested in seeing it would return after more suspend cycles, so only attempted more suspend cycles once.)

crawfxrd commented 3 years ago

With i8042.debug=1 on Linux, you can see that IRQ12 stops happening.

crawfxrd commented 3 years ago

The mouse reset (0xDD 0xFF) never completes: TDS isn't set after 10k (PS2_TIMEOUT) reads, but neither is TOER. It's normally complete on the first read.

I sometimes see more ACPI timeouts related to this as well (about 3 times in 20 repros).

[  403.492994] i8042: [100527] d4 -> i8042 (command)
[  403.493581] i8042: [100527] ff -> i8042 (parameter)
[  403.574765] usb 1-7: reset high-speed USB device number 3 using xhci_hcd
[  403.583216] ata1: SATA link down (SStatus 4 SControl 300)
[  403.749599] OOM killer enabled.
[  403.749603] Restarting tasks ... done.
[  403.753510] video LNXVIDEO:00: Restoring backlight state
[  403.774779] PM: suspend exit
[  404.514746] i8042: [100783] d4 -> i8042 (command)
[  405.138280] i8042: [100938]      -- i8042 (wait write timeout)
[  405.991647] ACPI Error: AE_TIME, Returned by Handler for [EmbeddedControl] (20201113/evregion-294)
[  405.991655] ACPI Error: Timeout from EC hardware or EC device driver (20201113/evregion-304)

[  405.991670] No Local Variables are initialized for Method [SKBL]

[  405.991672] Initialized Arguments for Method [SKBL]:  (1 arguments defined for method invocation)
[  405.991672]   Arg0:   00000000adf03106 <Obj>           Integer 0000000000000000

[  408.492877] ACPI Error: AE_TIME, Aborting method \_SB.S76D.SKBL due to previous error (AE_TIME) (20201113/psparse-529)
[  408.492921] leds system76_acpi::kbd_backlight: Setting an LED's brightness failed (-1)
[  408.492924]  (20201113/psparse-529)
[  408.492925] Returned by Handler for [EmbeddedControl] (20201113/evregion-294)
[  408.492926] ACPI Error: Timeout from EC hardware or EC device driver (20201113/evregion-304)

[  408.492933] No Local Variables are initialized for Method [SAPL]

[  408.492934] Initialized Arguments for Method [SAPL]:  (1 arguments defined for method invocation)
[  408.492935]   Arg0:   00000000ae89d4fc <Obj>           Integer 0000000000000000

[  408.492940] ACPI Error: Aborting method \_SB.S76D.SAPL due to previous error (AE_TIME) (20201113/psparse-529)
[  408.492946] leds system76_acpi::airplane: Setting an LED's brightness failed (-1)
[  408.814697] i8042: [101857] d4 -> i8042 (command)
[  408.825646] i8042: [101860] e8 -> i8042 (parameter)
crawfxrd commented 3 years ago

201 appears to have fixed the ACPI timeouts.