diff options
| -rw-r--r-- | drivers/pci/quirks.c | 36 |
1 files changed, 3 insertions, 33 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 3ea0b29c0104..27c0e6eb7136 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -2123,6 +2123,9 @@ static void __devinit quirk_disable_msi(struct pci_dev *dev) | |||
| 2123 | } | 2123 | } |
| 2124 | } | 2124 | } |
| 2125 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi); | 2125 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi); |
| 2126 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x9602, quirk_disable_msi); | ||
| 2127 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, 0x9602, quirk_disable_msi); | ||
| 2128 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AI, 0x9602, quirk_disable_msi); | ||
| 2126 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi); | 2129 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi); |
| 2127 | 2130 | ||
| 2128 | /* Go through the list of Hypertransport capabilities and | 2131 | /* Go through the list of Hypertransport capabilities and |
| @@ -2495,39 +2498,6 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4374, | |||
| 2495 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375, | 2498 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375, |
| 2496 | quirk_msi_intx_disable_bug); | 2499 | quirk_msi_intx_disable_bug); |
| 2497 | 2500 | ||
| 2498 | /* | ||
| 2499 | * MSI does not work with the AMD RS780/RS880 internal graphics and HDMI audio | ||
| 2500 | * devices unless the BIOS has initialized the nb_cntl.strap_msi_enable bit. | ||
| 2501 | */ | ||
| 2502 | static void __init rs780_int_gfx_disable_msi(struct pci_dev *int_gfx_bridge) | ||
| 2503 | { | ||
| 2504 | u32 nb_cntl; | ||
| 2505 | |||
| 2506 | if (!int_gfx_bridge->subordinate) | ||
| 2507 | return; | ||
| 2508 | |||
| 2509 | pci_bus_write_config_dword(int_gfx_bridge->bus, PCI_DEVFN(0, 0), | ||
| 2510 | 0x60, 0); | ||
| 2511 | pci_bus_read_config_dword(int_gfx_bridge->bus, PCI_DEVFN(0, 0), | ||
| 2512 | 0x64, &nb_cntl); | ||
| 2513 | |||
| 2514 | if (!(nb_cntl & BIT(10))) { | ||
| 2515 | dev_warn(&int_gfx_bridge->dev, | ||
| 2516 | FW_WARN "RS780: MSI for internal graphics disabled\n"); | ||
| 2517 | int_gfx_bridge->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI; | ||
| 2518 | } | ||
| 2519 | } | ||
| 2520 | |||
| 2521 | #define PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX 0x9602 | ||
| 2522 | |||
| 2523 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, | ||
| 2524 | PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX, | ||
| 2525 | rs780_int_gfx_disable_msi); | ||
| 2526 | /* wrong vendor ID on M4A785TD motherboard: */ | ||
| 2527 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, | ||
| 2528 | PCI_DEVICE_ID_AMD_RS780_P2P_INT_GFX, | ||
| 2529 | rs780_int_gfx_disable_msi); | ||
| 2530 | |||
| 2531 | #endif /* CONFIG_PCI_MSI */ | 2501 | #endif /* CONFIG_PCI_MSI */ |
| 2532 | 2502 | ||
| 2533 | #ifdef CONFIG_PCI_IOV | 2503 | #ifdef CONFIG_PCI_IOV |
