diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 01d8f8a8843c..75bd6a8648f6 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -627,6 +627,22 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_ | |||
627 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic); | 627 | DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic); |
628 | #endif /* CONFIG_X86_IO_APIC */ | 628 | #endif /* CONFIG_X86_IO_APIC */ |
629 | 629 | ||
630 | /* | ||
631 | * Some settings of MMRBC can lead to data corruption so block changes. | ||
632 | * See AMD 8131 HyperTransport PCI-X Tunnel Revision Guide | ||
633 | */ | ||
634 | static void __init quirk_amd_8131_mmrbc(struct pci_dev *dev) | ||
635 | { | ||
636 | unsigned char revid; | ||
637 | |||
638 | pci_read_config_byte(dev, PCI_REVISION_ID, &revid); | ||
639 | if (dev->subordinate && revid <= 0x12) { | ||
640 | printk(KERN_INFO "AMD8131 rev %x detected, disabling PCI-X MMRBC\n", | ||
641 | revid); | ||
642 | dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MMRBC; | ||
643 | } | ||
644 | } | ||
645 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_mmrbc); | ||
630 | 646 | ||
631 | /* | 647 | /* |
632 | * FIXME: it is questionable that quirk_via_acpi | 648 | * FIXME: it is questionable that quirk_via_acpi |