forked from luck/tmp_suning_uos_patched
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>
This commit is contained in:
parent
116890d556
commit
bca5c09663
@ -1,12 +1,16 @@
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/dmar.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/proto.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/gart.h>
|
||||
#include <asm/calgary.h>
|
||||
|
||||
int forbid_dac __read_mostly;
|
||||
EXPORT_SYMBOL(forbid_dac);
|
||||
|
||||
const struct dma_mapping_ops *dma_ops;
|
||||
EXPORT_SYMBOL(dma_ops);
|
||||
|
||||
@ -121,3 +125,17 @@ void pci_iommu_shutdown(void)
|
||||
}
|
||||
/* Must execute after PCI subsystem */
|
||||
fs_initcall(pci_iommu_init);
|
||||
|
||||
#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
|
||||
|
@ -157,9 +157,6 @@ EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
|
||||
#ifdef CONFIG_PCI
|
||||
/* Many VIA bridges seem to corrupt data for DAC. Disable it here */
|
||||
|
||||
int forbid_dac;
|
||||
EXPORT_SYMBOL(forbid_dac);
|
||||
|
||||
int
|
||||
dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
@ -182,16 +179,6 @@ dma_supported(struct device *dev, u64 mask)
|
||||
}
|
||||
EXPORT_SYMBOL(dma_supported);
|
||||
|
||||
|
||||
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);
|
||||
|
||||
static int check_iommu(char *s)
|
||||
{
|
||||
if (!strcmp(s, "usedac")) {
|
||||
|
@ -161,8 +161,6 @@ void dma_free_coherent(struct device *dev, size_t size,
|
||||
}
|
||||
EXPORT_SYMBOL(dma_free_coherent);
|
||||
|
||||
static int forbid_dac __read_mostly;
|
||||
|
||||
int dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
#ifdef CONFIG_PCI
|
||||
@ -270,16 +268,3 @@ static __init int iommu_setup(char *p)
|
||||
return 0;
|
||||
}
|
||||
early_param("iommu", iommu_setup);
|
||||
|
||||
#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
|
||||
|
@ -14,6 +14,7 @@ extern dma_addr_t bad_dma_address;
|
||||
extern int iommu_merge;
|
||||
extern struct device fallback_dev;
|
||||
extern int panic_on_overflow;
|
||||
extern int forbid_dac;
|
||||
|
||||
struct dma_mapping_ops {
|
||||
int (*mapping_error)(dma_addr_t dma_addr);
|
||||
@ -223,6 +224,5 @@ dma_release_declared_memory(struct device *dev);
|
||||
extern void *
|
||||
dma_mark_declared_memory_occupied(struct device *dev,
|
||||
dma_addr_t device_addr, size_t size);
|
||||
extern int forbid_dac;
|
||||
#endif /* CONFIG_X86_32 */
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user