1 /* 2 * linux/arch/arm/mm/dma-mapping.c 3 * 4 * Copyright (C) 2000-2004 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * DMA uncached mapping support. 11 */ 12 #include <linux/module.h> 13 #include <linux/mm.h> 14 #include <linux/gfp.h> 15 #include <linux/errno.h> 16 #include <linux/list.h> 17 #include <linux/init.h> 18 #include <linux/device.h> 19 #include <linux/dma-mapping.h> 20 #include <linux/highmem.h> 21 #include <linux/slab.h> 22 23 #include <asm/memory.h> 24 #include <asm/highmem.h> 25 #include <asm/cacheflush.h> 26 #include <asm/tlbflush.h> 27 #include <asm/sizes.h> 28 #include <asm/mach/arch.h> 29 30 #include "mm.h" 31 32 static u64 get_coherent_dma_mask(struct device *dev) 33 { 34 u64 mask = (u64)arm_dma_limit; 35 36 if (dev) { 37 mask = dev->coherent_dma_mask; 38 39 /* 40 * Sanity check the DMA mask - it must be non-zero, and 41 * must be able to be satisfied by a DMA allocation. 42 */ 43 if (mask == 0) { 44 dev_warn(dev, "coherent DMA mask is unset\n"); 45 return 0; 46 } 47 48 if ((~mask) & (u64)arm_dma_limit) { 49 dev_warn(dev, "coherent DMA mask %#llx is smaller " 50 "than system GFP_DMA mask %#llx\n", 51 mask, (u64)arm_dma_limit); 52 return 0; 53 } 54 } 55 56 return mask; 57 } 58 59 /* 60 * Allocate a DMA buffer for 'dev' of size 'size' using the 61 * specified gfp mask. Note that 'size' must be page aligned. 62 */ 63 static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp) 64 { 65 unsigned long order = get_order(size); 66 struct page *page, *p, *e; 67 void *ptr; 68 u64 mask = get_coherent_dma_mask(dev); 69 70 #ifdef CONFIG_DMA_API_DEBUG 71 u64 limit = (mask + 1) & ~mask; 72 if (limit && size >= limit) { 73 dev_warn(dev, "coherent allocation too big (requested %#x mask %#llx)\n", 74 size, mask); 75 return NULL; 76 } 77 #endif 78 79 if (!mask) 80 return NULL; 81 82 if (mask < 0xffffffffULL) 83 gfp |= GFP_DMA; 84 85 page = alloc_pages(gfp, order); 86 if (!page) 87 return NULL; 88 89 /* 90 * Now split the huge page and free the excess pages 91 */ 92 split_page(page, order); 93 for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++) 94 __free_page(p); 95 96 /* 97 * Ensure that the allocated pages are zeroed, and that any data 98 * lurking in the kernel direct-mapped region is invalidated. 99 */ 100 ptr = page_address(page); 101 memset(ptr, 0, size); 102 dmac_flush_range(ptr, ptr + size); 103 outer_flush_range(__pa(ptr), __pa(ptr) + size); 104 105 return page; 106 } 107 108 /* 109 * Free a DMA buffer. 'size' must be page aligned. 110 */ 111 static void __dma_free_buffer(struct page *page, size_t size) 112 { 113 struct page *e = page + (size >> PAGE_SHIFT); 114 115 while (page < e) { 116 __free_page(page); 117 page++; 118 } 119 } 120 121 #ifdef CONFIG_MMU 122 123 #define CONSISTENT_OFFSET(x) (((unsigned long)(x) - consistent_base) >> PAGE_SHIFT) 124 #define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - consistent_base) >> PMD_SHIFT) 125 126 /* 127 * These are the page tables (2MB each) covering uncached, DMA consistent allocations 128 */ 129 static pte_t **consistent_pte; 130 131 #define DEFAULT_CONSISTENT_DMA_SIZE SZ_2M 132 133 unsigned long consistent_base = CONSISTENT_END - DEFAULT_CONSISTENT_DMA_SIZE; 134 135 void __init init_consistent_dma_size(unsigned long size) 136 { 137 unsigned long base = CONSISTENT_END - ALIGN(size, SZ_2M); 138 139 BUG_ON(consistent_pte); /* Check we're called before DMA region init */ 140 BUG_ON(base < VMALLOC_END); 141 142 /* Grow region to accommodate specified size */ 143 if (base < consistent_base) 144 consistent_base = base; 145 } 146 147 #include "vmregion.h" 148 149 static struct arm_vmregion_head consistent_head = { 150 .vm_lock = __SPIN_LOCK_UNLOCKED(&consistent_head.vm_lock), 151 .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), 152 .vm_end = CONSISTENT_END, 153 }; 154 155 #ifdef CONFIG_HUGETLB_PAGE 156 #error ARM Coherent DMA allocator does not (yet) support huge TLB 157 #endif 158 159 /* 160 * Initialise the consistent memory allocation. 161 */ 162 static int __init consistent_init(void) 163 { 164 int ret = 0; 165 pgd_t *pgd; 166 pud_t *pud; 167 pmd_t *pmd; 168 pte_t *pte; 169 int i = 0; 170 unsigned long base = consistent_base; 171 unsigned long num_ptes = (CONSISTENT_END - base) >> PMD_SHIFT; 172 173 consistent_pte = kmalloc(num_ptes * sizeof(pte_t), GFP_KERNEL); 174 if (!consistent_pte) { 175 pr_err("%s: no memory\n", __func__); 176 return -ENOMEM; 177 } 178 179 pr_debug("DMA memory: 0x%08lx - 0x%08lx:\n", base, CONSISTENT_END); 180 consistent_head.vm_start = base; 181 182 do { 183 pgd = pgd_offset(&init_mm, base); 184 185 pud = pud_alloc(&init_mm, pgd, base); 186 if (!pud) { 187 printk(KERN_ERR "%s: no pud tables\n", __func__); 188 ret = -ENOMEM; 189 break; 190 } 191 192 pmd = pmd_alloc(&init_mm, pud, base); 193 if (!pmd) { 194 printk(KERN_ERR "%s: no pmd tables\n", __func__); 195 ret = -ENOMEM; 196 break; 197 } 198 WARN_ON(!pmd_none(*pmd)); 199 200 pte = pte_alloc_kernel(pmd, base); 201 if (!pte) { 202 printk(KERN_ERR "%s: no pte tables\n", __func__); 203 ret = -ENOMEM; 204 break; 205 } 206 207 consistent_pte[i++] = pte; 208 base += PMD_SIZE; 209 } while (base < CONSISTENT_END); 210 211 return ret; 212 } 213 214 core_initcall(consistent_init); 215 216 static void * 217 __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot, 218 const void *caller) 219 { 220 struct arm_vmregion *c; 221 size_t align; 222 int bit; 223 224 if (!consistent_pte) { 225 printk(KERN_ERR "%s: not initialised\n", __func__); 226 dump_stack(); 227 return NULL; 228 } 229 230 /* 231 * Align the virtual region allocation - maximum alignment is 232 * a section size, minimum is a page size. This helps reduce 233 * fragmentation of the DMA space, and also prevents allocations 234 * smaller than a section from crossing a section boundary. 235 */ 236 bit = fls(size - 1); 237 if (bit > SECTION_SHIFT) 238 bit = SECTION_SHIFT; 239 align = 1 << bit; 240 241 /* 242 * Allocate a virtual address in the consistent mapping region. 243 */ 244 c = arm_vmregion_alloc(&consistent_head, align, size, 245 gfp & ~(__GFP_DMA | __GFP_HIGHMEM), caller); 246 if (c) { 247 pte_t *pte; 248 int idx = CONSISTENT_PTE_INDEX(c->vm_start); 249 u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); 250 251 pte = consistent_pte[idx] + off; 252 c->vm_pages = page; 253 254 do { 255 BUG_ON(!pte_none(*pte)); 256 257 set_pte_ext(pte, mk_pte(page, prot), 0); 258 page++; 259 pte++; 260 off++; 261 if (off >= PTRS_PER_PTE) { 262 off = 0; 263 pte = consistent_pte[++idx]; 264 } 265 } while (size -= PAGE_SIZE); 266 267 dsb(); 268 269 return (void *)c->vm_start; 270 } 271 return NULL; 272 } 273 274 static void __dma_free_remap(void *cpu_addr, size_t size) 275 { 276 struct arm_vmregion *c; 277 unsigned long addr; 278 pte_t *ptep; 279 int idx; 280 u32 off; 281 282 c = arm_vmregion_find_remove(&consistent_head, (unsigned long)cpu_addr); 283 if (!c) { 284 printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", 285 __func__, cpu_addr); 286 dump_stack(); 287 return; 288 } 289 290 if ((c->vm_end - c->vm_start) != size) { 291 printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", 292 __func__, c->vm_end - c->vm_start, size); 293 dump_stack(); 294 size = c->vm_end - c->vm_start; 295 } 296 297 idx = CONSISTENT_PTE_INDEX(c->vm_start); 298 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); 299 ptep = consistent_pte[idx] + off; 300 addr = c->vm_start; 301 do { 302 pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); 303 304 ptep++; 305 addr += PAGE_SIZE; 306 off++; 307 if (off >= PTRS_PER_PTE) { 308 off = 0; 309 ptep = consistent_pte[++idx]; 310 } 311 312 if (pte_none(pte) || !pte_present(pte)) 313 printk(KERN_CRIT "%s: bad page in kernel page table\n", 314 __func__); 315 } while (size -= PAGE_SIZE); 316 317 flush_tlb_kernel_range(c->vm_start, c->vm_end); 318 319 arm_vmregion_free(&consistent_head, c); 320 } 321 322 #else /* !CONFIG_MMU */ 323 324 #define __dma_alloc_remap(page, size, gfp, prot, c) page_address(page) 325 #define __dma_free_remap(addr, size) do { } while (0) 326 327 #endif /* CONFIG_MMU */ 328 329 static void * 330 __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, 331 pgprot_t prot, const void *caller) 332 { 333 struct page *page; 334 void *addr; 335 336 /* 337 * Following is a work-around (a.k.a. hack) to prevent pages 338 * with __GFP_COMP being passed to split_page() which cannot 339 * handle them. The real problem is that this flag probably 340 * should be 0 on ARM as it is not supported on this 341 * platform; see CONFIG_HUGETLBFS. 342 */ 343 gfp &= ~(__GFP_COMP); 344 345 *handle = ~0; 346 size = PAGE_ALIGN(size); 347 348 page = __dma_alloc_buffer(dev, size, gfp); 349 if (!page) 350 return NULL; 351 352 if (!arch_is_coherent()) 353 addr = __dma_alloc_remap(page, size, gfp, prot, caller); 354 else 355 addr = page_address(page); 356 357 if (addr) 358 *handle = pfn_to_dma(dev, page_to_pfn(page)); 359 else 360 __dma_free_buffer(page, size); 361 362 return addr; 363 } 364 365 /* 366 * Allocate DMA-coherent memory space and return both the kernel remapped 367 * virtual and bus address for that space. 368 */ 369 void * 370 dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp) 371 { 372 void *memory; 373 374 if (dma_alloc_from_coherent(dev, size, handle, &memory)) 375 return memory; 376 377 return __dma_alloc(dev, size, handle, gfp, 378 pgprot_dmacoherent(pgprot_kernel), 379 __builtin_return_address(0)); 380 } 381 EXPORT_SYMBOL(dma_alloc_coherent); 382 383 /* 384 * Allocate a writecombining region, in much the same way as 385 * dma_alloc_coherent above. 386 */ 387 void * 388 dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp) 389 { 390 return __dma_alloc(dev, size, handle, gfp, 391 pgprot_writecombine(pgprot_kernel), 392 __builtin_return_address(0)); 393 } 394 EXPORT_SYMBOL(dma_alloc_writecombine); 395 396 static int dma_mmap(struct device *dev, struct vm_area_struct *vma, 397 void *cpu_addr, dma_addr_t dma_addr, size_t size) 398 { 399 int ret = -ENXIO; 400 #ifdef CONFIG_MMU 401 unsigned long user_size, kern_size; 402 struct arm_vmregion *c; 403 404 user_size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; 405 406 c = arm_vmregion_find(&consistent_head, (unsigned long)cpu_addr); 407 if (c) { 408 unsigned long off = vma->vm_pgoff; 409 410 kern_size = (c->vm_end - c->vm_start) >> PAGE_SHIFT; 411 412 if (off < kern_size && 413 user_size <= (kern_size - off)) { 414 ret = remap_pfn_range(vma, vma->vm_start, 415 page_to_pfn(c->vm_pages) + off, 416 user_size << PAGE_SHIFT, 417 vma->vm_page_prot); 418 } 419 } 420 #endif /* CONFIG_MMU */ 421 422 return ret; 423 } 424 425 int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, 426 void *cpu_addr, dma_addr_t dma_addr, size_t size) 427 { 428 vma->vm_page_prot = pgprot_dmacoherent(vma->vm_page_prot); 429 return dma_mmap(dev, vma, cpu_addr, dma_addr, size); 430 } 431 EXPORT_SYMBOL(dma_mmap_coherent); 432 433 int dma_mmap_writecombine(struct device *dev, struct vm_area_struct *vma, 434 void *cpu_addr, dma_addr_t dma_addr, size_t size) 435 { 436 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); 437 return dma_mmap(dev, vma, cpu_addr, dma_addr, size); 438 } 439 EXPORT_SYMBOL(dma_mmap_writecombine); 440 441 /* 442 * free a page as defined by the above mapping. 443 * Must not be called with IRQs disabled. 444 */ 445 void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) 446 { 447 WARN_ON(irqs_disabled()); 448 449 if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) 450 return; 451 452 size = PAGE_ALIGN(size); 453 454 if (!arch_is_coherent()) 455 __dma_free_remap(cpu_addr, size); 456 457 __dma_free_buffer(pfn_to_page(dma_to_pfn(dev, handle)), size); 458 } 459 EXPORT_SYMBOL(dma_free_coherent); 460 461 /* 462 * Make an area consistent for devices. 463 * Note: Drivers should NOT use this function directly, as it will break 464 * platforms with CONFIG_DMABOUNCE. 465 * Use the driver DMA support - see dma-mapping.h (dma_sync_*) 466 */ 467 void ___dma_single_cpu_to_dev(const void *kaddr, size_t size, 468 enum dma_data_direction dir) 469 { 470 unsigned long paddr; 471 472 BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1)); 473 474 dmac_map_area(kaddr, size, dir); 475 476 paddr = __pa(kaddr); 477 if (dir == DMA_FROM_DEVICE) { 478 outer_inv_range(paddr, paddr + size); 479 } else { 480 outer_clean_range(paddr, paddr + size); 481 } 482 /* FIXME: non-speculating: flush on bidirectional mappings? */ 483 } 484 EXPORT_SYMBOL(___dma_single_cpu_to_dev); 485 486 void ___dma_single_dev_to_cpu(const void *kaddr, size_t size, 487 enum dma_data_direction dir) 488 { 489 BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1)); 490 491 /* FIXME: non-speculating: not required */ 492 /* don't bother invalidating if DMA to device */ 493 if (dir != DMA_TO_DEVICE) { 494 unsigned long paddr = __pa(kaddr); 495 outer_inv_range(paddr, paddr + size); 496 } 497 498 dmac_unmap_area(kaddr, size, dir); 499 } 500 EXPORT_SYMBOL(___dma_single_dev_to_cpu); 501 502 static void dma_cache_maint_page(struct page *page, unsigned long offset, 503 size_t size, enum dma_data_direction dir, 504 void (*op)(const void *, size_t, int)) 505 { 506 /* 507 * A single sg entry may refer to multiple physically contiguous 508 * pages. But we still need to process highmem pages individually. 509 * If highmem is not configured then the bulk of this loop gets 510 * optimized out. 511 */ 512 size_t left = size; 513 do { 514 size_t len = left; 515 void *vaddr; 516 517 if (PageHighMem(page)) { 518 if (len + offset > PAGE_SIZE) { 519 if (offset >= PAGE_SIZE) { 520 page += offset / PAGE_SIZE; 521 offset %= PAGE_SIZE; 522 } 523 len = PAGE_SIZE - offset; 524 } 525 vaddr = kmap_high_get(page); 526 if (vaddr) { 527 vaddr += offset; 528 op(vaddr, len, dir); 529 kunmap_high(page); 530 } else if (cache_is_vipt()) { 531 /* unmapped pages might still be cached */ 532 vaddr = kmap_atomic(page); 533 op(vaddr + offset, len, dir); 534 kunmap_atomic(vaddr); 535 } 536 } else { 537 vaddr = page_address(page) + offset; 538 op(vaddr, len, dir); 539 } 540 offset = 0; 541 page++; 542 left -= len; 543 } while (left); 544 } 545 546 void ___dma_page_cpu_to_dev(struct page *page, unsigned long off, 547 size_t size, enum dma_data_direction dir) 548 { 549 unsigned long paddr; 550 551 dma_cache_maint_page(page, off, size, dir, dmac_map_area); 552 553 paddr = page_to_phys(page) + off; 554 if (dir == DMA_FROM_DEVICE) { 555 outer_inv_range(paddr, paddr + size); 556 } else { 557 outer_clean_range(paddr, paddr + size); 558 } 559 /* FIXME: non-speculating: flush on bidirectional mappings? */ 560 } 561 EXPORT_SYMBOL(___dma_page_cpu_to_dev); 562 563 void ___dma_page_dev_to_cpu(struct page *page, unsigned long off, 564 size_t size, enum dma_data_direction dir) 565 { 566 unsigned long paddr = page_to_phys(page) + off; 567 568 /* FIXME: non-speculating: not required */ 569 /* don't bother invalidating if DMA to device */ 570 if (dir != DMA_TO_DEVICE) 571 outer_inv_range(paddr, paddr + size); 572 573 dma_cache_maint_page(page, off, size, dir, dmac_unmap_area); 574 575 /* 576 * Mark the D-cache clean for this page to avoid extra flushing. 577 */ 578 if (dir != DMA_TO_DEVICE && off == 0 && size >= PAGE_SIZE) 579 set_bit(PG_dcache_clean, &page->flags); 580 } 581 EXPORT_SYMBOL(___dma_page_dev_to_cpu); 582 583 /** 584 * dma_map_sg - map a set of SG buffers for streaming mode DMA 585 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 586 * @sg: list of buffers 587 * @nents: number of buffers to map 588 * @dir: DMA transfer direction 589 * 590 * Map a set of buffers described by scatterlist in streaming mode for DMA. 591 * This is the scatter-gather version of the dma_map_single interface. 592 * Here the scatter gather list elements are each tagged with the 593 * appropriate dma address and length. They are obtained via 594 * sg_dma_{address,length}. 595 * 596 * Device ownership issues as mentioned for dma_map_single are the same 597 * here. 598 */ 599 int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, 600 enum dma_data_direction dir) 601 { 602 struct scatterlist *s; 603 int i, j; 604 605 BUG_ON(!valid_dma_direction(dir)); 606 607 for_each_sg(sg, s, nents, i) { 608 s->dma_address = __dma_map_page(dev, sg_page(s), s->offset, 609 s->length, dir); 610 if (dma_mapping_error(dev, s->dma_address)) 611 goto bad_mapping; 612 } 613 debug_dma_map_sg(dev, sg, nents, nents, dir); 614 return nents; 615 616 bad_mapping: 617 for_each_sg(sg, s, i, j) 618 __dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir); 619 return 0; 620 } 621 EXPORT_SYMBOL(dma_map_sg); 622 623 /** 624 * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg 625 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 626 * @sg: list of buffers 627 * @nents: number of buffers to unmap (same as was passed to dma_map_sg) 628 * @dir: DMA transfer direction (same as was passed to dma_map_sg) 629 * 630 * Unmap a set of streaming mode DMA translations. Again, CPU access 631 * rules concerning calls here are the same as for dma_unmap_single(). 632 */ 633 void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, 634 enum dma_data_direction dir) 635 { 636 struct scatterlist *s; 637 int i; 638 639 debug_dma_unmap_sg(dev, sg, nents, dir); 640 641 for_each_sg(sg, s, nents, i) 642 __dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir); 643 } 644 EXPORT_SYMBOL(dma_unmap_sg); 645 646 /** 647 * dma_sync_sg_for_cpu 648 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 649 * @sg: list of buffers 650 * @nents: number of buffers to map (returned from dma_map_sg) 651 * @dir: DMA transfer direction (same as was passed to dma_map_sg) 652 */ 653 void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, 654 int nents, enum dma_data_direction dir) 655 { 656 struct scatterlist *s; 657 int i; 658 659 for_each_sg(sg, s, nents, i) { 660 if (!dmabounce_sync_for_cpu(dev, sg_dma_address(s), 0, 661 sg_dma_len(s), dir)) 662 continue; 663 664 __dma_page_dev_to_cpu(sg_page(s), s->offset, 665 s->length, dir); 666 } 667 668 debug_dma_sync_sg_for_cpu(dev, sg, nents, dir); 669 } 670 EXPORT_SYMBOL(dma_sync_sg_for_cpu); 671 672 /** 673 * dma_sync_sg_for_device 674 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices 675 * @sg: list of buffers 676 * @nents: number of buffers to map (returned from dma_map_sg) 677 * @dir: DMA transfer direction (same as was passed to dma_map_sg) 678 */ 679 void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, 680 int nents, enum dma_data_direction dir) 681 { 682 struct scatterlist *s; 683 int i; 684 685 for_each_sg(sg, s, nents, i) { 686 if (!dmabounce_sync_for_device(dev, sg_dma_address(s), 0, 687 sg_dma_len(s), dir)) 688 continue; 689 690 __dma_page_cpu_to_dev(sg_page(s), s->offset, 691 s->length, dir); 692 } 693 694 debug_dma_sync_sg_for_device(dev, sg, nents, dir); 695 } 696 EXPORT_SYMBOL(dma_sync_sg_for_device); 697 698 /* 699 * Return whether the given device DMA address mask can be supported 700 * properly. For example, if your device can only drive the low 24-bits 701 * during bus mastering, then you would pass 0x00ffffff as the mask 702 * to this function. 703 */ 704 int dma_supported(struct device *dev, u64 mask) 705 { 706 if (mask < (u64)arm_dma_limit) 707 return 0; 708 return 1; 709 } 710 EXPORT_SYMBOL(dma_supported); 711 712 int dma_set_mask(struct device *dev, u64 dma_mask) 713 { 714 if (!dev->dma_mask || !dma_supported(dev, dma_mask)) 715 return -EIO; 716 717 #ifndef CONFIG_DMABOUNCE 718 *dev->dma_mask = dma_mask; 719 #endif 720 721 return 0; 722 } 723 EXPORT_SYMBOL(dma_set_mask); 724 725 #define PREALLOC_DMA_DEBUG_ENTRIES 4096 726 727 static int __init dma_debug_do_init(void) 728 { 729 #ifdef CONFIG_MMU 730 arm_vmregion_create_proc("dma-mappings", &consistent_head); 731 #endif 732 dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES); 733 return 0; 734 } 735 fs_initcall(dma_debug_do_init); 736