Hi, On 3/16/21 8:46 PM, Alex Deucher wrote: > ACPI_LPS0_ENTRY_AMD/ACPI_LPS0_EXIT_AMD are supposedly not > required for AMD platforms, and on some platforms they are > not even listed in the function mask but at least some HP > laptops seem to require it to properly support s0ix. > > Based on a patch from Marcin Bachry <hegel666@xxxxxxxxx>. > > Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1230 > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Marcin Bachry <hegel666@xxxxxxxxx> > --- > drivers/acpi/x86/s2idle.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c > index 2d7ddb8a8cb6..dc3cc021125e 100644 > --- a/drivers/acpi/x86/s2idle.c > +++ b/drivers/acpi/x86/s2idle.c > @@ -317,11 +317,16 @@ static void lpi_check_constraints(void) > } > } > > +static bool acpi_s2idle_vendor_amd(void) > +{ > + return boot_cpu_data.x86_vendor == X86_VENDOR_AMD; > +} > + > static void acpi_sleep_run_lps0_dsm(unsigned int func) > { > union acpi_object *out_obj; > > - if (!(lps0_dsm_func_mask & (1 << func))) > + if (!acpi_s2idle_vendor_amd() && !(lps0_dsm_func_mask & (1 << func))) > return; > > out_obj = acpi_evaluate_dsm(lps0_device_handle, &lps0_dsm_guid, rev_id, func, NULL); Skipping the dsm_func_mask feels a bit wrong to me. The commit message talks about there being a need to unconditional make the calls in the case of the ACPI_LPS0_ENTRY_AMD/ACPI_LPS0_EXIT_AMD calls. Maybe instead add a "skip_func_mask" boolean parameter to acpi_sleep_run_lps0_dsm() and set that to false everywhere except for the 2 ACPI_LPS0_ENTRY_AMD/ACPI_LPS0_EXIT_AMD calls ? This way we can control when to skip the check on a call by call basis, rather then always skipping it on all AMD systems. Regards, Hans > @@ -331,11 +336,6 @@ static void acpi_sleep_run_lps0_dsm(unsigned int func) > func, out_obj ? "successful" : "failed"); > } > > -static bool acpi_s2idle_vendor_amd(void) > -{ > - return boot_cpu_data.x86_vendor == X86_VENDOR_AMD; > -} > - > static int lps0_device_attach(struct acpi_device *adev, > const struct acpi_device_id *not_used) > { >