OSDN Git Service

NFS: Fix bool initialization/comparison
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / lib / swiotlb.c
1 /*
2  * Dynamic DMA mapping support.
3  *
4  * This implementation is a fallback for platforms that do not support
5  * I/O TLBs (aka DMA address translation hardware).
6  * Copyright (C) 2000 Asit Mallick <Asit.K.Mallick@intel.com>
7  * Copyright (C) 2000 Goutham Rao <goutham.rao@intel.com>
8  * Copyright (C) 2000, 2003 Hewlett-Packard Co
9  *      David Mosberger-Tang <davidm@hpl.hp.com>
10  *
11  * 03/05/07 davidm      Switch from PCI-DMA to generic device DMA API.
12  * 00/12/13 davidm      Rename to swiotlb.c and add mark_clean() to avoid
13  *                      unnecessary i-cache flushing.
14  * 04/07/.. ak          Better overflow handling. Assorted fixes.
15  * 05/09/10 linville    Add support for syncing ranges, support syncing for
16  *                      DMA_BIDIRECTIONAL mappings, miscellaneous cleanup.
17  * 08/12/11 beckyb      Add highmem support
18  */
19
20 #define pr_fmt(fmt) "software IO TLB: " fmt
21
22 #include <linux/cache.h>
23 #include <linux/dma-mapping.h>
24 #include <linux/mm.h>
25 #include <linux/export.h>
26 #include <linux/spinlock.h>
27 #include <linux/string.h>
28 #include <linux/swiotlb.h>
29 #include <linux/pfn.h>
30 #include <linux/types.h>
31 #include <linux/ctype.h>
32 #include <linux/highmem.h>
33 #include <linux/gfp.h>
34 #include <linux/scatterlist.h>
35
36 #include <asm/io.h>
37 #include <asm/dma.h>
38
39 #include <linux/init.h>
40 #include <linux/bootmem.h>
41 #include <linux/iommu-helper.h>
42
43 #define CREATE_TRACE_POINTS
44 #include <trace/events/swiotlb.h>
45
46 #define OFFSET(val,align) ((unsigned long)      \
47                            ( (val) & ( (align) - 1)))
48
49 #define SLABS_PER_PAGE (1 << (PAGE_SHIFT - IO_TLB_SHIFT))
50
51 /*
52  * Minimum IO TLB size to bother booting with.  Systems with mainly
53  * 64bit capable cards will only lightly use the swiotlb.  If we can't
54  * allocate a contiguous 1MB, we're probably in trouble anyway.
55  */
56 #define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT)
57
58 int swiotlb_force;
59
60 /*
61  * Used to do a quick range check in swiotlb_tbl_unmap_single and
62  * swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this
63  * API.
64  */
65 static phys_addr_t io_tlb_start, io_tlb_end;
66
67 /*
68  * The number of IO TLB blocks (in groups of 64) between io_tlb_start and
69  * io_tlb_end.  This is command line adjustable via setup_io_tlb_npages.
70  */
71 static unsigned long io_tlb_nslabs;
72
73 /*
74  * When the IOMMU overflows we return a fallback buffer. This sets the size.
75  */
76 static unsigned long io_tlb_overflow = 32*1024;
77
78 static phys_addr_t io_tlb_overflow_buffer;
79
80 /*
81  * This is a free list describing the number of free entries available from
82  * each index
83  */
84 static unsigned int *io_tlb_list;
85 static unsigned int io_tlb_index;
86
87 /*
88  * We need to save away the original address corresponding to a mapped entry
89  * for the sync operations.
90  */
91 #define INVALID_PHYS_ADDR (~(phys_addr_t)0)
92 static phys_addr_t *io_tlb_orig_addr;
93
94 /*
95  * Protect the above data structures in the map and unmap calls
96  */
97 static DEFINE_SPINLOCK(io_tlb_lock);
98
99 static int late_alloc;
100
101 static int __init
102 setup_io_tlb_npages(char *str)
103 {
104         if (isdigit(*str)) {
105                 io_tlb_nslabs = simple_strtoul(str, &str, 0);
106                 /* avoid tail segment of size < IO_TLB_SEGSIZE */
107                 io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
108         }
109         if (*str == ',')
110                 ++str;
111         if (!strcmp(str, "force"))
112                 swiotlb_force = 1;
113
114         return 0;
115 }
116 early_param("swiotlb", setup_io_tlb_npages);
117 /* make io_tlb_overflow tunable too? */
118
119 unsigned long swiotlb_nr_tbl(void)
120 {
121         return io_tlb_nslabs;
122 }
123 EXPORT_SYMBOL_GPL(swiotlb_nr_tbl);
124
125 /* default to 64MB */
126 #define IO_TLB_DEFAULT_SIZE (64UL<<20)
127 unsigned long swiotlb_size_or_default(void)
128 {
129         unsigned long size;
130
131         size = io_tlb_nslabs << IO_TLB_SHIFT;
132
133         return size ? size : (IO_TLB_DEFAULT_SIZE);
134 }
135
136 /* Note that this doesn't work with highmem page */
137 static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev,
138                                       volatile void *address)
139 {
140         return phys_to_dma(hwdev, virt_to_phys(address));
141 }
142
143 static bool no_iotlb_memory;
144
145 void swiotlb_print_info(void)
146 {
147         unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT;
148
149         if (no_iotlb_memory) {
150                 pr_warn("No low mem\n");
151                 return;
152         }
153
154         pr_info("mapped [mem %#010llx-%#010llx] (%luMB)\n",
155                (unsigned long long)io_tlb_start,
156                (unsigned long long)io_tlb_end,
157                bytes >> 20);
158 }
159
160 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
161 {
162         void *v_overflow_buffer;
163         unsigned long i, bytes;
164
165         bytes = nslabs << IO_TLB_SHIFT;
166
167         io_tlb_nslabs = nslabs;
168         io_tlb_start = __pa(tlb);
169         io_tlb_end = io_tlb_start + bytes;
170
171         /*
172          * Get the overflow emergency buffer
173          */
174         v_overflow_buffer = memblock_virt_alloc_low_nopanic(
175                                                 PAGE_ALIGN(io_tlb_overflow),
176                                                 PAGE_SIZE);
177         if (!v_overflow_buffer)
178                 return -ENOMEM;
179
180         io_tlb_overflow_buffer = __pa(v_overflow_buffer);
181
182         /*
183          * Allocate and initialize the free list array.  This array is used
184          * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
185          * between io_tlb_start and io_tlb_end.
186          */
187         io_tlb_list = memblock_virt_alloc(
188                                 PAGE_ALIGN(io_tlb_nslabs * sizeof(int)),
189                                 PAGE_SIZE);
190         io_tlb_orig_addr = memblock_virt_alloc(
191                                 PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t)),
192                                 PAGE_SIZE);
193         for (i = 0; i < io_tlb_nslabs; i++) {
194                 io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE);
195                 io_tlb_orig_addr[i] = INVALID_PHYS_ADDR;
196         }
197         io_tlb_index = 0;
198
199         if (verbose)
200                 swiotlb_print_info();
201
202         return 0;
203 }
204
205 /*
206  * Statically reserve bounce buffer space and initialize bounce buffer data
207  * structures for the software IO TLB used to implement the DMA API.
208  */
209 void  __init
210 swiotlb_init(int verbose)
211 {
212         size_t default_size = IO_TLB_DEFAULT_SIZE;
213         unsigned char *vstart;
214         unsigned long bytes;
215
216         if (!io_tlb_nslabs) {
217                 io_tlb_nslabs = (default_size >> IO_TLB_SHIFT);
218                 io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
219         }
220
221         bytes = io_tlb_nslabs << IO_TLB_SHIFT;
222
223         /* Get IO TLB memory from the low pages */
224         vstart = memblock_virt_alloc_low_nopanic(PAGE_ALIGN(bytes), PAGE_SIZE);
225         if (vstart && !swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose))
226                 return;
227
228         if (io_tlb_start)
229                 memblock_free_early(io_tlb_start,
230                                     PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT));
231         pr_warn("Cannot allocate buffer");
232         no_iotlb_memory = true;
233 }
234
235 /*
236  * Systems with larger DMA zones (those that don't support ISA) can
237  * initialize the swiotlb later using the slab allocator if needed.
238  * This should be just like above, but with some error catching.
239  */
240 int
241 swiotlb_late_init_with_default_size(size_t default_size)
242 {
243         unsigned long bytes, req_nslabs = io_tlb_nslabs;
244         unsigned char *vstart = NULL;
245         unsigned int order;
246         int rc = 0;
247
248         if (!io_tlb_nslabs) {
249                 io_tlb_nslabs = (default_size >> IO_TLB_SHIFT);
250                 io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
251         }
252
253         /*
254          * Get IO TLB memory from the low pages
255          */
256         order = get_order(io_tlb_nslabs << IO_TLB_SHIFT);
257         io_tlb_nslabs = SLABS_PER_PAGE << order;
258         bytes = io_tlb_nslabs << IO_TLB_SHIFT;
259
260         while ((SLABS_PER_PAGE << order) > IO_TLB_MIN_SLABS) {
261                 vstart = (void *)__get_free_pages(GFP_DMA | __GFP_NOWARN,
262                                                   order);
263                 if (vstart)
264                         break;
265                 order--;
266         }
267
268         if (!vstart) {
269                 io_tlb_nslabs = req_nslabs;
270                 return -ENOMEM;
271         }
272         if (order != get_order(bytes)) {
273                 pr_warn("only able to allocate %ld MB\n",
274                         (PAGE_SIZE << order) >> 20);
275                 io_tlb_nslabs = SLABS_PER_PAGE << order;
276         }
277         rc = swiotlb_late_init_with_tbl(vstart, io_tlb_nslabs);
278         if (rc)
279                 free_pages((unsigned long)vstart, order);
280         return rc;
281 }
282
283 int
284 swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
285 {
286         unsigned long i, bytes;
287         unsigned char *v_overflow_buffer;
288
289         bytes = nslabs << IO_TLB_SHIFT;
290
291         io_tlb_nslabs = nslabs;
292         io_tlb_start = virt_to_phys(tlb);
293         io_tlb_end = io_tlb_start + bytes;
294
295         memset(tlb, 0, bytes);
296
297         /*
298          * Get the overflow emergency buffer
299          */
300         v_overflow_buffer = (void *)__get_free_pages(GFP_DMA,
301                                                      get_order(io_tlb_overflow));
302         if (!v_overflow_buffer)
303                 goto cleanup2;
304
305         io_tlb_overflow_buffer = virt_to_phys(v_overflow_buffer);
306
307         /*
308          * Allocate and initialize the free list array.  This array is used
309          * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
310          * between io_tlb_start and io_tlb_end.
311          */
312         io_tlb_list = (unsigned int *)__get_free_pages(GFP_KERNEL,
313                                       get_order(io_tlb_nslabs * sizeof(int)));
314         if (!io_tlb_list)
315                 goto cleanup3;
316
317         io_tlb_orig_addr = (phys_addr_t *)
318                 __get_free_pages(GFP_KERNEL,
319                                  get_order(io_tlb_nslabs *
320                                            sizeof(phys_addr_t)));
321         if (!io_tlb_orig_addr)
322                 goto cleanup4;
323
324         for (i = 0; i < io_tlb_nslabs; i++) {
325                 io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE);
326                 io_tlb_orig_addr[i] = INVALID_PHYS_ADDR;
327         }
328         io_tlb_index = 0;
329
330         swiotlb_print_info();
331
332         late_alloc = 1;
333
334         return 0;
335
336 cleanup4:
337         free_pages((unsigned long)io_tlb_list, get_order(io_tlb_nslabs *
338                                                          sizeof(int)));
339         io_tlb_list = NULL;
340 cleanup3:
341         free_pages((unsigned long)v_overflow_buffer,
342                    get_order(io_tlb_overflow));
343         io_tlb_overflow_buffer = 0;
344 cleanup2:
345         io_tlb_end = 0;
346         io_tlb_start = 0;
347         io_tlb_nslabs = 0;
348         return -ENOMEM;
349 }
350
351 void __init swiotlb_free(void)
352 {
353         if (!io_tlb_orig_addr)
354                 return;
355
356         if (late_alloc) {
357                 free_pages((unsigned long)phys_to_virt(io_tlb_overflow_buffer),
358                            get_order(io_tlb_overflow));
359                 free_pages((unsigned long)io_tlb_orig_addr,
360                            get_order(io_tlb_nslabs * sizeof(phys_addr_t)));
361                 free_pages((unsigned long)io_tlb_list, get_order(io_tlb_nslabs *
362                                                                  sizeof(int)));
363                 free_pages((unsigned long)phys_to_virt(io_tlb_start),
364                            get_order(io_tlb_nslabs << IO_TLB_SHIFT));
365         } else {
366                 memblock_free_late(io_tlb_overflow_buffer,
367                                    PAGE_ALIGN(io_tlb_overflow));
368                 memblock_free_late(__pa(io_tlb_orig_addr),
369                                    PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t)));
370                 memblock_free_late(__pa(io_tlb_list),
371                                    PAGE_ALIGN(io_tlb_nslabs * sizeof(int)));
372                 memblock_free_late(io_tlb_start,
373                                    PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT));
374         }
375         io_tlb_nslabs = 0;
376 }
377
378 int is_swiotlb_buffer(phys_addr_t paddr)
379 {
380         return paddr >= io_tlb_start && paddr < io_tlb_end;
381 }
382
383 /*
384  * Bounce: copy the swiotlb buffer back to the original dma location
385  */
386 static void swiotlb_bounce(phys_addr_t orig_addr, phys_addr_t tlb_addr,
387                            size_t size, enum dma_data_direction dir)
388 {
389         unsigned long pfn = PFN_DOWN(orig_addr);
390         unsigned char *vaddr = phys_to_virt(tlb_addr);
391
392         if (PageHighMem(pfn_to_page(pfn))) {
393                 /* The buffer does not have a mapping.  Map it in and copy */
394                 unsigned int offset = orig_addr & ~PAGE_MASK;
395                 char *buffer;
396                 unsigned int sz = 0;
397                 unsigned long flags;
398
399                 while (size) {
400                         sz = min_t(size_t, PAGE_SIZE - offset, size);
401
402                         local_irq_save(flags);
403                         buffer = kmap_atomic(pfn_to_page(pfn));
404                         if (dir == DMA_TO_DEVICE)
405                                 memcpy(vaddr, buffer + offset, sz);
406                         else
407                                 memcpy(buffer + offset, vaddr, sz);
408                         kunmap_atomic(buffer);
409                         local_irq_restore(flags);
410
411                         size -= sz;
412                         pfn++;
413                         vaddr += sz;
414                         offset = 0;
415                 }
416         } else if (dir == DMA_TO_DEVICE) {
417                 memcpy(vaddr, phys_to_virt(orig_addr), size);
418         } else {
419                 memcpy(phys_to_virt(orig_addr), vaddr, size);
420         }
421 }
422
423 phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
424                                    dma_addr_t tbl_dma_addr,
425                                    phys_addr_t orig_addr, size_t size,
426                                    enum dma_data_direction dir)
427 {
428         unsigned long flags;
429         phys_addr_t tlb_addr;
430         unsigned int nslots, stride, index, wrap;
431         int i;
432         unsigned long mask;
433         unsigned long offset_slots;
434         unsigned long max_slots;
435
436         if (no_iotlb_memory)
437                 panic("Can not allocate SWIOTLB buffer earlier and can't now provide you with the DMA bounce buffer");
438
439         mask = dma_get_seg_boundary(hwdev);
440
441         tbl_dma_addr &= mask;
442
443         offset_slots = ALIGN(tbl_dma_addr, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT;
444
445         /*
446          * Carefully handle integer overflow which can occur when mask == ~0UL.
447          */
448         max_slots = mask + 1
449                     ? ALIGN(mask + 1, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT
450                     : 1UL << (BITS_PER_LONG - IO_TLB_SHIFT);
451
452         /*
453          * For mappings greater than or equal to a page, we limit the stride
454          * (and hence alignment) to a page size.
455          */
456         nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT;
457         if (size >= PAGE_SIZE)
458                 stride = (1 << (PAGE_SHIFT - IO_TLB_SHIFT));
459         else
460                 stride = 1;
461
462         BUG_ON(!nslots);
463
464         /*
465          * Find suitable number of IO TLB entries size that will fit this
466          * request and allocate a buffer from that IO TLB pool.
467          */
468         spin_lock_irqsave(&io_tlb_lock, flags);
469         index = ALIGN(io_tlb_index, stride);
470         if (index >= io_tlb_nslabs)
471                 index = 0;
472         wrap = index;
473
474         do {
475                 while (iommu_is_span_boundary(index, nslots, offset_slots,
476                                               max_slots)) {
477                         index += stride;
478                         if (index >= io_tlb_nslabs)
479                                 index = 0;
480                         if (index == wrap)
481                                 goto not_found;
482                 }
483
484                 /*
485                  * If we find a slot that indicates we have 'nslots' number of
486                  * contiguous buffers, we allocate the buffers from that slot
487                  * and mark the entries as '0' indicating unavailable.
488                  */
489                 if (io_tlb_list[index] >= nslots) {
490                         int count = 0;
491
492                         for (i = index; i < (int) (index + nslots); i++)
493                                 io_tlb_list[i] = 0;
494                         for (i = index - 1; (OFFSET(i, IO_TLB_SEGSIZE) != IO_TLB_SEGSIZE - 1) && io_tlb_list[i]; i--)
495                                 io_tlb_list[i] = ++count;
496                         tlb_addr = io_tlb_start + (index << IO_TLB_SHIFT);
497
498                         /*
499                          * Update the indices to avoid searching in the next
500                          * round.
501                          */
502                         io_tlb_index = ((index + nslots) < io_tlb_nslabs
503                                         ? (index + nslots) : 0);
504
505                         goto found;
506                 }
507                 index += stride;
508                 if (index >= io_tlb_nslabs)
509                         index = 0;
510         } while (index != wrap);
511
512 not_found:
513         spin_unlock_irqrestore(&io_tlb_lock, flags);
514         if (printk_ratelimit())
515                 dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size);
516         return SWIOTLB_MAP_ERROR;
517 found:
518         spin_unlock_irqrestore(&io_tlb_lock, flags);
519
520         /*
521          * Save away the mapping from the original address to the DMA address.
522          * This is needed when we sync the memory.  Then we sync the buffer if
523          * needed.
524          */
525         for (i = 0; i < nslots; i++)
526                 io_tlb_orig_addr[index+i] = orig_addr + (i << IO_TLB_SHIFT);
527         if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)
528                 swiotlb_bounce(orig_addr, tlb_addr, size, DMA_TO_DEVICE);
529
530         return tlb_addr;
531 }
532 EXPORT_SYMBOL_GPL(swiotlb_tbl_map_single);
533
534 /*
535  * Allocates bounce buffer and returns its kernel virtual address.
536  */
537
538 static phys_addr_t
539 map_single(struct device *hwdev, phys_addr_t phys, size_t size,
540            enum dma_data_direction dir)
541 {
542         dma_addr_t start_dma_addr = phys_to_dma(hwdev, io_tlb_start);
543
544         return swiotlb_tbl_map_single(hwdev, start_dma_addr, phys, size, dir);
545 }
546
547 /*
548  * dma_addr is the kernel virtual address of the bounce buffer to unmap.
549  */
550 void swiotlb_tbl_unmap_single(struct device *hwdev, phys_addr_t tlb_addr,
551                               size_t size, enum dma_data_direction dir)
552 {
553         unsigned long flags;
554         int i, count, nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT;
555         int index = (tlb_addr - io_tlb_start) >> IO_TLB_SHIFT;
556         phys_addr_t orig_addr = io_tlb_orig_addr[index];
557
558         /*
559          * First, sync the memory before unmapping the entry
560          */
561         if (orig_addr != INVALID_PHYS_ADDR &&
562             ((dir == DMA_FROM_DEVICE) || (dir == DMA_BIDIRECTIONAL)))
563                 swiotlb_bounce(orig_addr, tlb_addr, size, DMA_FROM_DEVICE);
564
565         /*
566          * Return the buffer to the free list by setting the corresponding
567          * entries to indicate the number of contiguous entries available.
568          * While returning the entries to the free list, we merge the entries
569          * with slots below and above the pool being returned.
570          */
571         spin_lock_irqsave(&io_tlb_lock, flags);
572         {
573                 count = ((index + nslots) < ALIGN(index + 1, IO_TLB_SEGSIZE) ?
574                          io_tlb_list[index + nslots] : 0);
575                 /*
576                  * Step 1: return the slots to the free list, merging the
577                  * slots with superceeding slots
578                  */
579                 for (i = index + nslots - 1; i >= index; i--) {
580                         io_tlb_list[i] = ++count;
581                         io_tlb_orig_addr[i] = INVALID_PHYS_ADDR;
582                 }
583                 /*
584                  * Step 2: merge the returned slots with the preceding slots,
585                  * if available (non zero)
586                  */
587                 for (i = index - 1; (OFFSET(i, IO_TLB_SEGSIZE) != IO_TLB_SEGSIZE -1) && io_tlb_list[i]; i--)
588                         io_tlb_list[i] = ++count;
589         }
590         spin_unlock_irqrestore(&io_tlb_lock, flags);
591 }
592 EXPORT_SYMBOL_GPL(swiotlb_tbl_unmap_single);
593
594 void swiotlb_tbl_sync_single(struct device *hwdev, phys_addr_t tlb_addr,
595                              size_t size, enum dma_data_direction dir,
596                              enum dma_sync_target target)
597 {
598         int index = (tlb_addr - io_tlb_start) >> IO_TLB_SHIFT;
599         phys_addr_t orig_addr = io_tlb_orig_addr[index];
600
601         if (orig_addr == INVALID_PHYS_ADDR)
602                 return;
603         orig_addr += (unsigned long)tlb_addr & ((1 << IO_TLB_SHIFT) - 1);
604
605         switch (target) {
606         case SYNC_FOR_CPU:
607                 if (likely(dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL))
608                         swiotlb_bounce(orig_addr, tlb_addr,
609                                        size, DMA_FROM_DEVICE);
610                 else
611                         BUG_ON(dir != DMA_TO_DEVICE);
612                 break;
613         case SYNC_FOR_DEVICE:
614                 if (likely(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
615                         swiotlb_bounce(orig_addr, tlb_addr,
616                                        size, DMA_TO_DEVICE);
617                 else
618                         BUG_ON(dir != DMA_FROM_DEVICE);
619                 break;
620         default:
621                 BUG();
622         }
623 }
624 EXPORT_SYMBOL_GPL(swiotlb_tbl_sync_single);
625
626 void *
627 swiotlb_alloc_coherent(struct device *hwdev, size_t size,
628                        dma_addr_t *dma_handle, gfp_t flags)
629 {
630         dma_addr_t dev_addr;
631         void *ret;
632         int order = get_order(size);
633         u64 dma_mask = DMA_BIT_MASK(32);
634
635         if (hwdev && hwdev->coherent_dma_mask)
636                 dma_mask = hwdev->coherent_dma_mask;
637
638         ret = (void *)__get_free_pages(flags, order);
639         if (ret) {
640                 dev_addr = swiotlb_virt_to_bus(hwdev, ret);
641                 if (dev_addr + size - 1 > dma_mask) {
642                         /*
643                          * The allocated memory isn't reachable by the device.
644                          */
645                         free_pages((unsigned long) ret, order);
646                         ret = NULL;
647                 }
648         }
649         if (!ret) {
650                 /*
651                  * We are either out of memory or the device can't DMA to
652                  * GFP_DMA memory; fall back on map_single(), which
653                  * will grab memory from the lowest available address range.
654                  */
655                 phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE);
656                 if (paddr == SWIOTLB_MAP_ERROR)
657                         goto err_warn;
658
659                 ret = phys_to_virt(paddr);
660                 dev_addr = phys_to_dma(hwdev, paddr);
661
662                 /* Confirm address can be DMA'd by device */
663                 if (dev_addr + size - 1 > dma_mask) {
664                         printk("hwdev DMA mask = 0x%016Lx, dev_addr = 0x%016Lx\n",
665                                (unsigned long long)dma_mask,
666                                (unsigned long long)dev_addr);
667
668                         /* DMA_TO_DEVICE to avoid memcpy in unmap_single */
669                         swiotlb_tbl_unmap_single(hwdev, paddr,
670                                                  size, DMA_TO_DEVICE);
671                         goto err_warn;
672                 }
673         }
674
675         *dma_handle = dev_addr;
676         memset(ret, 0, size);
677
678         return ret;
679
680 err_warn:
681         pr_warn("coherent allocation failed for device %s size=%zu\n",
682                 dev_name(hwdev), size);
683         dump_stack();
684
685         return NULL;
686 }
687 EXPORT_SYMBOL(swiotlb_alloc_coherent);
688
689 void
690 swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
691                       dma_addr_t dev_addr)
692 {
693         phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
694
695         WARN_ON(irqs_disabled());
696         if (!is_swiotlb_buffer(paddr))
697                 free_pages((unsigned long)vaddr, get_order(size));
698         else
699                 /* DMA_TO_DEVICE to avoid memcpy in swiotlb_tbl_unmap_single */
700                 swiotlb_tbl_unmap_single(hwdev, paddr, size, DMA_TO_DEVICE);
701 }
702 EXPORT_SYMBOL(swiotlb_free_coherent);
703
704 static void
705 swiotlb_full(struct device *dev, size_t size, enum dma_data_direction dir,
706              int do_panic)
707 {
708         /*
709          * Ran out of IOMMU space for this operation. This is very bad.
710          * Unfortunately the drivers cannot handle this operation properly.
711          * unless they check for dma_mapping_error (most don't)
712          * When the mapping is small enough return a static buffer to limit
713          * the damage, or panic when the transfer is too big.
714          */
715         printk(KERN_ERR "DMA: Out of SW-IOMMU space for %zu bytes at "
716                "device %s\n", size, dev ? dev_name(dev) : "?");
717
718         if (size <= io_tlb_overflow || !do_panic)
719                 return;
720
721         if (dir == DMA_BIDIRECTIONAL)
722                 panic("DMA: Random memory could be DMA accessed\n");
723         if (dir == DMA_FROM_DEVICE)
724                 panic("DMA: Random memory could be DMA written\n");
725         if (dir == DMA_TO_DEVICE)
726                 panic("DMA: Random memory could be DMA read\n");
727 }
728
729 /*
730  * Map a single buffer of the indicated size for DMA in streaming mode.  The
731  * physical address to use is returned.
732  *
733  * Once the device is given the dma address, the device owns this memory until
734  * either swiotlb_unmap_page or swiotlb_dma_sync_single is performed.
735  */
736 dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
737                             unsigned long offset, size_t size,
738                             enum dma_data_direction dir,
739                             struct dma_attrs *attrs)
740 {
741         phys_addr_t map, phys = page_to_phys(page) + offset;
742         dma_addr_t dev_addr = phys_to_dma(dev, phys);
743
744         BUG_ON(dir == DMA_NONE);
745         /*
746          * If the address happens to be in the device's DMA window,
747          * we can safely return the device addr and not worry about bounce
748          * buffering it.
749          */
750         if (dma_capable(dev, dev_addr, size) && !swiotlb_force)
751                 return dev_addr;
752
753         trace_swiotlb_bounced(dev, dev_addr, size, swiotlb_force);
754
755         /* Oh well, have to allocate and map a bounce buffer. */
756         map = map_single(dev, phys, size, dir);
757         if (map == SWIOTLB_MAP_ERROR) {
758                 swiotlb_full(dev, size, dir, 1);
759                 return phys_to_dma(dev, io_tlb_overflow_buffer);
760         }
761
762         dev_addr = phys_to_dma(dev, map);
763
764         /* Ensure that the address returned is DMA'ble */
765         if (!dma_capable(dev, dev_addr, size)) {
766                 swiotlb_tbl_unmap_single(dev, map, size, dir);
767                 return phys_to_dma(dev, io_tlb_overflow_buffer);
768         }
769
770         return dev_addr;
771 }
772 EXPORT_SYMBOL_GPL(swiotlb_map_page);
773
774 /*
775  * Unmap a single streaming mode DMA translation.  The dma_addr and size must
776  * match what was provided for in a previous swiotlb_map_page call.  All
777  * other usages are undefined.
778  *
779  * After this call, reads by the cpu to the buffer are guaranteed to see
780  * whatever the device wrote there.
781  */
782 static void unmap_single(struct device *hwdev, dma_addr_t dev_addr,
783                          size_t size, enum dma_data_direction dir)
784 {
785         phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
786
787         BUG_ON(dir == DMA_NONE);
788
789         if (is_swiotlb_buffer(paddr)) {
790                 swiotlb_tbl_unmap_single(hwdev, paddr, size, dir);
791                 return;
792         }
793
794         if (dir != DMA_FROM_DEVICE)
795                 return;
796
797         /*
798          * phys_to_virt doesn't work with hihgmem page but we could
799          * call dma_mark_clean() with hihgmem page here. However, we
800          * are fine since dma_mark_clean() is null on POWERPC. We can
801          * make dma_mark_clean() take a physical address if necessary.
802          */
803         dma_mark_clean(phys_to_virt(paddr), size);
804 }
805
806 void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
807                         size_t size, enum dma_data_direction dir,
808                         struct dma_attrs *attrs)
809 {
810         unmap_single(hwdev, dev_addr, size, dir);
811 }
812 EXPORT_SYMBOL_GPL(swiotlb_unmap_page);
813
814 /*
815  * Make physical memory consistent for a single streaming mode DMA translation
816  * after a transfer.
817  *
818  * If you perform a swiotlb_map_page() but wish to interrogate the buffer
819  * using the cpu, yet do not wish to teardown the dma mapping, you must
820  * call this function before doing so.  At the next point you give the dma
821  * address back to the card, you must first perform a
822  * swiotlb_dma_sync_for_device, and then the device again owns the buffer
823  */
824 static void
825 swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
826                     size_t size, enum dma_data_direction dir,
827                     enum dma_sync_target target)
828 {
829         phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
830
831         BUG_ON(dir == DMA_NONE);
832
833         if (is_swiotlb_buffer(paddr)) {
834                 swiotlb_tbl_sync_single(hwdev, paddr, size, dir, target);
835                 return;
836         }
837
838         if (dir != DMA_FROM_DEVICE)
839                 return;
840
841         dma_mark_clean(phys_to_virt(paddr), size);
842 }
843
844 void
845 swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
846                             size_t size, enum dma_data_direction dir)
847 {
848         swiotlb_sync_single(hwdev, dev_addr, size, dir, SYNC_FOR_CPU);
849 }
850 EXPORT_SYMBOL(swiotlb_sync_single_for_cpu);
851
852 void
853 swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
854                                size_t size, enum dma_data_direction dir)
855 {
856         swiotlb_sync_single(hwdev, dev_addr, size, dir, SYNC_FOR_DEVICE);
857 }
858 EXPORT_SYMBOL(swiotlb_sync_single_for_device);
859
860 /*
861  * Map a set of buffers described by scatterlist in streaming mode for DMA.
862  * This is the scatter-gather version of the above swiotlb_map_page
863  * interface.  Here the scatter gather list elements are each tagged with the
864  * appropriate dma address and length.  They are obtained via
865  * sg_dma_{address,length}(SG).
866  *
867  * NOTE: An implementation may be able to use a smaller number of
868  *       DMA address/length pairs than there are SG table elements.
869  *       (for example via virtual mapping capabilities)
870  *       The routine returns the number of addr/length pairs actually
871  *       used, at most nents.
872  *
873  * Device ownership issues as mentioned above for swiotlb_map_page are the
874  * same here.
875  */
876 int
877 swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
878                      enum dma_data_direction dir, struct dma_attrs *attrs)
879 {
880         struct scatterlist *sg;
881         int i;
882
883         BUG_ON(dir == DMA_NONE);
884
885         for_each_sg(sgl, sg, nelems, i) {
886                 phys_addr_t paddr = sg_phys(sg);
887                 dma_addr_t dev_addr = phys_to_dma(hwdev, paddr);
888
889                 if (swiotlb_force ||
890                     !dma_capable(hwdev, dev_addr, sg->length)) {
891                         phys_addr_t map = map_single(hwdev, sg_phys(sg),
892                                                      sg->length, dir);
893                         if (map == SWIOTLB_MAP_ERROR) {
894                                 /* Don't panic here, we expect map_sg users
895                                    to do proper error handling. */
896                                 swiotlb_full(hwdev, sg->length, dir, 0);
897                                 swiotlb_unmap_sg_attrs(hwdev, sgl, i, dir,
898                                                        attrs);
899                                 sg_dma_len(sgl) = 0;
900                                 return 0;
901                         }
902                         sg->dma_address = phys_to_dma(hwdev, map);
903                 } else
904                         sg->dma_address = dev_addr;
905                 sg_dma_len(sg) = sg->length;
906         }
907         return nelems;
908 }
909 EXPORT_SYMBOL(swiotlb_map_sg_attrs);
910
911 int
912 swiotlb_map_sg(struct device *hwdev, struct scatterlist *sgl, int nelems,
913                enum dma_data_direction dir)
914 {
915         return swiotlb_map_sg_attrs(hwdev, sgl, nelems, dir, NULL);
916 }
917 EXPORT_SYMBOL(swiotlb_map_sg);
918
919 /*
920  * Unmap a set of streaming mode DMA translations.  Again, cpu read rules
921  * concerning calls here are the same as for swiotlb_unmap_page() above.
922  */
923 void
924 swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
925                        int nelems, enum dma_data_direction dir, struct dma_attrs *attrs)
926 {
927         struct scatterlist *sg;
928         int i;
929
930         BUG_ON(dir == DMA_NONE);
931
932         for_each_sg(sgl, sg, nelems, i)
933                 unmap_single(hwdev, sg->dma_address, sg_dma_len(sg), dir);
934
935 }
936 EXPORT_SYMBOL(swiotlb_unmap_sg_attrs);
937
938 void
939 swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sgl, int nelems,
940                  enum dma_data_direction dir)
941 {
942         return swiotlb_unmap_sg_attrs(hwdev, sgl, nelems, dir, NULL);
943 }
944 EXPORT_SYMBOL(swiotlb_unmap_sg);
945
946 /*
947  * Make physical memory consistent for a set of streaming mode DMA translations
948  * after a transfer.
949  *
950  * The same as swiotlb_sync_single_* but for a scatter-gather list, same rules
951  * and usage.
952  */
953 static void
954 swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sgl,
955                 int nelems, enum dma_data_direction dir,
956                 enum dma_sync_target target)
957 {
958         struct scatterlist *sg;
959         int i;
960
961         for_each_sg(sgl, sg, nelems, i)
962                 swiotlb_sync_single(hwdev, sg->dma_address,
963                                     sg_dma_len(sg), dir, target);
964 }
965
966 void
967 swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
968                         int nelems, enum dma_data_direction dir)
969 {
970         swiotlb_sync_sg(hwdev, sg, nelems, dir, SYNC_FOR_CPU);
971 }
972 EXPORT_SYMBOL(swiotlb_sync_sg_for_cpu);
973
974 void
975 swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
976                            int nelems, enum dma_data_direction dir)
977 {
978         swiotlb_sync_sg(hwdev, sg, nelems, dir, SYNC_FOR_DEVICE);
979 }
980 EXPORT_SYMBOL(swiotlb_sync_sg_for_device);
981
982 int
983 swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr)
984 {
985         return (dma_addr == phys_to_dma(hwdev, io_tlb_overflow_buffer));
986 }
987 EXPORT_SYMBOL(swiotlb_dma_mapping_error);
988
989 /*
990  * Return whether the given device DMA address mask can be supported
991  * properly.  For example, if your device can only drive the low 24-bits
992  * during bus mastering, then you would pass 0x00ffffff as the mask to
993  * this function.
994  */
995 int
996 swiotlb_dma_supported(struct device *hwdev, u64 mask)
997 {
998         return phys_to_dma(hwdev, io_tlb_end - 1) <= mask;
999 }
1000 EXPORT_SYMBOL(swiotlb_dma_supported);