diff options
-rw-r--r-- | drivers/pci/quirks.c | 17 | ||||
-rw-r--r-- | include/linux/pci.h | 5 |
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 | |||
97 | static 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 | |||
96 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci ); | 108 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci ); |
97 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci ); | 109 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci ); |
110 | DECLARE_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 | */ |
561 | static void __devinit quirk_amd_ioapic(struct pci_dev *dev) | 574 | static 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 { | |||
787 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); | 787 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); |
788 | 788 | ||
789 | extern int pci_pci_problems; | 789 | extern 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 */ |