diff options
Diffstat (limited to 'drivers/ata/ahci.c')
| -rw-r--r-- | drivers/ata/ahci.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index dc2756fb6f33..c81d809c111b 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -61,6 +61,7 @@ enum board_ids { | |||
| 61 | /* board IDs by feature in alphabetical order */ | 61 | /* board IDs by feature in alphabetical order */ |
| 62 | board_ahci, | 62 | board_ahci, |
| 63 | board_ahci_ign_iferr, | 63 | board_ahci_ign_iferr, |
| 64 | board_ahci_noncq, | ||
| 64 | board_ahci_nosntf, | 65 | board_ahci_nosntf, |
| 65 | board_ahci_yes_fbs, | 66 | board_ahci_yes_fbs, |
| 66 | 67 | ||
| @@ -121,6 +122,13 @@ static const struct ata_port_info ahci_port_info[] = { | |||
| 121 | .udma_mask = ATA_UDMA6, | 122 | .udma_mask = ATA_UDMA6, |
| 122 | .port_ops = &ahci_ops, | 123 | .port_ops = &ahci_ops, |
| 123 | }, | 124 | }, |
| 125 | [board_ahci_noncq] = { | ||
| 126 | AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ), | ||
| 127 | .flags = AHCI_FLAG_COMMON, | ||
| 128 | .pio_mask = ATA_PIO4, | ||
| 129 | .udma_mask = ATA_UDMA6, | ||
| 130 | .port_ops = &ahci_ops, | ||
| 131 | }, | ||
| 124 | [board_ahci_nosntf] = { | 132 | [board_ahci_nosntf] = { |
| 125 | AHCI_HFLAGS (AHCI_HFLAG_NO_SNTF), | 133 | AHCI_HFLAGS (AHCI_HFLAG_NO_SNTF), |
| 126 | .flags = AHCI_FLAG_COMMON, | 134 | .flags = AHCI_FLAG_COMMON, |
| @@ -452,6 +460,12 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 452 | { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci }, /* ASM1061 */ | 460 | { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci }, /* ASM1061 */ |
| 453 | { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */ | 461 | { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */ |
| 454 | 462 | ||
| 463 | /* | ||
| 464 | * Samsung SSDs found on some macbooks. NCQ times out. | ||
| 465 | * https://bugzilla.kernel.org/show_bug.cgi?id=60731 | ||
| 466 | */ | ||
| 467 | { PCI_VDEVICE(SAMSUNG, 0x1600), board_ahci_noncq }, | ||
| 468 | |||
| 455 | /* Enmotus */ | 469 | /* Enmotus */ |
| 456 | { PCI_DEVICE(0x1c44, 0x8000), board_ahci }, | 470 | { PCI_DEVICE(0x1c44, 0x8000), board_ahci }, |
| 457 | 471 | ||
| @@ -1170,8 +1184,10 @@ static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports, | |||
| 1170 | 1184 | ||
| 1171 | nvec = rc; | 1185 | nvec = rc; |
| 1172 | rc = pci_enable_msi_block(pdev, nvec); | 1186 | rc = pci_enable_msi_block(pdev, nvec); |
| 1173 | if (rc) | 1187 | if (rc < 0) |
| 1174 | goto intx; | 1188 | goto intx; |
| 1189 | else if (rc > 0) | ||
| 1190 | goto single_msi; | ||
| 1175 | 1191 | ||
| 1176 | return nvec; | 1192 | return nvec; |
| 1177 | 1193 | ||
