Hi, On 5/9/24 8:45 PM, Mario Limonciello wrote: > A Rembrandt-based HP thin client is reported to have problems where > the NVME disk isn't present after resume from s2idle. > > This is because the NVME disk wasn't put into D3 at suspend, and > that happened because the StorageD3Enable _DSD was missing in the BIOS. > > As AMD's architecture requires that the NVME is in D3 for s2idle, adjust > the criteria for force_storage_d3 to match *all* Zen SoCs when the FADT > advertises low power idle support. > > This will ensure that any future products with this BIOS deficiency don't > need to be added to the allow list of overrides. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> Thanks, patch looks good to me: Acked-by: Hans de Goede <hdegoede@xxxxxxxxxx> Regards, Hans > --- > drivers/acpi/x86/utils.c | 24 ++++++++++-------------- > 1 file changed, 10 insertions(+), 14 deletions(-) > > diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c > index 90c3d2eab9e9..7507a7706898 100644 > --- a/drivers/acpi/x86/utils.c > +++ b/drivers/acpi/x86/utils.c > @@ -197,16 +197,16 @@ bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *s > } > > /* > - * AMD systems from Renoir and Lucienne *require* that the NVME controller > + * AMD systems from Renoir onwards *require* that the NVME controller > * is put into D3 over a Modern Standby / suspend-to-idle cycle. > * > * This is "typically" accomplished using the `StorageD3Enable` > * property in the _DSD that is checked via the `acpi_storage_d3` function > - * but this property was introduced after many of these systems launched > - * and most OEM systems don't have it in their BIOS. > + * but some OEM systems still don't have it in their BIOS. > * > * The Microsoft documentation for StorageD3Enable mentioned that Windows has > - * a hardcoded allowlist for D3 support, which was used for these platforms. > + * a hardcoded allowlist for D3 support as well as a registry key to override > + * the BIOS, which has been used for these cases. > * > * This allows quirking on Linux in a similar fashion. > * > @@ -219,19 +219,15 @@ bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *s > * https://bugzilla.kernel.org/show_bug.cgi?id=216773 > * https://bugzilla.kernel.org/show_bug.cgi?id=217003 > * 2) On at least one HP system StorageD3Enable is missing on the second NVME > - disk in the system. > + * disk in the system. > + * 3) On at least one HP Rembrandt system StorageD3Enable is missing on the only > + * NVME device. > */ > -static const struct x86_cpu_id storage_d3_cpu_ids[] = { > - X86_MATCH_VENDOR_FAM_MODEL(AMD, 23, 24, NULL), /* Picasso */ > - X86_MATCH_VENDOR_FAM_MODEL(AMD, 23, 96, NULL), /* Renoir */ > - X86_MATCH_VENDOR_FAM_MODEL(AMD, 23, 104, NULL), /* Lucienne */ > - X86_MATCH_VENDOR_FAM_MODEL(AMD, 25, 80, NULL), /* Cezanne */ > - {} > -}; > - > bool force_storage_d3(void) > { > - return x86_match_cpu(storage_d3_cpu_ids); > + if (!cpu_feature_enabled(X86_FEATURE_ZEN)) > + return false; > + return acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0; > } > > /*