-----Original Message----- From: Sasha Levin sashal@kernel.org Sent: Thursday, November 25, 2021 20:32 To: linux-kernel@vger.kernel.org; stable@vger.kernel.org Cc: Limonciello, Mario Mario.Limonciello@amd.com; Shah, Nehal- bakulchandra Nehal-bakulchandra.Shah@amd.com; Damien Le Moal damien.lemoal@opensource.wdc.com; Sasha Levin sashal@kernel.org; linux-ide@vger.kernel.org Subject: [PATCH AUTOSEL 5.15 28/39] ata: libahci: Adjust behavior when StorageD3Enable _DSD is set
From: Mario Limonciello mario.limonciello@amd.com
[ Upstream commit 7c5f641a5914ce0303b06bcfcd7674ee64aeebe9 ]
The StorageD3Enable _DSD is used for the vendor to indicate that the disk should be opted into or out of a different behavior based upon the platform design.
For AMD's Renoir and Green Sardine platforms it's important that any attached SATA storage has transitioned into DevSlp when s2idle is used.
If the disk is left in active/partial/slumber, then the system is not able to resume properly.
When the StorageD3Enable _DSD is detected, check the system is using s2idle and DevSlp is enabled and if so explicitly wait long enough for the disk to enter DevSlp.
Cc: Nehal-bakulchandra Shah Nehal-bakulchandra.Shah@amd.com BugLink: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugz illa.kernel.org%2Fshow_bug.cgi%3Fid%3D214091&data=04%7C01%7Cm ario.limonciello%40amd.com%7C15dc139812a0497d31bc08d9b0850f45%7C3d d8961fe4884e608e11a82d994e183d%7C0%7C0%7C637734907816859936%7CU nknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI 6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=%2BX2cfl%2BYeFYWZJ%2 FPFWX%2FzxnNtneb2er7w%2BeJpVxxBcU%3D&reserved=0 Link: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs .microsoft.com%2Fen-us%2Fwindows-hardware%2Fdesign%2Fcomponent- guidelines%2Fpower-management-for-storage-hardware-devices- intro&data=04%7C01%7Cmario.limonciello%40amd.com%7C15dc139812 a0497d31bc08d9b0850f45%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C 0%7C637734907816859936%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLj AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000& sdata=ubGKpzMA6EaXugHAanwRUQJ2lvL957wBRFKKMjUBGlw%3D&re served=0 Signed-off-by: Mario Limonciello mario.limonciello@amd.com Signed-off-by: Damien Le Moal damien.lemoal@opensource.wdc.com Signed-off-by: Sasha Levin sashal@kernel.org
drivers/ata/libahci.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 5b3fa2cbe7223..395772fa39432 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -2305,6 +2305,18 @@ int ahci_port_resume(struct ata_port *ap) EXPORT_SYMBOL_GPL(ahci_port_resume);
#ifdef CONFIG_PM +static void ahci_handle_s2idle(struct ata_port *ap) +{
- void __iomem *port_mmio = ahci_port_base(ap);
- u32 devslp;
- if (pm_suspend_via_firmware())
return;
- devslp = readl(port_mmio + PORT_DEVSLP);
- if ((devslp & PORT_DEVSLP_ADSE))
ata_msleep(ap, devslp_idle_timeout);
+}
static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg) { const char *emsg = NULL; @@ -2318,6 +2330,9 @@ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg) ata_port_freeze(ap); }
- if (acpi_storage_d3(ap->host->dev))
ahci_handle_s2idle(ap);
- ahci_rpm_put_port(ap); return rc;
}
2.33.0
Sasha,
No concerns for me to 5.15 or any of the earlier kernels the autosel picked, but would you mind also sending this to 5.14.y too?
Thanks,