aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/quirks.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r--drivers/pci/quirks.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 477345d41641..4334d15a8141 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2126,12 +2126,29 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev)
2126 } 2126 }
2127} 2127}
2128DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi); 2128DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi);
2129DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9602, quirk_disable_msi);
2130DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, 0x9602, quirk_disable_msi);
2131DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AI, 0x9602, quirk_disable_msi);
2132DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi); 2129DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);
2133DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi); 2130DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi);
2134 2131
2132/*
2133 * The APC bridge device in AMD 780 family northbridges has some random
2134 * OEM subsystem ID in its vendor ID register (erratum 18), so instead
2135 * we use the possible vendor/device IDs of the host bridge for the
2136 * declared quirk, and search for the APC bridge by slot number.
2137 */
2138static void __devinit quirk_amd_780_apc_msi(struct pci_dev *host_bridge)
2139{
2140 struct pci_dev *apc_bridge;
2141
2142 apc_bridge = pci_get_slot(host_bridge->bus, PCI_DEVFN(1, 0));
2143 if (apc_bridge) {
2144 if (apc_bridge->device == 0x9602)
2145 quirk_disable_msi(apc_bridge);
2146 pci_dev_put(apc_bridge);
2147 }
2148}
2149DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9600, quirk_amd_780_apc_msi);
2150DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9601, quirk_amd_780_apc_msi);
2151
2135/* Go through the list of Hypertransport capabilities and 2152/* Go through the list of Hypertransport capabilities and
2136 * return 1 if a HT MSI capability is found and enabled */ 2153 * return 1 if a HT MSI capability is found and enabled */
2137static int __devinit msi_ht_cap_enabled(struct pci_dev *dev) 2154static int __devinit msi_ht_cap_enabled(struct pci_dev *dev)