Legion Go S - EC is chatty during sleep and heats up device after charging
Brief summary of the problem:
Due to very likely what is a BIOS bug related to peripherals, the EC of the Legion Go S (Z2 Go/Rembrant) can get into a state where it repeatedly wakes up the device, causing a low residency % and draining the battery, while heating the device to a concerning degree.
In addition, device completely thermal soaks and overheats while charging asleep, to the point it thermally shuts down once it wakes up, but sleep residency is normal.
Hardware description:
Legion Go S, with Z2 Go Rembrandt CPU and 16GB of RAM.
System information:
- Distro name and Version: Bazzite/Arch
- Kernel version: 6.12.11-202 but also verified on stock 6.12, 6.11, 6.10 with external device caveat (logs from 6.12.9)
How to reproduce the issue:
Sleep the device. Occurrence of the bug varies depending on the state of peripherals before sleep and CPU utilization.
If an external SSD/dock are connected and the device is under load, occurrence is around 90%.
If an external SSD/dock are connected and the device is not under load, occurrence is around 15%.
If no peripherals have been plugged in since boot, it does not happen.
If the device has been charged before sleep and is under stress, occurrence is around 20%. If it happens, it is very likely to happen again. Ie, we need around 5 charge cycles to get it to happen.
Since plugging in an external SSD causes an occurrence of the issue, but could be semi-expected, it is very hard to reproduce cleanly with a stock kernel without replacing the current image given no peripherals can be connected. Failure logs look identical between stock kernel w/ external SSD and Bazzite kernel with internal NVME.
Attached files:
- amd_s2idle report (no peripherals/tainted kernel): s2idle_report-2025-01-29.txt, no peripherals have been plugged in since boot, device was charging on the first sleeps, and unplugged prior to the last one (this log took around 10 attempts to capture and have --debug-ec on).
- Stock 6.12 kernel (w/ external ssd):
-
stress -c 10
s2idle_fail_80s_stress.txt - no CPU load (works) s2idle_nofail2_80s_nostress.txt
- no CPU load (works) s2idle_nofail3_80s_nostress.txt
- no CPU load (works) s2idle_nofail_80s_nostress.txt
-