summarylogtreecommitdiffstats
path: root/sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch
diff options
context:
space:
mode:
authordragonn2021-09-05 16:40:03 +0200
committerdragonn2021-09-05 16:40:03 +0200
commit5164f28d29711aac1832984a2d968179a7af26e7 (patch)
treef630b2c06b7938679ae93b01b7b2eb93c85b076e /sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch
parent1e30d1bc1cfd84656adc3a098416fc462deb1941 (diff)
downloadaur-5164f28d29711aac1832984a2d968179a7af26e7.tar.gz
5.14.1
Diffstat (limited to 'sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch')
-rw-r--r--sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch b/sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch
new file mode 100644
index 000000000000..6e0bb2b3c4d2
--- /dev/null
+++ b/sys-kernel_arch-sources-g14_files-9007-s2idle-call-multiple-methods-test.patch
@@ -0,0 +1,128 @@
+From 00e5506bbaa3259a5e9ac98106dcfc60b1adecab Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Tue, 31 Aug 2021 11:36:19 -0500
+Subject: [PATCH] ACPI: PM: s2idle: Run both AMD and Microsoft methods if both
+ are supported
+
+It was reported that on "HP ENVY x360" that power LED does not come back
+on, certain keys like brightness controls do not work, and the fan never
+spins up, even under load.
+
+In analysis of the SSDT it's clear that the Microsoft UUID doesn't provide
+functional support, but rather the AMD UUID should be supporting this
+system.
+
+Because this is a gap in the expected logic, confirmation with internal
+team is that AMD uPEP *does* run even when Microsoft UUID present, but
+most OEM systems have adopted value of "0x3" for supported functions and
+hence nothing runs.
+
+Henceforth add support for running both Microsoft and AMD methods. This
+approach will also allow the same logic on Intel systems if desired at a
+future time as well by pulling the evaluation of
+`lps0_dsm_func_mask_microsoft` out of the if block for
+`acpi_s2idle_vendor_amd`.
+
+BugLink: https://gitlab.freedesktop.org/drm/amd/-/issues/1691
+Reported-by: Maxwell Beck <max@ryt.one>
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+---
+ drivers/acpi/x86/s2idle.c | 67 +++++++++++++++++++++++----------------
+ 1 file changed, 39 insertions(+), 28 deletions(-)
+
+diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
+index 3a308461246a..7d1976e5dd8b 100644
+--- a/drivers/acpi/x86/s2idle.c
++++ b/drivers/acpi/x86/s2idle.c
+@@ -449,25 +449,30 @@ int acpi_s2idle_prepare_late(void)
+ if (pm_debug_messages_on)
+ lpi_check_constraints();
+
+- if (lps0_dsm_func_mask_microsoft > 0) {
++ /* screen off */
++ if (lps0_dsm_func_mask > 0)
++ acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
++ ACPI_LPS0_SCREEN_OFF_AMD :
++ ACPI_LPS0_SCREEN_OFF,
++ lps0_dsm_func_mask, lps0_dsm_guid);
++
++ if (lps0_dsm_func_mask_microsoft > 0)
+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
+- lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
++
++ /* lps0 entry */
++ if (lps0_dsm_func_mask > 0)
++ acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
++ ACPI_LPS0_ENTRY_AMD :
++ ACPI_LPS0_ENTRY,
++ lps0_dsm_func_mask, lps0_dsm_guid);
++ if (lps0_dsm_func_mask_microsoft > 0) {
+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
+- } else if (acpi_s2idle_vendor_amd()) {
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- } else {
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
+- lps0_dsm_func_mask, lps0_dsm_guid);
++ /* modern standby entry */
++ acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
++ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
+ }
+-
+ return 0;
+ }
+
+@@ -476,24 +481,30 @@ void acpi_s2idle_restore_early(void)
+ if (!lps0_device_handle || sleep_no_lps0)
+ return;
+
+- if (lps0_dsm_func_mask_microsoft > 0) {
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
+- lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
++ /* mdoern standby exit */
++ if (lps0_dsm_func_mask_microsoft > 0)
+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
+- lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
+- } else if (acpi_s2idle_vendor_amd()) {
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT_AMD,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- } else {
++
++ /* lps0 exit */
++ if (lps0_dsm_func_mask > 0)
++ acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
++ ACPI_LPS0_EXIT_AMD :
++ ACPI_LPS0_EXIT,
++ lps0_dsm_func_mask, lps0_dsm_guid);
++ if (lps0_dsm_func_mask_microsoft > 0)
+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
+- lps0_dsm_func_mask, lps0_dsm_guid);
++ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
++
++ /* screen on */
++ if (lps0_dsm_func_mask_microsoft > 0)
+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
+- lps0_dsm_func_mask, lps0_dsm_guid);
+- }
++ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
++ if (lps0_dsm_func_mask > 0)
++ acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
++ ACPI_LPS0_SCREEN_ON_AMD :
++ ACPI_LPS0_SCREEN_ON,
++ lps0_dsm_func_mask, lps0_dsm_guid);
+ }
+
+ static const struct platform_s2idle_ops acpi_s2idle_ops_lps0 = {
+--
+GitLab