diff options
author | Glauber Costa <gcosta@redhat.com> | 2008-04-08 12:20:53 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-19 13:19:57 -0400 |
commit | bca5c09663030bdd18ab1b3ccb6671f663c3345a (patch) | |
tree | a98960da8eb60964dda190e6df6ef890c64147eb /arch/x86/kernel/pci-dma.c | |
parent | 116890d556af38d539597655c564a73e6eef3d9e (diff) |
x86: move pci fixup to pci-dma.c
via_no_dac provides a fixup that is the same for both
architectures. Move it to pci-dma.c.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/pci-dma.c')
-rw-r--r-- | arch/x86/kernel/pci-dma.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 91443361cb67..48cccbe51aa5 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -1,12 +1,16 @@ | |||
1 | #include <linux/dma-mapping.h> | 1 | #include <linux/dma-mapping.h> |
2 | #include <linux/dmar.h> | 2 | #include <linux/dmar.h> |
3 | #include <linux/bootmem.h> | 3 | #include <linux/bootmem.h> |
4 | #include <linux/pci.h> | ||
4 | 5 | ||
5 | #include <asm/proto.h> | 6 | #include <asm/proto.h> |
6 | #include <asm/dma.h> | 7 | #include <asm/dma.h> |
7 | #include <asm/gart.h> | 8 | #include <asm/gart.h> |
8 | #include <asm/calgary.h> | 9 | #include <asm/calgary.h> |
9 | 10 | ||
11 | int forbid_dac __read_mostly; | ||
12 | EXPORT_SYMBOL(forbid_dac); | ||
13 | |||
10 | const struct dma_mapping_ops *dma_ops; | 14 | const struct dma_mapping_ops *dma_ops; |
11 | EXPORT_SYMBOL(dma_ops); | 15 | EXPORT_SYMBOL(dma_ops); |
12 | 16 | ||
@@ -121,3 +125,17 @@ void pci_iommu_shutdown(void) | |||
121 | } | 125 | } |
122 | /* Must execute after PCI subsystem */ | 126 | /* Must execute after PCI subsystem */ |
123 | fs_initcall(pci_iommu_init); | 127 | fs_initcall(pci_iommu_init); |
128 | |||
129 | #ifdef CONFIG_PCI | ||
130 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | ||
131 | |||
132 | static __devinit void via_no_dac(struct pci_dev *dev) | ||
133 | { | ||
134 | if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) { | ||
135 | printk(KERN_INFO "PCI: VIA PCI bridge detected." | ||
136 | "Disabling DAC.\n"); | ||
137 | forbid_dac = 1; | ||
138 | } | ||
139 | } | ||
140 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac); | ||
141 | #endif | ||