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