]> Git Repo - linux.git/blob - drivers/iommu/dma-iommu.c
KVM: x86: fix CPUID entries returned by KVM_GET_CPUID2 ioctl
[linux.git] / drivers / iommu / dma-iommu.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * A fairly generic DMA-API to IOMMU-API glue layer.
4  *
5  * Copyright (C) 2014-2015 ARM Ltd.
6  *
7  * based in part on arch/arm/mm/dma-mapping.c:
8  * Copyright (C) 2000-2004 Russell King
9  */
10
11 #include <linux/acpi_iort.h>
12 #include <linux/device.h>
13 #include <linux/dma-map-ops.h>
14 #include <linux/dma-iommu.h>
15 #include <linux/gfp.h>
16 #include <linux/huge_mm.h>
17 #include <linux/iommu.h>
18 #include <linux/iova.h>
19 #include <linux/irq.h>
20 #include <linux/mm.h>
21 #include <linux/mutex.h>
22 #include <linux/pci.h>
23 #include <linux/swiotlb.h>
24 #include <linux/scatterlist.h>
25 #include <linux/vmalloc.h>
26 #include <linux/crash_dump.h>
27 #include <linux/dma-direct.h>
28
29 struct iommu_dma_msi_page {
30         struct list_head        list;
31         dma_addr_t              iova;
32         phys_addr_t             phys;
33 };
34
35 enum iommu_dma_cookie_type {
36         IOMMU_DMA_IOVA_COOKIE,
37         IOMMU_DMA_MSI_COOKIE,
38 };
39
40 struct iommu_dma_cookie {
41         enum iommu_dma_cookie_type      type;
42         union {
43                 /* Full allocator for IOMMU_DMA_IOVA_COOKIE */
44                 struct iova_domain      iovad;
45                 /* Trivial linear page allocator for IOMMU_DMA_MSI_COOKIE */
46                 dma_addr_t              msi_iova;
47         };
48         struct list_head                msi_page_list;
49
50         /* Domain for flush queue callback; NULL if flush queue not in use */
51         struct iommu_domain             *fq_domain;
52 };
53
54 void iommu_dma_free_cpu_cached_iovas(unsigned int cpu,
55                 struct iommu_domain *domain)
56 {
57         struct iommu_dma_cookie *cookie = domain->iova_cookie;
58         struct iova_domain *iovad = &cookie->iovad;
59
60         free_cpu_cached_iovas(cpu, iovad);
61 }
62
63 static void iommu_dma_entry_dtor(unsigned long data)
64 {
65         struct page *freelist = (struct page *)data;
66
67         while (freelist) {
68                 unsigned long p = (unsigned long)page_address(freelist);
69
70                 freelist = freelist->freelist;
71                 free_page(p);
72         }
73 }
74
75 static inline size_t cookie_msi_granule(struct iommu_dma_cookie *cookie)
76 {
77         if (cookie->type == IOMMU_DMA_IOVA_COOKIE)
78                 return cookie->iovad.granule;
79         return PAGE_SIZE;
80 }
81
82 static struct iommu_dma_cookie *cookie_alloc(enum iommu_dma_cookie_type type)
83 {
84         struct iommu_dma_cookie *cookie;
85
86         cookie = kzalloc(sizeof(*cookie), GFP_KERNEL);
87         if (cookie) {
88                 INIT_LIST_HEAD(&cookie->msi_page_list);
89                 cookie->type = type;
90         }
91         return cookie;
92 }
93
94 /**
95  * iommu_get_dma_cookie - Acquire DMA-API resources for a domain
96  * @domain: IOMMU domain to prepare for DMA-API usage
97  *
98  * IOMMU drivers should normally call this from their domain_alloc
99  * callback when domain->type == IOMMU_DOMAIN_DMA.
100  */
101 int iommu_get_dma_cookie(struct iommu_domain *domain)
102 {
103         if (domain->iova_cookie)
104                 return -EEXIST;
105
106         domain->iova_cookie = cookie_alloc(IOMMU_DMA_IOVA_COOKIE);
107         if (!domain->iova_cookie)
108                 return -ENOMEM;
109
110         return 0;
111 }
112 EXPORT_SYMBOL(iommu_get_dma_cookie);
113
114 /**
115  * iommu_get_msi_cookie - Acquire just MSI remapping resources
116  * @domain: IOMMU domain to prepare
117  * @base: Start address of IOVA region for MSI mappings
118  *
119  * Users who manage their own IOVA allocation and do not want DMA API support,
120  * but would still like to take advantage of automatic MSI remapping, can use
121  * this to initialise their own domain appropriately. Users should reserve a
122  * contiguous IOVA region, starting at @base, large enough to accommodate the
123  * number of PAGE_SIZE mappings necessary to cover every MSI doorbell address
124  * used by the devices attached to @domain.
125  */
126 int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base)
127 {
128         struct iommu_dma_cookie *cookie;
129
130         if (domain->type != IOMMU_DOMAIN_UNMANAGED)
131                 return -EINVAL;
132
133         if (domain->iova_cookie)
134                 return -EEXIST;
135
136         cookie = cookie_alloc(IOMMU_DMA_MSI_COOKIE);
137         if (!cookie)
138                 return -ENOMEM;
139
140         cookie->msi_iova = base;
141         domain->iova_cookie = cookie;
142         return 0;
143 }
144 EXPORT_SYMBOL(iommu_get_msi_cookie);
145
146 /**
147  * iommu_put_dma_cookie - Release a domain's DMA mapping resources
148  * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie() or
149  *          iommu_get_msi_cookie()
150  *
151  * IOMMU drivers should normally call this from their domain_free callback.
152  */
153 void iommu_put_dma_cookie(struct iommu_domain *domain)
154 {
155         struct iommu_dma_cookie *cookie = domain->iova_cookie;
156         struct iommu_dma_msi_page *msi, *tmp;
157
158         if (!cookie)
159                 return;
160
161         if (cookie->type == IOMMU_DMA_IOVA_COOKIE && cookie->iovad.granule)
162                 put_iova_domain(&cookie->iovad);
163
164         list_for_each_entry_safe(msi, tmp, &cookie->msi_page_list, list) {
165                 list_del(&msi->list);
166                 kfree(msi);
167         }
168         kfree(cookie);
169         domain->iova_cookie = NULL;
170 }
171 EXPORT_SYMBOL(iommu_put_dma_cookie);
172
173 /**
174  * iommu_dma_get_resv_regions - Reserved region driver helper
175  * @dev: Device from iommu_get_resv_regions()
176  * @list: Reserved region list from iommu_get_resv_regions()
177  *
178  * IOMMU drivers can use this to implement their .get_resv_regions callback
179  * for general non-IOMMU-specific reservations. Currently, this covers GICv3
180  * ITS region reservation on ACPI based ARM platforms that may require HW MSI
181  * reservation.
182  */
183 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)
184 {
185
186         if (!is_of_node(dev_iommu_fwspec_get(dev)->iommu_fwnode))
187                 iort_iommu_msi_get_resv_regions(dev, list);
188
189 }
190 EXPORT_SYMBOL(iommu_dma_get_resv_regions);
191
192 static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie,
193                 phys_addr_t start, phys_addr_t end)
194 {
195         struct iova_domain *iovad = &cookie->iovad;
196         struct iommu_dma_msi_page *msi_page;
197         int i, num_pages;
198
199         start -= iova_offset(iovad, start);
200         num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);
201
202         for (i = 0; i < num_pages; i++) {
203                 msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL);
204                 if (!msi_page)
205                         return -ENOMEM;
206
207                 msi_page->phys = start;
208                 msi_page->iova = start;
209                 INIT_LIST_HEAD(&msi_page->list);
210                 list_add(&msi_page->list, &cookie->msi_page_list);
211                 start += iovad->granule;
212         }
213
214         return 0;
215 }
216
217 static int iova_reserve_pci_windows(struct pci_dev *dev,
218                 struct iova_domain *iovad)
219 {
220         struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus);
221         struct resource_entry *window;
222         unsigned long lo, hi;
223         phys_addr_t start = 0, end;
224
225         resource_list_for_each_entry(window, &bridge->windows) {
226                 if (resource_type(window->res) != IORESOURCE_MEM)
227                         continue;
228
229                 lo = iova_pfn(iovad, window->res->start - window->offset);
230                 hi = iova_pfn(iovad, window->res->end - window->offset);
231                 reserve_iova(iovad, lo, hi);
232         }
233
234         /* Get reserved DMA windows from host bridge */
235         resource_list_for_each_entry(window, &bridge->dma_ranges) {
236                 end = window->res->start - window->offset;
237 resv_iova:
238                 if (end > start) {
239                         lo = iova_pfn(iovad, start);
240                         hi = iova_pfn(iovad, end);
241                         reserve_iova(iovad, lo, hi);
242                 } else {
243                         /* dma_ranges list should be sorted */
244                         dev_err(&dev->dev, "Failed to reserve IOVA\n");
245                         return -EINVAL;
246                 }
247
248                 start = window->res->end - window->offset + 1;
249                 /* If window is last entry */
250                 if (window->node.next == &bridge->dma_ranges &&
251                     end != ~(phys_addr_t)0) {
252                         end = ~(phys_addr_t)0;
253                         goto resv_iova;
254                 }
255         }
256
257         return 0;
258 }
259
260 static int iova_reserve_iommu_regions(struct device *dev,
261                 struct iommu_domain *domain)
262 {
263         struct iommu_dma_cookie *cookie = domain->iova_cookie;
264         struct iova_domain *iovad = &cookie->iovad;
265         struct iommu_resv_region *region;
266         LIST_HEAD(resv_regions);
267         int ret = 0;
268
269         if (dev_is_pci(dev)) {
270                 ret = iova_reserve_pci_windows(to_pci_dev(dev), iovad);
271                 if (ret)
272                         return ret;
273         }
274
275         iommu_get_resv_regions(dev, &resv_regions);
276         list_for_each_entry(region, &resv_regions, list) {
277                 unsigned long lo, hi;
278
279                 /* We ARE the software that manages these! */
280                 if (region->type == IOMMU_RESV_SW_MSI)
281                         continue;
282
283                 lo = iova_pfn(iovad, region->start);
284                 hi = iova_pfn(iovad, region->start + region->length - 1);
285                 reserve_iova(iovad, lo, hi);
286
287                 if (region->type == IOMMU_RESV_MSI)
288                         ret = cookie_init_hw_msi_region(cookie, region->start,
289                                         region->start + region->length);
290                 if (ret)
291                         break;
292         }
293         iommu_put_resv_regions(dev, &resv_regions);
294
295         return ret;
296 }
297
298 static void iommu_dma_flush_iotlb_all(struct iova_domain *iovad)
299 {
300         struct iommu_dma_cookie *cookie;
301         struct iommu_domain *domain;
302
303         cookie = container_of(iovad, struct iommu_dma_cookie, iovad);
304         domain = cookie->fq_domain;
305         /*
306          * The IOMMU driver supporting DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE
307          * implies that ops->flush_iotlb_all must be non-NULL.
308          */
309         domain->ops->flush_iotlb_all(domain);
310 }
311
312 /**
313  * iommu_dma_init_domain - Initialise a DMA mapping domain
314  * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie()
315  * @base: IOVA at which the mappable address space starts
316  * @size: Size of IOVA space
317  * @dev: Device the domain is being initialised for
318  *
319  * @base and @size should be exact multiples of IOMMU page granularity to
320  * avoid rounding surprises. If necessary, we reserve the page at address 0
321  * to ensure it is an invalid IOVA. It is safe to reinitialise a domain, but
322  * any change which could make prior IOVAs invalid will fail.
323  */
324 static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base,
325                 u64 size, struct device *dev)
326 {
327         struct iommu_dma_cookie *cookie = domain->iova_cookie;
328         unsigned long order, base_pfn;
329         struct iova_domain *iovad;
330         int attr;
331
332         if (!cookie || cookie->type != IOMMU_DMA_IOVA_COOKIE)
333                 return -EINVAL;
334
335         iovad = &cookie->iovad;
336
337         /* Use the smallest supported page size for IOVA granularity */
338         order = __ffs(domain->pgsize_bitmap);
339         base_pfn = max_t(unsigned long, 1, base >> order);
340
341         /* Check the domain allows at least some access to the device... */
342         if (domain->geometry.force_aperture) {
343                 if (base > domain->geometry.aperture_end ||
344                     base + size <= domain->geometry.aperture_start) {
345                         pr_warn("specified DMA range outside IOMMU capability\n");
346                         return -EFAULT;
347                 }
348                 /* ...then finally give it a kicking to make sure it fits */
349                 base_pfn = max_t(unsigned long, base_pfn,
350                                 domain->geometry.aperture_start >> order);
351         }
352
353         /* start_pfn is always nonzero for an already-initialised domain */
354         if (iovad->start_pfn) {
355                 if (1UL << order != iovad->granule ||
356                     base_pfn != iovad->start_pfn) {
357                         pr_warn("Incompatible range for DMA domain\n");
358                         return -EFAULT;
359                 }
360
361                 return 0;
362         }
363
364         init_iova_domain(iovad, 1UL << order, base_pfn);
365
366         if (!cookie->fq_domain && !iommu_domain_get_attr(domain,
367                         DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE, &attr) && attr) {
368                 if (init_iova_flush_queue(iovad, iommu_dma_flush_iotlb_all,
369                                           iommu_dma_entry_dtor))
370                         pr_warn("iova flush queue initialization failed\n");
371                 else
372                         cookie->fq_domain = domain;
373         }
374
375         if (!dev)
376                 return 0;
377
378         return iova_reserve_iommu_regions(dev, domain);
379 }
380
381 static int iommu_dma_deferred_attach(struct device *dev,
382                 struct iommu_domain *domain)
383 {
384         const struct iommu_ops *ops = domain->ops;
385
386         if (!is_kdump_kernel())
387                 return 0;
388
389         if (unlikely(ops->is_attach_deferred &&
390                         ops->is_attach_deferred(domain, dev)))
391                 return iommu_attach_device(domain, dev);
392
393         return 0;
394 }
395
396 /**
397  * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API
398  *                    page flags.
399  * @dir: Direction of DMA transfer
400  * @coherent: Is the DMA master cache-coherent?
401  * @attrs: DMA attributes for the mapping
402  *
403  * Return: corresponding IOMMU API page protection flags
404  */
405 static int dma_info_to_prot(enum dma_data_direction dir, bool coherent,
406                      unsigned long attrs)
407 {
408         int prot = coherent ? IOMMU_CACHE : 0;
409
410         if (attrs & DMA_ATTR_PRIVILEGED)
411                 prot |= IOMMU_PRIV;
412
413         switch (dir) {
414         case DMA_BIDIRECTIONAL:
415                 return prot | IOMMU_READ | IOMMU_WRITE;
416         case DMA_TO_DEVICE:
417                 return prot | IOMMU_READ;
418         case DMA_FROM_DEVICE:
419                 return prot | IOMMU_WRITE;
420         default:
421                 return 0;
422         }
423 }
424
425 static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain,
426                 size_t size, u64 dma_limit, struct device *dev)
427 {
428         struct iommu_dma_cookie *cookie = domain->iova_cookie;
429         struct iova_domain *iovad = &cookie->iovad;
430         unsigned long shift, iova_len, iova = 0;
431
432         if (cookie->type == IOMMU_DMA_MSI_COOKIE) {
433                 cookie->msi_iova += size;
434                 return cookie->msi_iova - size;
435         }
436
437         shift = iova_shift(iovad);
438         iova_len = size >> shift;
439         /*
440          * Freeing non-power-of-two-sized allocations back into the IOVA caches
441          * will come back to bite us badly, so we have to waste a bit of space
442          * rounding up anything cacheable to make sure that can't happen. The
443          * order of the unadjusted size will still match upon freeing.
444          */
445         if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1)))
446                 iova_len = roundup_pow_of_two(iova_len);
447
448         dma_limit = min_not_zero(dma_limit, dev->bus_dma_limit);
449
450         if (domain->geometry.force_aperture)
451                 dma_limit = min(dma_limit, (u64)domain->geometry.aperture_end);
452
453         /* Try to get PCI devices a SAC address */
454         if (dma_limit > DMA_BIT_MASK(32) && dev_is_pci(dev))
455                 iova = alloc_iova_fast(iovad, iova_len,
456                                        DMA_BIT_MASK(32) >> shift, false);
457
458         if (!iova)
459                 iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift,
460                                        true);
461
462         return (dma_addr_t)iova << shift;
463 }
464
465 static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie,
466                 dma_addr_t iova, size_t size, struct page *freelist)
467 {
468         struct iova_domain *iovad = &cookie->iovad;
469
470         /* The MSI case is only ever cleaning up its most recent allocation */
471         if (cookie->type == IOMMU_DMA_MSI_COOKIE)
472                 cookie->msi_iova -= size;
473         else if (cookie->fq_domain)     /* non-strict mode */
474                 queue_iova(iovad, iova_pfn(iovad, iova),
475                                 size >> iova_shift(iovad),
476                                 (unsigned long)freelist);
477         else
478                 free_iova_fast(iovad, iova_pfn(iovad, iova),
479                                 size >> iova_shift(iovad));
480 }
481
482 static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr,
483                 size_t size)
484 {
485         struct iommu_domain *domain = iommu_get_dma_domain(dev);
486         struct iommu_dma_cookie *cookie = domain->iova_cookie;
487         struct iova_domain *iovad = &cookie->iovad;
488         size_t iova_off = iova_offset(iovad, dma_addr);
489         struct iommu_iotlb_gather iotlb_gather;
490         size_t unmapped;
491
492         dma_addr -= iova_off;
493         size = iova_align(iovad, size + iova_off);
494         iommu_iotlb_gather_init(&iotlb_gather);
495
496         unmapped = iommu_unmap_fast(domain, dma_addr, size, &iotlb_gather);
497         WARN_ON(unmapped != size);
498
499         if (!cookie->fq_domain)
500                 iommu_iotlb_sync(domain, &iotlb_gather);
501         iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist);
502 }
503
504 static void __iommu_dma_unmap_swiotlb(struct device *dev, dma_addr_t dma_addr,
505                 size_t size, enum dma_data_direction dir,
506                 unsigned long attrs)
507 {
508         struct iommu_domain *domain = iommu_get_dma_domain(dev);
509         struct iommu_dma_cookie *cookie = domain->iova_cookie;
510         struct iova_domain *iovad = &cookie->iovad;
511         phys_addr_t phys;
512
513         phys = iommu_iova_to_phys(domain, dma_addr);
514         if (WARN_ON(!phys))
515                 return;
516
517         __iommu_dma_unmap(dev, dma_addr, size);
518
519         if (unlikely(is_swiotlb_buffer(phys)))
520                 swiotlb_tbl_unmap_single(dev, phys, size,
521                                 iova_align(iovad, size), dir, attrs);
522 }
523
524 static bool dev_is_untrusted(struct device *dev)
525 {
526         return dev_is_pci(dev) && to_pci_dev(dev)->untrusted;
527 }
528
529 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
530                 size_t size, int prot, u64 dma_mask)
531 {
532         struct iommu_domain *domain = iommu_get_dma_domain(dev);
533         struct iommu_dma_cookie *cookie = domain->iova_cookie;
534         struct iova_domain *iovad = &cookie->iovad;
535         size_t iova_off = iova_offset(iovad, phys);
536         dma_addr_t iova;
537
538         if (unlikely(iommu_dma_deferred_attach(dev, domain)))
539                 return DMA_MAPPING_ERROR;
540
541         size = iova_align(iovad, size + iova_off);
542
543         iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev);
544         if (!iova)
545                 return DMA_MAPPING_ERROR;
546
547         if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) {
548                 iommu_dma_free_iova(cookie, iova, size, NULL);
549                 return DMA_MAPPING_ERROR;
550         }
551         return iova + iova_off;
552 }
553
554 static dma_addr_t __iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys,
555                 size_t org_size, dma_addr_t dma_mask, bool coherent,
556                 enum dma_data_direction dir, unsigned long attrs)
557 {
558         int prot = dma_info_to_prot(dir, coherent, attrs);
559         struct iommu_domain *domain = iommu_get_dma_domain(dev);
560         struct iommu_dma_cookie *cookie = domain->iova_cookie;
561         struct iova_domain *iovad = &cookie->iovad;
562         size_t aligned_size = org_size;
563         void *padding_start;
564         size_t padding_size;
565         dma_addr_t iova;
566
567         /*
568          * If both the physical buffer start address and size are
569          * page aligned, we don't need to use a bounce page.
570          */
571         if (IS_ENABLED(CONFIG_SWIOTLB) && dev_is_untrusted(dev) &&
572             iova_offset(iovad, phys | org_size)) {
573                 aligned_size = iova_align(iovad, org_size);
574                 phys = swiotlb_tbl_map_single(dev, phys, org_size,
575                                               aligned_size, dir, attrs);
576
577                 if (phys == DMA_MAPPING_ERROR)
578                         return DMA_MAPPING_ERROR;
579
580                 /* Cleanup the padding area. */
581                 padding_start = phys_to_virt(phys);
582                 padding_size = aligned_size;
583
584                 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
585                     (dir == DMA_TO_DEVICE ||
586                      dir == DMA_BIDIRECTIONAL)) {
587                         padding_start += org_size;
588                         padding_size -= org_size;
589                 }
590
591                 memset(padding_start, 0, padding_size);
592         }
593
594         iova = __iommu_dma_map(dev, phys, aligned_size, prot, dma_mask);
595         if ((iova == DMA_MAPPING_ERROR) && is_swiotlb_buffer(phys))
596                 swiotlb_tbl_unmap_single(dev, phys, org_size,
597                                 aligned_size, dir, attrs);
598
599         return iova;
600 }
601
602 static void __iommu_dma_free_pages(struct page **pages, int count)
603 {
604         while (count--)
605                 __free_page(pages[count]);
606         kvfree(pages);
607 }
608
609 static struct page **__iommu_dma_alloc_pages(struct device *dev,
610                 unsigned int count, unsigned long order_mask, gfp_t gfp)
611 {
612         struct page **pages;
613         unsigned int i = 0, nid = dev_to_node(dev);
614
615         order_mask &= (2U << MAX_ORDER) - 1;
616         if (!order_mask)
617                 return NULL;
618
619         pages = kvzalloc(count * sizeof(*pages), GFP_KERNEL);
620         if (!pages)
621                 return NULL;
622
623         /* IOMMU can map any pages, so himem can also be used here */
624         gfp |= __GFP_NOWARN | __GFP_HIGHMEM;
625
626         /* It makes no sense to muck about with huge pages */
627         gfp &= ~__GFP_COMP;
628
629         while (count) {
630                 struct page *page = NULL;
631                 unsigned int order_size;
632
633                 /*
634                  * Higher-order allocations are a convenience rather
635                  * than a necessity, hence using __GFP_NORETRY until
636                  * falling back to minimum-order allocations.
637                  */
638                 for (order_mask &= (2U << __fls(count)) - 1;
639                      order_mask; order_mask &= ~order_size) {
640                         unsigned int order = __fls(order_mask);
641                         gfp_t alloc_flags = gfp;
642
643                         order_size = 1U << order;
644                         if (order_mask > order_size)
645                                 alloc_flags |= __GFP_NORETRY;
646                         page = alloc_pages_node(nid, alloc_flags, order);
647                         if (!page)
648                                 continue;
649                         if (order)
650                                 split_page(page, order);
651                         break;
652                 }
653                 if (!page) {
654                         __iommu_dma_free_pages(pages, i);
655                         return NULL;
656                 }
657                 count -= order_size;
658                 while (order_size--)
659                         pages[i++] = page++;
660         }
661         return pages;
662 }
663
664 /**
665  * iommu_dma_alloc_remap - Allocate and map a buffer contiguous in IOVA space
666  * @dev: Device to allocate memory for. Must be a real device
667  *       attached to an iommu_dma_domain
668  * @size: Size of buffer in bytes
669  * @dma_handle: Out argument for allocated DMA handle
670  * @gfp: Allocation flags
671  * @prot: pgprot_t to use for the remapped mapping
672  * @attrs: DMA attributes for this allocation
673  *
674  * If @size is less than PAGE_SIZE, then a full CPU page will be allocated,
675  * but an IOMMU which supports smaller pages might not map the whole thing.
676  *
677  * Return: Mapped virtual address, or NULL on failure.
678  */
679 static void *iommu_dma_alloc_remap(struct device *dev, size_t size,
680                 dma_addr_t *dma_handle, gfp_t gfp, pgprot_t prot,
681                 unsigned long attrs)
682 {
683         struct iommu_domain *domain = iommu_get_dma_domain(dev);
684         struct iommu_dma_cookie *cookie = domain->iova_cookie;
685         struct iova_domain *iovad = &cookie->iovad;
686         bool coherent = dev_is_dma_coherent(dev);
687         int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
688         unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap;
689         struct page **pages;
690         struct sg_table sgt;
691         dma_addr_t iova;
692         void *vaddr;
693
694         *dma_handle = DMA_MAPPING_ERROR;
695
696         if (unlikely(iommu_dma_deferred_attach(dev, domain)))
697                 return NULL;
698
699         min_size = alloc_sizes & -alloc_sizes;
700         if (min_size < PAGE_SIZE) {
701                 min_size = PAGE_SIZE;
702                 alloc_sizes |= PAGE_SIZE;
703         } else {
704                 size = ALIGN(size, min_size);
705         }
706         if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES)
707                 alloc_sizes = min_size;
708
709         count = PAGE_ALIGN(size) >> PAGE_SHIFT;
710         pages = __iommu_dma_alloc_pages(dev, count, alloc_sizes >> PAGE_SHIFT,
711                                         gfp);
712         if (!pages)
713                 return NULL;
714
715         size = iova_align(iovad, size);
716         iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev);
717         if (!iova)
718                 goto out_free_pages;
719
720         if (sg_alloc_table_from_pages(&sgt, pages, count, 0, size, GFP_KERNEL))
721                 goto out_free_iova;
722
723         if (!(ioprot & IOMMU_CACHE)) {
724                 struct scatterlist *sg;
725                 int i;
726
727                 for_each_sg(sgt.sgl, sg, sgt.orig_nents, i)
728                         arch_dma_prep_coherent(sg_page(sg), sg->length);
729         }
730
731         if (iommu_map_sg_atomic(domain, iova, sgt.sgl, sgt.orig_nents, ioprot)
732                         < size)
733                 goto out_free_sg;
734
735         vaddr = dma_common_pages_remap(pages, size, prot,
736                         __builtin_return_address(0));
737         if (!vaddr)
738                 goto out_unmap;
739
740         *dma_handle = iova;
741         sg_free_table(&sgt);
742         return vaddr;
743
744 out_unmap:
745         __iommu_dma_unmap(dev, iova, size);
746 out_free_sg:
747         sg_free_table(&sgt);
748 out_free_iova:
749         iommu_dma_free_iova(cookie, iova, size, NULL);
750 out_free_pages:
751         __iommu_dma_free_pages(pages, count);
752         return NULL;
753 }
754
755 static void iommu_dma_sync_single_for_cpu(struct device *dev,
756                 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir)
757 {
758         phys_addr_t phys;
759
760         if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev))
761                 return;
762
763         phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle);
764         if (!dev_is_dma_coherent(dev))
765                 arch_sync_dma_for_cpu(phys, size, dir);
766
767         if (is_swiotlb_buffer(phys))
768                 swiotlb_tbl_sync_single(dev, phys, size, dir, SYNC_FOR_CPU);
769 }
770
771 static void iommu_dma_sync_single_for_device(struct device *dev,
772                 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir)
773 {
774         phys_addr_t phys;
775
776         if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev))
777                 return;
778
779         phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle);
780         if (is_swiotlb_buffer(phys))
781                 swiotlb_tbl_sync_single(dev, phys, size, dir, SYNC_FOR_DEVICE);
782
783         if (!dev_is_dma_coherent(dev))
784                 arch_sync_dma_for_device(phys, size, dir);
785 }
786
787 static void iommu_dma_sync_sg_for_cpu(struct device *dev,
788                 struct scatterlist *sgl, int nelems,
789                 enum dma_data_direction dir)
790 {
791         struct scatterlist *sg;
792         int i;
793
794         if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev))
795                 return;
796
797         for_each_sg(sgl, sg, nelems, i) {
798                 if (!dev_is_dma_coherent(dev))
799                         arch_sync_dma_for_cpu(sg_phys(sg), sg->length, dir);
800
801                 if (is_swiotlb_buffer(sg_phys(sg)))
802                         swiotlb_tbl_sync_single(dev, sg_phys(sg), sg->length,
803                                                 dir, SYNC_FOR_CPU);
804         }
805 }
806
807 static void iommu_dma_sync_sg_for_device(struct device *dev,
808                 struct scatterlist *sgl, int nelems,
809                 enum dma_data_direction dir)
810 {
811         struct scatterlist *sg;
812         int i;
813
814         if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev))
815                 return;
816
817         for_each_sg(sgl, sg, nelems, i) {
818                 if (is_swiotlb_buffer(sg_phys(sg)))
819                         swiotlb_tbl_sync_single(dev, sg_phys(sg), sg->length,
820                                                 dir, SYNC_FOR_DEVICE);
821
822                 if (!dev_is_dma_coherent(dev))
823                         arch_sync_dma_for_device(sg_phys(sg), sg->length, dir);
824         }
825 }
826
827 static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page,
828                 unsigned long offset, size_t size, enum dma_data_direction dir,
829                 unsigned long attrs)
830 {
831         phys_addr_t phys = page_to_phys(page) + offset;
832         bool coherent = dev_is_dma_coherent(dev);
833         dma_addr_t dma_handle;
834
835         dma_handle = __iommu_dma_map_swiotlb(dev, phys, size, dma_get_mask(dev),
836                         coherent, dir, attrs);
837         if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
838             dma_handle != DMA_MAPPING_ERROR)
839                 arch_sync_dma_for_device(phys, size, dir);
840         return dma_handle;
841 }
842
843 static void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle,
844                 size_t size, enum dma_data_direction dir, unsigned long attrs)
845 {
846         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
847                 iommu_dma_sync_single_for_cpu(dev, dma_handle, size, dir);
848         __iommu_dma_unmap_swiotlb(dev, dma_handle, size, dir, attrs);
849 }
850
851 /*
852  * Prepare a successfully-mapped scatterlist to give back to the caller.
853  *
854  * At this point the segments are already laid out by iommu_dma_map_sg() to
855  * avoid individually crossing any boundaries, so we merely need to check a
856  * segment's start address to avoid concatenating across one.
857  */
858 static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents,
859                 dma_addr_t dma_addr)
860 {
861         struct scatterlist *s, *cur = sg;
862         unsigned long seg_mask = dma_get_seg_boundary(dev);
863         unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev);
864         int i, count = 0;
865
866         for_each_sg(sg, s, nents, i) {
867                 /* Restore this segment's original unaligned fields first */
868                 unsigned int s_iova_off = sg_dma_address(s);
869                 unsigned int s_length = sg_dma_len(s);
870                 unsigned int s_iova_len = s->length;
871
872                 s->offset += s_iova_off;
873                 s->length = s_length;
874                 sg_dma_address(s) = DMA_MAPPING_ERROR;
875                 sg_dma_len(s) = 0;
876
877                 /*
878                  * Now fill in the real DMA data. If...
879                  * - there is a valid output segment to append to
880                  * - and this segment starts on an IOVA page boundary
881                  * - but doesn't fall at a segment boundary
882                  * - and wouldn't make the resulting output segment too long
883                  */
884                 if (cur_len && !s_iova_off && (dma_addr & seg_mask) &&
885                     (max_len - cur_len >= s_length)) {
886                         /* ...then concatenate it with the previous one */
887                         cur_len += s_length;
888                 } else {
889                         /* Otherwise start the next output segment */
890                         if (i > 0)
891                                 cur = sg_next(cur);
892                         cur_len = s_length;
893                         count++;
894
895                         sg_dma_address(cur) = dma_addr + s_iova_off;
896                 }
897
898                 sg_dma_len(cur) = cur_len;
899                 dma_addr += s_iova_len;
900
901                 if (s_length + s_iova_off < s_iova_len)
902                         cur_len = 0;
903         }
904         return count;
905 }
906
907 /*
908  * If mapping failed, then just restore the original list,
909  * but making sure the DMA fields are invalidated.
910  */
911 static void __invalidate_sg(struct scatterlist *sg, int nents)
912 {
913         struct scatterlist *s;
914         int i;
915
916         for_each_sg(sg, s, nents, i) {
917                 if (sg_dma_address(s) != DMA_MAPPING_ERROR)
918                         s->offset += sg_dma_address(s);
919                 if (sg_dma_len(s))
920                         s->length = sg_dma_len(s);
921                 sg_dma_address(s) = DMA_MAPPING_ERROR;
922                 sg_dma_len(s) = 0;
923         }
924 }
925
926 static void iommu_dma_unmap_sg_swiotlb(struct device *dev, struct scatterlist *sg,
927                 int nents, enum dma_data_direction dir, unsigned long attrs)
928 {
929         struct scatterlist *s;
930         int i;
931
932         for_each_sg(sg, s, nents, i)
933                 __iommu_dma_unmap_swiotlb(dev, sg_dma_address(s),
934                                 sg_dma_len(s), dir, attrs);
935 }
936
937 static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
938                 int nents, enum dma_data_direction dir, unsigned long attrs)
939 {
940         struct scatterlist *s;
941         int i;
942
943         for_each_sg(sg, s, nents, i) {
944                 sg_dma_address(s) = __iommu_dma_map_swiotlb(dev, sg_phys(s),
945                                 s->length, dma_get_mask(dev),
946                                 dev_is_dma_coherent(dev), dir, attrs);
947                 if (sg_dma_address(s) == DMA_MAPPING_ERROR)
948                         goto out_unmap;
949                 sg_dma_len(s) = s->length;
950         }
951
952         return nents;
953
954 out_unmap:
955         iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
956         return 0;
957 }
958
959 /*
960  * The DMA API client is passing in a scatterlist which could describe
961  * any old buffer layout, but the IOMMU API requires everything to be
962  * aligned to IOMMU pages. Hence the need for this complicated bit of
963  * impedance-matching, to be able to hand off a suitably-aligned list,
964  * but still preserve the original offsets and sizes for the caller.
965  */
966 static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
967                 int nents, enum dma_data_direction dir, unsigned long attrs)
968 {
969         struct iommu_domain *domain = iommu_get_dma_domain(dev);
970         struct iommu_dma_cookie *cookie = domain->iova_cookie;
971         struct iova_domain *iovad = &cookie->iovad;
972         struct scatterlist *s, *prev = NULL;
973         int prot = dma_info_to_prot(dir, dev_is_dma_coherent(dev), attrs);
974         dma_addr_t iova;
975         size_t iova_len = 0;
976         unsigned long mask = dma_get_seg_boundary(dev);
977         int i;
978
979         if (unlikely(iommu_dma_deferred_attach(dev, domain)))
980                 return 0;
981
982         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
983                 iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
984
985         if (dev_is_untrusted(dev))
986                 return iommu_dma_map_sg_swiotlb(dev, sg, nents, dir, attrs);
987
988         /*
989          * Work out how much IOVA space we need, and align the segments to
990          * IOVA granules for the IOMMU driver to handle. With some clever
991          * trickery we can modify the list in-place, but reversibly, by
992          * stashing the unaligned parts in the as-yet-unused DMA fields.
993          */
994         for_each_sg(sg, s, nents, i) {
995                 size_t s_iova_off = iova_offset(iovad, s->offset);
996                 size_t s_length = s->length;
997                 size_t pad_len = (mask - iova_len + 1) & mask;
998
999                 sg_dma_address(s) = s_iova_off;
1000                 sg_dma_len(s) = s_length;
1001                 s->offset -= s_iova_off;
1002                 s_length = iova_align(iovad, s_length + s_iova_off);
1003                 s->length = s_length;
1004
1005                 /*
1006                  * Due to the alignment of our single IOVA allocation, we can
1007                  * depend on these assumptions about the segment boundary mask:
1008                  * - If mask size >= IOVA size, then the IOVA range cannot
1009                  *   possibly fall across a boundary, so we don't care.
1010                  * - If mask size < IOVA size, then the IOVA range must start
1011                  *   exactly on a boundary, therefore we can lay things out
1012                  *   based purely on segment lengths without needing to know
1013                  *   the actual addresses beforehand.
1014                  * - The mask must be a power of 2, so pad_len == 0 if
1015                  *   iova_len == 0, thus we cannot dereference prev the first
1016                  *   time through here (i.e. before it has a meaningful value).
1017                  */
1018                 if (pad_len && pad_len < s_length - 1) {
1019                         prev->length += pad_len;
1020                         iova_len += pad_len;
1021                 }
1022
1023                 iova_len += s_length;
1024                 prev = s;
1025         }
1026
1027         iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev);
1028         if (!iova)
1029                 goto out_restore_sg;
1030
1031         /*
1032          * We'll leave any physical concatenation to the IOMMU driver's
1033          * implementation - it knows better than we do.
1034          */
1035         if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
1036                 goto out_free_iova;
1037
1038         return __finalise_sg(dev, sg, nents, iova);
1039
1040 out_free_iova:
1041         iommu_dma_free_iova(cookie, iova, iova_len, NULL);
1042 out_restore_sg:
1043         __invalidate_sg(sg, nents);
1044         return 0;
1045 }
1046
1047 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
1048                 int nents, enum dma_data_direction dir, unsigned long attrs)
1049 {
1050         dma_addr_t start, end;
1051         struct scatterlist *tmp;
1052         int i;
1053
1054         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
1055                 iommu_dma_sync_sg_for_cpu(dev, sg, nents, dir);
1056
1057         if (dev_is_untrusted(dev)) {
1058                 iommu_dma_unmap_sg_swiotlb(dev, sg, nents, dir, attrs);
1059                 return;
1060         }
1061
1062         /*
1063          * The scatterlist segments are mapped into a single
1064          * contiguous IOVA allocation, so this is incredibly easy.
1065          */
1066         start = sg_dma_address(sg);
1067         for_each_sg(sg_next(sg), tmp, nents - 1, i) {
1068                 if (sg_dma_len(tmp) == 0)
1069                         break;
1070                 sg = tmp;
1071         }
1072         end = sg_dma_address(sg) + sg_dma_len(sg);
1073         __iommu_dma_unmap(dev, start, end - start);
1074 }
1075
1076 static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys,
1077                 size_t size, enum dma_data_direction dir, unsigned long attrs)
1078 {
1079         return __iommu_dma_map(dev, phys, size,
1080                         dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO,
1081                         dma_get_mask(dev));
1082 }
1083
1084 static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle,
1085                 size_t size, enum dma_data_direction dir, unsigned long attrs)
1086 {
1087         __iommu_dma_unmap(dev, handle, size);
1088 }
1089
1090 static void __iommu_dma_free(struct device *dev, size_t size, void *cpu_addr)
1091 {
1092         size_t alloc_size = PAGE_ALIGN(size);
1093         int count = alloc_size >> PAGE_SHIFT;
1094         struct page *page = NULL, **pages = NULL;
1095
1096         /* Non-coherent atomic allocation? Easy */
1097         if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) &&
1098             dma_free_from_pool(dev, cpu_addr, alloc_size))
1099                 return;
1100
1101         if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) {
1102                 /*
1103                  * If it the address is remapped, then it's either non-coherent
1104                  * or highmem CMA, or an iommu_dma_alloc_remap() construction.
1105                  */
1106                 pages = dma_common_find_pages(cpu_addr);
1107                 if (!pages)
1108                         page = vmalloc_to_page(cpu_addr);
1109                 dma_common_free_remap(cpu_addr, alloc_size);
1110         } else {
1111                 /* Lowmem means a coherent atomic or CMA allocation */
1112                 page = virt_to_page(cpu_addr);
1113         }
1114
1115         if (pages)
1116                 __iommu_dma_free_pages(pages, count);
1117         if (page)
1118                 dma_free_contiguous(dev, page, alloc_size);
1119 }
1120
1121 static void iommu_dma_free(struct device *dev, size_t size, void *cpu_addr,
1122                 dma_addr_t handle, unsigned long attrs)
1123 {
1124         __iommu_dma_unmap(dev, handle, size);
1125         __iommu_dma_free(dev, size, cpu_addr);
1126 }
1127
1128 static void *iommu_dma_alloc_pages(struct device *dev, size_t size,
1129                 struct page **pagep, gfp_t gfp, unsigned long attrs)
1130 {
1131         bool coherent = dev_is_dma_coherent(dev);
1132         size_t alloc_size = PAGE_ALIGN(size);
1133         int node = dev_to_node(dev);
1134         struct page *page = NULL;
1135         void *cpu_addr;
1136
1137         page = dma_alloc_contiguous(dev, alloc_size, gfp);
1138         if (!page)
1139                 page = alloc_pages_node(node, gfp, get_order(alloc_size));
1140         if (!page)
1141                 return NULL;
1142
1143         if (IS_ENABLED(CONFIG_DMA_REMAP) && (!coherent || PageHighMem(page))) {
1144                 pgprot_t prot = dma_pgprot(dev, PAGE_KERNEL, attrs);
1145
1146                 cpu_addr = dma_common_contiguous_remap(page, alloc_size,
1147                                 prot, __builtin_return_address(0));
1148                 if (!cpu_addr)
1149                         goto out_free_pages;
1150
1151                 if (!coherent)
1152                         arch_dma_prep_coherent(page, size);
1153         } else {
1154                 cpu_addr = page_address(page);
1155         }
1156
1157         *pagep = page;
1158         memset(cpu_addr, 0, alloc_size);
1159         return cpu_addr;
1160 out_free_pages:
1161         dma_free_contiguous(dev, page, alloc_size);
1162         return NULL;
1163 }
1164
1165 static void *iommu_dma_alloc(struct device *dev, size_t size,
1166                 dma_addr_t *handle, gfp_t gfp, unsigned long attrs)
1167 {
1168         bool coherent = dev_is_dma_coherent(dev);
1169         int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
1170         struct page *page = NULL;
1171         void *cpu_addr;
1172
1173         gfp |= __GFP_ZERO;
1174
1175         if (IS_ENABLED(CONFIG_DMA_REMAP) && gfpflags_allow_blocking(gfp) &&
1176             !(attrs & DMA_ATTR_FORCE_CONTIGUOUS)) {
1177                 return iommu_dma_alloc_remap(dev, size, handle, gfp,
1178                                 dma_pgprot(dev, PAGE_KERNEL, attrs), attrs);
1179         }
1180
1181         if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) &&
1182             !gfpflags_allow_blocking(gfp) && !coherent)
1183                 page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr,
1184                                                gfp, NULL);
1185         else
1186                 cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs);
1187         if (!cpu_addr)
1188                 return NULL;
1189
1190         *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot,
1191                         dev->coherent_dma_mask);
1192         if (*handle == DMA_MAPPING_ERROR) {
1193                 __iommu_dma_free(dev, size, cpu_addr);
1194                 return NULL;
1195         }
1196
1197         return cpu_addr;
1198 }
1199
1200 #ifdef CONFIG_DMA_REMAP
1201 static void *iommu_dma_alloc_noncoherent(struct device *dev, size_t size,
1202                 dma_addr_t *handle, enum dma_data_direction dir, gfp_t gfp)
1203 {
1204         if (!gfpflags_allow_blocking(gfp)) {
1205                 struct page *page;
1206
1207                 page = dma_common_alloc_pages(dev, size, handle, dir, gfp);
1208                 if (!page)
1209                         return NULL;
1210                 return page_address(page);
1211         }
1212
1213         return iommu_dma_alloc_remap(dev, size, handle, gfp | __GFP_ZERO,
1214                                      PAGE_KERNEL, 0);
1215 }
1216
1217 static void iommu_dma_free_noncoherent(struct device *dev, size_t size,
1218                 void *cpu_addr, dma_addr_t handle, enum dma_data_direction dir)
1219 {
1220         __iommu_dma_unmap(dev, handle, size);
1221         __iommu_dma_free(dev, size, cpu_addr);
1222 }
1223 #else
1224 #define iommu_dma_alloc_noncoherent             NULL
1225 #define iommu_dma_free_noncoherent              NULL
1226 #endif /* CONFIG_DMA_REMAP */
1227
1228 static int iommu_dma_mmap(struct device *dev, struct vm_area_struct *vma,
1229                 void *cpu_addr, dma_addr_t dma_addr, size_t size,
1230                 unsigned long attrs)
1231 {
1232         unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
1233         unsigned long pfn, off = vma->vm_pgoff;
1234         int ret;
1235
1236         vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs);
1237
1238         if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
1239                 return ret;
1240
1241         if (off >= nr_pages || vma_pages(vma) > nr_pages - off)
1242                 return -ENXIO;
1243
1244         if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) {
1245                 struct page **pages = dma_common_find_pages(cpu_addr);
1246
1247                 if (pages)
1248                         return vm_map_pages(vma, pages, nr_pages);
1249                 pfn = vmalloc_to_pfn(cpu_addr);
1250         } else {
1251                 pfn = page_to_pfn(virt_to_page(cpu_addr));
1252         }
1253
1254         return remap_pfn_range(vma, vma->vm_start, pfn + off,
1255                                vma->vm_end - vma->vm_start,
1256                                vma->vm_page_prot);
1257 }
1258
1259 static int iommu_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
1260                 void *cpu_addr, dma_addr_t dma_addr, size_t size,
1261                 unsigned long attrs)
1262 {
1263         struct page *page;
1264         int ret;
1265
1266         if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) {
1267                 struct page **pages = dma_common_find_pages(cpu_addr);
1268
1269                 if (pages) {
1270                         return sg_alloc_table_from_pages(sgt, pages,
1271                                         PAGE_ALIGN(size) >> PAGE_SHIFT,
1272                                         0, size, GFP_KERNEL);
1273                 }
1274
1275                 page = vmalloc_to_page(cpu_addr);
1276         } else {
1277                 page = virt_to_page(cpu_addr);
1278         }
1279
1280         ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
1281         if (!ret)
1282                 sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
1283         return ret;
1284 }
1285
1286 static unsigned long iommu_dma_get_merge_boundary(struct device *dev)
1287 {
1288         struct iommu_domain *domain = iommu_get_dma_domain(dev);
1289
1290         return (1UL << __ffs(domain->pgsize_bitmap)) - 1;
1291 }
1292
1293 static const struct dma_map_ops iommu_dma_ops = {
1294         .alloc                  = iommu_dma_alloc,
1295         .free                   = iommu_dma_free,
1296         .alloc_pages            = dma_common_alloc_pages,
1297         .free_pages             = dma_common_free_pages,
1298         .alloc_noncoherent      = iommu_dma_alloc_noncoherent,
1299         .free_noncoherent       = iommu_dma_free_noncoherent,
1300         .mmap                   = iommu_dma_mmap,
1301         .get_sgtable            = iommu_dma_get_sgtable,
1302         .map_page               = iommu_dma_map_page,
1303         .unmap_page             = iommu_dma_unmap_page,
1304         .map_sg                 = iommu_dma_map_sg,
1305         .unmap_sg               = iommu_dma_unmap_sg,
1306         .sync_single_for_cpu    = iommu_dma_sync_single_for_cpu,
1307         .sync_single_for_device = iommu_dma_sync_single_for_device,
1308         .sync_sg_for_cpu        = iommu_dma_sync_sg_for_cpu,
1309         .sync_sg_for_device     = iommu_dma_sync_sg_for_device,
1310         .map_resource           = iommu_dma_map_resource,
1311         .unmap_resource         = iommu_dma_unmap_resource,
1312         .get_merge_boundary     = iommu_dma_get_merge_boundary,
1313 };
1314
1315 /*
1316  * The IOMMU core code allocates the default DMA domain, which the underlying
1317  * IOMMU driver needs to support via the dma-iommu layer.
1318  */
1319 void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size)
1320 {
1321         struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1322
1323         if (!domain)
1324                 goto out_err;
1325
1326         /*
1327          * The IOMMU core code allocates the default DMA domain, which the
1328          * underlying IOMMU driver needs to support via the dma-iommu layer.
1329          */
1330         if (domain->type == IOMMU_DOMAIN_DMA) {
1331                 if (iommu_dma_init_domain(domain, dma_base, size, dev))
1332                         goto out_err;
1333                 dev->dma_ops = &iommu_dma_ops;
1334         }
1335
1336         return;
1337 out_err:
1338          pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
1339                  dev_name(dev));
1340 }
1341
1342 static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev,
1343                 phys_addr_t msi_addr, struct iommu_domain *domain)
1344 {
1345         struct iommu_dma_cookie *cookie = domain->iova_cookie;
1346         struct iommu_dma_msi_page *msi_page;
1347         dma_addr_t iova;
1348         int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1349         size_t size = cookie_msi_granule(cookie);
1350
1351         msi_addr &= ~(phys_addr_t)(size - 1);
1352         list_for_each_entry(msi_page, &cookie->msi_page_list, list)
1353                 if (msi_page->phys == msi_addr)
1354                         return msi_page;
1355
1356         msi_page = kzalloc(sizeof(*msi_page), GFP_KERNEL);
1357         if (!msi_page)
1358                 return NULL;
1359
1360         iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev);
1361         if (!iova)
1362                 goto out_free_page;
1363
1364         if (iommu_map(domain, iova, msi_addr, size, prot))
1365                 goto out_free_iova;
1366
1367         INIT_LIST_HEAD(&msi_page->list);
1368         msi_page->phys = msi_addr;
1369         msi_page->iova = iova;
1370         list_add(&msi_page->list, &cookie->msi_page_list);
1371         return msi_page;
1372
1373 out_free_iova:
1374         iommu_dma_free_iova(cookie, iova, size, NULL);
1375 out_free_page:
1376         kfree(msi_page);
1377         return NULL;
1378 }
1379
1380 int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)
1381 {
1382         struct device *dev = msi_desc_to_dev(desc);
1383         struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1384         struct iommu_dma_msi_page *msi_page;
1385         static DEFINE_MUTEX(msi_prepare_lock); /* see below */
1386
1387         if (!domain || !domain->iova_cookie) {
1388                 desc->iommu_cookie = NULL;
1389                 return 0;
1390         }
1391
1392         /*
1393          * In fact the whole prepare operation should already be serialised by
1394          * irq_domain_mutex further up the callchain, but that's pretty subtle
1395          * on its own, so consider this locking as failsafe documentation...
1396          */
1397         mutex_lock(&msi_prepare_lock);
1398         msi_page = iommu_dma_get_msi_page(dev, msi_addr, domain);
1399         mutex_unlock(&msi_prepare_lock);
1400
1401         msi_desc_set_iommu_cookie(desc, msi_page);
1402
1403         if (!msi_page)
1404                 return -ENOMEM;
1405         return 0;
1406 }
1407
1408 void iommu_dma_compose_msi_msg(struct msi_desc *desc,
1409                                struct msi_msg *msg)
1410 {
1411         struct device *dev = msi_desc_to_dev(desc);
1412         const struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1413         const struct iommu_dma_msi_page *msi_page;
1414
1415         msi_page = msi_desc_get_iommu_cookie(desc);
1416
1417         if (!domain || !domain->iova_cookie || WARN_ON(!msi_page))
1418                 return;
1419
1420         msg->address_hi = upper_32_bits(msi_page->iova);
1421         msg->address_lo &= cookie_msi_granule(domain->iova_cookie) - 1;
1422         msg->address_lo += lower_32_bits(msi_page->iova);
1423 }
1424
1425 static int iommu_dma_init(void)
1426 {
1427         return iova_cache_get();
1428 }
1429 arch_initcall(iommu_dma_init);
This page took 0.117018 seconds and 4 git commands to generate.