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 | |
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')
-rw-r--r-- | arch/x86/kernel/pci-dma.c | 18 | ||||
-rw-r--r-- | arch/x86/kernel/pci-dma_32.c | 13 | ||||
-rw-r--r-- | arch/x86/kernel/pci-dma_64.c | 15 |
3 files changed, 18 insertions, 28 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 | ||
diff --git a/arch/x86/kernel/pci-dma_32.c b/arch/x86/kernel/pci-dma_32.c index 9e8297657c32..6543bb30b65d 100644 --- a/arch/x86/kernel/pci-dma_32.c +++ b/arch/x86/kernel/pci-dma_32.c | |||
@@ -157,9 +157,6 @@ EXPORT_SYMBOL(dma_mark_declared_memory_occupied); | |||
157 | #ifdef CONFIG_PCI | 157 | #ifdef CONFIG_PCI |
158 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | 158 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ |
159 | 159 | ||
160 | int forbid_dac; | ||
161 | EXPORT_SYMBOL(forbid_dac); | ||
162 | |||
163 | int | 160 | int |
164 | dma_supported(struct device *dev, u64 mask) | 161 | dma_supported(struct device *dev, u64 mask) |
165 | { | 162 | { |
@@ -182,16 +179,6 @@ dma_supported(struct device *dev, u64 mask) | |||
182 | } | 179 | } |
183 | EXPORT_SYMBOL(dma_supported); | 180 | EXPORT_SYMBOL(dma_supported); |
184 | 181 | ||
185 | |||
186 | static __devinit void via_no_dac(struct pci_dev *dev) | ||
187 | { | ||
188 | if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) { | ||
189 | printk(KERN_INFO "PCI: VIA PCI bridge detected. Disabling DAC.\n"); | ||
190 | forbid_dac = 1; | ||
191 | } | ||
192 | } | ||
193 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac); | ||
194 | |||
195 | static int check_iommu(char *s) | 182 | static int check_iommu(char *s) |
196 | { | 183 | { |
197 | if (!strcmp(s, "usedac")) { | 184 | if (!strcmp(s, "usedac")) { |
diff --git a/arch/x86/kernel/pci-dma_64.c b/arch/x86/kernel/pci-dma_64.c index 6b204cc42890..7820675a688a 100644 --- a/arch/x86/kernel/pci-dma_64.c +++ b/arch/x86/kernel/pci-dma_64.c | |||
@@ -161,8 +161,6 @@ void dma_free_coherent(struct device *dev, size_t size, | |||
161 | } | 161 | } |
162 | EXPORT_SYMBOL(dma_free_coherent); | 162 | EXPORT_SYMBOL(dma_free_coherent); |
163 | 163 | ||
164 | static int forbid_dac __read_mostly; | ||
165 | |||
166 | int dma_supported(struct device *dev, u64 mask) | 164 | int dma_supported(struct device *dev, u64 mask) |
167 | { | 165 | { |
168 | #ifdef CONFIG_PCI | 166 | #ifdef CONFIG_PCI |
@@ -270,16 +268,3 @@ static __init int iommu_setup(char *p) | |||
270 | return 0; | 268 | return 0; |
271 | } | 269 | } |
272 | early_param("iommu", iommu_setup); | 270 | early_param("iommu", iommu_setup); |
273 | |||
274 | #ifdef CONFIG_PCI | ||
275 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | ||
276 | |||
277 | static __devinit void via_no_dac(struct pci_dev *dev) | ||
278 | { | ||
279 | if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) { | ||
280 | printk(KERN_INFO "PCI: VIA PCI bridge detected. Disabling DAC.\n"); | ||
281 | forbid_dac = 1; | ||
282 | } | ||
283 | } | ||
284 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac); | ||
285 | #endif | ||