diff options
Diffstat (limited to 'arch/x86/kernel/pci-dma.c')
| -rw-r--r-- | arch/x86/kernel/pci-dma.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 1972266e8ba..19262482021 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #include <asm/calgary.h> | 9 | #include <asm/calgary.h> |
| 10 | #include <asm/amd_iommu.h> | 10 | #include <asm/amd_iommu.h> |
| 11 | 11 | ||
| 12 | static int forbid_dac __read_mostly; | ||
| 13 | |||
| 12 | struct dma_mapping_ops *dma_ops; | 14 | struct dma_mapping_ops *dma_ops; |
| 13 | EXPORT_SYMBOL(dma_ops); | 15 | EXPORT_SYMBOL(dma_ops); |
| 14 | 16 | ||
| @@ -291,3 +293,17 @@ void pci_iommu_shutdown(void) | |||
| 291 | } | 293 | } |
| 292 | /* Must execute after PCI subsystem */ | 294 | /* Must execute after PCI subsystem */ |
| 293 | fs_initcall(pci_iommu_init); | 295 | fs_initcall(pci_iommu_init); |
| 296 | |||
| 297 | #ifdef CONFIG_PCI | ||
| 298 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | ||
| 299 | |||
| 300 | static __devinit void via_no_dac(struct pci_dev *dev) | ||
| 301 | { | ||
| 302 | if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) { | ||
| 303 | printk(KERN_INFO "PCI: VIA PCI bridge detected." | ||
| 304 | "Disabling DAC.\n"); | ||
| 305 | forbid_dac = 1; | ||
| 306 | } | ||
| 307 | } | ||
| 308 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac); | ||
| 309 | #endif | ||
