[PATCH 2/2] platform/x86: force LPS0 functions for AMD
Hans de Goede
hdegoede at redhat.com
Wed Mar 17 09:18:51 UTC 2021
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 at gmail.com>.
>
> Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1230
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> Cc: Marcin Bachry <hegel666 at gmail.com>
> ---
> 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)
> {
>
More information about the amd-gfx
mailing list