diff options
author | Andi Kleen <ak@suse.de> | 2007-06-20 12:23:32 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-20 14:27:25 -0700 |
commit | 388c19e176436707eb30a81c7e4129e08769f92b (patch) | |
tree | 168017ad573b12c35a39f52f3513c779de3fb8c8 /arch/x86_64/kernel | |
parent | 0b622330213ce0f0ee23199e433ed73284209b46 (diff) | |
download | op-kernel-dev-388c19e176436707eb30a81c7e4129e08769f92b.zip op-kernel-dev-388c19e176436707eb30a81c7e4129e08769f92b.tar.gz |
x86: Disable DAC on VIA bridges
Several reports that VIA bridges don't support DAC and corrupt
data. I don't know if it's fixed, but let's just blacklist
them all for now.
It can be overwritten with iommu=usedac
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86_64/kernel')
-rw-r--r-- | arch/x86_64/kernel/pci-dma.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c index 651ccfb..9f80aad 100644 --- a/arch/x86_64/kernel/pci-dma.c +++ b/arch/x86_64/kernel/pci-dma.c @@ -322,5 +322,17 @@ static int __init pci_iommu_init(void) return 0; } +#ifdef CONFIG_PCI +/* Many VIA bridges seem to corrupt data for DAC. Disable it here */ + +static __devinit void via_no_dac(struct pci_dev *dev) +{ + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) { + printk(KERN_INFO "PCI: VIA PCI bridge detected. Disabling DAC.\n"); + forbid_dac = 1; + } +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac); +#endif /* Must execute after PCI subsystem */ fs_initcall(pci_iommu_init); |