diff options
Diffstat (limited to 'arch/x86/kernel/pci-dma.c')
| -rw-r--r-- | arch/x86/kernel/pci-dma.c | 39 | 
1 files changed, 13 insertions, 26 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index a6e804d16c3..afcc58b69c7 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -11,10 +11,11 @@  #include <asm/gart.h>  #include <asm/calgary.h>  #include <asm/amd_iommu.h> +#include <asm/x86_init.h>  static int forbid_dac __read_mostly; -struct dma_map_ops *dma_ops; +struct dma_map_ops *dma_ops = &nommu_dma_ops;  EXPORT_SYMBOL(dma_ops);  static int iommu_sac_force __read_mostly; @@ -42,9 +43,6 @@ int iommu_detected __read_mostly = 0;   */  int iommu_pass_through __read_mostly; -dma_addr_t bad_dma_address __read_mostly = 0; -EXPORT_SYMBOL(bad_dma_address); -  /* Dummy device used for NULL arguments (normally ISA). */  struct device x86_dma_fallback_dev = {  	.init_name = "fallback device", @@ -126,20 +124,17 @@ void __init pci_iommu_alloc(void)  	/* free the range so iommu could get some range less than 4G */  	dma32_free_bootmem();  #endif +	if (pci_swiotlb_init()) +		return; -	/* -	 * The order of these functions is important for -	 * fall-back/fail-over reasons -	 */  	gart_iommu_hole_init();  	detect_calgary();  	detect_intel_iommu(); +	/* needs to be called after gart_iommu_hole_init */  	amd_iommu_detect(); - -	pci_swiotlb_init();  }  void *dma_generic_alloc_coherent(struct device *dev, size_t size, @@ -214,7 +209,7 @@ static __init int iommu_setup(char *p)  		if (!strncmp(p, "allowdac", 8))  			forbid_dac = 0;  		if (!strncmp(p, "nodac", 5)) -			forbid_dac = -1; +			forbid_dac = 1;  		if (!strncmp(p, "usedac", 6)) {  			forbid_dac = -1;  			return 1; @@ -289,25 +284,17 @@ static int __init pci_iommu_init(void)  #ifdef CONFIG_PCI  	dma_debug_add_bus(&pci_bus_type);  #endif +	x86_init.iommu.iommu_init(); -	calgary_iommu_init(); - -	intel_iommu_init(); +	if (swiotlb) { +		printk(KERN_INFO "PCI-DMA: " +		       "Using software bounce buffering for IO (SWIOTLB)\n"); +		swiotlb_print_info(); +	} else +		swiotlb_free(); -	amd_iommu_init(); - -	gart_iommu_init(); - -	no_iommu_init();  	return 0;  } - -void pci_iommu_shutdown(void) -{ -	gart_iommu_shutdown(); - -	amd_iommu_shutdown(); -}  /* Must execute after PCI subsystem */  rootfs_initcall(pci_iommu_init);  |