Index: sys/dev/ahci/ahci.h =================================================================== --- sys/dev/ahci/ahci.h +++ sys/dev/ahci/ahci.h @@ -576,13 +576,14 @@ #define AHCI_Q_NOCOUNT 0x00000400 #define AHCI_Q_ALTSIG 0x00000800 #define AHCI_Q_NOMSI 0x00001000 -#define AHCI_Q_ATI_PMP_BUG 0x00002000 -#define AHCI_Q_MAXIO_64K 0x00004000 -#define AHCI_Q_SATA1_UNIT0 0x00008000 /* need better method for this */ -#define AHCI_Q_ABAR0 0x00010000 -#define AHCI_Q_1MSI 0x00020000 -#define AHCI_Q_FORCE_PI 0x00040000 -#define AHCI_Q_RESTORE_CAP 0x00080000 +#define AHCI_Q_NOMSIX 0x00002000 +#define AHCI_Q_ATI_PMP_BUG 0x00004000 +#define AHCI_Q_MAXIO_64K 0x00008000 +#define AHCI_Q_SATA1_UNIT0 0x00010000 /* need better method for this */ +#define AHCI_Q_ABAR0 0x00020000 +#define AHCI_Q_1MSI 0x00040000 +#define AHCI_Q_FORCE_PI 0x00080000 +#define AHCI_Q_RESTORE_CAP 0x00100000 #define AHCI_Q_BIT_STRING \ "\020" \ @@ -599,13 +600,14 @@ "\013NOCOUNT" \ "\014ALTSIG" \ "\015NOMSI" \ - "\016ATI_PMP_BUG" \ - "\017MAXIO_64K" \ - "\020SATA1_UNIT0" \ - "\021ABAR0" \ - "\0221MSI" \ - "\023FORCE_PI" \ - "\024RESTORE_CAP" + "\016NOMSIX" \ + "\017ATI_PMP_BUG" \ + "\018MAXIO_64K" \ + "\019SATA1_UNIT0" \ + "\020ABAR0" \ + "\0211MSI" \ + "\022FORCE_PI" \ + "\023RESTORE_CAP" int ahci_attach(device_t dev); int ahci_detach(device_t dev); Index: sys/dev/ahci/ahci_pci.c =================================================================== --- sys/dev/ahci/ahci_pci.c +++ sys/dev/ahci/ahci_pci.c @@ -293,7 +293,7 @@ {0x11851039, 0x00, "SiS 968", 0}, {0x01861039, 0x00, "SiS 968", 0}, {0xa01c177d, 0x00, "ThunderX", AHCI_Q_ABAR0|AHCI_Q_1MSI}, - {0x00311c36, 0x00, "Annapurna", AHCI_Q_FORCE_PI|AHCI_Q_RESTORE_CAP}, + {0x00311c36, 0x00, "Annapurna", AHCI_Q_FORCE_PI|AHCI_Q_RESTORE_CAP|AHCI_Q_NOMSIX}, {0x00000000, 0x00, NULL, 0} }; @@ -437,6 +437,9 @@ &ctlr->r_rid, RF_ACTIVE))) return ENXIO; + if (ctlr->quirks & AHCI_Q_NOMSIX) + msix_count = 0; + /* Read MSI-x BAR IDs if supported */ if (msix_count > 0) { error = ahci_pci_read_msix_bars(dev, &table_bar, &pba_bar);