36 lines
1.2 KiB
C
36 lines
1.2 KiB
C
diff --git a/sys/dev/bhnd/bhndb/bhndb_pci.c b/sys/dev/bhnd/bhndb/bhndb_pci.c
|
|||
|
|
index 0cdcba1d..7b6ae0f3 100644
|
||
|
|
--- a/sys/dev/bhnd/bhndb/bhndb_pci.c
|
||
|
|
+++ b/sys/dev/bhnd/bhndb/bhndb_pci.c
|
||
|
|
@@ -195,6 +195,16 @@ static struct bhndb_pci_quirk bhndb_pci_quirks[] = {
|
||
|
|
static struct bhndb_pci_quirk bhndb_pcie_quirks[] = {
|
||
|
|
/* All PCIe-G1 core revisions require the SRSH work-around */
|
||
|
|
BHNDB_PCI_QUIRK(HWREV_ANY, BHNDB_PCI_QUIRK_SRSH_WAR),
|
||
|
|
+
|
||
|
|
+ /*
|
||
|
|
+ * BCM43224 (and other Broadcom PCIe-G1 endpoints) do not have MSI
|
||
|
|
+ * delivered on some host platforms (e.g. NVIDIA MCP89 based Apple
|
||
|
|
+ * MacBook Air); force legacy INTx instead.
|
||
|
|
+ */
|
||
|
|
+ { { BHND_MATCH_CHIP_ID(BCM43224) },
|
||
|
|
+ { BHND_MATCH_ANY },
|
||
|
|
+ BHNDB_PCI_QUIRK_NO_MSI },
|
||
|
|
+
|
||
|
|
BHNDB_PCI_QUIRK_END
|
||
|
|
};
|
||
|
|
|
||
|
|
@@ -327,6 +337,13 @@ bhndb_pci_alloc_msi(struct bhndb_pci_softc *sc, int *msi_count)
|
||
|
|
{
|
||
|
|
int error, count;
|
||
|
|
|
||
|
|
+ /* MSI disabled by bridge quirk? */
|
||
|
|
+ if (sc->pci_quirks & BHNDB_PCI_QUIRK_NO_MSI) {
|
||
|
|
+ device_printf(sc->dev, "MSI disabled by quirk; using INTx on "
|
||
|
|
+ "%s\n", device_get_nameunit(sc->parent));
|
||
|
|
+ return (ENXIO);
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
/* Is MSI available? */
|
||
|
|
if (pci_msi_count(sc->parent) < BHNDB_PCI_MSI_COUNT)
|
||
|
|
return (ENXIO);
|