1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * ahci.c - AHCI SATA support 4 * 5 * Maintained by: Tejun Heo <tj@kernel.org> 6 * Please ALWAYS copy linux-ide@vger.kernel.org 7 * on emails. 8 * 9 * Copyright 2004-2005 Red Hat, Inc. 10 * 11 * libata documentation is available via 'make {ps|pdf}docs', 12 * as Documentation/driver-api/libata.rst 13 * 14 * AHCI hardware documentation: 15 * http://www.intel.com/technology/serialata/pdf/rev1_0.pdf 16 * http://www.intel.com/technology/serialata/pdf/rev1_1.pdf 17 */ 18 19 #include <linux/kernel.h> 20 #include <linux/module.h> 21 #include <linux/pci.h> 22 #include <linux/blkdev.h> 23 #include <linux/delay.h> 24 #include <linux/interrupt.h> 25 #include <linux/dma-mapping.h> 26 #include <linux/device.h> 27 #include <linux/dmi.h> 28 #include <linux/gfp.h> 29 #include <scsi/scsi_host.h> 30 #include <scsi/scsi_cmnd.h> 31 #include <linux/libata.h> 32 #include <linux/ahci-remap.h> 33 #include <linux/io-64-nonatomic-lo-hi.h> 34 #include "ahci.h" 35 36 #define DRV_NAME "ahci" 37 #define DRV_VERSION "3.0" 38 39 enum { 40 AHCI_PCI_BAR_STA2X11 = 0, 41 AHCI_PCI_BAR_CAVIUM = 0, 42 AHCI_PCI_BAR_LOONGSON = 0, 43 AHCI_PCI_BAR_ENMOTUS = 2, 44 AHCI_PCI_BAR_CAVIUM_GEN5 = 4, 45 AHCI_PCI_BAR_STANDARD = 5, 46 }; 47 48 enum board_ids { 49 /* board IDs by feature in alphabetical order */ 50 board_ahci, 51 board_ahci_43bit_dma, 52 board_ahci_ign_iferr, 53 board_ahci_no_debounce_delay, 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, 65 board_ahci_yes_fbs, 66 board_ahci_yes_fbs_atapi_dma, 67 68 /* board IDs for specific chipsets in alphabetical order */ 69 board_ahci_al, 70 board_ahci_avn, 71 board_ahci_jmb585, 72 board_ahci_mcp65, 73 board_ahci_mcp77, 74 board_ahci_mcp89, 75 board_ahci_mv, 76 board_ahci_sb600, 77 board_ahci_sb700, /* for SB700 and SB800 */ 78 board_ahci_vt8251, 79 80 /* aliases */ 81 board_ahci_mcp_linux = board_ahci_mcp65, 82 board_ahci_mcp67 = board_ahci_mcp65, 83 board_ahci_mcp73 = board_ahci_mcp65, 84 board_ahci_mcp79 = board_ahci_mcp77, 85 }; 86 87 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); 88 static void ahci_remove_one(struct pci_dev *dev); 89 static void ahci_shutdown_one(struct pci_dev *dev); 90 static void ahci_intel_pcs_quirk(struct pci_dev *pdev, struct ahci_host_priv *hpriv); 91 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class, 92 unsigned long deadline); 93 static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class, 94 unsigned long deadline); 95 static void ahci_mcp89_apple_enable(struct pci_dev *pdev); 96 static bool is_mcp89_apple(struct pci_dev *pdev); 97 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, 98 unsigned long deadline); 99 #ifdef CONFIG_PM 100 static int ahci_pci_device_runtime_suspend(struct device *dev); 101 static int ahci_pci_device_runtime_resume(struct device *dev); 102 #ifdef CONFIG_PM_SLEEP 103 static int ahci_pci_device_suspend(struct device *dev); 104 static int ahci_pci_device_resume(struct device *dev); 105 #endif 106 #endif /* CONFIG_PM */ 107 108 static const struct scsi_host_template ahci_sht = { 109 AHCI_SHT("ahci"), 110 }; 111 112 static struct ata_port_operations ahci_vt8251_ops = { 113 .inherits = &ahci_ops, 114 .reset.hardreset = ahci_vt8251_hardreset, 115 }; 116 117 static struct ata_port_operations ahci_p5wdh_ops = { 118 .inherits = &ahci_ops, 119 .reset.hardreset = ahci_p5wdh_hardreset, 120 }; 121 122 static struct ata_port_operations ahci_avn_ops = { 123 .inherits = &ahci_ops, 124 .reset.hardreset = ahci_avn_hardreset, 125 }; 126 127 static const struct ata_port_info ahci_port_info[] = { 128 /* by features */ 129 [board_ahci] = { 130 .flags = AHCI_FLAG_COMMON, 131 .pio_mask = ATA_PIO4, 132 .udma_mask = ATA_UDMA6, 133 .port_ops = &ahci_ops, 134 }, 135 [board_ahci_43bit_dma] = { 136 AHCI_HFLAGS (AHCI_HFLAG_43BIT_ONLY), 137 .flags = AHCI_FLAG_COMMON, 138 .pio_mask = ATA_PIO4, 139 .udma_mask = ATA_UDMA6, 140 .port_ops = &ahci_ops, 141 }, 142 [board_ahci_ign_iferr] = { 143 AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR), 144 .flags = AHCI_FLAG_COMMON, 145 .pio_mask = ATA_PIO4, 146 .udma_mask = ATA_UDMA6, 147 .port_ops = &ahci_ops, 148 }, 149 [board_ahci_no_debounce_delay] = { 150 .flags = AHCI_FLAG_COMMON, 151 .link_flags = ATA_LFLAG_NO_DEBOUNCE_DELAY, 152 .pio_mask = ATA_PIO4, 153 .udma_mask = ATA_UDMA6, 154 .port_ops = &ahci_ops, 155 }, 156 [board_ahci_no_msi] = { 157 AHCI_HFLAGS (AHCI_HFLAG_NO_MSI), 158 .flags = AHCI_FLAG_COMMON, 159 .pio_mask = ATA_PIO4, 160 .udma_mask = ATA_UDMA6, 161 .port_ops = &ahci_ops, 162 }, 163 [board_ahci_pcs_quirk] = { 164 AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK), 165 .flags = AHCI_FLAG_COMMON, 166 .pio_mask = ATA_PIO4, 167 .udma_mask = ATA_UDMA6, 168 .port_ops = &ahci_ops, 169 }, 170 [board_ahci_pcs_quirk_no_devslp] = { 171 AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK | 172 AHCI_HFLAG_NO_DEVSLP), 173 .flags = AHCI_FLAG_COMMON, 174 .pio_mask = ATA_PIO4, 175 .udma_mask = ATA_UDMA6, 176 .port_ops = &ahci_ops, 177 }, 178 [board_ahci_pcs_quirk_no_sntf] = { 179 AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK | 180 AHCI_HFLAG_NO_SNTF), 181 .flags = AHCI_FLAG_COMMON, 182 .pio_mask = ATA_PIO4, 183 .udma_mask = ATA_UDMA6, 184 .port_ops = &ahci_ops, 185 }, 186 [board_ahci_yes_fbs] = { 187 AHCI_HFLAGS (AHCI_HFLAG_YES_FBS), 188 .flags = AHCI_FLAG_COMMON, 189 .pio_mask = ATA_PIO4, 190 .udma_mask = ATA_UDMA6, 191 .port_ops = &ahci_ops, 192 }, 193 [board_ahci_yes_fbs_atapi_dma] = { 194 AHCI_HFLAGS (AHCI_HFLAG_YES_FBS | 195 AHCI_HFLAG_ATAPI_DMA_QUIRK), 196 .flags = AHCI_FLAG_COMMON, 197 .pio_mask = ATA_PIO4, 198 .udma_mask = ATA_UDMA6, 199 .port_ops = &ahci_ops, 200 }, 201 /* by chipsets */ 202 [board_ahci_al] = { 203 AHCI_HFLAGS (AHCI_HFLAG_NO_PMP | AHCI_HFLAG_NO_MSI), 204 .flags = AHCI_FLAG_COMMON, 205 .pio_mask = ATA_PIO4, 206 .udma_mask = ATA_UDMA6, 207 .port_ops = &ahci_ops, 208 }, 209 [board_ahci_avn] = { 210 AHCI_HFLAGS (AHCI_HFLAG_INTEL_PCS_QUIRK), 211 .flags = AHCI_FLAG_COMMON, 212 .pio_mask = ATA_PIO4, 213 .udma_mask = ATA_UDMA6, 214 .port_ops = &ahci_avn_ops, 215 }, 216 /* JMicron JMB582/585: 64-bit DMA is broken, force 32-bit */ 217 [board_ahci_jmb585] = { 218 AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR | 219 AHCI_HFLAG_32BIT_ONLY), 220 .flags = AHCI_FLAG_COMMON, 221 .pio_mask = ATA_PIO4, 222 .udma_mask = ATA_UDMA6, 223 .port_ops = &ahci_ops, 224 }, 225 [board_ahci_mcp65] = { 226 AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP | 227 AHCI_HFLAG_YES_NCQ), 228 .flags = AHCI_FLAG_COMMON | ATA_FLAG_NO_DIPM, 229 .pio_mask = ATA_PIO4, 230 .udma_mask = ATA_UDMA6, 231 .port_ops = &ahci_ops, 232 }, 233 [board_ahci_mcp77] = { 234 AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP), 235 .flags = AHCI_FLAG_COMMON, 236 .pio_mask = ATA_PIO4, 237 .udma_mask = ATA_UDMA6, 238 .port_ops = &ahci_ops, 239 }, 240 [board_ahci_mcp89] = { 241 AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA), 242 .flags = AHCI_FLAG_COMMON, 243 .pio_mask = ATA_PIO4, 244 .udma_mask = ATA_UDMA6, 245 .port_ops = &ahci_ops, 246 }, 247 [board_ahci_mv] = { 248 AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI | 249 AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP), 250 .flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA, 251 .pio_mask = ATA_PIO4, 252 .udma_mask = ATA_UDMA6, 253 .port_ops = &ahci_ops, 254 }, 255 [board_ahci_sb600] = { 256 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL | 257 AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255 | 258 AHCI_HFLAG_32BIT_ONLY), 259 .flags = AHCI_FLAG_COMMON, 260 .pio_mask = ATA_PIO4, 261 .udma_mask = ATA_UDMA6, 262 .port_ops = &ahci_pmp_retry_srst_ops, 263 }, 264 [board_ahci_sb700] = { /* for SB700 and SB800 */ 265 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL), 266 .flags = AHCI_FLAG_COMMON, 267 .pio_mask = ATA_PIO4, 268 .udma_mask = ATA_UDMA6, 269 .port_ops = &ahci_pmp_retry_srst_ops, 270 }, 271 [board_ahci_vt8251] = { 272 AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP), 273 .flags = AHCI_FLAG_COMMON, 274 .pio_mask = ATA_PIO4, 275 .udma_mask = ATA_UDMA6, 276 .port_ops = &ahci_vt8251_ops, 277 }, 278 }; 279 280 static const struct pci_device_id ahci_pci_tbl[] = { 281 /* Intel */ 282 { 283 /* Comet Lake PCH-H RAID */ 284 PCI_VDEVICE(INTEL, 0x06d6), 285 .driver_data = board_ahci_pcs_quirk, 286 }, { 287 /* ICH6 */ 288 PCI_VDEVICE(INTEL, 0x2652), 289 .driver_data = board_ahci_pcs_quirk, 290 }, { 291 /* ICH6M */ 292 PCI_VDEVICE(INTEL, 0x2653), 293 .driver_data = board_ahci_pcs_quirk, 294 }, { 295 /* ICH7 */ 296 PCI_VDEVICE(INTEL, 0x27c1), 297 .driver_data = board_ahci_pcs_quirk, 298 }, { 299 /* ICH7M */ 300 PCI_VDEVICE(INTEL, 0x27c5), 301 .driver_data = board_ahci_pcs_quirk, 302 }, { 303 /* ICH7R */ 304 PCI_VDEVICE(INTEL, 0x27c3), 305 .driver_data = board_ahci_pcs_quirk, 306 }, { 307 /* ULi M5288 */ 308 PCI_VDEVICE(AL, 0x5288), 309 .driver_data = board_ahci_ign_iferr, 310 }, { 311 /* ESB2 */ 312 PCI_VDEVICE(INTEL, 0x2681), 313 .driver_data = board_ahci_pcs_quirk, 314 }, { 315 /* ESB2 */ 316 PCI_VDEVICE(INTEL, 0x2682), 317 .driver_data = board_ahci_pcs_quirk, 318 }, { 319 /* ESB2 */ 320 PCI_VDEVICE(INTEL, 0x2683), 321 .driver_data = board_ahci_pcs_quirk, 322 }, { 323 /* ICH7-M DH */ 324 PCI_VDEVICE(INTEL, 0x27c6), 325 .driver_data = board_ahci_pcs_quirk, 326 }, { 327 /* ICH8 */ 328 PCI_VDEVICE(INTEL, 0x2821), 329 .driver_data = board_ahci_pcs_quirk, 330 }, { 331 /* ICH8/Lewisburg RAID*/ 332 PCI_VDEVICE(INTEL, 0x2822), 333 .driver_data = board_ahci_pcs_quirk_no_sntf, 334 }, { 335 /* ICH8 */ 336 PCI_VDEVICE(INTEL, 0x2824), 337 .driver_data = board_ahci_pcs_quirk, 338 }, { 339 /* ICH8M */ 340 PCI_VDEVICE(INTEL, 0x2829), 341 .driver_data = board_ahci_pcs_quirk, 342 }, { 343 /* ICH8M */ 344 PCI_VDEVICE(INTEL, 0x282a), 345 .driver_data = board_ahci_pcs_quirk, 346 }, { 347 /* ICH9 */ 348 PCI_VDEVICE(INTEL, 0x2922), 349 .driver_data = board_ahci_pcs_quirk, 350 }, { 351 /* ICH9 */ 352 PCI_VDEVICE(INTEL, 0x2923), 353 .driver_data = board_ahci_pcs_quirk, 354 }, { 355 /* ICH9 */ 356 PCI_VDEVICE(INTEL, 0x2924), 357 .driver_data = board_ahci_pcs_quirk, 358 }, { 359 /* ICH9 */ 360 PCI_VDEVICE(INTEL, 0x2925), 361 .driver_data = board_ahci_pcs_quirk, 362 }, { 363 /* ICH9 */ 364 PCI_VDEVICE(INTEL, 0x2927), 365 .driver_data = board_ahci_pcs_quirk, 366 }, { 367 /* ICH9M */ 368 PCI_VDEVICE(INTEL, 0x2929), 369 .driver_data = board_ahci_pcs_quirk, 370 }, { 371 /* ICH9M */ 372 PCI_VDEVICE(INTEL, 0x292a), 373 .driver_data = board_ahci_pcs_quirk, 374 }, { 375 /* ICH9M */ 376 PCI_VDEVICE(INTEL, 0x292b), 377 .driver_data = board_ahci_pcs_quirk, 378 }, { 379 /* ICH9M */ 380 PCI_VDEVICE(INTEL, 0x292c), 381 .driver_data = board_ahci_pcs_quirk, 382 }, { 383 /* ICH9M */ 384 PCI_VDEVICE(INTEL, 0x292f), 385 .driver_data = board_ahci_pcs_quirk, 386 }, { 387 /* ICH9 */ 388 PCI_VDEVICE(INTEL, 0x294d), 389 .driver_data = board_ahci_pcs_quirk, 390 }, { 391 /* ICH9M */ 392 PCI_VDEVICE(INTEL, 0x294e), 393 .driver_data = board_ahci_pcs_quirk, 394 }, { 395 /* Tolapai */ 396 PCI_VDEVICE(INTEL, 0x502a), 397 .driver_data = board_ahci_pcs_quirk, 398 }, { 399 /* Tolapai */ 400 PCI_VDEVICE(INTEL, 0x502b), 401 .driver_data = board_ahci_pcs_quirk, 402 }, { 403 /* ICH10 */ 404 PCI_VDEVICE(INTEL, 0x3a05), 405 .driver_data = board_ahci_pcs_quirk, 406 }, { 407 /* ICH10 */ 408 PCI_VDEVICE(INTEL, 0x3a22), 409 .driver_data = board_ahci_pcs_quirk, 410 }, { 411 /* ICH10 */ 412 PCI_VDEVICE(INTEL, 0x3a25), 413 .driver_data = board_ahci_pcs_quirk, 414 }, { 415 /* PCH AHCI */ 416 PCI_VDEVICE(INTEL, 0x3b22), 417 .driver_data = board_ahci_pcs_quirk, 418 }, { 419 /* PCH AHCI */ 420 PCI_VDEVICE(INTEL, 0x3b23), 421 .driver_data = board_ahci_pcs_quirk, 422 }, { 423 /* PCH RAID */ 424 PCI_VDEVICE(INTEL, 0x3b24), 425 .driver_data = board_ahci_pcs_quirk, 426 }, { 427 /* PCH RAID */ 428 PCI_VDEVICE(INTEL, 0x3b25), 429 .driver_data = board_ahci_pcs_quirk, 430 }, { 431 /* PCH M AHCI */ 432 PCI_VDEVICE(INTEL, 0x3b29), 433 .driver_data = board_ahci_pcs_quirk, 434 }, { 435 /* PCH RAID */ 436 PCI_VDEVICE(INTEL, 0x3b2b), 437 .driver_data = board_ahci_pcs_quirk, 438 }, { 439 /* PCH M RAID */ 440 PCI_VDEVICE(INTEL, 0x3b2c), 441 .driver_data = board_ahci_pcs_quirk, 442 }, { 443 /* PCH AHCI */ 444 PCI_VDEVICE(INTEL, 0x3b2f), 445 .driver_data = board_ahci_pcs_quirk, 446 }, { 447 /* DNV AHCI */ 448 PCI_VDEVICE(INTEL, 0x19b0), 449 .driver_data = board_ahci, 450 }, { 451 /* DNV AHCI */ 452 PCI_VDEVICE(INTEL, 0x19b1), 453 .driver_data = board_ahci, 454 }, { 455 /* DNV AHCI */ 456 PCI_VDEVICE(INTEL, 0x19b2), 457 .driver_data = board_ahci, 458 }, { 459 /* DNV AHCI */ 460 PCI_VDEVICE(INTEL, 0x19b3), 461 .driver_data = board_ahci, 462 }, { 463 /* DNV AHCI */ 464 PCI_VDEVICE(INTEL, 0x19b4), 465 .driver_data = board_ahci, 466 }, { 467 /* DNV AHCI */ 468 PCI_VDEVICE(INTEL, 0x19b5), 469 .driver_data = board_ahci, 470 }, { 471 /* DNV AHCI */ 472 PCI_VDEVICE(INTEL, 0x19b6), 473 .driver_data = board_ahci, 474 }, { 475 /* DNV AHCI */ 476 PCI_VDEVICE(INTEL, 0x19b7), 477 .driver_data = board_ahci, 478 }, { 479 /* DNV AHCI */ 480 PCI_VDEVICE(INTEL, 0x19bE), 481 .driver_data = board_ahci, 482 }, { 483 /* DNV AHCI */ 484 PCI_VDEVICE(INTEL, 0x19bF), 485 .driver_data = board_ahci, 486 }, { 487 /* DNV AHCI */ 488 PCI_VDEVICE(INTEL, 0x19c0), 489 .driver_data = board_ahci, 490 }, { 491 /* DNV AHCI */ 492 PCI_VDEVICE(INTEL, 0x19c1), 493 .driver_data = board_ahci, 494 }, { 495 /* DNV AHCI */ 496 PCI_VDEVICE(INTEL, 0x19c2), 497 .driver_data = board_ahci, 498 }, { 499 /* DNV AHCI */ 500 PCI_VDEVICE(INTEL, 0x19c3), 501 .driver_data = board_ahci, 502 }, { 503 /* DNV AHCI */ 504 PCI_VDEVICE(INTEL, 0x19c4), 505 .driver_data = board_ahci, 506 }, { 507 /* DNV AHCI */ 508 PCI_VDEVICE(INTEL, 0x19c5), 509 .driver_data = board_ahci, 510 }, { 511 /* DNV AHCI */ 512 PCI_VDEVICE(INTEL, 0x19c6), 513 .driver_data = board_ahci, 514 }, { 515 /* DNV AHCI */ 516 PCI_VDEVICE(INTEL, 0x19c7), 517 .driver_data = board_ahci, 518 }, { 519 /* DNV AHCI */ 520 PCI_VDEVICE(INTEL, 0x19cE), 521 .driver_data = board_ahci, 522 }, { 523 /* DNV AHCI */ 524 PCI_VDEVICE(INTEL, 0x19cF), 525 .driver_data = board_ahci, 526 }, { 527 /* CPT AHCI */ 528 PCI_VDEVICE(INTEL, 0x1c02), 529 .driver_data = board_ahci_pcs_quirk, 530 }, { 531 /* CPT M AHCI */ 532 PCI_VDEVICE(INTEL, 0x1c03), 533 .driver_data = board_ahci_pcs_quirk, 534 }, { 535 /* CPT RAID */ 536 PCI_VDEVICE(INTEL, 0x1c04), 537 .driver_data = board_ahci_pcs_quirk, 538 }, { 539 /* CPT M RAID */ 540 PCI_VDEVICE(INTEL, 0x1c05), 541 .driver_data = board_ahci_pcs_quirk, 542 }, { 543 /* CPT RAID */ 544 PCI_VDEVICE(INTEL, 0x1c06), 545 .driver_data = board_ahci_pcs_quirk, 546 }, { 547 /* CPT RAID */ 548 PCI_VDEVICE(INTEL, 0x1c07), 549 .driver_data = board_ahci_pcs_quirk, 550 }, { 551 /* PBG AHCI */ 552 PCI_VDEVICE(INTEL, 0x1d02), 553 .driver_data = board_ahci_pcs_quirk, 554 }, { 555 /* PBG RAID */ 556 PCI_VDEVICE(INTEL, 0x1d04), 557 .driver_data = board_ahci_pcs_quirk, 558 }, { 559 /* PBG RAID */ 560 PCI_VDEVICE(INTEL, 0x1d06), 561 .driver_data = board_ahci_pcs_quirk, 562 }, { 563 /* DH89xxCC AHCI */ 564 PCI_VDEVICE(INTEL, 0x2323), 565 .driver_data = board_ahci_pcs_quirk, 566 }, { 567 /* Panther Point AHCI */ 568 PCI_VDEVICE(INTEL, 0x1e02), 569 .driver_data = board_ahci_pcs_quirk, 570 }, { 571 /* Panther M AHCI */ 572 PCI_VDEVICE(INTEL, 0x1e03), 573 .driver_data = board_ahci_pcs_quirk, 574 }, { 575 /* Panther Point RAID */ 576 PCI_VDEVICE(INTEL, 0x1e04), 577 .driver_data = board_ahci_pcs_quirk, 578 }, { 579 /* Panther Point RAID */ 580 PCI_VDEVICE(INTEL, 0x1e05), 581 .driver_data = board_ahci_pcs_quirk, 582 }, { 583 /* Panther Point RAID */ 584 PCI_VDEVICE(INTEL, 0x1e06), 585 .driver_data = board_ahci_pcs_quirk, 586 }, { 587 /* Panther M RAID */ 588 PCI_VDEVICE(INTEL, 0x1e07), 589 .driver_data = board_ahci_pcs_quirk, 590 }, { 591 /* Panther Point RAID */ 592 PCI_VDEVICE(INTEL, 0x1e0e), 593 .driver_data = board_ahci_pcs_quirk, 594 }, { 595 /* Lynx Point AHCI */ 596 PCI_VDEVICE(INTEL, 0x8c02), 597 .driver_data = board_ahci_pcs_quirk, 598 }, { 599 /* Lynx M AHCI */ 600 PCI_VDEVICE(INTEL, 0x8c03), 601 .driver_data = board_ahci_pcs_quirk, 602 }, { 603 /* Lynx Point RAID */ 604 PCI_VDEVICE(INTEL, 0x8c04), 605 .driver_data = board_ahci_pcs_quirk, 606 }, { 607 /* Lynx M RAID */ 608 PCI_VDEVICE(INTEL, 0x8c05), 609 .driver_data = board_ahci_pcs_quirk, 610 }, { 611 /* Lynx Point RAID */ 612 PCI_VDEVICE(INTEL, 0x8c06), 613 .driver_data = board_ahci_pcs_quirk, 614 }, { 615 /* Lynx M RAID */ 616 PCI_VDEVICE(INTEL, 0x8c07), 617 .driver_data = board_ahci_pcs_quirk, 618 }, { 619 /* Lynx Point RAID */ 620 PCI_VDEVICE(INTEL, 0x8c0e), 621 .driver_data = board_ahci_pcs_quirk, 622 }, { 623 /* Lynx M RAID */ 624 PCI_VDEVICE(INTEL, 0x8c0f), 625 .driver_data = board_ahci_pcs_quirk, 626 }, { 627 /* Lynx LP AHCI */ 628 PCI_VDEVICE(INTEL, 0x9c02), 629 .driver_data = board_ahci_pcs_quirk, 630 }, { 631 /* Lynx LP AHCI */ 632 PCI_VDEVICE(INTEL, 0x9c03), 633 .driver_data = board_ahci_pcs_quirk, 634 }, { 635 /* Lynx LP RAID */ 636 PCI_VDEVICE(INTEL, 0x9c04), 637 .driver_data = board_ahci_pcs_quirk, 638 }, { 639 /* Lynx LP RAID */ 640 PCI_VDEVICE(INTEL, 0x9c05), 641 .driver_data = board_ahci_pcs_quirk, 642 }, { 643 /* Lynx LP RAID */ 644 PCI_VDEVICE(INTEL, 0x9c06), 645 .driver_data = board_ahci_pcs_quirk, 646 }, { 647 /* Lynx LP RAID */ 648 PCI_VDEVICE(INTEL, 0x9c07), 649 .driver_data = board_ahci_pcs_quirk, 650 }, { 651 /* Lynx LP RAID */ 652 PCI_VDEVICE(INTEL, 0x9c0e), 653 .driver_data = board_ahci_pcs_quirk, 654 }, { 655 /* Lynx LP RAID */ 656 PCI_VDEVICE(INTEL, 0x9c0f), 657 .driver_data = board_ahci_pcs_quirk, 658 }, { 659 /* Cannon Lake PCH-LP AHCI */ 660 PCI_VDEVICE(INTEL, 0x9dd3), 661 .driver_data = board_ahci_pcs_quirk, 662 }, { 663 /* Avoton AHCI */ 664 PCI_VDEVICE(INTEL, 0x1f22), 665 .driver_data = board_ahci_pcs_quirk, 666 }, { 667 /* Avoton AHCI */ 668 PCI_VDEVICE(INTEL, 0x1f23), 669 .driver_data = board_ahci_pcs_quirk, 670 }, { 671 /* Avoton RAID */ 672 PCI_VDEVICE(INTEL, 0x1f24), 673 .driver_data = board_ahci_pcs_quirk, 674 }, { 675 /* Avoton RAID */ 676 PCI_VDEVICE(INTEL, 0x1f25), 677 .driver_data = board_ahci_pcs_quirk, 678 }, { 679 /* Avoton RAID */ 680 PCI_VDEVICE(INTEL, 0x1f26), 681 .driver_data = board_ahci_pcs_quirk, 682 }, { 683 /* Avoton RAID */ 684 PCI_VDEVICE(INTEL, 0x1f27), 685 .driver_data = board_ahci_pcs_quirk, 686 }, { 687 /* Avoton RAID */ 688 PCI_VDEVICE(INTEL, 0x1f2e), 689 .driver_data = board_ahci_pcs_quirk, 690 }, { 691 /* Avoton RAID */ 692 PCI_VDEVICE(INTEL, 0x1f2f), 693 .driver_data = board_ahci_pcs_quirk, 694 }, { 695 /* Avoton AHCI */ 696 PCI_VDEVICE(INTEL, 0x1f32), 697 .driver_data = board_ahci_avn, 698 }, { 699 /* Avoton AHCI */ 700 PCI_VDEVICE(INTEL, 0x1f33), 701 .driver_data = board_ahci_avn, 702 }, { 703 /* Avoton RAID */ 704 PCI_VDEVICE(INTEL, 0x1f34), 705 .driver_data = board_ahci_avn, 706 }, { 707 /* Avoton RAID */ 708 PCI_VDEVICE(INTEL, 0x1f35), 709 .driver_data = board_ahci_avn, 710 }, { 711 /* Avoton RAID */ 712 PCI_VDEVICE(INTEL, 0x1f36), 713 .driver_data = board_ahci_avn, 714 }, { 715 /* Avoton RAID */ 716 PCI_VDEVICE(INTEL, 0x1f37), 717 .driver_data = board_ahci_avn, 718 }, { 719 /* Avoton RAID */ 720 PCI_VDEVICE(INTEL, 0x1f3e), 721 .driver_data = board_ahci_avn, 722 }, { 723 /* Avoton RAID */ 724 PCI_VDEVICE(INTEL, 0x1f3f), 725 .driver_data = board_ahci_avn, 726 }, { 727 /* Wellsburg/Lewisburg AHCI*/ 728 PCI_VDEVICE(INTEL, 0x2823), 729 .driver_data = board_ahci_pcs_quirk, 730 }, { 731 /* *burg SATA0 'RAID' */ 732 PCI_VDEVICE(INTEL, 0x2826), 733 .driver_data = board_ahci_pcs_quirk, 734 }, { 735 /* *burg SATA1 'RAID' */ 736 PCI_VDEVICE(INTEL, 0x2827), 737 .driver_data = board_ahci_pcs_quirk, 738 }, { 739 /* *burg SATA2 'RAID' */ 740 PCI_VDEVICE(INTEL, 0x282f), 741 .driver_data = board_ahci_pcs_quirk, 742 }, { 743 /* Rocket Lake PCH-H RAID */ 744 PCI_VDEVICE(INTEL, 0x43d4), 745 .driver_data = board_ahci_pcs_quirk, 746 }, { 747 /* Rocket Lake PCH-H RAID */ 748 PCI_VDEVICE(INTEL, 0x43d5), 749 .driver_data = board_ahci_pcs_quirk, 750 }, { 751 /* Rocket Lake PCH-H RAID */ 752 PCI_VDEVICE(INTEL, 0x43d6), 753 .driver_data = board_ahci_pcs_quirk, 754 }, { 755 /* Rocket Lake PCH-H RAID */ 756 PCI_VDEVICE(INTEL, 0x43d7), 757 .driver_data = board_ahci_pcs_quirk, 758 }, { 759 /* Wellsburg AHCI */ 760 PCI_VDEVICE(INTEL, 0x8d02), 761 .driver_data = board_ahci_pcs_quirk, 762 }, { 763 /* Wellsburg RAID */ 764 PCI_VDEVICE(INTEL, 0x8d04), 765 .driver_data = board_ahci_pcs_quirk, 766 }, { 767 /* Wellsburg RAID */ 768 PCI_VDEVICE(INTEL, 0x8d06), 769 .driver_data = board_ahci_pcs_quirk, 770 }, { 771 /* Wellsburg RAID */ 772 PCI_VDEVICE(INTEL, 0x8d0e), 773 .driver_data = board_ahci_pcs_quirk, 774 }, { 775 /* Wellsburg AHCI */ 776 PCI_VDEVICE(INTEL, 0x8d62), 777 .driver_data = board_ahci_pcs_quirk, 778 }, { 779 /* Wellsburg RAID */ 780 PCI_VDEVICE(INTEL, 0x8d64), 781 .driver_data = board_ahci_pcs_quirk, 782 }, { 783 /* Wellsburg RAID */ 784 PCI_VDEVICE(INTEL, 0x8d66), 785 .driver_data = board_ahci_pcs_quirk, 786 }, { 787 /* Wellsburg RAID */ 788 PCI_VDEVICE(INTEL, 0x8d6e), 789 .driver_data = board_ahci_pcs_quirk, 790 }, { 791 /* Coleto Creek AHCI */ 792 PCI_VDEVICE(INTEL, 0x23a3), 793 .driver_data = board_ahci_pcs_quirk, 794 }, { 795 /* Wildcat LP AHCI */ 796 PCI_VDEVICE(INTEL, 0x9c83), 797 .driver_data = board_ahci_pcs_quirk, 798 }, { 799 /* Wildcat LP RAID */ 800 PCI_VDEVICE(INTEL, 0x9c85), 801 .driver_data = board_ahci_pcs_quirk, 802 }, { 803 /* Wildcat LP RAID */ 804 PCI_VDEVICE(INTEL, 0x9c87), 805 .driver_data = board_ahci_pcs_quirk, 806 }, { 807 /* Wildcat LP RAID */ 808 PCI_VDEVICE(INTEL, 0x9c8f), 809 .driver_data = board_ahci_pcs_quirk, 810 }, { 811 /* 9 Series AHCI */ 812 PCI_VDEVICE(INTEL, 0x8c82), 813 .driver_data = board_ahci_pcs_quirk, 814 }, { 815 /* 9 Series M AHCI */ 816 PCI_VDEVICE(INTEL, 0x8c83), 817 .driver_data = board_ahci_pcs_quirk, 818 }, { 819 /* 9 Series RAID */ 820 PCI_VDEVICE(INTEL, 0x8c84), 821 .driver_data = board_ahci_pcs_quirk, 822 }, { 823 /* 9 Series M RAID */ 824 PCI_VDEVICE(INTEL, 0x8c85), 825 .driver_data = board_ahci_pcs_quirk, 826 }, { 827 /* 9 Series RAID */ 828 PCI_VDEVICE(INTEL, 0x8c86), 829 .driver_data = board_ahci_pcs_quirk, 830 }, { 831 /* 9 Series M RAID */ 832 PCI_VDEVICE(INTEL, 0x8c87), 833 .driver_data = board_ahci_pcs_quirk, 834 }, { 835 /* 9 Series RAID */ 836 PCI_VDEVICE(INTEL, 0x8c8e), 837 .driver_data = board_ahci_pcs_quirk, 838 }, { 839 /* 9 Series M RAID */ 840 PCI_VDEVICE(INTEL, 0x8c8f), 841 .driver_data = board_ahci_pcs_quirk, 842 }, { 843 /* Sunrise LP AHCI */ 844 PCI_VDEVICE(INTEL, 0x9d03), 845 .driver_data = board_ahci_pcs_quirk, 846 }, { 847 /* Sunrise LP RAID */ 848 PCI_VDEVICE(INTEL, 0x9d05), 849 .driver_data = board_ahci_pcs_quirk, 850 }, { 851 /* Sunrise LP RAID */ 852 PCI_VDEVICE(INTEL, 0x9d07), 853 .driver_data = board_ahci_pcs_quirk, 854 }, { 855 /* Sunrise Point-H AHCI */ 856 PCI_VDEVICE(INTEL, 0xa102), 857 .driver_data = board_ahci_pcs_quirk, 858 }, { 859 /* Sunrise M AHCI */ 860 PCI_VDEVICE(INTEL, 0xa103), 861 .driver_data = board_ahci_pcs_quirk, 862 }, { 863 /* Sunrise Point-H RAID */ 864 PCI_VDEVICE(INTEL, 0xa105), 865 .driver_data = board_ahci_pcs_quirk, 866 }, { 867 /* Sunrise Point-H RAID */ 868 PCI_VDEVICE(INTEL, 0xa106), 869 .driver_data = board_ahci_pcs_quirk, 870 }, { 871 /* Sunrise M RAID */ 872 PCI_VDEVICE(INTEL, 0xa107), 873 .driver_data = board_ahci_pcs_quirk, 874 }, { 875 /* Sunrise Point-H RAID */ 876 PCI_VDEVICE(INTEL, 0xa10f), 877 .driver_data = board_ahci_pcs_quirk, 878 }, { 879 /* Lewisburg AHCI*/ 880 PCI_VDEVICE(INTEL, 0xa182), 881 .driver_data = board_ahci_pcs_quirk, 882 }, { 883 /* Lewisburg RAID*/ 884 PCI_VDEVICE(INTEL, 0xa186), 885 .driver_data = board_ahci_pcs_quirk, 886 }, { 887 /* Lewisburg RAID*/ 888 PCI_VDEVICE(INTEL, 0xa1d2), 889 .driver_data = board_ahci_pcs_quirk, 890 }, { 891 /* Lewisburg RAID*/ 892 PCI_VDEVICE(INTEL, 0xa1d6), 893 .driver_data = board_ahci_pcs_quirk, 894 }, { 895 /* Lewisburg AHCI*/ 896 PCI_VDEVICE(INTEL, 0xa202), 897 .driver_data = board_ahci_pcs_quirk, 898 }, { 899 /* Lewisburg RAID*/ 900 PCI_VDEVICE(INTEL, 0xa206), 901 .driver_data = board_ahci_pcs_quirk, 902 }, { 903 /* Lewisburg RAID*/ 904 PCI_VDEVICE(INTEL, 0xa252), 905 .driver_data = board_ahci_pcs_quirk, 906 }, { 907 /* Lewisburg RAID*/ 908 PCI_VDEVICE(INTEL, 0xa256), 909 .driver_data = board_ahci_pcs_quirk, 910 }, { 911 /* Cannon Lake PCH-H RAID */ 912 PCI_VDEVICE(INTEL, 0xa356), 913 .driver_data = board_ahci_pcs_quirk, 914 }, { 915 /* Comet Lake-H RAID */ 916 PCI_VDEVICE(INTEL, 0x06d7), 917 .driver_data = board_ahci_pcs_quirk, 918 }, { 919 /* Comet Lake PCH-V RAID */ 920 PCI_VDEVICE(INTEL, 0xa386), 921 .driver_data = board_ahci_pcs_quirk, 922 }, { 923 /* Bay Trail AHCI */ 924 PCI_VDEVICE(INTEL, 0x0f22), 925 .driver_data = board_ahci_pcs_quirk, 926 }, { 927 /* Bay Trail AHCI */ 928 PCI_VDEVICE(INTEL, 0x0f23), 929 .driver_data = board_ahci_pcs_quirk_no_devslp, 930 }, { 931 /* Cherry Tr. AHCI */ 932 PCI_VDEVICE(INTEL, 0x22a3), 933 .driver_data = board_ahci_pcs_quirk, 934 }, { 935 /* ApolloLake AHCI */ 936 PCI_VDEVICE(INTEL, 0x5ae3), 937 .driver_data = board_ahci_pcs_quirk, 938 }, { 939 /* Ice Lake LP AHCI */ 940 PCI_VDEVICE(INTEL, 0x34d3), 941 .driver_data = board_ahci_pcs_quirk, 942 }, { 943 /* Comet Lake PCH-U AHCI */ 944 PCI_VDEVICE(INTEL, 0x02d3), 945 .driver_data = board_ahci_pcs_quirk, 946 }, { 947 /* Comet Lake PCH RAID */ 948 PCI_VDEVICE(INTEL, 0x02d7), 949 .driver_data = board_ahci_pcs_quirk, 950 }, 951 952 /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */ 953 { 954 /* Elkhart Lake AHCI */ 955 PCI_VDEVICE(INTEL, 0x4b63), 956 .driver_data = board_ahci_pcs_quirk, 957 }, { 958 /* JMicron JMB582/585: force 32-bit DMA (broken 64-bit implementation) */ 959 PCI_VDEVICE(JMICRON, 0x0582), 960 .driver_data = board_ahci_jmb585, 961 962 }, { 963 PCI_VDEVICE(JMICRON, 0x0585), 964 .driver_data = board_ahci_jmb585, 965 }, { 966 /* JMicron 360/1/3/5/6, match class to avoid IDE function */ 967 PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID), 968 .class = PCI_CLASS_STORAGE_SATA_AHCI, 969 .class_mask = 0xffffff, 970 .driver_data = board_ahci_ign_iferr, 971 972 }, 973 /* JMicron 362B and 362C have an AHCI function with IDE class code */ 974 { 975 PCI_VDEVICE(JMICRON, 0x2362), 976 .driver_data = board_ahci_ign_iferr, 977 978 }, { 979 PCI_VDEVICE(JMICRON, 0x236f), 980 .driver_data = board_ahci_ign_iferr, 981 982 }, 983 /* May need to update quirk_jmicron_async_suspend() for additions */ 984 985 /* ATI */ 986 { 987 /* ATI SB600 */ 988 PCI_VDEVICE(ATI, 0x4380), 989 .driver_data = board_ahci_sb600, 990 }, { 991 /* ATI SB700/800 */ 992 PCI_VDEVICE(ATI, 0x4390), 993 .driver_data = board_ahci_sb700, 994 }, { 995 /* ATI SB700/800 */ 996 PCI_VDEVICE(ATI, 0x4391), 997 .driver_data = board_ahci_sb700, 998 }, { 999 /* ATI SB700/800 */ 1000 PCI_VDEVICE(ATI, 0x4392), 1001 .driver_data = board_ahci_sb700, 1002 }, { 1003 /* ATI SB700/800 */ 1004 PCI_VDEVICE(ATI, 0x4393), 1005 .driver_data = board_ahci_sb700, 1006 }, { 1007 /* ATI SB700/800 */ 1008 PCI_VDEVICE(ATI, 0x4394), 1009 .driver_data = board_ahci_sb700, 1010 }, { 1011 /* ATI SB700/800 */ 1012 PCI_VDEVICE(ATI, 0x4395), 1013 .driver_data = board_ahci_sb700, 1014 }, 1015 1016 /* Amazon's Annapurna Labs support */ 1017 { 1018 PCI_DEVICE(PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, 0x0031), 1019 .class = PCI_CLASS_STORAGE_SATA_AHCI, 1020 .class_mask = 0xffffff, 1021 .driver_data = board_ahci_al, 1022 1023 }, 1024 /* AMD */ 1025 { 1026 /* AMD Hudson-2 */ 1027 PCI_VDEVICE(AMD, 0x7800), 1028 .driver_data = board_ahci, 1029 }, { 1030 /* AMD Hudson-2 (AHCI mode) */ 1031 PCI_VDEVICE(AMD, 0x7801), 1032 .driver_data = board_ahci_no_debounce_delay, 1033 }, { 1034 /* AMD CZ */ 1035 PCI_VDEVICE(AMD, 0x7900), 1036 .driver_data = board_ahci, 1037 }, { 1038 /* AMD Green Sardine */ 1039 PCI_VDEVICE(AMD, 0x7901), 1040 .driver_data = board_ahci, 1041 }, 1042 /* AMD is using RAID class only for ahci controllers */ 1043 { 1044 PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID), 1045 .class = PCI_CLASS_STORAGE_RAID << 8, 1046 .class_mask = 0xffffff, 1047 .driver_data = board_ahci, 1048 }, 1049 1050 /* Dell S140/S150 */ 1051 { 1052 PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, 1053 PCI_SUBVENDOR_ID_DELL, PCI_ANY_ID), 1054 .class = PCI_CLASS_STORAGE_RAID << 8, 1055 .class_mask = 0xffffff, 1056 .driver_data = board_ahci_pcs_quirk, 1057 1058 }, 1059 1060 /* VIA */ 1061 { 1062 /* VIA VT8251 */ 1063 PCI_VDEVICE(VIA, 0x3349), 1064 .driver_data = board_ahci_vt8251, 1065 }, { 1066 /* VIA VT8251 */ 1067 PCI_VDEVICE(VIA, 0x6287), 1068 .driver_data = board_ahci_vt8251, 1069 }, 1070 1071 /* NVIDIA */ 1072 { 1073 /* MCP65 */ 1074 PCI_VDEVICE(NVIDIA, 0x044c), 1075 .driver_data = board_ahci_mcp65, 1076 }, { 1077 /* MCP65 */ 1078 PCI_VDEVICE(NVIDIA, 0x044d), 1079 .driver_data = board_ahci_mcp65, 1080 }, { 1081 /* MCP65 */ 1082 PCI_VDEVICE(NVIDIA, 0x044e), 1083 .driver_data = board_ahci_mcp65, 1084 }, { 1085 /* MCP65 */ 1086 PCI_VDEVICE(NVIDIA, 0x044f), 1087 .driver_data = board_ahci_mcp65, 1088 }, { 1089 /* MCP65 */ 1090 PCI_VDEVICE(NVIDIA, 0x045c), 1091 .driver_data = board_ahci_mcp65, 1092 }, { 1093 /* MCP65 */ 1094 PCI_VDEVICE(NVIDIA, 0x045d), 1095 .driver_data = board_ahci_mcp65, 1096 }, { 1097 /* MCP65 */ 1098 PCI_VDEVICE(NVIDIA, 0x045e), 1099 .driver_data = board_ahci_mcp65, 1100 }, { 1101 /* MCP65 */ 1102 PCI_VDEVICE(NVIDIA, 0x045f), 1103 .driver_data = board_ahci_mcp65, 1104 }, { 1105 /* MCP67 */ 1106 PCI_VDEVICE(NVIDIA, 0x0550), 1107 .driver_data = board_ahci_mcp67, 1108 }, { 1109 /* MCP67 */ 1110 PCI_VDEVICE(NVIDIA, 0x0551), 1111 .driver_data = board_ahci_mcp67, 1112 }, { 1113 /* MCP67 */ 1114 PCI_VDEVICE(NVIDIA, 0x0552), 1115 .driver_data = board_ahci_mcp67, 1116 }, { 1117 /* MCP67 */ 1118 PCI_VDEVICE(NVIDIA, 0x0553), 1119 .driver_data = board_ahci_mcp67, 1120 }, { 1121 /* MCP67 */ 1122 PCI_VDEVICE(NVIDIA, 0x0554), 1123 .driver_data = board_ahci_mcp67, 1124 }, { 1125 /* MCP67 */ 1126 PCI_VDEVICE(NVIDIA, 0x0555), 1127 .driver_data = board_ahci_mcp67, 1128 }, { 1129 /* MCP67 */ 1130 PCI_VDEVICE(NVIDIA, 0x0556), 1131 .driver_data = board_ahci_mcp67, 1132 }, { 1133 /* MCP67 */ 1134 PCI_VDEVICE(NVIDIA, 0x0557), 1135 .driver_data = board_ahci_mcp67, 1136 }, { 1137 /* MCP67 */ 1138 PCI_VDEVICE(NVIDIA, 0x0558), 1139 .driver_data = board_ahci_mcp67, 1140 }, { 1141 /* MCP67 */ 1142 PCI_VDEVICE(NVIDIA, 0x0559), 1143 .driver_data = board_ahci_mcp67, 1144 }, { 1145 /* MCP67 */ 1146 PCI_VDEVICE(NVIDIA, 0x055a), 1147 .driver_data = board_ahci_mcp67, 1148 }, { 1149 /* MCP67 */ 1150 PCI_VDEVICE(NVIDIA, 0x055b), 1151 .driver_data = board_ahci_mcp67, 1152 }, { 1153 /* Linux ID */ 1154 PCI_VDEVICE(NVIDIA, 0x0580), 1155 .driver_data = board_ahci_mcp_linux, 1156 }, { 1157 /* Linux ID */ 1158 PCI_VDEVICE(NVIDIA, 0x0581), 1159 .driver_data = board_ahci_mcp_linux, 1160 }, { 1161 /* Linux ID */ 1162 PCI_VDEVICE(NVIDIA, 0x0582), 1163 .driver_data = board_ahci_mcp_linux, 1164 }, { 1165 /* Linux ID */ 1166 PCI_VDEVICE(NVIDIA, 0x0583), 1167 .driver_data = board_ahci_mcp_linux, 1168 }, { 1169 /* Linux ID */ 1170 PCI_VDEVICE(NVIDIA, 0x0584), 1171 .driver_data = board_ahci_mcp_linux, 1172 }, { 1173 /* Linux ID */ 1174 PCI_VDEVICE(NVIDIA, 0x0585), 1175 .driver_data = board_ahci_mcp_linux, 1176 }, { 1177 /* Linux ID */ 1178 PCI_VDEVICE(NVIDIA, 0x0586), 1179 .driver_data = board_ahci_mcp_linux, 1180 }, { 1181 /* Linux ID */ 1182 PCI_VDEVICE(NVIDIA, 0x0587), 1183 .driver_data = board_ahci_mcp_linux, 1184 }, { 1185 /* Linux ID */ 1186 PCI_VDEVICE(NVIDIA, 0x0588), 1187 .driver_data = board_ahci_mcp_linux, 1188 }, { 1189 /* Linux ID */ 1190 PCI_VDEVICE(NVIDIA, 0x0589), 1191 .driver_data = board_ahci_mcp_linux, 1192 }, { 1193 /* Linux ID */ 1194 PCI_VDEVICE(NVIDIA, 0x058a), 1195 .driver_data = board_ahci_mcp_linux, 1196 }, { 1197 /* Linux ID */ 1198 PCI_VDEVICE(NVIDIA, 0x058b), 1199 .driver_data = board_ahci_mcp_linux, 1200 }, { 1201 /* Linux ID */ 1202 PCI_VDEVICE(NVIDIA, 0x058c), 1203 .driver_data = board_ahci_mcp_linux, 1204 }, { 1205 /* Linux ID */ 1206 PCI_VDEVICE(NVIDIA, 0x058d), 1207 .driver_data = board_ahci_mcp_linux, 1208 }, { 1209 /* Linux ID */ 1210 PCI_VDEVICE(NVIDIA, 0x058e), 1211 .driver_data = board_ahci_mcp_linux, 1212 }, { 1213 /* Linux ID */ 1214 PCI_VDEVICE(NVIDIA, 0x058f), 1215 .driver_data = board_ahci_mcp_linux, 1216 }, { 1217 /* MCP73 */ 1218 PCI_VDEVICE(NVIDIA, 0x07f0), 1219 .driver_data = board_ahci_mcp73, 1220 }, { 1221 /* MCP73 */ 1222 PCI_VDEVICE(NVIDIA, 0x07f1), 1223 .driver_data = board_ahci_mcp73, 1224 }, { 1225 /* MCP73 */ 1226 PCI_VDEVICE(NVIDIA, 0x07f2), 1227 .driver_data = board_ahci_mcp73, 1228 }, { 1229 /* MCP73 */ 1230 PCI_VDEVICE(NVIDIA, 0x07f3), 1231 .driver_data = board_ahci_mcp73, 1232 }, { 1233 /* MCP73 */ 1234 PCI_VDEVICE(NVIDIA, 0x07f4), 1235 .driver_data = board_ahci_mcp73, 1236 }, { 1237 /* MCP73 */ 1238 PCI_VDEVICE(NVIDIA, 0x07f5), 1239 .driver_data = board_ahci_mcp73, 1240 }, { 1241 /* MCP73 */ 1242 PCI_VDEVICE(NVIDIA, 0x07f6), 1243 .driver_data = board_ahci_mcp73, 1244 }, { 1245 /* MCP73 */ 1246 PCI_VDEVICE(NVIDIA, 0x07f7), 1247 .driver_data = board_ahci_mcp73, 1248 }, { 1249 /* MCP73 */ 1250 PCI_VDEVICE(NVIDIA, 0x07f8), 1251 .driver_data = board_ahci_mcp73, 1252 }, { 1253 /* MCP73 */ 1254 PCI_VDEVICE(NVIDIA, 0x07f9), 1255 .driver_data = board_ahci_mcp73, 1256 }, { 1257 /* MCP73 */ 1258 PCI_VDEVICE(NVIDIA, 0x07fa), 1259 .driver_data = board_ahci_mcp73, 1260 }, { 1261 /* MCP73 */ 1262 PCI_VDEVICE(NVIDIA, 0x07fb), 1263 .driver_data = board_ahci_mcp73, 1264 }, { 1265 /* MCP77 */ 1266 PCI_VDEVICE(NVIDIA, 0x0ad0), 1267 .driver_data = board_ahci_mcp77, 1268 }, { 1269 /* MCP77 */ 1270 PCI_VDEVICE(NVIDIA, 0x0ad1), 1271 .driver_data = board_ahci_mcp77, 1272 }, { 1273 /* MCP77 */ 1274 PCI_VDEVICE(NVIDIA, 0x0ad2), 1275 .driver_data = board_ahci_mcp77, 1276 }, { 1277 /* MCP77 */ 1278 PCI_VDEVICE(NVIDIA, 0x0ad3), 1279 .driver_data = board_ahci_mcp77, 1280 }, { 1281 /* MCP77 */ 1282 PCI_VDEVICE(NVIDIA, 0x0ad4), 1283 .driver_data = board_ahci_mcp77, 1284 }, { 1285 /* MCP77 */ 1286 PCI_VDEVICE(NVIDIA, 0x0ad5), 1287 .driver_data = board_ahci_mcp77, 1288 }, { 1289 /* MCP77 */ 1290 PCI_VDEVICE(NVIDIA, 0x0ad6), 1291 .driver_data = board_ahci_mcp77, 1292 }, { 1293 /* MCP77 */ 1294 PCI_VDEVICE(NVIDIA, 0x0ad7), 1295 .driver_data = board_ahci_mcp77, 1296 }, { 1297 /* MCP77 */ 1298 PCI_VDEVICE(NVIDIA, 0x0ad8), 1299 .driver_data = board_ahci_mcp77, 1300 }, { 1301 /* MCP77 */ 1302 PCI_VDEVICE(NVIDIA, 0x0ad9), 1303 .driver_data = board_ahci_mcp77, 1304 }, { 1305 /* MCP77 */ 1306 PCI_VDEVICE(NVIDIA, 0x0ada), 1307 .driver_data = board_ahci_mcp77, 1308 }, { 1309 /* MCP77 */ 1310 PCI_VDEVICE(NVIDIA, 0x0adb), 1311 .driver_data = board_ahci_mcp77, 1312 }, { 1313 /* MCP79 */ 1314 PCI_VDEVICE(NVIDIA, 0x0ab4), 1315 .driver_data = board_ahci_mcp79, 1316 }, { 1317 /* MCP79 */ 1318 PCI_VDEVICE(NVIDIA, 0x0ab5), 1319 .driver_data = board_ahci_mcp79, 1320 }, { 1321 /* MCP79 */ 1322 PCI_VDEVICE(NVIDIA, 0x0ab6), 1323 .driver_data = board_ahci_mcp79, 1324 }, { 1325 /* MCP79 */ 1326 PCI_VDEVICE(NVIDIA, 0x0ab7), 1327 .driver_data = board_ahci_mcp79, 1328 }, { 1329 /* MCP79 */ 1330 PCI_VDEVICE(NVIDIA, 0x0ab8), 1331 .driver_data = board_ahci_mcp79, 1332 }, { 1333 /* MCP79 */ 1334 PCI_VDEVICE(NVIDIA, 0x0ab9), 1335 .driver_data = board_ahci_mcp79, 1336 }, { 1337 /* MCP79 */ 1338 PCI_VDEVICE(NVIDIA, 0x0aba), 1339 .driver_data = board_ahci_mcp79, 1340 }, { 1341 /* MCP79 */ 1342 PCI_VDEVICE(NVIDIA, 0x0abb), 1343 .driver_data = board_ahci_mcp79, 1344 }, { 1345 /* MCP79 */ 1346 PCI_VDEVICE(NVIDIA, 0x0abc), 1347 .driver_data = board_ahci_mcp79, 1348 }, { 1349 /* MCP79 */ 1350 PCI_VDEVICE(NVIDIA, 0x0abd), 1351 .driver_data = board_ahci_mcp79, 1352 }, { 1353 /* MCP79 */ 1354 PCI_VDEVICE(NVIDIA, 0x0abe), 1355 .driver_data = board_ahci_mcp79, 1356 }, { 1357 /* MCP79 */ 1358 PCI_VDEVICE(NVIDIA, 0x0abf), 1359 .driver_data = board_ahci_mcp79, 1360 }, { 1361 /* MCP89 */ 1362 PCI_VDEVICE(NVIDIA, 0x0d84), 1363 .driver_data = board_ahci_mcp89, 1364 }, { 1365 /* MCP89 */ 1366 PCI_VDEVICE(NVIDIA, 0x0d85), 1367 .driver_data = board_ahci_mcp89, 1368 }, { 1369 /* MCP89 */ 1370 PCI_VDEVICE(NVIDIA, 0x0d86), 1371 .driver_data = board_ahci_mcp89, 1372 }, { 1373 /* MCP89 */ 1374 PCI_VDEVICE(NVIDIA, 0x0d87), 1375 .driver_data = board_ahci_mcp89, 1376 }, { 1377 /* MCP89 */ 1378 PCI_VDEVICE(NVIDIA, 0x0d88), 1379 .driver_data = board_ahci_mcp89, 1380 }, { 1381 /* MCP89 */ 1382 PCI_VDEVICE(NVIDIA, 0x0d89), 1383 .driver_data = board_ahci_mcp89, 1384 }, { 1385 /* MCP89 */ 1386 PCI_VDEVICE(NVIDIA, 0x0d8a), 1387 .driver_data = board_ahci_mcp89, 1388 }, { 1389 /* MCP89 */ 1390 PCI_VDEVICE(NVIDIA, 0x0d8b), 1391 .driver_data = board_ahci_mcp89, 1392 }, { 1393 /* MCP89 */ 1394 PCI_VDEVICE(NVIDIA, 0x0d8c), 1395 .driver_data = board_ahci_mcp89, 1396 }, { 1397 /* MCP89 */ 1398 PCI_VDEVICE(NVIDIA, 0x0d8d), 1399 .driver_data = board_ahci_mcp89, 1400 }, { 1401 /* MCP89 */ 1402 PCI_VDEVICE(NVIDIA, 0x0d8e), 1403 .driver_data = board_ahci_mcp89, 1404 }, { 1405 /* MCP89 */ 1406 PCI_VDEVICE(NVIDIA, 0x0d8f), 1407 .driver_data = board_ahci_mcp89, 1408 }, 1409 1410 /* SiS */ 1411 { 1412 /* SiS 966 */ 1413 PCI_VDEVICE(SI, 0x1184), 1414 .driver_data = board_ahci, 1415 }, { 1416 /* SiS 968 */ 1417 PCI_VDEVICE(SI, 0x1185), 1418 .driver_data = board_ahci, 1419 }, { 1420 /* SiS 968 */ 1421 PCI_VDEVICE(SI, 0x0186), 1422 .driver_data = board_ahci, 1423 }, 1424 1425 /* ST Microelectronics */ 1426 { 1427 /* ST ConneXt */ 1428 PCI_VDEVICE(STMICRO, 0xCC06), 1429 .driver_data = board_ahci, 1430 }, 1431 1432 /* Marvell */ 1433 { 1434 /* 6145 */ 1435 PCI_VDEVICE(MARVELL, 0x6145), 1436 .driver_data = board_ahci_mv, 1437 }, { 1438 /* 6121 */ 1439 PCI_VDEVICE(MARVELL, 0x6121), 1440 .driver_data = board_ahci_mv, 1441 }, { 1442 /* 88se9128 */ 1443 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9123), 1444 .class = PCI_CLASS_STORAGE_SATA_AHCI, 1445 .class_mask = 0xffffff, 1446 .driver_data = board_ahci_yes_fbs, 1447 }, { 1448 /* 88se9125 */ 1449 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125), 1450 .driver_data = board_ahci_yes_fbs, 1451 }, { 1452 /* 88se9170 */ 1453 PCI_DEVICE_SUB(PCI_VENDOR_ID_MARVELL_EXT, 0x9178, 1454 PCI_VENDOR_ID_MARVELL_EXT, 0x9170), 1455 .driver_data = board_ahci_yes_fbs, 1456 }, { 1457 /* 88se9172 */ 1458 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a), 1459 .driver_data = board_ahci_yes_fbs, 1460 }, { 1461 /* 88se9182 */ 1462 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172), 1463 .driver_data = board_ahci_yes_fbs, 1464 }, { 1465 /* 88se9172 */ 1466 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9182), 1467 .driver_data = board_ahci_yes_fbs, 1468 }, { 1469 /* 88se9172 on some Gigabyte */ 1470 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192), 1471 .driver_data = board_ahci_yes_fbs, 1472 }, { 1473 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a0), 1474 .driver_data = board_ahci_yes_fbs, 1475 }, { 1476 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a2), /* 88se91a2 */ 1477 .driver_data = board_ahci_yes_fbs, 1478 }, { 1479 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3), 1480 .driver_data = board_ahci_yes_fbs, 1481 }, { 1482 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9215), 1483 .driver_data = board_ahci_yes_fbs_atapi_dma, 1484 }, { 1485 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230), 1486 .driver_data = board_ahci_yes_fbs, 1487 }, { 1488 PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9235), 1489 .driver_data = board_ahci_no_debounce_delay, 1490 }, 1491 1492 /* TTI */ 1493 { 1494 /* highpoint rocketraid 642L */ 1495 PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), 1496 .driver_data = board_ahci_yes_fbs, 1497 }, { 1498 /* highpoint rocketraid 644L */ 1499 PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0645), 1500 .driver_data = board_ahci_yes_fbs, 1501 }, 1502 1503 /* Promise */ 1504 { 1505 /* PDC42819 */ 1506 PCI_VDEVICE(PROMISE, 0x3f20), 1507 .driver_data = board_ahci, 1508 }, { 1509 /* FastTrak TX8660 ahci-mode */ 1510 PCI_VDEVICE(PROMISE, 0x3781), 1511 .driver_data = board_ahci, 1512 }, 1513 1514 /* ASMedia */ 1515 { 1516 /* ASM1060 */ 1517 PCI_VDEVICE(ASMEDIA, 0x0601), 1518 .driver_data = board_ahci_43bit_dma, 1519 }, { 1520 /* ASM1060 */ 1521 PCI_VDEVICE(ASMEDIA, 0x0602), 1522 .driver_data = board_ahci_43bit_dma, 1523 }, { 1524 /* ASM1061 */ 1525 PCI_VDEVICE(ASMEDIA, 0x0611), 1526 .driver_data = board_ahci_43bit_dma, 1527 }, { 1528 /* ASM1061/1062 */ 1529 PCI_VDEVICE(ASMEDIA, 0x0612), 1530 .driver_data = board_ahci_43bit_dma, 1531 }, { 1532 /* ASM1061R */ 1533 PCI_VDEVICE(ASMEDIA, 0x0621), 1534 .driver_data = board_ahci_43bit_dma, 1535 }, { 1536 /* ASM1062R */ 1537 PCI_VDEVICE(ASMEDIA, 0x0622), 1538 .driver_data = board_ahci_43bit_dma, 1539 }, { 1540 /* ASM1062+JMB575 */ 1541 PCI_VDEVICE(ASMEDIA, 0x0624), 1542 .driver_data = board_ahci_43bit_dma, 1543 }, { 1544 /* ASM1062A */ 1545 PCI_VDEVICE(ASMEDIA, 0x1062), 1546 .driver_data = board_ahci, 1547 }, { 1548 /* ASM1064 */ 1549 PCI_VDEVICE(ASMEDIA, 0x1064), 1550 .driver_data = board_ahci, 1551 }, { 1552 /* ASM1164 */ 1553 PCI_VDEVICE(ASMEDIA, 0x1164), 1554 .driver_data = board_ahci, 1555 }, { 1556 /* ASM1165 */ 1557 PCI_VDEVICE(ASMEDIA, 0x1165), 1558 .driver_data = board_ahci, 1559 }, { 1560 /* ASM1166 */ 1561 PCI_VDEVICE(ASMEDIA, 0x1166), 1562 .driver_data = board_ahci, 1563 }, { 1564 /* 1565 * Samsung SSDs found on some macbooks. NCQ times out if MSI is 1566 * enabled. https://bugzilla.kernel.org/show_bug.cgi?id=60731 1567 */ 1568 PCI_VDEVICE(SAMSUNG, 0x1600), 1569 .driver_data = board_ahci_no_msi, 1570 1571 }, { 1572 PCI_VDEVICE(SAMSUNG, 0xa800), 1573 .driver_data = board_ahci_no_msi, 1574 }, { 1575 /* Enmotus */ 1576 PCI_DEVICE(0x1c44, 0x8000), 1577 .driver_data = board_ahci, 1578 }, { 1579 /* Loongson */ 1580 PCI_VDEVICE(LOONGSON, 0x7a08), 1581 .driver_data = board_ahci, 1582 1583 }, { 1584 /* Generic, PCI class code for AHCI */ 1585 PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff), 1586 .driver_data = board_ahci, 1587 }, 1588 1589 { } /* terminate list */ 1590 }; 1591 1592 static const struct dev_pm_ops ahci_pci_pm_ops = { 1593 SET_SYSTEM_SLEEP_PM_OPS(ahci_pci_device_suspend, ahci_pci_device_resume) 1594 SET_RUNTIME_PM_OPS(ahci_pci_device_runtime_suspend, 1595 ahci_pci_device_runtime_resume, NULL) 1596 }; 1597 1598 static struct pci_driver ahci_pci_driver = { 1599 .name = DRV_NAME, 1600 .id_table = ahci_pci_tbl, 1601 .probe = ahci_init_one, 1602 .remove = ahci_remove_one, 1603 .shutdown = ahci_shutdown_one, 1604 .driver = { 1605 .pm = &ahci_pci_pm_ops, 1606 }, 1607 }; 1608 1609 #if IS_ENABLED(CONFIG_PATA_MARVELL) 1610 static int marvell_enable; 1611 #else 1612 static int marvell_enable = 1; 1613 #endif 1614 module_param(marvell_enable, int, 0644); 1615 MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)"); 1616 1617 static int mobile_lpm_policy = -1; 1618 module_param(mobile_lpm_policy, int, 0644); 1619 MODULE_PARM_DESC(mobile_lpm_policy, 1620 "Default LPM policy. Despite its name, this parameter applies " 1621 "to all chipsets, including desktop and server chipsets"); 1622 1623 static char *ahci_mask_port_map; 1624 module_param_named(mask_port_map, ahci_mask_port_map, charp, 0444); 1625 MODULE_PARM_DESC(mask_port_map, 1626 "32-bits port map masks to ignore controllers ports. " 1627 "Valid values are: " 1628 "\"<mask>\" to apply the same mask to all AHCI controller " 1629 "devices, and \"<pci_dev>=<mask>,<pci_dev>=<mask>,...\" to " 1630 "specify different masks for the controllers specified, " 1631 "where <pci_dev> is the PCI ID of an AHCI controller in the " 1632 "form \"domain:bus:dev.func\""); 1633 1634 static char *ahci_mask_port_ext; 1635 module_param_named(mask_port_ext, ahci_mask_port_ext, charp, 0444); 1636 MODULE_PARM_DESC(mask_port_ext, 1637 "32-bits mask to ignore the external/hotplug capability of ports. " 1638 "Valid values are: " 1639 "\"<mask>\" to apply the same mask to all AHCI controller " 1640 "devices, and \"<pci_dev>=<mask>,<pci_dev>=<mask>,...\" to " 1641 "specify different masks for the controllers specified, " 1642 "where <pci_dev> is the PCI ID of an AHCI controller in the " 1643 "form \"domain:bus:dev.func\""); 1644 1645 static u32 ahci_port_mask(struct device *dev, char *mask_s) 1646 { 1647 unsigned int mask; 1648 1649 if (kstrtouint(mask_s, 0, &mask)) { 1650 dev_err(dev, "Invalid port map mask\n"); 1651 return 0; 1652 } 1653 1654 return mask; 1655 } 1656 1657 static u32 ahci_get_port_mask(struct device *dev, char *mask_p) 1658 { 1659 char *param, *end, *str, *mask_s; 1660 char *name; 1661 u32 mask = 0; 1662 1663 if (!mask_p || !strlen(mask_p)) 1664 return 0; 1665 1666 str = kstrdup(mask_p, GFP_KERNEL); 1667 if (!str) 1668 return 0; 1669 1670 /* Handle single mask case */ 1671 if (!strchr(str, '=')) { 1672 mask = ahci_port_mask(dev, str); 1673 goto free; 1674 } 1675 1676 /* 1677 * Mask list case: parse the parameter to get the mask only if 1678 * the device name matches. 1679 */ 1680 param = str; 1681 end = param + strlen(param); 1682 while (param && param < end && *param) { 1683 name = param; 1684 param = strchr(name, '='); 1685 if (!param) 1686 break; 1687 1688 *param = '\0'; 1689 param++; 1690 if (param >= end) 1691 break; 1692 1693 if (strcmp(dev_name(dev), name) != 0) { 1694 param = strchr(param, ','); 1695 if (param) 1696 param++; 1697 continue; 1698 } 1699 1700 mask_s = param; 1701 param = strchr(mask_s, ','); 1702 if (param) { 1703 *param = '\0'; 1704 param++; 1705 } 1706 1707 mask = ahci_port_mask(dev, mask_s); 1708 } 1709 1710 free: 1711 kfree(str); 1712 1713 return mask; 1714 } 1715 1716 static void ahci_pci_save_initial_config(struct pci_dev *pdev, 1717 struct ahci_host_priv *hpriv) 1718 { 1719 if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) { 1720 dev_info(&pdev->dev, "JMB361 has only one port\n"); 1721 hpriv->saved_port_map = 1; 1722 } 1723 1724 /* 1725 * Temporary Marvell 6145 hack: PATA port presence 1726 * is asserted through the standard AHCI port 1727 * presence register, as bit 4 (counting from 0) 1728 */ 1729 if (hpriv->flags & AHCI_HFLAG_MV_PATA) { 1730 if (pdev->device == 0x6121) 1731 hpriv->mask_port_map = 0x3; 1732 else 1733 hpriv->mask_port_map = 0xf; 1734 dev_info(&pdev->dev, 1735 "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n"); 1736 } 1737 1738 /* Handle port map masks passed as module parameter. */ 1739 hpriv->mask_port_map = 1740 ahci_get_port_mask(&pdev->dev, ahci_mask_port_map); 1741 hpriv->mask_port_ext = 1742 ahci_get_port_mask(&pdev->dev, ahci_mask_port_ext); 1743 1744 ahci_save_initial_config(&pdev->dev, hpriv); 1745 } 1746 1747 static int ahci_pci_reset_controller(struct ata_host *host) 1748 { 1749 struct pci_dev *pdev = to_pci_dev(host->dev); 1750 struct ahci_host_priv *hpriv = host->private_data; 1751 int rc; 1752 1753 rc = ahci_reset_controller(host); 1754 if (rc) 1755 return rc; 1756 1757 /* 1758 * If platform firmware failed to enable ports, try to enable 1759 * them here. 1760 */ 1761 ahci_intel_pcs_quirk(pdev, hpriv); 1762 1763 return 0; 1764 } 1765 1766 static void ahci_pci_init_controller(struct ata_host *host) 1767 { 1768 struct ahci_host_priv *hpriv = host->private_data; 1769 struct pci_dev *pdev = to_pci_dev(host->dev); 1770 void __iomem *port_mmio; 1771 u32 tmp; 1772 int mv; 1773 1774 if (hpriv->flags & AHCI_HFLAG_MV_PATA) { 1775 if (pdev->device == 0x6121) 1776 mv = 2; 1777 else 1778 mv = 4; 1779 port_mmio = __ahci_port_base(hpriv, mv); 1780 1781 writel(0, port_mmio + PORT_IRQ_MASK); 1782 1783 /* clear port IRQ */ 1784 tmp = readl(port_mmio + PORT_IRQ_STAT); 1785 dev_dbg(&pdev->dev, "PORT_IRQ_STAT 0x%x\n", tmp); 1786 if (tmp) 1787 writel(tmp, port_mmio + PORT_IRQ_STAT); 1788 } 1789 1790 ahci_init_controller(host); 1791 } 1792 1793 static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class, 1794 unsigned long deadline) 1795 { 1796 struct ata_port *ap = link->ap; 1797 struct ahci_host_priv *hpriv = ap->host->private_data; 1798 bool online; 1799 int rc; 1800 1801 hpriv->stop_engine(ap); 1802 1803 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), 1804 deadline, &online, NULL); 1805 1806 hpriv->start_engine(ap); 1807 1808 /* vt8251 doesn't clear BSY on signature FIS reception, 1809 * request follow-up softreset. 1810 */ 1811 return online ? -EAGAIN : rc; 1812 } 1813 1814 static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, 1815 unsigned long deadline) 1816 { 1817 struct ata_port *ap = link->ap; 1818 struct ahci_port_priv *pp = ap->private_data; 1819 struct ahci_host_priv *hpriv = ap->host->private_data; 1820 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; 1821 struct ata_taskfile tf; 1822 bool online; 1823 int rc; 1824 1825 hpriv->stop_engine(ap); 1826 1827 /* clear D2H reception area to properly wait for D2H FIS */ 1828 ata_tf_init(link->device, &tf); 1829 tf.status = ATA_BUSY; 1830 ata_tf_to_fis(&tf, 0, 0, d2h_fis); 1831 1832 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), 1833 deadline, &online, NULL); 1834 1835 hpriv->start_engine(ap); 1836 1837 /* The pseudo configuration device on SIMG4726 attached to 1838 * ASUS P5W-DH Deluxe doesn't send signature FIS after 1839 * hardreset if no device is attached to the first downstream 1840 * port && the pseudo device locks up on SRST w/ PMP==0. To 1841 * work around this, wait for !BSY only briefly. If BSY isn't 1842 * cleared, perform CLO and proceed to IDENTIFY (achieved by 1843 * ATA_LFLAG_NO_SRST and ATA_LFLAG_ASSUME_ATA). 1844 * 1845 * Wait for two seconds. Devices attached to downstream port 1846 * which can't process the following IDENTIFY after this will 1847 * have to be reset again. For most cases, this should 1848 * suffice while making probing snappish enough. 1849 */ 1850 if (online) { 1851 rc = ata_wait_after_reset(link, jiffies + 2 * HZ, 1852 ahci_check_ready); 1853 if (rc) 1854 ahci_kick_engine(ap); 1855 } 1856 return rc; 1857 } 1858 1859 /* 1860 * ahci_avn_hardreset - attempt more aggressive recovery of Avoton ports. 1861 * 1862 * It has been observed with some SSDs that the timing of events in the 1863 * link synchronization phase can leave the port in a state that can not 1864 * be recovered by a SATA-hard-reset alone. The failing signature is 1865 * SStatus.DET stuck at 1 ("Device presence detected but Phy 1866 * communication not established"). It was found that unloading and 1867 * reloading the driver when this problem occurs allows the drive 1868 * connection to be recovered (DET advanced to 0x3). The critical 1869 * component of reloading the driver is that the port state machines are 1870 * reset by bouncing "port enable" in the AHCI PCS configuration 1871 * register. So, reproduce that effect by bouncing a port whenever we 1872 * see DET==1 after a reset. 1873 */ 1874 static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class, 1875 unsigned long deadline) 1876 { 1877 const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context); 1878 struct ata_port *ap = link->ap; 1879 struct ahci_port_priv *pp = ap->private_data; 1880 struct ahci_host_priv *hpriv = ap->host->private_data; 1881 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; 1882 unsigned long tmo = deadline - jiffies; 1883 struct ata_taskfile tf; 1884 bool online; 1885 int rc, i; 1886 1887 hpriv->stop_engine(ap); 1888 1889 for (i = 0; i < 2; i++) { 1890 u16 val; 1891 u32 sstatus; 1892 int port = ap->port_no; 1893 struct ata_host *host = ap->host; 1894 struct pci_dev *pdev = to_pci_dev(host->dev); 1895 1896 /* clear D2H reception area to properly wait for D2H FIS */ 1897 ata_tf_init(link->device, &tf); 1898 tf.status = ATA_BUSY; 1899 ata_tf_to_fis(&tf, 0, 0, d2h_fis); 1900 1901 rc = sata_link_hardreset(link, timing, deadline, &online, 1902 ahci_check_ready); 1903 1904 if (sata_scr_read(link, SCR_STATUS, &sstatus) != 0 || 1905 (sstatus & 0xf) != 1) 1906 break; 1907 1908 ata_link_info(link, "avn bounce port%d\n", port); 1909 1910 pci_read_config_word(pdev, 0x92, &val); 1911 val &= ~(1 << port); 1912 pci_write_config_word(pdev, 0x92, val); 1913 ata_msleep(ap, 1000); 1914 val |= 1 << port; 1915 pci_write_config_word(pdev, 0x92, val); 1916 deadline += tmo; 1917 } 1918 1919 hpriv->start_engine(ap); 1920 1921 if (online) 1922 *class = ahci_dev_classify(ap); 1923 1924 return rc; 1925 } 1926 1927 1928 #ifdef CONFIG_PM 1929 static void ahci_pci_disable_interrupts(struct ata_host *host) 1930 { 1931 struct ahci_host_priv *hpriv = host->private_data; 1932 void __iomem *mmio = hpriv->mmio; 1933 u32 ctl; 1934 1935 /* AHCI spec rev1.1 section 8.3.3: 1936 * Software must disable interrupts prior to requesting a 1937 * transition of the HBA to D3 state. 1938 */ 1939 ctl = readl(mmio + HOST_CTL); 1940 ctl &= ~HOST_IRQ_EN; 1941 writel(ctl, mmio + HOST_CTL); 1942 readl(mmio + HOST_CTL); /* flush */ 1943 } 1944 1945 static int ahci_pci_device_runtime_suspend(struct device *dev) 1946 { 1947 struct pci_dev *pdev = to_pci_dev(dev); 1948 struct ata_host *host = pci_get_drvdata(pdev); 1949 1950 ahci_pci_disable_interrupts(host); 1951 return 0; 1952 } 1953 1954 static int ahci_pci_device_runtime_resume(struct device *dev) 1955 { 1956 struct pci_dev *pdev = to_pci_dev(dev); 1957 struct ata_host *host = pci_get_drvdata(pdev); 1958 int rc; 1959 1960 rc = ahci_pci_reset_controller(host); 1961 if (rc) 1962 return rc; 1963 ahci_pci_init_controller(host); 1964 return 0; 1965 } 1966 1967 #ifdef CONFIG_PM_SLEEP 1968 static int ahci_pci_device_suspend(struct device *dev) 1969 { 1970 struct pci_dev *pdev = to_pci_dev(dev); 1971 struct ata_host *host = pci_get_drvdata(pdev); 1972 struct ahci_host_priv *hpriv = host->private_data; 1973 1974 if (hpriv->flags & AHCI_HFLAG_NO_SUSPEND) { 1975 dev_err(&pdev->dev, 1976 "BIOS update required for suspend/resume\n"); 1977 return -EIO; 1978 } 1979 1980 ahci_pci_disable_interrupts(host); 1981 ata_host_suspend(host, PMSG_SUSPEND); 1982 return 0; 1983 } 1984 1985 static int ahci_pci_device_resume(struct device *dev) 1986 { 1987 struct pci_dev *pdev = to_pci_dev(dev); 1988 struct ata_host *host = pci_get_drvdata(pdev); 1989 int rc; 1990 1991 /* Apple BIOS helpfully mangles the registers on resume */ 1992 if (is_mcp89_apple(pdev)) 1993 ahci_mcp89_apple_enable(pdev); 1994 1995 if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { 1996 rc = ahci_pci_reset_controller(host); 1997 if (rc) 1998 return rc; 1999 2000 ahci_pci_init_controller(host); 2001 } 2002 2003 ata_host_resume(host); 2004 2005 return 0; 2006 } 2007 #endif 2008 2009 #endif /* CONFIG_PM */ 2010 2011 static int ahci_configure_dma_masks(struct pci_dev *pdev, 2012 struct ahci_host_priv *hpriv) 2013 { 2014 int dma_bits; 2015 int rc; 2016 2017 if (hpriv->cap & HOST_CAP_64) { 2018 dma_bits = 64; 2019 if (hpriv->flags & AHCI_HFLAG_43BIT_ONLY) 2020 dma_bits = 43; 2021 } else { 2022 dma_bits = 32; 2023 } 2024 2025 /* 2026 * If the device fixup already set the dma_mask to some non-standard 2027 * value, don't extend it here. This happens on STA2X11, for example. 2028 * 2029 * XXX: manipulating the DMA mask from platform code is completely 2030 * bogus, platform code should use dev->bus_dma_limit instead.. 2031 */ 2032 if (pdev->dma_mask && pdev->dma_mask < DMA_BIT_MASK(32)) 2033 return 0; 2034 2035 rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(dma_bits)); 2036 if (rc) 2037 dev_err(&pdev->dev, "DMA enable failed\n"); 2038 return rc; 2039 } 2040 2041 static void ahci_pci_print_info(struct ata_host *host) 2042 { 2043 struct pci_dev *pdev = to_pci_dev(host->dev); 2044 u16 cc; 2045 const char *scc_s; 2046 2047 pci_read_config_word(pdev, 0x0a, &cc); 2048 if (cc == PCI_CLASS_STORAGE_IDE) 2049 scc_s = "IDE"; 2050 else if (cc == PCI_CLASS_STORAGE_SATA) 2051 scc_s = "SATA"; 2052 else if (cc == PCI_CLASS_STORAGE_RAID) 2053 scc_s = "RAID"; 2054 else 2055 scc_s = "unknown"; 2056 2057 ahci_print_info(host, scc_s); 2058 } 2059 2060 /* On ASUS P5W DH Deluxe, the second port of PCI device 00:1f.2 is 2061 * hardwired to on-board SIMG 4726. The chipset is ICH8 and doesn't 2062 * support PMP and the 4726 either directly exports the device 2063 * attached to the first downstream port or acts as a hardware storage 2064 * controller and emulate a single ATA device (can be RAID 0/1 or some 2065 * other configuration). 2066 * 2067 * When there's no device attached to the first downstream port of the 2068 * 4726, "Config Disk" appears, which is a pseudo ATA device to 2069 * configure the 4726. However, ATA emulation of the device is very 2070 * lame. It doesn't send signature D2H Reg FIS after the initial 2071 * hardreset, pukes on SRST w/ PMP==0 and has bunch of other issues. 2072 * 2073 * The following function works around the problem by always using 2074 * hardreset on the port and not depending on receiving signature FIS 2075 * afterward. If signature FIS isn't received soon, ATA class is 2076 * assumed without follow-up softreset. 2077 */ 2078 static void ahci_p5wdh_workaround(struct ata_host *host) 2079 { 2080 static const struct dmi_system_id sysids[] = { 2081 { 2082 .ident = "P5W DH Deluxe", 2083 .matches = { 2084 DMI_MATCH(DMI_SYS_VENDOR, 2085 "ASUSTEK COMPUTER INC"), 2086 DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"), 2087 }, 2088 }, 2089 { } 2090 }; 2091 struct pci_dev *pdev = to_pci_dev(host->dev); 2092 2093 if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) && 2094 dmi_check_system(sysids)) { 2095 struct ata_port *ap = host->ports[1]; 2096 2097 dev_info(&pdev->dev, 2098 "enabling ASUS P5W DH Deluxe on-board SIMG4726 workaround\n"); 2099 2100 ap->ops = &ahci_p5wdh_ops; 2101 ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA; 2102 } 2103 } 2104 2105 /* 2106 * Macbook7,1 firmware forcibly disables MCP89 AHCI and changes PCI ID when 2107 * booting in BIOS compatibility mode. We restore the registers but not ID. 2108 */ 2109 static void ahci_mcp89_apple_enable(struct pci_dev *pdev) 2110 { 2111 u32 val; 2112 2113 printk(KERN_INFO "ahci: enabling MCP89 AHCI mode\n"); 2114 2115 pci_read_config_dword(pdev, 0xf8, &val); 2116 val |= 1 << 0x1b; 2117 /* the following changes the device ID, but appears not to affect function */ 2118 /* val = (val & ~0xf0000000) | 0x80000000; */ 2119 pci_write_config_dword(pdev, 0xf8, val); 2120 2121 pci_read_config_dword(pdev, 0x54c, &val); 2122 val |= 1 << 0xc; 2123 pci_write_config_dword(pdev, 0x54c, val); 2124 2125 pci_read_config_dword(pdev, 0x4a4, &val); 2126 val &= 0xff; 2127 val |= 0x01060100; 2128 pci_write_config_dword(pdev, 0x4a4, val); 2129 2130 pci_read_config_dword(pdev, 0x54c, &val); 2131 val &= ~(1 << 0xc); 2132 pci_write_config_dword(pdev, 0x54c, val); 2133 2134 pci_read_config_dword(pdev, 0xf8, &val); 2135 val &= ~(1 << 0x1b); 2136 pci_write_config_dword(pdev, 0xf8, val); 2137 } 2138 2139 static bool is_mcp89_apple(struct pci_dev *pdev) 2140 { 2141 return pdev->vendor == PCI_VENDOR_ID_NVIDIA && 2142 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA && 2143 pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE && 2144 pdev->subsystem_device == 0xcb89; 2145 } 2146 2147 /* only some SB600 ahci controllers can do 64bit DMA */ 2148 static bool ahci_sb600_enable_64bit(struct pci_dev *pdev) 2149 { 2150 static const struct dmi_system_id sysids[] = { 2151 /* 2152 * The oldest version known to be broken is 0901 and 2153 * working is 1501 which was released on 2007-10-26. 2154 * Enable 64bit DMA on 1501 and anything newer. 2155 * 2156 * Please read bko#9412 for more info. 2157 */ 2158 { 2159 .ident = "ASUS M2A-VM", 2160 .matches = { 2161 DMI_MATCH(DMI_BOARD_VENDOR, 2162 "ASUSTeK Computer INC."), 2163 DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"), 2164 }, 2165 .driver_data = "20071026", /* yyyymmdd */ 2166 }, 2167 /* 2168 * All BIOS versions for the MSI K9A2 Platinum (MS-7376) 2169 * support 64bit DMA. 2170 * 2171 * BIOS versions earlier than 1.5 had the Manufacturer DMI 2172 * fields as "MICRO-STAR INTERANTIONAL CO.,LTD". 2173 * This spelling mistake was fixed in BIOS version 1.5, so 2174 * 1.5 and later have the Manufacturer as 2175 * "MICRO-STAR INTERNATIONAL CO.,LTD". 2176 * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER". 2177 * 2178 * BIOS versions earlier than 1.9 had a Board Product Name 2179 * DMI field of "MS-7376". This was changed to be 2180 * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still 2181 * match on DMI_BOARD_NAME of "MS-7376". 2182 */ 2183 { 2184 .ident = "MSI K9A2 Platinum", 2185 .matches = { 2186 DMI_MATCH(DMI_BOARD_VENDOR, 2187 "MICRO-STAR INTER"), 2188 DMI_MATCH(DMI_BOARD_NAME, "MS-7376"), 2189 }, 2190 }, 2191 /* 2192 * All BIOS versions for the MSI K9AGM2 (MS-7327) support 2193 * 64bit DMA. 2194 * 2195 * This board also had the typo mentioned above in the 2196 * Manufacturer DMI field (fixed in BIOS version 1.5), so 2197 * match on DMI_BOARD_VENDOR of "MICRO-STAR INTER" again. 2198 */ 2199 { 2200 .ident = "MSI K9AGM2", 2201 .matches = { 2202 DMI_MATCH(DMI_BOARD_VENDOR, 2203 "MICRO-STAR INTER"), 2204 DMI_MATCH(DMI_BOARD_NAME, "MS-7327"), 2205 }, 2206 }, 2207 /* 2208 * All BIOS versions for the Asus M3A support 64bit DMA. 2209 * (all release versions from 0301 to 1206 were tested) 2210 */ 2211 { 2212 .ident = "ASUS M3A", 2213 .matches = { 2214 DMI_MATCH(DMI_BOARD_VENDOR, 2215 "ASUSTeK Computer INC."), 2216 DMI_MATCH(DMI_BOARD_NAME, "M3A"), 2217 }, 2218 }, 2219 { } 2220 }; 2221 const struct dmi_system_id *match; 2222 int year, month, date; 2223 char buf[9]; 2224 2225 match = dmi_first_match(sysids); 2226 if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) || 2227 !match) 2228 return false; 2229 2230 if (!match->driver_data) 2231 goto enable_64bit; 2232 2233 dmi_get_date(DMI_BIOS_DATE, &year, &month, &date); 2234 snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date); 2235 2236 if (strcmp(buf, match->driver_data) >= 0) 2237 goto enable_64bit; 2238 else { 2239 dev_warn(&pdev->dev, 2240 "%s: BIOS too old, forcing 32bit DMA, update BIOS\n", 2241 match->ident); 2242 return false; 2243 } 2244 2245 enable_64bit: 2246 dev_warn(&pdev->dev, "%s: enabling 64bit DMA\n", match->ident); 2247 return true; 2248 } 2249 2250 static bool ahci_broken_system_poweroff(struct pci_dev *pdev) 2251 { 2252 static const struct dmi_system_id broken_systems[] = { 2253 { 2254 .ident = "HP Compaq nx6310", 2255 .matches = { 2256 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2257 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6310"), 2258 }, 2259 /* PCI slot number of the controller */ 2260 .driver_data = (void *)0x1FUL, 2261 }, 2262 { 2263 .ident = "HP Compaq 6720s", 2264 .matches = { 2265 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2266 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6720s"), 2267 }, 2268 /* PCI slot number of the controller */ 2269 .driver_data = (void *)0x1FUL, 2270 }, 2271 2272 { } /* terminate list */ 2273 }; 2274 const struct dmi_system_id *dmi = dmi_first_match(broken_systems); 2275 2276 if (dmi) { 2277 unsigned long slot = (unsigned long)dmi->driver_data; 2278 /* apply the quirk only to on-board controllers */ 2279 return slot == PCI_SLOT(pdev->devfn); 2280 } 2281 2282 return false; 2283 } 2284 2285 static bool ahci_broken_suspend(struct pci_dev *pdev) 2286 { 2287 static const struct dmi_system_id sysids[] = { 2288 /* 2289 * On HP dv[4-6] and HDX18 with earlier BIOSen, link 2290 * to the harddisk doesn't become online after 2291 * resuming from STR. Warn and fail suspend. 2292 * 2293 * http://bugzilla.kernel.org/show_bug.cgi?id=12276 2294 * 2295 * Use dates instead of versions to match as HP is 2296 * apparently recycling both product and version 2297 * strings. 2298 * 2299 * http://bugzilla.kernel.org/show_bug.cgi?id=15462 2300 */ 2301 { 2302 .ident = "dv4", 2303 .matches = { 2304 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2305 DMI_MATCH(DMI_PRODUCT_NAME, 2306 "HP Pavilion dv4 Notebook PC"), 2307 }, 2308 .driver_data = "20090105", /* F.30 */ 2309 }, 2310 { 2311 .ident = "dv5", 2312 .matches = { 2313 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2314 DMI_MATCH(DMI_PRODUCT_NAME, 2315 "HP Pavilion dv5 Notebook PC"), 2316 }, 2317 .driver_data = "20090506", /* F.16 */ 2318 }, 2319 { 2320 .ident = "dv6", 2321 .matches = { 2322 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2323 DMI_MATCH(DMI_PRODUCT_NAME, 2324 "HP Pavilion dv6 Notebook PC"), 2325 }, 2326 .driver_data = "20090423", /* F.21 */ 2327 }, 2328 { 2329 .ident = "HDX18", 2330 .matches = { 2331 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 2332 DMI_MATCH(DMI_PRODUCT_NAME, 2333 "HP HDX18 Notebook PC"), 2334 }, 2335 .driver_data = "20090430", /* F.23 */ 2336 }, 2337 /* 2338 * Acer eMachines G725 has the same problem. BIOS 2339 * V1.03 is known to be broken. V3.04 is known to 2340 * work. Between, there are V1.06, V2.06 and V3.03 2341 * that we don't have much idea about. For now, 2342 * assume that anything older than V3.04 is broken. 2343 * 2344 * http://bugzilla.kernel.org/show_bug.cgi?id=15104 2345 */ 2346 { 2347 .ident = "G725", 2348 .matches = { 2349 DMI_MATCH(DMI_SYS_VENDOR, "eMachines"), 2350 DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"), 2351 }, 2352 .driver_data = "20091216", /* V3.04 */ 2353 }, 2354 { } /* terminate list */ 2355 }; 2356 const struct dmi_system_id *dmi = dmi_first_match(sysids); 2357 int year, month, date; 2358 char buf[9]; 2359 2360 if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2)) 2361 return false; 2362 2363 dmi_get_date(DMI_BIOS_DATE, &year, &month, &date); 2364 snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date); 2365 2366 return strcmp(buf, dmi->driver_data) < 0; 2367 } 2368 2369 static bool ahci_broken_lpm(struct pci_dev *pdev) 2370 { 2371 /* 2372 * Platforms with LPM problems. 2373 * If driver_data is NULL, there is no existing BIOS version with 2374 * functioning LPM. 2375 * If driver_data is non-NULL, then driver_data contains the DMI BIOS 2376 * build date of the first BIOS version with functioning LPM (i.e. older 2377 * BIOS versions have broken LPM). 2378 */ 2379 static const struct dmi_system_id sysids[] = { 2380 { 2381 .matches = { 2382 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 2383 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X250"), 2384 }, 2385 .driver_data = "20180406", /* 1.31 */ 2386 }, 2387 { 2388 .matches = { 2389 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 2390 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L450"), 2391 }, 2392 .driver_data = "20180420", /* 1.28 */ 2393 }, 2394 { 2395 .matches = { 2396 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 2397 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T450s"), 2398 }, 2399 .driver_data = "20180315", /* 1.33 */ 2400 }, 2401 { 2402 .matches = { 2403 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 2404 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W541"), 2405 }, 2406 .driver_data = "20180409", /* 2.35 */ 2407 }, 2408 { 2409 .matches = { 2410 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 2411 DMI_MATCH(DMI_PRODUCT_NAME, "ASUSPRO D840MB_M840SA"), 2412 }, 2413 /* 320 is broken, there is no known good version. */ 2414 }, 2415 { 2416 /* 2417 * AMD 500 Series Chipset SATA Controller [1022:43eb] 2418 * on this motherboard timeouts on ports 5 and 6 when 2419 * LPM is enabled, at least with WDC WD20EFAX-68FB5N0 2420 * hard drives. LPM with the same drive works fine on 2421 * all other ports on the same controller. 2422 */ 2423 .matches = { 2424 DMI_MATCH(DMI_BOARD_VENDOR, 2425 "ASUSTeK COMPUTER INC."), 2426 DMI_MATCH(DMI_BOARD_NAME, 2427 "ROG STRIX B550-F GAMING (WI-FI)"), 2428 }, 2429 /* 3621 is broken, there is no known good version. */ 2430 }, 2431 { } /* terminate list */ 2432 }; 2433 const struct dmi_system_id *dmi = dmi_first_match(sysids); 2434 int year, month, date; 2435 char buf[9]; 2436 2437 if (!dmi) 2438 return false; 2439 2440 if (!dmi->driver_data) 2441 return true; 2442 2443 dmi_get_date(DMI_BIOS_DATE, &year, &month, &date); 2444 snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date); 2445 2446 return strcmp(buf, dmi->driver_data) < 0; 2447 } 2448 2449 static bool ahci_broken_online(struct pci_dev *pdev) 2450 { 2451 #define ENCODE_BUSDEVFN(bus, slot, func) \ 2452 (void *)(unsigned long)(((bus) << 8) | PCI_DEVFN((slot), (func))) 2453 static const struct dmi_system_id sysids[] = { 2454 /* 2455 * There are several gigabyte boards which use 2456 * SIMG5723s configured as hardware RAID. Certain 2457 * 5723 firmware revisions shipped there keep the link 2458 * online but fail to answer properly to SRST or 2459 * IDENTIFY when no device is attached downstream 2460 * causing libata to retry quite a few times leading 2461 * to excessive detection delay. 2462 * 2463 * As these firmwares respond to the second reset try 2464 * with invalid device signature, considering unknown 2465 * sig as offline works around the problem acceptably. 2466 */ 2467 { 2468 .ident = "EP45-DQ6", 2469 .matches = { 2470 DMI_MATCH(DMI_BOARD_VENDOR, 2471 "Gigabyte Technology Co., Ltd."), 2472 DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"), 2473 }, 2474 .driver_data = ENCODE_BUSDEVFN(0x0a, 0x00, 0), 2475 }, 2476 { 2477 .ident = "EP45-DS5", 2478 .matches = { 2479 DMI_MATCH(DMI_BOARD_VENDOR, 2480 "Gigabyte Technology Co., Ltd."), 2481 DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"), 2482 }, 2483 .driver_data = ENCODE_BUSDEVFN(0x03, 0x00, 0), 2484 }, 2485 { } /* terminate list */ 2486 }; 2487 #undef ENCODE_BUSDEVFN 2488 const struct dmi_system_id *dmi = dmi_first_match(sysids); 2489 unsigned int val; 2490 2491 if (!dmi) 2492 return false; 2493 2494 val = (unsigned long)dmi->driver_data; 2495 2496 return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff); 2497 } 2498 2499 #ifdef CONFIG_ATA_ACPI 2500 static void ahci_gtf_filter_workaround(struct ata_host *host) 2501 { 2502 static const struct dmi_system_id sysids[] = { 2503 /* 2504 * Aspire 3810T issues a bunch of SATA enable commands 2505 * via _GTF including an invalid one and one which is 2506 * rejected by the device. Among the successful ones 2507 * is FPDMA non-zero offset enable which when enabled 2508 * only on the drive side leads to NCQ command 2509 * failures. Filter it out. 2510 */ 2511 { 2512 .ident = "Aspire 3810T", 2513 .matches = { 2514 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 2515 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3810T"), 2516 }, 2517 .driver_data = (void *)ATA_ACPI_FILTER_FPDMA_OFFSET, 2518 }, 2519 { } 2520 }; 2521 const struct dmi_system_id *dmi = dmi_first_match(sysids); 2522 unsigned int filter; 2523 int i; 2524 2525 if (!dmi) 2526 return; 2527 2528 filter = (unsigned long)dmi->driver_data; 2529 dev_info(host->dev, "applying extra ACPI _GTF filter 0x%x for %s\n", 2530 filter, dmi->ident); 2531 2532 for (i = 0; i < host->n_ports; i++) { 2533 struct ata_port *ap = host->ports[i]; 2534 struct ata_link *link; 2535 struct ata_device *dev; 2536 2537 ata_for_each_link(link, ap, EDGE) 2538 ata_for_each_dev(dev, link, ALL) 2539 dev->gtf_filter |= filter; 2540 } 2541 } 2542 #else 2543 static inline void ahci_gtf_filter_workaround(struct ata_host *host) 2544 {} 2545 #endif 2546 2547 /* 2548 * On the Acer Aspire Switch Alpha 12, sometimes all SATA ports are detected 2549 * as DUMMY, or detected but eventually get a "link down" and never get up 2550 * again. When this happens, CAP.NP may hold a value of 0x00 or 0x01, and the 2551 * port_map may hold a value of 0x00. 2552 * 2553 * Overriding CAP.NP to 0x02 and the port_map to 0x7 will reveal all 3 ports 2554 * and can significantly reduce the occurrence of the problem. 2555 * 2556 * https://bugzilla.kernel.org/show_bug.cgi?id=189471 2557 */ 2558 static void acer_sa5_271_workaround(struct ahci_host_priv *hpriv, 2559 struct pci_dev *pdev) 2560 { 2561 static const struct dmi_system_id sysids[] = { 2562 { 2563 .ident = "Acer Switch Alpha 12", 2564 .matches = { 2565 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 2566 DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271") 2567 }, 2568 }, 2569 { } 2570 }; 2571 2572 if (dmi_check_system(sysids)) { 2573 dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n"); 2574 if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) { 2575 hpriv->port_map = 0x7; 2576 hpriv->cap = 0xC734FF02; 2577 } 2578 } 2579 } 2580 2581 #ifdef CONFIG_ARM64 2582 /* 2583 * Due to ERRATA#22536, ThunderX needs to handle HOST_IRQ_STAT differently. 2584 * Workaround is to make sure all pending IRQs are served before leaving 2585 * handler. 2586 */ 2587 static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance) 2588 { 2589 struct ata_host *host = dev_instance; 2590 struct ahci_host_priv *hpriv; 2591 unsigned int rc = 0; 2592 void __iomem *mmio; 2593 u32 irq_stat, irq_masked; 2594 unsigned int handled = 1; 2595 2596 hpriv = host->private_data; 2597 mmio = hpriv->mmio; 2598 irq_stat = readl(mmio + HOST_IRQ_STAT); 2599 if (!irq_stat) 2600 return IRQ_NONE; 2601 2602 do { 2603 irq_masked = irq_stat & hpriv->port_map; 2604 spin_lock(&host->lock); 2605 rc = ahci_handle_port_intr(host, irq_masked); 2606 if (!rc) 2607 handled = 0; 2608 writel(irq_stat, mmio + HOST_IRQ_STAT); 2609 irq_stat = readl(mmio + HOST_IRQ_STAT); 2610 spin_unlock(&host->lock); 2611 } while (irq_stat); 2612 2613 return IRQ_RETVAL(handled); 2614 } 2615 #endif 2616 2617 static void ahci_remap_check(struct pci_dev *pdev, int bar, 2618 struct ahci_host_priv *hpriv) 2619 { 2620 int i; 2621 u32 cap; 2622 2623 /* 2624 * Check if this device might have remapped nvme devices. 2625 */ 2626 if (pdev->vendor != PCI_VENDOR_ID_INTEL || 2627 pci_resource_len(pdev, bar) < SZ_512K || 2628 bar != AHCI_PCI_BAR_STANDARD || 2629 !(readl(hpriv->mmio + AHCI_VSCAP) & 1)) 2630 return; 2631 2632 cap = readq(hpriv->mmio + AHCI_REMAP_CAP); 2633 for (i = 0; i < AHCI_MAX_REMAP; i++) { 2634 if ((cap & (1 << i)) == 0) 2635 continue; 2636 if (readl(hpriv->mmio + ahci_remap_dcc(i)) 2637 != PCI_CLASS_STORAGE_EXPRESS) 2638 continue; 2639 2640 /* We've found a remapped device */ 2641 hpriv->remapped_nvme++; 2642 } 2643 2644 if (!hpriv->remapped_nvme) 2645 return; 2646 2647 dev_warn(&pdev->dev, "Found %u remapped NVMe devices.\n", 2648 hpriv->remapped_nvme); 2649 dev_warn(&pdev->dev, 2650 "Switch your BIOS from RAID to AHCI mode to use them.\n"); 2651 2652 /* 2653 * Don't rely on the msi-x capability in the remap case, 2654 * share the legacy interrupt across ahci and remapped devices. 2655 */ 2656 hpriv->flags |= AHCI_HFLAG_NO_MSI; 2657 } 2658 2659 static int ahci_get_irq_vector(struct ata_host *host, int port) 2660 { 2661 return pci_irq_vector(to_pci_dev(host->dev), port); 2662 } 2663 2664 static void ahci_init_irq(struct pci_dev *pdev, unsigned int n_ports, 2665 struct ahci_host_priv *hpriv) 2666 { 2667 int nvec; 2668 2669 if (hpriv->flags & AHCI_HFLAG_NO_MSI) { 2670 pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_INTX); 2671 return; 2672 } 2673 2674 /* 2675 * If number of MSIs is less than number of ports then Sharing Last 2676 * Message mode could be enforced. In this case assume that advantage 2677 * of multiple MSIs is negated and use single MSI mode instead. 2678 */ 2679 if (n_ports > 1) { 2680 nvec = pci_alloc_irq_vectors(pdev, n_ports, INT_MAX, 2681 PCI_IRQ_MSIX | PCI_IRQ_MSI); 2682 if (nvec > 0) { 2683 if (!(readl(hpriv->mmio + HOST_CTL) & HOST_MRSM)) { 2684 hpriv->get_irq_vector = ahci_get_irq_vector; 2685 hpriv->flags |= AHCI_HFLAG_MULTI_MSI; 2686 return; 2687 } 2688 2689 /* 2690 * Fallback to single MSI mode if the controller 2691 * enforced MRSM mode. 2692 */ 2693 printk(KERN_INFO 2694 "ahci: MRSM is on, fallback to single MSI\n"); 2695 pci_free_irq_vectors(pdev); 2696 } 2697 } 2698 2699 /* 2700 * If the host is not capable of supporting per-port vectors, fall 2701 * back to single MSI before finally attempting single MSI-X or 2702 * a legacy INTx. 2703 */ 2704 nvec = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI); 2705 if (nvec == 1) 2706 return; 2707 pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX | PCI_IRQ_INTX); 2708 } 2709 2710 static void ahci_mark_external_port(struct ata_port *ap) 2711 { 2712 struct ahci_host_priv *hpriv = ap->host->private_data; 2713 void __iomem *port_mmio = ahci_port_base(ap); 2714 u32 tmp; 2715 2716 /* 2717 * Mark external ports (hotplug-capable, eSATA), unless we were asked to 2718 * ignore this feature. 2719 */ 2720 tmp = readl(port_mmio + PORT_CMD); 2721 if (((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) || 2722 (tmp & PORT_CMD_HPCP)) { 2723 if (hpriv->mask_port_ext & (1U << ap->port_no)) { 2724 ata_port_info(ap, 2725 "Ignoring external/hotplug capability\n"); 2726 return; 2727 } 2728 ap->pflags |= ATA_PFLAG_EXTERNAL; 2729 } 2730 } 2731 2732 static void ahci_update_initial_lpm_policy(struct ata_port *ap) 2733 { 2734 struct ahci_host_priv *hpriv = ap->host->private_data; 2735 int policy = CONFIG_SATA_MOBILE_LPM_POLICY; 2736 2737 /* 2738 * AHCI contains a known incompatibility between LPM and hot-plug 2739 * removal events, see 7.3.1 Hot Plug Removal Detection and Power 2740 * Management Interaction in AHCI 1.3.1. Therefore, do not enable 2741 * LPM if the port advertises itself as an external port. 2742 */ 2743 if (ap->pflags & ATA_PFLAG_EXTERNAL) { 2744 ap->flags |= ATA_FLAG_NO_LPM; 2745 ap->target_lpm_policy = ATA_LPM_MAX_POWER; 2746 return; 2747 } 2748 2749 /* If no Partial or no Slumber, we cannot support DIPM. */ 2750 if ((ap->host->flags & ATA_HOST_NO_PART) || 2751 (ap->host->flags & ATA_HOST_NO_SSC)) { 2752 ata_port_dbg(ap, "Host does not support DIPM\n"); 2753 ap->flags |= ATA_FLAG_NO_DIPM; 2754 } 2755 2756 /* If no LPM states are supported by the HBA, do not bother with LPM */ 2757 if ((ap->host->flags & ATA_HOST_NO_PART) && 2758 (ap->host->flags & ATA_HOST_NO_SSC) && 2759 (ap->host->flags & ATA_HOST_NO_DEVSLP)) { 2760 ata_port_dbg(ap, 2761 "No LPM states supported, forcing LPM max_power\n"); 2762 ap->flags |= ATA_FLAG_NO_LPM; 2763 ap->target_lpm_policy = ATA_LPM_MAX_POWER; 2764 return; 2765 } 2766 2767 /* user modified policy via module param */ 2768 if (mobile_lpm_policy != -1) { 2769 policy = mobile_lpm_policy; 2770 goto update_policy; 2771 } 2772 2773 if (policy > ATA_LPM_MED_POWER && pm_suspend_default_s2idle()) { 2774 if (hpriv->cap & HOST_CAP_PART) 2775 policy = ATA_LPM_MIN_POWER_WITH_PARTIAL; 2776 else if (hpriv->cap & HOST_CAP_SSC) 2777 policy = ATA_LPM_MIN_POWER; 2778 } 2779 2780 update_policy: 2781 if (policy >= ATA_LPM_UNKNOWN && policy <= ATA_LPM_MIN_POWER) 2782 ap->target_lpm_policy = policy; 2783 } 2784 2785 static void ahci_intel_pcs_quirk(struct pci_dev *pdev, struct ahci_host_priv *hpriv) 2786 { 2787 u16 tmp16; 2788 2789 if (!(hpriv->flags & AHCI_HFLAG_INTEL_PCS_QUIRK)) 2790 return; 2791 2792 /* 2793 * port_map is determined from PORTS_IMPL PCI register which is 2794 * implemented as write or write-once register. If the register 2795 * isn't programmed, ahci automatically generates it from number 2796 * of ports, which is good enough for PCS programming. It is 2797 * otherwise expected that platform firmware enables the ports 2798 * before the OS boots. 2799 */ 2800 pci_read_config_word(pdev, PCS_6, &tmp16); 2801 if ((tmp16 & hpriv->port_map) != hpriv->port_map) { 2802 tmp16 |= hpriv->port_map; 2803 pci_write_config_word(pdev, PCS_6, tmp16); 2804 } 2805 } 2806 2807 static ssize_t remapped_nvme_show(struct device *dev, 2808 struct device_attribute *attr, 2809 char *buf) 2810 { 2811 struct ata_host *host = dev_get_drvdata(dev); 2812 struct ahci_host_priv *hpriv = host->private_data; 2813 2814 return sysfs_emit(buf, "%u\n", hpriv->remapped_nvme); 2815 } 2816 2817 static DEVICE_ATTR_RO(remapped_nvme); 2818 2819 static int ahci_validate_bar_size(struct pci_dev *pdev, int bar, 2820 struct ahci_host_priv *hpriv) 2821 { 2822 u32 cap = readl(hpriv->mmio + HOST_CAP); 2823 unsigned int max_ports = ahci_nr_ports(cap); 2824 u32 last_port_end = 0x100 + (max_ports * 0x80); 2825 resource_size_t bar_size = pci_resource_len(pdev, bar); 2826 2827 if (last_port_end > bar_size) { 2828 dev_warn(&pdev->dev, 2829 "BAR%d too small for %u ports (last port ends at %#x, BAR %pa)\n", 2830 bar, max_ports, last_port_end, &bar_size); 2831 return -ENODEV; 2832 } 2833 2834 return 0; 2835 } 2836 2837 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 2838 { 2839 unsigned int board_id = ent->driver_data; 2840 struct ata_port_info pi = ahci_port_info[board_id]; 2841 const struct ata_port_info *ppi[] = { &pi, NULL }; 2842 struct device *dev = &pdev->dev; 2843 struct ahci_host_priv *hpriv; 2844 struct ata_host *host; 2845 int n_ports, i, rc; 2846 int ahci_pci_bar = AHCI_PCI_BAR_STANDARD; 2847 2848 WARN_ON((int)ATA_MAX_QUEUE > AHCI_MAX_CMDS); 2849 2850 ata_print_version_once(&pdev->dev, DRV_VERSION); 2851 2852 /* The AHCI driver can only drive the SATA ports, the PATA driver 2853 can drive them all so if both drivers are selected make sure 2854 AHCI stays out of the way */ 2855 if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable) 2856 return -ENODEV; 2857 2858 /* Apple BIOS on MCP89 prevents us using AHCI */ 2859 if (is_mcp89_apple(pdev)) 2860 ahci_mcp89_apple_enable(pdev); 2861 2862 /* Promise's PDC42819 is a SAS/SATA controller that has an AHCI mode. 2863 * At the moment, we can only use the AHCI mode. Let the users know 2864 * that for SAS drives they're out of luck. 2865 */ 2866 if (pdev->vendor == PCI_VENDOR_ID_PROMISE) 2867 dev_info(&pdev->dev, 2868 "PDC42819 can only drive SATA devices with this driver\n"); 2869 2870 /* Some devices use non-standard BARs */ 2871 if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06) 2872 ahci_pci_bar = AHCI_PCI_BAR_STA2X11; 2873 else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000) 2874 ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS; 2875 else if (pdev->vendor == PCI_VENDOR_ID_CAVIUM) { 2876 if (pdev->device == 0xa01c) 2877 ahci_pci_bar = AHCI_PCI_BAR_CAVIUM; 2878 if (pdev->device == 0xa084) 2879 ahci_pci_bar = AHCI_PCI_BAR_CAVIUM_GEN5; 2880 } else if (pdev->vendor == PCI_VENDOR_ID_LOONGSON) { 2881 if (pdev->device == 0x7a08) 2882 ahci_pci_bar = AHCI_PCI_BAR_LOONGSON; 2883 } 2884 2885 /* acquire resources */ 2886 rc = pcim_enable_device(pdev); 2887 if (rc) 2888 return rc; 2889 2890 if (pdev->vendor == PCI_VENDOR_ID_INTEL && 2891 (pdev->device == 0x2652 || pdev->device == 0x2653)) { 2892 u8 map; 2893 2894 /* ICH6s share the same PCI ID for both piix and ahci 2895 * modes. Enabling ahci mode while MAP indicates 2896 * combined mode is a bad idea. Yield to ata_piix. 2897 */ 2898 pci_read_config_byte(pdev, ICH_MAP, &map); 2899 if (map & 0x3) { 2900 dev_info(&pdev->dev, 2901 "controller is in combined mode, can't enable AHCI mode\n"); 2902 return -ENODEV; 2903 } 2904 } 2905 2906 /* AHCI controllers often implement SFF compatible interface. 2907 * Grab all PCI BARs just in case. 2908 */ 2909 rc = pcim_request_all_regions(pdev, DRV_NAME); 2910 if (rc == -EBUSY) 2911 pcim_pin_device(pdev); 2912 if (rc) 2913 return rc; 2914 2915 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL); 2916 if (!hpriv) 2917 return -ENOMEM; 2918 hpriv->flags |= (unsigned long)pi.private_data; 2919 2920 /* MCP65 revision A1 and A2 can't do MSI */ 2921 if (board_id == board_ahci_mcp65 && 2922 (pdev->revision == 0xa1 || pdev->revision == 0xa2)) 2923 hpriv->flags |= AHCI_HFLAG_NO_MSI; 2924 2925 /* SB800 does NOT need the workaround to ignore SERR_INTERNAL */ 2926 if (board_id == board_ahci_sb700 && pdev->revision >= 0x40) 2927 hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL; 2928 2929 /* only some SB600s can do 64bit DMA */ 2930 if (ahci_sb600_enable_64bit(pdev)) 2931 hpriv->flags &= ~AHCI_HFLAG_32BIT_ONLY; 2932 2933 hpriv->mmio = pcim_iomap(pdev, ahci_pci_bar, 0); 2934 if (!hpriv->mmio) 2935 return -ENOMEM; 2936 2937 rc = ahci_validate_bar_size(pdev, ahci_pci_bar, hpriv); 2938 if (rc) 2939 return rc; 2940 2941 /* detect remapped nvme devices */ 2942 ahci_remap_check(pdev, ahci_pci_bar, hpriv); 2943 2944 sysfs_add_file_to_group(&pdev->dev.kobj, 2945 &dev_attr_remapped_nvme.attr, 2946 NULL); 2947 2948 #ifdef CONFIG_ARM64 2949 if (pdev->vendor == PCI_VENDOR_ID_HUAWEI && 2950 pdev->device == 0xa235 && 2951 pdev->revision < 0x30) 2952 hpriv->flags |= AHCI_HFLAG_NO_SXS; 2953 2954 if (pdev->vendor == 0x177d && pdev->device == 0xa01c) 2955 hpriv->irq_handler = ahci_thunderx_irq_handler; 2956 #endif 2957 2958 /* save initial config */ 2959 ahci_pci_save_initial_config(pdev, hpriv); 2960 2961 /* prepare host */ 2962 if (hpriv->cap & HOST_CAP_NCQ) { 2963 pi.flags |= ATA_FLAG_NCQ; 2964 /* 2965 * Auto-activate optimization is supposed to be 2966 * supported on all AHCI controllers indicating NCQ 2967 * capability, but it seems to be broken on some 2968 * chipsets including NVIDIAs. 2969 */ 2970 if (!(hpriv->flags & AHCI_HFLAG_NO_FPDMA_AA)) 2971 pi.flags |= ATA_FLAG_FPDMA_AA; 2972 2973 /* 2974 * All AHCI controllers should be forward-compatible 2975 * with the new auxiliary field. This code should be 2976 * conditionalized if any buggy AHCI controllers are 2977 * encountered. 2978 */ 2979 pi.flags |= ATA_FLAG_FPDMA_AUX; 2980 } 2981 2982 if (hpriv->cap & HOST_CAP_PMP) 2983 pi.flags |= ATA_FLAG_PMP; 2984 2985 ahci_set_em_messages(hpriv, &pi); 2986 2987 if (ahci_broken_system_poweroff(pdev)) { 2988 pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN; 2989 dev_info(&pdev->dev, 2990 "quirky BIOS, skipping spindown on poweroff\n"); 2991 } 2992 2993 if (ahci_broken_lpm(pdev)) { 2994 pi.flags |= ATA_FLAG_NO_LPM; 2995 dev_warn(&pdev->dev, 2996 "BIOS update required for Link Power Management support\n"); 2997 } 2998 2999 if (ahci_broken_suspend(pdev)) { 3000 hpriv->flags |= AHCI_HFLAG_NO_SUSPEND; 3001 dev_warn(&pdev->dev, 3002 "BIOS update required for suspend/resume\n"); 3003 } 3004 3005 if (ahci_broken_online(pdev)) { 3006 hpriv->flags |= AHCI_HFLAG_SRST_TOUT_IS_OFFLINE; 3007 dev_info(&pdev->dev, 3008 "online status unreliable, applying workaround\n"); 3009 } 3010 3011 3012 /* Acer SA5-271 workaround modifies private_data */ 3013 acer_sa5_271_workaround(hpriv, pdev); 3014 3015 /* CAP.NP sometimes indicate the index of the last enabled 3016 * port, at other times, that of the last possible port, so 3017 * determining the maximum port number requires looking at 3018 * both CAP.NP and port_map. 3019 */ 3020 n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); 3021 3022 host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); 3023 if (!host) { 3024 rc = -ENOMEM; 3025 goto err_rm_sysfs_file; 3026 } 3027 host->private_data = hpriv; 3028 3029 ahci_init_irq(pdev, n_ports, hpriv); 3030 3031 hpriv->irq = pci_irq_vector(pdev, 0); 3032 3033 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss) 3034 host->flags |= ATA_HOST_PARALLEL_SCAN; 3035 else 3036 dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n"); 3037 3038 if (!(hpriv->cap & HOST_CAP_PART)) 3039 host->flags |= ATA_HOST_NO_PART; 3040 3041 if (!(hpriv->cap & HOST_CAP_SSC)) 3042 host->flags |= ATA_HOST_NO_SSC; 3043 3044 if (!(hpriv->cap2 & HOST_CAP2_SDS)) 3045 host->flags |= ATA_HOST_NO_DEVSLP; 3046 3047 if (pi.flags & ATA_FLAG_EM) 3048 ahci_reset_em(host); 3049 3050 for (i = 0; i < host->n_ports; i++) { 3051 struct ata_port *ap = host->ports[i]; 3052 3053 ata_port_pbar_desc(ap, ahci_pci_bar, -1, "abar"); 3054 ata_port_pbar_desc(ap, ahci_pci_bar, 3055 0x100 + ap->port_no * 0x80, "port"); 3056 3057 /* set enclosure management message type */ 3058 if (ap->flags & ATA_FLAG_EM) 3059 ap->em_message_type = hpriv->em_msg_type; 3060 3061 /* disabled/not-implemented port */ 3062 if (!(hpriv->port_map & (1 << i))) { 3063 ap->ops = &ata_dummy_port_ops; 3064 } else { 3065 ahci_mark_external_port(ap); 3066 ahci_update_initial_lpm_policy(ap); 3067 } 3068 } 3069 3070 /* apply workaround for ASUS P5W DH Deluxe mainboard */ 3071 ahci_p5wdh_workaround(host); 3072 3073 /* apply gtf filter quirk */ 3074 ahci_gtf_filter_workaround(host); 3075 3076 /* initialize adapter */ 3077 rc = ahci_configure_dma_masks(pdev, hpriv); 3078 if (rc) 3079 goto err_rm_sysfs_file; 3080 3081 rc = ahci_pci_reset_controller(host); 3082 if (rc) 3083 goto err_rm_sysfs_file; 3084 3085 ahci_pci_init_controller(host); 3086 ahci_pci_print_info(host); 3087 3088 pci_set_master(pdev); 3089 3090 rc = ahci_host_activate(host, &ahci_sht); 3091 if (rc) 3092 goto err_rm_sysfs_file; 3093 3094 pm_runtime_put_noidle(&pdev->dev); 3095 return 0; 3096 3097 err_rm_sysfs_file: 3098 sysfs_remove_file_from_group(&pdev->dev.kobj, 3099 &dev_attr_remapped_nvme.attr, NULL); 3100 return rc; 3101 } 3102 3103 static void ahci_shutdown_one(struct pci_dev *pdev) 3104 { 3105 ata_pci_shutdown_one(pdev); 3106 } 3107 3108 static void ahci_remove_one(struct pci_dev *pdev) 3109 { 3110 sysfs_remove_file_from_group(&pdev->dev.kobj, 3111 &dev_attr_remapped_nvme.attr, 3112 NULL); 3113 pm_runtime_get_noresume(&pdev->dev); 3114 ata_pci_remove_one(pdev); 3115 } 3116 3117 module_pci_driver(ahci_pci_driver); 3118 3119 MODULE_AUTHOR("Jeff Garzik"); 3120 MODULE_DESCRIPTION("AHCI SATA low-level driver"); 3121 MODULE_LICENSE("GPL"); 3122 MODULE_DEVICE_TABLE(pci, ahci_pci_tbl); 3123 MODULE_VERSION(DRV_VERSION); 3124