]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/x86/kernel/pci-dma.c
Merge branch 'linus' into x86/gart
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / pci-dma.c
1 #include <linux/dma-mapping.h>
2 #include <linux/dmar.h>
3 #include <linux/bootmem.h>
4 #include <linux/pci.h>
5
6 #include <asm/proto.h>
7 #include <asm/dma.h>
8 #include <asm/gart.h>
9 #include <asm/calgary.h>
10
11 int forbid_dac __read_mostly;
12 EXPORT_SYMBOL(forbid_dac);
13
14 const struct dma_mapping_ops *dma_ops;
15 EXPORT_SYMBOL(dma_ops);
16
17 static int iommu_sac_force __read_mostly;
18
19 #ifdef CONFIG_IOMMU_DEBUG
20 int panic_on_overflow __read_mostly = 1;
21 int force_iommu __read_mostly = 1;
22 #else
23 int panic_on_overflow __read_mostly = 0;
24 int force_iommu __read_mostly = 0;
25 #endif
26
27 int iommu_merge __read_mostly = 0;
28
29 int no_iommu __read_mostly;
30 /* Set this to 1 if there is a HW IOMMU in the system */
31 int 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. */
35 int iommu_bio_merge __read_mostly = 0;
36 EXPORT_SYMBOL(iommu_bio_merge);
37
38 dma_addr_t bad_dma_address __read_mostly = 0;
39 EXPORT_SYMBOL(bad_dma_address);
40
41 /* 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. */
44 struct 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
50 int 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 }
59 EXPORT_SYMBOL(dma_set_mask);
60
61 #ifdef CONFIG_X86_64
62 static __initdata void *dma32_bootmem_ptr;
63 static unsigned long dma32_bootmem_size __initdata = (128ULL<<20);
64
65 static 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 }
72 early_param("dma32_size", parse_dma32_size_opt);
73
74 void __init dma32_reserve_bootmem(void)
75 {
76         unsigned long size, align;
77         if (end_pfn <= MAX_DMA32_PFN)
78                 return;
79
80         /*
81          * check aperture_64.c allocate_aperture() for reason about
82          * using 512M as goal
83          */
84         align = 64ULL<<20;
85         size = round_up(dma32_bootmem_size, align);
86         dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align,
87                                  512ULL<<20);
88         if (dma32_bootmem_ptr)
89                 dma32_bootmem_size = size;
90         else
91                 dma32_bootmem_size = 0;
92 }
93 static void __init dma32_free_bootmem(void)
94 {
95
96         if (end_pfn <= MAX_DMA32_PFN)
97                 return;
98
99         if (!dma32_bootmem_ptr)
100                 return;
101
102         free_bootmem(__pa(dma32_bootmem_ptr), dma32_bootmem_size);
103
104         dma32_bootmem_ptr = NULL;
105         dma32_bootmem_size = 0;
106 }
107
108 void __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
132 /*
133  * See <Documentation/x86_64/boot-options.txt> for the iommu kernel parameter
134  * documentation.
135  */
136 static __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 }
199 early_param("iommu", iommu_setup);
200
201 #ifdef CONFIG_X86_32
202 int 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 }
246 EXPORT_SYMBOL(dma_declare_coherent_memory);
247
248 void 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 }
259 EXPORT_SYMBOL(dma_release_declared_memory);
260
261 void *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 }
279 EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
280
281 static 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
301 static 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)
317 #endif /* CONFIG_X86_32 */
318
319 int 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 }
358 EXPORT_SYMBOL(dma_supported);
359
360 /* Allocate DMA memory on node near device */
361 noinline struct page *
362 dma_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  */
374 void *
375 dma_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                 gfp |= GFP_DMA;
392         }
393         dma_mask = dev->coherent_dma_mask;
394         if (dma_mask == 0)
395                 dma_mask = (gfp & GFP_DMA) ? DMA_24BIT_MASK : DMA_32BIT_MASK;
396
397         /* Device not DMA able */
398         if (dev->dma_mask == NULL)
399                 return NULL;
400
401         /* Don't invoke OOM killer */
402         gfp |= __GFP_NORETRY;
403
404 #ifdef CONFIG_X86_64
405         /* Why <=? Even when the mask is smaller than 4GB it is often
406            larger than 16MB and in this case we have a chance of
407            finding fitting memory in the next higher zone first. If
408            not retry with true GFP_DMA. -AK */
409         if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA))
410                 gfp |= GFP_DMA32;
411 #endif
412
413  again:
414         page = dma_alloc_pages(dev, gfp, get_order(size));
415         if (page == NULL)
416                 return NULL;
417
418         {
419                 int high, mmu;
420                 bus = page_to_phys(page);
421                 memory = page_address(page);
422                 high = (bus + size) >= dma_mask;
423                 mmu = high;
424                 if (force_iommu && !(gfp & GFP_DMA))
425                         mmu = 1;
426                 else if (high) {
427                         free_pages((unsigned long)memory,
428                                    get_order(size));
429
430                         /* Don't use the 16MB ZONE_DMA unless absolutely
431                            needed. It's better to use remapping first. */
432                         if (dma_mask < DMA_32BIT_MASK && !(gfp & GFP_DMA)) {
433                                 gfp = (gfp & ~GFP_DMA32) | GFP_DMA;
434                                 goto again;
435                         }
436
437                         /* Let low level make its own zone decisions */
438                         gfp &= ~(GFP_DMA32|GFP_DMA);
439
440                         if (dma_ops->alloc_coherent)
441                                 return dma_ops->alloc_coherent(dev, size,
442                                                            dma_handle, gfp);
443                         return NULL;
444                 }
445
446                 memset(memory, 0, size);
447                 if (!mmu) {
448                         *dma_handle = bus;
449                         return memory;
450                 }
451         }
452
453         if (dma_ops->alloc_coherent) {
454                 free_pages((unsigned long)memory, get_order(size));
455                 gfp &= ~(GFP_DMA|GFP_DMA32);
456                 return dma_ops->alloc_coherent(dev, size, dma_handle, gfp);
457         }
458
459         if (dma_ops->map_simple) {
460                 *dma_handle = dma_ops->map_simple(dev, virt_to_phys(memory),
461                                               size,
462                                               PCI_DMA_BIDIRECTIONAL);
463                 if (*dma_handle != bad_dma_address)
464                         return memory;
465         }
466
467         if (panic_on_overflow)
468                 panic("dma_alloc_coherent: IOMMU overflow by %lu bytes\n",
469                       (unsigned long)size);
470         free_pages((unsigned long)memory, get_order(size));
471         return NULL;
472 }
473 EXPORT_SYMBOL(dma_alloc_coherent);
474
475 /*
476  * Unmap coherent memory.
477  * The caller must ensure that the device has finished accessing the mapping.
478  */
479 void dma_free_coherent(struct device *dev, size_t size,
480                          void *vaddr, dma_addr_t bus)
481 {
482         int order = get_order(size);
483         WARN_ON(irqs_disabled());       /* for portability */
484         if (dma_release_coherent(dev, order, vaddr))
485                 return;
486         if (dma_ops->unmap_single)
487                 dma_ops->unmap_single(dev, bus, size, 0);
488         free_pages((unsigned long)vaddr, order);
489 }
490 EXPORT_SYMBOL(dma_free_coherent);
491
492 static int __init pci_iommu_init(void)
493 {
494 #ifdef CONFIG_CALGARY_IOMMU
495         calgary_iommu_init();
496 #endif
497
498         intel_iommu_init();
499
500 #ifdef CONFIG_GART_IOMMU
501         gart_iommu_init();
502 #endif
503
504         no_iommu_init();
505         return 0;
506 }
507
508 void pci_iommu_shutdown(void)
509 {
510         gart_iommu_shutdown();
511 }
512 /* Must execute after PCI subsystem */
513 fs_initcall(pci_iommu_init);
514
515 #ifdef CONFIG_PCI
516 /* Many VIA bridges seem to corrupt data for DAC. Disable it here */
517
518 static __devinit void via_no_dac(struct pci_dev *dev)
519 {
520         if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) {
521                 printk(KERN_INFO "PCI: VIA PCI bridge detected."
522                                  "Disabling DAC.\n");
523                 forbid_dac = 1;
524         }
525 }
526 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac);
527 #endif