Bug 216574

Summary: Hybrid System Suspend broken HP EliteBook 845 G8 (a.k.a. Hybrid Sleep / s2both) (s2idle Notebook)
Product: Drivers Reporter: kolAflash (kolAflash)
Component: Platform_x86Assignee: drivers_platform_x86 (drivers_platform_x86)
Status: RESOLVED CODE_FIX    
Severity: normal CC: mario.limonciello
Priority: P1    
Hardware: AMD   
OS: Linux   
Kernel Version: 6.0 Subsystem:
Regression: No Bisected commit-id:
Attachments: kernel log for hybrid sleep with s2idle: v6.0
Possible solution

Description kolAflash 2022-10-13 01:11:50 UTC
Created attachment 302984 [details]
kernel log for hybrid sleep with s2idle: v6.0

Hybrid Sleep isn't working on the HP EliteBook 845 G8 Notebook.
Hybrid Sleep is documented here as "Hybrid System Suspend":
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/admin-guide/pm/sleep-states.rst?h=v6.0.1#n220

uswsusp called this s2both.
(uswsusp is deprecated, but "Hybrid System Suspend" is currently supported by the kernel if I don't get the documentation wrong)

This bug is forked off from:
https://bugzilla.kernel.org/show_bug.cgi?id=216516#c34



I initiate Hybrid Sleep this way:
echo suspend > /sys/power/disk
echo disk > /sys/power/state

But the system doesn't correctly enter Hybrid Sleep by activating s2idle.
Instead the system seems to do just a hibernation to disk.
So the system simply shuts down completely. At power on it resumes from swapfile.

Correct behaviour would be to write the memory to swapfile (like hibernation to disk), but then enter s2idle.
(the idea behind hybrid sleep is to prevent data loss if the battery is getting drained while being in some suspend to memory)



The EliteBook 845 G8 (usually) only supports "s2idle" and no "deep" S3 mem_sleep mode.
See: https://bugzilla.kernel.org/show_bug.cgi?id=216516#c5

Using "systemctl start hybrid-sleep.target" yields the same result.
Please see attached dmesg output.
Comment 1 Mario Limonciello (AMD) 2022-10-13 02:01:52 UTC
Created attachment 302985 [details]
Possible solution

I glanced through the kernel code and it seems to me it's currently hardcoded to try to go into S3 instead of what the kernel is configured for (which may be s2idle).

See if this patch helps.
Comment 2 kolAflash 2022-10-13 03:01:06 UTC
@Mario

Your patch works like a charm :-)

v6.0.1 with your patch solves the problem.
Hybrid System Suspend works like intended.

v6.0.1 is still broken.

Do you need anything else from me to submit the patch to master?
(and maybe to stable branches)
Comment 3 Mario Limonciello (AMD) 2022-10-13 03:56:20 UTC
I've submitted it as https://lore.kernel.org/linux-pm/20221013035017.5098-1-mario.limonciello@amd.com/T/#u .
Comment 4 Mario Limonciello (AMD) 2022-10-31 12:42:26 UTC
Fixed in 6.1-rc3 and also will trickle into stable kernels.
https://github.com/torvalds/linux/commit/85850af4fc47132f3f2f0dd698b90f67906600b4