* [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
@ 2025-03-17 17:03 Niklas Cassel
2025-03-18 8:41 ` Damien Le Moal
2025-03-18 9:14 ` Niklas Cassel
0 siblings, 2 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-03-17 17:03 UTC (permalink / raw)
To: Damien Le Moal, Niklas Cassel, Mario Limonciello, Jian-Hong Pan,
Mika Westerberg
Cc: Salvatore Bonaccorso, Hans de Goede, Shyam Sundar S K,
Basavaraj Natikar, Eric, linux-ide
Before commit 7627a0edef54 ("ata: ahci: Drop low power policy board type")
the ATI AHCI controllers specified board type 'board_ahci' rather than
board type 'board_ahci'. This means that LPM was historically not enabled
for the ATI AHCI controllers.
By looking at commit 7a8526a5cd51 ("libata: Add ATA_HORKAGE_NO_NCQ_ON_ATI
for Samsung 860 and 870 SSD."), it is clear that, for some unknown reason,
that Samsung SSDs do not play nice with ATI AHCI controllers. (When using
other AHCI controllers, NCQ can be enabled on these Samsung SSDs without
issues.)
In a similar way, from user reports, it is clear the ATI AHCI controllers
can enable LPM on e.g. Maxtor HDDs perfectly fine, but when enabling LPM
on certain Samsung SSDs, things break. (E.g. the SSDs will not get detected
by the ATI AHCI controller even after a COMRESET.)
Yet, when using LPM on these Samsung SSDs with other AHCI controllers, e.g.
Intel AHCI controllers, these Samsung drives appear to work perfectly fine.
Considering that the combination of ATI + Samsung, for some unknown reason,
does not seem to work well, disable LPM when detecting an ATI AHCI
controller with a problematic Samsung SSD.
Apply this new ATA_QUIRK_NO_LPM_ON_ATI quirk for all Samsung SSDs that have
already been reported to not play nice with ATI (ATA_QUIRK_NO_NCQ_ON_ATI).
Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type")
Reported-by: Eric <eric.4.debian@grabatoulnz.fr>
Closes: https://lore.kernel.org/linux-ide/Z8SBZMBjvVXA7OAK@eldamar.lan/
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
drivers/ata/libata-core.c | 14 +++++++++++---
include/linux/libata.h | 2 ++
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index c085dd81ebe7f..d956735e2a764 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2845,6 +2845,10 @@ int ata_dev_configure(struct ata_device *dev)
(id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
dev->quirks |= ATA_QUIRK_NOLPM;
+ if (dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI &&
+ ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI))
+ dev->quirks |= ATA_QUIRK_NOLPM;
+
if (ap->flags & ATA_FLAG_NO_LPM)
dev->quirks |= ATA_QUIRK_NOLPM;
@@ -3897,6 +3901,7 @@ static const char * const ata_quirk_names[] = {
[__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024",
[__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m",
[__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati",
+ [__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati",
[__ATA_QUIRK_NO_ID_DEV_LOG] = "noiddevlog",
[__ATA_QUIRK_NO_LOG_DIR] = "nologdir",
[__ATA_QUIRK_NO_FUA] = "nofua",
@@ -4142,13 +4147,16 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
ATA_QUIRK_ZERO_AFTER_TRIM },
{ "Samsung SSD 860*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
ATA_QUIRK_ZERO_AFTER_TRIM |
- ATA_QUIRK_NO_NCQ_ON_ATI },
+ ATA_QUIRK_NO_NCQ_ON_ATI |
+ ATA_QUIRK_NO_LPM_ON_ATI },
{ "Samsung SSD 870*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
ATA_QUIRK_ZERO_AFTER_TRIM |
- ATA_QUIRK_NO_NCQ_ON_ATI },
+ ATA_QUIRK_NO_NCQ_ON_ATI |
+ ATA_QUIRK_NO_LPM_ON_ATI },
{ "SAMSUNG*MZ7LH*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
ATA_QUIRK_ZERO_AFTER_TRIM |
- ATA_QUIRK_NO_NCQ_ON_ATI, },
+ ATA_QUIRK_NO_NCQ_ON_ATI |
+ ATA_QUIRK_NO_LPM_ON_ATI },
{ "FCCT*M500*", NULL, ATA_QUIRK_NO_NCQ_TRIM |
ATA_QUIRK_ZERO_AFTER_TRIM },
diff --git a/include/linux/libata.h b/include/linux/libata.h
index c1c57f814b98d..e5695998acb02 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -88,6 +88,7 @@ enum ata_quirks {
__ATA_QUIRK_MAX_SEC_1024, /* Limit max sects to 1024 */
__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_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 */
@@ -432,6 +433,7 @@ enum {
ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024),
ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),
ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
+ ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG),
ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR),
ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),
--
2.48.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
2025-03-17 17:03 [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs Niklas Cassel
@ 2025-03-18 8:41 ` Damien Le Moal
2025-03-18 9:14 ` Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Damien Le Moal @ 2025-03-18 8:41 UTC (permalink / raw)
To: Niklas Cassel, Mario Limonciello, Jian-Hong Pan, Mika Westerberg
Cc: Salvatore Bonaccorso, Hans de Goede, Shyam Sundar S K,
Basavaraj Natikar, Eric, linux-ide
On 3/18/25 2:03 AM, Niklas Cassel wrote:
> Before commit 7627a0edef54 ("ata: ahci: Drop low power policy board type")
> the ATI AHCI controllers specified board type 'board_ahci' rather than
> board type 'board_ahci'. This means that LPM was historically not enabled
> for the ATI AHCI controllers.
>
> By looking at commit 7a8526a5cd51 ("libata: Add ATA_HORKAGE_NO_NCQ_ON_ATI
> for Samsung 860 and 870 SSD."), it is clear that, for some unknown reason,
> that Samsung SSDs do not play nice with ATI AHCI controllers. (When using
> other AHCI controllers, NCQ can be enabled on these Samsung SSDs without
> issues.)
>
> In a similar way, from user reports, it is clear the ATI AHCI controllers
> can enable LPM on e.g. Maxtor HDDs perfectly fine, but when enabling LPM
> on certain Samsung SSDs, things break. (E.g. the SSDs will not get detected
> by the ATI AHCI controller even after a COMRESET.)
>
> Yet, when using LPM on these Samsung SSDs with other AHCI controllers, e.g.
> Intel AHCI controllers, these Samsung drives appear to work perfectly fine.
>
> Considering that the combination of ATI + Samsung, for some unknown reason,
> does not seem to work well, disable LPM when detecting an ATI AHCI
> controller with a problematic Samsung SSD.
>
> Apply this new ATA_QUIRK_NO_LPM_ON_ATI quirk for all Samsung SSDs that have
> already been reported to not play nice with ATI (ATA_QUIRK_NO_NCQ_ON_ATI).
>
> Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type")
> Reported-by: Eric <eric.4.debian@grabatoulnz.fr>
> Closes: https://lore.kernel.org/linux-ide/Z8SBZMBjvVXA7OAK@eldamar.lan/
> Signed-off-by: Niklas Cassel <cassel@kernel.org>
Looks OK to me.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
2025-03-17 17:03 [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs Niklas Cassel
2025-03-18 8:41 ` Damien Le Moal
@ 2025-03-18 9:14 ` Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-03-18 9:14 UTC (permalink / raw)
To: Damien Le Moal, Mario Limonciello, Jian-Hong Pan, Mika Westerberg,
Niklas Cassel
Cc: Salvatore Bonaccorso, Hans de Goede, Shyam Sundar S K,
Basavaraj Natikar, Eric, linux-ide
On Mon, 17 Mar 2025 18:03:49 +0100, Niklas Cassel wrote:
> Before commit 7627a0edef54 ("ata: ahci: Drop low power policy board type")
> the ATI AHCI controllers specified board type 'board_ahci' rather than
> board type 'board_ahci'. This means that LPM was historically not enabled
> for the ATI AHCI controllers.
>
> By looking at commit 7a8526a5cd51 ("libata: Add ATA_HORKAGE_NO_NCQ_ON_ATI
> for Samsung 860 and 870 SSD."), it is clear that, for some unknown reason,
> that Samsung SSDs do not play nice with ATI AHCI controllers. (When using
> other AHCI controllers, NCQ can be enabled on these Samsung SSDs without
> issues.)
>
> [...]
Applied to libata/linux.git (for-6.14), thanks!
[1/1] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
https://git.kernel.org/libata/linux/c/f2aac4c7
Kind regards,
Niklas
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-03-18 9:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-17 17:03 [PATCH] ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs Niklas Cassel
2025-03-18 8:41 ` Damien Le Moal
2025-03-18 9:14 ` Niklas Cassel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox