diff mbox series

[2/2] ACPI: PM: Include alternate AMDI0005 id in special behaviour

Message ID 20211002041840.2058647-2-nakato@nakato.io (mailing list archive)
State Deferred, archived
Headers show
Series [1/2] platform/x86: amd-pmc: Add alternative acpi id for PMC controller | expand

Commit Message

Sachi King Oct. 2, 2021, 4:18 a.m. UTC
The Surface Laptop 4 AMD has used the AMD0005 to identify this
controller instead of using the appropriate ACPI ID AMDI0005.  The
AMD0005 needs the same special casing as AMDI0005.

Cc: <stable@vger.kernel.org> # 5.14+
Signed-off-by: Sachi King <nakato@nakato.io>
---
 drivers/acpi/x86/s2idle.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Mario Limonciello Oct. 8, 2021, 6:57 p.m. UTC | #1
On 10/1/2021 23:18, Sachi King wrote:
> The Surface Laptop 4 AMD has used the AMD0005 to identify this
> controller instead of using the appropriate ACPI ID AMDI0005.  The
> AMD0005 needs the same special casing as AMDI0005.

Rafael, if you don't mind can you please add this to the commit message 
when you pick this up for future reference in case we need to come back 
to the ACPI tables that prompted this:

Link: 
https://github.com/linux-surface/acpidumps/tree/master/surface_laptop_4_amd

> 
> Cc: <stable@vger.kernel.org> # 5.14+
> Signed-off-by: Sachi King <nakato@nakato.io>

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   drivers/acpi/x86/s2idle.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index bd92b549fd5a..1c48358b43ba 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -371,7 +371,7 @@ static int lps0_device_attach(struct acpi_device *adev,
>   		return 0;
>   
>   	if (acpi_s2idle_vendor_amd()) {
> -		/* AMD0004, AMDI0005:
> +		/* AMD0004, AMD0005, AMDI0005:
>   		 * - Should use rev_id 0x0
>   		 * - function mask > 0x3: Should use AMD method, but has off by one bug
>   		 * - function mask = 0x3: Should use Microsoft method
> @@ -390,6 +390,7 @@ static int lps0_device_attach(struct acpi_device *adev,
>   					ACPI_LPS0_DSM_UUID_MICROSOFT, 0,
>   					&lps0_dsm_guid_microsoft);
>   		if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") ||
> +						 !strcmp(hid, "AMD0005") ||
>   						 !strcmp(hid, "AMDI0005"))) {
>   			lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1;
>   			acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n",
>
Hans de Goede Oct. 11, 2021, 1:47 p.m. UTC | #2
Hi,

On 10/2/21 6:18 AM, Sachi King wrote:
> The Surface Laptop 4 AMD has used the AMD0005 to identify this
> controller instead of using the appropriate ACPI ID AMDI0005.  The
> AMD0005 needs the same special casing as AMDI0005.
> 
> Cc: <stable@vger.kernel.org> # 5.14+
> Signed-off-by: Sachi King <nakato@nakato.io>

Rafael, I assume that you will pick up this one?  Please add the
following tags from other parts of the thread:

Link: https://github.com/linux-surface/acpidumps/tree/master/surface_laptop_4_amd
Link: https://gist.github.com/nakato/2a1a7df1a45fe680d7a08c583e1bf863
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

Regards,

Hans



> ---
>  drivers/acpi/x86/s2idle.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index bd92b549fd5a..1c48358b43ba 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -371,7 +371,7 @@ static int lps0_device_attach(struct acpi_device *adev,
>  		return 0;
>  
>  	if (acpi_s2idle_vendor_amd()) {
> -		/* AMD0004, AMDI0005:
> +		/* AMD0004, AMD0005, AMDI0005:
>  		 * - Should use rev_id 0x0
>  		 * - function mask > 0x3: Should use AMD method, but has off by one bug
>  		 * - function mask = 0x3: Should use Microsoft method
> @@ -390,6 +390,7 @@ static int lps0_device_attach(struct acpi_device *adev,
>  					ACPI_LPS0_DSM_UUID_MICROSOFT, 0,
>  					&lps0_dsm_guid_microsoft);
>  		if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") ||
> +						 !strcmp(hid, "AMD0005") ||
>  						 !strcmp(hid, "AMDI0005"))) {
>  			lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1;
>  			acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n",
>
Rafael J. Wysocki Oct. 12, 2021, 2:01 p.m. UTC | #3
On Mon, Oct 11, 2021 at 3:47 PM Hans de Goede <hdegoede@redhat.com> wrote:
>
> Hi,
>
> On 10/2/21 6:18 AM, Sachi King wrote:
> > The Surface Laptop 4 AMD has used the AMD0005 to identify this
> > controller instead of using the appropriate ACPI ID AMDI0005.  The
> > AMD0005 needs the same special casing as AMDI0005.
> >
> > Cc: <stable@vger.kernel.org> # 5.14+
> > Signed-off-by: Sachi King <nakato@nakato.io>
>
> Rafael, I assume that you will pick up this one?  Please add the
> following tags from other parts of the thread:
>
> Link: https://github.com/linux-surface/acpidumps/tree/master/surface_laptop_4_amd
> Link: https://gist.github.com/nakato/2a1a7df1a45fe680d7a08c583e1bf863
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
>

Applied as 5.15-rc material.

Thanks for collecting the tags for me Hans!


> > ---
> >  drivers/acpi/x86/s2idle.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> > index bd92b549fd5a..1c48358b43ba 100644
> > --- a/drivers/acpi/x86/s2idle.c
> > +++ b/drivers/acpi/x86/s2idle.c
> > @@ -371,7 +371,7 @@ static int lps0_device_attach(struct acpi_device *adev,
> >               return 0;
> >
> >       if (acpi_s2idle_vendor_amd()) {
> > -             /* AMD0004, AMDI0005:
> > +             /* AMD0004, AMD0005, AMDI0005:
> >                * - Should use rev_id 0x0
> >                * - function mask > 0x3: Should use AMD method, but has off by one bug
> >                * - function mask = 0x3: Should use Microsoft method
> > @@ -390,6 +390,7 @@ static int lps0_device_attach(struct acpi_device *adev,
> >                                       ACPI_LPS0_DSM_UUID_MICROSOFT, 0,
> >                                       &lps0_dsm_guid_microsoft);
> >               if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") ||
> > +                                              !strcmp(hid, "AMD0005") ||
> >                                                !strcmp(hid, "AMDI0005"))) {
> >                       lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1;
> >                       acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n",
> >
>
diff mbox series

Patch

diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
index bd92b549fd5a..1c48358b43ba 100644
--- a/drivers/acpi/x86/s2idle.c
+++ b/drivers/acpi/x86/s2idle.c
@@ -371,7 +371,7 @@  static int lps0_device_attach(struct acpi_device *adev,
 		return 0;
 
 	if (acpi_s2idle_vendor_amd()) {
-		/* AMD0004, AMDI0005:
+		/* AMD0004, AMD0005, AMDI0005:
 		 * - Should use rev_id 0x0
 		 * - function mask > 0x3: Should use AMD method, but has off by one bug
 		 * - function mask = 0x3: Should use Microsoft method
@@ -390,6 +390,7 @@  static int lps0_device_attach(struct acpi_device *adev,
 					ACPI_LPS0_DSM_UUID_MICROSOFT, 0,
 					&lps0_dsm_guid_microsoft);
 		if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") ||
+						 !strcmp(hid, "AMD0005") ||
 						 !strcmp(hid, "AMDI0005"))) {
 			lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1;
 			acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n",