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 */