linux/drivers/ata
Niklas Cassel 8bf2f1ba27 ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs
[ Upstream commit f2aac4c73c ]

Before commit 7627a0edef ("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 7a8526a5cd ("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: 7627a0edef ("ata: ahci: Drop low power policy board type")
Suggested-by: Hans de Goede <hdegoede@redhat.com>
Reported-by: Eric <eric.4.debian@grabatoulnz.fr>
Closes: https://lore.kernel.org/linux-ide/Z8SBZMBjvVXA7OAK@eldamar.lan/
Tested-by: Eric <eric.4.debian@grabatoulnz.fr>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20250317170348.1748671-2-cassel@kernel.org
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-03-28 22:03:27 +01:00
..
pata_parport parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
acard-ahci.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
ahci.c ata: ahci: Rephrase comment to not use the term blacklist 2024-07-30 07:10:14 +09:00
ahci.h scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
ahci_brcm.c ata: ahci_brcm: Use devm_platform_ioremap_resource_byname() helper function 2024-08-28 10:32:21 +09:00
ahci_ceva.c ata: ahci_ceva: fix error handling for Xilinx GT PHY support 2024-02-19 10:44:37 +01:00
ahci_da850.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
ahci_dm816.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
ahci_dwc.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_imx.c ata: ahci_imx: Fix error code in probe() 2024-08-15 13:44:33 +02:00
ahci_mtk.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_mvebu.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_octeon.c ata: ahci_octeon: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_platform.c driver core changes for 6.5-rc1 2023-07-03 12:56:23 -07:00
ahci_qoriq.c ata: fix debounce timings type 2023-08-02 17:37:06 +09:00
ahci_seattle.c ata: ahci_seattle: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_st.c ata: ahci_st: Remove an unused field in struct st_ahci_drv_data 2024-04-02 12:18:15 +09:00
ahci_sunxi.c ata: Explicitly include correct DT includes 2023-08-02 17:37:05 +09:00
ahci_tegra.c ata: ahci_tegra: Convert to devm_platform_ioremap_resource() 2023-08-02 17:37:06 +09:00
ahci_xgene.c ata: xgene: Use of_device_get_match_data() 2023-10-11 17:53:37 +09:00
ata_generic.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
ata_piix.c ata: ata_piix: Remove useless comment in piix_init_sidpr() 2024-07-30 07:10:25 +09:00
Kconfig ata: Kconfig: Update SATA_MOBILE_LPM_POLICY default to med_power_with_dipm 2024-05-27 11:34:50 +02:00
libahci.c ata: libata-core: Set ATA_QCFLAG_RTF_FILLED in fill_result_tf() 2024-07-03 10:51:41 +02:00
libahci_platform.c ata: libahci_platform: Simplify code with for_each_child_of_node_scoped() 2024-08-15 13:30:06 +02:00
libata-acpi.c ata: make use of ata_port_is_frozen() helper 2022-10-18 13:53:27 +09:00
libata-core.c ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs 2025-03-28 22:03:27 +01:00
libata-eh.c ata: libata: Set DID_TIME_OUT for commands that actually timed out 2024-10-24 11:14:00 +02:00
libata-pata-timings.c ata: separate PATA timings code from libata-core.c 2020-03-26 10:28:19 -06:00
libata-pmp.c ata: libata: Move sector_buf from struct ata_port to struct ata_device 2024-09-07 10:16:55 +09:00
libata-sata.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
libata-scsi.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
libata-sff.c ata: libata-sff: Ensure that we cannot write outside the allocated buffer 2025-02-17 10:05:36 +01:00
libata-trace.c ata: scsi: rename flag ATA_QCFLAG_FAILED to ATA_QCFLAG_EH 2023-01-04 13:36:26 +09:00
libata-transport.c ata: libata: Fix W=1 compilation warning 2024-09-07 11:02:52 +09:00
libata-transport.h ata,scsi: Remove wrappers ata_sas_tport_{add,delete}() 2024-07-04 11:52:31 +02:00
libata-zpodd.c ata: libata: Move sector_buf from struct ata_port to struct ata_device 2024-09-07 10:16:55 +09:00
libata.h ata: libata: Improve CDL resource management 2024-09-07 10:16:56 +09:00
Makefile ATA changes for 6.3-rc1 2023-02-22 13:35:51 -08:00
pata_acpi.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ali.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_amd.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_arasan_cf.c ata: pata_arasan_cf: Convert to platform remove callback returning void 2023-08-02 17:53:09 +09:00
pata_artop.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_atiixp.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_atp867x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_buddha.c ata: pata_buddha: Remove #include <asm/ide.h> 2023-08-24 08:09:59 +09:00
pata_cmd64x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cmd640.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5520.c ata: pata_cs5520: Rephrase file header comment 2024-07-30 07:10:30 +09:00
pata_cs5530.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5535.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cs5536.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_cypress.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_efar.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ep93xx.c soc: convert ep93xx to devicetree 2024-09-26 12:00:25 -07:00
pata_falcon.c ata: pata_falcon: Convert to platform remove callback returning void 2023-11-08 09:00:44 +09:00
pata_ftide010.c ata: pata_ftide010: Enable module autoloading 2024-09-02 08:05:36 +09:00
pata_gayle.c ata: pata_gayle: Convert to platform remove callback returning void 2023-11-08 09:00:49 +09:00
pata_hpt3x2n.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_hpt3x3.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_hpt37x.c ata: pata_hpt37x: Rename hpt_dma_blacklisted() 2024-07-30 07:10:38 +09:00
pata_hpt366.c ata: pata_hpt366: Rename hpt_dma_blacklisted() 2024-07-30 07:10:34 +09:00
pata_icside.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_imx.c ata: pata_imx: Use helper function devm_clk_get_enabled() 2023-08-17 07:45:32 +09:00
pata_isapnp.c ata: pata_isapnp: Add missing error check for devm_ioport_map() 2023-11-20 09:22:26 +09:00
pata_it821x.c ata: libata: Use QUIRK instead of HORKAGE 2024-07-30 07:09:54 +09:00
pata_it8213.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ixp4xx_cf.c ata: pata_ixp4xx: Enable module autoloading 2024-09-02 08:06:04 +09:00
pata_jmicron.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_legacy.c ata: pata_legacy: make legacy_exit() work again 2024-05-07 07:23:31 +09:00
pata_macio.c ata: pata_macio: Use WARN instead of BUG 2024-08-21 14:33:23 +09:00
pata_marvell.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_mpc52xx.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_mpiix.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_netcell.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ninja32.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ns87410.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_ns87415.c ata: pata_ns87415: mark ns87560_tf_read static 2023-07-28 08:52:42 +09:00
pata_octeon_cf.c ata: libata: Remove ata_noop_qc_prep() 2024-08-02 09:18:42 +09:00
pata_of_platform.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
pata_oldpiix.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_opti.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_optidma.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pcmcia.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pdc202xx_old.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_pdc2027x.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_piccolo.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_platform.c ata: libata: Make ata_platform_remove_one return void 2023-05-15 06:49:39 +09:00
pata_pxa.c ata: pata_pxa: convert not to use dma_request_slave_channel() 2023-11-20 09:28:25 +09:00
pata_radisys.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_rb532_cf.c ata: pata_rb532_cf: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
pata_rdc.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_rz1000.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sc1200.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sch.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_serverworks.c ata: pata_serverworks: Do not use the term blacklist 2024-07-30 07:10:08 +09:00
pata_sil680.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sis.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_sl82c105.c ata: libata: remove deprecated EH callbacks 2023-08-02 17:45:42 +09:00
pata_triflex.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pata_via.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
pdc_adma.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_dwc_460ex.c ata: sata_dwc_460ex: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_fsl.c ata: sata_fsl: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_gemini.c ata: sata_gemini: Enable module autoloading 2024-09-02 08:06:23 +09:00
sata_gemini.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sata_highbank.c ata: sata_highbank: fix OF node reference leak in highbank_initialize_phys() 2024-12-19 18:13:03 +01:00
sata_inic162x.c ata: fix debounce timings type 2023-08-02 17:37:06 +09:00
sata_mv.c SCSI misc on 20240514 2024-05-14 18:25:53 -07:00
sata_nv.c scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
sata_promise.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_promise.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18 2019-05-21 11:28:46 +02:00
sata_qstor.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_rcar.c ata: sata_rcar: Convert to platform remove callback returning void 2023-08-02 17:55:52 +09:00
sata_sil.c ata: sata_sil: Rename sil_blacklist to sil_quirks 2024-07-30 07:10:21 +09:00
sata_sil24.c scsi: libata: Switch to using ->device_configure 2024-04-11 21:37:50 -04:00
sata_sis.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_svw.c ata: Use of_property_read_reg() to parse "reg" 2023-06-13 15:38:48 +09:00
sata_sx4.c ata: sata_sx4: fix pdc20621_get_from_dimm() on 64-bit 2024-04-01 07:52:17 +09:00
sata_uli.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_via.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sata_vsc.c scsi: ata: Declare SCSI host templates const 2023-03-24 19:19:19 -04:00
sis.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00