linux/arch/arm/mm/dma-mapping.c
<<
>>
Prefs
   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 <xen/swiotlb-xen.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#ifdef CONFIG_XEN
2291        if (xen_initial_domain())
2292                dev->dma_ops = &xen_swiotlb_dma_ops;
2293#endif
2294        dev->archdata.dma_ops_setup = true;
2295}
2296
2297void arch_teardown_dma_ops(struct device *dev)
2298{
2299        if (!dev->archdata.dma_ops_setup)
2300                return;
2301
2302        arm_teardown_iommu_dma_ops(dev);
2303        /* Let arch_setup_dma_ops() start again from scratch upon re-probe */
2304        set_dma_ops(dev, NULL);
2305}
2306
2307#ifdef CONFIG_SWIOTLB
2308void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
2309                enum dma_data_direction dir)
2310{
2311        __dma_page_cpu_to_dev(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
2312                              size, dir);
2313}
2314
2315void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
2316                enum dma_data_direction dir)
2317{
2318        __dma_page_dev_to_cpu(phys_to_page(paddr), paddr & (PAGE_SIZE - 1),
2319                              size, dir);
2320}
2321
2322void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
2323                gfp_t gfp, unsigned long attrs)
2324{
2325        return __dma_alloc(dev, size, dma_handle, gfp,
2326                           __get_dma_pgprot(attrs, PAGE_KERNEL), false,
2327                           attrs, __builtin_return_address(0));
2328}
2329
2330void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
2331                dma_addr_t dma_handle, unsigned long attrs)
2332{
2333        __arm_dma_free(dev, size, cpu_addr, dma_handle, attrs, false);
2334}
2335#endif /* CONFIG_SWIOTLB */
2336