Merge tag 'input-for-v6.1-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor...
[platform/kernel/linux-starfive.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/atomic.h>
13 #include <linux/crash_dump.h>
14 #include <linux/device.h>
15 #include <linux/dma-direct.h>
16 #include <linux/dma-map-ops.h>
17 #include <linux/gfp.h>
18 #include <linux/huge_mm.h>
19 #include <linux/iommu.h>
20 #include <linux/iova.h>
21 #include <linux/irq.h>
22 #include <linux/list_sort.h>
23 #include <linux/memremap.h>
24 #include <linux/mm.h>
25 #include <linux/mutex.h>
26 #include <linux/pci.h>
27 #include <linux/scatterlist.h>
28 #include <linux/spinlock.h>
29 #include <linux/swiotlb.h>
30 #include <linux/vmalloc.h>
31
32 #include "dma-iommu.h"
33
34 struct iommu_dma_msi_page {
35         struct list_head        list;
36         dma_addr_t              iova;
37         phys_addr_t             phys;
38 };
39
40 enum iommu_dma_cookie_type {
41         IOMMU_DMA_IOVA_COOKIE,
42         IOMMU_DMA_MSI_COOKIE,
43 };
44
45 struct iommu_dma_cookie {
46         enum iommu_dma_cookie_type      type;
47         union {
48                 /* Full allocator for IOMMU_DMA_IOVA_COOKIE */
49                 struct {
50                         struct iova_domain      iovad;
51
52                         struct iova_fq __percpu *fq;    /* Flush queue */
53                         /* Number of TLB flushes that have been started */
54                         atomic64_t              fq_flush_start_cnt;
55                         /* Number of TLB flushes that have been finished */
56                         atomic64_t              fq_flush_finish_cnt;
57                         /* Timer to regularily empty the flush queues */
58                         struct timer_list       fq_timer;
59                         /* 1 when timer is active, 0 when not */
60                         atomic_t                fq_timer_on;
61                 };
62                 /* Trivial linear page allocator for IOMMU_DMA_MSI_COOKIE */
63                 dma_addr_t              msi_iova;
64         };
65         struct list_head                msi_page_list;
66
67         /* Domain for flush queue callback; NULL if flush queue not in use */
68         struct iommu_domain             *fq_domain;
69         struct mutex                    mutex;
70 };
71
72 static DEFINE_STATIC_KEY_FALSE(iommu_deferred_attach_enabled);
73 bool iommu_dma_forcedac __read_mostly;
74
75 static int __init iommu_dma_forcedac_setup(char *str)
76 {
77         int ret = kstrtobool(str, &iommu_dma_forcedac);
78
79         if (!ret && iommu_dma_forcedac)
80                 pr_info("Forcing DAC for PCI devices\n");
81         return ret;
82 }
83 early_param("iommu.forcedac", iommu_dma_forcedac_setup);
84
85 /* Number of entries per flush queue */
86 #define IOVA_FQ_SIZE    256
87
88 /* Timeout (in ms) after which entries are flushed from the queue */
89 #define IOVA_FQ_TIMEOUT 10
90
91 /* Flush queue entry for deferred flushing */
92 struct iova_fq_entry {
93         unsigned long iova_pfn;
94         unsigned long pages;
95         struct list_head freelist;
96         u64 counter; /* Flush counter when this entry was added */
97 };
98
99 /* Per-CPU flush queue structure */
100 struct iova_fq {
101         struct iova_fq_entry entries[IOVA_FQ_SIZE];
102         unsigned int head, tail;
103         spinlock_t lock;
104 };
105
106 #define fq_ring_for_each(i, fq) \
107         for ((i) = (fq)->head; (i) != (fq)->tail; (i) = ((i) + 1) % IOVA_FQ_SIZE)
108
109 static inline bool fq_full(struct iova_fq *fq)
110 {
111         assert_spin_locked(&fq->lock);
112         return (((fq->tail + 1) % IOVA_FQ_SIZE) == fq->head);
113 }
114
115 static inline unsigned int fq_ring_add(struct iova_fq *fq)
116 {
117         unsigned int idx = fq->tail;
118
119         assert_spin_locked(&fq->lock);
120
121         fq->tail = (idx + 1) % IOVA_FQ_SIZE;
122
123         return idx;
124 }
125
126 static void fq_ring_free(struct iommu_dma_cookie *cookie, struct iova_fq *fq)
127 {
128         u64 counter = atomic64_read(&cookie->fq_flush_finish_cnt);
129         unsigned int idx;
130
131         assert_spin_locked(&fq->lock);
132
133         fq_ring_for_each(idx, fq) {
134
135                 if (fq->entries[idx].counter >= counter)
136                         break;
137
138                 put_pages_list(&fq->entries[idx].freelist);
139                 free_iova_fast(&cookie->iovad,
140                                fq->entries[idx].iova_pfn,
141                                fq->entries[idx].pages);
142
143                 fq->head = (fq->head + 1) % IOVA_FQ_SIZE;
144         }
145 }
146
147 static void fq_flush_iotlb(struct iommu_dma_cookie *cookie)
148 {
149         atomic64_inc(&cookie->fq_flush_start_cnt);
150         cookie->fq_domain->ops->flush_iotlb_all(cookie->fq_domain);
151         atomic64_inc(&cookie->fq_flush_finish_cnt);
152 }
153
154 static void fq_flush_timeout(struct timer_list *t)
155 {
156         struct iommu_dma_cookie *cookie = from_timer(cookie, t, fq_timer);
157         int cpu;
158
159         atomic_set(&cookie->fq_timer_on, 0);
160         fq_flush_iotlb(cookie);
161
162         for_each_possible_cpu(cpu) {
163                 unsigned long flags;
164                 struct iova_fq *fq;
165
166                 fq = per_cpu_ptr(cookie->fq, cpu);
167                 spin_lock_irqsave(&fq->lock, flags);
168                 fq_ring_free(cookie, fq);
169                 spin_unlock_irqrestore(&fq->lock, flags);
170         }
171 }
172
173 static void queue_iova(struct iommu_dma_cookie *cookie,
174                 unsigned long pfn, unsigned long pages,
175                 struct list_head *freelist)
176 {
177         struct iova_fq *fq;
178         unsigned long flags;
179         unsigned int idx;
180
181         /*
182          * Order against the IOMMU driver's pagetable update from unmapping
183          * @pte, to guarantee that fq_flush_iotlb() observes that if called
184          * from a different CPU before we release the lock below. Full barrier
185          * so it also pairs with iommu_dma_init_fq() to avoid seeing partially
186          * written fq state here.
187          */
188         smp_mb();
189
190         fq = raw_cpu_ptr(cookie->fq);
191         spin_lock_irqsave(&fq->lock, flags);
192
193         /*
194          * First remove all entries from the flush queue that have already been
195          * flushed out on another CPU. This makes the fq_full() check below less
196          * likely to be true.
197          */
198         fq_ring_free(cookie, fq);
199
200         if (fq_full(fq)) {
201                 fq_flush_iotlb(cookie);
202                 fq_ring_free(cookie, fq);
203         }
204
205         idx = fq_ring_add(fq);
206
207         fq->entries[idx].iova_pfn = pfn;
208         fq->entries[idx].pages    = pages;
209         fq->entries[idx].counter  = atomic64_read(&cookie->fq_flush_start_cnt);
210         list_splice(freelist, &fq->entries[idx].freelist);
211
212         spin_unlock_irqrestore(&fq->lock, flags);
213
214         /* Avoid false sharing as much as possible. */
215         if (!atomic_read(&cookie->fq_timer_on) &&
216             !atomic_xchg(&cookie->fq_timer_on, 1))
217                 mod_timer(&cookie->fq_timer,
218                           jiffies + msecs_to_jiffies(IOVA_FQ_TIMEOUT));
219 }
220
221 static void iommu_dma_free_fq(struct iommu_dma_cookie *cookie)
222 {
223         int cpu, idx;
224
225         if (!cookie->fq)
226                 return;
227
228         del_timer_sync(&cookie->fq_timer);
229         /* The IOVAs will be torn down separately, so just free our queued pages */
230         for_each_possible_cpu(cpu) {
231                 struct iova_fq *fq = per_cpu_ptr(cookie->fq, cpu);
232
233                 fq_ring_for_each(idx, fq)
234                         put_pages_list(&fq->entries[idx].freelist);
235         }
236
237         free_percpu(cookie->fq);
238 }
239
240 /* sysfs updates are serialised by the mutex of the group owning @domain */
241 int iommu_dma_init_fq(struct iommu_domain *domain)
242 {
243         struct iommu_dma_cookie *cookie = domain->iova_cookie;
244         struct iova_fq __percpu *queue;
245         int i, cpu;
246
247         if (cookie->fq_domain)
248                 return 0;
249
250         atomic64_set(&cookie->fq_flush_start_cnt,  0);
251         atomic64_set(&cookie->fq_flush_finish_cnt, 0);
252
253         queue = alloc_percpu(struct iova_fq);
254         if (!queue) {
255                 pr_warn("iova flush queue initialization failed\n");
256                 return -ENOMEM;
257         }
258
259         for_each_possible_cpu(cpu) {
260                 struct iova_fq *fq = per_cpu_ptr(queue, cpu);
261
262                 fq->head = 0;
263                 fq->tail = 0;
264
265                 spin_lock_init(&fq->lock);
266
267                 for (i = 0; i < IOVA_FQ_SIZE; i++)
268                         INIT_LIST_HEAD(&fq->entries[i].freelist);
269         }
270
271         cookie->fq = queue;
272
273         timer_setup(&cookie->fq_timer, fq_flush_timeout, 0);
274         atomic_set(&cookie->fq_timer_on, 0);
275         /*
276          * Prevent incomplete fq state being observable. Pairs with path from
277          * __iommu_dma_unmap() through iommu_dma_free_iova() to queue_iova()
278          */
279         smp_wmb();
280         WRITE_ONCE(cookie->fq_domain, domain);
281         return 0;
282 }
283
284 static inline size_t cookie_msi_granule(struct iommu_dma_cookie *cookie)
285 {
286         if (cookie->type == IOMMU_DMA_IOVA_COOKIE)
287                 return cookie->iovad.granule;
288         return PAGE_SIZE;
289 }
290
291 static struct iommu_dma_cookie *cookie_alloc(enum iommu_dma_cookie_type type)
292 {
293         struct iommu_dma_cookie *cookie;
294
295         cookie = kzalloc(sizeof(*cookie), GFP_KERNEL);
296         if (cookie) {
297                 INIT_LIST_HEAD(&cookie->msi_page_list);
298                 cookie->type = type;
299         }
300         return cookie;
301 }
302
303 /**
304  * iommu_get_dma_cookie - Acquire DMA-API resources for a domain
305  * @domain: IOMMU domain to prepare for DMA-API usage
306  */
307 int iommu_get_dma_cookie(struct iommu_domain *domain)
308 {
309         if (domain->iova_cookie)
310                 return -EEXIST;
311
312         domain->iova_cookie = cookie_alloc(IOMMU_DMA_IOVA_COOKIE);
313         if (!domain->iova_cookie)
314                 return -ENOMEM;
315
316         mutex_init(&domain->iova_cookie->mutex);
317         return 0;
318 }
319
320 /**
321  * iommu_get_msi_cookie - Acquire just MSI remapping resources
322  * @domain: IOMMU domain to prepare
323  * @base: Start address of IOVA region for MSI mappings
324  *
325  * Users who manage their own IOVA allocation and do not want DMA API support,
326  * but would still like to take advantage of automatic MSI remapping, can use
327  * this to initialise their own domain appropriately. Users should reserve a
328  * contiguous IOVA region, starting at @base, large enough to accommodate the
329  * number of PAGE_SIZE mappings necessary to cover every MSI doorbell address
330  * used by the devices attached to @domain.
331  */
332 int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base)
333 {
334         struct iommu_dma_cookie *cookie;
335
336         if (domain->type != IOMMU_DOMAIN_UNMANAGED)
337                 return -EINVAL;
338
339         if (domain->iova_cookie)
340                 return -EEXIST;
341
342         cookie = cookie_alloc(IOMMU_DMA_MSI_COOKIE);
343         if (!cookie)
344                 return -ENOMEM;
345
346         cookie->msi_iova = base;
347         domain->iova_cookie = cookie;
348         return 0;
349 }
350 EXPORT_SYMBOL(iommu_get_msi_cookie);
351
352 /**
353  * iommu_put_dma_cookie - Release a domain's DMA mapping resources
354  * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie() or
355  *          iommu_get_msi_cookie()
356  */
357 void iommu_put_dma_cookie(struct iommu_domain *domain)
358 {
359         struct iommu_dma_cookie *cookie = domain->iova_cookie;
360         struct iommu_dma_msi_page *msi, *tmp;
361
362         if (!cookie)
363                 return;
364
365         if (cookie->type == IOMMU_DMA_IOVA_COOKIE && cookie->iovad.granule) {
366                 iommu_dma_free_fq(cookie);
367                 put_iova_domain(&cookie->iovad);
368         }
369
370         list_for_each_entry_safe(msi, tmp, &cookie->msi_page_list, list) {
371                 list_del(&msi->list);
372                 kfree(msi);
373         }
374         kfree(cookie);
375         domain->iova_cookie = NULL;
376 }
377
378 /**
379  * iommu_dma_get_resv_regions - Reserved region driver helper
380  * @dev: Device from iommu_get_resv_regions()
381  * @list: Reserved region list from iommu_get_resv_regions()
382  *
383  * IOMMU drivers can use this to implement their .get_resv_regions callback
384  * for general non-IOMMU-specific reservations. Currently, this covers GICv3
385  * ITS region reservation on ACPI based ARM platforms that may require HW MSI
386  * reservation.
387  */
388 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)
389 {
390
391         if (!is_of_node(dev_iommu_fwspec_get(dev)->iommu_fwnode))
392                 iort_iommu_get_resv_regions(dev, list);
393
394 }
395 EXPORT_SYMBOL(iommu_dma_get_resv_regions);
396
397 static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie,
398                 phys_addr_t start, phys_addr_t end)
399 {
400         struct iova_domain *iovad = &cookie->iovad;
401         struct iommu_dma_msi_page *msi_page;
402         int i, num_pages;
403
404         start -= iova_offset(iovad, start);
405         num_pages = iova_align(iovad, end - start) >> iova_shift(iovad);
406
407         for (i = 0; i < num_pages; i++) {
408                 msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL);
409                 if (!msi_page)
410                         return -ENOMEM;
411
412                 msi_page->phys = start;
413                 msi_page->iova = start;
414                 INIT_LIST_HEAD(&msi_page->list);
415                 list_add(&msi_page->list, &cookie->msi_page_list);
416                 start += iovad->granule;
417         }
418
419         return 0;
420 }
421
422 static int iommu_dma_ranges_sort(void *priv, const struct list_head *a,
423                 const struct list_head *b)
424 {
425         struct resource_entry *res_a = list_entry(a, typeof(*res_a), node);
426         struct resource_entry *res_b = list_entry(b, typeof(*res_b), node);
427
428         return res_a->res->start > res_b->res->start;
429 }
430
431 static int iova_reserve_pci_windows(struct pci_dev *dev,
432                 struct iova_domain *iovad)
433 {
434         struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus);
435         struct resource_entry *window;
436         unsigned long lo, hi;
437         phys_addr_t start = 0, end;
438
439         resource_list_for_each_entry(window, &bridge->windows) {
440                 if (resource_type(window->res) != IORESOURCE_MEM)
441                         continue;
442
443                 lo = iova_pfn(iovad, window->res->start - window->offset);
444                 hi = iova_pfn(iovad, window->res->end - window->offset);
445                 reserve_iova(iovad, lo, hi);
446         }
447
448         /* Get reserved DMA windows from host bridge */
449         list_sort(NULL, &bridge->dma_ranges, iommu_dma_ranges_sort);
450         resource_list_for_each_entry(window, &bridge->dma_ranges) {
451                 end = window->res->start - window->offset;
452 resv_iova:
453                 if (end > start) {
454                         lo = iova_pfn(iovad, start);
455                         hi = iova_pfn(iovad, end);
456                         reserve_iova(iovad, lo, hi);
457                 } else if (end < start) {
458                         /* DMA ranges should be non-overlapping */
459                         dev_err(&dev->dev,
460                                 "Failed to reserve IOVA [%pa-%pa]\n",
461                                 &start, &end);
462                         return -EINVAL;
463                 }
464
465                 start = window->res->end - window->offset + 1;
466                 /* If window is last entry */
467                 if (window->node.next == &bridge->dma_ranges &&
468                     end != ~(phys_addr_t)0) {
469                         end = ~(phys_addr_t)0;
470                         goto resv_iova;
471                 }
472         }
473
474         return 0;
475 }
476
477 static int iova_reserve_iommu_regions(struct device *dev,
478                 struct iommu_domain *domain)
479 {
480         struct iommu_dma_cookie *cookie = domain->iova_cookie;
481         struct iova_domain *iovad = &cookie->iovad;
482         struct iommu_resv_region *region;
483         LIST_HEAD(resv_regions);
484         int ret = 0;
485
486         if (dev_is_pci(dev)) {
487                 ret = iova_reserve_pci_windows(to_pci_dev(dev), iovad);
488                 if (ret)
489                         return ret;
490         }
491
492         iommu_get_resv_regions(dev, &resv_regions);
493         list_for_each_entry(region, &resv_regions, list) {
494                 unsigned long lo, hi;
495
496                 /* We ARE the software that manages these! */
497                 if (region->type == IOMMU_RESV_SW_MSI)
498                         continue;
499
500                 lo = iova_pfn(iovad, region->start);
501                 hi = iova_pfn(iovad, region->start + region->length - 1);
502                 reserve_iova(iovad, lo, hi);
503
504                 if (region->type == IOMMU_RESV_MSI)
505                         ret = cookie_init_hw_msi_region(cookie, region->start,
506                                         region->start + region->length);
507                 if (ret)
508                         break;
509         }
510         iommu_put_resv_regions(dev, &resv_regions);
511
512         return ret;
513 }
514
515 static bool dev_is_untrusted(struct device *dev)
516 {
517         return dev_is_pci(dev) && to_pci_dev(dev)->untrusted;
518 }
519
520 static bool dev_use_swiotlb(struct device *dev)
521 {
522         return IS_ENABLED(CONFIG_SWIOTLB) && dev_is_untrusted(dev);
523 }
524
525 /**
526  * iommu_dma_init_domain - Initialise a DMA mapping domain
527  * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie()
528  * @base: IOVA at which the mappable address space starts
529  * @limit: Last address of the IOVA space
530  * @dev: Device the domain is being initialised for
531  *
532  * @base and @limit + 1 should be exact multiples of IOMMU page granularity to
533  * avoid rounding surprises. If necessary, we reserve the page at address 0
534  * to ensure it is an invalid IOVA. It is safe to reinitialise a domain, but
535  * any change which could make prior IOVAs invalid will fail.
536  */
537 static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base,
538                                  dma_addr_t limit, struct device *dev)
539 {
540         struct iommu_dma_cookie *cookie = domain->iova_cookie;
541         unsigned long order, base_pfn;
542         struct iova_domain *iovad;
543         int ret;
544
545         if (!cookie || cookie->type != IOMMU_DMA_IOVA_COOKIE)
546                 return -EINVAL;
547
548         iovad = &cookie->iovad;
549
550         /* Use the smallest supported page size for IOVA granularity */
551         order = __ffs(domain->pgsize_bitmap);
552         base_pfn = max_t(unsigned long, 1, base >> order);
553
554         /* Check the domain allows at least some access to the device... */
555         if (domain->geometry.force_aperture) {
556                 if (base > domain->geometry.aperture_end ||
557                     limit < domain->geometry.aperture_start) {
558                         pr_warn("specified DMA range outside IOMMU capability\n");
559                         return -EFAULT;
560                 }
561                 /* ...then finally give it a kicking to make sure it fits */
562                 base_pfn = max_t(unsigned long, base_pfn,
563                                 domain->geometry.aperture_start >> order);
564         }
565
566         /* start_pfn is always nonzero for an already-initialised domain */
567         mutex_lock(&cookie->mutex);
568         if (iovad->start_pfn) {
569                 if (1UL << order != iovad->granule ||
570                     base_pfn != iovad->start_pfn) {
571                         pr_warn("Incompatible range for DMA domain\n");
572                         ret = -EFAULT;
573                         goto done_unlock;
574                 }
575
576                 ret = 0;
577                 goto done_unlock;
578         }
579
580         init_iova_domain(iovad, 1UL << order, base_pfn);
581         ret = iova_domain_init_rcaches(iovad);
582         if (ret)
583                 goto done_unlock;
584
585         /* If the FQ fails we can simply fall back to strict mode */
586         if (domain->type == IOMMU_DOMAIN_DMA_FQ && iommu_dma_init_fq(domain))
587                 domain->type = IOMMU_DOMAIN_DMA;
588
589         ret = iova_reserve_iommu_regions(dev, domain);
590
591 done_unlock:
592         mutex_unlock(&cookie->mutex);
593         return ret;
594 }
595
596 /**
597  * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API
598  *                    page flags.
599  * @dir: Direction of DMA transfer
600  * @coherent: Is the DMA master cache-coherent?
601  * @attrs: DMA attributes for the mapping
602  *
603  * Return: corresponding IOMMU API page protection flags
604  */
605 static int dma_info_to_prot(enum dma_data_direction dir, bool coherent,
606                      unsigned long attrs)
607 {
608         int prot = coherent ? IOMMU_CACHE : 0;
609
610         if (attrs & DMA_ATTR_PRIVILEGED)
611                 prot |= IOMMU_PRIV;
612
613         switch (dir) {
614         case DMA_BIDIRECTIONAL:
615                 return prot | IOMMU_READ | IOMMU_WRITE;
616         case DMA_TO_DEVICE:
617                 return prot | IOMMU_READ;
618         case DMA_FROM_DEVICE:
619                 return prot | IOMMU_WRITE;
620         default:
621                 return 0;
622         }
623 }
624
625 static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain,
626                 size_t size, u64 dma_limit, struct device *dev)
627 {
628         struct iommu_dma_cookie *cookie = domain->iova_cookie;
629         struct iova_domain *iovad = &cookie->iovad;
630         unsigned long shift, iova_len, iova = 0;
631
632         if (cookie->type == IOMMU_DMA_MSI_COOKIE) {
633                 cookie->msi_iova += size;
634                 return cookie->msi_iova - size;
635         }
636
637         shift = iova_shift(iovad);
638         iova_len = size >> shift;
639
640         dma_limit = min_not_zero(dma_limit, dev->bus_dma_limit);
641
642         if (domain->geometry.force_aperture)
643                 dma_limit = min(dma_limit, (u64)domain->geometry.aperture_end);
644
645         /* Try to get PCI devices a SAC address */
646         if (dma_limit > DMA_BIT_MASK(32) && !iommu_dma_forcedac && dev_is_pci(dev))
647                 iova = alloc_iova_fast(iovad, iova_len,
648                                        DMA_BIT_MASK(32) >> shift, false);
649
650         if (!iova)
651                 iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift,
652                                        true);
653
654         return (dma_addr_t)iova << shift;
655 }
656
657 static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie,
658                 dma_addr_t iova, size_t size, struct iommu_iotlb_gather *gather)
659 {
660         struct iova_domain *iovad = &cookie->iovad;
661
662         /* The MSI case is only ever cleaning up its most recent allocation */
663         if (cookie->type == IOMMU_DMA_MSI_COOKIE)
664                 cookie->msi_iova -= size;
665         else if (gather && gather->queued)
666                 queue_iova(cookie, iova_pfn(iovad, iova),
667                                 size >> iova_shift(iovad),
668                                 &gather->freelist);
669         else
670                 free_iova_fast(iovad, iova_pfn(iovad, iova),
671                                 size >> iova_shift(iovad));
672 }
673
674 static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr,
675                 size_t size)
676 {
677         struct iommu_domain *domain = iommu_get_dma_domain(dev);
678         struct iommu_dma_cookie *cookie = domain->iova_cookie;
679         struct iova_domain *iovad = &cookie->iovad;
680         size_t iova_off = iova_offset(iovad, dma_addr);
681         struct iommu_iotlb_gather iotlb_gather;
682         size_t unmapped;
683
684         dma_addr -= iova_off;
685         size = iova_align(iovad, size + iova_off);
686         iommu_iotlb_gather_init(&iotlb_gather);
687         iotlb_gather.queued = READ_ONCE(cookie->fq_domain);
688
689         unmapped = iommu_unmap_fast(domain, dma_addr, size, &iotlb_gather);
690         WARN_ON(unmapped != size);
691
692         if (!iotlb_gather.queued)
693                 iommu_iotlb_sync(domain, &iotlb_gather);
694         iommu_dma_free_iova(cookie, dma_addr, size, &iotlb_gather);
695 }
696
697 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
698                 size_t size, int prot, u64 dma_mask)
699 {
700         struct iommu_domain *domain = iommu_get_dma_domain(dev);
701         struct iommu_dma_cookie *cookie = domain->iova_cookie;
702         struct iova_domain *iovad = &cookie->iovad;
703         size_t iova_off = iova_offset(iovad, phys);
704         dma_addr_t iova;
705
706         if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
707             iommu_deferred_attach(dev, domain))
708                 return DMA_MAPPING_ERROR;
709
710         size = iova_align(iovad, size + iova_off);
711
712         iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev);
713         if (!iova)
714                 return DMA_MAPPING_ERROR;
715
716         if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) {
717                 iommu_dma_free_iova(cookie, iova, size, NULL);
718                 return DMA_MAPPING_ERROR;
719         }
720         return iova + iova_off;
721 }
722
723 static void __iommu_dma_free_pages(struct page **pages, int count)
724 {
725         while (count--)
726                 __free_page(pages[count]);
727         kvfree(pages);
728 }
729
730 static struct page **__iommu_dma_alloc_pages(struct device *dev,
731                 unsigned int count, unsigned long order_mask, gfp_t gfp)
732 {
733         struct page **pages;
734         unsigned int i = 0, nid = dev_to_node(dev);
735
736         order_mask &= (2U << MAX_ORDER) - 1;
737         if (!order_mask)
738                 return NULL;
739
740         pages = kvcalloc(count, sizeof(*pages), GFP_KERNEL);
741         if (!pages)
742                 return NULL;
743
744         /* IOMMU can map any pages, so himem can also be used here */
745         gfp |= __GFP_NOWARN | __GFP_HIGHMEM;
746
747         /* It makes no sense to muck about with huge pages */
748         gfp &= ~__GFP_COMP;
749
750         while (count) {
751                 struct page *page = NULL;
752                 unsigned int order_size;
753
754                 /*
755                  * Higher-order allocations are a convenience rather
756                  * than a necessity, hence using __GFP_NORETRY until
757                  * falling back to minimum-order allocations.
758                  */
759                 for (order_mask &= (2U << __fls(count)) - 1;
760                      order_mask; order_mask &= ~order_size) {
761                         unsigned int order = __fls(order_mask);
762                         gfp_t alloc_flags = gfp;
763
764                         order_size = 1U << order;
765                         if (order_mask > order_size)
766                                 alloc_flags |= __GFP_NORETRY;
767                         page = alloc_pages_node(nid, alloc_flags, order);
768                         if (!page)
769                                 continue;
770                         if (order)
771                                 split_page(page, order);
772                         break;
773                 }
774                 if (!page) {
775                         __iommu_dma_free_pages(pages, i);
776                         return NULL;
777                 }
778                 count -= order_size;
779                 while (order_size--)
780                         pages[i++] = page++;
781         }
782         return pages;
783 }
784
785 /*
786  * If size is less than PAGE_SIZE, then a full CPU page will be allocated,
787  * but an IOMMU which supports smaller pages might not map the whole thing.
788  */
789 static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev,
790                 size_t size, struct sg_table *sgt, gfp_t gfp, pgprot_t prot,
791                 unsigned long attrs)
792 {
793         struct iommu_domain *domain = iommu_get_dma_domain(dev);
794         struct iommu_dma_cookie *cookie = domain->iova_cookie;
795         struct iova_domain *iovad = &cookie->iovad;
796         bool coherent = dev_is_dma_coherent(dev);
797         int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
798         unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap;
799         struct page **pages;
800         dma_addr_t iova;
801         ssize_t ret;
802
803         if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
804             iommu_deferred_attach(dev, domain))
805                 return NULL;
806
807         min_size = alloc_sizes & -alloc_sizes;
808         if (min_size < PAGE_SIZE) {
809                 min_size = PAGE_SIZE;
810                 alloc_sizes |= PAGE_SIZE;
811         } else {
812                 size = ALIGN(size, min_size);
813         }
814         if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES)
815                 alloc_sizes = min_size;
816
817         count = PAGE_ALIGN(size) >> PAGE_SHIFT;
818         pages = __iommu_dma_alloc_pages(dev, count, alloc_sizes >> PAGE_SHIFT,
819                                         gfp);
820         if (!pages)
821                 return NULL;
822
823         size = iova_align(iovad, size);
824         iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev);
825         if (!iova)
826                 goto out_free_pages;
827
828         if (sg_alloc_table_from_pages(sgt, pages, count, 0, size, GFP_KERNEL))
829                 goto out_free_iova;
830
831         if (!(ioprot & IOMMU_CACHE)) {
832                 struct scatterlist *sg;
833                 int i;
834
835                 for_each_sg(sgt->sgl, sg, sgt->orig_nents, i)
836                         arch_dma_prep_coherent(sg_page(sg), sg->length);
837         }
838
839         ret = iommu_map_sg_atomic(domain, iova, sgt->sgl, sgt->orig_nents, ioprot);
840         if (ret < 0 || ret < size)
841                 goto out_free_sg;
842
843         sgt->sgl->dma_address = iova;
844         sgt->sgl->dma_length = size;
845         return pages;
846
847 out_free_sg:
848         sg_free_table(sgt);
849 out_free_iova:
850         iommu_dma_free_iova(cookie, iova, size, NULL);
851 out_free_pages:
852         __iommu_dma_free_pages(pages, count);
853         return NULL;
854 }
855
856 static void *iommu_dma_alloc_remap(struct device *dev, size_t size,
857                 dma_addr_t *dma_handle, gfp_t gfp, pgprot_t prot,
858                 unsigned long attrs)
859 {
860         struct page **pages;
861         struct sg_table sgt;
862         void *vaddr;
863
864         pages = __iommu_dma_alloc_noncontiguous(dev, size, &sgt, gfp, prot,
865                                                 attrs);
866         if (!pages)
867                 return NULL;
868         *dma_handle = sgt.sgl->dma_address;
869         sg_free_table(&sgt);
870         vaddr = dma_common_pages_remap(pages, size, prot,
871                         __builtin_return_address(0));
872         if (!vaddr)
873                 goto out_unmap;
874         return vaddr;
875
876 out_unmap:
877         __iommu_dma_unmap(dev, *dma_handle, size);
878         __iommu_dma_free_pages(pages, PAGE_ALIGN(size) >> PAGE_SHIFT);
879         return NULL;
880 }
881
882 static struct sg_table *iommu_dma_alloc_noncontiguous(struct device *dev,
883                 size_t size, enum dma_data_direction dir, gfp_t gfp,
884                 unsigned long attrs)
885 {
886         struct dma_sgt_handle *sh;
887
888         sh = kmalloc(sizeof(*sh), gfp);
889         if (!sh)
890                 return NULL;
891
892         sh->pages = __iommu_dma_alloc_noncontiguous(dev, size, &sh->sgt, gfp,
893                                                     PAGE_KERNEL, attrs);
894         if (!sh->pages) {
895                 kfree(sh);
896                 return NULL;
897         }
898         return &sh->sgt;
899 }
900
901 static void iommu_dma_free_noncontiguous(struct device *dev, size_t size,
902                 struct sg_table *sgt, enum dma_data_direction dir)
903 {
904         struct dma_sgt_handle *sh = sgt_handle(sgt);
905
906         __iommu_dma_unmap(dev, sgt->sgl->dma_address, size);
907         __iommu_dma_free_pages(sh->pages, PAGE_ALIGN(size) >> PAGE_SHIFT);
908         sg_free_table(&sh->sgt);
909         kfree(sh);
910 }
911
912 static void iommu_dma_sync_single_for_cpu(struct device *dev,
913                 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir)
914 {
915         phys_addr_t phys;
916
917         if (dev_is_dma_coherent(dev) && !dev_use_swiotlb(dev))
918                 return;
919
920         phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle);
921         if (!dev_is_dma_coherent(dev))
922                 arch_sync_dma_for_cpu(phys, size, dir);
923
924         if (is_swiotlb_buffer(dev, phys))
925                 swiotlb_sync_single_for_cpu(dev, phys, size, dir);
926 }
927
928 static void iommu_dma_sync_single_for_device(struct device *dev,
929                 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir)
930 {
931         phys_addr_t phys;
932
933         if (dev_is_dma_coherent(dev) && !dev_use_swiotlb(dev))
934                 return;
935
936         phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle);
937         if (is_swiotlb_buffer(dev, phys))
938                 swiotlb_sync_single_for_device(dev, phys, size, dir);
939
940         if (!dev_is_dma_coherent(dev))
941                 arch_sync_dma_for_device(phys, size, dir);
942 }
943
944 static void iommu_dma_sync_sg_for_cpu(struct device *dev,
945                 struct scatterlist *sgl, int nelems,
946                 enum dma_data_direction dir)
947 {
948         struct scatterlist *sg;
949         int i;
950
951         if (dev_use_swiotlb(dev))
952                 for_each_sg(sgl, sg, nelems, i)
953                         iommu_dma_sync_single_for_cpu(dev, sg_dma_address(sg),
954                                                       sg->length, dir);
955         else if (!dev_is_dma_coherent(dev))
956                 for_each_sg(sgl, sg, nelems, i)
957                         arch_sync_dma_for_cpu(sg_phys(sg), sg->length, dir);
958 }
959
960 static void iommu_dma_sync_sg_for_device(struct device *dev,
961                 struct scatterlist *sgl, int nelems,
962                 enum dma_data_direction dir)
963 {
964         struct scatterlist *sg;
965         int i;
966
967         if (dev_use_swiotlb(dev))
968                 for_each_sg(sgl, sg, nelems, i)
969                         iommu_dma_sync_single_for_device(dev,
970                                                          sg_dma_address(sg),
971                                                          sg->length, dir);
972         else if (!dev_is_dma_coherent(dev))
973                 for_each_sg(sgl, sg, nelems, i)
974                         arch_sync_dma_for_device(sg_phys(sg), sg->length, dir);
975 }
976
977 static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page,
978                 unsigned long offset, size_t size, enum dma_data_direction dir,
979                 unsigned long attrs)
980 {
981         phys_addr_t phys = page_to_phys(page) + offset;
982         bool coherent = dev_is_dma_coherent(dev);
983         int prot = dma_info_to_prot(dir, coherent, attrs);
984         struct iommu_domain *domain = iommu_get_dma_domain(dev);
985         struct iommu_dma_cookie *cookie = domain->iova_cookie;
986         struct iova_domain *iovad = &cookie->iovad;
987         dma_addr_t iova, dma_mask = dma_get_mask(dev);
988
989         /*
990          * If both the physical buffer start address and size are
991          * page aligned, we don't need to use a bounce page.
992          */
993         if (dev_use_swiotlb(dev) && iova_offset(iovad, phys | size)) {
994                 void *padding_start;
995                 size_t padding_size, aligned_size;
996
997                 if (!is_swiotlb_active(dev)) {
998                         dev_warn_once(dev, "DMA bounce buffers are inactive, unable to map unaligned transaction.\n");
999                         return DMA_MAPPING_ERROR;
1000                 }
1001
1002                 aligned_size = iova_align(iovad, size);
1003                 phys = swiotlb_tbl_map_single(dev, phys, size, aligned_size,
1004                                               iova_mask(iovad), dir, attrs);
1005
1006                 if (phys == DMA_MAPPING_ERROR)
1007                         return DMA_MAPPING_ERROR;
1008
1009                 /* Cleanup the padding area. */
1010                 padding_start = phys_to_virt(phys);
1011                 padding_size = aligned_size;
1012
1013                 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
1014                     (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) {
1015                         padding_start += size;
1016                         padding_size -= size;
1017                 }
1018
1019                 memset(padding_start, 0, padding_size);
1020         }
1021
1022         if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC))
1023                 arch_sync_dma_for_device(phys, size, dir);
1024
1025         iova = __iommu_dma_map(dev, phys, size, prot, dma_mask);
1026         if (iova == DMA_MAPPING_ERROR && is_swiotlb_buffer(dev, phys))
1027                 swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs);
1028         return iova;
1029 }
1030
1031 static void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle,
1032                 size_t size, enum dma_data_direction dir, unsigned long attrs)
1033 {
1034         struct iommu_domain *domain = iommu_get_dma_domain(dev);
1035         phys_addr_t phys;
1036
1037         phys = iommu_iova_to_phys(domain, dma_handle);
1038         if (WARN_ON(!phys))
1039                 return;
1040
1041         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) && !dev_is_dma_coherent(dev))
1042                 arch_sync_dma_for_cpu(phys, size, dir);
1043
1044         __iommu_dma_unmap(dev, dma_handle, size);
1045
1046         if (unlikely(is_swiotlb_buffer(dev, phys)))
1047                 swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs);
1048 }
1049
1050 /*
1051  * Prepare a successfully-mapped scatterlist to give back to the caller.
1052  *
1053  * At this point the segments are already laid out by iommu_dma_map_sg() to
1054  * avoid individually crossing any boundaries, so we merely need to check a
1055  * segment's start address to avoid concatenating across one.
1056  */
1057 static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents,
1058                 dma_addr_t dma_addr)
1059 {
1060         struct scatterlist *s, *cur = sg;
1061         unsigned long seg_mask = dma_get_seg_boundary(dev);
1062         unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev);
1063         int i, count = 0;
1064
1065         for_each_sg(sg, s, nents, i) {
1066                 /* Restore this segment's original unaligned fields first */
1067                 dma_addr_t s_dma_addr = sg_dma_address(s);
1068                 unsigned int s_iova_off = sg_dma_address(s);
1069                 unsigned int s_length = sg_dma_len(s);
1070                 unsigned int s_iova_len = s->length;
1071
1072                 sg_dma_address(s) = DMA_MAPPING_ERROR;
1073                 sg_dma_len(s) = 0;
1074
1075                 if (sg_is_dma_bus_address(s)) {
1076                         if (i > 0)
1077                                 cur = sg_next(cur);
1078
1079                         sg_dma_unmark_bus_address(s);
1080                         sg_dma_address(cur) = s_dma_addr;
1081                         sg_dma_len(cur) = s_length;
1082                         sg_dma_mark_bus_address(cur);
1083                         count++;
1084                         cur_len = 0;
1085                         continue;
1086                 }
1087
1088                 s->offset += s_iova_off;
1089                 s->length = s_length;
1090
1091                 /*
1092                  * Now fill in the real DMA data. If...
1093                  * - there is a valid output segment to append to
1094                  * - and this segment starts on an IOVA page boundary
1095                  * - but doesn't fall at a segment boundary
1096                  * - and wouldn't make the resulting output segment too long
1097                  */
1098                 if (cur_len && !s_iova_off && (dma_addr & seg_mask) &&
1099                     (max_len - cur_len >= s_length)) {
1100                         /* ...then concatenate it with the previous one */
1101                         cur_len += s_length;
1102                 } else {
1103                         /* Otherwise start the next output segment */
1104                         if (i > 0)
1105                                 cur = sg_next(cur);
1106                         cur_len = s_length;
1107                         count++;
1108
1109                         sg_dma_address(cur) = dma_addr + s_iova_off;
1110                 }
1111
1112                 sg_dma_len(cur) = cur_len;
1113                 dma_addr += s_iova_len;
1114
1115                 if (s_length + s_iova_off < s_iova_len)
1116                         cur_len = 0;
1117         }
1118         return count;
1119 }
1120
1121 /*
1122  * If mapping failed, then just restore the original list,
1123  * but making sure the DMA fields are invalidated.
1124  */
1125 static void __invalidate_sg(struct scatterlist *sg, int nents)
1126 {
1127         struct scatterlist *s;
1128         int i;
1129
1130         for_each_sg(sg, s, nents, i) {
1131                 if (sg_is_dma_bus_address(s)) {
1132                         sg_dma_unmark_bus_address(s);
1133                 } else {
1134                         if (sg_dma_address(s) != DMA_MAPPING_ERROR)
1135                                 s->offset += sg_dma_address(s);
1136                         if (sg_dma_len(s))
1137                                 s->length = sg_dma_len(s);
1138                 }
1139                 sg_dma_address(s) = DMA_MAPPING_ERROR;
1140                 sg_dma_len(s) = 0;
1141         }
1142 }
1143
1144 static void iommu_dma_unmap_sg_swiotlb(struct device *dev, struct scatterlist *sg,
1145                 int nents, enum dma_data_direction dir, unsigned long attrs)
1146 {
1147         struct scatterlist *s;
1148         int i;
1149
1150         for_each_sg(sg, s, nents, i)
1151                 iommu_dma_unmap_page(dev, sg_dma_address(s),
1152                                 sg_dma_len(s), dir, attrs);
1153 }
1154
1155 static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg,
1156                 int nents, enum dma_data_direction dir, unsigned long attrs)
1157 {
1158         struct scatterlist *s;
1159         int i;
1160
1161         for_each_sg(sg, s, nents, i) {
1162                 sg_dma_address(s) = iommu_dma_map_page(dev, sg_page(s),
1163                                 s->offset, s->length, dir, attrs);
1164                 if (sg_dma_address(s) == DMA_MAPPING_ERROR)
1165                         goto out_unmap;
1166                 sg_dma_len(s) = s->length;
1167         }
1168
1169         return nents;
1170
1171 out_unmap:
1172         iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC);
1173         return -EIO;
1174 }
1175
1176 /*
1177  * The DMA API client is passing in a scatterlist which could describe
1178  * any old buffer layout, but the IOMMU API requires everything to be
1179  * aligned to IOMMU pages. Hence the need for this complicated bit of
1180  * impedance-matching, to be able to hand off a suitably-aligned list,
1181  * but still preserve the original offsets and sizes for the caller.
1182  */
1183 static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
1184                 int nents, enum dma_data_direction dir, unsigned long attrs)
1185 {
1186         struct iommu_domain *domain = iommu_get_dma_domain(dev);
1187         struct iommu_dma_cookie *cookie = domain->iova_cookie;
1188         struct iova_domain *iovad = &cookie->iovad;
1189         struct scatterlist *s, *prev = NULL;
1190         int prot = dma_info_to_prot(dir, dev_is_dma_coherent(dev), attrs);
1191         struct pci_p2pdma_map_state p2pdma_state = {};
1192         enum pci_p2pdma_map_type map;
1193         dma_addr_t iova;
1194         size_t iova_len = 0;
1195         unsigned long mask = dma_get_seg_boundary(dev);
1196         ssize_t ret;
1197         int i;
1198
1199         if (static_branch_unlikely(&iommu_deferred_attach_enabled)) {
1200                 ret = iommu_deferred_attach(dev, domain);
1201                 if (ret)
1202                         goto out;
1203         }
1204
1205         if (dev_use_swiotlb(dev))
1206                 return iommu_dma_map_sg_swiotlb(dev, sg, nents, dir, attrs);
1207
1208         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
1209                 iommu_dma_sync_sg_for_device(dev, sg, nents, dir);
1210
1211         /*
1212          * Work out how much IOVA space we need, and align the segments to
1213          * IOVA granules for the IOMMU driver to handle. With some clever
1214          * trickery we can modify the list in-place, but reversibly, by
1215          * stashing the unaligned parts in the as-yet-unused DMA fields.
1216          */
1217         for_each_sg(sg, s, nents, i) {
1218                 size_t s_iova_off = iova_offset(iovad, s->offset);
1219                 size_t s_length = s->length;
1220                 size_t pad_len = (mask - iova_len + 1) & mask;
1221
1222                 if (is_pci_p2pdma_page(sg_page(s))) {
1223                         map = pci_p2pdma_map_segment(&p2pdma_state, dev, s);
1224                         switch (map) {
1225                         case PCI_P2PDMA_MAP_BUS_ADDR:
1226                                 /*
1227                                  * iommu_map_sg() will skip this segment as
1228                                  * it is marked as a bus address,
1229                                  * __finalise_sg() will copy the dma address
1230                                  * into the output segment.
1231                                  */
1232                                 continue;
1233                         case PCI_P2PDMA_MAP_THRU_HOST_BRIDGE:
1234                                 /*
1235                                  * Mapping through host bridge should be
1236                                  * mapped with regular IOVAs, thus we
1237                                  * do nothing here and continue below.
1238                                  */
1239                                 break;
1240                         default:
1241                                 ret = -EREMOTEIO;
1242                                 goto out_restore_sg;
1243                         }
1244                 }
1245
1246                 sg_dma_address(s) = s_iova_off;
1247                 sg_dma_len(s) = s_length;
1248                 s->offset -= s_iova_off;
1249                 s_length = iova_align(iovad, s_length + s_iova_off);
1250                 s->length = s_length;
1251
1252                 /*
1253                  * Due to the alignment of our single IOVA allocation, we can
1254                  * depend on these assumptions about the segment boundary mask:
1255                  * - If mask size >= IOVA size, then the IOVA range cannot
1256                  *   possibly fall across a boundary, so we don't care.
1257                  * - If mask size < IOVA size, then the IOVA range must start
1258                  *   exactly on a boundary, therefore we can lay things out
1259                  *   based purely on segment lengths without needing to know
1260                  *   the actual addresses beforehand.
1261                  * - The mask must be a power of 2, so pad_len == 0 if
1262                  *   iova_len == 0, thus we cannot dereference prev the first
1263                  *   time through here (i.e. before it has a meaningful value).
1264                  */
1265                 if (pad_len && pad_len < s_length - 1) {
1266                         prev->length += pad_len;
1267                         iova_len += pad_len;
1268                 }
1269
1270                 iova_len += s_length;
1271                 prev = s;
1272         }
1273
1274         if (!iova_len)
1275                 return __finalise_sg(dev, sg, nents, 0);
1276
1277         iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev);
1278         if (!iova) {
1279                 ret = -ENOMEM;
1280                 goto out_restore_sg;
1281         }
1282
1283         /*
1284          * We'll leave any physical concatenation to the IOMMU driver's
1285          * implementation - it knows better than we do.
1286          */
1287         ret = iommu_map_sg_atomic(domain, iova, sg, nents, prot);
1288         if (ret < 0 || ret < iova_len)
1289                 goto out_free_iova;
1290
1291         return __finalise_sg(dev, sg, nents, iova);
1292
1293 out_free_iova:
1294         iommu_dma_free_iova(cookie, iova, iova_len, NULL);
1295 out_restore_sg:
1296         __invalidate_sg(sg, nents);
1297 out:
1298         if (ret != -ENOMEM && ret != -EREMOTEIO)
1299                 return -EINVAL;
1300         return ret;
1301 }
1302
1303 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
1304                 int nents, enum dma_data_direction dir, unsigned long attrs)
1305 {
1306         dma_addr_t end = 0, start;
1307         struct scatterlist *tmp;
1308         int i;
1309
1310         if (dev_use_swiotlb(dev)) {
1311                 iommu_dma_unmap_sg_swiotlb(dev, sg, nents, dir, attrs);
1312                 return;
1313         }
1314
1315         if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
1316                 iommu_dma_sync_sg_for_cpu(dev, sg, nents, dir);
1317
1318         /*
1319          * The scatterlist segments are mapped into a single
1320          * contiguous IOVA allocation, the start and end points
1321          * just have to be determined.
1322          */
1323         for_each_sg(sg, tmp, nents, i) {
1324                 if (sg_is_dma_bus_address(tmp)) {
1325                         sg_dma_unmark_bus_address(tmp);
1326                         continue;
1327                 }
1328
1329                 if (sg_dma_len(tmp) == 0)
1330                         break;
1331
1332                 start = sg_dma_address(tmp);
1333                 break;
1334         }
1335
1336         nents -= i;
1337         for_each_sg(tmp, tmp, nents, i) {
1338                 if (sg_is_dma_bus_address(tmp)) {
1339                         sg_dma_unmark_bus_address(tmp);
1340                         continue;
1341                 }
1342
1343                 if (sg_dma_len(tmp) == 0)
1344                         break;
1345
1346                 end = sg_dma_address(tmp) + sg_dma_len(tmp);
1347         }
1348
1349         if (end)
1350                 __iommu_dma_unmap(dev, start, end - start);
1351 }
1352
1353 static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys,
1354                 size_t size, enum dma_data_direction dir, unsigned long attrs)
1355 {
1356         return __iommu_dma_map(dev, phys, size,
1357                         dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO,
1358                         dma_get_mask(dev));
1359 }
1360
1361 static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle,
1362                 size_t size, enum dma_data_direction dir, unsigned long attrs)
1363 {
1364         __iommu_dma_unmap(dev, handle, size);
1365 }
1366
1367 static void __iommu_dma_free(struct device *dev, size_t size, void *cpu_addr)
1368 {
1369         size_t alloc_size = PAGE_ALIGN(size);
1370         int count = alloc_size >> PAGE_SHIFT;
1371         struct page *page = NULL, **pages = NULL;
1372
1373         /* Non-coherent atomic allocation? Easy */
1374         if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) &&
1375             dma_free_from_pool(dev, cpu_addr, alloc_size))
1376                 return;
1377
1378         if (is_vmalloc_addr(cpu_addr)) {
1379                 /*
1380                  * If it the address is remapped, then it's either non-coherent
1381                  * or highmem CMA, or an iommu_dma_alloc_remap() construction.
1382                  */
1383                 pages = dma_common_find_pages(cpu_addr);
1384                 if (!pages)
1385                         page = vmalloc_to_page(cpu_addr);
1386                 dma_common_free_remap(cpu_addr, alloc_size);
1387         } else {
1388                 /* Lowmem means a coherent atomic or CMA allocation */
1389                 page = virt_to_page(cpu_addr);
1390         }
1391
1392         if (pages)
1393                 __iommu_dma_free_pages(pages, count);
1394         if (page)
1395                 dma_free_contiguous(dev, page, alloc_size);
1396 }
1397
1398 static void iommu_dma_free(struct device *dev, size_t size, void *cpu_addr,
1399                 dma_addr_t handle, unsigned long attrs)
1400 {
1401         __iommu_dma_unmap(dev, handle, size);
1402         __iommu_dma_free(dev, size, cpu_addr);
1403 }
1404
1405 static void *iommu_dma_alloc_pages(struct device *dev, size_t size,
1406                 struct page **pagep, gfp_t gfp, unsigned long attrs)
1407 {
1408         bool coherent = dev_is_dma_coherent(dev);
1409         size_t alloc_size = PAGE_ALIGN(size);
1410         int node = dev_to_node(dev);
1411         struct page *page = NULL;
1412         void *cpu_addr;
1413
1414         page = dma_alloc_contiguous(dev, alloc_size, gfp);
1415         if (!page)
1416                 page = alloc_pages_node(node, gfp, get_order(alloc_size));
1417         if (!page)
1418                 return NULL;
1419
1420         if (!coherent || PageHighMem(page)) {
1421                 pgprot_t prot = dma_pgprot(dev, PAGE_KERNEL, attrs);
1422
1423                 cpu_addr = dma_common_contiguous_remap(page, alloc_size,
1424                                 prot, __builtin_return_address(0));
1425                 if (!cpu_addr)
1426                         goto out_free_pages;
1427
1428                 if (!coherent)
1429                         arch_dma_prep_coherent(page, size);
1430         } else {
1431                 cpu_addr = page_address(page);
1432         }
1433
1434         *pagep = page;
1435         memset(cpu_addr, 0, alloc_size);
1436         return cpu_addr;
1437 out_free_pages:
1438         dma_free_contiguous(dev, page, alloc_size);
1439         return NULL;
1440 }
1441
1442 static void *iommu_dma_alloc(struct device *dev, size_t size,
1443                 dma_addr_t *handle, gfp_t gfp, unsigned long attrs)
1444 {
1445         bool coherent = dev_is_dma_coherent(dev);
1446         int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
1447         struct page *page = NULL;
1448         void *cpu_addr;
1449
1450         gfp |= __GFP_ZERO;
1451
1452         if (gfpflags_allow_blocking(gfp) &&
1453             !(attrs & DMA_ATTR_FORCE_CONTIGUOUS)) {
1454                 return iommu_dma_alloc_remap(dev, size, handle, gfp,
1455                                 dma_pgprot(dev, PAGE_KERNEL, attrs), attrs);
1456         }
1457
1458         if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) &&
1459             !gfpflags_allow_blocking(gfp) && !coherent)
1460                 page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr,
1461                                                gfp, NULL);
1462         else
1463                 cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs);
1464         if (!cpu_addr)
1465                 return NULL;
1466
1467         *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot,
1468                         dev->coherent_dma_mask);
1469         if (*handle == DMA_MAPPING_ERROR) {
1470                 __iommu_dma_free(dev, size, cpu_addr);
1471                 return NULL;
1472         }
1473
1474         return cpu_addr;
1475 }
1476
1477 static int iommu_dma_mmap(struct device *dev, struct vm_area_struct *vma,
1478                 void *cpu_addr, dma_addr_t dma_addr, size_t size,
1479                 unsigned long attrs)
1480 {
1481         unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
1482         unsigned long pfn, off = vma->vm_pgoff;
1483         int ret;
1484
1485         vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs);
1486
1487         if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
1488                 return ret;
1489
1490         if (off >= nr_pages || vma_pages(vma) > nr_pages - off)
1491                 return -ENXIO;
1492
1493         if (is_vmalloc_addr(cpu_addr)) {
1494                 struct page **pages = dma_common_find_pages(cpu_addr);
1495
1496                 if (pages)
1497                         return vm_map_pages(vma, pages, nr_pages);
1498                 pfn = vmalloc_to_pfn(cpu_addr);
1499         } else {
1500                 pfn = page_to_pfn(virt_to_page(cpu_addr));
1501         }
1502
1503         return remap_pfn_range(vma, vma->vm_start, pfn + off,
1504                                vma->vm_end - vma->vm_start,
1505                                vma->vm_page_prot);
1506 }
1507
1508 static int iommu_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
1509                 void *cpu_addr, dma_addr_t dma_addr, size_t size,
1510                 unsigned long attrs)
1511 {
1512         struct page *page;
1513         int ret;
1514
1515         if (is_vmalloc_addr(cpu_addr)) {
1516                 struct page **pages = dma_common_find_pages(cpu_addr);
1517
1518                 if (pages) {
1519                         return sg_alloc_table_from_pages(sgt, pages,
1520                                         PAGE_ALIGN(size) >> PAGE_SHIFT,
1521                                         0, size, GFP_KERNEL);
1522                 }
1523
1524                 page = vmalloc_to_page(cpu_addr);
1525         } else {
1526                 page = virt_to_page(cpu_addr);
1527         }
1528
1529         ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
1530         if (!ret)
1531                 sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
1532         return ret;
1533 }
1534
1535 static unsigned long iommu_dma_get_merge_boundary(struct device *dev)
1536 {
1537         struct iommu_domain *domain = iommu_get_dma_domain(dev);
1538
1539         return (1UL << __ffs(domain->pgsize_bitmap)) - 1;
1540 }
1541
1542 static size_t iommu_dma_opt_mapping_size(void)
1543 {
1544         return iova_rcache_range();
1545 }
1546
1547 static const struct dma_map_ops iommu_dma_ops = {
1548         .flags                  = DMA_F_PCI_P2PDMA_SUPPORTED,
1549         .alloc                  = iommu_dma_alloc,
1550         .free                   = iommu_dma_free,
1551         .alloc_pages            = dma_common_alloc_pages,
1552         .free_pages             = dma_common_free_pages,
1553         .alloc_noncontiguous    = iommu_dma_alloc_noncontiguous,
1554         .free_noncontiguous     = iommu_dma_free_noncontiguous,
1555         .mmap                   = iommu_dma_mmap,
1556         .get_sgtable            = iommu_dma_get_sgtable,
1557         .map_page               = iommu_dma_map_page,
1558         .unmap_page             = iommu_dma_unmap_page,
1559         .map_sg                 = iommu_dma_map_sg,
1560         .unmap_sg               = iommu_dma_unmap_sg,
1561         .sync_single_for_cpu    = iommu_dma_sync_single_for_cpu,
1562         .sync_single_for_device = iommu_dma_sync_single_for_device,
1563         .sync_sg_for_cpu        = iommu_dma_sync_sg_for_cpu,
1564         .sync_sg_for_device     = iommu_dma_sync_sg_for_device,
1565         .map_resource           = iommu_dma_map_resource,
1566         .unmap_resource         = iommu_dma_unmap_resource,
1567         .get_merge_boundary     = iommu_dma_get_merge_boundary,
1568         .opt_mapping_size       = iommu_dma_opt_mapping_size,
1569 };
1570
1571 /*
1572  * The IOMMU core code allocates the default DMA domain, which the underlying
1573  * IOMMU driver needs to support via the dma-iommu layer.
1574  */
1575 void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 dma_limit)
1576 {
1577         struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1578
1579         if (!domain)
1580                 goto out_err;
1581
1582         /*
1583          * The IOMMU core code allocates the default DMA domain, which the
1584          * underlying IOMMU driver needs to support via the dma-iommu layer.
1585          */
1586         if (iommu_is_dma_domain(domain)) {
1587                 if (iommu_dma_init_domain(domain, dma_base, dma_limit, dev))
1588                         goto out_err;
1589                 dev->dma_ops = &iommu_dma_ops;
1590         }
1591
1592         return;
1593 out_err:
1594          pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
1595                  dev_name(dev));
1596 }
1597 EXPORT_SYMBOL_GPL(iommu_setup_dma_ops);
1598
1599 static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev,
1600                 phys_addr_t msi_addr, struct iommu_domain *domain)
1601 {
1602         struct iommu_dma_cookie *cookie = domain->iova_cookie;
1603         struct iommu_dma_msi_page *msi_page;
1604         dma_addr_t iova;
1605         int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1606         size_t size = cookie_msi_granule(cookie);
1607
1608         msi_addr &= ~(phys_addr_t)(size - 1);
1609         list_for_each_entry(msi_page, &cookie->msi_page_list, list)
1610                 if (msi_page->phys == msi_addr)
1611                         return msi_page;
1612
1613         msi_page = kzalloc(sizeof(*msi_page), GFP_KERNEL);
1614         if (!msi_page)
1615                 return NULL;
1616
1617         iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev);
1618         if (!iova)
1619                 goto out_free_page;
1620
1621         if (iommu_map(domain, iova, msi_addr, size, prot))
1622                 goto out_free_iova;
1623
1624         INIT_LIST_HEAD(&msi_page->list);
1625         msi_page->phys = msi_addr;
1626         msi_page->iova = iova;
1627         list_add(&msi_page->list, &cookie->msi_page_list);
1628         return msi_page;
1629
1630 out_free_iova:
1631         iommu_dma_free_iova(cookie, iova, size, NULL);
1632 out_free_page:
1633         kfree(msi_page);
1634         return NULL;
1635 }
1636
1637 /**
1638  * iommu_dma_prepare_msi() - Map the MSI page in the IOMMU domain
1639  * @desc: MSI descriptor, will store the MSI page
1640  * @msi_addr: MSI target address to be mapped
1641  *
1642  * Return: 0 on success or negative error code if the mapping failed.
1643  */
1644 int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)
1645 {
1646         struct device *dev = msi_desc_to_dev(desc);
1647         struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1648         struct iommu_dma_msi_page *msi_page;
1649         static DEFINE_MUTEX(msi_prepare_lock); /* see below */
1650
1651         if (!domain || !domain->iova_cookie) {
1652                 desc->iommu_cookie = NULL;
1653                 return 0;
1654         }
1655
1656         /*
1657          * In fact the whole prepare operation should already be serialised by
1658          * irq_domain_mutex further up the callchain, but that's pretty subtle
1659          * on its own, so consider this locking as failsafe documentation...
1660          */
1661         mutex_lock(&msi_prepare_lock);
1662         msi_page = iommu_dma_get_msi_page(dev, msi_addr, domain);
1663         mutex_unlock(&msi_prepare_lock);
1664
1665         msi_desc_set_iommu_cookie(desc, msi_page);
1666
1667         if (!msi_page)
1668                 return -ENOMEM;
1669         return 0;
1670 }
1671
1672 /**
1673  * iommu_dma_compose_msi_msg() - Apply translation to an MSI message
1674  * @desc: MSI descriptor prepared by iommu_dma_prepare_msi()
1675  * @msg: MSI message containing target physical address
1676  */
1677 void iommu_dma_compose_msi_msg(struct msi_desc *desc, struct msi_msg *msg)
1678 {
1679         struct device *dev = msi_desc_to_dev(desc);
1680         const struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1681         const struct iommu_dma_msi_page *msi_page;
1682
1683         msi_page = msi_desc_get_iommu_cookie(desc);
1684
1685         if (!domain || !domain->iova_cookie || WARN_ON(!msi_page))
1686                 return;
1687
1688         msg->address_hi = upper_32_bits(msi_page->iova);
1689         msg->address_lo &= cookie_msi_granule(domain->iova_cookie) - 1;
1690         msg->address_lo += lower_32_bits(msi_page->iova);
1691 }
1692
1693 static int iommu_dma_init(void)
1694 {
1695         if (is_kdump_kernel())
1696                 static_branch_enable(&iommu_deferred_attach_enabled);
1697
1698         return iova_cache_get();
1699 }
1700 arch_initcall(iommu_dma_init);