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

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

Pull ata updates from Niklas Cassel:

- Do not enable LPM for external ports (hotplug-capable ports or eSATA
ports), as the HBA will not be able to detect hot plug removal events
when LPM is enabled (me)

- Drop the board type board_ahci_low_power. Now when we make sure that
we won't enable LPM for external ports, we can always set the LPM
policy to CONFIG_SATA_MOBILE_LPM_POLICY for internal ports. There is
thus no longer any need for the board type board_ahci_low_power, so
it can be removed. (As before, LPM features not supported by the HBA
and/or the device will not be enabled, regardless of the LPM policy
Kconfig) (Mario Limonciello)

Note that the default CONFIG_SATA_MOBILE_LPM_POLICY value is still 0
(which will not try to enable any LPM features), however, most Linux
distributions override this and set it to 3 (Medium power with DIPM).
We intend to change the default to 3 in the coming cycles, but we
will wait a cycle or two.

- Add board type board_ahci_pcs_quirk and make all legacy Intel
platforms use it. The Intel PCS quirk was being applied to basically
all Intel platforms, which caused some issues (the device failing to
come back after a reset), when being applied to newer Intel platforms
where it shouldn't have been applied.

New platforms can be added using board type board_ahci, which will
not have the quirk applied (me)

- Rename board_ahci_nosntf to board_ahci_pcs_quirk_no_sntf to more
clearly highlight that it applies two different quirks (me)

- Modify the ahci_broken_devslp() quirk to be implemented like all the
other quirks (i.e. define a board type for the quirk) (me)

- Drop unused board_ahci_noncq board type (me)

- Rename board_ahci_nomsi to board_ahci_no_msi to match the other board
types (me)

- Make pata_parport_bus_type const (Ricardo B. Marliere)

- Remove at91 compact flash device tree binding. (The binding is not
used by any driver.) (from Hari Prasath Gujulan Elango)

- Convert MediaTek device tree binding to json-schema (Rafał Miłecki)

- At boot, print the number of implemented ports, instead of printing
the maximum number of ports supported by the HBA silicon (me)

* tag 'ata-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
ahci: print the number of implemented ports
dt-bindings: ata: convert MediaTek controller to the json-schema
ahci: rename board_ahci_nomsi
ahci: drop unused board_ahci_noncq
ahci: clean up ahci_broken_devslp quirk
ahci: rename board_ahci_nosntf
ahci: clean up intel_pcs_quirk
ata: ahci: Drop low power policy board type
ata: ahci: do not enable LPM on external ports
ata: ahci: drop hpriv param from ahci_update_initial_lpm_policy()
ata: ahci: a hotplug capable port is an external port
ata: ahci: move marking of external port earlier
dt-bindings: ata: atmel: remove at91 compact flash documentation
ata: pata_parport: make pata_parport_bus_type const

