twl4030_charger: increase end-of-charge current
[pandora-kernel.git] / arch / arm / mm / dma-mapping.c
1 /*
2  *  linux/arch/arm/mm/dma-mapping.c
3  *
4  *  Copyright (C) 2000-2004 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  DMA uncached mapping support.
11  */
12 #include <linux/module.h>
13 #include <linux/mm.h>
14 #include <linux/gfp.h>
15 #include <linux/errno.h>
16 #include <linux/list.h>
17 #include <linux/init.h>
18 #include <linux/device.h>
19 #include <linux/dma-mapping.h>
20 #include <linux/dma-contiguous.h>
21 #include <linux/highmem.h>
22 #include <linux/memblock.h>
23 #include <linux/slab.h>
24 #include <linux/iommu.h>
25 #include <linux/io.h>
26 #include <linux/vmalloc.h>
27
28 #include <asm/memory.h>
29 #include <asm/highmem.h>
30 #include <asm/cacheflush.h>
31 #include <asm/tlbflush.h>
32 #include <asm/sizes.h>
33 #include <asm/mach/arch.h>
34 #include <asm/dma-iommu.h>
35 #include <asm/mach/map.h>
36 #include <asm/system.h>
37 #include <asm/dma-contiguous.h>
38
39 #include "mm.h"
40
41 /*
42  * The DMA API is built upon the notion of "buffer ownership".  A buffer
43  * is either exclusively owned by the CPU (and therefore may be accessed
44  * by it) or exclusively owned by the DMA device.  These helper functions
45  * represent the transitions between these two ownership states.
46  *
47  * Note, however, that on later ARMs, this notion does not work due to
48  * speculative prefetches.  We model our approach on the assumption that
49  * the CPU does do speculative prefetches, which means we clean caches
50  * before transfers and delay cache invalidation until transfer completion.
51  *
52  */
53 static void __dma_page_cpu_to_dev(struct page *, unsigned long,
54                 size_t, enum dma_data_direction);
55 static void __dma_page_dev_to_cpu(struct page *, unsigned long,
56                 size_t, enum dma_data_direction);
57
58 /**
59  * arm_dma_map_page - map a portion of a page for streaming DMA
60  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
61  * @page: page that buffer resides in
62  * @offset: offset into page for start of buffer
63  * @size: size of buffer to map
64  * @dir: DMA transfer direction
65  *
66  * Ensure that any data held in the cache is appropriately discarded
67  * or written back.
68  *
69  * The device owns this memory once this call has completed.  The CPU
70  * can regain ownership by calling dma_unmap_page().
71  */
72 static dma_addr_t arm_dma_map_page(struct device *dev, struct page *page,
73              unsigned long offset, size_t size, enum dma_data_direction dir,
74              struct dma_attrs *attrs)
75 {
76         if (!arch_is_coherent())
77                 __dma_page_cpu_to_dev(page, offset, size, dir);
78         return pfn_to_dma(dev, page_to_pfn(page)) + offset;
79 }
80
81 /**
82  * arm_dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
83  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
84  * @handle: DMA address of buffer
85  * @size: size of buffer (same as passed to dma_map_page)
86  * @dir: DMA transfer direction (same as passed to dma_map_page)
87  *
88  * Unmap a page streaming mode DMA translation.  The handle and size
89  * must match what was provided in the previous dma_map_page() call.
90  * All other usages are undefined.
91  *
92  * After this call, reads by the CPU to the buffer are guaranteed to see
93  * whatever the device wrote there.
94  */
95 static void arm_dma_unmap_page(struct device *dev, dma_addr_t handle,
96                 size_t size, enum dma_data_direction dir,
97                 struct dma_attrs *attrs)
98 {
99         if (!arch_is_coherent())
100                 __dma_page_dev_to_cpu(pfn_to_page(dma_to_pfn(dev, handle)),
101                                       handle & ~PAGE_MASK, size, dir);
102 }
103
104 static void arm_dma_sync_single_for_cpu(struct device *dev,
105                 dma_addr_t handle, size_t size, enum dma_data_direction dir)
106 {
107         unsigned int offset = handle & (PAGE_SIZE - 1);
108         struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset));
109         if (!arch_is_coherent())
110                 __dma_page_dev_to_cpu(page, offset, size, dir);
111 }
112
113 static void arm_dma_sync_single_for_device(struct device *dev,
114                 dma_addr_t handle, size_t size, enum dma_data_direction dir)
115 {
116         unsigned int offset = handle & (PAGE_SIZE - 1);
117         struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset));
118         if (!arch_is_coherent())
119                 __dma_page_cpu_to_dev(page, offset, size, dir);
120 }
121
122 static int arm_dma_set_mask(struct device *dev, u64 dma_mask);
123
124 struct dma_map_ops arm_dma_ops = {
125         .alloc                  = arm_dma_alloc,
126         .free                   = arm_dma_free,
127         .mmap                   = arm_dma_mmap,
128         .map_page               = arm_dma_map_page,
129         .unmap_page             = arm_dma_unmap_page,
130         .map_sg                 = arm_dma_map_sg,
131         .unmap_sg               = arm_dma_unmap_sg,
132         .sync_single_for_cpu    = arm_dma_sync_single_for_cpu,
133         .sync_single_for_device = arm_dma_sync_single_for_device,
134         .sync_sg_for_cpu        = arm_dma_sync_sg_for_cpu,
135         .sync_sg_for_device     = arm_dma_sync_sg_for_device,
136         .set_dma_mask           = arm_dma_set_mask,
137 };
138 EXPORT_SYMBOL(arm_dma_ops);
139
140 static u64 get_coherent_dma_mask(struct device *dev)
141 {
142         u64 mask = (u64)arm_dma_limit;
143
144         if (dev) {
145                 mask = dev->coherent_dma_mask;
146
147                 /*
148                  * Sanity check the DMA mask - it must be non-zero, and
149                  * must be able to be satisfied by a DMA allocation.
150                  */
151                 if (mask == 0) {
152                         dev_warn(dev, "coherent DMA mask is unset\n");
153                         return 0;
154                 }
155
156                 if ((~mask) & (u64)arm_dma_limit) {
157                         dev_warn(dev, "coherent DMA mask %#llx is smaller "
158                                  "than system GFP_DMA mask %#llx\n",
159                                  mask, (u64)arm_dma_limit);
160                         return 0;
161                 }
162         }
163
164         return mask;
165 }
166
167 static void __dma_clear_buffer(struct page *page, size_t size)
168 {
169         void *ptr;
170         /*
171          * Ensure that the allocated pages are zeroed, and that any data
172          * lurking in the kernel direct-mapped region is invalidated.
173          */
174         ptr = page_address(page);
175         if (ptr) {
176                 memset(ptr, 0, size);
177                 dmac_flush_range(ptr, ptr + size);
178                 outer_flush_range(__pa(ptr), __pa(ptr) + size);
179         }
180 }
181
182 /*
183  * Allocate a DMA buffer for 'dev' of size 'size' using the
184  * specified gfp mask.  Note that 'size' must be page aligned.
185  */
186 static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp)
187 {
188         unsigned long order = get_order(size);
189         struct page *page, *p, *e;
190
191         page = alloc_pages(gfp, order);
192         if (!page)
193                 return NULL;
194
195         /*
196          * Now split the huge page and free the excess pages
197          */
198         split_page(page, order);
199         for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++)
200                 __free_page(p);
201
202         __dma_clear_buffer(page, size);
203
204         return page;
205 }
206
207 /*
208  * Free a DMA buffer.  'size' must be page aligned.
209  */
210 static void __dma_free_buffer(struct page *page, size_t size)
211 {
212         struct page *e = page + (size >> PAGE_SHIFT);
213
214         while (page < e) {
215                 __free_page(page);
216                 page++;
217         }
218 }
219
220 #ifdef CONFIG_MMU
221
222 static void *__alloc_from_contiguous(struct device *dev, size_t size,
223                                      pgprot_t prot, struct page **ret_page);
224
225 static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp,
226                                  pgprot_t prot, struct page **ret_page,
227                                  const void *caller);
228
229 static void *
230 __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot,
231         const void *caller)
232 {
233         struct vm_struct *area;
234         unsigned long addr;
235
236         /*
237          * DMA allocation can be mapped to user space, so lets
238          * set VM_USERMAP flags too.
239          */
240         area = get_vm_area_caller(size, VM_ARM_DMA_CONSISTENT | VM_USERMAP,
241                                   caller);
242         if (!area)
243                 return NULL;
244         addr = (unsigned long)area->addr;
245         area->phys_addr = __pfn_to_phys(page_to_pfn(page));
246
247         if (ioremap_page_range(addr, addr + size, area->phys_addr, prot)) {
248                 vunmap((void *)addr);
249                 return NULL;
250         }
251         return (void *)addr;
252 }
253
254 static void __dma_free_remap(void *cpu_addr, size_t size)
255 {
256         unsigned int flags = VM_ARM_DMA_CONSISTENT | VM_USERMAP;
257         struct vm_struct *area = find_vm_area(cpu_addr);
258         if (!area || (area->flags & flags) != flags) {
259                 WARN(1, "trying to free invalid coherent area: %p\n", cpu_addr);
260                 return;
261         }
262         unmap_kernel_range((unsigned long)cpu_addr, size);
263         vunmap(cpu_addr);
264 }
265
266 struct dma_pool {
267         size_t size;
268         spinlock_t lock;
269         unsigned long *bitmap;
270         unsigned long nr_pages;
271         void *vaddr;
272         struct page *page;
273 };
274
275 static struct dma_pool atomic_pool = {
276         .size = SZ_256K,
277 };
278
279 static int __init early_coherent_pool(char *p)
280 {
281         atomic_pool.size = memparse(p, &p);
282         return 0;
283 }
284 early_param("coherent_pool", early_coherent_pool);
285
286 /*
287  * Initialise the coherent pool for atomic allocations.
288  */
289 static int __init atomic_pool_init(void)
290 {
291         struct dma_pool *pool = &atomic_pool;
292         pgprot_t prot = pgprot_dmacoherent(pgprot_kernel);
293         unsigned long nr_pages = pool->size >> PAGE_SHIFT;
294         unsigned long *bitmap;
295         struct page *page;
296         void *ptr;
297         int bitmap_size = BITS_TO_LONGS(nr_pages) * sizeof(long);
298
299         bitmap = kzalloc(bitmap_size, GFP_KERNEL);
300         if (!bitmap)
301                 goto no_bitmap;
302
303         if (IS_ENABLED(CONFIG_CMA))
304                 ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page);
305         else
306                 ptr = __alloc_remap_buffer(NULL, pool->size, GFP_KERNEL, prot,
307                                            &page, NULL);
308         if (ptr) {
309                 spin_lock_init(&pool->lock);
310                 pool->vaddr = ptr;
311                 pool->page = page;
312                 pool->bitmap = bitmap;
313                 pool->nr_pages = nr_pages;
314                 pr_info("DMA: preallocated %u KiB pool for atomic coherent allocations\n",
315                        (unsigned)pool->size / 1024);
316                 return 0;
317         }
318         kfree(bitmap);
319 no_bitmap:
320         pr_err("DMA: failed to allocate %u KiB pool for atomic coherent allocation\n",
321                (unsigned)pool->size / 1024);
322         return -ENOMEM;
323 }
324 /*
325  * CMA is activated by core_initcall, so we must be called after it.
326  */
327 postcore_initcall(atomic_pool_init);
328
329 struct dma_contig_early_reserve {
330         phys_addr_t base;
331         unsigned long size;
332 };
333
334 static struct dma_contig_early_reserve dma_mmu_remap[MAX_CMA_AREAS] __initdata;
335
336 static int dma_mmu_remap_num __initdata;
337
338 void __init dma_contiguous_early_fixup(phys_addr_t base, unsigned long size)
339 {
340         dma_mmu_remap[dma_mmu_remap_num].base = base;
341         dma_mmu_remap[dma_mmu_remap_num].size = size;
342         dma_mmu_remap_num++;
343 }
344
345 void __init dma_contiguous_remap(void)
346 {
347         int i;
348         for (i = 0; i < dma_mmu_remap_num; i++) {
349                 phys_addr_t start = dma_mmu_remap[i].base;
350                 phys_addr_t end = start + dma_mmu_remap[i].size;
351                 struct map_desc map;
352                 unsigned long addr;
353
354                 if (end > arm_lowmem_limit)
355                         end = arm_lowmem_limit;
356                 if (start >= end)
357                         return;
358
359                 map.pfn = __phys_to_pfn(start);
360                 map.virtual = __phys_to_virt(start);
361                 map.length = end - start;
362                 map.type = MT_MEMORY_DMA_READY;
363
364                 /*
365                  * Clear previous low-memory mapping
366                  */
367                 for (addr = __phys_to_virt(start); addr < __phys_to_virt(end);
368                      addr += PMD_SIZE)
369                         pmd_clear(pmd_off_k(addr));
370
371                 iotable_init(&map, 1);
372         }
373 }
374
375 static int __dma_update_pte(pte_t *pte, pgtable_t token, unsigned long addr,
376                             void *data)
377 {
378         struct page *page = virt_to_page(addr);
379         pgprot_t prot = *(pgprot_t *)data;
380
381         set_pte_ext(pte, mk_pte(page, prot), 0);
382         return 0;
383 }
384
385 static void __dma_remap(struct page *page, size_t size, pgprot_t prot)
386 {
387         unsigned long start = (unsigned long) page_address(page);
388         unsigned end = start + size;
389
390         apply_to_page_range(&init_mm, start, size, __dma_update_pte, &prot);
391         dsb();
392         flush_tlb_kernel_range(start, end);
393 }
394
395 static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp,
396                                  pgprot_t prot, struct page **ret_page,
397                                  const void *caller)
398 {
399         struct page *page;
400         void *ptr;
401         page = __dma_alloc_buffer(dev, size, gfp);
402         if (!page)
403                 return NULL;
404
405         ptr = __dma_alloc_remap(page, size, gfp, prot, caller);
406         if (!ptr) {
407                 __dma_free_buffer(page, size);
408                 return NULL;
409         }
410
411         *ret_page = page;
412         return ptr;
413 }
414
415 static void *__alloc_from_pool(size_t size, struct page **ret_page)
416 {
417         struct dma_pool *pool = &atomic_pool;
418         unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
419         unsigned int pageno;
420         unsigned long flags;
421         void *ptr = NULL;
422         unsigned long align_mask;
423
424         if (!pool->vaddr) {
425                 WARN(1, "coherent pool not initialised!\n");
426                 return NULL;
427         }
428
429         /*
430          * Align the region allocation - allocations from pool are rather
431          * small, so align them to their order in pages, minimum is a page
432          * size. This helps reduce fragmentation of the DMA space.
433          */
434         align_mask = (1 << get_order(size)) - 1;
435
436         spin_lock_irqsave(&pool->lock, flags);
437         pageno = bitmap_find_next_zero_area(pool->bitmap, pool->nr_pages,
438                                             0, count, align_mask);
439         if (pageno < pool->nr_pages) {
440                 bitmap_set(pool->bitmap, pageno, count);
441                 ptr = pool->vaddr + PAGE_SIZE * pageno;
442                 *ret_page = pool->page + pageno;
443         } else {
444                 pr_err_once("ERROR: %u KiB atomic DMA coherent pool is too small!\n"
445                             "Please increase it with coherent_pool= kernel parameter!\n",
446                             (unsigned)pool->size / 1024);
447         }
448         spin_unlock_irqrestore(&pool->lock, flags);
449
450         return ptr;
451 }
452
453 static int __free_from_pool(void *start, size_t size)
454 {
455         struct dma_pool *pool = &atomic_pool;
456         unsigned long pageno, count;
457         unsigned long flags;
458
459         if (start < pool->vaddr || start > pool->vaddr + pool->size)
460                 return 0;
461
462         if (start + size > pool->vaddr + pool->size) {
463                 WARN(1, "freeing wrong coherent size from pool\n");
464                 return 0;
465         }
466
467         pageno = (start - pool->vaddr) >> PAGE_SHIFT;
468         count = size >> PAGE_SHIFT;
469
470         spin_lock_irqsave(&pool->lock, flags);
471         bitmap_clear(pool->bitmap, pageno, count);
472         spin_unlock_irqrestore(&pool->lock, flags);
473
474         return 1;
475 }
476
477 static void *__alloc_from_contiguous(struct device *dev, size_t size,
478                                      pgprot_t prot, struct page **ret_page)
479 {
480         unsigned long order = get_order(size);
481         size_t count = size >> PAGE_SHIFT;
482         struct page *page;
483
484         page = dma_alloc_from_contiguous(dev, count, order);
485         if (!page)
486                 return NULL;
487
488         __dma_clear_buffer(page, size);
489         __dma_remap(page, size, prot);
490
491         *ret_page = page;
492         return page_address(page);
493 }
494
495 static void __free_from_contiguous(struct device *dev, struct page *page,
496                                    size_t size)
497 {
498         __dma_remap(page, size, pgprot_kernel);
499         dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT);
500 }
501
502 static inline pgprot_t __get_dma_pgprot(struct dma_attrs *attrs, pgprot_t prot)
503 {
504         prot = dma_get_attr(DMA_ATTR_WRITE_COMBINE, attrs) ?
505                             pgprot_writecombine(prot) :
506                             pgprot_dmacoherent(prot);
507         return prot;
508 }
509
510 #define nommu() 0
511
512 #else   /* !CONFIG_MMU */
513
514 #define nommu() 1
515
516 #define __get_dma_pgprot(attrs, prot)   __pgprot(0)
517 #define __alloc_remap_buffer(dev, size, gfp, prot, ret, c)      NULL
518 #define __alloc_from_pool(size, ret_page)                       NULL
519 #define __alloc_from_contiguous(dev, size, prot, ret)           NULL
520 #define __free_from_pool(cpu_addr, size)                        0
521 #define __free_from_contiguous(dev, page, size)                 do { } while (0)
522 #define __dma_free_remap(cpu_addr, size)                        do { } while (0)
523
524 #endif  /* CONFIG_MMU */
525
526 static void *__alloc_simple_buffer(struct device *dev, size_t size, gfp_t gfp,
527                                    struct page **ret_page)
528 {
529         struct page *page;
530         page = __dma_alloc_buffer(dev, size, gfp);
531         if (!page)
532                 return NULL;
533
534         *ret_page = page;
535         return page_address(page);
536 }
537
538
539
540 static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
541                          gfp_t gfp, pgprot_t prot, const void *caller)
542 {
543         u64 mask = get_coherent_dma_mask(dev);
544         struct page *page;
545         void *addr;
546
547 #ifdef CONFIG_DMA_API_DEBUG
548         u64 limit = (mask + 1) & ~mask;
549         if (limit && size >= limit) {
550                 dev_warn(dev, "coherent allocation too big (requested %#x mask %#llx)\n",
551                         size, mask);
552                 return NULL;
553         }
554 #endif
555
556         if (!mask)
557                 return NULL;
558
559         if (mask < 0xffffffffULL)
560                 gfp |= GFP_DMA;
561
562         /*
563          * Following is a work-around (a.k.a. hack) to prevent pages
564          * with __GFP_COMP being passed to split_page() which cannot
565          * handle them.  The real problem is that this flag probably
566          * should be 0 on ARM as it is not supported on this
567          * platform; see CONFIG_HUGETLBFS.
568          */
569         gfp &= ~(__GFP_COMP);
570
571         *handle = DMA_ERROR_CODE;
572         size = PAGE_ALIGN(size);
573
574         if (arch_is_coherent() || nommu())
575                 addr = __alloc_simple_buffer(dev, size, gfp, &page);
576         else if (gfp & GFP_ATOMIC)
577                 addr = __alloc_from_pool(size, &page);
578         else if (!IS_ENABLED(CONFIG_CMA))
579                 addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);
580         else
581                 addr = __alloc_from_contiguous(dev, size, prot, &page);
582
583         if (addr)
584                 *handle = pfn_to_dma(dev, page_to_pfn(page));
585
586         return addr;
587 }
588
589 /*
590  * Allocate DMA-coherent memory space and return both the kernel remapped
591  * virtual and bus address for that space.
592  */
593 void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
594                     gfp_t gfp, struct dma_attrs *attrs)
595 {
596         pgprot_t prot = __get_dma_pgprot(attrs, pgprot_kernel);
597         void *memory;
598
599         if (dma_alloc_from_coherent(dev, size, handle, &memory))
600                 return memory;
601
602         return __dma_alloc(dev, size, handle, gfp, prot,
603                            __builtin_return_address(0));
604 }
605
606 /*
607  * Create userspace mapping for the DMA-coherent memory.
608  */
609 int arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
610                  void *cpu_addr, dma_addr_t dma_addr, size_t size,
611                  struct dma_attrs *attrs)
612 {
613         int ret = -ENXIO;
614 #ifdef CONFIG_MMU
615         unsigned long nr_vma_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
616         unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
617         unsigned long pfn = dma_to_pfn(dev, dma_addr);
618         unsigned long off = vma->vm_pgoff;
619
620         vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot);
621
622         if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
623                 return ret;
624
625         if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
626                 ret = remap_pfn_range(vma, vma->vm_start,
627                                       pfn + off,
628                                       vma->vm_end - vma->vm_start,
629                                       vma->vm_page_prot);
630         }
631 #endif  /* CONFIG_MMU */
632
633         return ret;
634 }
635
636 /*
637  * Free a buffer as defined by the above mapping.
638  */
639 void arm_dma_free(struct device *dev, size_t size, void *cpu_addr,
640                   dma_addr_t handle, struct dma_attrs *attrs)
641 {
642         struct page *page = pfn_to_page(dma_to_pfn(dev, handle));
643
644         if (dma_release_from_coherent(dev, get_order(size), cpu_addr))
645                 return;
646
647         size = PAGE_ALIGN(size);
648
649         if (arch_is_coherent() || nommu()) {
650                 __dma_free_buffer(page, size);
651         } else if (__free_from_pool(cpu_addr, size)) {
652                 return;
653         } else if (!IS_ENABLED(CONFIG_CMA)) {
654                 __dma_free_remap(cpu_addr, size);
655                 __dma_free_buffer(page, size);
656         } else {
657                 /*
658                  * Non-atomic allocations cannot be freed with IRQs disabled
659                  */
660                 WARN_ON(irqs_disabled());
661                 __free_from_contiguous(dev, page, size);
662         }
663 }
664
665 static void dma_cache_maint_page(struct page *page, unsigned long offset,
666         size_t size, enum dma_data_direction dir,
667         void (*op)(const void *, size_t, int))
668 {
669         unsigned long pfn;
670         size_t left = size;
671
672         pfn = page_to_pfn(page) + offset / PAGE_SIZE;
673         offset %= PAGE_SIZE;
674
675         /*
676          * A single sg entry may refer to multiple physically contiguous
677          * pages.  But we still need to process highmem pages individually.
678          * If highmem is not configured then the bulk of this loop gets
679          * optimized out.
680          */
681         do {
682                 size_t len = left;
683                 void *vaddr;
684
685                 page = pfn_to_page(pfn);
686
687                 if (PageHighMem(page)) {
688                         if (len + offset > PAGE_SIZE)
689                                 len = PAGE_SIZE - offset;
690                         vaddr = kmap_high_get(page);
691                         if (vaddr) {
692                                 vaddr += offset;
693                                 op(vaddr, len, dir);
694                                 kunmap_high(page);
695                         } else if (cache_is_vipt()) {
696                                 /* unmapped pages might still be cached */
697                                 vaddr = kmap_atomic(page);
698                                 op(vaddr + offset, len, dir);
699                                 kunmap_atomic(vaddr);
700                         }
701                 } else {
702                         vaddr = page_address(page) + offset;
703                         op(vaddr, len, dir);
704                 }
705                 offset = 0;
706                 pfn++;
707                 left -= len;
708         } while (left);
709 }
710
711 /*
712  * Make an area consistent for devices.
713  * Note: Drivers should NOT use this function directly, as it will break
714  * platforms with CONFIG_DMABOUNCE.
715  * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
716  */
717 static void __dma_page_cpu_to_dev(struct page *page, unsigned long off,
718         size_t size, enum dma_data_direction dir)
719 {
720         unsigned long paddr;
721
722         dma_cache_maint_page(page, off, size, dir, dmac_map_area);
723
724         paddr = page_to_phys(page) + off;
725         if (dir == DMA_FROM_DEVICE) {
726                 outer_inv_range(paddr, paddr + size);
727         } else {
728                 outer_clean_range(paddr, paddr + size);
729         }
730         /* FIXME: non-speculating: flush on bidirectional mappings? */
731 }
732
733 static void __dma_page_dev_to_cpu(struct page *page, unsigned long off,
734         size_t size, enum dma_data_direction dir)
735 {
736         unsigned long paddr = page_to_phys(page) + off;
737
738         /* FIXME: non-speculating: not required */
739         /* don't bother invalidating if DMA to device */
740         if (dir != DMA_TO_DEVICE)
741                 outer_inv_range(paddr, paddr + size);
742
743         dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
744
745         /*
746          * Mark the D-cache clean for these pages to avoid extra flushing.
747          */
748         if (dir != DMA_TO_DEVICE && size >= PAGE_SIZE) {
749                 unsigned long pfn;
750                 size_t left = size;
751
752                 pfn = page_to_pfn(page) + off / PAGE_SIZE;
753                 off %= PAGE_SIZE;
754                 if (off) {
755                         pfn++;
756                         left -= PAGE_SIZE - off;
757                 }
758                 while (left >= PAGE_SIZE) {
759                         page = pfn_to_page(pfn++);
760                         set_bit(PG_dcache_clean, &page->flags);
761                         left -= PAGE_SIZE;
762                 }
763         }
764 }
765
766 /**
767  * arm_dma_map_sg - map a set of SG buffers for streaming mode DMA
768  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
769  * @sg: list of buffers
770  * @nents: number of buffers to map
771  * @dir: DMA transfer direction
772  *
773  * Map a set of buffers described by scatterlist in streaming mode for DMA.
774  * This is the scatter-gather version of the dma_map_single interface.
775  * Here the scatter gather list elements are each tagged with the
776  * appropriate dma address and length.  They are obtained via
777  * sg_dma_{address,length}.
778  *
779  * Device ownership issues as mentioned for dma_map_single are the same
780  * here.
781  */
782 int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
783                 enum dma_data_direction dir, struct dma_attrs *attrs)
784 {
785         struct dma_map_ops *ops = get_dma_ops(dev);
786         struct scatterlist *s;
787         int i, j;
788
789         for_each_sg(sg, s, nents, i) {
790 #ifdef CONFIG_NEED_SG_DMA_LENGTH
791                 s->dma_length = s->length;
792 #endif
793                 s->dma_address = ops->map_page(dev, sg_page(s), s->offset,
794                                                 s->length, dir, attrs);
795                 if (dma_mapping_error(dev, s->dma_address))
796                         goto bad_mapping;
797         }
798         return nents;
799
800  bad_mapping:
801         for_each_sg(sg, s, i, j)
802                 ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
803         return 0;
804 }
805
806 /**
807  * arm_dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
808  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
809  * @sg: list of buffers
810  * @nents: number of buffers to unmap (same as was passed to dma_map_sg)
811  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
812  *
813  * Unmap a set of streaming mode DMA translations.  Again, CPU access
814  * rules concerning calls here are the same as for dma_unmap_single().
815  */
816 void arm_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
817                 enum dma_data_direction dir, struct dma_attrs *attrs)
818 {
819         struct dma_map_ops *ops = get_dma_ops(dev);
820         struct scatterlist *s;
821
822         int i;
823
824         for_each_sg(sg, s, nents, i)
825                 ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
826 }
827
828 /**
829  * arm_dma_sync_sg_for_cpu
830  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
831  * @sg: list of buffers
832  * @nents: number of buffers to map (returned from dma_map_sg)
833  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
834  */
835 void arm_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
836                         int nents, enum dma_data_direction dir)
837 {
838         struct dma_map_ops *ops = get_dma_ops(dev);
839         struct scatterlist *s;
840         int i;
841
842         for_each_sg(sg, s, nents, i)
843                 ops->sync_single_for_cpu(dev, sg_dma_address(s), s->length,
844                                          dir);
845 }
846
847 /**
848  * arm_dma_sync_sg_for_device
849  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
850  * @sg: list of buffers
851  * @nents: number of buffers to map (returned from dma_map_sg)
852  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
853  */
854 void arm_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
855                         int nents, enum dma_data_direction dir)
856 {
857         struct dma_map_ops *ops = get_dma_ops(dev);
858         struct scatterlist *s;
859         int i;
860
861         for_each_sg(sg, s, nents, i)
862                 ops->sync_single_for_device(dev, sg_dma_address(s), s->length,
863                                             dir);
864 }
865
866 /*
867  * Return whether the given device DMA address mask can be supported
868  * properly.  For example, if your device can only drive the low 24-bits
869  * during bus mastering, then you would pass 0x00ffffff as the mask
870  * to this function.
871  */
872 int dma_supported(struct device *dev, u64 mask)
873 {
874         if (mask < (u64)arm_dma_limit)
875                 return 0;
876         return 1;
877 }
878 EXPORT_SYMBOL(dma_supported);
879
880 static int arm_dma_set_mask(struct device *dev, u64 dma_mask)
881 {
882         if (!dev->dma_mask || !dma_supported(dev, dma_mask))
883                 return -EIO;
884
885         *dev->dma_mask = dma_mask;
886
887         return 0;
888 }
889
890 #define PREALLOC_DMA_DEBUG_ENTRIES      4096
891
892 static int __init dma_debug_do_init(void)
893 {
894         dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
895         return 0;
896 }
897 fs_initcall(dma_debug_do_init);
898
899 #ifdef CONFIG_ARM_DMA_USE_IOMMU
900
901 /* IOMMU */
902
903 static inline dma_addr_t __alloc_iova(struct dma_iommu_mapping *mapping,
904                                       size_t size)
905 {
906         unsigned int order = get_order(size);
907         unsigned int align = 0;
908         unsigned int count, start;
909         unsigned long flags;
910
911         count = ((PAGE_ALIGN(size) >> PAGE_SHIFT) +
912                  (1 << mapping->order) - 1) >> mapping->order;
913
914         if (order > mapping->order)
915                 align = (1 << (order - mapping->order)) - 1;
916
917         spin_lock_irqsave(&mapping->lock, flags);
918         start = bitmap_find_next_zero_area(mapping->bitmap, mapping->bits, 0,
919                                            count, align);
920         if (start > mapping->bits) {
921                 spin_unlock_irqrestore(&mapping->lock, flags);
922                 return DMA_ERROR_CODE;
923         }
924
925         bitmap_set(mapping->bitmap, start, count);
926         spin_unlock_irqrestore(&mapping->lock, flags);
927
928         return mapping->base + (start << (mapping->order + PAGE_SHIFT));
929 }
930
931 static inline void __free_iova(struct dma_iommu_mapping *mapping,
932                                dma_addr_t addr, size_t size)
933 {
934         unsigned int start = (addr - mapping->base) >>
935                              (mapping->order + PAGE_SHIFT);
936         unsigned int count = ((size >> PAGE_SHIFT) +
937                               (1 << mapping->order) - 1) >> mapping->order;
938         unsigned long flags;
939
940         spin_lock_irqsave(&mapping->lock, flags);
941         bitmap_clear(mapping->bitmap, start, count);
942         spin_unlock_irqrestore(&mapping->lock, flags);
943 }
944
945 static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t gfp)
946 {
947         struct page **pages;
948         int count = size >> PAGE_SHIFT;
949         int array_size = count * sizeof(struct page *);
950         int i = 0;
951
952         if (array_size <= PAGE_SIZE)
953                 pages = kzalloc(array_size, gfp);
954         else
955                 pages = vzalloc(array_size);
956         if (!pages)
957                 return NULL;
958
959         while (count) {
960                 int j, order = __fls(count);
961
962                 pages[i] = alloc_pages(gfp | __GFP_NOWARN, order);
963                 while (!pages[i] && order)
964                         pages[i] = alloc_pages(gfp | __GFP_NOWARN, --order);
965                 if (!pages[i])
966                         goto error;
967
968                 if (order)
969                         split_page(pages[i], order);
970                 j = 1 << order;
971                 while (--j)
972                         pages[i + j] = pages[i] + j;
973
974                 __dma_clear_buffer(pages[i], PAGE_SIZE << order);
975                 i += 1 << order;
976                 count -= 1 << order;
977         }
978
979         return pages;
980 error:
981         while (i--)
982                 if (pages[i])
983                         __free_pages(pages[i], 0);
984         if (array_size <= PAGE_SIZE)
985                 kfree(pages);
986         else
987                 vfree(pages);
988         return NULL;
989 }
990
991 static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t size)
992 {
993         int count = size >> PAGE_SHIFT;
994         int array_size = count * sizeof(struct page *);
995         int i;
996         for (i = 0; i < count; i++)
997                 if (pages[i])
998                         __free_pages(pages[i], 0);
999         if (array_size <= PAGE_SIZE)
1000                 kfree(pages);
1001         else
1002                 vfree(pages);
1003         return 0;
1004 }
1005
1006 /*
1007  * Create a CPU mapping for a specified pages
1008  */
1009 static void *
1010 __iommu_alloc_remap(struct page **pages, size_t size, gfp_t gfp, pgprot_t prot,
1011                     const void *caller)
1012 {
1013         unsigned int i, nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
1014         struct vm_struct *area;
1015         unsigned long p;
1016
1017         area = get_vm_area_caller(size, VM_ARM_DMA_CONSISTENT | VM_USERMAP,
1018                                   caller);
1019         if (!area)
1020                 return NULL;
1021
1022         area->pages = pages;
1023         area->nr_pages = nr_pages;
1024         p = (unsigned long)area->addr;
1025
1026         for (i = 0; i < nr_pages; i++) {
1027                 phys_addr_t phys = __pfn_to_phys(page_to_pfn(pages[i]));
1028                 if (ioremap_page_range(p, p + PAGE_SIZE, phys, prot))
1029                         goto err;
1030                 p += PAGE_SIZE;
1031         }
1032         return area->addr;
1033 err:
1034         unmap_kernel_range((unsigned long)area->addr, size);
1035         vunmap(area->addr);
1036         return NULL;
1037 }
1038
1039 /*
1040  * Create a mapping in device IO address space for specified pages
1041  */
1042 static dma_addr_t
1043 __iommu_create_mapping(struct device *dev, struct page **pages, size_t size)
1044 {
1045         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1046         unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
1047         dma_addr_t dma_addr, iova;
1048         int i, ret = DMA_ERROR_CODE;
1049
1050         dma_addr = __alloc_iova(mapping, size);
1051         if (dma_addr == DMA_ERROR_CODE)
1052                 return dma_addr;
1053
1054         iova = dma_addr;
1055         for (i = 0; i < count; ) {
1056                 unsigned int next_pfn = page_to_pfn(pages[i]) + 1;
1057                 phys_addr_t phys = page_to_phys(pages[i]);
1058                 unsigned int len, j;
1059
1060                 for (j = i + 1; j < count; j++, next_pfn++)
1061                         if (page_to_pfn(pages[j]) != next_pfn)
1062                                 break;
1063
1064                 len = (j - i) << PAGE_SHIFT;
1065                 ret = iommu_map(mapping->domain, iova, phys, len, 0);
1066                 if (ret < 0)
1067                         goto fail;
1068                 iova += len;
1069                 i = j;
1070         }
1071         return dma_addr;
1072 fail:
1073         iommu_unmap(mapping->domain, dma_addr, iova-dma_addr);
1074         __free_iova(mapping, dma_addr, size);
1075         return DMA_ERROR_CODE;
1076 }
1077
1078 static int __iommu_remove_mapping(struct device *dev, dma_addr_t iova, size_t size)
1079 {
1080         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1081
1082         /*
1083          * add optional in-page offset from iova to size and align
1084          * result to page size
1085          */
1086         size = PAGE_ALIGN((iova & ~PAGE_MASK) + size);
1087         iova &= PAGE_MASK;
1088
1089         iommu_unmap(mapping->domain, iova, size);
1090         __free_iova(mapping, iova, size);
1091         return 0;
1092 }
1093
1094 static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs)
1095 {
1096         struct vm_struct *area;
1097
1098         if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs))
1099                 return cpu_addr;
1100
1101         area = find_vm_area(cpu_addr);
1102         if (area && (area->flags & VM_ARM_DMA_CONSISTENT))
1103                 return area->pages;
1104         return NULL;
1105 }
1106
1107 static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
1108             dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs)
1109 {
1110         pgprot_t prot = __get_dma_pgprot(attrs, pgprot_kernel);
1111         struct page **pages;
1112         void *addr = NULL;
1113
1114         *handle = DMA_ERROR_CODE;
1115         size = PAGE_ALIGN(size);
1116
1117         pages = __iommu_alloc_buffer(dev, size, gfp);
1118         if (!pages)
1119                 return NULL;
1120
1121         *handle = __iommu_create_mapping(dev, pages, size);
1122         if (*handle == DMA_ERROR_CODE)
1123                 goto err_buffer;
1124
1125         if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs))
1126                 return pages;
1127
1128         addr = __iommu_alloc_remap(pages, size, gfp, prot,
1129                                    __builtin_return_address(0));
1130         if (!addr)
1131                 goto err_mapping;
1132
1133         return addr;
1134
1135 err_mapping:
1136         __iommu_remove_mapping(dev, *handle, size);
1137 err_buffer:
1138         __iommu_free_buffer(dev, pages, size);
1139         return NULL;
1140 }
1141
1142 static int arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
1143                     void *cpu_addr, dma_addr_t dma_addr, size_t size,
1144                     struct dma_attrs *attrs)
1145 {
1146         unsigned long uaddr = vma->vm_start;
1147         unsigned long usize = vma->vm_end - vma->vm_start;
1148         struct page **pages = __iommu_get_pages(cpu_addr, attrs);
1149
1150         vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot);
1151
1152         if (!pages)
1153                 return -ENXIO;
1154
1155         do {
1156                 int ret = vm_insert_page(vma, uaddr, *pages++);
1157                 if (ret) {
1158                         pr_err("Remapping memory failed: %d\n", ret);
1159                         return ret;
1160                 }
1161                 uaddr += PAGE_SIZE;
1162                 usize -= PAGE_SIZE;
1163         } while (usize > 0);
1164
1165         return 0;
1166 }
1167
1168 /*
1169  * free a page as defined by the above mapping.
1170  * Must not be called with IRQs disabled.
1171  */
1172 void arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr,
1173                           dma_addr_t handle, struct dma_attrs *attrs)
1174 {
1175         struct page **pages = __iommu_get_pages(cpu_addr, attrs);
1176         size = PAGE_ALIGN(size);
1177
1178         if (!pages) {
1179                 WARN(1, "trying to free invalid coherent area: %p\n", cpu_addr);
1180                 return;
1181         }
1182
1183         if (!dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) {
1184                 unmap_kernel_range((unsigned long)cpu_addr, size);
1185                 vunmap(cpu_addr);
1186         }
1187
1188         __iommu_remove_mapping(dev, handle, size);
1189         __iommu_free_buffer(dev, pages, size);
1190 }
1191
1192 /*
1193  * Map a part of the scatter-gather list into contiguous io address space
1194  */
1195 static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
1196                           size_t size, dma_addr_t *handle,
1197                           enum dma_data_direction dir)
1198 {
1199         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1200         dma_addr_t iova, iova_base;
1201         int ret = 0;
1202         unsigned int count;
1203         struct scatterlist *s;
1204
1205         size = PAGE_ALIGN(size);
1206         *handle = DMA_ERROR_CODE;
1207
1208         iova_base = iova = __alloc_iova(mapping, size);
1209         if (iova == DMA_ERROR_CODE)
1210                 return -ENOMEM;
1211
1212         for (count = 0, s = sg; count < (size >> PAGE_SHIFT); s = sg_next(s)) {
1213                 phys_addr_t phys = page_to_phys(sg_page(s));
1214                 unsigned int len = PAGE_ALIGN(s->offset + s->length);
1215
1216                 if (!arch_is_coherent())
1217                         __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
1218
1219                 ret = iommu_map(mapping->domain, iova, phys, len, 0);
1220                 if (ret < 0)
1221                         goto fail;
1222                 count += len >> PAGE_SHIFT;
1223                 iova += len;
1224         }
1225         *handle = iova_base;
1226
1227         return 0;
1228 fail:
1229         iommu_unmap(mapping->domain, iova_base, count * PAGE_SIZE);
1230         __free_iova(mapping, iova_base, size);
1231         return ret;
1232 }
1233
1234 /**
1235  * arm_iommu_map_sg - map a set of SG buffers for streaming mode DMA
1236  * @dev: valid struct device pointer
1237  * @sg: list of buffers
1238  * @nents: number of buffers to map
1239  * @dir: DMA transfer direction
1240  *
1241  * Map a set of buffers described by scatterlist in streaming mode for DMA.
1242  * The scatter gather list elements are merged together (if possible) and
1243  * tagged with the appropriate dma address and length. They are obtained via
1244  * sg_dma_{address,length}.
1245  */
1246 int arm_iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
1247                      enum dma_data_direction dir, struct dma_attrs *attrs)
1248 {
1249         struct scatterlist *s = sg, *dma = sg, *start = sg;
1250         int i, count = 0;
1251         unsigned int offset = s->offset;
1252         unsigned int size = s->offset + s->length;
1253         unsigned int max = dma_get_max_seg_size(dev);
1254
1255         for (i = 1; i < nents; i++) {
1256                 s = sg_next(s);
1257
1258                 s->dma_address = DMA_ERROR_CODE;
1259                 s->dma_length = 0;
1260
1261                 if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
1262                         if (__map_sg_chunk(dev, start, size, &dma->dma_address,
1263                             dir) < 0)
1264                                 goto bad_mapping;
1265
1266                         dma->dma_address += offset;
1267                         dma->dma_length = size - offset;
1268
1269                         size = offset = s->offset;
1270                         start = s;
1271                         dma = sg_next(dma);
1272                         count += 1;
1273                 }
1274                 size += s->length;
1275         }
1276         if (__map_sg_chunk(dev, start, size, &dma->dma_address, dir) < 0)
1277                 goto bad_mapping;
1278
1279         dma->dma_address += offset;
1280         dma->dma_length = size - offset;
1281
1282         return count+1;
1283
1284 bad_mapping:
1285         for_each_sg(sg, s, count, i)
1286                 __iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s));
1287         return 0;
1288 }
1289
1290 /**
1291  * arm_iommu_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
1292  * @dev: valid struct device pointer
1293  * @sg: list of buffers
1294  * @nents: number of buffers to unmap (same as was passed to dma_map_sg)
1295  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
1296  *
1297  * Unmap a set of streaming mode DMA translations.  Again, CPU access
1298  * rules concerning calls here are the same as for dma_unmap_single().
1299  */
1300 void arm_iommu_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
1301                         enum dma_data_direction dir, struct dma_attrs *attrs)
1302 {
1303         struct scatterlist *s;
1304         int i;
1305
1306         for_each_sg(sg, s, nents, i) {
1307                 if (sg_dma_len(s))
1308                         __iommu_remove_mapping(dev, sg_dma_address(s),
1309                                                sg_dma_len(s));
1310                 if (!arch_is_coherent())
1311                         __dma_page_dev_to_cpu(sg_page(s), s->offset,
1312                                               s->length, dir);
1313         }
1314 }
1315
1316 /**
1317  * arm_iommu_sync_sg_for_cpu
1318  * @dev: valid struct device pointer
1319  * @sg: list of buffers
1320  * @nents: number of buffers to map (returned from dma_map_sg)
1321  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
1322  */
1323 void arm_iommu_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
1324                         int nents, enum dma_data_direction dir)
1325 {
1326         struct scatterlist *s;
1327         int i;
1328
1329         for_each_sg(sg, s, nents, i)
1330                 if (!arch_is_coherent())
1331                         __dma_page_dev_to_cpu(sg_page(s), s->offset, s->length, dir);
1332
1333 }
1334
1335 /**
1336  * arm_iommu_sync_sg_for_device
1337  * @dev: valid struct device pointer
1338  * @sg: list of buffers
1339  * @nents: number of buffers to map (returned from dma_map_sg)
1340  * @dir: DMA transfer direction (same as was passed to dma_map_sg)
1341  */
1342 void arm_iommu_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
1343                         int nents, enum dma_data_direction dir)
1344 {
1345         struct scatterlist *s;
1346         int i;
1347
1348         for_each_sg(sg, s, nents, i)
1349                 if (!arch_is_coherent())
1350                         __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
1351 }
1352
1353
1354 /**
1355  * arm_iommu_map_page
1356  * @dev: valid struct device pointer
1357  * @page: page that buffer resides in
1358  * @offset: offset into page for start of buffer
1359  * @size: size of buffer to map
1360  * @dir: DMA transfer direction
1361  *
1362  * IOMMU aware version of arm_dma_map_page()
1363  */
1364 static dma_addr_t arm_iommu_map_page(struct device *dev, struct page *page,
1365              unsigned long offset, size_t size, enum dma_data_direction dir,
1366              struct dma_attrs *attrs)
1367 {
1368         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1369         dma_addr_t dma_addr;
1370         int ret, len = PAGE_ALIGN(size + offset);
1371
1372         if (!arch_is_coherent())
1373                 __dma_page_cpu_to_dev(page, offset, size, dir);
1374
1375         dma_addr = __alloc_iova(mapping, len);
1376         if (dma_addr == DMA_ERROR_CODE)
1377                 return dma_addr;
1378
1379         ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, 0);
1380         if (ret < 0)
1381                 goto fail;
1382
1383         return dma_addr + offset;
1384 fail:
1385         __free_iova(mapping, dma_addr, len);
1386         return DMA_ERROR_CODE;
1387 }
1388
1389 /**
1390  * arm_iommu_unmap_page
1391  * @dev: valid struct device pointer
1392  * @handle: DMA address of buffer
1393  * @size: size of buffer (same as passed to dma_map_page)
1394  * @dir: DMA transfer direction (same as passed to dma_map_page)
1395  *
1396  * IOMMU aware version of arm_dma_unmap_page()
1397  */
1398 static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
1399                 size_t size, enum dma_data_direction dir,
1400                 struct dma_attrs *attrs)
1401 {
1402         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1403         dma_addr_t iova = handle & PAGE_MASK;
1404         struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
1405         int offset = handle & ~PAGE_MASK;
1406         int len = PAGE_ALIGN(size + offset);
1407
1408         if (!iova)
1409                 return;
1410
1411         if (!arch_is_coherent())
1412                 __dma_page_dev_to_cpu(page, offset, size, dir);
1413
1414         iommu_unmap(mapping->domain, iova, len);
1415         __free_iova(mapping, iova, len);
1416 }
1417
1418 static void arm_iommu_sync_single_for_cpu(struct device *dev,
1419                 dma_addr_t handle, size_t size, enum dma_data_direction dir)
1420 {
1421         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1422         dma_addr_t iova = handle & PAGE_MASK;
1423         struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
1424         unsigned int offset = handle & ~PAGE_MASK;
1425
1426         if (!iova)
1427                 return;
1428
1429         if (!arch_is_coherent())
1430                 __dma_page_dev_to_cpu(page, offset, size, dir);
1431 }
1432
1433 static void arm_iommu_sync_single_for_device(struct device *dev,
1434                 dma_addr_t handle, size_t size, enum dma_data_direction dir)
1435 {
1436         struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1437         dma_addr_t iova = handle & PAGE_MASK;
1438         struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
1439         unsigned int offset = handle & ~PAGE_MASK;
1440
1441         if (!iova)
1442                 return;
1443
1444         __dma_page_cpu_to_dev(page, offset, size, dir);
1445 }
1446
1447 struct dma_map_ops iommu_ops = {
1448         .alloc          = arm_iommu_alloc_attrs,
1449         .free           = arm_iommu_free_attrs,
1450         .mmap           = arm_iommu_mmap_attrs,
1451
1452         .map_page               = arm_iommu_map_page,
1453         .unmap_page             = arm_iommu_unmap_page,
1454         .sync_single_for_cpu    = arm_iommu_sync_single_for_cpu,
1455         .sync_single_for_device = arm_iommu_sync_single_for_device,
1456
1457         .map_sg                 = arm_iommu_map_sg,
1458         .unmap_sg               = arm_iommu_unmap_sg,
1459         .sync_sg_for_cpu        = arm_iommu_sync_sg_for_cpu,
1460         .sync_sg_for_device     = arm_iommu_sync_sg_for_device,
1461 };
1462
1463 /**
1464  * arm_iommu_create_mapping
1465  * @bus: pointer to the bus holding the client device (for IOMMU calls)
1466  * @base: start address of the valid IO address space
1467  * @size: size of the valid IO address space
1468  * @order: accuracy of the IO addresses allocations
1469  *
1470  * Creates a mapping structure which holds information about used/unused
1471  * IO address ranges, which is required to perform memory allocation and
1472  * mapping with IOMMU aware functions.
1473  *
1474  * The client device need to be attached to the mapping with
1475  * arm_iommu_attach_device function.
1476  */
1477 struct dma_iommu_mapping *
1478 arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size,
1479                          int order)
1480 {
1481         unsigned int count = size >> (PAGE_SHIFT + order);
1482         unsigned int bitmap_size = BITS_TO_LONGS(count) * sizeof(long);
1483         struct dma_iommu_mapping *mapping;
1484         int err = -ENOMEM;
1485
1486         if (!count)
1487                 return ERR_PTR(-EINVAL);
1488
1489         mapping = kzalloc(sizeof(struct dma_iommu_mapping), GFP_KERNEL);
1490         if (!mapping)
1491                 goto err;
1492
1493         mapping->bitmap = kzalloc(bitmap_size, GFP_KERNEL);
1494         if (!mapping->bitmap)
1495                 goto err2;
1496
1497         mapping->base = base;
1498         mapping->bits = BITS_PER_BYTE * bitmap_size;
1499         mapping->order = order;
1500         spin_lock_init(&mapping->lock);
1501
1502         mapping->domain = iommu_domain_alloc(bus);
1503         if (!mapping->domain)
1504                 goto err3;
1505
1506         kref_init(&mapping->kref);
1507         return mapping;
1508 err3:
1509         kfree(mapping->bitmap);
1510 err2:
1511         kfree(mapping);
1512 err:
1513         return ERR_PTR(err);
1514 }
1515
1516 static void release_iommu_mapping(struct kref *kref)
1517 {
1518         struct dma_iommu_mapping *mapping =
1519                 container_of(kref, struct dma_iommu_mapping, kref);
1520
1521         iommu_domain_free(mapping->domain);
1522         kfree(mapping->bitmap);
1523         kfree(mapping);
1524 }
1525
1526 void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping)
1527 {
1528         if (mapping)
1529                 kref_put(&mapping->kref, release_iommu_mapping);
1530 }
1531
1532 /**
1533  * arm_iommu_attach_device
1534  * @dev: valid struct device pointer
1535  * @mapping: io address space mapping structure (returned from
1536  *      arm_iommu_create_mapping)
1537  *
1538  * Attaches specified io address space mapping to the provided device,
1539  * this replaces the dma operations (dma_map_ops pointer) with the
1540  * IOMMU aware version. More than one client might be attached to
1541  * the same io address space mapping.
1542  */
1543 int arm_iommu_attach_device(struct device *dev,
1544                             struct dma_iommu_mapping *mapping)
1545 {
1546         int err;
1547
1548         err = iommu_attach_device(mapping->domain, dev);
1549         if (err)
1550                 return err;
1551
1552         kref_get(&mapping->kref);
1553         dev->archdata.mapping = mapping;
1554         set_dma_ops(dev, &iommu_ops);
1555
1556         pr_info("Attached IOMMU controller to %s device.\n", dev_name(dev));
1557         return 0;
1558 }
1559
1560 #endif