12 #include <linux/module.h>
15 #include <linux/errno.h>
16 #include <linux/list.h>
18 #include <linux/device.h>
23 #include <linux/slab.h>
29 #include <asm/memory.h>
30 #include <asm/highmem.h>
31 #include <asm/cacheflush.h>
32 #include <asm/tlbflush.h>
37 #include <asm/dma-contiguous.h>
53 static void __dma_page_cpu_to_dev(
struct page *,
unsigned long,
55 static void __dma_page_dev_to_cpu(
struct page *,
unsigned long,
77 __dma_page_cpu_to_dev(page, offset, size, dir);
81 static dma_addr_t arm_coherent_dma_map_page(
struct device *dev,
struct page *page,
107 __dma_page_dev_to_cpu(
pfn_to_page(dma_to_pfn(dev, handle)),
111 static void arm_dma_sync_single_for_cpu(
struct device *dev,
114 unsigned int offset = handle & (
PAGE_SIZE - 1);
115 struct page *page =
pfn_to_page(dma_to_pfn(dev, handle-offset));
116 __dma_page_dev_to_cpu(page, offset, size, dir);
119 static void arm_dma_sync_single_for_device(
struct device *dev,
122 unsigned int offset = handle & (
PAGE_SIZE - 1);
123 struct page *page =
pfn_to_page(dma_to_pfn(dev, handle-offset));
124 __dma_page_cpu_to_dev(page, offset, size, dir);
127 static int arm_dma_set_mask(
struct device *dev,
u64 dma_mask);
134 .map_page = arm_dma_map_page,
135 .unmap_page = arm_dma_unmap_page,
138 .sync_single_for_cpu = arm_dma_sync_single_for_cpu,
139 .sync_single_for_device = arm_dma_sync_single_for_device,
142 .set_dma_mask = arm_dma_set_mask,
146 static void *arm_coherent_dma_alloc(
struct device *dev,
size_t size,
148 static void arm_coherent_dma_free(
struct device *dev,
size_t size,
void *
cpu_addr,
152 .alloc = arm_coherent_dma_alloc,
153 .free = arm_coherent_dma_free,
156 .map_page = arm_coherent_dma_map_page,
158 .set_dma_mask = arm_dma_set_mask,
162 static u64 get_coherent_dma_mask(
struct device *dev)
174 dev_warn(dev,
"coherent DMA mask is unset\n");
179 dev_warn(dev,
"coherent DMA mask %#llx is smaller "
180 "than system GFP_DMA mask %#llx\n",
181 mask, (
u64)arm_dma_limit);
189 static void __dma_clear_buffer(
struct page *page,
size_t size)
200 outer_flush_range(
__pa(ptr),
__pa(ptr) + size);
208 static struct page *__dma_alloc_buffer(
struct device *dev,
size_t size,
gfp_t gfp)
211 struct page *
page, *
p, *
e;
221 for (p = page + (size >>
PAGE_SHIFT), e = page + (1 << order); p <
e; p++)
224 __dma_clear_buffer(page, size);
232 static void __dma_free_buffer(
struct page *page,
size_t size)
243 #ifdef CONFIG_HUGETLB_PAGE
244 #error ARM Coherent DMA allocator does not (yet) support huge TLB
248 pgprot_t prot,
struct page **ret_page);
251 pgprot_t prot,
struct page **ret_page,
255 __dma_alloc_remap(
struct page *page,
size_t size,
gfp_t gfp,
pgprot_t prot,
283 if (!area || (area->
flags & flags) != flags) {
284 WARN(1,
"trying to free invalid coherent area: %p\n", cpu_addr);
291 #define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
297 unsigned long nr_pages;
302 static struct dma_pool atomic_pool = {
303 .
size = DEFAULT_DMA_COHERENT_POOL_SIZE,
306 static int __init early_coherent_pool(
char *p)
313 void __init init_dma_coherent_pool_size(
unsigned long size)
318 BUG_ON(atomic_pool.vaddr);
324 if (atomic_pool.
size == DEFAULT_DMA_COHERENT_POOL_SIZE)
331 static int __init atomic_pool_init(
void)
346 pages = kzalloc(nr_pages *
sizeof(
struct page *),
GFP_KERNEL);
358 for (i = 0; i < nr_pages; i++)
365 pool->nr_pages = nr_pages;
366 pr_info(
"DMA: preallocated %u KiB pool for atomic coherent allocations\n",
367 (
unsigned)pool->
size / 1024);
375 pr_err(
"DMA: failed to allocate %u KiB pool for atomic coherent allocation\n",
376 (
unsigned)pool->
size / 1024);
384 struct dma_contig_early_reserve {
389 static struct dma_contig_early_reserve dma_mmu_remap[MAX_CMA_AREAS]
__initdata;
395 dma_mmu_remap[dma_mmu_remap_num].base = base;
396 dma_mmu_remap[dma_mmu_remap_num].size =
size;
403 for (i = 0; i < dma_mmu_remap_num; i++) {
409 if (end > arm_lowmem_limit)
440 static void __dma_remap(
struct page *page,
size_t size,
pgprot_t prot)
443 unsigned end = start +
size;
451 pgprot_t prot,
struct page **ret_page,
456 page = __dma_alloc_buffer(dev, size, gfp);
460 ptr = __dma_alloc_remap(page, size, gfp, prot, caller);
462 __dma_free_buffer(page, size);
472 struct dma_pool *pool = &atomic_pool;
477 unsigned long align_mask;
480 WARN(1,
"coherent pool not initialised!\n");
493 0, count, align_mask);
494 if (pageno < pool->nr_pages) {
497 *ret_page = pool->pages[pageno];
499 pr_err_once(
"ERROR: %u KiB atomic DMA coherent pool is too small!\n"
500 "Please increase it with coherent_pool= kernel parameter!\n",
501 (
unsigned)pool->
size / 1024);
503 spin_unlock_irqrestore(&pool->
lock, flags);
508 static bool __in_atomic_pool(
void *start,
size_t size)
510 struct dma_pool *pool = &atomic_pool;
511 void *end = start +
size;
512 void *pool_start = pool->vaddr;
513 void *pool_end = pool->vaddr + pool->
size;
515 if (start < pool_start || start >= pool_end)
521 WARN(1,
"Wrong coherent size(%p-%p) from atomic pool(%p-%p)\n",
522 start, end - 1, pool_start, pool_end - 1);
529 struct dma_pool *pool = &atomic_pool;
530 unsigned long pageno,
count;
533 if (!__in_atomic_pool(start, size))
541 spin_unlock_irqrestore(&pool->
lock, flags);
547 pgprot_t prot,
struct page **ret_page)
557 __dma_clear_buffer(page, size);
558 __dma_remap(page, size, prot);
585 #define __get_dma_pgprot(attrs, prot) __pgprot(0)
586 #define __alloc_remap_buffer(dev, size, gfp, prot, ret, c) NULL
587 #define __alloc_from_pool(size, ret_page) NULL
588 #define __alloc_from_contiguous(dev, size, prot, ret) NULL
589 #define __free_from_pool(cpu_addr, size) 0
590 #define __free_from_contiguous(dev, page, size) do { } while (0)
591 #define __dma_free_remap(cpu_addr, size) do { } while (0)
595 static void *__alloc_simple_buffer(
struct device *dev,
size_t size,
gfp_t gfp,
596 struct page **ret_page)
599 page = __dma_alloc_buffer(dev, size, gfp);
609 static void *__dma_alloc(
struct device *dev,
size_t size,
dma_addr_t *handle,
610 gfp_t gfp,
pgprot_t prot,
bool is_coherent,
const void *caller)
612 u64 mask = get_coherent_dma_mask(dev);
613 struct page *page =
NULL;
616 #ifdef CONFIG_DMA_API_DEBUG
618 if (limit && size >= limit) {
619 dev_warn(dev,
"coherent allocation too big (requested %#x mask %#llx)\n",
628 if (mask < 0xffffffffULL)
643 if (is_coherent ||
nommu())
644 addr = __alloc_simple_buffer(dev, size, gfp, &page);
671 return __dma_alloc(dev, size, handle, gfp, prot,
false,
672 __builtin_return_address(0));
675 static void *arm_coherent_dma_alloc(
struct device *dev,
size_t size,
684 return __dma_alloc(dev, size, handle, gfp, prot,
true,
685 __builtin_return_address(0));
697 unsigned long nr_vma_pages = (vma->
vm_end - vma->
vm_start) >> PAGE_SHIFT;
699 unsigned long pfn = dma_to_pfn(dev, dma_addr);
707 if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
721 static void __arm_dma_free(
struct device *dev,
size_t size,
void *cpu_addr,
725 struct page *page =
pfn_to_page(dma_to_pfn(dev, handle));
732 if (is_coherent ||
nommu()) {
733 __dma_free_buffer(page, size);
738 __dma_free_buffer(page, size);
751 __arm_dma_free(dev, size, cpu_addr, handle, attrs,
false);
754 static void arm_coherent_dma_free(
struct device *dev,
size_t size,
void *cpu_addr,
757 __arm_dma_free(dev, size, cpu_addr, handle, attrs,
true);
761 void *cpu_addr,
dma_addr_t handle,
size_t size,
764 struct page *page =
pfn_to_page(dma_to_pfn(dev, handle));
775 static void dma_cache_maint_page(
struct page *page,
unsigned long offset,
777 void (*
op)(
const void *,
size_t,
int))
790 if (PageHighMem(page)) {
806 op(vaddr + offset, len, dir);
825 static void __dma_page_cpu_to_dev(
struct page *page,
unsigned long off,
834 outer_inv_range(paddr, paddr + size);
836 outer_clean_range(paddr, paddr + size);
841 static void __dma_page_dev_to_cpu(
struct page *page,
unsigned long off,
849 outer_inv_range(paddr, paddr + size);
884 #ifdef CONFIG_NEED_SG_DMA_LENGTH
885 s->dma_length = s->
length;
974 static int arm_dma_set_mask(
struct device *dev,
u64 dma_mask)
984 #define PREALLOC_DMA_DEBUG_ENTRIES 4096
986 static int __init dma_debug_do_init(
void)
993 #ifdef CONFIG_ARM_DMA_USE_IOMMU
1001 unsigned int align = 0;
1003 unsigned long flags;
1006 (1 << mapping->order) - 1) >> mapping->order;
1008 if (order > mapping->order)
1009 align = (1 << (order - mapping->order)) - 1;
1014 if (start > mapping->bits) {
1015 spin_unlock_irqrestore(&mapping->lock, flags);
1020 spin_unlock_irqrestore(&mapping->lock, flags);
1022 return mapping->base + (start << (mapping->order +
PAGE_SHIFT));
1025 static inline void __free_iova(
struct dma_iommu_mapping *mapping,
1028 unsigned int start = (addr - mapping->base) >>
1029 (mapping->order + PAGE_SHIFT);
1031 (1 << mapping->order) - 1) >> mapping->order;
1032 unsigned long flags;
1036 spin_unlock_irqrestore(&mapping->lock, flags);
1039 static struct page **__iommu_alloc_buffer(
struct device *dev,
size_t size,
gfp_t gfp)
1041 struct page **
pages;
1043 int array_size = count *
sizeof(
struct page *);
1047 pages = kzalloc(array_size, gfp);
1054 int j, order =
__fls(count);
1057 while (!pages[i] && order)
1066 pages[i +
j] = pages[
i] +
j;
1069 __dma_clear_buffer(pages[i],
PAGE_SIZE << order);
1071 count -= 1 <<
order;
1086 static int __iommu_free_buffer(
struct device *dev,
struct page **pages,
size_t size)
1089 int array_size = count *
sizeof(
struct page *);
1091 for (i = 0; i <
count; i++)
1105 __iommu_alloc_remap(
struct page **pages,
size_t size,
gfp_t gfp,
pgprot_t prot,
1138 __iommu_create_mapping(
struct device *dev,
struct page **pages,
size_t size)
1140 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1145 dma_addr = __alloc_iova(mapping, size);
1150 for (i = 0; i <
count; ) {
1151 unsigned int next_pfn =
page_to_pfn(pages[i]) + 1;
1153 unsigned int len,
j;
1155 for (j = i + 1; j <
count; j++, next_pfn++)
1159 len = (j -
i) << PAGE_SHIFT;
1160 ret =
iommu_map(mapping->domain, iova, phys, len, 0);
1168 iommu_unmap(mapping->domain, dma_addr, iova-dma_addr);
1173 static int __iommu_remove_mapping(
struct device *dev,
dma_addr_t iova,
size_t size)
1175 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1189 static struct page **__atomic_get_pages(
void *addr)
1191 struct dma_pool *pool = &atomic_pool;
1192 struct page **pages = pool->pages;
1193 int offs = (addr - pool->vaddr) >> PAGE_SHIFT;
1195 return pages +
offs;
1198 static struct page **__iommu_get_pages(
void *cpu_addr,
struct dma_attrs *attrs)
1202 if (__in_atomic_pool(cpu_addr,
PAGE_SIZE))
1203 return __atomic_get_pages(cpu_addr);
1209 if (area && (area->
flags & VM_ARM_DMA_CONSISTENT))
1214 static void *__iommu_alloc_atomic(
struct device *dev,
size_t size,
1224 *handle = __iommu_create_mapping(dev, &page, size);
1235 static void __iommu_free_atomic(
struct device *dev,
struct page **pages,
1238 __iommu_remove_mapping(dev, handle, size);
1242 static void *arm_iommu_alloc_attrs(
struct device *dev,
size_t size,
1246 struct page **
pages;
1252 if (gfp & GFP_ATOMIC)
1253 return __iommu_alloc_atomic(dev, size, handle);
1255 pages = __iommu_alloc_buffer(dev, size, gfp);
1259 *handle = __iommu_create_mapping(dev, pages, size);
1266 addr = __iommu_alloc_remap(pages, size, gfp, prot,
1267 __builtin_return_address(0));
1274 __iommu_remove_mapping(dev, *handle, size);
1276 __iommu_free_buffer(dev, pages, size);
1281 void *cpu_addr,
dma_addr_t dma_addr,
size_t size,
1286 struct page **pages = __iommu_get_pages(cpu_addr, attrs);
1296 pr_err(
"Remapping memory failed: %d\n", ret);
1301 }
while (usize > 0);
1310 void arm_iommu_free_attrs(
struct device *dev,
size_t size,
void *cpu_addr,
1313 struct page **pages = __iommu_get_pages(cpu_addr, attrs);
1317 WARN(1,
"trying to free invalid coherent area: %p\n", cpu_addr);
1321 if (__in_atomic_pool(cpu_addr, size)) {
1322 __iommu_free_atomic(dev, pages, handle, size);
1331 __iommu_remove_mapping(dev, handle, size);
1332 __iommu_free_buffer(dev, pages, size);
1340 struct page **pages = __iommu_get_pages(cpu_addr, attrs);
1357 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1366 iova_base = iova = __alloc_iova(mapping, size);
1376 __dma_page_cpu_to_dev(sg_page(s), s->
offset, s->
length, dir);
1378 ret =
iommu_map(mapping->domain, iova, phys, len, 0);
1384 *handle = iova_base;
1393 static int __iommu_map_sg(
struct device *dev,
struct scatterlist *sg,
int nents,
1399 unsigned int offset = s->
offset;
1401 unsigned int max = dma_get_max_seg_size(dev);
1403 for (i = 1; i < nents; i++) {
1410 if (__map_sg_chunk(dev, start, size, &dma->dma_address,
1411 dir, attrs, is_coherent) < 0)
1415 dma->dma_length = size -
offset;
1417 size = offset = s->
offset;
1424 if (__map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
1428 dma->dma_address +=
offset;
1429 dma->dma_length = size -
offset;
1454 return __iommu_map_sg(dev, sg, nents, dir, attrs,
true);
1472 return __iommu_map_sg(dev, sg, nents, dir, attrs,
false);
1488 __dma_page_dev_to_cpu(sg_page(s), s->
offset,
1506 __iommu_unmap_sg(dev, sg, nents, dir, attrs,
true);
1522 __iommu_unmap_sg(dev, sg, nents, dir, attrs,
false);
1539 __dma_page_dev_to_cpu(sg_page(s), s->offset, s->
length, dir);
1557 __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
1575 struct dma_iommu_mapping *mapping = dev->archdata.mapping;
1579 dma_addr = __alloc_iova(mapping, len);
1587 return dma_addr +
offset;
1603 static dma_addr_t arm_iommu_map_page(
struct device *dev,
struct page *page,
1608 __dma_page_cpu_to_dev(page, offset, size, dir);
1610 return arm_coherent_iommu_map_page(dev, page, offset, size, dir, attrs);
1622 static void arm_coherent_iommu_unmap_page(
struct device *dev,
dma_addr_t handle,
1626 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1628 int offset = handle & ~PAGE_MASK;
1651 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1654 int offset = handle & ~PAGE_MASK;
1661 __dma_page_dev_to_cpu(page, offset, size, dir);
1667 static void arm_iommu_sync_single_for_cpu(
struct device *dev,
1670 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1673 unsigned int offset = handle & ~PAGE_MASK;
1678 __dma_page_dev_to_cpu(page, offset, size, dir);
1681 static void arm_iommu_sync_single_for_device(
struct device *dev,
1684 struct dma_iommu_mapping *mapping = dev->
archdata.mapping;
1687 unsigned int offset = handle & ~PAGE_MASK;
1692 __dma_page_cpu_to_dev(page, offset, size, dir);
1696 .alloc = arm_iommu_alloc_attrs,
1697 .free = arm_iommu_free_attrs,
1698 .mmap = arm_iommu_mmap_attrs,
1699 .get_sgtable = arm_iommu_get_sgtable,
1701 .map_page = arm_iommu_map_page,
1702 .unmap_page = arm_iommu_unmap_page,
1703 .sync_single_for_cpu = arm_iommu_sync_single_for_cpu,
1704 .sync_single_for_device = arm_iommu_sync_single_for_device,
1706 .map_sg = arm_iommu_map_sg,
1707 .unmap_sg = arm_iommu_unmap_sg,
1708 .sync_sg_for_cpu = arm_iommu_sync_sg_for_cpu,
1709 .sync_sg_for_device = arm_iommu_sync_sg_for_device,
1713 .
alloc = arm_iommu_alloc_attrs,
1714 .free = arm_iommu_free_attrs,
1715 .mmap = arm_iommu_mmap_attrs,
1716 .get_sgtable = arm_iommu_get_sgtable,
1718 .map_page = arm_coherent_iommu_map_page,
1719 .unmap_page = arm_coherent_iommu_unmap_page,
1721 .map_sg = arm_coherent_iommu_map_sg,
1722 .unmap_sg = arm_coherent_iommu_unmap_sg,
1739 struct dma_iommu_mapping *
1743 unsigned int count = size >> (PAGE_SHIFT +
order);
1745 struct dma_iommu_mapping *
mapping;
1751 mapping = kzalloc(
sizeof(
struct dma_iommu_mapping),
GFP_KERNEL);
1755 mapping->bitmap = kzalloc(bitmap_size,
GFP_KERNEL);
1756 if (!mapping->bitmap)
1759 mapping->base = base;
1761 mapping->order =
order;
1765 if (!mapping->domain)
1768 kref_init(&mapping->kref);
1771 kfree(mapping->bitmap);
1775 return ERR_PTR(err);
1778 static void release_iommu_mapping(
struct kref *
kref)
1780 struct dma_iommu_mapping *mapping =
1784 kfree(mapping->bitmap);
1788 void arm_iommu_release_mapping(
struct dma_iommu_mapping *mapping)
1791 kref_put(&mapping->kref, release_iommu_mapping);
1805 int arm_iommu_attach_device(
struct device *dev,
1806 struct dma_iommu_mapping *mapping)
1814 kref_get(&mapping->kref);
1816 set_dma_ops(dev, &iommu_ops);
1818 pr_debug(
"Attached IOMMU controller to %s device.\n", dev_name(dev));