aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/quirks.c17
-rw-r--r--include/linux/pci.h5
2 files changed, 18 insertions, 4 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 08cd86a6dd66..23b599d6a9d5 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -93,8 +93,21 @@ static void __devinit quirk_nopcipci(struct pci_dev *dev)
93 pci_pci_problems |= PCIPCI_FAIL; 93 pci_pci_problems |= PCIPCI_FAIL;
94 } 94 }
95} 95}
96
97static void __devinit quirk_nopciamd(struct pci_dev *dev)
98{
99 u8 rev;
100 pci_read_config_byte(dev, 0x08, &rev);
101 if (rev == 0x13) {
102 /* Erratum 24 */
103 printk(KERN_INFO "Chipset erratum: Disabling direct PCI/AGP transfers.\n");
104 pci_pci_problems |= PCIAGP_FAIL;
105 }
106}
107
96DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci ); 108DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci );
97DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci ); 109DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci );
110DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8151_0, quirk_nopciamd );
98 111
99/* 112/*
100 * Triton requires workarounds to be used by the drivers 113 * Triton requires workarounds to be used by the drivers
@@ -555,7 +568,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt
555 * is currently marked NoFix 568 * is currently marked NoFix
556 * 569 *
557 * We have multiple reports of hangs with this chipset that went away with 570 * We have multiple reports of hangs with this chipset that went away with
558 * noapic specified. For the moment we assume its the errata. We may be wrong 571 * noapic specified. For the moment we assume it's the erratum. We may be wrong
559 * of course. However the advice is demonstrably good even if so.. 572 * of course. However the advice is demonstrably good even if so..
560 */ 573 */
561static void __devinit quirk_amd_ioapic(struct pci_dev *dev) 574static void __devinit quirk_amd_ioapic(struct pci_dev *dev)
@@ -564,7 +577,7 @@ static void __devinit quirk_amd_ioapic(struct pci_dev *dev)
564 577
565 pci_read_config_byte(dev, PCI_REVISION_ID, &rev); 578 pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
566 if (rev >= 0x02) { 579 if (rev >= 0x02) {
567 printk(KERN_WARNING "I/O APIC: AMD Errata #22 may be present. In the event of instability try\n"); 580 printk(KERN_WARNING "I/O APIC: AMD Erratum #22 may be present. In the event of instability try\n");
568 printk(KERN_WARNING " : booting with the \"noapic\" option.\n"); 581 printk(KERN_WARNING " : booting with the \"noapic\" option.\n");
569 } 582 }
570} 583}
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 5c3a4176eb64..4431ce4e1e6f 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -787,12 +787,13 @@ enum pci_fixup_pass {
787void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); 787void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
788 788
789extern int pci_pci_problems; 789extern int pci_pci_problems;
790#define PCIPCI_FAIL 1 790#define PCIPCI_FAIL 1 /* No PCI PCI DMA */
791#define PCIPCI_TRITON 2 791#define PCIPCI_TRITON 2
792#define PCIPCI_NATOMA 4 792#define PCIPCI_NATOMA 4
793#define PCIPCI_VIAETBF 8 793#define PCIPCI_VIAETBF 8
794#define PCIPCI_VSFX 16 794#define PCIPCI_VSFX 16
795#define PCIPCI_ALIMAGIK 32 795#define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
796#define PCIAGP_FAIL 64 /* No PCI to AGP DMA */
796 797
797#endif /* __KERNEL__ */ 798#endif /* __KERNEL__ */
798#endif /* LINUX_PCI_H */ 799#endif /* LINUX_PCI_H */