lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: 
 <CAGwozwHdsJ8RJNMA6QsU0M2KpB0+a+sttH=1Kx5Ecf1jOjF9DQ@mail.gmail.com>
Date: Tue, 27 Jan 2026 21:05:45 +0100
From: Antheas Kapenekakis <lkml@...heas.dev>
To: Jakob Riemenschneider <riemenschneiderjakob@...il.com>
Cc: "Rafael J . Wysocki" <rafael@...nel.org>, Len Brown <lenb@...nel.org>,
 linux-acpi@...r.kernel.org,
	linux-kernel@...r.kernel.org, Antheas Kapenekakis <antheas@...heas.dev>
Subject: Re: [PATCH v2] ACPI: x86: s2idle: Invoke Microsoft _DSM Function 9
 (Turn On Display)

On Tue, 27 Jan 2026 at 21:01, Jakob Riemenschneider
<riemenschneiderjakob@...il.com> wrote:
>
> Windows 11, version 22H2 introduced a new function index (Function 9) to
> the Microsoft LPS0 _DSM, titled "Turn On Display Notification".
>
> According to Microsoft documentation, this function signals to the system
> firmware that the OS intends to turn on the display when exiting Modern
> Standby. This allows the firmware to release Power Limits (PLx) earlier.
>
> Crucially, this patch fixes a functional issue observed on the Lenovo Yoga
> Slim 7i Aura (15ILL9), where system fans and keyboard backlights fail to
> resume after suspend. Investigation linked shows the EC on this device
> turns off these components during sleep but requires the Function 9
> notification to wake them up again.
>
> This patch defines the new function index (ACPI_MS_TURN_ON_DISPLAY) and
> invokes it in acpi_s2idle_restore_early_lps0(). The execution order is
> updated to match the logic of an "intent" signal:
>
> 1. LPS0 Exit (Function 6)
> 2. Turn On Display Intent (Function 9)
> 3. Modern Standby Exit (Function 8)
> 4. Screen On (Function 4)
>
> Invoking Function 9 before the Modern Standby Exit ensures the firmware
> has time to restore power rails and functionality (like fans) before the
> software fully exits the sleep state.
>
> Link: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-firmware-notifications#turn-on-display-notification-function-9
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=220505
> Suggested-by: Antheas Kapenekakis <antheas@...heas.dev>

LGTM, no need for rby, sby covers it.

Consider closes + reported by from bugzilla if there is a V3, I
typically use lkml@...heas.dev but that is small.

I will defer to Rafael now

Best,
Antheas

> Signed-off-by: Jakob Riemenschneider <riemenschneiderjakob@...il.com>
> ---
> v2:
>  - Renamed constant from ACPI_LPS0_MS_DISPLAY_ON to ACPI_MS_TURN_ON_DISPLAY per feedback.
>  - Moved the Function 9 call to occur before MS Exit (Function 8) to act as an intent signal.
>
>  drivers/acpi/x86/s2idle.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index 6d4d06236..de94b57f7 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -45,6 +45,7 @@ static const struct acpi_device_id lps0_device_ids[] = {
>  #define ACPI_LPS0_EXIT         6
>  #define ACPI_LPS0_MS_ENTRY      7
>  #define ACPI_LPS0_MS_EXIT       8
> +#define ACPI_MS_TURN_ON_DISPLAY 9
>
>  /* AMD */
>  #define ACPI_LPS0_DSM_UUID_AMD      "e3f32452-febc-43ce-9039-932122d37721"
> @@ -352,6 +353,8 @@ static const char *acpi_sleep_dsm_state_to_str(unsigned int state)
>                         return "lps0 ms entry";
>                 case ACPI_LPS0_MS_EXIT:
>                         return "lps0 ms exit";
> +               case ACPI_MS_TURN_ON_DISPLAY:
> +                       return "lps0 ms turn on display";
>                 }
>         } else {
>                 switch (state) {
> @@ -612,6 +615,9 @@ static void acpi_s2idle_restore_early_lps0(void)
>         if (lps0_dsm_func_mask_microsoft > 0) {
>                 acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
>                                 lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
> +               /* Intent to turn on display */
> +               acpi_sleep_run_lps0_dsm(ACPI_MS_TURN_ON_DISPLAY,
> +                               lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
>                 /* Modern Standby exit */
>                 acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
>                                 lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
> --
> 2.52.0
>
>


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