cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dma-mapping.c (62963B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *  linux/arch/arm/mm/dma-mapping.c
      4 *
      5 *  Copyright (C) 2000-2004 Russell King
      6 *
      7 *  DMA uncached mapping support.
      8 */
      9#include <linux/module.h>
     10#include <linux/mm.h>
     11#include <linux/genalloc.h>
     12#include <linux/gfp.h>
     13#include <linux/errno.h>
     14#include <linux/list.h>
     15#include <linux/init.h>
     16#include <linux/device.h>
     17#include <linux/dma-direct.h>
     18#include <linux/dma-map-ops.h>
     19#include <linux/highmem.h>
     20#include <linux/memblock.h>
     21#include <linux/slab.h>
     22#include <linux/iommu.h>
     23#include <linux/io.h>
     24#include <linux/vmalloc.h>
     25#include <linux/sizes.h>
     26#include <linux/cma.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/mach/arch.h>
     33#include <asm/dma-iommu.h>
     34#include <asm/mach/map.h>
     35#include <asm/system_info.h>
     36#include <asm/xen/xen-ops.h>
     37
     38#include "dma.h"
     39#include "mm.h"
     40
     41struct arm_dma_alloc_args {
     42	struct device *dev;
     43	size_t size;
     44	gfp_t gfp;
     45	pgprot_t prot;
     46	const void *caller;
     47	bool want_vaddr;
     48	int coherent_flag;
     49};
     50
     51struct arm_dma_free_args {
     52	struct device *dev;
     53	size_t size;
     54	void *cpu_addr;
     55	struct page *page;
     56	bool want_vaddr;
     57};
     58
     59#define NORMAL	    0
     60#define COHERENT    1
     61
     62struct arm_dma_allocator {
     63	void *(*alloc)(struct arm_dma_alloc_args *args,
     64		       struct page **ret_page);
     65	void (*free)(struct arm_dma_free_args *args);
     66};
     67
     68struct arm_dma_buffer {
     69	struct list_head list;
     70	void *virt;
     71	struct arm_dma_allocator *allocator;
     72};
     73
     74static LIST_HEAD(arm_dma_bufs);
     75static DEFINE_SPINLOCK(arm_dma_bufs_lock);
     76
     77static struct arm_dma_buffer *arm_dma_buffer_find(void *virt)
     78{
     79	struct arm_dma_buffer *buf, *found = NULL;
     80	unsigned long flags;
     81
     82	spin_lock_irqsave(&arm_dma_bufs_lock, flags);
     83	list_for_each_entry(buf, &arm_dma_bufs, list) {
     84		if (buf->virt == virt) {
     85			list_del(&buf->list);
     86			found = buf;
     87			break;
     88		}
     89	}
     90	spin_unlock_irqrestore(&arm_dma_bufs_lock, flags);
     91	return found;
     92}
     93
     94/*
     95 * The DMA API is built upon the notion of "buffer ownership".  A buffer
     96 * is either exclusively owned by the CPU (and therefore may be accessed
     97 * by it) or exclusively owned by the DMA device.  These helper functions
     98 * represent the transitions between these two ownership states.
     99 *
    100 * Note, however, that on later ARMs, this notion does not work due to
    101 * speculative prefetches.  We model our approach on the assumption that
    102 * the CPU does do speculative prefetches, which means we clean caches
    103 * before transfers and delay cache invalidation until transfer completion.
    104 *
    105 */
    106static void __dma_page_cpu_to_dev(struct page *, unsigned long,
    107		size_t, enum dma_data_direction);
    108static void __dma_page_dev_to_cpu(struct page *, unsigned long,
    109		size_t, enum dma_data_direction);
    110
    111/**
    112 * arm_dma_map_page - map a portion of a page for streaming DMA
    113 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
    114 * @page: page that buffer resides in
    115 * @offset: offset into page for start of buffer
    116 * @size: size of buffer to map
    117 * @dir: DMA transfer direction
    118 *
    119 * Ensure that any data held in the cache is appropriately discarded
    120 * or written back.
    121 *
    122 * The device owns this memory once this call has completed.  The CPU
    123 * can regain ownership by calling dma_unmap_page().
    124 */
    125static dma_addr_t arm_dma_map_page(struct device *dev, struct page *page,
    126	     unsigned long offset, size_t size, enum dma_data_direction dir,
    127	     unsigned long attrs)
    128{
    129	if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
    130		__dma_page_cpu_to_dev(page, offset, size, dir);
    131	return pfn_to_dma(dev, page_to_pfn(page)) + offset;
    132}
    133
    134static dma_addr_t arm_coherent_dma_map_page(struct device *dev, struct page *page,
    135	     unsigned long offset, size_t size, enum dma_data_direction dir,
    136	     unsigned long attrs)
    137{
    138	return pfn_to_dma(dev, page_to_pfn(page)) + offset;
    139}
    140
    141/**
    142 * arm_dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
    143 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
    144 * @handle: DMA address of buffer
    145 * @size: size of buffer (same as passed to dma_map_page)
    146 * @dir: DMA transfer direction (same as passed to dma_map_page)
    147 *
    148 * Unmap a page streaming mode DMA translation.  The handle and size
    149 * must match what was provided in the previous dma_map_page() call.
    150 * All other usages are undefined.
    151 *
    152 * After this call, reads by the CPU to the buffer are guaranteed to see
    153 * whatever the device wrote there.
    154 */
    155static void arm_dma_unmap_page(struct device *dev, dma_addr_t handle,
    156		size_t size, enum dma_data_direction dir, unsigned long attrs)
    157{
    158	if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
    159		__dma_page_dev_to_cpu(pfn_to_page(dma_to_pfn(dev, handle)),
    160				      handle & ~PAGE_MASK, size, dir);
    161}
    162
    163static void arm_dma_sync_single_for_cpu(struct device *dev,
    164		dma_addr_t handle, size_t size, enum dma_data_direction dir)
    165{
    166	unsigned int offset = handle & (PAGE_SIZE - 1);
    167	struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset));
    168	__dma_page_dev_to_cpu(page, offset, size, dir);
    169}
    170
    171static void arm_dma_sync_single_for_device(struct device *dev,
    172		dma_addr_t handle, size_t size, enum dma_data_direction dir)
    173{
    174	unsigned int offset = handle & (PAGE_SIZE - 1);
    175	struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset));
    176	__dma_page_cpu_to_dev(page, offset, size, dir);
    177}
    178
    179/*
    180 * Return whether the given device DMA address mask can be supported
    181 * properly.  For example, if your device can only drive the low 24-bits
    182 * during bus mastering, then you would pass 0x00ffffff as the mask
    183 * to this function.
    184 */
    185static int arm_dma_supported(struct device *dev, u64 mask)
    186{
    187	unsigned long max_dma_pfn = min(max_pfn - 1, arm_dma_pfn_limit);
    188
    189	/*
    190	 * Translate the device's DMA mask to a PFN limit.  This
    191	 * PFN number includes the page which we can DMA to.
    192	 */
    193	return dma_to_pfn(dev, mask) >= max_dma_pfn;
    194}
    195
    196const struct dma_map_ops arm_dma_ops = {
    197	.alloc			= arm_dma_alloc,
    198	.free			= arm_dma_free,
    199	.alloc_pages		= dma_direct_alloc_pages,
    200	.free_pages		= dma_direct_free_pages,
    201	.mmap			= arm_dma_mmap,
    202	.get_sgtable		= arm_dma_get_sgtable,
    203	.map_page		= arm_dma_map_page,
    204	.unmap_page		= arm_dma_unmap_page,
    205	.map_sg			= arm_dma_map_sg,
    206	.unmap_sg		= arm_dma_unmap_sg,
    207	.map_resource		= dma_direct_map_resource,
    208	.sync_single_for_cpu	= arm_dma_sync_single_for_cpu,
    209	.sync_single_for_device	= arm_dma_sync_single_for_device,
    210	.sync_sg_for_cpu	= arm_dma_sync_sg_for_cpu,
    211	.sync_sg_for_device	= arm_dma_sync_sg_for_device,
    212	.dma_supported		= arm_dma_supported,
    213	.get_required_mask	= dma_direct_get_required_mask,
    214};
    215EXPORT_SYMBOL(arm_dma_ops);
    216
    217static void *arm_coherent_dma_alloc(struct device *dev, size_t size,
    218	dma_addr_t *handle, gfp_t gfp, unsigned long attrs);
    219static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_addr,
    220				  dma_addr_t handle, unsigned long attrs);
    221static int arm_coherent_dma_mmap(struct device *dev, struct vm_area_struct *vma,
    222		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
    223		 unsigned long attrs);
    224
    225const struct dma_map_ops arm_coherent_dma_ops = {
    226	.alloc			= arm_coherent_dma_alloc,
    227	.free			= arm_coherent_dma_free,
    228	.alloc_pages		= dma_direct_alloc_pages,
    229	.free_pages		= dma_direct_free_pages,
    230	.mmap			= arm_coherent_dma_mmap,
    231	.get_sgtable		= arm_dma_get_sgtable,
    232	.map_page		= arm_coherent_dma_map_page,
    233	.map_sg			= arm_dma_map_sg,
    234	.map_resource		= dma_direct_map_resource,
    235	.dma_supported		= arm_dma_supported,
    236	.get_required_mask	= dma_direct_get_required_mask,
    237};
    238EXPORT_SYMBOL(arm_coherent_dma_ops);
    239
    240static void __dma_clear_buffer(struct page *page, size_t size, int coherent_flag)
    241{
    242	/*
    243	 * Ensure that the allocated pages are zeroed, and that any data
    244	 * lurking in the kernel direct-mapped region is invalidated.
    245	 */
    246	if (PageHighMem(page)) {
    247		phys_addr_t base = __pfn_to_phys(page_to_pfn(page));
    248		phys_addr_t end = base + size;
    249		while (size > 0) {
    250			void *ptr = kmap_atomic(page);
    251			memset(ptr, 0, PAGE_SIZE);
    252			if (coherent_flag != COHERENT)
    253				dmac_flush_range(ptr, ptr + PAGE_SIZE);
    254			kunmap_atomic(ptr);
    255			page++;
    256			size -= PAGE_SIZE;
    257		}
    258		if (coherent_flag != COHERENT)
    259			outer_flush_range(base, end);
    260	} else {
    261		void *ptr = page_address(page);
    262		memset(ptr, 0, size);
    263		if (coherent_flag != COHERENT) {
    264			dmac_flush_range(ptr, ptr + size);
    265			outer_flush_range(__pa(ptr), __pa(ptr) + size);
    266		}
    267	}
    268}
    269
    270/*
    271 * Allocate a DMA buffer for 'dev' of size 'size' using the
    272 * specified gfp mask.  Note that 'size' must be page aligned.
    273 */
    274static struct page *__dma_alloc_buffer(struct device *dev, size_t size,
    275				       gfp_t gfp, int coherent_flag)
    276{
    277	unsigned long order = get_order(size);
    278	struct page *page, *p, *e;
    279
    280	page = alloc_pages(gfp, order);
    281	if (!page)
    282		return NULL;
    283
    284	/*
    285	 * Now split the huge page and free the excess pages
    286	 */
    287	split_page(page, order);
    288	for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++)
    289		__free_page(p);
    290
    291	__dma_clear_buffer(page, size, coherent_flag);
    292
    293	return page;
    294}
    295
    296/*
    297 * Free a DMA buffer.  'size' must be page aligned.
    298 */
    299static void __dma_free_buffer(struct page *page, size_t size)
    300{
    301	struct page *e = page + (size >> PAGE_SHIFT);
    302
    303	while (page < e) {
    304		__free_page(page);
    305		page++;
    306	}
    307}
    308
    309static void *__alloc_from_contiguous(struct device *dev, size_t size,
    310				     pgprot_t prot, struct page **ret_page,
    311				     const void *caller, bool want_vaddr,
    312				     int coherent_flag, gfp_t gfp);
    313
    314static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp,
    315				 pgprot_t prot, struct page **ret_page,
    316				 const void *caller, bool want_vaddr);
    317
    318#define DEFAULT_DMA_COHERENT_POOL_SIZE	SZ_256K
    319static struct gen_pool *atomic_pool __ro_after_init;
    320
    321static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE;
    322
    323static int __init early_coherent_pool(char *p)
    324{
    325	atomic_pool_size = memparse(p, &p);
    326	return 0;
    327}
    328early_param("coherent_pool", early_coherent_pool);
    329
    330/*
    331 * Initialise the coherent pool for atomic allocations.
    332 */
    333static int __init atomic_pool_init(void)
    334{
    335	pgprot_t prot = pgprot_dmacoherent(PAGE_KERNEL);
    336	gfp_t gfp = GFP_KERNEL | GFP_DMA;
    337	struct page *page;
    338	void *ptr;
    339
    340	atomic_pool = gen_pool_create(PAGE_SHIFT, -1);
    341	if (!atomic_pool)
    342		goto out;
    343	/*
    344	 * The atomic pool is only used for non-coherent allocations
    345	 * so we must pass NORMAL for coherent_flag.
    346	 */
    347	if (dev_get_cma_area(NULL))
    348		ptr = __alloc_from_contiguous(NULL, atomic_pool_size, prot,
    349				      &page, atomic_pool_init, true, NORMAL,
    350				      GFP_KERNEL);
    351	else
    352		ptr = __alloc_remap_buffer(NULL, atomic_pool_size, gfp, prot,
    353					   &page, atomic_pool_init, true);
    354	if (ptr) {
    355		int ret;
    356
    357		ret = gen_pool_add_virt(atomic_pool, (unsigned long)ptr,
    358					page_to_phys(page),
    359					atomic_pool_size, -1);
    360		if (ret)
    361			goto destroy_genpool;
    362
    363		gen_pool_set_algo(atomic_pool,
    364				gen_pool_first_fit_order_align,
    365				NULL);
    366		pr_info("DMA: preallocated %zu KiB pool for atomic coherent allocations\n",
    367		       atomic_pool_size / 1024);
    368		return 0;
    369	}
    370
    371destroy_genpool:
    372	gen_pool_destroy(atomic_pool);
    373	atomic_pool = NULL;
    374out:
    375	pr_err("DMA: failed to allocate %zu KiB pool for atomic coherent allocation\n",
    376	       atomic_pool_size / 1024);
    377	return -ENOMEM;
    378}
    379/*
    380 * CMA is activated by core_initcall, so we must be called after it.
    381 */
    382postcore_initcall(atomic_pool_init);
    383
    384#ifdef CONFIG_CMA_AREAS
    385struct dma_contig_early_reserve {
    386	phys_addr_t base;
    387	unsigned long size;
    388};
    389
    390static struct dma_contig_early_reserve dma_mmu_remap[MAX_CMA_AREAS] __initdata;
    391
    392static int dma_mmu_remap_num __initdata;
    393
    394void __init dma_contiguous_early_fixup(phys_addr_t base, unsigned long size)
    395{
    396	dma_mmu_remap[dma_mmu_remap_num].base = base;
    397	dma_mmu_remap[dma_mmu_remap_num].size = size;
    398	dma_mmu_remap_num++;
    399}
    400
    401void __init dma_contiguous_remap(void)
    402{
    403	int i;
    404	for (i = 0; i < dma_mmu_remap_num; i++) {
    405		phys_addr_t start = dma_mmu_remap[i].base;
    406		phys_addr_t end = start + dma_mmu_remap[i].size;
    407		struct map_desc map;
    408		unsigned long addr;
    409
    410		if (end > arm_lowmem_limit)
    411			end = arm_lowmem_limit;
    412		if (start >= end)
    413			continue;
    414
    415		map.pfn = __phys_to_pfn(start);
    416		map.virtual = __phys_to_virt(start);
    417		map.length = end - start;
    418		map.type = MT_MEMORY_DMA_READY;
    419
    420		/*
    421		 * Clear previous low-memory mapping to ensure that the
    422		 * TLB does not see any conflicting entries, then flush
    423		 * the TLB of the old entries before creating new mappings.
    424		 *
    425		 * This ensures that any speculatively loaded TLB entries
    426		 * (even though they may be rare) can not cause any problems,
    427		 * and ensures that this code is architecturally compliant.
    428		 */
    429		for (addr = __phys_to_virt(start); addr < __phys_to_virt(end);
    430		     addr += PMD_SIZE)
    431			pmd_clear(pmd_off_k(addr));
    432
    433		flush_tlb_kernel_range(__phys_to_virt(start),
    434				       __phys_to_virt(end));
    435
    436		iotable_init(&map, 1);
    437	}
    438}
    439#endif
    440
    441static int __dma_update_pte(pte_t *pte, unsigned long addr, void *data)
    442{
    443	struct page *page = virt_to_page(addr);
    444	pgprot_t prot = *(pgprot_t *)data;
    445
    446	set_pte_ext(pte, mk_pte(page, prot), 0);
    447	return 0;
    448}
    449
    450static void __dma_remap(struct page *page, size_t size, pgprot_t prot)
    451{
    452	unsigned long start = (unsigned long) page_address(page);
    453	unsigned end = start + size;
    454
    455	apply_to_page_range(&init_mm, start, size, __dma_update_pte, &prot);
    456	flush_tlb_kernel_range(start, end);
    457}
    458
    459static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp,
    460				 pgprot_t prot, struct page **ret_page,
    461				 const void *caller, bool want_vaddr)
    462{
    463	struct page *page;
    464	void *ptr = NULL;
    465	/*
    466	 * __alloc_remap_buffer is only called when the device is
    467	 * non-coherent
    468	 */
    469	page = __dma_alloc_buffer(dev, size, gfp, NORMAL);
    470	if (!page)
    471		return NULL;
    472	if (!want_vaddr)
    473		goto out;
    474
    475	ptr = dma_common_contiguous_remap(page, size, prot, caller);
    476	if (!ptr) {
    477		__dma_free_buffer(page, size);
    478		return NULL;
    479	}
    480
    481 out:
    482	*ret_page = page;
    483	return ptr;
    484}
    485
    486static void *__alloc_from_pool(size_t size, struct page **ret_page)
    487{
    488	unsigned long val;
    489	void *ptr = NULL;
    490
    491	if (!atomic_pool) {
    492		WARN(1, "coherent pool not initialised!\n");
    493		return NULL;
    494	}
    495
    496	val = gen_pool_alloc(atomic_pool, size);
    497	if (val) {
    498		phys_addr_t phys = gen_pool_virt_to_phys(atomic_pool, val);
    499
    500		*ret_page = phys_to_page(phys);
    501		ptr = (void *)val;
    502	}
    503
    504	return ptr;
    505}
    506
    507static bool __in_atomic_pool(void *start, size_t size)
    508{
    509	return gen_pool_has_addr(atomic_pool, (unsigned long)start, size);
    510}
    511
    512static int __free_from_pool(void *start, size_t size)
    513{
    514	if (!__in_atomic_pool(start, size))
    515		return 0;
    516
    517	gen_pool_free(atomic_pool, (unsigned long)start, size);
    518
    519	return 1;
    520}
    521
    522static void *__alloc_from_contiguous(struct device *dev, size_t size,
    523				     pgprot_t prot, struct page **ret_page,
    524				     const void *caller, bool want_vaddr,
    525				     int coherent_flag, gfp_t gfp)
    526{
    527	unsigned long order = get_order(size);
    528	size_t count = size >> PAGE_SHIFT;
    529	struct page *page;
    530	void *ptr = NULL;
    531
    532	page = dma_alloc_from_contiguous(dev, count, order, gfp & __GFP_NOWARN);
    533	if (!page)
    534		return NULL;
    535
    536	__dma_clear_buffer(page, size, coherent_flag);
    537
    538	if (!want_vaddr)
    539		goto out;
    540
    541	if (PageHighMem(page)) {
    542		ptr = dma_common_contiguous_remap(page, size, prot, caller);
    543		if (!ptr) {
    544			dma_release_from_contiguous(dev, page, count);
    545			return NULL;
    546		}
    547	} else {
    548		__dma_remap(page, size, prot);
    549		ptr = page_address(page);
    550	}
    551
    552 out:
    553	*ret_page = page;
    554	return ptr;
    555}
    556
    557static void __free_from_contiguous(struct device *dev, struct page *page,
    558				   void *cpu_addr, size_t size, bool want_vaddr)
    559{
    560	if (want_vaddr) {
    561		if (PageHighMem(page))
    562			dma_common_free_remap(cpu_addr, size);
    563		else
    564			__dma_remap(page, size, PAGE_KERNEL);
    565	}
    566	dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT);
    567}
    568
    569static inline pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot)
    570{
    571	prot = (attrs & DMA_ATTR_WRITE_COMBINE) ?
    572			pgprot_writecombine(prot) :
    573			pgprot_dmacoherent(prot);
    574	return prot;
    575}
    576
    577static void *__alloc_simple_buffer(struct device *dev, size_t size, gfp_t gfp,
    578				   struct page **ret_page)
    579{
    580	struct page *page;
    581	/* __alloc_simple_buffer is only called when the device is coherent */
    582	page = __dma_alloc_buffer(dev, size, gfp, COHERENT);
    583	if (!page)
    584		return NULL;
    585
    586	*ret_page = page;
    587	return page_address(page);
    588}
    589
    590static void *simple_allocator_alloc(struct arm_dma_alloc_args *args,
    591				    struct page **ret_page)
    592{
    593	return __alloc_simple_buffer(args->dev, args->size, args->gfp,
    594				     ret_page);
    595}
    596
    597static void simple_allocator_free(struct arm_dma_free_args *args)
    598{
    599	__dma_free_buffer(args->page, args->size);
    600}
    601
    602static struct arm_dma_allocator simple_allocator = {
    603	.alloc = simple_allocator_alloc,
    604	.free = simple_allocator_free,
    605};
    606
    607static void *cma_allocator_alloc(struct arm_dma_alloc_args *args,
    608				 struct page **ret_page)
    609{
    610	return __alloc_from_contiguous(args->dev, args->size, args->prot,
    611				       ret_page, args->caller,
    612				       args->want_vaddr, args->coherent_flag,
    613				       args->gfp);
    614}
    615
    616static void cma_allocator_free(struct arm_dma_free_args *args)
    617{
    618	__free_from_contiguous(args->dev, args->page, args->cpu_addr,
    619			       args->size, args->want_vaddr);
    620}
    621
    622static struct arm_dma_allocator cma_allocator = {
    623	.alloc = cma_allocator_alloc,
    624	.free = cma_allocator_free,
    625};
    626
    627static void *pool_allocator_alloc(struct arm_dma_alloc_args *args,
    628				  struct page **ret_page)
    629{
    630	return __alloc_from_pool(args->size, ret_page);
    631}
    632
    633static void pool_allocator_free(struct arm_dma_free_args *args)
    634{
    635	__free_from_pool(args->cpu_addr, args->size);
    636}
    637
    638static struct arm_dma_allocator pool_allocator = {
    639	.alloc = pool_allocator_alloc,
    640	.free = pool_allocator_free,
    641};
    642
    643static void *remap_allocator_alloc(struct arm_dma_alloc_args *args,
    644				   struct page **ret_page)
    645{
    646	return __alloc_remap_buffer(args->dev, args->size, args->gfp,
    647				    args->prot, ret_page, args->caller,
    648				    args->want_vaddr);
    649}
    650
    651static void remap_allocator_free(struct arm_dma_free_args *args)
    652{
    653	if (args->want_vaddr)
    654		dma_common_free_remap(args->cpu_addr, args->size);
    655
    656	__dma_free_buffer(args->page, args->size);
    657}
    658
    659static struct arm_dma_allocator remap_allocator = {
    660	.alloc = remap_allocator_alloc,
    661	.free = remap_allocator_free,
    662};
    663
    664static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
    665			 gfp_t gfp, pgprot_t prot, bool is_coherent,
    666			 unsigned long attrs, const void *caller)
    667{
    668	u64 mask = min_not_zero(dev->coherent_dma_mask, dev->bus_dma_limit);
    669	struct page *page = NULL;
    670	void *addr;
    671	bool allowblock, cma;
    672	struct arm_dma_buffer *buf;
    673	struct arm_dma_alloc_args args = {
    674		.dev = dev,
    675		.size = PAGE_ALIGN(size),
    676		.gfp = gfp,
    677		.prot = prot,
    678		.caller = caller,
    679		.want_vaddr = ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0),
    680		.coherent_flag = is_coherent ? COHERENT : NORMAL,
    681	};
    682
    683#ifdef CONFIG_DMA_API_DEBUG
    684	u64 limit = (mask + 1) & ~mask;
    685	if (limit && size >= limit) {
    686		dev_warn(dev, "coherent allocation too big (requested %#x mask %#llx)\n",
    687			size, mask);
    688		return NULL;
    689	}
    690#endif
    691
    692	buf = kzalloc(sizeof(*buf),
    693		      gfp & ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM));
    694	if (!buf)
    695		return NULL;
    696
    697	if (mask < 0xffffffffULL)
    698		gfp |= GFP_DMA;
    699
    700	/*
    701	 * Following is a work-around (a.k.a. hack) to prevent pages
    702	 * with __GFP_COMP being passed to split_page() which cannot
    703	 * handle them.  The real problem is that this flag probably
    704	 * should be 0 on ARM as it is not supported on this
    705	 * platform; see CONFIG_HUGETLBFS.
    706	 */
    707	gfp &= ~(__GFP_COMP);
    708	args.gfp = gfp;
    709
    710	*handle = DMA_MAPPING_ERROR;
    711	allowblock = gfpflags_allow_blocking(gfp);
    712	cma = allowblock ? dev_get_cma_area(dev) : false;
    713
    714	if (cma)
    715		buf->allocator = &cma_allocator;
    716	else if (is_coherent)
    717		buf->allocator = &simple_allocator;
    718	else if (allowblock)
    719		buf->allocator = &remap_allocator;
    720	else
    721		buf->allocator = &pool_allocator;
    722
    723	addr = buf->allocator->alloc(&args, &page);
    724
    725	if (page) {
    726		unsigned long flags;
    727
    728		*handle = pfn_to_dma(dev, page_to_pfn(page));
    729		buf->virt = args.want_vaddr ? addr : page;
    730
    731		spin_lock_irqsave(&arm_dma_bufs_lock, flags);
    732		list_add(&buf->list, &arm_dma_bufs);
    733		spin_unlock_irqrestore(&arm_dma_bufs_lock, flags);
    734	} else {
    735		kfree(buf);
    736	}
    737
    738	return args.want_vaddr ? addr : page;
    739}
    740
    741/*
    742 * Allocate DMA-coherent memory space and return both the kernel remapped
    743 * virtual and bus address for that space.
    744 */
    745void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
    746		    gfp_t gfp, unsigned long attrs)
    747{
    748	pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL);
    749
    750	return __dma_alloc(dev, size, handle, gfp, prot, false,
    751			   attrs, __builtin_return_address(0));
    752}
    753
    754static void *arm_coherent_dma_alloc(struct device *dev, size_t size,
    755	dma_addr_t *handle, gfp_t gfp, unsigned long attrs)
    756{
    757	return __dma_alloc(dev, size, handle, gfp, PAGE_KERNEL, true,
    758			   attrs, __builtin_return_address(0));
    759}
    760
    761static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
    762		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
    763		 unsigned long attrs)
    764{
    765	int ret = -ENXIO;
    766	unsigned long nr_vma_pages = vma_pages(vma);
    767	unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
    768	unsigned long pfn = dma_to_pfn(dev, dma_addr);
    769	unsigned long off = vma->vm_pgoff;
    770
    771	if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
    772		return ret;
    773
    774	if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
    775		ret = remap_pfn_range(vma, vma->vm_start,
    776				      pfn + off,
    777				      vma->vm_end - vma->vm_start,
    778				      vma->vm_page_prot);
    779	}
    780
    781	return ret;
    782}
    783
    784/*
    785 * Create userspace mapping for the DMA-coherent memory.
    786 */
    787static int arm_coherent_dma_mmap(struct device *dev, struct vm_area_struct *vma,
    788		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
    789		 unsigned long attrs)
    790{
    791	return __arm_dma_mmap(dev, vma, cpu_addr, dma_addr, size, attrs);
    792}
    793
    794int arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
    795		 void *cpu_addr, dma_addr_t dma_addr, size_t size,
    796		 unsigned long attrs)
    797{
    798	vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot);
    799	return __arm_dma_mmap(dev, vma, cpu_addr, dma_addr, size, attrs);
    800}
    801
    802/*
    803 * Free a buffer as defined by the above mapping.
    804 */
    805static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr,
    806			   dma_addr_t handle, unsigned long attrs,
    807			   bool is_coherent)
    808{
    809	struct page *page = pfn_to_page(dma_to_pfn(dev, handle));
    810	struct arm_dma_buffer *buf;
    811	struct arm_dma_free_args args = {
    812		.dev = dev,
    813		.size = PAGE_ALIGN(size),
    814		.cpu_addr = cpu_addr,
    815		.page = page,
    816		.want_vaddr = ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0),
    817	};
    818
    819	buf = arm_dma_buffer_find(cpu_addr);
    820	if (WARN(!buf, "Freeing invalid buffer %p\n", cpu_addr))
    821		return;
    822
    823	buf->allocator->free(&args);
    824	kfree(buf);
    825}
    826
    827void arm_dma_free(struct device *dev, size_t size, void *cpu_addr,
    828		  dma_addr_t handle, unsigned long attrs)
    829{
    830	__arm_dma_free(dev, size, cpu_addr, handle, attrs, false);
    831}
    832
    833static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_addr,
    834				  dma_addr_t handle, unsigned long attrs)
    835{
    836	__arm_dma_free(dev, size, cpu_addr, handle, attrs, true);
    837}
    838
    839int arm_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
    840		 void *cpu_addr, dma_addr_t handle, size_t size,
    841		 unsigned long attrs)
    842{
    843	unsigned long pfn = dma_to_pfn(dev, handle);
    844	struct page *page;
    845	int ret;
    846
    847	/* If the PFN is not valid, we do not have a struct page */
    848	if (!pfn_valid(pfn))
    849		return -ENXIO;
    850
    851	page = pfn_to_page(pfn);
    852
    853	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
    854	if (unlikely(ret))
    855		return ret;
    856
    857	sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
    858	return 0;
    859}
    860
    861static void dma_cache_maint_page(struct page *page, unsigned long offset,
    862	size_t size, enum dma_data_direction dir,
    863	void (*op)(const void *, size_t, int))
    864{
    865	unsigned long pfn;
    866	size_t left = size;
    867
    868	pfn = page_to_pfn(page) + offset / PAGE_SIZE;
    869	offset %= PAGE_SIZE;
    870
    871	/*
    872	 * A single sg entry may refer to multiple physically contiguous
    873	 * pages.  But we still need to process highmem pages individually.
    874	 * If highmem is not configured then the bulk of this loop gets
    875	 * optimized out.
    876	 */
    877	do {
    878		size_t len = left;
    879		void *vaddr;
    880
    881		page = pfn_to_page(pfn);
    882
    883		if (PageHighMem(page)) {
    884			if (len + offset > PAGE_SIZE)
    885				len = PAGE_SIZE - offset;
    886
    887			if (cache_is_vipt_nonaliasing()) {
    888				vaddr = kmap_atomic(page);
    889				op(vaddr + offset, len, dir);
    890				kunmap_atomic(vaddr);
    891			} else {
    892				vaddr = kmap_high_get(page);
    893				if (vaddr) {
    894					op(vaddr + offset, len, dir);
    895					kunmap_high(page);
    896				}
    897			}
    898		} else {
    899			vaddr = page_address(page) + offset;
    900			op(vaddr, len, dir);
    901		}
    902		offset = 0;
    903		pfn++;
    904		left -= len;
    905	} while (left);
    906}
    907
    908/*
    909 * Make an area consistent for devices.
    910 * Note: Drivers should NOT use this function directly, as it will break
    911 * platforms with CONFIG_DMABOUNCE.
    912 * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
    913 */
    914static void __dma_page_cpu_to_dev(struct page *page, unsigned long off,
    915	size_t size, enum dma_data_direction dir)
    916{
    917	phys_addr_t paddr;
    918
    919	dma_cache_maint_page(page, off, size, dir, dmac_map_area);
    920
    921	paddr = page_to_phys(page) + off;
    922	if (dir == DMA_FROM_DEVICE) {
    923		outer_inv_range(paddr, paddr + size);
    924	} else {
    925		outer_clean_range(paddr, paddr + size);
    926	}
    927	/* FIXME: non-speculating: flush on bidirectional mappings? */
    928}
    929
    930static void __dma_page_dev_to_cpu(struct page *page, unsigned long off,
    931	size_t size, enum dma_data_direction dir)
    932{
    933	phys_addr_t paddr = page_to_phys(page) + off;
    934
    935	/* FIXME: non-speculating: not required */
    936	/* in any case, don't bother invalidating if DMA to device */
    937	if (dir != DMA_TO_DEVICE) {
    938		outer_inv_range(paddr, paddr + size);
    939
    940		dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
    941	}
    942
    943	/*
    944	 * Mark the D-cache clean for these pages to avoid extra flushing.
    945	 */
    946	if (dir != DMA_TO_DEVICE && size >= PAGE_SIZE) {
    947		unsigned long pfn;
    948		size_t left = size;
    949
    950		pfn = page_to_pfn(page) + off / PAGE_SIZE;
    951		off %= PAGE_SIZE;
    952		if (off) {
    953			pfn++;
    954			left -= PAGE_SIZE - off;
    955		}
    956		while (left >= PAGE_SIZE) {
    957			page = pfn_to_page(pfn++);
    958			set_bit(PG_dcache_clean, &page->flags);
    959			left -= PAGE_SIZE;
    960		}
    961	}
    962}
    963
    964/**
    965 * arm_dma_map_sg - map a set of SG buffers for streaming mode DMA
    966 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
    967 * @sg: list of buffers
    968 * @nents: number of buffers to map
    969 * @dir: DMA transfer direction
    970 *
    971 * Map a set of buffers described by scatterlist in streaming mode for DMA.
    972 * This is the scatter-gather version of the dma_map_single interface.
    973 * Here the scatter gather list elements are each tagged with the
    974 * appropriate dma address and length.  They are obtained via
    975 * sg_dma_{address,length}.
    976 *
    977 * Device ownership issues as mentioned for dma_map_single are the same
    978 * here.
    979 */
    980int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
    981		enum dma_data_direction dir, unsigned long attrs)
    982{
    983	const struct dma_map_ops *ops = get_dma_ops(dev);
    984	struct scatterlist *s;
    985	int i, j, ret;
    986
    987	for_each_sg(sg, s, nents, i) {
    988#ifdef CONFIG_NEED_SG_DMA_LENGTH
    989		s->dma_length = s->length;
    990#endif
    991		s->dma_address = ops->map_page(dev, sg_page(s), s->offset,
    992						s->length, dir, attrs);
    993		if (dma_mapping_error(dev, s->dma_address)) {
    994			ret = -EIO;
    995			goto bad_mapping;
    996		}
    997	}
    998	return nents;
    999
   1000 bad_mapping:
   1001	for_each_sg(sg, s, i, j)
   1002		ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
   1003	return ret;
   1004}
   1005
   1006/**
   1007 * arm_dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
   1008 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
   1009 * @sg: list of buffers
   1010 * @nents: number of buffers to unmap (same as was passed to dma_map_sg)
   1011 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1012 *
   1013 * Unmap a set of streaming mode DMA translations.  Again, CPU access
   1014 * rules concerning calls here are the same as for dma_unmap_single().
   1015 */
   1016void arm_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
   1017		enum dma_data_direction dir, unsigned long attrs)
   1018{
   1019	const struct dma_map_ops *ops = get_dma_ops(dev);
   1020	struct scatterlist *s;
   1021
   1022	int i;
   1023
   1024	for_each_sg(sg, s, nents, i)
   1025		ops->unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir, attrs);
   1026}
   1027
   1028/**
   1029 * arm_dma_sync_sg_for_cpu
   1030 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
   1031 * @sg: list of buffers
   1032 * @nents: number of buffers to map (returned from dma_map_sg)
   1033 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1034 */
   1035void arm_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
   1036			int nents, enum dma_data_direction dir)
   1037{
   1038	const struct dma_map_ops *ops = get_dma_ops(dev);
   1039	struct scatterlist *s;
   1040	int i;
   1041
   1042	for_each_sg(sg, s, nents, i)
   1043		ops->sync_single_for_cpu(dev, sg_dma_address(s), s->length,
   1044					 dir);
   1045}
   1046
   1047/**
   1048 * arm_dma_sync_sg_for_device
   1049 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
   1050 * @sg: list of buffers
   1051 * @nents: number of buffers to map (returned from dma_map_sg)
   1052 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1053 */
   1054void arm_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
   1055			int nents, enum dma_data_direction dir)
   1056{
   1057	const struct dma_map_ops *ops = get_dma_ops(dev);
   1058	struct scatterlist *s;
   1059	int i;
   1060
   1061	for_each_sg(sg, s, nents, i)
   1062		ops->sync_single_for_device(dev, sg_dma_address(s), s->length,
   1063					    dir);
   1064}
   1065
   1066static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent)
   1067{
   1068	/*
   1069	 * When CONFIG_ARM_LPAE is set, physical address can extend above
   1070	 * 32-bits, which then can't be addressed by devices that only support
   1071	 * 32-bit DMA.
   1072	 * Use the generic dma-direct / swiotlb ops code in that case, as that
   1073	 * handles bounce buffering for us.
   1074	 */
   1075	if (IS_ENABLED(CONFIG_ARM_LPAE))
   1076		return NULL;
   1077	return coherent ? &arm_coherent_dma_ops : &arm_dma_ops;
   1078}
   1079
   1080#ifdef CONFIG_ARM_DMA_USE_IOMMU
   1081
   1082static int __dma_info_to_prot(enum dma_data_direction dir, unsigned long attrs)
   1083{
   1084	int prot = 0;
   1085
   1086	if (attrs & DMA_ATTR_PRIVILEGED)
   1087		prot |= IOMMU_PRIV;
   1088
   1089	switch (dir) {
   1090	case DMA_BIDIRECTIONAL:
   1091		return prot | IOMMU_READ | IOMMU_WRITE;
   1092	case DMA_TO_DEVICE:
   1093		return prot | IOMMU_READ;
   1094	case DMA_FROM_DEVICE:
   1095		return prot | IOMMU_WRITE;
   1096	default:
   1097		return prot;
   1098	}
   1099}
   1100
   1101/* IOMMU */
   1102
   1103static int extend_iommu_mapping(struct dma_iommu_mapping *mapping);
   1104
   1105static inline dma_addr_t __alloc_iova(struct dma_iommu_mapping *mapping,
   1106				      size_t size)
   1107{
   1108	unsigned int order = get_order(size);
   1109	unsigned int align = 0;
   1110	unsigned int count, start;
   1111	size_t mapping_size = mapping->bits << PAGE_SHIFT;
   1112	unsigned long flags;
   1113	dma_addr_t iova;
   1114	int i;
   1115
   1116	if (order > CONFIG_ARM_DMA_IOMMU_ALIGNMENT)
   1117		order = CONFIG_ARM_DMA_IOMMU_ALIGNMENT;
   1118
   1119	count = PAGE_ALIGN(size) >> PAGE_SHIFT;
   1120	align = (1 << order) - 1;
   1121
   1122	spin_lock_irqsave(&mapping->lock, flags);
   1123	for (i = 0; i < mapping->nr_bitmaps; i++) {
   1124		start = bitmap_find_next_zero_area(mapping->bitmaps[i],
   1125				mapping->bits, 0, count, align);
   1126
   1127		if (start > mapping->bits)
   1128			continue;
   1129
   1130		bitmap_set(mapping->bitmaps[i], start, count);
   1131		break;
   1132	}
   1133
   1134	/*
   1135	 * No unused range found. Try to extend the existing mapping
   1136	 * and perform a second attempt to reserve an IO virtual
   1137	 * address range of size bytes.
   1138	 */
   1139	if (i == mapping->nr_bitmaps) {
   1140		if (extend_iommu_mapping(mapping)) {
   1141			spin_unlock_irqrestore(&mapping->lock, flags);
   1142			return DMA_MAPPING_ERROR;
   1143		}
   1144
   1145		start = bitmap_find_next_zero_area(mapping->bitmaps[i],
   1146				mapping->bits, 0, count, align);
   1147
   1148		if (start > mapping->bits) {
   1149			spin_unlock_irqrestore(&mapping->lock, flags);
   1150			return DMA_MAPPING_ERROR;
   1151		}
   1152
   1153		bitmap_set(mapping->bitmaps[i], start, count);
   1154	}
   1155	spin_unlock_irqrestore(&mapping->lock, flags);
   1156
   1157	iova = mapping->base + (mapping_size * i);
   1158	iova += start << PAGE_SHIFT;
   1159
   1160	return iova;
   1161}
   1162
   1163static inline void __free_iova(struct dma_iommu_mapping *mapping,
   1164			       dma_addr_t addr, size_t size)
   1165{
   1166	unsigned int start, count;
   1167	size_t mapping_size = mapping->bits << PAGE_SHIFT;
   1168	unsigned long flags;
   1169	dma_addr_t bitmap_base;
   1170	u32 bitmap_index;
   1171
   1172	if (!size)
   1173		return;
   1174
   1175	bitmap_index = (u32) (addr - mapping->base) / (u32) mapping_size;
   1176	BUG_ON(addr < mapping->base || bitmap_index > mapping->extensions);
   1177
   1178	bitmap_base = mapping->base + mapping_size * bitmap_index;
   1179
   1180	start = (addr - bitmap_base) >>	PAGE_SHIFT;
   1181
   1182	if (addr + size > bitmap_base + mapping_size) {
   1183		/*
   1184		 * The address range to be freed reaches into the iova
   1185		 * range of the next bitmap. This should not happen as
   1186		 * we don't allow this in __alloc_iova (at the
   1187		 * moment).
   1188		 */
   1189		BUG();
   1190	} else
   1191		count = size >> PAGE_SHIFT;
   1192
   1193	spin_lock_irqsave(&mapping->lock, flags);
   1194	bitmap_clear(mapping->bitmaps[bitmap_index], start, count);
   1195	spin_unlock_irqrestore(&mapping->lock, flags);
   1196}
   1197
   1198/* We'll try 2M, 1M, 64K, and finally 4K; array must end with 0! */
   1199static const int iommu_order_array[] = { 9, 8, 4, 0 };
   1200
   1201static struct page **__iommu_alloc_buffer(struct device *dev, size_t size,
   1202					  gfp_t gfp, unsigned long attrs,
   1203					  int coherent_flag)
   1204{
   1205	struct page **pages;
   1206	int count = size >> PAGE_SHIFT;
   1207	int array_size = count * sizeof(struct page *);
   1208	int i = 0;
   1209	int order_idx = 0;
   1210
   1211	if (array_size <= PAGE_SIZE)
   1212		pages = kzalloc(array_size, GFP_KERNEL);
   1213	else
   1214		pages = vzalloc(array_size);
   1215	if (!pages)
   1216		return NULL;
   1217
   1218	if (attrs & DMA_ATTR_FORCE_CONTIGUOUS)
   1219	{
   1220		unsigned long order = get_order(size);
   1221		struct page *page;
   1222
   1223		page = dma_alloc_from_contiguous(dev, count, order,
   1224						 gfp & __GFP_NOWARN);
   1225		if (!page)
   1226			goto error;
   1227
   1228		__dma_clear_buffer(page, size, coherent_flag);
   1229
   1230		for (i = 0; i < count; i++)
   1231			pages[i] = page + i;
   1232
   1233		return pages;
   1234	}
   1235
   1236	/* Go straight to 4K chunks if caller says it's OK. */
   1237	if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES)
   1238		order_idx = ARRAY_SIZE(iommu_order_array) - 1;
   1239
   1240	/*
   1241	 * IOMMU can map any pages, so himem can also be used here
   1242	 */
   1243	gfp |= __GFP_NOWARN | __GFP_HIGHMEM;
   1244
   1245	while (count) {
   1246		int j, order;
   1247
   1248		order = iommu_order_array[order_idx];
   1249
   1250		/* Drop down when we get small */
   1251		if (__fls(count) < order) {
   1252			order_idx++;
   1253			continue;
   1254		}
   1255
   1256		if (order) {
   1257			/* See if it's easy to allocate a high-order chunk */
   1258			pages[i] = alloc_pages(gfp | __GFP_NORETRY, order);
   1259
   1260			/* Go down a notch at first sign of pressure */
   1261			if (!pages[i]) {
   1262				order_idx++;
   1263				continue;
   1264			}
   1265		} else {
   1266			pages[i] = alloc_pages(gfp, 0);
   1267			if (!pages[i])
   1268				goto error;
   1269		}
   1270
   1271		if (order) {
   1272			split_page(pages[i], order);
   1273			j = 1 << order;
   1274			while (--j)
   1275				pages[i + j] = pages[i] + j;
   1276		}
   1277
   1278		__dma_clear_buffer(pages[i], PAGE_SIZE << order, coherent_flag);
   1279		i += 1 << order;
   1280		count -= 1 << order;
   1281	}
   1282
   1283	return pages;
   1284error:
   1285	while (i--)
   1286		if (pages[i])
   1287			__free_pages(pages[i], 0);
   1288	kvfree(pages);
   1289	return NULL;
   1290}
   1291
   1292static int __iommu_free_buffer(struct device *dev, struct page **pages,
   1293			       size_t size, unsigned long attrs)
   1294{
   1295	int count = size >> PAGE_SHIFT;
   1296	int i;
   1297
   1298	if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
   1299		dma_release_from_contiguous(dev, pages[0], count);
   1300	} else {
   1301		for (i = 0; i < count; i++)
   1302			if (pages[i])
   1303				__free_pages(pages[i], 0);
   1304	}
   1305
   1306	kvfree(pages);
   1307	return 0;
   1308}
   1309
   1310/*
   1311 * Create a mapping in device IO address space for specified pages
   1312 */
   1313static dma_addr_t
   1314__iommu_create_mapping(struct device *dev, struct page **pages, size_t size,
   1315		       unsigned long attrs)
   1316{
   1317	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1318	unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
   1319	dma_addr_t dma_addr, iova;
   1320	int i;
   1321
   1322	dma_addr = __alloc_iova(mapping, size);
   1323	if (dma_addr == DMA_MAPPING_ERROR)
   1324		return dma_addr;
   1325
   1326	iova = dma_addr;
   1327	for (i = 0; i < count; ) {
   1328		int ret;
   1329
   1330		unsigned int next_pfn = page_to_pfn(pages[i]) + 1;
   1331		phys_addr_t phys = page_to_phys(pages[i]);
   1332		unsigned int len, j;
   1333
   1334		for (j = i + 1; j < count; j++, next_pfn++)
   1335			if (page_to_pfn(pages[j]) != next_pfn)
   1336				break;
   1337
   1338		len = (j - i) << PAGE_SHIFT;
   1339		ret = iommu_map(mapping->domain, iova, phys, len,
   1340				__dma_info_to_prot(DMA_BIDIRECTIONAL, attrs));
   1341		if (ret < 0)
   1342			goto fail;
   1343		iova += len;
   1344		i = j;
   1345	}
   1346	return dma_addr;
   1347fail:
   1348	iommu_unmap(mapping->domain, dma_addr, iova-dma_addr);
   1349	__free_iova(mapping, dma_addr, size);
   1350	return DMA_MAPPING_ERROR;
   1351}
   1352
   1353static int __iommu_remove_mapping(struct device *dev, dma_addr_t iova, size_t size)
   1354{
   1355	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1356
   1357	/*
   1358	 * add optional in-page offset from iova to size and align
   1359	 * result to page size
   1360	 */
   1361	size = PAGE_ALIGN((iova & ~PAGE_MASK) + size);
   1362	iova &= PAGE_MASK;
   1363
   1364	iommu_unmap(mapping->domain, iova, size);
   1365	__free_iova(mapping, iova, size);
   1366	return 0;
   1367}
   1368
   1369static struct page **__atomic_get_pages(void *addr)
   1370{
   1371	struct page *page;
   1372	phys_addr_t phys;
   1373
   1374	phys = gen_pool_virt_to_phys(atomic_pool, (unsigned long)addr);
   1375	page = phys_to_page(phys);
   1376
   1377	return (struct page **)page;
   1378}
   1379
   1380static struct page **__iommu_get_pages(void *cpu_addr, unsigned long attrs)
   1381{
   1382	if (__in_atomic_pool(cpu_addr, PAGE_SIZE))
   1383		return __atomic_get_pages(cpu_addr);
   1384
   1385	if (attrs & DMA_ATTR_NO_KERNEL_MAPPING)
   1386		return cpu_addr;
   1387
   1388	return dma_common_find_pages(cpu_addr);
   1389}
   1390
   1391static void *__iommu_alloc_simple(struct device *dev, size_t size, gfp_t gfp,
   1392				  dma_addr_t *handle, int coherent_flag,
   1393				  unsigned long attrs)
   1394{
   1395	struct page *page;
   1396	void *addr;
   1397
   1398	if (coherent_flag  == COHERENT)
   1399		addr = __alloc_simple_buffer(dev, size, gfp, &page);
   1400	else
   1401		addr = __alloc_from_pool(size, &page);
   1402	if (!addr)
   1403		return NULL;
   1404
   1405	*handle = __iommu_create_mapping(dev, &page, size, attrs);
   1406	if (*handle == DMA_MAPPING_ERROR)
   1407		goto err_mapping;
   1408
   1409	return addr;
   1410
   1411err_mapping:
   1412	__free_from_pool(addr, size);
   1413	return NULL;
   1414}
   1415
   1416static void __iommu_free_atomic(struct device *dev, void *cpu_addr,
   1417			dma_addr_t handle, size_t size, int coherent_flag)
   1418{
   1419	__iommu_remove_mapping(dev, handle, size);
   1420	if (coherent_flag == COHERENT)
   1421		__dma_free_buffer(virt_to_page(cpu_addr), size);
   1422	else
   1423		__free_from_pool(cpu_addr, size);
   1424}
   1425
   1426static void *__arm_iommu_alloc_attrs(struct device *dev, size_t size,
   1427	    dma_addr_t *handle, gfp_t gfp, unsigned long attrs,
   1428	    int coherent_flag)
   1429{
   1430	pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL);
   1431	struct page **pages;
   1432	void *addr = NULL;
   1433
   1434	*handle = DMA_MAPPING_ERROR;
   1435	size = PAGE_ALIGN(size);
   1436
   1437	if (coherent_flag  == COHERENT || !gfpflags_allow_blocking(gfp))
   1438		return __iommu_alloc_simple(dev, size, gfp, handle,
   1439					    coherent_flag, attrs);
   1440
   1441	/*
   1442	 * Following is a work-around (a.k.a. hack) to prevent pages
   1443	 * with __GFP_COMP being passed to split_page() which cannot
   1444	 * handle them.  The real problem is that this flag probably
   1445	 * should be 0 on ARM as it is not supported on this
   1446	 * platform; see CONFIG_HUGETLBFS.
   1447	 */
   1448	gfp &= ~(__GFP_COMP);
   1449
   1450	pages = __iommu_alloc_buffer(dev, size, gfp, attrs, coherent_flag);
   1451	if (!pages)
   1452		return NULL;
   1453
   1454	*handle = __iommu_create_mapping(dev, pages, size, attrs);
   1455	if (*handle == DMA_MAPPING_ERROR)
   1456		goto err_buffer;
   1457
   1458	if (attrs & DMA_ATTR_NO_KERNEL_MAPPING)
   1459		return pages;
   1460
   1461	addr = dma_common_pages_remap(pages, size, prot,
   1462				   __builtin_return_address(0));
   1463	if (!addr)
   1464		goto err_mapping;
   1465
   1466	return addr;
   1467
   1468err_mapping:
   1469	__iommu_remove_mapping(dev, *handle, size);
   1470err_buffer:
   1471	__iommu_free_buffer(dev, pages, size, attrs);
   1472	return NULL;
   1473}
   1474
   1475static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
   1476	    dma_addr_t *handle, gfp_t gfp, unsigned long attrs)
   1477{
   1478	return __arm_iommu_alloc_attrs(dev, size, handle, gfp, attrs, NORMAL);
   1479}
   1480
   1481static void *arm_coherent_iommu_alloc_attrs(struct device *dev, size_t size,
   1482		    dma_addr_t *handle, gfp_t gfp, unsigned long attrs)
   1483{
   1484	return __arm_iommu_alloc_attrs(dev, size, handle, gfp, attrs, COHERENT);
   1485}
   1486
   1487static int __arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
   1488		    void *cpu_addr, dma_addr_t dma_addr, size_t size,
   1489		    unsigned long attrs)
   1490{
   1491	struct page **pages = __iommu_get_pages(cpu_addr, attrs);
   1492	unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
   1493	int err;
   1494
   1495	if (!pages)
   1496		return -ENXIO;
   1497
   1498	if (vma->vm_pgoff >= nr_pages)
   1499		return -ENXIO;
   1500
   1501	err = vm_map_pages(vma, pages, nr_pages);
   1502	if (err)
   1503		pr_err("Remapping memory failed: %d\n", err);
   1504
   1505	return err;
   1506}
   1507static int arm_iommu_mmap_attrs(struct device *dev,
   1508		struct vm_area_struct *vma, void *cpu_addr,
   1509		dma_addr_t dma_addr, size_t size, unsigned long attrs)
   1510{
   1511	vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot);
   1512
   1513	return __arm_iommu_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, attrs);
   1514}
   1515
   1516static int arm_coherent_iommu_mmap_attrs(struct device *dev,
   1517		struct vm_area_struct *vma, void *cpu_addr,
   1518		dma_addr_t dma_addr, size_t size, unsigned long attrs)
   1519{
   1520	return __arm_iommu_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, attrs);
   1521}
   1522
   1523/*
   1524 * free a page as defined by the above mapping.
   1525 * Must not be called with IRQs disabled.
   1526 */
   1527static void __arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr,
   1528	dma_addr_t handle, unsigned long attrs, int coherent_flag)
   1529{
   1530	struct page **pages;
   1531	size = PAGE_ALIGN(size);
   1532
   1533	if (coherent_flag == COHERENT || __in_atomic_pool(cpu_addr, size)) {
   1534		__iommu_free_atomic(dev, cpu_addr, handle, size, coherent_flag);
   1535		return;
   1536	}
   1537
   1538	pages = __iommu_get_pages(cpu_addr, attrs);
   1539	if (!pages) {
   1540		WARN(1, "trying to free invalid coherent area: %p\n", cpu_addr);
   1541		return;
   1542	}
   1543
   1544	if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0)
   1545		dma_common_free_remap(cpu_addr, size);
   1546
   1547	__iommu_remove_mapping(dev, handle, size);
   1548	__iommu_free_buffer(dev, pages, size, attrs);
   1549}
   1550
   1551static void arm_iommu_free_attrs(struct device *dev, size_t size,
   1552				 void *cpu_addr, dma_addr_t handle,
   1553				 unsigned long attrs)
   1554{
   1555	__arm_iommu_free_attrs(dev, size, cpu_addr, handle, attrs, NORMAL);
   1556}
   1557
   1558static void arm_coherent_iommu_free_attrs(struct device *dev, size_t size,
   1559		    void *cpu_addr, dma_addr_t handle, unsigned long attrs)
   1560{
   1561	__arm_iommu_free_attrs(dev, size, cpu_addr, handle, attrs, COHERENT);
   1562}
   1563
   1564static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt,
   1565				 void *cpu_addr, dma_addr_t dma_addr,
   1566				 size_t size, unsigned long attrs)
   1567{
   1568	unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
   1569	struct page **pages = __iommu_get_pages(cpu_addr, attrs);
   1570
   1571	if (!pages)
   1572		return -ENXIO;
   1573
   1574	return sg_alloc_table_from_pages(sgt, pages, count, 0, size,
   1575					 GFP_KERNEL);
   1576}
   1577
   1578/*
   1579 * Map a part of the scatter-gather list into contiguous io address space
   1580 */
   1581static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
   1582			  size_t size, dma_addr_t *handle,
   1583			  enum dma_data_direction dir, unsigned long attrs,
   1584			  bool is_coherent)
   1585{
   1586	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1587	dma_addr_t iova, iova_base;
   1588	int ret = 0;
   1589	unsigned int count;
   1590	struct scatterlist *s;
   1591	int prot;
   1592
   1593	size = PAGE_ALIGN(size);
   1594	*handle = DMA_MAPPING_ERROR;
   1595
   1596	iova_base = iova = __alloc_iova(mapping, size);
   1597	if (iova == DMA_MAPPING_ERROR)
   1598		return -ENOMEM;
   1599
   1600	for (count = 0, s = sg; count < (size >> PAGE_SHIFT); s = sg_next(s)) {
   1601		phys_addr_t phys = page_to_phys(sg_page(s));
   1602		unsigned int len = PAGE_ALIGN(s->offset + s->length);
   1603
   1604		if (!is_coherent && (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
   1605			__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
   1606
   1607		prot = __dma_info_to_prot(dir, attrs);
   1608
   1609		ret = iommu_map(mapping->domain, iova, phys, len, prot);
   1610		if (ret < 0)
   1611			goto fail;
   1612		count += len >> PAGE_SHIFT;
   1613		iova += len;
   1614	}
   1615	*handle = iova_base;
   1616
   1617	return 0;
   1618fail:
   1619	iommu_unmap(mapping->domain, iova_base, count * PAGE_SIZE);
   1620	__free_iova(mapping, iova_base, size);
   1621	return ret;
   1622}
   1623
   1624static int __iommu_map_sg(struct device *dev, struct scatterlist *sg, int nents,
   1625		     enum dma_data_direction dir, unsigned long attrs,
   1626		     bool is_coherent)
   1627{
   1628	struct scatterlist *s = sg, *dma = sg, *start = sg;
   1629	int i, count = 0, ret;
   1630	unsigned int offset = s->offset;
   1631	unsigned int size = s->offset + s->length;
   1632	unsigned int max = dma_get_max_seg_size(dev);
   1633
   1634	for (i = 1; i < nents; i++) {
   1635		s = sg_next(s);
   1636
   1637		s->dma_length = 0;
   1638
   1639		if (s->offset || (size & ~PAGE_MASK) || size + s->length > max) {
   1640			ret = __map_sg_chunk(dev, start, size,
   1641					     &dma->dma_address, dir, attrs,
   1642					     is_coherent);
   1643			if (ret < 0)
   1644				goto bad_mapping;
   1645
   1646			dma->dma_address += offset;
   1647			dma->dma_length = size - offset;
   1648
   1649			size = offset = s->offset;
   1650			start = s;
   1651			dma = sg_next(dma);
   1652			count += 1;
   1653		}
   1654		size += s->length;
   1655	}
   1656	ret = __map_sg_chunk(dev, start, size, &dma->dma_address, dir, attrs,
   1657			     is_coherent);
   1658	if (ret < 0)
   1659		goto bad_mapping;
   1660
   1661	dma->dma_address += offset;
   1662	dma->dma_length = size - offset;
   1663
   1664	return count+1;
   1665
   1666bad_mapping:
   1667	for_each_sg(sg, s, count, i)
   1668		__iommu_remove_mapping(dev, sg_dma_address(s), sg_dma_len(s));
   1669	if (ret == -ENOMEM)
   1670		return ret;
   1671	return -EINVAL;
   1672}
   1673
   1674/**
   1675 * arm_coherent_iommu_map_sg - map a set of SG buffers for streaming mode DMA
   1676 * @dev: valid struct device pointer
   1677 * @sg: list of buffers
   1678 * @nents: number of buffers to map
   1679 * @dir: DMA transfer direction
   1680 *
   1681 * Map a set of i/o coherent buffers described by scatterlist in streaming
   1682 * mode for DMA. The scatter gather list elements are merged together (if
   1683 * possible) and tagged with the appropriate dma address and length. They are
   1684 * obtained via sg_dma_{address,length}.
   1685 */
   1686static int arm_coherent_iommu_map_sg(struct device *dev, struct scatterlist *sg,
   1687		int nents, enum dma_data_direction dir, unsigned long attrs)
   1688{
   1689	return __iommu_map_sg(dev, sg, nents, dir, attrs, true);
   1690}
   1691
   1692/**
   1693 * arm_iommu_map_sg - map a set of SG buffers for streaming mode DMA
   1694 * @dev: valid struct device pointer
   1695 * @sg: list of buffers
   1696 * @nents: number of buffers to map
   1697 * @dir: DMA transfer direction
   1698 *
   1699 * Map a set of buffers described by scatterlist in streaming mode for DMA.
   1700 * The scatter gather list elements are merged together (if possible) and
   1701 * tagged with the appropriate dma address and length. They are obtained via
   1702 * sg_dma_{address,length}.
   1703 */
   1704static int arm_iommu_map_sg(struct device *dev, struct scatterlist *sg,
   1705		int nents, enum dma_data_direction dir, unsigned long attrs)
   1706{
   1707	return __iommu_map_sg(dev, sg, nents, dir, attrs, false);
   1708}
   1709
   1710static void __iommu_unmap_sg(struct device *dev, struct scatterlist *sg,
   1711		int nents, enum dma_data_direction dir,
   1712		unsigned long attrs, bool is_coherent)
   1713{
   1714	struct scatterlist *s;
   1715	int i;
   1716
   1717	for_each_sg(sg, s, nents, i) {
   1718		if (sg_dma_len(s))
   1719			__iommu_remove_mapping(dev, sg_dma_address(s),
   1720					       sg_dma_len(s));
   1721		if (!is_coherent && (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
   1722			__dma_page_dev_to_cpu(sg_page(s), s->offset,
   1723					      s->length, dir);
   1724	}
   1725}
   1726
   1727/**
   1728 * arm_coherent_iommu_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
   1729 * @dev: valid struct device pointer
   1730 * @sg: list of buffers
   1731 * @nents: number of buffers to unmap (same as was passed to dma_map_sg)
   1732 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1733 *
   1734 * Unmap a set of streaming mode DMA translations.  Again, CPU access
   1735 * rules concerning calls here are the same as for dma_unmap_single().
   1736 */
   1737static void arm_coherent_iommu_unmap_sg(struct device *dev,
   1738		struct scatterlist *sg, int nents, enum dma_data_direction dir,
   1739		unsigned long attrs)
   1740{
   1741	__iommu_unmap_sg(dev, sg, nents, dir, attrs, true);
   1742}
   1743
   1744/**
   1745 * arm_iommu_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
   1746 * @dev: valid struct device pointer
   1747 * @sg: list of buffers
   1748 * @nents: number of buffers to unmap (same as was passed to dma_map_sg)
   1749 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1750 *
   1751 * Unmap a set of streaming mode DMA translations.  Again, CPU access
   1752 * rules concerning calls here are the same as for dma_unmap_single().
   1753 */
   1754static void arm_iommu_unmap_sg(struct device *dev,
   1755			       struct scatterlist *sg, int nents,
   1756			       enum dma_data_direction dir,
   1757			       unsigned long attrs)
   1758{
   1759	__iommu_unmap_sg(dev, sg, nents, dir, attrs, false);
   1760}
   1761
   1762/**
   1763 * arm_iommu_sync_sg_for_cpu
   1764 * @dev: valid struct device pointer
   1765 * @sg: list of buffers
   1766 * @nents: number of buffers to map (returned from dma_map_sg)
   1767 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1768 */
   1769static void arm_iommu_sync_sg_for_cpu(struct device *dev,
   1770			struct scatterlist *sg,
   1771			int nents, enum dma_data_direction dir)
   1772{
   1773	struct scatterlist *s;
   1774	int i;
   1775
   1776	for_each_sg(sg, s, nents, i)
   1777		__dma_page_dev_to_cpu(sg_page(s), s->offset, s->length, dir);
   1778
   1779}
   1780
   1781/**
   1782 * arm_iommu_sync_sg_for_device
   1783 * @dev: valid struct device pointer
   1784 * @sg: list of buffers
   1785 * @nents: number of buffers to map (returned from dma_map_sg)
   1786 * @dir: DMA transfer direction (same as was passed to dma_map_sg)
   1787 */
   1788static void arm_iommu_sync_sg_for_device(struct device *dev,
   1789			struct scatterlist *sg,
   1790			int nents, enum dma_data_direction dir)
   1791{
   1792	struct scatterlist *s;
   1793	int i;
   1794
   1795	for_each_sg(sg, s, nents, i)
   1796		__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
   1797}
   1798
   1799
   1800/**
   1801 * arm_coherent_iommu_map_page
   1802 * @dev: valid struct device pointer
   1803 * @page: page that buffer resides in
   1804 * @offset: offset into page for start of buffer
   1805 * @size: size of buffer to map
   1806 * @dir: DMA transfer direction
   1807 *
   1808 * Coherent IOMMU aware version of arm_dma_map_page()
   1809 */
   1810static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *page,
   1811	     unsigned long offset, size_t size, enum dma_data_direction dir,
   1812	     unsigned long attrs)
   1813{
   1814	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1815	dma_addr_t dma_addr;
   1816	int ret, prot, len = PAGE_ALIGN(size + offset);
   1817
   1818	dma_addr = __alloc_iova(mapping, len);
   1819	if (dma_addr == DMA_MAPPING_ERROR)
   1820		return dma_addr;
   1821
   1822	prot = __dma_info_to_prot(dir, attrs);
   1823
   1824	ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
   1825	if (ret < 0)
   1826		goto fail;
   1827
   1828	return dma_addr + offset;
   1829fail:
   1830	__free_iova(mapping, dma_addr, len);
   1831	return DMA_MAPPING_ERROR;
   1832}
   1833
   1834/**
   1835 * arm_iommu_map_page
   1836 * @dev: valid struct device pointer
   1837 * @page: page that buffer resides in
   1838 * @offset: offset into page for start of buffer
   1839 * @size: size of buffer to map
   1840 * @dir: DMA transfer direction
   1841 *
   1842 * IOMMU aware version of arm_dma_map_page()
   1843 */
   1844static dma_addr_t arm_iommu_map_page(struct device *dev, struct page *page,
   1845	     unsigned long offset, size_t size, enum dma_data_direction dir,
   1846	     unsigned long attrs)
   1847{
   1848	if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
   1849		__dma_page_cpu_to_dev(page, offset, size, dir);
   1850
   1851	return arm_coherent_iommu_map_page(dev, page, offset, size, dir, attrs);
   1852}
   1853
   1854/**
   1855 * arm_coherent_iommu_unmap_page
   1856 * @dev: valid struct device pointer
   1857 * @handle: DMA address of buffer
   1858 * @size: size of buffer (same as passed to dma_map_page)
   1859 * @dir: DMA transfer direction (same as passed to dma_map_page)
   1860 *
   1861 * Coherent IOMMU aware version of arm_dma_unmap_page()
   1862 */
   1863static void arm_coherent_iommu_unmap_page(struct device *dev, dma_addr_t handle,
   1864		size_t size, enum dma_data_direction dir, unsigned long attrs)
   1865{
   1866	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1867	dma_addr_t iova = handle & PAGE_MASK;
   1868	int offset = handle & ~PAGE_MASK;
   1869	int len = PAGE_ALIGN(size + offset);
   1870
   1871	if (!iova)
   1872		return;
   1873
   1874	iommu_unmap(mapping->domain, iova, len);
   1875	__free_iova(mapping, iova, len);
   1876}
   1877
   1878/**
   1879 * arm_iommu_unmap_page
   1880 * @dev: valid struct device pointer
   1881 * @handle: DMA address of buffer
   1882 * @size: size of buffer (same as passed to dma_map_page)
   1883 * @dir: DMA transfer direction (same as passed to dma_map_page)
   1884 *
   1885 * IOMMU aware version of arm_dma_unmap_page()
   1886 */
   1887static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
   1888		size_t size, enum dma_data_direction dir, unsigned long attrs)
   1889{
   1890	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1891	dma_addr_t iova = handle & PAGE_MASK;
   1892	struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
   1893	int offset = handle & ~PAGE_MASK;
   1894	int len = PAGE_ALIGN(size + offset);
   1895
   1896	if (!iova)
   1897		return;
   1898
   1899	if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
   1900		__dma_page_dev_to_cpu(page, offset, size, dir);
   1901
   1902	iommu_unmap(mapping->domain, iova, len);
   1903	__free_iova(mapping, iova, len);
   1904}
   1905
   1906/**
   1907 * arm_iommu_map_resource - map a device resource for DMA
   1908 * @dev: valid struct device pointer
   1909 * @phys_addr: physical address of resource
   1910 * @size: size of resource to map
   1911 * @dir: DMA transfer direction
   1912 */
   1913static dma_addr_t arm_iommu_map_resource(struct device *dev,
   1914		phys_addr_t phys_addr, size_t size,
   1915		enum dma_data_direction dir, unsigned long attrs)
   1916{
   1917	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1918	dma_addr_t dma_addr;
   1919	int ret, prot;
   1920	phys_addr_t addr = phys_addr & PAGE_MASK;
   1921	unsigned int offset = phys_addr & ~PAGE_MASK;
   1922	size_t len = PAGE_ALIGN(size + offset);
   1923
   1924	dma_addr = __alloc_iova(mapping, len);
   1925	if (dma_addr == DMA_MAPPING_ERROR)
   1926		return dma_addr;
   1927
   1928	prot = __dma_info_to_prot(dir, attrs) | IOMMU_MMIO;
   1929
   1930	ret = iommu_map(mapping->domain, dma_addr, addr, len, prot);
   1931	if (ret < 0)
   1932		goto fail;
   1933
   1934	return dma_addr + offset;
   1935fail:
   1936	__free_iova(mapping, dma_addr, len);
   1937	return DMA_MAPPING_ERROR;
   1938}
   1939
   1940/**
   1941 * arm_iommu_unmap_resource - unmap a device DMA resource
   1942 * @dev: valid struct device pointer
   1943 * @dma_handle: DMA address to resource
   1944 * @size: size of resource to map
   1945 * @dir: DMA transfer direction
   1946 */
   1947static void arm_iommu_unmap_resource(struct device *dev, dma_addr_t dma_handle,
   1948		size_t size, enum dma_data_direction dir,
   1949		unsigned long attrs)
   1950{
   1951	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1952	dma_addr_t iova = dma_handle & PAGE_MASK;
   1953	unsigned int offset = dma_handle & ~PAGE_MASK;
   1954	size_t len = PAGE_ALIGN(size + offset);
   1955
   1956	if (!iova)
   1957		return;
   1958
   1959	iommu_unmap(mapping->domain, iova, len);
   1960	__free_iova(mapping, iova, len);
   1961}
   1962
   1963static void arm_iommu_sync_single_for_cpu(struct device *dev,
   1964		dma_addr_t handle, size_t size, enum dma_data_direction dir)
   1965{
   1966	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1967	dma_addr_t iova = handle & PAGE_MASK;
   1968	struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
   1969	unsigned int offset = handle & ~PAGE_MASK;
   1970
   1971	if (!iova)
   1972		return;
   1973
   1974	__dma_page_dev_to_cpu(page, offset, size, dir);
   1975}
   1976
   1977static void arm_iommu_sync_single_for_device(struct device *dev,
   1978		dma_addr_t handle, size_t size, enum dma_data_direction dir)
   1979{
   1980	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   1981	dma_addr_t iova = handle & PAGE_MASK;
   1982	struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
   1983	unsigned int offset = handle & ~PAGE_MASK;
   1984
   1985	if (!iova)
   1986		return;
   1987
   1988	__dma_page_cpu_to_dev(page, offset, size, dir);
   1989}
   1990
   1991static const struct dma_map_ops iommu_ops = {
   1992	.alloc		= arm_iommu_alloc_attrs,
   1993	.free		= arm_iommu_free_attrs,
   1994	.mmap		= arm_iommu_mmap_attrs,
   1995	.get_sgtable	= arm_iommu_get_sgtable,
   1996
   1997	.map_page		= arm_iommu_map_page,
   1998	.unmap_page		= arm_iommu_unmap_page,
   1999	.sync_single_for_cpu	= arm_iommu_sync_single_for_cpu,
   2000	.sync_single_for_device	= arm_iommu_sync_single_for_device,
   2001
   2002	.map_sg			= arm_iommu_map_sg,
   2003	.unmap_sg		= arm_iommu_unmap_sg,
   2004	.sync_sg_for_cpu	= arm_iommu_sync_sg_for_cpu,
   2005	.sync_sg_for_device	= arm_iommu_sync_sg_for_device,
   2006
   2007	.map_resource		= arm_iommu_map_resource,
   2008	.unmap_resource		= arm_iommu_unmap_resource,
   2009
   2010	.dma_supported		= arm_dma_supported,
   2011};
   2012
   2013static const struct dma_map_ops iommu_coherent_ops = {
   2014	.alloc		= arm_coherent_iommu_alloc_attrs,
   2015	.free		= arm_coherent_iommu_free_attrs,
   2016	.mmap		= arm_coherent_iommu_mmap_attrs,
   2017	.get_sgtable	= arm_iommu_get_sgtable,
   2018
   2019	.map_page	= arm_coherent_iommu_map_page,
   2020	.unmap_page	= arm_coherent_iommu_unmap_page,
   2021
   2022	.map_sg		= arm_coherent_iommu_map_sg,
   2023	.unmap_sg	= arm_coherent_iommu_unmap_sg,
   2024
   2025	.map_resource	= arm_iommu_map_resource,
   2026	.unmap_resource	= arm_iommu_unmap_resource,
   2027
   2028	.dma_supported		= arm_dma_supported,
   2029};
   2030
   2031/**
   2032 * arm_iommu_create_mapping
   2033 * @bus: pointer to the bus holding the client device (for IOMMU calls)
   2034 * @base: start address of the valid IO address space
   2035 * @size: maximum size of the valid IO address space
   2036 *
   2037 * Creates a mapping structure which holds information about used/unused
   2038 * IO address ranges, which is required to perform memory allocation and
   2039 * mapping with IOMMU aware functions.
   2040 *
   2041 * The client device need to be attached to the mapping with
   2042 * arm_iommu_attach_device function.
   2043 */
   2044struct dma_iommu_mapping *
   2045arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, u64 size)
   2046{
   2047	unsigned int bits = size >> PAGE_SHIFT;
   2048	unsigned int bitmap_size = BITS_TO_LONGS(bits) * sizeof(long);
   2049	struct dma_iommu_mapping *mapping;
   2050	int extensions = 1;
   2051	int err = -ENOMEM;
   2052
   2053	/* currently only 32-bit DMA address space is supported */
   2054	if (size > DMA_BIT_MASK(32) + 1)
   2055		return ERR_PTR(-ERANGE);
   2056
   2057	if (!bitmap_size)
   2058		return ERR_PTR(-EINVAL);
   2059
   2060	if (bitmap_size > PAGE_SIZE) {
   2061		extensions = bitmap_size / PAGE_SIZE;
   2062		bitmap_size = PAGE_SIZE;
   2063	}
   2064
   2065	mapping = kzalloc(sizeof(struct dma_iommu_mapping), GFP_KERNEL);
   2066	if (!mapping)
   2067		goto err;
   2068
   2069	mapping->bitmap_size = bitmap_size;
   2070	mapping->bitmaps = kcalloc(extensions, sizeof(unsigned long *),
   2071				   GFP_KERNEL);
   2072	if (!mapping->bitmaps)
   2073		goto err2;
   2074
   2075	mapping->bitmaps[0] = kzalloc(bitmap_size, GFP_KERNEL);
   2076	if (!mapping->bitmaps[0])
   2077		goto err3;
   2078
   2079	mapping->nr_bitmaps = 1;
   2080	mapping->extensions = extensions;
   2081	mapping->base = base;
   2082	mapping->bits = BITS_PER_BYTE * bitmap_size;
   2083
   2084	spin_lock_init(&mapping->lock);
   2085
   2086	mapping->domain = iommu_domain_alloc(bus);
   2087	if (!mapping->domain)
   2088		goto err4;
   2089
   2090	kref_init(&mapping->kref);
   2091	return mapping;
   2092err4:
   2093	kfree(mapping->bitmaps[0]);
   2094err3:
   2095	kfree(mapping->bitmaps);
   2096err2:
   2097	kfree(mapping);
   2098err:
   2099	return ERR_PTR(err);
   2100}
   2101EXPORT_SYMBOL_GPL(arm_iommu_create_mapping);
   2102
   2103static void release_iommu_mapping(struct kref *kref)
   2104{
   2105	int i;
   2106	struct dma_iommu_mapping *mapping =
   2107		container_of(kref, struct dma_iommu_mapping, kref);
   2108
   2109	iommu_domain_free(mapping->domain);
   2110	for (i = 0; i < mapping->nr_bitmaps; i++)
   2111		kfree(mapping->bitmaps[i]);
   2112	kfree(mapping->bitmaps);
   2113	kfree(mapping);
   2114}
   2115
   2116static int extend_iommu_mapping(struct dma_iommu_mapping *mapping)
   2117{
   2118	int next_bitmap;
   2119
   2120	if (mapping->nr_bitmaps >= mapping->extensions)
   2121		return -EINVAL;
   2122
   2123	next_bitmap = mapping->nr_bitmaps;
   2124	mapping->bitmaps[next_bitmap] = kzalloc(mapping->bitmap_size,
   2125						GFP_ATOMIC);
   2126	if (!mapping->bitmaps[next_bitmap])
   2127		return -ENOMEM;
   2128
   2129	mapping->nr_bitmaps++;
   2130
   2131	return 0;
   2132}
   2133
   2134void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping)
   2135{
   2136	if (mapping)
   2137		kref_put(&mapping->kref, release_iommu_mapping);
   2138}
   2139EXPORT_SYMBOL_GPL(arm_iommu_release_mapping);
   2140
   2141static int __arm_iommu_attach_device(struct device *dev,
   2142				     struct dma_iommu_mapping *mapping)
   2143{
   2144	int err;
   2145
   2146	err = iommu_attach_device(mapping->domain, dev);
   2147	if (err)
   2148		return err;
   2149
   2150	kref_get(&mapping->kref);
   2151	to_dma_iommu_mapping(dev) = mapping;
   2152
   2153	pr_debug("Attached IOMMU controller to %s device.\n", dev_name(dev));
   2154	return 0;
   2155}
   2156
   2157/**
   2158 * arm_iommu_attach_device
   2159 * @dev: valid struct device pointer
   2160 * @mapping: io address space mapping structure (returned from
   2161 *	arm_iommu_create_mapping)
   2162 *
   2163 * Attaches specified io address space mapping to the provided device.
   2164 * This replaces the dma operations (dma_map_ops pointer) with the
   2165 * IOMMU aware version.
   2166 *
   2167 * More than one client might be attached to the same io address space
   2168 * mapping.
   2169 */
   2170int arm_iommu_attach_device(struct device *dev,
   2171			    struct dma_iommu_mapping *mapping)
   2172{
   2173	int err;
   2174
   2175	err = __arm_iommu_attach_device(dev, mapping);
   2176	if (err)
   2177		return err;
   2178
   2179	set_dma_ops(dev, &iommu_ops);
   2180	return 0;
   2181}
   2182EXPORT_SYMBOL_GPL(arm_iommu_attach_device);
   2183
   2184/**
   2185 * arm_iommu_detach_device
   2186 * @dev: valid struct device pointer
   2187 *
   2188 * Detaches the provided device from a previously attached map.
   2189 * This overwrites the dma_ops pointer with appropriate non-IOMMU ops.
   2190 */
   2191void arm_iommu_detach_device(struct device *dev)
   2192{
   2193	struct dma_iommu_mapping *mapping;
   2194
   2195	mapping = to_dma_iommu_mapping(dev);
   2196	if (!mapping) {
   2197		dev_warn(dev, "Not attached\n");
   2198		return;
   2199	}
   2200
   2201	iommu_detach_device(mapping->domain, dev);
   2202	kref_put(&mapping->kref, release_iommu_mapping);
   2203	to_dma_iommu_mapping(dev) = NULL;
   2204	set_dma_ops(dev, arm_get_dma_map_ops(dev->archdata.dma_coherent));
   2205
   2206	pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev));
   2207}
   2208EXPORT_SYMBOL_GPL(arm_iommu_detach_device);
   2209
   2210static const struct dma_map_ops *arm_get_iommu_dma_map_ops(bool coherent)
   2211{
   2212	return coherent ? &iommu_coherent_ops : &iommu_ops;
   2213}
   2214
   2215static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size,
   2216				    const struct iommu_ops *iommu)
   2217{
   2218	struct dma_iommu_mapping *mapping;
   2219
   2220	if (!iommu)
   2221		return false;
   2222
   2223	mapping = arm_iommu_create_mapping(dev->bus, dma_base, size);
   2224	if (IS_ERR(mapping)) {
   2225		pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
   2226				size, dev_name(dev));
   2227		return false;
   2228	}
   2229
   2230	if (__arm_iommu_attach_device(dev, mapping)) {
   2231		pr_warn("Failed to attached device %s to IOMMU_mapping\n",
   2232				dev_name(dev));
   2233		arm_iommu_release_mapping(mapping);
   2234		return false;
   2235	}
   2236
   2237	return true;
   2238}
   2239
   2240static void arm_teardown_iommu_dma_ops(struct device *dev)
   2241{
   2242	struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
   2243
   2244	if (!mapping)
   2245		return;
   2246
   2247	arm_iommu_detach_device(dev);
   2248	arm_iommu_release_mapping(mapping);
   2249}
   2250
   2251#else
   2252
   2253static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size,
   2254				    const struct iommu_ops *iommu)
   2255{
   2256	return false;
   2257}
   2258
   2259static void arm_teardown_iommu_dma_ops(struct device *dev) { }
   2260
   2261#define arm_get_iommu_dma_map_ops arm_get_dma_map_ops
   2262
   2263#endif	/* CONFIG_ARM_DMA_USE_IOMMU */
   2264
   2265void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
   2266			const struct iommu_ops *iommu, bool coherent)
   2267{
   2268	const struct dma_map_ops *dma_ops;
   2269
   2270	dev->archdata.dma_coherent = coherent;
   2271#ifdef CONFIG_SWIOTLB
   2272	dev->dma_coherent = coherent;
   2273#endif
   2274
   2275	/*
   2276	 * Don't override the dma_ops if they have already been set. Ideally
   2277	 * this should be the only location where dma_ops are set, remove this
   2278	 * check when all other callers of set_dma_ops will have disappeared.
   2279	 */
   2280	if (dev->dma_ops)
   2281		return;
   2282
   2283	if (arm_setup_iommu_dma_ops(dev, dma_base, size, iommu))
   2284		dma_ops = arm_get_iommu_dma_map_ops(coherent);
   2285	else
   2286		dma_ops = arm_get_dma_map_ops(coherent);
   2287
   2288	set_dma_ops(dev, dma_ops);
   2289
   2290	xen_setup_dma_ops(dev);
   2291	dev->archdata.dma_ops_setup = true;
   2292}
   2293
   2294void arch_teardown_dma_ops(struct device *dev)
   2295{
   2296	if (!dev->archdata.dma_ops_setup)
   2297		return;
   2298
   2299	arm_teardown_iommu_dma_ops(dev);
   2300	/* Let arch_setup_dma_ops() start again from scratch upon re-probe */
   2301	set_dma_ops(dev, NULL);
   2302}
   2303
   2304#ifdef CONFIG_SWIOTLB
   2305void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
   2306		enum dma_data_direction dir)
   2307{
   2308	__dma_page_cpu_to_dev(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
   2309			      size, dir);
   2310}
   2311
   2312void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
   2313		enum dma_data_direction dir)
   2314{
   2315	__dma_page_dev_to_cpu(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
   2316			      size, dir);
   2317}
   2318
   2319void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
   2320		gfp_t gfp, unsigned long attrs)
   2321{
   2322	return __dma_alloc(dev, size, dma_handle, gfp,
   2323			   __get_dma_pgprot(attrs, PAGE_KERNEL), false,
   2324			   attrs, __builtin_return_address(0));
   2325}
   2326
   2327void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
   2328		dma_addr_t dma_handle, unsigned long attrs)
   2329{
   2330	__arm_dma_free(dev, size, cpu_addr, dma_handle, attrs, false);
   2331}
   2332#endif /* CONFIG_SWIOTLB */