blob: 81862d0c7a9a9fa1ee1d5ce0f818b4b4bf361268 [file] [log] [blame]
Glauber Costa459121c92008-04-08 13:20:43 -03001#include <linux/dma-mapping.h>
Glauber Costacb5867a2008-04-08 13:20:51 -03002#include <linux/dmar.h>
Glauber Costa116890d2008-04-08 13:20:54 -03003#include <linux/bootmem.h>
Glauber Costabca5c092008-04-08 13:20:53 -03004#include <linux/pci.h>
Glauber Costacb5867a2008-04-08 13:20:51 -03005
Glauber Costa116890d2008-04-08 13:20:54 -03006#include <asm/proto.h>
7#include <asm/dma.h>
Glauber Costacb5867a2008-04-08 13:20:51 -03008#include <asm/gart.h>
9#include <asm/calgary.h>
Glauber Costa459121c92008-04-08 13:20:43 -030010
Glauber Costabca5c092008-04-08 13:20:53 -030011int forbid_dac __read_mostly;
12EXPORT_SYMBOL(forbid_dac);
13
Glauber Costa85c246e2008-04-08 13:20:50 -030014const struct dma_mapping_ops *dma_ops;
15EXPORT_SYMBOL(dma_ops);
16
Dmitri Vorobievb4cdc432008-04-28 03:15:58 +040017static int iommu_sac_force __read_mostly;
Glauber Costa8e0c3792008-04-08 13:20:55 -030018
Glauber Costaf9c258d2008-04-08 13:20:52 -030019#ifdef CONFIG_IOMMU_DEBUG
20int panic_on_overflow __read_mostly = 1;
21int force_iommu __read_mostly = 1;
22#else
23int panic_on_overflow __read_mostly = 0;
24int force_iommu __read_mostly = 0;
25#endif
26
Glauber Costafae9a0d2008-04-08 13:20:56 -030027int iommu_merge __read_mostly = 0;
28
29int no_iommu __read_mostly;
30/* Set this to 1 if there is a HW IOMMU in the system */
31int iommu_detected __read_mostly = 0;
32
33/* This tells the BIO block layer to assume merging. Default to off
34 because we cannot guarantee merging later. */
35int iommu_bio_merge __read_mostly = 0;
36EXPORT_SYMBOL(iommu_bio_merge);
37
Glauber Costacac67872008-04-08 13:21:00 -030038dma_addr_t bad_dma_address __read_mostly = 0;
39EXPORT_SYMBOL(bad_dma_address);
Glauber Costafae9a0d2008-04-08 13:20:56 -030040
Glauber Costa098cb7f2008-04-09 13:18:10 -030041/* Dummy device used for NULL arguments (normally ISA). Better would
42 be probably a smaller DMA mask, but this is bug-to-bug compatible
43 to older i386. */
44struct device fallback_dev = {
45 .bus_id = "fallback device",
46 .coherent_dma_mask = DMA_32BIT_MASK,
47 .dma_mask = &fallback_dev.coherent_dma_mask,
48};
49
Glauber Costa459121c92008-04-08 13:20:43 -030050int dma_set_mask(struct device *dev, u64 mask)
51{
52 if (!dev->dma_mask || !dma_supported(dev, mask))
53 return -EIO;
54
55 *dev->dma_mask = mask;
56
57 return 0;
58}
59EXPORT_SYMBOL(dma_set_mask);
60
Glauber Costa116890d2008-04-08 13:20:54 -030061#ifdef CONFIG_X86_64
62static __initdata void *dma32_bootmem_ptr;
63static unsigned long dma32_bootmem_size __initdata = (128ULL<<20);
64
65static int __init parse_dma32_size_opt(char *p)
66{
67 if (!p)
68 return -EINVAL;
69 dma32_bootmem_size = memparse(p, &p);
70 return 0;
71}
72early_param("dma32_size", parse_dma32_size_opt);
73
74void __init dma32_reserve_bootmem(void)
75{
76 unsigned long size, align;
77 if (end_pfn <= MAX_DMA32_PFN)
78 return;
79
Yinghai Lu7677b2e2008-04-14 20:40:37 -070080 /*
81 * check aperture_64.c allocate_aperture() for reason about
82 * using 512M as goal
83 */
Glauber Costa116890d2008-04-08 13:20:54 -030084 align = 64ULL<<20;
85 size = round_up(dma32_bootmem_size, align);
86 dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align,
Yinghai Lu7677b2e2008-04-14 20:40:37 -070087 512ULL<<20);
Glauber Costa116890d2008-04-08 13:20:54 -030088 if (dma32_bootmem_ptr)
89 dma32_bootmem_size = size;
90 else
91 dma32_bootmem_size = 0;
92}
93static void __init dma32_free_bootmem(void)
94{
Glauber Costa116890d2008-04-08 13:20:54 -030095
96 if (end_pfn <= MAX_DMA32_PFN)
97 return;
98
99 if (!dma32_bootmem_ptr)
100 return;
101
Yinghai Lu330fce22008-04-19 01:31:45 -0700102 free_bootmem(__pa(dma32_bootmem_ptr), dma32_bootmem_size);
Glauber Costa116890d2008-04-08 13:20:54 -0300103
104 dma32_bootmem_ptr = NULL;
105 dma32_bootmem_size = 0;
106}
107
108void __init pci_iommu_alloc(void)
109{
110 /* free the range so iommu could get some range less than 4G */
111 dma32_free_bootmem();
112 /*
113 * The order of these functions is important for
114 * fall-back/fail-over reasons
115 */
116#ifdef CONFIG_GART_IOMMU
117 gart_iommu_hole_init();
118#endif
119
120#ifdef CONFIG_CALGARY_IOMMU
121 detect_calgary();
122#endif
123
124 detect_intel_iommu();
125
126#ifdef CONFIG_SWIOTLB
127 pci_swiotlb_init();
128#endif
129}
130#endif
131
Glauber Costafae9a0d2008-04-08 13:20:56 -0300132/*
133 * See <Documentation/x86_64/boot-options.txt> for the iommu kernel parameter
134 * documentation.
135 */
136static __init int iommu_setup(char *p)
137{
138 iommu_merge = 1;
139
140 if (!p)
141 return -EINVAL;
142
143 while (*p) {
144 if (!strncmp(p, "off", 3))
145 no_iommu = 1;
146 /* gart_parse_options has more force support */
147 if (!strncmp(p, "force", 5))
148 force_iommu = 1;
149 if (!strncmp(p, "noforce", 7)) {
150 iommu_merge = 0;
151 force_iommu = 0;
152 }
153
154 if (!strncmp(p, "biomerge", 8)) {
155 iommu_bio_merge = 4096;
156 iommu_merge = 1;
157 force_iommu = 1;
158 }
159 if (!strncmp(p, "panic", 5))
160 panic_on_overflow = 1;
161 if (!strncmp(p, "nopanic", 7))
162 panic_on_overflow = 0;
163 if (!strncmp(p, "merge", 5)) {
164 iommu_merge = 1;
165 force_iommu = 1;
166 }
167 if (!strncmp(p, "nomerge", 7))
168 iommu_merge = 0;
169 if (!strncmp(p, "forcesac", 8))
170 iommu_sac_force = 1;
171 if (!strncmp(p, "allowdac", 8))
172 forbid_dac = 0;
173 if (!strncmp(p, "nodac", 5))
174 forbid_dac = -1;
175 if (!strncmp(p, "usedac", 6)) {
176 forbid_dac = -1;
177 return 1;
178 }
179#ifdef CONFIG_SWIOTLB
180 if (!strncmp(p, "soft", 4))
181 swiotlb = 1;
182#endif
183
184#ifdef CONFIG_GART_IOMMU
185 gart_parse_options(p);
186#endif
187
188#ifdef CONFIG_CALGARY_IOMMU
189 if (!strncmp(p, "calgary", 7))
190 use_calgary = 1;
191#endif /* CONFIG_CALGARY_IOMMU */
192
193 p += strcspn(p, ",");
194 if (*p == ',')
195 ++p;
196 }
197 return 0;
198}
199early_param("iommu", iommu_setup);
200
Glauber Costa8e8edc62008-04-08 13:20:57 -0300201#ifdef CONFIG_X86_32
202int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
203 dma_addr_t device_addr, size_t size, int flags)
204{
205 void __iomem *mem_base = NULL;
206 int pages = size >> PAGE_SHIFT;
207 int bitmap_size = BITS_TO_LONGS(pages) * sizeof(long);
208
209 if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0)
210 goto out;
211 if (!size)
212 goto out;
213 if (dev->dma_mem)
214 goto out;
215
216 /* FIXME: this routine just ignores DMA_MEMORY_INCLUDES_CHILDREN */
217
218 mem_base = ioremap(bus_addr, size);
219 if (!mem_base)
220 goto out;
221
222 dev->dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL);
223 if (!dev->dma_mem)
224 goto out;
225 dev->dma_mem->bitmap = kzalloc(bitmap_size, GFP_KERNEL);
226 if (!dev->dma_mem->bitmap)
227 goto free1_out;
228
229 dev->dma_mem->virt_base = mem_base;
230 dev->dma_mem->device_base = device_addr;
231 dev->dma_mem->size = pages;
232 dev->dma_mem->flags = flags;
233
234 if (flags & DMA_MEMORY_MAP)
235 return DMA_MEMORY_MAP;
236
237 return DMA_MEMORY_IO;
238
239 free1_out:
240 kfree(dev->dma_mem);
241 out:
242 if (mem_base)
243 iounmap(mem_base);
244 return 0;
245}
246EXPORT_SYMBOL(dma_declare_coherent_memory);
247
248void dma_release_declared_memory(struct device *dev)
249{
250 struct dma_coherent_mem *mem = dev->dma_mem;
251
252 if (!mem)
253 return;
254 dev->dma_mem = NULL;
255 iounmap(mem->virt_base);
256 kfree(mem->bitmap);
257 kfree(mem);
258}
259EXPORT_SYMBOL(dma_release_declared_memory);
260
261void *dma_mark_declared_memory_occupied(struct device *dev,
262 dma_addr_t device_addr, size_t size)
263{
264 struct dma_coherent_mem *mem = dev->dma_mem;
265 int pos, err;
266 int pages = (size + (device_addr & ~PAGE_MASK) + PAGE_SIZE - 1);
267
268 pages >>= PAGE_SHIFT;
269
270 if (!mem)
271 return ERR_PTR(-EINVAL);
272
273 pos = (device_addr - mem->device_base) >> PAGE_SHIFT;
274 err = bitmap_allocate_region(mem->bitmap, pos, get_order(pages));
275 if (err != 0)
276 return ERR_PTR(err);
277 return mem->virt_base + (pos << PAGE_SHIFT);
278}
279EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
Glauber Costa098cb7f2008-04-09 13:18:10 -0300280
281static int dma_alloc_from_coherent_mem(struct device *dev, ssize_t size,
282 dma_addr_t *dma_handle, void **ret)
283{
284 struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
285 int order = get_order(size);
286
287 if (mem) {
288 int page = bitmap_find_free_region(mem->bitmap, mem->size,
289 order);
290 if (page >= 0) {
291 *dma_handle = mem->device_base + (page << PAGE_SHIFT);
292 *ret = mem->virt_base + (page << PAGE_SHIFT);
293 memset(*ret, 0, size);
294 }
295 if (mem->flags & DMA_MEMORY_EXCLUSIVE)
296 *ret = NULL;
297 }
298 return (mem != NULL);
299}
300
301static int dma_release_coherent(struct device *dev, int order, void *vaddr)
302{
303 struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
304
305 if (mem && vaddr >= mem->virt_base && vaddr <
306 (mem->virt_base + (mem->size << PAGE_SHIFT))) {
307 int page = (vaddr - mem->virt_base) >> PAGE_SHIFT;
308
309 bitmap_release_region(mem->bitmap, page, order);
310 return 1;
311 }
312 return 0;
313}
314#else
315#define dma_alloc_from_coherent_mem(dev, size, handle, ret) (0)
316#define dma_release_coherent(dev, order, vaddr) (0)
Glauber Costa8e8edc62008-04-08 13:20:57 -0300317#endif /* CONFIG_X86_32 */
318
Glauber Costa8e0c3792008-04-08 13:20:55 -0300319int dma_supported(struct device *dev, u64 mask)
320{
321#ifdef CONFIG_PCI
322 if (mask > 0xffffffff && forbid_dac > 0) {
323 printk(KERN_INFO "PCI: Disallowing DAC for device %s\n",
324 dev->bus_id);
325 return 0;
326 }
327#endif
328
329 if (dma_ops->dma_supported)
330 return dma_ops->dma_supported(dev, mask);
331
332 /* Copied from i386. Doesn't make much sense, because it will
333 only work for pci_alloc_coherent.
334 The caller just has to use GFP_DMA in this case. */
335 if (mask < DMA_24BIT_MASK)
336 return 0;
337
338 /* Tell the device to use SAC when IOMMU force is on. This
339 allows the driver to use cheaper accesses in some cases.
340
341 Problem with this is that if we overflow the IOMMU area and
342 return DAC as fallback address the device may not handle it
343 correctly.
344
345 As a special case some controllers have a 39bit address
346 mode that is as efficient as 32bit (aic79xx). Don't force
347 SAC for these. Assume all masks <= 40 bits are of this
348 type. Normally this doesn't make any difference, but gives
349 more gentle handling of IOMMU overflow. */
350 if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) {
351 printk(KERN_INFO "%s: Force SAC with mask %Lx\n",
352 dev->bus_id, mask);
353 return 0;
354 }
355
356 return 1;
357}
358EXPORT_SYMBOL(dma_supported);
359
Glauber Costa098cb7f2008-04-09 13:18:10 -0300360/* Allocate DMA memory on node near device */
361noinline struct page *
362dma_alloc_pages(struct device *dev, gfp_t gfp, unsigned order)
363{
364 int node;
365
366 node = dev_to_node(dev);
367
368 return alloc_pages_node(node, gfp, order);
369}
370
371/*
372 * Allocate memory for a coherent mapping.
373 */
374void *
375dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
376 gfp_t gfp)
377{
378 void *memory = NULL;
379 struct page *page;
380 unsigned long dma_mask = 0;
381 dma_addr_t bus;
382
383 /* ignore region specifiers */
384 gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
385
386 if (dma_alloc_from_coherent_mem(dev, size, dma_handle, &memory))
387 return memory;
388
389 if (!dev)
390 dev = &fallback_dev;
391 dma_mask = dev->coherent_dma_mask;
392 if (dma_mask == 0)
393 dma_mask = DMA_32BIT_MASK;
394
395 /* Device not DMA able */
396 if (dev->dma_mask == NULL)
397 return NULL;
398
399 /* Don't invoke OOM killer */
400 gfp |= __GFP_NORETRY;
401
402#ifdef CONFIG_X86_64
403 /* Why <=? Even when the mask is smaller than 4GB it is often
404 larger than 16MB and in this case we have a chance of
405 finding fitting memory in the next higher zone first. If
406 not retry with true GFP_DMA. -AK */
407 if (dma_mask <= DMA_32BIT_MASK)
408 gfp |= GFP_DMA32;
409#endif
410
411 again:
412 page = dma_alloc_pages(dev, gfp, get_order(size));
413 if (page == NULL)
414 return NULL;
415
416 {
417 int high, mmu;
418 bus = page_to_phys(page);
419 memory = page_address(page);
420 high = (bus + size) >= dma_mask;
421 mmu = high;
422 if (force_iommu && !(gfp & GFP_DMA))
423 mmu = 1;
424 else if (high) {
425 free_pages((unsigned long)memory,
426 get_order(size));
427
428 /* Don't use the 16MB ZONE_DMA unless absolutely
429 needed. It's better to use remapping first. */
430 if (dma_mask < DMA_32BIT_MASK && !(gfp & GFP_DMA)) {
431 gfp = (gfp & ~GFP_DMA32) | GFP_DMA;
432 goto again;
433 }
434
435 /* Let low level make its own zone decisions */
436 gfp &= ~(GFP_DMA32|GFP_DMA);
437
438 if (dma_ops->alloc_coherent)
439 return dma_ops->alloc_coherent(dev, size,
440 dma_handle, gfp);
441 return NULL;
442 }
443
444 memset(memory, 0, size);
445 if (!mmu) {
446 *dma_handle = bus;
447 return memory;
448 }
449 }
450
451 if (dma_ops->alloc_coherent) {
452 free_pages((unsigned long)memory, get_order(size));
453 gfp &= ~(GFP_DMA|GFP_DMA32);
454 return dma_ops->alloc_coherent(dev, size, dma_handle, gfp);
455 }
456
457 if (dma_ops->map_simple) {
458 *dma_handle = dma_ops->map_simple(dev, virt_to_phys(memory),
459 size,
460 PCI_DMA_BIDIRECTIONAL);
461 if (*dma_handle != bad_dma_address)
462 return memory;
463 }
464
465 if (panic_on_overflow)
466 panic("dma_alloc_coherent: IOMMU overflow by %lu bytes\n",
467 (unsigned long)size);
468 free_pages((unsigned long)memory, get_order(size));
469 return NULL;
470}
471EXPORT_SYMBOL(dma_alloc_coherent);
472
473/*
474 * Unmap coherent memory.
475 * The caller must ensure that the device has finished accessing the mapping.
476 */
477void dma_free_coherent(struct device *dev, size_t size,
478 void *vaddr, dma_addr_t bus)
479{
480 int order = get_order(size);
481 WARN_ON(irqs_disabled()); /* for portability */
482 if (dma_release_coherent(dev, order, vaddr))
483 return;
484 if (dma_ops->unmap_single)
485 dma_ops->unmap_single(dev, bus, size, 0);
486 free_pages((unsigned long)vaddr, order);
487}
488EXPORT_SYMBOL(dma_free_coherent);
Glauber Costa8e0c3792008-04-08 13:20:55 -0300489
Glauber Costacb5867a2008-04-08 13:20:51 -0300490static int __init pci_iommu_init(void)
491{
492#ifdef CONFIG_CALGARY_IOMMU
493 calgary_iommu_init();
494#endif
Glauber Costa459121c92008-04-08 13:20:43 -0300495
Glauber Costacb5867a2008-04-08 13:20:51 -0300496 intel_iommu_init();
497
498#ifdef CONFIG_GART_IOMMU
499 gart_iommu_init();
500#endif
501
502 no_iommu_init();
503 return 0;
504}
505
506void pci_iommu_shutdown(void)
507{
508 gart_iommu_shutdown();
509}
510/* Must execute after PCI subsystem */
511fs_initcall(pci_iommu_init);
Glauber Costabca5c092008-04-08 13:20:53 -0300512
513#ifdef CONFIG_PCI
514/* Many VIA bridges seem to corrupt data for DAC. Disable it here */
515
516static __devinit void via_no_dac(struct pci_dev *dev)
517{
518 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) {
519 printk(KERN_INFO "PCI: VIA PCI bridge detected."
520 "Disabling DAC.\n");
521 forbid_dac = 1;
522 }
523}
524DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac);
525#endif