]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Add workaround for AMD8131 bug
authorAndi Kleen <ak@muc.de>
Fri, 20 Dec 2002 13:37:57 +0000 (05:37 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 20 Dec 2002 13:37:57 +0000 (05:37 -0800)
Some revisions of the AMD8131 PCI-X bridge have a irq routing bug that appears
in IO-APIC mode. To work around it a bit needs to be set in this case.

drivers/pci/quirks.c
include/linux/pci_ids.h

index 368628cc6457d592dd3ca3fb846946addf1eae82..42a000f2f1a4d7b5699878f4ca464e964ce0d13f 100644 (file)
@@ -355,6 +355,26 @@ static void __init quirk_ioapic_rmw(struct pci_dev *dev)
                sis_apic_bug = 1;
 }
 
+#define AMD8131_revA0        0x01
+#define AMD8131_revB0        0x11
+#define AMD8131_MISC         0x40
+#define AMD8131_NIOAMODE_BIT 0
+
+static void __init quirk_amd_8131_ioapic(struct pci_dev *dev) 
+{ 
+        unsigned char revid, tmp;
+        
+        if (nr_ioapics == 0) 
+                return;
+
+        pci_read_config_byte(dev, PCI_REVISION_ID, &revid);
+        if (revid == AMD8131_revA0 || revid == AMD8131_revB0) {
+                printk(KERN_INFO "Fixing up AMD8131 IOAPIC mode\n"); 
+                pci_read_config_byte( dev, AMD8131_MISC, &tmp);
+                tmp &= ~(1 << AMD8131_NIOAMODE_BIT);
+                pci_write_config_byte( dev, AMD8131_MISC, tmp);
+        }
+} 
 
 #endif /* CONFIG_X86_IO_APIC */
 
@@ -563,6 +583,8 @@ static struct pci_fixup pci_fixups[] __devinitdata = {
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C686,       quirk_via_ioapic },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_AMD,      PCI_DEVICE_ID_AMD_VIPER_7410,   quirk_amd_ioapic },
        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_SI,       PCI_ANY_ID,                     quirk_ioapic_rmw },
+        { PCI_FIXUP_FINAL,      PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_APIC,
+          quirk_amd_8131_ioapic }, 
 #endif
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C586_3,     quirk_via_acpi },
        { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_VIA,      PCI_DEVICE_ID_VIA_82C686_4,     quirk_via_acpi },
index 4f90ff1ccbe83d4a0cedf1d77ebab5f2f1fab841..1befa5e1830b36eb89c4d12a054186dedd1955aa 100644 (file)
 #define PCI_DEVICE_ID_AMD_8111_IDE     0x7469
 #define PCI_DEVICE_ID_AMD_8111_AUDIO   0x746d
 #define PCI_DEVICE_ID_AMD_8151_0       0x7454
+#define PCI_DEVICE_ID_AMD_8131_APIC     0x7450
 
 #define PCI_VENDOR_ID_TRIDENT          0x1023
 #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX        0x2000