Ryzen 7000 (Raphael) introduced AMDI0008 for _HID. This ID was added
in commit ed470febf837 ("ACPI: PM: s2idle: Add support for upcoming AMD
uPEP HID AMDI008"), but then removed in favor of aligning all new IDs
to Rembrandt support in commit fd894f05cf30 ("ACPI: x86: s2idle: If a
new AMD _HID is missing assume Rembrandt").
Unfortunately there was a mistake in commit 100a57379380 ("ACPI: x86:
s2idle: Move _HID handling for AMD systems into structures") that can
lead to a NULL pointer dereference accessing `dev_id->driver_data` in
the sentinel of `amd_hid_ids`. Fix this dereference.
Reported-by: Richard Gong <[email protected]>
Fixes: 100a57379380 ("ACPI: x86: s2idle: Move _HID handling for AMD systems into structures")
Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/acpi/x86/s2idle.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
index eedd21d8a284..3ae2ba74de92 100644
--- a/drivers/acpi/x86/s2idle.c
+++ b/drivers/acpi/x86/s2idle.c
@@ -470,7 +470,7 @@ static int lps0_device_attach(struct acpi_device *adev,
for (dev_id = &amd_hid_ids[0]; dev_id->id[0]; dev_id++)
if (acpi_dev_hid_uid_match(adev, dev_id->id, NULL))
break;
- if (dev_id)
+ if (dev_id->id[0])
data = (const struct amd_lps0_hid_device_data *) dev_id->driver_data;
else
data = &amd_rembrandt;
--
2.34.1
It's reported that "ASUSTeK COMPUTER INC. ROG Flow X16 GV601RW" has
non-functional fans after resume when using the AMD codepath. This
issue is fixed using the Microsoft codepath.
Add the 3 variants of this system to the Microsoft codepath DMI table.
* GV601RW
* GV601RM
* GV601RE
Link: https://www.reddit.com/r/linuxhardware/comments/wh50nd/compatibility_report_asus_rog_flow_x16_gv601rm/
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2148#note_1571241
Reported-by: Luke Jones <[email protected]>
Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/acpi/x86/s2idle.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
index 3ae2ba74de92..0155c1d2d608 100644
--- a/drivers/acpi/x86/s2idle.c
+++ b/drivers/acpi/x86/s2idle.c
@@ -451,6 +451,17 @@ static const struct dmi_system_id s2idle_dmi_table[] __initconst = {
DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X13 GV301"),
},
},
+ {
+ /*
+ * ASUSTeK COMPUTER INC. ROG Flow X16 GV601RW_GV601RW
+ * https://gitlab.freedesktop.org/drm/amd/-/issues/2148
+ */
+ .callback = lps0_prefer_microsoft,
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X16 GV601"),
+ },
+ },
{}
};
--
2.34.1
On Wed, Sep 28, 2022 at 6:19 PM Mario Limonciello
<[email protected]> wrote:
>
> Ryzen 7000 (Raphael) introduced AMDI0008 for _HID. This ID was added
> in commit ed470febf837 ("ACPI: PM: s2idle: Add support for upcoming AMD
> uPEP HID AMDI008"), but then removed in favor of aligning all new IDs
> to Rembrandt support in commit fd894f05cf30 ("ACPI: x86: s2idle: If a
> new AMD _HID is missing assume Rembrandt").
>
> Unfortunately there was a mistake in commit 100a57379380 ("ACPI: x86:
> s2idle: Move _HID handling for AMD systems into structures") that can
> lead to a NULL pointer dereference accessing `dev_id->driver_data` in
> the sentinel of `amd_hid_ids`. Fix this dereference.
>
> Reported-by: Richard Gong <[email protected]>
> Fixes: 100a57379380 ("ACPI: x86: s2idle: Move _HID handling for AMD systems into structures")
> Signed-off-by: Mario Limonciello <[email protected]>
> ---
> drivers/acpi/x86/s2idle.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index eedd21d8a284..3ae2ba74de92 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -470,7 +470,7 @@ static int lps0_device_attach(struct acpi_device *adev,
> for (dev_id = &amd_hid_ids[0]; dev_id->id[0]; dev_id++)
> if (acpi_dev_hid_uid_match(adev, dev_id->id, NULL))
> break;
> - if (dev_id)
> + if (dev_id->id[0])
> data = (const struct amd_lps0_hid_device_data *) dev_id->driver_data;
> else
> data = &amd_rembrandt;
> --
Applied along with the [2/2], thanks!
On Wed, 2022-09-28 at 11:19 -0500, Mario Limonciello wrote:
> It's reported that "ASUSTeK COMPUTER INC. ROG Flow X16 GV601RW" has
> non-functional fans after resume when using the AMD codepath. This
> issue is fixed using the Microsoft codepath.
>
> Add the 3 variants of this system to the Microsoft codepath DMI
> table.
> * GV601RW
> * GV601RM
> * GV601RE
>
> Link:
> https://www.reddit.com/r/linuxhardware/comments/wh50nd/compatibility_report_asus_rog_flow_x16_gv601rm/
> Link:
> https://gitlab.freedesktop.org/drm/amd/-/issues/2148#note_1571241
> Reported-by: Luke Jones <[email protected]>
> Signed-off-by: Mario Limonciello <[email protected]>
> ---
> drivers/acpi/x86/s2idle.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c
> index 3ae2ba74de92..0155c1d2d608 100644
> --- a/drivers/acpi/x86/s2idle.c
> +++ b/drivers/acpi/x86/s2idle.c
> @@ -451,6 +451,17 @@ static const struct dmi_system_id
> s2idle_dmi_table[] __initconst = {
> DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X13
> GV301"),
> },
> },
> + {
> + /*
> + * ASUSTeK COMPUTER INC. ROG Flow X16 GV601RW_GV601RW
> + *
> https://gitlab.freedesktop.org/drm/amd/-/issues/2148
> + */
> + .callback = lps0_prefer_microsoft,
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER
> INC."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow X16
> GV601"),
> + },
> + },
> {}
> };
>
Hi Mario,
related dts here
https://gitlab.com/asus-linux/reverse-engineering/-/tree/master/GV601R