Skip to content

Commit 5dbf509

Browse files
Pratik Vishwakarmarafaeljw
authored andcommitted
ACPI: PM: s2idle: Add support for new Microsoft UUID
This adds supports for _DSM notifications to the Microsoft UUID described by Microsoft documentation for s2idle. Link: https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-firmware-notifications Co-developed-by: Mario Limonciello <[email protected]> Signed-off-by: Mario Limonciello <[email protected]> Signed-off-by: Pratik Vishwakarma <[email protected]> Tested-by: Julian Sikorski <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 3f4b116 commit 5dbf509

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

drivers/acpi/x86/s2idle.c

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,18 @@ static const struct acpi_device_id lps0_device_ids[] = {
3232
{"", },
3333
};
3434

35+
/* Microsoft platform agnostic UUID */
36+
#define ACPI_LPS0_DSM_UUID_MICROSOFT "11e00d56-ce64-47ce-837b-1f898f9aa461"
37+
3538
#define ACPI_LPS0_DSM_UUID "c4eb40a0-6cd2-11e2-bcfd-0800200c9a66"
3639

3740
#define ACPI_LPS0_GET_DEVICE_CONSTRAINTS 1
3841
#define ACPI_LPS0_SCREEN_OFF 3
3942
#define ACPI_LPS0_SCREEN_ON 4
4043
#define ACPI_LPS0_ENTRY 5
4144
#define ACPI_LPS0_EXIT 6
45+
#define ACPI_LPS0_MS_ENTRY 7
46+
#define ACPI_LPS0_MS_EXIT 8
4247

4348
/* AMD */
4449
#define ACPI_LPS0_DSM_UUID_AMD "e3f32452-febc-43ce-9039-932122d37721"
@@ -51,6 +56,9 @@ static acpi_handle lps0_device_handle;
5156
static guid_t lps0_dsm_guid;
5257
static int lps0_dsm_func_mask;
5358

59+
static guid_t lps0_dsm_guid_microsoft;
60+
static int lps0_dsm_func_mask_microsoft;
61+
5462
/* Device constraint entry structure */
5563
struct lpi_device_info {
5664
char *name;
@@ -366,14 +374,18 @@ static int lps0_device_attach(struct acpi_device *adev,
366374
rev_id = 0;
367375
lps0_dsm_func_mask = validate_dsm(adev->handle,
368376
ACPI_LPS0_DSM_UUID_AMD, rev_id, &lps0_dsm_guid);
377+
lps0_dsm_func_mask_microsoft = validate_dsm(adev->handle,
378+
ACPI_LPS0_DSM_UUID_MICROSOFT, rev_id,
379+
&lps0_dsm_guid_microsoft);
369380
} else {
370381
rev_id = 1;
371382
lps0_dsm_func_mask = validate_dsm(adev->handle,
372383
ACPI_LPS0_DSM_UUID, rev_id, &lps0_dsm_guid);
384+
lps0_dsm_func_mask_microsoft = -EINVAL;
373385
}
374386

375-
if (lps0_dsm_func_mask < 0)
376-
return 0;//function eval failed
387+
if (lps0_dsm_func_mask < 0 && lps0_dsm_func_mask_microsoft < 0)
388+
return 0; //function evaluation failed
377389

378390
lps0_device_handle = adev->handle;
379391

@@ -412,7 +424,14 @@ int acpi_s2idle_prepare_late(void)
412424
if (pm_debug_messages_on)
413425
lpi_check_constraints();
414426

415-
if (acpi_s2idle_vendor_amd()) {
427+
if (lps0_dsm_func_mask_microsoft > 0) {
428+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
429+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
430+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
431+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
432+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
433+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
434+
} else if (acpi_s2idle_vendor_amd()) {
416435
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD,
417436
lps0_dsm_func_mask, lps0_dsm_guid);
418437
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD,
@@ -432,7 +451,14 @@ void acpi_s2idle_restore_early(void)
432451
if (!lps0_device_handle || sleep_no_lps0)
433452
return;
434453

435-
if (acpi_s2idle_vendor_amd()) {
454+
if (lps0_dsm_func_mask_microsoft > 0) {
455+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
456+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
457+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
458+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
459+
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
460+
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
461+
} else if (acpi_s2idle_vendor_amd()) {
436462
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT_AMD,
437463
lps0_dsm_func_mask, lps0_dsm_guid);
438464
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD,

0 commit comments

Comments
 (0)