diff options
Diffstat (limited to 'arch/x86/kernel/pci-dma.c')
-rw-r--r-- | arch/x86/kernel/pci-dma.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index bed05e2e5890..a234e63c2656 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -124,24 +124,24 @@ static void __init dma32_free_bootmem(void) | |||
124 | 124 | ||
125 | void __init pci_iommu_alloc(void) | 125 | void __init pci_iommu_alloc(void) |
126 | { | 126 | { |
127 | /* swiotlb is forced by the boot option */ | ||
128 | int use_swiotlb = swiotlb; | ||
127 | #ifdef CONFIG_X86_64 | 129 | #ifdef CONFIG_X86_64 |
128 | /* free the range so iommu could get some range less than 4G */ | 130 | /* free the range so iommu could get some range less than 4G */ |
129 | dma32_free_bootmem(); | 131 | dma32_free_bootmem(); |
130 | #endif | 132 | #endif |
133 | pci_swiotlb_init(); | ||
134 | if (use_swiotlb) | ||
135 | return; | ||
131 | 136 | ||
132 | /* | ||
133 | * The order of these functions is important for | ||
134 | * fall-back/fail-over reasons | ||
135 | */ | ||
136 | gart_iommu_hole_init(); | 137 | gart_iommu_hole_init(); |
137 | 138 | ||
138 | detect_calgary(); | 139 | detect_calgary(); |
139 | 140 | ||
140 | detect_intel_iommu(); | 141 | detect_intel_iommu(); |
141 | 142 | ||
143 | /* needs to be called after gart_iommu_hole_init */ | ||
142 | amd_iommu_detect(); | 144 | amd_iommu_detect(); |
143 | |||
144 | pci_swiotlb_init(); | ||
145 | } | 145 | } |
146 | 146 | ||
147 | void *dma_generic_alloc_coherent(struct device *dev, size_t size, | 147 | void *dma_generic_alloc_coherent(struct device *dev, size_t size, |
@@ -291,10 +291,15 @@ static int __init pci_iommu_init(void) | |||
291 | #ifdef CONFIG_PCI | 291 | #ifdef CONFIG_PCI |
292 | dma_debug_add_bus(&pci_bus_type); | 292 | dma_debug_add_bus(&pci_bus_type); |
293 | #endif | 293 | #endif |
294 | |||
295 | x86_init.iommu.iommu_init(); | 294 | x86_init.iommu.iommu_init(); |
296 | 295 | ||
297 | no_iommu_init(); | 296 | if (swiotlb) { |
297 | printk(KERN_INFO "PCI-DMA: " | ||
298 | "Using software bounce buffering for IO (SWIOTLB)\n"); | ||
299 | swiotlb_print_info(); | ||
300 | } else | ||
301 | swiotlb_free(); | ||
302 | |||
298 | return 0; | 303 | return 0; |
299 | } | 304 | } |
300 | /* Must execute after PCI subsystem */ | 305 | /* Must execute after PCI subsystem */ |