+331 -313
-51
Documentation/devicetree/bindings/ata/ahci-mtk.txt
··· 1 - MediaTek Serial ATA controller 2 - 3 - Required properties: 4 - - compatible : Must be "mediatek,<chip>-ahci", "mediatek,mtk-ahci". 5 - When using "mediatek,mtk-ahci" compatible strings, you 6 - need SoC specific ones in addition, one of: 7 - - "mediatek,mt7622-ahci" 8 - - reg : Physical base addresses and length of register sets. 9 - - interrupts : Interrupt associated with the SATA device. 10 - - interrupt-names : Associated name must be: "hostc". 11 - - clocks : A list of phandle and clock specifier pairs, one for each 12 - entry in clock-names. 13 - - clock-names : Associated names must be: "ahb", "axi", "asic", "rbc", "pm". 14 - - phys : A phandle and PHY specifier pair for the PHY port. 15 - - phy-names : Associated name must be: "sata-phy". 16 - - ports-implemented : See ./ahci-platform.txt for details. 17 - 18 - Optional properties: 19 - - power-domains : A phandle and power domain specifier pair to the power 20 - domain which is responsible for collapsing and restoring 21 - power to the peripheral. 22 - - resets : Must contain an entry for each entry in reset-names. 23 - See ../reset/reset.txt for details. 24 - - reset-names : Associated names must be: "axi", "sw", "reg". 25 - - mediatek,phy-mode : A phandle to the system controller, used to enable 26 - SATA function. 27 - 28 - Example: 29 - 30 - sata: sata@1a200000 { 31 - compatible = "mediatek,mt7622-ahci", 32 - "mediatek,mtk-ahci"; 33 - reg = <0 0x1a200000 0 0x1100>; 34 - interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; 35 - interrupt-names = "hostc"; 36 - clocks = <&pciesys CLK_SATA_AHB_EN>, 37 - <&pciesys CLK_SATA_AXI_EN>, 38 - <&pciesys CLK_SATA_ASIC_EN>, 39 - <&pciesys CLK_SATA_RBC_EN>, 40 - <&pciesys CLK_SATA_PM_EN>; 41 - clock-names = "ahb", "axi", "asic", "rbc", "pm"; 42 - phys = <&u3port1 PHY_TYPE_SATA>; 43 - phy-names = "sata-phy"; 44 - ports-implemented = <0x1>; 45 - power-domains = <&scpsys MT7622_POWER_DOMAIN_HIF0>; 46 - resets = <&pciesys MT7622_SATA_AXI_BUS_RST>, 47 - <&pciesys MT7622_SATA_PHY_SW_RST>, 48 - <&pciesys MT7622_SATA_PHY_REG_RST>; 49 - reset-names = "axi", "sw", "reg"; 50 - mediatek,phy-mode = <&pciesys>; 51 - };
-19
Documentation/devicetree/bindings/ata/atmel-at91_cf.txt
··· 1 - Atmel AT91RM9200 CompactFlash 2 - 3 - Required properties: 4 - - compatible : "atmel,at91rm9200-cf". 5 - - reg : should specify localbus address and size used. 6 - - gpios : specifies the gpio pins to control the CF device. Detect 7 - and reset gpio's are mandatory while irq and vcc gpio's are 8 - optional and may be set to 0 if not present. 9 - 10 - Example: 11 - compact-flash@50000000 { 12 - compatible = "atmel,at91rm9200-cf"; 13 - reg = <0x50000000 0x30000000>; 14 - gpios = <&pioC 13 0 /* irq */ 15 - &pioC 15 0 /* detect */ 16 - 0 /* vcc */ 17 - &pioC 5 0 /* reset */ 18 - >; 19 - };
+98
Documentation/devicetree/bindings/ata/mediatek,mtk-ahci.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/ata/mediatek,mtk-ahci.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: MediaTek Serial ATA controller 8 + 9 + maintainers: 10 + - Ryder Lee <ryder.lee@mediatek.com> 11 + 12 + allOf: 13 + - $ref: ahci-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + items: 18 + - enum: 19 + - mediatek,mt7622-ahci 20 + - const: mediatek,mtk-ahci 21 + 22 + reg: 23 + maxItems: 1 24 + 25 + interrupts: 26 + maxItems: 1 27 + 28 + interrupt-names: 29 + const: hostc 30 + 31 + clocks: 32 + maxItems: 5 33 + 34 + clock-names: 35 + items: 36 + - const: ahb 37 + - const: axi 38 + - const: asic 39 + - const: rbc 40 + - const: pm 41 + 42 + power-domains: 43 + maxItems: 1 44 + 45 + resets: 46 + maxItems: 3 47 + 48 + reset-names: 49 + items: 50 + - const: axi 51 + - const: sw 52 + - const: reg 53 + 54 + mediatek,phy-mode: 55 + description: System controller phandle, used to enable SATA function 56 + $ref: /schemas/types.yaml#/definitions/phandle 57 + 58 + required: 59 + - reg 60 + - interrupts 61 + - interrupt-names 62 + - clocks 63 + - clock-names 64 + - phys 65 + - phy-names 66 + - ports-implemented 67 + 68 + unevaluatedProperties: false 69 + 70 + examples: 71 + - | 72 + #include <dt-bindings/clock/mt7622-clk.h> 73 + #include <dt-bindings/interrupt-controller/arm-gic.h> 74 + #include <dt-bindings/phy/phy.h> 75 + #include <dt-bindings/power/mt7622-power.h> 76 + #include <dt-bindings/reset/mt7622-reset.h> 77 + 78 + sata@1a200000 { 79 + compatible = "mediatek,mt7622-ahci", "mediatek,mtk-ahci"; 80 + reg = <0x1a200000 0x1100>; 81 + interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; 82 + interrupt-names = "hostc"; 83 + clocks = <&pciesys CLK_SATA_AHB_EN>, 84 + <&pciesys CLK_SATA_AXI_EN>, 85 + <&pciesys CLK_SATA_ASIC_EN>, 86 + <&pciesys CLK_SATA_RBC_EN>, 87 + <&pciesys CLK_SATA_PM_EN>; 88 + clock-names = "ahb", "axi", "asic", "rbc", "pm"; 89 + phys = <&u3port1 PHY_TYPE_SATA>; 90 + phy-names = "sata-phy"; 91 + ports-implemented = <0x1>; 92 + power-domains = <&scpsys MT7622_POWER_DOMAIN_HIF0>; 93 + resets = <&pciesys MT7622_SATA_AXI_BUS_RST>, 94 + <&pciesys MT7622_SATA_PHY_SW_RST>, 95 + <&pciesys MT7622_SATA_PHY_REG_RST>; 96 + reset-names = "axi", "sw", "reg"; 97 + mediatek,phy-mode = <&pciesys>; 98 + };
+2 -3
drivers/ata/Kconfig
··· 116 116 If unsure, say N. 117 117 118 118 config SATA_MOBILE_LPM_POLICY 119 - int "Default SATA Link Power Management policy for low power chipsets" 119 + int "Default SATA Link Power Management policy" 120 120 range 0 4 121 121 default 0 122 122 depends on SATA_AHCI 123 123 help 124 124 Select the Default SATA Link Power Management (LPM) policy to use 125 125 for chipsets / "South Bridges" supporting low-power modes. Such 126 - chipsets are typically found on most laptops but desktops and 127 - servers now also widely use chipsets supporting low power modes. 126 + chipsets are ubiquitous across laptops, desktops and servers. 128 127 129 128 The value set has the following meanings: 130 129 0 => Keep firmware settings
+216 -222
drivers/ata/ahci.c
··· 50 50 board_ahci, 51 51 board_ahci_43bit_dma, 52 52 board_ahci_ign_iferr, 53 - board_ahci_low_power, 54 53 board_ahci_no_debounce_delay, 55 - board_ahci_nomsi, 56 - board_ahci_noncq, 57 - board_ahci_nosntf, 54 + board_ahci_no_msi, 55 + /* 56 + * board_ahci_pcs_quirk is for legacy Intel platforms. 57 + * Modern Intel platforms should use board_ahci instead. 58 + * (Some modern Intel platforms might have been added with 59 + * board_ahci_pcs_quirk, however, we cannot change them to board_ahci 60 + * without testing that the platform actually works without the quirk.) 61 + */ 62 + board_ahci_pcs_quirk, 63 + board_ahci_pcs_quirk_no_devslp, 64 + board_ahci_pcs_quirk_no_sntf, 58 65 board_ahci_yes_fbs, 59 66 60 67 /* board IDs for specific chipsets in alphabetical order */ ··· 74 67 board_ahci_sb600, 75 68 board_ahci_sb700, /* for SB700 and SB800 */ 76 69 board_ahci_vt8251, 77 - 78 - /* 79 - * board IDs for Intel chipsets that support more than 6 ports 80 - * *and* end up needing the PCS quirk. 81 - */ 82 - board_ahci_pcs7, 83 70 84 71 /* aliases */ 85 72 board_ahci_mcp_linux = board_ahci_mcp65, ··· 144 143 .udma_mask = ATA_UDMA6, 145 144 .port_ops = &ahci_ops, 146 145 }, 147 - [board_ahci_low_power] = { 148 - AHCI_HFLAGS (AHCI_HFLAG_USE_LPM_POLICY), 149 - .flags = AHCI_FLAG_COMMON, 150 - .pio_mask = ATA_PIO4, 151 - .udma_mask = ATA_UDMA6, 152 - .port_ops = &ahci_ops, 153 - }, 154 146 [board_ahci_no_debounce_delay] = { 155 147 .flags = AHCI_FLAG_COMMON, 156 148 .link_flags = ATA_LFLAG_NO_DEBOUNCE_DELAY, ··· 151 157 .udma_mask = ATA_UDMA6, 152 158 .port_ops = &ahci_ops, 153 159 }, 154 - [board_ahci_nomsi] = { 160 + [board_ahci_no_msi] = { 155 161 AHCI_HFLAGS (AHCI_HFLAG_NO_MSI), 156 162 .flags = AHCI_FLAG_COMMON, 157 163 .pio_mask = ATA_PIO4, 158 164 .udma_mask = ATA_UDMA6, 159 165 .port_ops = &ahci_ops, 160 166 }, 161 - [board_ahci_noncq] = { 162 - AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ), 167 + [board_ahci_pcs_quirk] = { 168 + AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK), 163 169 .flags = AHCI_FLAG_COMMON, 164 170 .pio_mask = ATA_PIO4, 165 171 .udma_mask = ATA_UDMA6, 166 172 .port_ops = &ahci_ops, 167 173 }, 168 - [board_ahci_nosntf] = { 169 - AHCI_HFLAGS (AHCI_HFLAG_NO_SNTF), 174 + [board_ahci_pcs_quirk_no_devslp] = { 175 + AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK | 176 + AHCI_HFLAG_NO_DEVSLP), 177 + .flags = AHCI_FLAG_COMMON, 178 + .pio_mask = ATA_PIO4, 179 + .udma_mask = ATA_UDMA6, 180 + .port_ops = &ahci_ops, 181 + }, 182 + [board_ahci_pcs_quirk_no_sntf] = { 183 + AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK | 184 + AHCI_HFLAG_NO_SNTF), 170 185 .flags = AHCI_FLAG_COMMON, 171 186 .pio_mask = ATA_PIO4, 172 187 .udma_mask = ATA_UDMA6, ··· 197 194 .port_ops = &ahci_ops, 198 195 }, 199 196 [board_ahci_avn] = { 197 + AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK), 200 198 .flags = AHCI_FLAG_COMMON, 201 199 .pio_mask = ATA_PIO4, 202 200 .udma_mask = ATA_UDMA6, ··· 256 252 .udma_mask = ATA_UDMA6, 257 253 .port_ops = &ahci_vt8251_ops, 258 254 }, 259 - [board_ahci_pcs7] = { 260 - .flags = AHCI_FLAG_COMMON, 261 - .pio_mask = ATA_PIO4, 262 - .udma_mask = ATA_UDMA6, 263 - .port_ops = &ahci_ops, 264 - }, 265 255 }; 266 256 267 257 static const struct pci_device_id ahci_pci_tbl[] = { 268 258 /* Intel */ 269 - { PCI_VDEVICE(INTEL, 0x06d6), board_ahci }, /* Comet Lake PCH-H RAID */ 270 - { PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */ 271 - { PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */ 272 - { PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */ 273 - { PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */ 274 - { PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */ 259 + { PCI_VDEVICE(INTEL, 0x06d6), board_ahci_pcs_quirk }, /* Comet Lake PCH-H RAID */ 260 + { PCI_VDEVICE(INTEL, 0x2652), board_ahci_pcs_quirk }, /* ICH6 */ 261 + { PCI_VDEVICE(INTEL, 0x2653), board_ahci_pcs_quirk }, /* ICH6M */ 262 + { PCI_VDEVICE(INTEL, 0x27c1), board_ahci_pcs_quirk }, /* ICH7 */ 263 + { PCI_VDEVICE(INTEL, 0x27c5), board_ahci_pcs_quirk }, /* ICH7M */ 264 + { PCI_VDEVICE(INTEL, 0x27c3), board_ahci_pcs_quirk }, /* ICH7R */ 275 265 { PCI_VDEVICE(AL, 0x5288), board_ahci_ign_iferr }, /* ULi M5288 */ 276 - { PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */ 277 - { PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */ 278 - { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */ 279 - { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */ 280 - { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */ 281 - { PCI_VDEVICE(INTEL, 0x2822), board_ahci_nosntf }, /* ICH8/Lewisburg RAID*/ 282 - { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */ 283 - { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */ 284 - { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */ 285 - { PCI_VDEVICE(INTEL, 0x2922), board_ahci }, /* ICH9 */ 286 - { PCI_VDEVICE(INTEL, 0x2923), board_ahci }, /* ICH9 */ 287 - { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */ 288 - { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */ 289 - { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */ 290 - { PCI_VDEVICE(INTEL, 0x2929), board_ahci_low_power }, /* ICH9M */ 291 - { PCI_VDEVICE(INTEL, 0x292a), board_ahci_low_power }, /* ICH9M */ 292 - { PCI_VDEVICE(INTEL, 0x292b), board_ahci_low_power }, /* ICH9M */ 293 - { PCI_VDEVICE(INTEL, 0x292c), board_ahci_low_power }, /* ICH9M */ 294 - { PCI_VDEVICE(INTEL, 0x292f), board_ahci_low_power }, /* ICH9M */ 295 - { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */ 296 - { PCI_VDEVICE(INTEL, 0x294e), board_ahci_low_power }, /* ICH9M */ 297 - { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */ 298 - { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */ 299 - { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */ 300 - { PCI_VDEVICE(INTEL, 0x3a22), board_ahci }, /* ICH10 */ 301 - { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */ 302 - { PCI_VDEVICE(INTEL, 0x3b22), board_ahci }, /* PCH AHCI */ 303 - { PCI_VDEVICE(INTEL, 0x3b23), board_ahci }, /* PCH AHCI */ 304 - { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */ 305 - { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */ 306 - { PCI_VDEVICE(INTEL, 0x3b29), board_ahci_low_power }, /* PCH M AHCI */ 307 - { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */ 308 - { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci_low_power }, /* PCH M RAID */ 309 - { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */ 310 - { PCI_VDEVICE(INTEL, 0x19b0), board_ahci_pcs7 }, /* DNV AHCI */ 311 - { PCI_VDEVICE(INTEL, 0x19b1), board_ahci_pcs7 }, /* DNV AHCI */ 312 - { PCI_VDEVICE(INTEL, 0x19b2), board_ahci_pcs7 }, /* DNV AHCI */ 313 - { PCI_VDEVICE(INTEL, 0x19b3), board_ahci_pcs7 }, /* DNV AHCI */ 314 - { PCI_VDEVICE(INTEL, 0x19b4), board_ahci_pcs7 }, /* DNV AHCI */ 315 - { PCI_VDEVICE(INTEL, 0x19b5), board_ahci_pcs7 }, /* DNV AHCI */ 316 - { PCI_VDEVICE(INTEL, 0x19b6), board_ahci_pcs7 }, /* DNV AHCI */ 317 - { PCI_VDEVICE(INTEL, 0x19b7), board_ahci_pcs7 }, /* DNV AHCI */ 318 - { PCI_VDEVICE(INTEL, 0x19bE), board_ahci_pcs7 }, /* DNV AHCI */ 319 - { PCI_VDEVICE(INTEL, 0x19bF), board_ahci_pcs7 }, /* DNV AHCI */ 320 - { PCI_VDEVICE(INTEL, 0x19c0), board_ahci_pcs7 }, /* DNV AHCI */ 321 - { PCI_VDEVICE(INTEL, 0x19c1), board_ahci_pcs7 }, /* DNV AHCI */ 322 - { PCI_VDEVICE(INTEL, 0x19c2), board_ahci_pcs7 }, /* DNV AHCI */ 323 - { PCI_VDEVICE(INTEL, 0x19c3), board_ahci_pcs7 }, /* DNV AHCI */ 324 - { PCI_VDEVICE(INTEL, 0x19c4), board_ahci_pcs7 }, /* DNV AHCI */ 325 - { PCI_VDEVICE(INTEL, 0x19c5), board_ahci_pcs7 }, /* DNV AHCI */ 326 - { PCI_VDEVICE(INTEL, 0x19c6), board_ahci_pcs7 }, /* DNV AHCI */ 327 - { PCI_VDEVICE(INTEL, 0x19c7), board_ahci_pcs7 }, /* DNV AHCI */ 328 - { PCI_VDEVICE(INTEL, 0x19cE), board_ahci_pcs7 }, /* DNV AHCI */ 329 - { PCI_VDEVICE(INTEL, 0x19cF), board_ahci_pcs7 }, /* DNV AHCI */ 330 - { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */ 331 - { PCI_VDEVICE(INTEL, 0x1c03), board_ahci_low_power }, /* CPT M AHCI */ 332 - { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */ 333 - { PCI_VDEVICE(INTEL, 0x1c05), board_ahci_low_power }, /* CPT M RAID */ 334 - { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */ 335 - { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */ 336 - { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */ 337 - { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */ 338 - { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */ 339 - { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */ 340 - { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */ 341 - { PCI_VDEVICE(INTEL, 0x1e03), board_ahci_low_power }, /* Panther M AHCI */ 342 - { PCI_VDEVICE(INTEL, 0x1e04), board_ahci }, /* Panther Point RAID */ 343 - { PCI_VDEVICE(INTEL, 0x1e05), board_ahci }, /* Panther Point RAID */ 344 - { PCI_VDEVICE(INTEL, 0x1e06), board_ahci }, /* Panther Point RAID */ 345 - { PCI_VDEVICE(INTEL, 0x1e07), board_ahci_low_power }, /* Panther M RAID */ 346 - { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci }, /* Panther Point RAID */ 347 - { PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */ 348 - { PCI_VDEVICE(INTEL, 0x8c03), board_ahci_low_power }, /* Lynx M AHCI */ 349 - { PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */ 350 - { PCI_VDEVICE(INTEL, 0x8c05), board_ahci_low_power }, /* Lynx M RAID */ 351 - { PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */ 352 - { PCI_VDEVICE(INTEL, 0x8c07), board_ahci_low_power }, /* Lynx M RAID */ 353 - { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */ 354 - { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci_low_power }, /* Lynx M RAID */ 355 - { PCI_VDEVICE(INTEL, 0x9c02), board_ahci_low_power }, /* Lynx LP AHCI */ 356 - { PCI_VDEVICE(INTEL, 0x9c03), board_ahci_low_power }, /* Lynx LP AHCI */ 357 - { PCI_VDEVICE(INTEL, 0x9c04), board_ahci_low_power }, /* Lynx LP RAID */ 358 - { PCI_VDEVICE(INTEL, 0x9c05), board_ahci_low_power }, /* Lynx LP RAID */ 359 - { PCI_VDEVICE(INTEL, 0x9c06), board_ahci_low_power }, /* Lynx LP RAID */ 360 - { PCI_VDEVICE(INTEL, 0x9c07), board_ahci_low_power }, /* Lynx LP RAID */ 361 - { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci_low_power }, /* Lynx LP RAID */ 362 - { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci_low_power }, /* Lynx LP RAID */ 363 - { PCI_VDEVICE(INTEL, 0x9dd3), board_ahci_low_power }, /* Cannon Lake PCH-LP AHCI */ 364 - { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */ 365 - { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */ 366 - { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */ 367 - { PCI_VDEVICE(INTEL, 0x1f25), board_ahci }, /* Avoton RAID */ 368 - { PCI_VDEVICE(INTEL, 0x1f26), board_ahci }, /* Avoton RAID */ 369 - { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */ 370 - { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */ 371 - { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */ 266 + { PCI_VDEVICE(INTEL, 0x2681), board_ahci_pcs_quirk }, /* ESB2 */ 267 + { PCI_VDEVICE(INTEL, 0x2682), board_ahci_pcs_quirk }, /* ESB2 */ 268 + { PCI_VDEVICE(INTEL, 0x2683), board_ahci_pcs_quirk }, /* ESB2 */ 269 + { PCI_VDEVICE(INTEL, 0x27c6), board_ahci_pcs_quirk }, /* ICH7-M DH */ 270 + { PCI_VDEVICE(INTEL, 0x2821), board_ahci_pcs_quirk }, /* ICH8 */ 271 + { PCI_VDEVICE(INTEL, 0x2822), board_ahci_pcs_quirk_no_sntf }, /* ICH8/Lewisburg RAID*/ 272 + { PCI_VDEVICE(INTEL, 0x2824), board_ahci_pcs_quirk }, /* ICH8 */ 273 + { PCI_VDEVICE(INTEL, 0x2829), board_ahci_pcs_quirk }, /* ICH8M */ 274 + { PCI_VDEVICE(INTEL, 0x282a), board_ahci_pcs_quirk }, /* ICH8M */ 275 + { PCI_VDEVICE(INTEL, 0x2922), board_ahci_pcs_quirk }, /* ICH9 */ 276 + { PCI_VDEVICE(INTEL, 0x2923), board_ahci_pcs_quirk }, /* ICH9 */ 277 + { PCI_VDEVICE(INTEL, 0x2924), board_ahci_pcs_quirk }, /* ICH9 */ 278 + { PCI_VDEVICE(INTEL, 0x2925), board_ahci_pcs_quirk }, /* ICH9 */ 279 + { PCI_VDEVICE(INTEL, 0x2927), board_ahci_pcs_quirk }, /* ICH9 */ 280 + { PCI_VDEVICE(INTEL, 0x2929), board_ahci_pcs_quirk }, /* ICH9M */ 281 + { PCI_VDEVICE(INTEL, 0x292a), board_ahci_pcs_quirk }, /* ICH9M */ 282 + { PCI_VDEVICE(INTEL, 0x292b), board_ahci_pcs_quirk }, /* ICH9M */ 283 + { PCI_VDEVICE(INTEL, 0x292c), board_ahci_pcs_quirk }, /* ICH9M */ 284 + { PCI_VDEVICE(INTEL, 0x292f), board_ahci_pcs_quirk }, /* ICH9M */ 285 + { PCI_VDEVICE(INTEL, 0x294d), board_ahci_pcs_quirk }, /* ICH9 */ 286 + { PCI_VDEVICE(INTEL, 0x294e), board_ahci_pcs_quirk }, /* ICH9M */ 287 + { PCI_VDEVICE(INTEL, 0x502a), board_ahci_pcs_quirk }, /* Tolapai */ 288 + { PCI_VDEVICE(INTEL, 0x502b), board_ahci_pcs_quirk }, /* Tolapai */ 289 + { PCI_VDEVICE(INTEL, 0x3a05), board_ahci_pcs_quirk }, /* ICH10 */ 290 + { PCI_VDEVICE(INTEL, 0x3a22), board_ahci_pcs_quirk }, /* ICH10 */ 291 + { PCI_VDEVICE(INTEL, 0x3a25), board_ahci_pcs_quirk }, /* ICH10 */ 292 + { PCI_VDEVICE(INTEL, 0x3b22), board_ahci_pcs_quirk }, /* PCH AHCI */ 293 + { PCI_VDEVICE(INTEL, 0x3b23), board_ahci_pcs_quirk }, /* PCH AHCI */ 294 + { PCI_VDEVICE(INTEL, 0x3b24), board_ahci_pcs_quirk }, /* PCH RAID */ 295 + { PCI_VDEVICE(INTEL, 0x3b25), board_ahci_pcs_quirk }, /* PCH RAID */ 296 + { PCI_VDEVICE(INTEL, 0x3b29), board_ahci_pcs_quirk }, /* PCH M AHCI */ 297 + { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci_pcs_quirk }, /* PCH RAID */ 298 + { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci_pcs_quirk }, /* PCH M RAID */ 299 + { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci_pcs_quirk }, /* PCH AHCI */ 300 + { PCI_VDEVICE(INTEL, 0x19b0), board_ahci }, /* DNV AHCI */ 301 + { PCI_VDEVICE(INTEL, 0x19b1), board_ahci }, /* DNV AHCI */ 302 + { PCI_VDEVICE(INTEL, 0x19b2), board_ahci }, /* DNV AHCI */ 303 + { PCI_VDEVICE(INTEL, 0x19b3), board_ahci }, /* DNV AHCI */ 304 + { PCI_VDEVICE(INTEL, 0x19b4), board_ahci }, /* DNV AHCI */ 305 + { PCI_VDEVICE(INTEL, 0x19b5), board_ahci }, /* DNV AHCI */ 306 + { PCI_VDEVICE(INTEL, 0x19b6), board_ahci }, /* DNV AHCI */ 307 + { PCI_VDEVICE(INTEL, 0x19b7), board_ahci }, /* DNV AHCI */ 308 + { PCI_VDEVICE(INTEL, 0x19bE), board_ahci }, /* DNV AHCI */ 309 + { PCI_VDEVICE(INTEL, 0x19bF), board_ahci }, /* DNV AHCI */ 310 + { PCI_VDEVICE(INTEL, 0x19c0), board_ahci }, /* DNV AHCI */ 311 + { PCI_VDEVICE(INTEL, 0x19c1), board_ahci }, /* DNV AHCI */ 312 + { PCI_VDEVICE(INTEL, 0x19c2), board_ahci }, /* DNV AHCI */ 313 + { PCI_VDEVICE(INTEL, 0x19c3), board_ahci }, /* DNV AHCI */ 314 + { PCI_VDEVICE(INTEL, 0x19c4), board_ahci }, /* DNV AHCI */ 315 + { PCI_VDEVICE(INTEL, 0x19c5), board_ahci }, /* DNV AHCI */ 316 + { PCI_VDEVICE(INTEL, 0x19c6), board_ahci }, /* DNV AHCI */ 317 + { PCI_VDEVICE(INTEL, 0x19c7), board_ahci }, /* DNV AHCI */ 318 + { PCI_VDEVICE(INTEL, 0x19cE), board_ahci }, /* DNV AHCI */ 319 + { PCI_VDEVICE(INTEL, 0x19cF), board_ahci }, /* DNV AHCI */ 320 + { PCI_VDEVICE(INTEL, 0x1c02), board_ahci_pcs_quirk }, /* CPT AHCI */ 321 + { PCI_VDEVICE(INTEL, 0x1c03), board_ahci_pcs_quirk }, /* CPT M AHCI */ 322 + { PCI_VDEVICE(INTEL, 0x1c04), board_ahci_pcs_quirk }, /* CPT RAID */ 323 + { PCI_VDEVICE(INTEL, 0x1c05), board_ahci_pcs_quirk }, /* CPT M RAID */ 324 + { PCI_VDEVICE(INTEL, 0x1c06), board_ahci_pcs_quirk }, /* CPT RAID */ 325 + { PCI_VDEVICE(INTEL, 0x1c07), board_ahci_pcs_quirk }, /* CPT RAID */ 326 + { PCI_VDEVICE(INTEL, 0x1d02), board_ahci_pcs_quirk }, /* PBG AHCI */ 327 + { PCI_VDEVICE(INTEL, 0x1d04), board_ahci_pcs_quirk }, /* PBG RAID */ 328 + { PCI_VDEVICE(INTEL, 0x1d06), board_ahci_pcs_quirk }, /* PBG RAID */ 329 + { PCI_VDEVICE(INTEL, 0x2323), board_ahci_pcs_quirk }, /* DH89xxCC AHCI */ 330 + { PCI_VDEVICE(INTEL, 0x1e02), board_ahci_pcs_quirk }, /* Panther Point AHCI */ 331 + { PCI_VDEVICE(INTEL, 0x1e03), board_ahci_pcs_quirk }, /* Panther M AHCI */ 332 + { PCI_VDEVICE(INTEL, 0x1e04), board_ahci_pcs_quirk }, /* Panther Point RAID */ 333 + { PCI_VDEVICE(INTEL, 0x1e05), board_ahci_pcs_quirk }, /* Panther Point RAID */ 334 + { PCI_VDEVICE(INTEL, 0x1e06), board_ahci_pcs_quirk }, /* Panther Point RAID */ 335 + { PCI_VDEVICE(INTEL, 0x1e07), board_ahci_pcs_quirk }, /* Panther M RAID */ 336 + { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci_pcs_quirk }, /* Panther Point RAID */ 337 + { PCI_VDEVICE(INTEL, 0x8c02), board_ahci_pcs_quirk }, /* Lynx Point AHCI */ 338 + { PCI_VDEVICE(INTEL, 0x8c03), board_ahci_pcs_quirk }, /* Lynx M AHCI */ 339 + { PCI_VDEVICE(INTEL, 0x8c04), board_ahci_pcs_quirk }, /* Lynx Point RAID */ 340 + { PCI_VDEVICE(INTEL, 0x8c05), board_ahci_pcs_quirk }, /* Lynx M RAID */ 341 + { PCI_VDEVICE(INTEL, 0x8c06), board_ahci_pcs_quirk }, /* Lynx Point RAID */ 342 + { PCI_VDEVICE(INTEL, 0x8c07), board_ahci_pcs_quirk }, /* Lynx M RAID */ 343 + { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci_pcs_quirk }, /* Lynx Point RAID */ 344 + { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci_pcs_quirk }, /* Lynx M RAID */ 345 + { PCI_VDEVICE(INTEL, 0x9c02), board_ahci_pcs_quirk }, /* Lynx LP AHCI */ 346 + { PCI_VDEVICE(INTEL, 0x9c03), board_ahci_pcs_quirk }, /* Lynx LP AHCI */ 347 + { PCI_VDEVICE(INTEL, 0x9c04), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 348 + { PCI_VDEVICE(INTEL, 0x9c05), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 349 + { PCI_VDEVICE(INTEL, 0x9c06), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 350 + { PCI_VDEVICE(INTEL, 0x9c07), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 351 + { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 352 + { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci_pcs_quirk }, /* Lynx LP RAID */ 353 + { PCI_VDEVICE(INTEL, 0x9dd3), board_ahci_pcs_quirk }, /* Cannon Lake PCH-LP AHCI */ 354 + { PCI_VDEVICE(INTEL, 0x1f22), board_ahci_pcs_quirk }, /* Avoton AHCI */ 355 + { PCI_VDEVICE(INTEL, 0x1f23), board_ahci_pcs_quirk }, /* Avoton AHCI */ 356 + { PCI_VDEVICE(INTEL, 0x1f24), board_ahci_pcs_quirk }, /* Avoton RAID */ 357 + { PCI_VDEVICE(INTEL, 0x1f25), board_ahci_pcs_quirk }, /* Avoton RAID */ 358 + { PCI_VDEVICE(INTEL, 0x1f26), board_ahci_pcs_quirk }, /* Avoton RAID */ 359 + { PCI_VDEVICE(INTEL, 0x1f27), board_ahci_pcs_quirk }, /* Avoton RAID */ 360 + { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci_pcs_quirk }, /* Avoton RAID */ 361 + { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci_pcs_quirk }, /* Avoton RAID */ 372 362 { PCI_VDEVICE(INTEL, 0x1f32), board_ahci_avn }, /* Avoton AHCI */ 373 363 { PCI_VDEVICE(INTEL, 0x1f33), board_ahci_avn }, /* Avoton AHCI */ 374 364 { PCI_VDEVICE(INTEL, 0x1f34), board_ahci_avn }, /* Avoton RAID */ ··· 371 373 { PCI_VDEVICE(INTEL, 0x1f37), board_ahci_avn }, /* Avoton RAID */ 372 374 { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */ 373 375 { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */ 374 - { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg/Lewisburg AHCI*/ 375 - { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* *burg SATA0 'RAID' */ 376 - { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* *burg SATA1 'RAID' */ 377 - { PCI_VDEVICE(INTEL, 0x282f), board_ahci }, /* *burg SATA2 'RAID' */ 378 - { PCI_VDEVICE(INTEL, 0x43d4), board_ahci }, /* Rocket Lake PCH-H RAID */ 379 - { PCI_VDEVICE(INTEL, 0x43d5), board_ahci }, /* Rocket Lake PCH-H RAID */ 380 - { PCI_VDEVICE(INTEL, 0x43d6), board_ahci }, /* Rocket Lake PCH-H RAID */ 381 - { PCI_VDEVICE(INTEL, 0x43d7), board_ahci }, /* Rocket Lake PCH-H RAID */ 382 - { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */ 383 - { PCI_VDEVICE(INTEL, 0x8d04), board_ahci }, /* Wellsburg RAID */ 384 - { PCI_VDEVICE(INTEL, 0x8d06), board_ahci }, /* Wellsburg RAID */ 385 - { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci }, /* Wellsburg RAID */ 386 - { PCI_VDEVICE(INTEL, 0x8d62), board_ahci }, /* Wellsburg AHCI */ 387 - { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */ 388 - { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */ 389 - { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */ 390 - { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */ 391 - { PCI_VDEVICE(INTEL, 0x9c83), board_ahci_low_power }, /* Wildcat LP AHCI */ 392 - { PCI_VDEVICE(INTEL, 0x9c85), board_ahci_low_power }, /* Wildcat LP RAID */ 393 - { PCI_VDEVICE(INTEL, 0x9c87), board_ahci_low_power }, /* Wildcat LP RAID */ 394 - { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci_low_power }, /* Wildcat LP RAID */ 395 - { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */ 396 - { PCI_VDEVICE(INTEL, 0x8c83), board_ahci_low_power }, /* 9 Series M AHCI */ 397 - { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */ 398 - { PCI_VDEVICE(INTEL, 0x8c85), board_ahci_low_power }, /* 9 Series M RAID */ 399 - { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */ 400 - { PCI_VDEVICE(INTEL, 0x8c87), board_ahci_low_power }, /* 9 Series M RAID */ 401 - { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */ 402 - { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci_low_power }, /* 9 Series M RAID */ 403 - { PCI_VDEVICE(INTEL, 0x9d03), board_ahci_low_power }, /* Sunrise LP AHCI */ 404 - { PCI_VDEVICE(INTEL, 0x9d05), board_ahci_low_power }, /* Sunrise LP RAID */ 405 - { PCI_VDEVICE(INTEL, 0x9d07), board_ahci_low_power }, /* Sunrise LP RAID */ 406 - { PCI_VDEVICE(INTEL, 0xa102), board_ahci }, /* Sunrise Point-H AHCI */ 407 - { PCI_VDEVICE(INTEL, 0xa103), board_ahci_low_power }, /* Sunrise M AHCI */ 408 - { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */ 409 - { PCI_VDEVICE(INTEL, 0xa106), board_ahci }, /* Sunrise Point-H RAID */ 410 - { PCI_VDEVICE(INTEL, 0xa107), board_ahci_low_power }, /* Sunrise M RAID */ 411 - { PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */ 412 - { PCI_VDEVICE(INTEL, 0xa182), board_ahci }, /* Lewisburg AHCI*/ 413 - { PCI_VDEVICE(INTEL, 0xa186), board_ahci }, /* Lewisburg RAID*/ 414 - { PCI_VDEVICE(INTEL, 0xa1d2), board_ahci }, /* Lewisburg RAID*/ 415 - { PCI_VDEVICE(INTEL, 0xa1d6), board_ahci }, /* Lewisburg RAID*/ 416 - { PCI_VDEVICE(INTEL, 0xa202), board_ahci }, /* Lewisburg AHCI*/ 417 - { PCI_VDEVICE(INTEL, 0xa206), board_ahci }, /* Lewisburg RAID*/ 418 - { PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/ 419 - { PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/ 420 - { PCI_VDEVICE(INTEL, 0xa356), board_ahci }, /* Cannon Lake PCH-H RAID */ 421 - { PCI_VDEVICE(INTEL, 0x06d7), board_ahci }, /* Comet Lake-H RAID */ 422 - { PCI_VDEVICE(INTEL, 0xa386), board_ahci }, /* Comet Lake PCH-V RAID */ 423 - { PCI_VDEVICE(INTEL, 0x0f22), board_ahci_low_power }, /* Bay Trail AHCI */ 424 - { PCI_VDEVICE(INTEL, 0x0f23), board_ahci_low_power }, /* Bay Trail AHCI */ 425 - { PCI_VDEVICE(INTEL, 0x22a3), board_ahci_low_power }, /* Cherry Tr. AHCI */ 426 - { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci_low_power }, /* ApolloLake AHCI */ 427 - { PCI_VDEVICE(INTEL, 0x34d3), board_ahci_low_power }, /* Ice Lake LP AHCI */ 428 - { PCI_VDEVICE(INTEL, 0x02d3), board_ahci_low_power }, /* Comet Lake PCH-U AHCI */ 429 - { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_low_power }, /* Comet Lake PCH RAID */ 376 + { PCI_VDEVICE(INTEL, 0x2823), board_ahci_pcs_quirk }, /* Wellsburg/Lewisburg AHCI*/ 377 + { PCI_VDEVICE(INTEL, 0x2826), board_ahci_pcs_quirk }, /* *burg SATA0 'RAID' */ 378 + { PCI_VDEVICE(INTEL, 0x2827), board_ahci_pcs_quirk }, /* *burg SATA1 'RAID' */ 379 + { PCI_VDEVICE(INTEL, 0x282f), board_ahci_pcs_quirk }, /* *burg SATA2 'RAID' */ 380 + { PCI_VDEVICE(INTEL, 0x43d4), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */ 381 + { PCI_VDEVICE(INTEL, 0x43d5), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */ 382 + { PCI_VDEVICE(INTEL, 0x43d6), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */ 383 + { PCI_VDEVICE(INTEL, 0x43d7), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */ 384 + { PCI_VDEVICE(INTEL, 0x8d02), board_ahci_pcs_quirk }, /* Wellsburg AHCI */ 385 + { PCI_VDEVICE(INTEL, 0x8d04), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 386 + { PCI_VDEVICE(INTEL, 0x8d06), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 387 + { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 388 + { PCI_VDEVICE(INTEL, 0x8d62), board_ahci_pcs_quirk }, /* Wellsburg AHCI */ 389 + { PCI_VDEVICE(INTEL, 0x8d64), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 390 + { PCI_VDEVICE(INTEL, 0x8d66), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 391 + { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci_pcs_quirk }, /* Wellsburg RAID */ 392 + { PCI_VDEVICE(INTEL, 0x23a3), board_ahci_pcs_quirk }, /* Coleto Creek AHCI */ 393 + { PCI_VDEVICE(INTEL, 0x9c83), board_ahci_pcs_quirk }, /* Wildcat LP AHCI */ 394 + { PCI_VDEVICE(INTEL, 0x9c85), board_ahci_pcs_quirk }, /* Wildcat LP RAID */ 395 + { PCI_VDEVICE(INTEL, 0x9c87), board_ahci_pcs_quirk }, /* Wildcat LP RAID */ 396 + { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci_pcs_quirk }, /* Wildcat LP RAID */ 397 + { PCI_VDEVICE(INTEL, 0x8c82), board_ahci_pcs_quirk }, /* 9 Series AHCI */ 398 + { PCI_VDEVICE(INTEL, 0x8c83), board_ahci_pcs_quirk }, /* 9 Series M AHCI */ 399 + { PCI_VDEVICE(INTEL, 0x8c84), board_ahci_pcs_quirk }, /* 9 Series RAID */ 400 + { PCI_VDEVICE(INTEL, 0x8c85), board_ahci_pcs_quirk }, /* 9 Series M RAID */ 401 + { PCI_VDEVICE(INTEL, 0x8c86), board_ahci_pcs_quirk }, /* 9 Series RAID */ 402 + { PCI_VDEVICE(INTEL, 0x8c87), board_ahci_pcs_quirk }, /* 9 Series M RAID */ 403 + { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci_pcs_quirk }, /* 9 Series RAID */ 404 + { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci_pcs_quirk }, /* 9 Series M RAID */ 405 + { PCI_VDEVICE(INTEL, 0x9d03), board_ahci_pcs_quirk }, /* Sunrise LP AHCI */ 406 + { PCI_VDEVICE(INTEL, 0x9d05), board_ahci_pcs_quirk }, /* Sunrise LP RAID */ 407 + { PCI_VDEVICE(INTEL, 0x9d07), board_ahci_pcs_quirk }, /* Sunrise LP RAID */ 408 + { PCI_VDEVICE(INTEL, 0xa102), board_ahci_pcs_quirk }, /* Sunrise Point-H AHCI */ 409 + { PCI_VDEVICE(INTEL, 0xa103), board_ahci_pcs_quirk }, /* Sunrise M AHCI */ 410 + { PCI_VDEVICE(INTEL, 0xa105), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */ 411 + { PCI_VDEVICE(INTEL, 0xa106), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */ 412 + { PCI_VDEVICE(INTEL, 0xa107), board_ahci_pcs_quirk }, /* Sunrise M RAID */ 413 + { PCI_VDEVICE(INTEL, 0xa10f), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */ 414 + { PCI_VDEVICE(INTEL, 0xa182), board_ahci_pcs_quirk }, /* Lewisburg AHCI*/ 415 + { PCI_VDEVICE(INTEL, 0xa186), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 416 + { PCI_VDEVICE(INTEL, 0xa1d2), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 417 + { PCI_VDEVICE(INTEL, 0xa1d6), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 418 + { PCI_VDEVICE(INTEL, 0xa202), board_ahci_pcs_quirk }, /* Lewisburg AHCI*/ 419 + { PCI_VDEVICE(INTEL, 0xa206), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 420 + { PCI_VDEVICE(INTEL, 0xa252), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 421 + { PCI_VDEVICE(INTEL, 0xa256), board_ahci_pcs_quirk }, /* Lewisburg RAID*/ 422 + { PCI_VDEVICE(INTEL, 0xa356), board_ahci_pcs_quirk }, /* Cannon Lake PCH-H RAID */ 423 + { PCI_VDEVICE(INTEL, 0x06d7), board_ahci_pcs_quirk }, /* Comet Lake-H RAID */ 424 + { PCI_VDEVICE(INTEL, 0xa386), board_ahci_pcs_quirk }, /* Comet Lake PCH-V RAID */ 425 + { PCI_VDEVICE(INTEL, 0x0f22), board_ahci_pcs_quirk }, /* Bay Trail AHCI */ 426 + { PCI_VDEVICE(INTEL, 0x0f23), board_ahci_pcs_quirk_no_devslp }, /* Bay Trail AHCI */ 427 + { PCI_VDEVICE(INTEL, 0x22a3), board_ahci_pcs_quirk }, /* Cherry Tr. AHCI */ 428 + { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci_pcs_quirk }, /* ApolloLake AHCI */ 429 + { PCI_VDEVICE(INTEL, 0x34d3), board_ahci_pcs_quirk }, /* Ice Lake LP AHCI */ 430 + { PCI_VDEVICE(INTEL, 0x02d3), board_ahci_pcs_quirk }, /* Comet Lake PCH-U AHCI */ 431 + { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_pcs_quirk }, /* Comet Lake PCH RAID */ 430 432 /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */ 431 - { PCI_VDEVICE(INTEL, 0x4b63), board_ahci_low_power }, /* Elkhart Lake AHCI */ 432 - { PCI_VDEVICE(INTEL, 0x7ae2), board_ahci_low_power }, /* Alder Lake-P AHCI */ 433 + { PCI_VDEVICE(INTEL, 0x4b63), board_ahci_pcs_quirk }, /* Elkhart Lake AHCI */ 434 + { PCI_VDEVICE(INTEL, 0x7ae2), board_ahci_pcs_quirk }, /* Alder Lake-P AHCI */ 433 435 434 436 /* JMicron 360/1/3/5/6, match class to avoid IDE function */ 435 437 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, ··· 457 459 { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */ 458 460 { PCI_VDEVICE(AMD, 0x7801), board_ahci_no_debounce_delay }, /* AMD Hudson-2 (AHCI mode) */ 459 461 { PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */ 460 - { PCI_VDEVICE(AMD, 0x7901), board_ahci_low_power }, /* AMD Green Sardine */ 462 + { PCI_VDEVICE(AMD, 0x7901), board_ahci }, /* AMD Green Sardine */ 461 463 /* AMD is using RAID class only for ahci controllers */ 462 464 { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 463 465 PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci }, 464 466 465 467 /* Dell S140/S150 */ 466 468 { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, PCI_SUBVENDOR_ID_DELL, PCI_ANY_ID, 467 - PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci }, 469 + PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci_pcs_quirk }, 468 470 469 471 /* VIA */ 470 472 { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */ ··· 621 623 * Samsung SSDs found on some macbooks. NCQ times out if MSI is 622 624 * enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731 623 625 */ 624 - { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_nomsi }, 625 - { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_nomsi }, 626 + { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_no_msi }, 627 + { PCI_VDEVICE(SAMSUNG, 0xa800), board_ahci_no_msi }, 626 628 627 629 /* Enmotus */ 628 630 { PCI_DEVICE(0x1c44, 0x8000), board_ahci }, ··· 1429 1431 return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff); 1430 1432 } 1431 1433 1432 - static bool ahci_broken_devslp(struct pci_dev *pdev) 1433 - { 1434 - /* device with broken DEVSLP but still showing SDS capability */ 1435 - static const struct pci_device_id ids[] = { 1436 - { PCI_VDEVICE(INTEL, 0x0f23)}, /* Valleyview SoC */ 1437 - {} 1438 - }; 1439 - 1440 - return pci_match_id(ids, pdev); 1441 - } 1442 - 1443 1434 #ifdef CONFIG_ATA_ACPI 1444 1435 static void ahci_gtf_filter_workaround(struct ata_host *host) 1445 1436 { ··· 1637 1650 return pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX); 1638 1651 } 1639 1652 1640 - static void ahci_update_initial_lpm_policy(struct ata_port *ap, 1641 - struct ahci_host_priv *hpriv) 1653 + static void ahci_mark_external_port(struct ata_port *ap) 1642 1654 { 1655 + struct ahci_host_priv *hpriv = ap->host->private_data; 1656 + void __iomem *port_mmio = ahci_port_base(ap); 1657 + u32 tmp; 1658 + 1659 + /* mark external ports (hotplug-capable, eSATA) */ 1660 + tmp = readl(port_mmio + PORT_CMD); 1661 + if (((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) || 1662 + (tmp & PORT_CMD_HPCP)) 1663 + ap->pflags |= ATA_PFLAG_EXTERNAL; 1664 + } 1665 + 1666 + static void ahci_update_initial_lpm_policy(struct ata_port *ap) 1667 + { 1668 + struct ahci_host_priv *hpriv = ap->host->private_data; 1643 1669 int policy = CONFIG_SATA_MOBILE_LPM_POLICY; 1644 1670 1645 - 1646 - /* Ignore processing for chipsets that don't use policy */ 1647 - if (!(hpriv->flags & AHCI_HFLAG_USE_LPM_POLICY)) 1671 + /* 1672 + * AHCI contains a known incompatibility between LPM and hot-plug 1673 + * removal events, see 7.3.1 Hot Plug Removal Detection and Power 1674 + * Management Interaction in AHCI 1.3.1. Therefore, do not enable 1675 + * LPM if the port advertises itself as an external port. 1676 + */ 1677 + if (ap->pflags & ATA_PFLAG_EXTERNAL) 1648 1678 return; 1649 1679 1650 1680 /* user modified policy via module param */ ··· 1684 1680 1685 1681 static void ahci_intel_pcs_quirk(struct pci_dev *pdev, struct ahci_host_priv *hpriv) 1686 1682 { 1687 - const struct pci_device_id *id = pci_match_id(ahci_pci_tbl, pdev); 1688 1683 u16 tmp16; 1689 1684 1690 - /* 1691 - * Only apply the 6-port PCS quirk for known legacy platforms. 1692 - */ 1693 - if (!id || id->vendor != PCI_VENDOR_ID_INTEL) 1694 - return; 1695 - 1696 - /* Skip applying the quirk on Denverton and beyond */ 1697 - if (((enum board_ids) id->driver_data) >= board_ahci_pcs7) 1685 + if (!(hpriv->flags & AHCI_HFLAG_INTEL_PCS_QUIRK)) 1698 1686 return; 1699 1687 1700 1688 /* ··· 1821 1825 &dev_attr_remapped_nvme.attr, 1822 1826 NULL); 1823 1827 1824 - /* must set flag prior to save config in order to take effect */ 1825 - if (ahci_broken_devslp(pdev)) 1826 - hpriv->flags |= AHCI_HFLAG_NO_DEVSLP; 1827 - 1828 1828 #ifdef CONFIG_ARM64 1829 1829 if (pdev->vendor == PCI_VENDOR_ID_HUAWEI && 1830 1830 pdev->device == 0xa235 && ··· 1934 1942 if (ap->flags & ATA_FLAG_EM) 1935 1943 ap->em_message_type = hpriv->em_msg_type; 1936 1944 1937 - ahci_update_initial_lpm_policy(ap, hpriv); 1945 + ahci_mark_external_port(ap); 1946 + 1947 + ahci_update_initial_lpm_policy(ap); 1938 1948 1939 1949 /* disabled/not-implemented port */ 1940 1950 if (!(hpriv->port_map & (1 << i)))
+4 -6
drivers/ata/ahci.h
··· 241 241 AHCI_HFLAG_YES_ALPM = BIT(23), /* force ALPM cap on */ 242 242 AHCI_HFLAG_NO_WRITE_TO_RO = BIT(24), /* don't write to read 243 243 only registers */ 244 - AHCI_HFLAG_USE_LPM_POLICY = BIT(25), /* chipset that should use 245 - SATA_MOBILE_LPM_POLICY 246 - as default lpm_policy */ 247 - AHCI_HFLAG_SUSPEND_PHYS = BIT(26), /* handle PHYs during 244 + AHCI_HFLAG_SUSPEND_PHYS = BIT(25), /* handle PHYs during 248 245 suspend/resume */ 249 - AHCI_HFLAG_NO_SXS = BIT(28), /* SXS not supported */ 250 - AHCI_HFLAG_43BIT_ONLY = BIT(29), /* 43bit DMA addr limit */ 246 + AHCI_HFLAG_NO_SXS = BIT(26), /* SXS not supported */ 247 + AHCI_HFLAG_43BIT_ONLY = BIT(27), /* 43bit DMA addr limit */ 248 + AHCI_HFLAG_INTEL_PCS_QUIRK = BIT(28), /* apply Intel PCS quirk */ 251 249 252 250 /* ap->flags bits */ 253 251
+10 -11
drivers/ata/libahci.c
··· 1280 1280 int port_no, void __iomem *mmio, 1281 1281 void __iomem *port_mmio) 1282 1282 { 1283 - struct ahci_host_priv *hpriv = ap->host->private_data; 1284 1283 const char *emsg = NULL; 1285 1284 int rc; 1286 - u32 tmp; 1287 1285 1288 1286 /* make sure port is not active */ 1289 1287 rc = ahci_deinit_port(ap, &emsg); ··· 1289 1291 dev_warn(dev, "%s (%d)\n", emsg, rc); 1290 1292 1291 1293 ahci_port_clear_pending_irq(ap); 1292 - 1293 - /* mark esata ports */ 1294 - tmp = readl(port_mmio + PORT_CMD); 1295 - if ((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) 1296 - ap->pflags |= ATA_PFLAG_EXTERNAL; 1297 1294 } 1298 1295 1299 1296 void ahci_init_controller(struct ata_host *host) ··· 2620 2627 speed_s = "?"; 2621 2628 2622 2629 dev_info(host->dev, 2623 - "AHCI %02x%02x.%02x%02x " 2624 - "%u slots %u ports %s Gbps 0x%x impl %s mode\n" 2630 + "AHCI vers %02x%02x.%02x%02x, " 2631 + "%u command slots, %s Gbps, %s mode\n" 2625 2632 , 2626 2633 2627 2634 (vers >> 24) & 0xff, ··· 2630 2637 vers & 0xff, 2631 2638 2632 2639 ((cap >> 8) & 0x1f) + 1, 2633 - (cap & 0x1f) + 1, 2634 2640 speed_s, 2635 - impl, 2636 2641 scc_s); 2642 + 2643 + dev_info(host->dev, 2644 + "%u/%u ports implemented (port mask 0x%x)\n" 2645 + , 2646 + 2647 + hweight32(impl), 2648 + (cap & 0x1f) + 1, 2649 + impl); 2637 2650 2638 2651 dev_info(host->dev, 2639 2652 "flags: "
+1 -1
drivers/ata/pata_parport/pata_parport.c
··· 464 464 /* nothing to do here but required to avoid warning on device removal */ 465 465 } 466 466 467 - static struct bus_type pata_parport_bus_type = { 467 + static const struct bus_type pata_parport_bus_type = { 468 468 .name = DRV_NAME, 469 469 }; 470 470