Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'ata-6.14-final' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux

Pull ata fix from Niklas Cassel:

- Fix a regression on ATI AHCI controllers, where certain Samsung
drives fails to be detected on a warm boot when LPM is enabled.

LPM on ATI AHCI works fine with other drives. Likewise, the
Samsung drives works fine with LPM with other AHI controllers.

Thus, just like the weirdo ATA_QUIRK_NO_NCQ_ON_ATI quirk, add a
new ATA_QUIRK_NO_LPM_ON_ATI quirk to disable LPM only on ATI
AHCI controllers.

* tag 'ata-6.14-final' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
ata: libata-core: Add ATA_QUIRK_NO_LPM_ON_ATI for certain Samsung SSDs

+13 -3
+11 -3
drivers/ata/libata-core.c
··· 2845 2845 (id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2) 2846 2846 dev->quirks |= ATA_QUIRK_NOLPM; 2847 2847 2848 + if (dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI && 2849 + ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI)) 2850 + dev->quirks |= ATA_QUIRK_NOLPM; 2851 + 2848 2852 if (ap->flags & ATA_FLAG_NO_LPM) 2849 2853 dev->quirks |= ATA_QUIRK_NOLPM; 2850 2854 ··· 3901 3897 [__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024", 3902 3898 [__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m", 3903 3899 [__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati", 3900 + [__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati", 3904 3901 [__ATA_QUIRK_NO_ID_DEV_LOG] = "noiddevlog", 3905 3902 [__ATA_QUIRK_NO_LOG_DIR] = "nologdir", 3906 3903 [__ATA_QUIRK_NO_FUA] = "nofua", ··· 4147 4142 ATA_QUIRK_ZERO_AFTER_TRIM }, 4148 4143 { "Samsung SSD 860*", NULL, ATA_QUIRK_NO_NCQ_TRIM | 4149 4144 ATA_QUIRK_ZERO_AFTER_TRIM | 4150 - ATA_QUIRK_NO_NCQ_ON_ATI }, 4145 + ATA_QUIRK_NO_NCQ_ON_ATI | 4146 + ATA_QUIRK_NO_LPM_ON_ATI }, 4151 4147 { "Samsung SSD 870*", NULL, ATA_QUIRK_NO_NCQ_TRIM | 4152 4148 ATA_QUIRK_ZERO_AFTER_TRIM | 4153 - ATA_QUIRK_NO_NCQ_ON_ATI }, 4149 + ATA_QUIRK_NO_NCQ_ON_ATI | 4150 + ATA_QUIRK_NO_LPM_ON_ATI }, 4154 4151 { "SAMSUNG*MZ7LH*", NULL, ATA_QUIRK_NO_NCQ_TRIM | 4155 4152 ATA_QUIRK_ZERO_AFTER_TRIM | 4156 - ATA_QUIRK_NO_NCQ_ON_ATI, }, 4153 + ATA_QUIRK_NO_NCQ_ON_ATI | 4154 + ATA_QUIRK_NO_LPM_ON_ATI }, 4157 4155 { "FCCT*M500*", NULL, ATA_QUIRK_NO_NCQ_TRIM | 4158 4156 ATA_QUIRK_ZERO_AFTER_TRIM }, 4159 4157
+2
include/linux/libata.h
··· 88 88 __ATA_QUIRK_MAX_SEC_1024, /* Limit max sects to 1024 */ 89 89 __ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */ 90 90 __ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */ 91 + __ATA_QUIRK_NO_LPM_ON_ATI, /* Disable LPM on ATI chipset */ 91 92 __ATA_QUIRK_NO_ID_DEV_LOG, /* Identify device log missing */ 92 93 __ATA_QUIRK_NO_LOG_DIR, /* Do not read log directory */ 93 94 __ATA_QUIRK_NO_FUA, /* Do not use FUA */ ··· 433 432 ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024), 434 433 ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M), 435 434 ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI), 435 + ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI), 436 436 ATA_QUIRK_NO_ID_DEV_LOG = (1U << __ATA_QUIRK_NO_ID_DEV_LOG), 437 437 ATA_QUIRK_NO_LOG_DIR = (1U << __ATA_QUIRK_NO_LOG_DIR), 438 438 ATA_QUIRK_NO_FUA = (1U << __ATA_QUIRK_NO_FUA),