mirror of
https://github.com/torvalds/linux.git
synced 2026-09-28 12:02:03 +02:00
ata: libata-core: Extend Samsung LPM quirk to AMD controllers
A Samsung SSD 870 QVO 8TB connected to an AMD 600 Series chipset SATA controller is reported to time out on STANDBY IMMEDIATE during system suspend with med_power_with_dipm enabled. The command completes when using max_performance instead. The existing Samsung LPM quirk only matches ATI controllers, leaving AMD controllers unaffected. Rename it to ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD and extend the vendor check to AMD for the same Samsung SSD model patterns. Keep LPM behavior unchanged for other controller vendors, including Intel. Leave ATA_QUIRK_NO_NCQ_ON_ATI restricted to ATI, since the reported AMD issue concerns LPM rather than NCQ. Link: https://bugzilla.kernel.org/show_bug.cgi?id=221986 Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>> --- Link: https://lore.kernel.org/r/20260918124030.1962773-5-cassel@kernel.org Signed-off-by: Niklas Cassel <cassel@kernel.org>
This commit is contained in:
parent
8d836581f9
commit
e6bae5034e
|
|
@ -2972,9 +2972,10 @@ static void ata_dev_config_lpm(struct ata_device *dev)
|
|||
(dev->id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
|
||||
dev->quirks |= ATA_QUIRK_NOLPM;
|
||||
|
||||
/* ATI specific quirk */
|
||||
if ((dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI) &&
|
||||
ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI))
|
||||
/* ATI and AMD specific quirk */
|
||||
if ((dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD) &&
|
||||
(ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI) ||
|
||||
ata_dev_check_adapter(dev, PCI_VENDOR_ID_AMD)))
|
||||
dev->quirks |= ATA_QUIRK_NOLPM;
|
||||
}
|
||||
|
||||
|
|
@ -4136,7 +4137,7 @@ static const char * const ata_quirk_names[] = {
|
|||
[__ATA_QUIRK_MAX_SEC] = "maxsec",
|
||||
[__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m",
|
||||
[__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati",
|
||||
[__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati",
|
||||
[__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD] = "nolpmonatiandamd",
|
||||
[__ATA_QUIRK_NO_ID_DEV_LOG] = "noiddevlog",
|
||||
[__ATA_QUIRK_NO_LOG_DIR] = "nologdir",
|
||||
[__ATA_QUIRK_NO_FUA] = "nofua",
|
||||
|
|
@ -4420,15 +4421,15 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
|
|||
{ "Samsung SSD 860*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "Samsung SSD 870*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "SAMSUNG*MZ7LH*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM |
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI |
|
||||
ATA_QUIRK_NO_LPM_ON_ATI },
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD },
|
||||
{ "FCCT*M500*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
|
||||
ATA_QUIRK_ZERO_AFTER_TRIM },
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ enum ata_quirks {
|
|||
__ATA_QUIRK_MAX_SEC, /* Limit max sectors */
|
||||
__ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */
|
||||
__ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */
|
||||
__ATA_QUIRK_NO_LPM_ON_ATI, /* Disable LPM on ATI chipset */
|
||||
__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD, /* Disable LPM on ATI and AMD chipsets */
|
||||
__ATA_QUIRK_NO_ID_DEV_LOG, /* Identify device log missing */
|
||||
__ATA_QUIRK_NO_LOG_DIR, /* Do not read log directory */
|
||||
__ATA_QUIRK_NO_FUA, /* Do not use FUA */
|
||||
|
|
@ -115,7 +115,7 @@ enum {
|
|||
ATA_QUIRK_MAX_SEC = BIT_ULL(__ATA_QUIRK_MAX_SEC),
|
||||
ATA_QUIRK_MAX_TRIM_128M = BIT_ULL(__ATA_QUIRK_MAX_TRIM_128M),
|
||||
ATA_QUIRK_NO_NCQ_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_NCQ_ON_ATI),
|
||||
ATA_QUIRK_NO_LPM_ON_ATI = BIT_ULL(__ATA_QUIRK_NO_LPM_ON_ATI),
|
||||
ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD = BIT_ULL(__ATA_QUIRK_NO_LPM_ON_ATI_AND_AMD),
|
||||
ATA_QUIRK_NO_ID_DEV_LOG = BIT_ULL(__ATA_QUIRK_NO_ID_DEV_LOG),
|
||||
ATA_QUIRK_NO_LOG_DIR = BIT_ULL(__ATA_QUIRK_NO_LOG_DIR),
|
||||
ATA_QUIRK_NO_FUA = BIT_ULL(__ATA_QUIRK_NO_FUA),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user