I hate when things that used to work no longer do and this especially holds for the basic stuff. When I got my new Dell XPS 13 (7390 2-in-1) is was really frustrated by the modern standby implementation it uses by default. This post explains briefly how to re-enable legacy—but reliable—standby on this and likely other laptop models to prevent overheating.
I never was a big fan of closing all programs and shutting down my laptop (or formerly my desktop) in the evening. While I was in school and university I mostly used suspend to disk (hibernate) instead of standby, which consumed way more power. But with increasing battery power the standby penalty became negligible and nowadays I rarely shut down my laptop completely.
My new Dell XPS 13, however, gave me a headache: After closing the lid or pressing the power button to enter standby I noticed the next day in the morning that the laptop is slightly warm. Even worse, when putting the laptop in a bag it slowly heated and exited standby to activate cooling on full speed. A bit of googling revealed that Dell defaults to modern standby for this model. Maybe this was the same for my previous XPS 13, but it had no overheating problems.
System Power States
Before focusing on the solution, let’s briefly explain the power states of computers.
- S0: The system is running. All required hardware is powered on, unused components may save power in a low power mode.
- S0 low power idle: This state is also called modern standby. The system is running in low power mode. Some components may stay powered on, e.g. to keep a network connection. This is similar what cell phones do. A benefit of this power state is that it can resume quickly from standby .
- S1-S3: The next three states refer to sleep states where the system appears off. Most components but RAM are powered off. Power usage decreases from S1 to S3. Usually only one of these states is supported by a device.
- S4: Hibernate or suspend RAM to disk. This offers the lowest level of power consumption but keeping your apps open.
- S5: Soft off, full reboot required.
- G3: Mechanical off, full reboot required. No power can be consumed.
The benefits of modern standby are explained in this article. S1-S3 has to be implemented and executed on the firmware (BIOS) level, hence resume is a lot slower in contrast to modern standby. If a SoC supports low power idle this standby method is preferred.
If modern standby works as expected there are usually no reasons to disable it unless you are very power-savvy. But the net if full of complains that modern standby is not reliable.
The Arch Linux Wiki covers all details of how to enable S3.
Basically, you have to add
mem_sleep_default=deep to your kernel command line.
If you are using systemd-boot as boot manager, just add it to your boot entry
There is one caveat, the screen sometimes does not wake up. You have to disable Early Dell Logo Display in the BIOS (POST Behavior > Sign of Life) to get this fixed.
On Windows the story is quite similar, but depends on the used Windows version.
Before you fix it, check which stand-by modes are available by executing
powercfg /a on the command line.
This will yield an output similar to the following, mentioning that S0 low power idle is in use and S3 is not available:
The following sleep states are available on this system: Standby (S0 Low Power Idle) Network Connected Hibernate Fast Startup The following sleep states are not available on this system: Standby (S1) The system firmware does not support this standby state. This standby state is disabled when S0 low power idle is supported. Standby (S2) The system firmware does not support this standby state. This standby state is disabled when S0 low power idle is supported. Standby (S3) This standby state is disabled when S0 low power idle is supported. Hybrid Sleep Standby (S3) is not available. The hypervisor does not support this standby state.
On versions before Windows 20H1 you have to set the following registry key to zero:
But it seems that Microsoft wants to push modern standby forward and removed this feature. So after the update to 20H1 I was left with modern standby again. Bummer. Luckily, In 20H2 Microsoft added back a new registry hack for enabling S3:
So just add this DWORD and you have S3 back.
powercfg /a should yield now the following:
The following sleep states are available on this system: Standby (S3) Hibernate Fast Startup The following sleep states are not available on this system: Standby (S1) The system firmware does not support this standby state. Standby (S2) The system firmware does not support this standby state. Standby (S0 Low Power Idle) The system firmware does not support this standby state. Hybrid Sleep The hypervisor does not support this standby state.
The EFI approach
While googling for a solution I also stumbled over this idea to fix the problem with an EFI application. It simply patches the ACPI tables and disables modern standby completely – regardless of the used operating system. Drawbacks are that secure boot will no longer work and you obviously have to use a boot manager like rEFInd. System-d boot does not seem to support EFI drivers.
I did not go this route but patched Linux and Windows separately, but I keep it here for future reference or when Microsoft removes the new registry hack again.