Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
  3  * Author: Joerg Roedel <joerg.roedel@amd.com>
  4  *         Leo Duran <leo.duran@amd.com>
  5  *
  6  * This program is free software; you can redistribute it and/or modify it
  7  * under the terms of the GNU General Public License version 2 as published
  8  * by the Free Software Foundation.
  9  *
 10  * This program is distributed in the hope that it will be useful,
 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  * GNU General Public License for more details.
 14  *
 15  * You should have received a copy of the GNU General Public License
 16  * along with this program; if not, write to the Free Software
 17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 18  */
 19 
 20 #include <linux/pci.h>
 21 #include <linux/gfp.h>
 22 #include <linux/bitops.h>
 23 #include <linux/debugfs.h>
 24 #include <linux/scatterlist.h>
 25 #include <linux/dma-mapping.h>
 26 #include <linux/iommu-helper.h>
 27 #include <linux/iommu.h>
 28 #include <asm/proto.h>
 29 #include <asm/iommu.h>
 30 #include <asm/gart.h>
 31 #include <asm/amd_iommu_types.h>
 32 #include <asm/amd_iommu.h>
 33 
 34 #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28))
 35 
 36 #define EXIT_LOOP_COUNT 10000000
 37 
 38 static DEFINE_RWLOCK(amd_iommu_devtable_lock);
 39 
 40 /* A list of preallocated protection domains */
 41 static LIST_HEAD(iommu_pd_list);
 42 static DEFINE_SPINLOCK(iommu_pd_list_lock);
 43 
 44 #ifdef CONFIG_IOMMU_API
 45 static struct iommu_ops amd_iommu_ops;
 46 #endif
 47 
 48 /*
 49  * general struct to manage commands send to an IOMMU
 50  */
 51 struct iommu_cmd {
 52         u32 data[4];
 53 };
 54 
 55 static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
 56                              struct unity_map_entry *e);
 57 static struct dma_ops_domain *find_protection_domain(u16 devid);
 58 static u64* alloc_pte(struct protection_domain *dom,
 59                       unsigned long address, u64
 60                       **pte_page, gfp_t gfp);
 61 static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
 62                                       unsigned long start_page,
 63                                       unsigned int pages);
 64 
 65 #ifndef BUS_NOTIFY_UNBOUND_DRIVER
 66 #define BUS_NOTIFY_UNBOUND_DRIVER 0x0005
 67 #endif
 68 
 69 #ifdef CONFIG_AMD_IOMMU_STATS
 70 
 71 /*
 72  * Initialization code for statistics collection
 73  */
 74 
 75 DECLARE_STATS_COUNTER(compl_wait);
 76 DECLARE_STATS_COUNTER(cnt_map_single);
 77 DECLARE_STATS_COUNTER(cnt_unmap_single);
 78 DECLARE_STATS_COUNTER(cnt_map_sg);
 79 DECLARE_STATS_COUNTER(cnt_unmap_sg);
 80 DECLARE_STATS_COUNTER(cnt_alloc_coherent);
 81 DECLARE_STATS_COUNTER(cnt_free_coherent);
 82 DECLARE_STATS_COUNTER(cross_page);
 83 DECLARE_STATS_COUNTER(domain_flush_single);
 84 DECLARE_STATS_COUNTER(domain_flush_all);
 85 DECLARE_STATS_COUNTER(alloced_io_mem);
 86 DECLARE_STATS_COUNTER(total_map_requests);
 87 
 88 static struct dentry *stats_dir;
 89 static struct dentry *de_isolate;
 90 static struct dentry *de_fflush;
 91 
 92 static void amd_iommu_stats_add(struct __iommu_counter *cnt)
 93 {
 94         if (stats_dir == NULL)
 95                 return;
 96 
 97         cnt->dent = debugfs_create_u64(cnt->name, 0444, stats_dir,
 98                                        &cnt->value);
 99 }
100 
101 static void amd_iommu_stats_init(void)
102 {
103         stats_dir = debugfs_create_dir("amd-iommu", NULL);
104         if (stats_dir == NULL)
105                 return;
106 
107         de_isolate = debugfs_create_bool("isolation", 0444, stats_dir,
108                                          (u32 *)&amd_iommu_isolate);
109 
110         de_fflush  = debugfs_create_bool("fullflush", 0444, stats_dir,
111                                          (u32 *)&amd_iommu_unmap_flush);
112 
113         amd_iommu_stats_add(&compl_wait);
114         amd_iommu_stats_add(&cnt_map_single);
115         amd_iommu_stats_add(&cnt_unmap_single);
116         amd_iommu_stats_add(&cnt_map_sg);
117         amd_iommu_stats_add(&cnt_unmap_sg);
118         amd_iommu_stats_add(&cnt_alloc_coherent);
119         amd_iommu_stats_add(&cnt_free_coherent);
120         amd_iommu_stats_add(&cross_page);
121         amd_iommu_stats_add(&domain_flush_single);
122         amd_iommu_stats_add(&domain_flush_all);
123         amd_iommu_stats_add(&alloced_io_mem);
124         amd_iommu_stats_add(&total_map_requests);
125 }
126 
127 #endif
128 
129 /* returns !0 if the IOMMU is caching non-present entries in its TLB */
130 static int iommu_has_npcache(struct amd_iommu *iommu)
131 {
132         return iommu->cap & (1UL << IOMMU_CAP_NPCACHE);
133 }
134 
135 /****************************************************************************
136  *
137  * Interrupt handling functions
138  *
139  ****************************************************************************/
140 
141 static void iommu_print_event(void *__evt)
142 {
143         u32 *event = __evt;
144         int type  = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
145         int devid = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
146         int domid = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
147         int flags = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
148         u64 address = (u64)(((u64)event[3]) << 32) | event[2];
149 
150         printk(KERN_ERR "AMD IOMMU: Event logged [");
151 
152         switch (type) {
153         case EVENT_TYPE_ILL_DEV:
154                 printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
155                        "address=0x%016llx flags=0x%04x]\n",
156                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
157                        address, flags);
158                 break;
159         case EVENT_TYPE_IO_FAULT:
160                 printk("IO_PAGE_FAULT device=%02x:%02x.%x "
161                        "domain=0x%04x address=0x%016llx flags=0x%04x]\n",
162                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
163                        domid, address, flags);
164                 break;
165         case EVENT_TYPE_DEV_TAB_ERR:
166                 printk("DEV_TAB_HARDWARE_ERROR device=%02x:%02x.%x "
167                        "address=0x%016llx flags=0x%04x]\n",
168                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
169                        address, flags);
170                 break;
171         case EVENT_TYPE_PAGE_TAB_ERR:
172                 printk("PAGE_TAB_HARDWARE_ERROR device=%02x:%02x.%x "
173                        "domain=0x%04x address=0x%016llx flags=0x%04x]\n",
174                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
175                        domid, address, flags);
176                 break;
177         case EVENT_TYPE_ILL_CMD:
178                 printk("ILLEGAL_COMMAND_ERROR address=0x%016llx]\n", address);
179                 break;
180         case EVENT_TYPE_CMD_HARD_ERR:
181                 printk("COMMAND_HARDWARE_ERROR address=0x%016llx "
182                        "flags=0x%04x]\n", address, flags);
183                 break;
184         case EVENT_TYPE_IOTLB_INV_TO:
185                 printk("IOTLB_INV_TIMEOUT device=%02x:%02x.%x "
186                        "address=0x%016llx]\n",
187                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
188                        address);
189                 break;
190         case EVENT_TYPE_INV_DEV_REQ:
191                 printk("INVALID_DEVICE_REQUEST device=%02x:%02x.%x "
192                        "address=0x%016llx flags=0x%04x]\n",
193                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
194                        address, flags);
195                 break;
196         default:
197                 printk(KERN_ERR "UNKNOWN type=0x%02x]\n", type);
198         }
199 }
200 
201 static void iommu_poll_events(struct amd_iommu *iommu)
202 {
203         u32 head, tail;
204         unsigned long flags;
205 
206         spin_lock_irqsave(&iommu->lock, flags);
207 
208         head = readl(iommu->mmio_base + MMIO_EVT_HEAD_OFFSET);
209         tail = readl(iommu->mmio_base + MMIO_EVT_TAIL_OFFSET);
210 
211         while (head != tail) {
212                 iommu_print_event(iommu->evt_buf + head);
213                 head = (head + EVENT_ENTRY_SIZE) % iommu->evt_buf_size;
214         }
215 
216         writel(head, iommu->mmio_base + MMIO_EVT_HEAD_OFFSET);
217 
218         spin_unlock_irqrestore(&iommu->lock, flags);
219 }
220 
221 irqreturn_t amd_iommu_int_handler(int irq, void *data)
222 {
223         struct amd_iommu *iommu;
224 
225         for_each_iommu(iommu)
226                 iommu_poll_events(iommu);
227 
228         return IRQ_HANDLED;
229 }
230 
231 /****************************************************************************
232  *
233  * IOMMU command queuing functions
234  *
235  ****************************************************************************/
236 
237 /*
238  * Writes the command to the IOMMUs command buffer and informs the
239  * hardware about the new command. Must be called with iommu->lock held.
240  */
241 static int __iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd)
242 {
243         u32 tail, head;
244         u8 *target;
245 
246         tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
247         target = iommu->cmd_buf + tail;
248         memcpy_toio(target, cmd, sizeof(*cmd));
249         tail = (tail + sizeof(*cmd)) % iommu->cmd_buf_size;
250         head = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
251         if (tail == head)
252                 return -ENOMEM;
253         writel(tail, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
254 
255         return 0;
256 }
257 
258 /*
259  * General queuing function for commands. Takes iommu->lock and calls
260  * __iommu_queue_command().
261  */
262 static int iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd)
263 {
264         unsigned long flags;
265         int ret;
266 
267         spin_lock_irqsave(&iommu->lock, flags);
268         ret = __iommu_queue_command(iommu, cmd);
269         if (!ret)
270                 iommu->need_sync = true;
271         spin_unlock_irqrestore(&iommu->lock, flags);
272 
273         return ret;
274 }
275 
276 /*
277  * This function waits until an IOMMU has completed a completion
278  * wait command
279  */
280 static void __iommu_wait_for_completion(struct amd_iommu *iommu)
281 {
282         int ready = 0;
283         unsigned status = 0;
284         unsigned long i = 0;
285 
286         INC_STATS_COUNTER(compl_wait);
287 
288         while (!ready && (i < EXIT_LOOP_COUNT)) {
289                 ++i;
290                 /* wait for the bit to become one */
291                 status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET);
292                 ready = status & MMIO_STATUS_COM_WAIT_INT_MASK;
293         }
294 
295         /* set bit back to zero */
296         status &= ~MMIO_STATUS_COM_WAIT_INT_MASK;
297         writel(status, iommu->mmio_base + MMIO_STATUS_OFFSET);
298 
299         if (unlikely(i == EXIT_LOOP_COUNT))
300                 panic("AMD IOMMU: Completion wait loop failed\n");
301 }
302 
303 /*
304  * This function queues a completion wait command into the command
305  * buffer of an IOMMU
306  */
307 static int __iommu_completion_wait(struct amd_iommu *iommu)
308 {
309         struct iommu_cmd cmd;
310 
311          memset(&cmd, 0, sizeof(cmd));
312          cmd.data[0] = CMD_COMPL_WAIT_INT_MASK;
313          CMD_SET_TYPE(&cmd, CMD_COMPL_WAIT);
314 
315          return __iommu_queue_command(iommu, &cmd);
316 }
317 
318 /*
319  * This function is called whenever we need to ensure that the IOMMU has
320  * completed execution of all commands we sent. It sends a
321  * COMPLETION_WAIT command and waits for it to finish. The IOMMU informs
322  * us about that by writing a value to a physical address we pass with
323  * the command.
324  */
325 static int iommu_completion_wait(struct amd_iommu *iommu)
326 {
327         int ret = 0;
328         unsigned long flags;
329 
330         spin_lock_irqsave(&iommu->lock, flags);
331 
332         if (!iommu->need_sync)
333                 goto out;
334 
335         ret = __iommu_completion_wait(iommu);
336 
337         iommu->need_sync = false;
338 
339         if (ret)
340                 goto out;
341 
342         __iommu_wait_for_completion(iommu);
343 
344 out:
345         spin_unlock_irqrestore(&iommu->lock, flags);
346 
347         return 0;
348 }
349 
350 /*
351  * Command send function for invalidating a device table entry
352  */
353 static int iommu_queue_inv_dev_entry(struct amd_iommu *iommu, u16 devid)
354 {
355         struct iommu_cmd cmd;
356         int ret;
357 
358         BUG_ON(iommu == NULL);
359 
360         memset(&cmd, 0, sizeof(cmd));
361         CMD_SET_TYPE(&cmd, CMD_INV_DEV_ENTRY);
362         cmd.data[0] = devid;
363 
364         ret = iommu_queue_command(iommu, &cmd);
365 
366         return ret;
367 }
368 
369 static void __iommu_build_inv_iommu_pages(struct iommu_cmd *cmd, u64 address,
370                                           u16 domid, int pde, int s)
371 {
372         memset(cmd, 0, sizeof(*cmd));
373         address &= PAGE_MASK;
374         CMD_SET_TYPE(cmd, CMD_INV_IOMMU_PAGES);
375         cmd->data[1] |= domid;
376         cmd->data[2] = lower_32_bits(address);
377         cmd->data[3] = upper_32_bits(address);
378         if (s) /* size bit - we flush more than one 4kb page */
379                 cmd->data[2] |= CMD_INV_IOMMU_PAGES_SIZE_MASK;
380         if (pde) /* PDE bit - we wan't flush everything not only the PTEs */
381                 cmd->data[2] |= CMD_INV_IOMMU_PAGES_PDE_MASK;
382 }
383 
384 /*
385  * Generic command send function for invalidaing TLB entries
386  */
387 static int iommu_queue_inv_iommu_pages(struct amd_iommu *iommu,
388                 u64 address, u16 domid, int pde, int s)
389 {
390         struct iommu_cmd cmd;
391         int ret;
392 
393         __iommu_build_inv_iommu_pages(&cmd, address, domid, pde, s);
394 
395         ret = iommu_queue_command(iommu, &cmd);
396 
397         return ret;
398 }
399 
400 /*
401  * TLB invalidation function which is called from the mapping functions.
402  * It invalidates a single PTE if the range to flush is within a single
403  * page. Otherwise it flushes the whole TLB of the IOMMU.
404  */
405 static int iommu_flush_pages(struct amd_iommu *iommu, u16 domid,
406                 u64 address, size_t size)
407 {
408         int s = 0;
409         unsigned pages = iommu_num_pages(address, size, PAGE_SIZE);
410 
411         address &= PAGE_MASK;
412 
413         if (pages > 1) {
414                 /*
415                  * If we have to flush more than one page, flush all
416                  * TLB entries for this domain
417                  */
418                 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
419                 s = 1;
420         }
421 
422         iommu_queue_inv_iommu_pages(iommu, address, domid, 0, s);
423 
424         return 0;
425 }
426 
427 /* Flush the whole IO/TLB for a given protection domain */
428 static void iommu_flush_tlb(struct amd_iommu *iommu, u16 domid)
429 {
430         u64 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
431 
432         INC_STATS_COUNTER(domain_flush_single);
433 
434         iommu_queue_inv_iommu_pages(iommu, address, domid, 0, 1);
435 }
436 
437 /* Flush the whole IO/TLB for a given protection domain - including PDE */
438 static void iommu_flush_tlb_pde(struct amd_iommu *iommu, u16 domid)
439 {
440        u64 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
441 
442        INC_STATS_COUNTER(domain_flush_single);
443 
444        iommu_queue_inv_iommu_pages(iommu, address, domid, 1, 1);
445 }
446 
447 /*
448  * This function is used to flush the IO/TLB for a given protection domain
449  * on every IOMMU in the system
450  */
451 static void iommu_flush_domain(u16 domid)
452 {
453         unsigned long flags;
454         struct amd_iommu *iommu;
455         struct iommu_cmd cmd;
456 
457         INC_STATS_COUNTER(domain_flush_all);
458 
459         __iommu_build_inv_iommu_pages(&cmd, CMD_INV_IOMMU_ALL_PAGES_ADDRESS,
460                                       domid, 1, 1);
461 
462         for_each_iommu(iommu) {
463                 spin_lock_irqsave(&iommu->lock, flags);
464                 __iommu_queue_command(iommu, &cmd);
465                 __iommu_completion_wait(iommu);
466                 __iommu_wait_for_completion(iommu);
467                 spin_unlock_irqrestore(&iommu->lock, flags);
468         }
469 }
470 
471 void amd_iommu_flush_all_domains(void)
472 {
473         int i;
474 
475         for (i = 1; i < MAX_DOMAIN_ID; ++i) {
476                 if (!test_bit(i, amd_iommu_pd_alloc_bitmap))
477                         continue;
478                 iommu_flush_domain(i);
479         }
480 }
481 
482 void amd_iommu_flush_all_devices(void)
483 {
484         struct amd_iommu *iommu;
485         int i;
486 
487         for (i = 0; i <= amd_iommu_last_bdf; ++i) {
488 
489                 iommu = amd_iommu_rlookup_table[i];
490                 if (!iommu)
491                         continue;
492 
493                 iommu_queue_inv_dev_entry(iommu, i);
494                 iommu_completion_wait(iommu);
495         }
496 }
497 
498 /****************************************************************************
499  *
500  * The functions below are used the create the page table mappings for
501  * unity mapped regions.
502  *
503  ****************************************************************************/
504 
505 /*
506  * Generic mapping functions. It maps a physical address into a DMA
507  * address space. It allocates the page table pages if necessary.
508  * In the future it can be extended to a generic mapping function
509  * supporting all features of AMD IOMMU page tables like level skipping
510  * and full 64 bit address spaces.
511  */
512 static int iommu_map_page(struct protection_domain *dom,
513                           unsigned long bus_addr,
514                           unsigned long phys_addr,
515                           int prot)
516 {
517         u64 __pte, *pte;
518 
519         bus_addr  = PAGE_ALIGN(bus_addr);
520         phys_addr = PAGE_ALIGN(phys_addr);
521 
522         /* only support 512GB address spaces for now */
523         if (bus_addr > IOMMU_MAP_SIZE_L3 || !(prot & IOMMU_PROT_MASK))
524                 return -EINVAL;
525 
526         pte = alloc_pte(dom, bus_addr, NULL, GFP_KERNEL);
527 
528         if (IOMMU_PTE_PRESENT(*pte))
529                 return -EBUSY;
530 
531         __pte = phys_addr | IOMMU_PTE_P;
532         if (prot & IOMMU_PROT_IR)
533                 __pte |= IOMMU_PTE_IR;
534         if (prot & IOMMU_PROT_IW)
535                 __pte |= IOMMU_PTE_IW;
536 
537         *pte = __pte;
538 
539         return 0;
540 }
541 
542 static void iommu_unmap_page(struct protection_domain *dom,
543                              unsigned long bus_addr)
544 {
545         u64 *pte;
546 
547         pte = &dom->pt_root[IOMMU_PTE_L2_INDEX(bus_addr)];
548 
549         if (!IOMMU_PTE_PRESENT(*pte))
550                 return;
551 
552         pte = IOMMU_PTE_PAGE(*pte);
553         pte = &pte[IOMMU_PTE_L1_INDEX(bus_addr)];
554 
555         if (!IOMMU_PTE_PRESENT(*pte))
556                 return;
557 
558         pte = IOMMU_PTE_PAGE(*pte);
559         pte = &pte[IOMMU_PTE_L1_INDEX(bus_addr)];
560 
561         *pte = 0;
562 }
563 
564 /*
565  * This function checks if a specific unity mapping entry is needed for
566  * this specific IOMMU.
567  */
568 static int iommu_for_unity_map(struct amd_iommu *iommu,
569                                struct unity_map_entry *entry)
570 {
571         u16 bdf, i;
572 
573         for (i = entry->devid_start; i <= entry->devid_end; ++i) {
574                 bdf = amd_iommu_alias_table[i];
575                 if (amd_iommu_rlookup_table[bdf] == iommu)
576                         return 1;
577         }
578 
579         return 0;
580 }
581 
582 /*
583  * Init the unity mappings for a specific IOMMU in the system
584  *
585  * Basically iterates over all unity mapping entries and applies them to
586  * the default domain DMA of that IOMMU if necessary.
587  */
588 static int iommu_init_unity_mappings(struct amd_iommu *iommu)
589 {
590         struct unity_map_entry *entry;
591         int ret;
592 
593         list_for_each_entry(entry, &amd_iommu_unity_map, list) {
594                 if (!iommu_for_unity_map(iommu, entry))
595                         continue;
596                 ret = dma_ops_unity_map(iommu->default_dom, entry);
597                 if (ret)
598                         return ret;
599         }
600 
601         return 0;
602 }
603 
604 /*
605  * This function actually applies the mapping to the page table of the
606  * dma_ops domain.
607  */
608 static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
609                              struct unity_map_entry *e)
610 {
611         u64 addr;
612         int ret;
613 
614         for (addr = e->address_start; addr < e->address_end;
615              addr += PAGE_SIZE) {
616                 ret = iommu_map_page(&dma_dom->domain, addr, addr, e->prot);
617                 if (ret)
618                         return ret;
619                 /*
620                  * if unity mapping is in aperture range mark the page
621                  * as allocated in the aperture
622                  */
623                 if (addr < dma_dom->aperture_size)
624                         __set_bit(addr >> PAGE_SHIFT,
625                                   dma_dom->aperture[0]->bitmap);
626         }
627 
628         return 0;
629 }
630 
631 /*
632  * Inits the unity mappings required for a specific device
633  */
634 static int init_unity_mappings_for_device(struct dma_ops_domain *dma_dom,
635                                           u16 devid)
636 {
637         struct unity_map_entry *e;
638         int ret;
639 
640         list_for_each_entry(e, &amd_iommu_unity_map, list) {
641                 if (!(devid >= e->devid_start && devid <= e->devid_end))
642                         continue;
643                 ret = dma_ops_unity_map(dma_dom, e);
644                 if (ret)
645                         return ret;
646         }
647 
648         return 0;
649 }
650 
651 /****************************************************************************
652  *
653  * The next functions belong to the address allocator for the dma_ops
654  * interface functions. They work like the allocators in the other IOMMU
655  * drivers. Its basically a bitmap which marks the allocated pages in
656  * the aperture. Maybe it could be enhanced in the future to a more
657  * efficient allocator.
658  *
659  ****************************************************************************/
660 
661 /*
662  * The address allocator core functions.
663  *
664  * called with domain->lock held
665  */
666 
667 /*
668  * This function checks if there is a PTE for a given dma address. If
669  * there is one, it returns the pointer to it.
670  */
671 static u64* fetch_pte(struct protection_domain *domain,
672                       unsigned long address)
673 {
674         u64 *pte;
675 
676         pte = &domain->pt_root[IOMMU_PTE_L2_INDEX(address)];
677 
678         if (!IOMMU_PTE_PRESENT(*pte))
679                 return NULL;
680 
681         pte = IOMMU_PTE_PAGE(*pte);
682         pte = &pte[IOMMU_PTE_L1_INDEX(address)];
683 
684         if (!IOMMU_PTE_PRESENT(*pte))
685                 return NULL;
686 
687         pte = IOMMU_PTE_PAGE(*pte);
688         pte = &pte[IOMMU_PTE_L0_INDEX(address)];
689 
690         return pte;
691 }
692 
693 /*
694  * This function is used to add a new aperture range to an existing
695  * aperture in case of dma_ops domain allocation or address allocation
696  * failure.
697  */
698 static int alloc_new_range(struct amd_iommu *iommu,
699                            struct dma_ops_domain *dma_dom,
700                            bool populate, gfp_t gfp)
701 {
702         int index = dma_dom->aperture_size >> APERTURE_RANGE_SHIFT;
703         int i;
704 
705 #ifdef CONFIG_IOMMU_STRESS
706         populate = false;
707 #endif
708 
709         if (index >= APERTURE_MAX_RANGES)
710                 return -ENOMEM;
711 
712         dma_dom->aperture[index] = kzalloc(sizeof(struct aperture_range), gfp);
713         if (!dma_dom->aperture[index])
714                 return -ENOMEM;
715 
716         dma_dom->aperture[index]->bitmap = (void *)get_zeroed_page(gfp);
717         if (!dma_dom->aperture[index]->bitmap)
718                 goto out_free;
719 
720         dma_dom->aperture[index]->offset = dma_dom->aperture_size;
721 
722         if (populate) {
723                 unsigned long address = dma_dom->aperture_size;
724                 int i, num_ptes = APERTURE_RANGE_PAGES / 512;
725                 u64 *pte, *pte_page;
726 
727                 for (i = 0; i < num_ptes; ++i) {
728                         pte = alloc_pte(&dma_dom->domain, address,
729                                         &pte_page, gfp);
730                         if (!pte)
731                                 goto out_free;
732 
733                         dma_dom->aperture[index]->pte_pages[i] = pte_page;
734 
735                         address += APERTURE_RANGE_SIZE / 64;
736                 }
737         }
738 
739         dma_dom->aperture_size += APERTURE_RANGE_SIZE;
740 
741         /* Intialize the exclusion range if necessary */
742         if (iommu->exclusion_start &&
743             iommu->exclusion_start >= dma_dom->aperture[index]->offset &&
744             iommu->exclusion_start < dma_dom->aperture_size) {
745                 unsigned long startpage = iommu->exclusion_start >> PAGE_SHIFT;
746                 int pages = iommu_num_pages(iommu->exclusion_start,
747                                             iommu->exclusion_length,
748                                             PAGE_SIZE);
749                 dma_ops_reserve_addresses(dma_dom, startpage, pages);
750         }
751 
752         /*
753          * Check for areas already mapped as present in the new aperture
754          * range and mark those pages as reserved in the allocator. Such
755          * mappings may already exist as a result of requested unity
756          * mappings for devices.
757          */
758         for (i = dma_dom->aperture[index]->offset;
759              i < dma_dom->aperture_size;
760              i += PAGE_SIZE) {
761                 u64 *pte = fetch_pte(&dma_dom->domain, i);
762                 if (!pte || !IOMMU_PTE_PRESENT(*pte))
763                         continue;
764 
765                 dma_ops_reserve_addresses(dma_dom, i << PAGE_SHIFT, 1);
766         }
767 
768         return 0;
769 
770 out_free:
771         free_page((unsigned long)dma_dom->aperture[index]->bitmap);
772 
773         kfree(dma_dom->aperture[index]);
774         dma_dom->aperture[index] = NULL;
775 
776         return -ENOMEM;
777 }
778 
779 static unsigned long dma_ops_area_alloc(struct device *dev,
780                                         struct dma_ops_domain *dom,
781                                         unsigned int pages,
782                                         unsigned long align_mask,
783                                         u64 dma_mask,
784                                         unsigned long start)
785 {
786         unsigned long next_bit = dom->next_address % APERTURE_RANGE_SIZE;
787         int max_index = dom->aperture_size >> APERTURE_RANGE_SHIFT;
788         int i = start >> APERTURE_RANGE_SHIFT;
789         unsigned long boundary_size;
790         unsigned long address = -1;
791         unsigned long limit;
792 
793         next_bit >>= PAGE_SHIFT;
794 
795         boundary_size = ALIGN(dma_get_seg_boundary(dev) + 1,
796                         PAGE_SIZE) >> PAGE_SHIFT;
797 
798         for (;i < max_index; ++i) {
799                 unsigned long offset = dom->aperture[i]->offset >> PAGE_SHIFT;
800 
801                 if (dom->aperture[i]->offset >= dma_mask)
802                         break;
803 
804                 limit = iommu_device_max_index(APERTURE_RANGE_PAGES, offset,
805                                                dma_mask >> PAGE_SHIFT);
806 
807                 address = iommu_area_alloc(dom->aperture[i]->bitmap,
808                                            limit, next_bit, pages, 0,
809                                             boundary_size, align_mask);
810                 if (address != -1) {
811                         address = dom->aperture[i]->offset +
812                                   (address << PAGE_SHIFT);
813                         dom->next_address = address + (pages << PAGE_SHIFT);
814                         break;
815                 }
816 
817                 next_bit = 0;
818         }
819 
820         return address;
821 }
822 
823 static unsigned long dma_ops_alloc_addresses(struct device *dev,
824                                              struct dma_ops_domain *dom,
825                                              unsigned int pages,
826                                              unsigned long align_mask,
827                                              u64 dma_mask)
828 {
829         unsigned long address;
830 
831 #ifdef CONFIG_IOMMU_STRESS
832         dom->next_address = 0;
833         dom->need_flush = true;
834 #endif
835 
836         address = dma_ops_area_alloc(dev, dom, pages, align_mask,
837                                      dma_mask, dom->next_address);
838 
839         if (address == -1) {
840                 dom->next_address = 0;
841                 address = dma_ops_area_alloc(dev, dom, pages, align_mask,
842                                              dma_mask, 0);
843                 dom->need_flush = true;
844         }
845 
846         if (unlikely(address == -1))
847                 address = bad_dma_address;
848 
849         WARN_ON((address + (PAGE_SIZE*pages)) > dom->aperture_size);
850 
851         return address;
852 }
853 
854 /*
855  * The address free function.
856  *
857  * called with domain->lock held
858  */
859 static void dma_ops_free_addresses(struct dma_ops_domain *dom,
860                                    unsigned long address,
861                                    unsigned int pages)
862 {
863         unsigned i = address >> APERTURE_RANGE_SHIFT;
864         struct aperture_range *range = dom->aperture[i];
865 
866         BUG_ON(i >= APERTURE_MAX_RANGES || range == NULL);
867 
868 #ifdef CONFIG_IOMMU_STRESS
869         if (i < 4)
870                 return;
871 #endif
872 
873         if (address >= dom->next_address)
874                 dom->need_flush = true;
875 
876         address = (address % APERTURE_RANGE_SIZE) >> PAGE_SHIFT;
877 
878         iommu_area_free(range->bitmap, address, pages);
879 
880 }
881 
882 /****************************************************************************
883  *
884  * The next functions belong to the domain allocation. A domain is
885  * allocated for every IOMMU as the default domain. If device isolation
886  * is enabled, every device get its own domain. The most important thing
887  * about domains is the page table mapping the DMA address space they
888  * contain.
889  *
890  ****************************************************************************/
891 
892 static u16 domain_id_alloc(void)
893 {
894         unsigned long flags;
895         int id;
896 
897         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
898         id = find_first_zero_bit(amd_iommu_pd_alloc_bitmap, MAX_DOMAIN_ID);
899         BUG_ON(id == 0);
900         if (id > 0 && id < MAX_DOMAIN_ID)
901                 __set_bit(id, amd_iommu_pd_alloc_bitmap);
902         else
903                 id = 0;
904         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
905 
906         return id;
907 }
908 
909 static void domain_id_free(int id)
910 {
911         unsigned long flags;
912 
913         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
914         if (id > 0 && id < MAX_DOMAIN_ID)
915                 __clear_bit(id, amd_iommu_pd_alloc_bitmap);
916         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
917 }
918 
919 /*
920  * Used to reserve address ranges in the aperture (e.g. for exclusion
921  * ranges.
922  */
923 static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
924                                       unsigned long start_page,
925                                       unsigned int pages)
926 {
927         unsigned int i, last_page = dom->aperture_size >> PAGE_SHIFT;
928 
929         if (start_page + pages > last_page)
930                 pages = last_page - start_page;
931 
932         for (i = start_page; i < start_page + pages; ++i) {
933                 int index = i / APERTURE_RANGE_PAGES;
934                 int page  = i % APERTURE_RANGE_PAGES;
935                 __set_bit(page, dom->aperture[index]->bitmap);
936         }
937 }
938 
939 static void free_pagetable(struct protection_domain *domain)
940 {
941         int i, j;
942         u64 *p1, *p2, *p3;
943 
944         p1 = domain->pt_root;
945 
946         if (!p1)
947                 return;
948 
949         for (i = 0; i < 512; ++i) {
950                 if (!IOMMU_PTE_PRESENT(p1[i]))
951                         continue;
952 
953                 p2 = IOMMU_PTE_PAGE(p1[i]);
954                 for (j = 0; j < 512; ++j) {
955                         if (!IOMMU_PTE_PRESENT(p2[j]))
956                                 continue;
957                         p3 = IOMMU_PTE_PAGE(p2[j]);
958                         free_page((unsigned long)p3);
959                 }
960 
961                 free_page((unsigned long)p2);
962         }
963 
964         free_page((unsigned long)p1);
965 
966         domain->pt_root = NULL;
967 }
968 
969 /*
970  * Free a domain, only used if something went wrong in the
971  * allocation path and we need to free an already allocated page table
972  */
973 static void dma_ops_domain_free(struct dma_ops_domain *dom)
974 {
975         int i;
976 
977         if (!dom)
978                 return;
979 
980         free_pagetable(&dom->domain);
981 
982         for (i = 0; i < APERTURE_MAX_RANGES; ++i) {
983                 if (!dom->aperture[i])
984                         continue;
985                 free_page((unsigned long)dom->aperture[i]->bitmap);
986                 kfree(dom->aperture[i]);
987         }
988 
989         kfree(dom);
990 }
991 
992 /*
993  * Allocates a new protection domain usable for the dma_ops functions.
994  * It also intializes the page table and the address allocator data
995  * structures required for the dma_ops interface
996  */
997 static struct dma_ops_domain *dma_ops_domain_alloc(struct amd_iommu *iommu)
998 {
999         struct dma_ops_domain *dma_dom;
1000 
1001         dma_dom = kzalloc(sizeof(struct dma_ops_domain), GFP_KERNEL);
1002         if (!dma_dom)
1003                 return NULL;
1004 
1005         spin_lock_init(&dma_dom->domain.lock);
1006 
1007         dma_dom->domain.id = domain_id_alloc();
1008         if (dma_dom->domain.id == 0)
1009                 goto free_dma_dom;
1010         dma_dom->domain.mode = PAGE_MODE_3_LEVEL;
1011         dma_dom->domain.pt_root = (void *)get_zeroed_page(GFP_KERNEL);
1012         dma_dom->domain.flags = PD_DMA_OPS_MASK;
1013         dma_dom->domain.priv = dma_dom;
1014         if (!dma_dom->domain.pt_root)
1015                 goto free_dma_dom;
1016 
1017         dma_dom->need_flush = false;
1018         dma_dom->target_dev = 0xffff;
1019 
1020         if (alloc_new_range(iommu, dma_dom, true, GFP_KERNEL))
1021                 goto free_dma_dom;
1022 
1023         /*
1024          * mark the first page as allocated so we never return 0 as
1025          * a valid dma-address. So we can use 0 as error value
1026          */
1027         dma_dom->aperture[0]->bitmap[0] = 1;
1028         dma_dom->next_address = 0;
1029 
1030 
1031         return dma_dom;
1032 
1033 free_dma_dom:
1034         dma_ops_domain_free(dma_dom);
1035 
1036         return NULL;
1037 }
1038 
1039 /*
1040  * little helper function to check whether a given protection domain is a
1041  * dma_ops domain
1042  */
1043 static bool dma_ops_domain(struct protection_domain *domain)
1044 {
1045         return domain->flags & PD_DMA_OPS_MASK;
1046 }
1047 
1048 /*
1049  * Find out the protection domain structure for a given PCI device. This
1050  * will give us the pointer to the page table root for example.
1051  */
1052 static struct protection_domain *domain_for_device(u16 devid)
1053 {
1054         struct protection_domain *dom;
1055         unsigned long flags;
1056 
1057         read_lock_irqsave(&amd_iommu_devtable_lock, flags);
1058         dom = amd_iommu_pd_table[devid];
1059         read_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1060 
1061         return dom;
1062 }
1063 
1064 /*
1065  * If a device is not yet associated with a domain, this function does
1066  * assigns it visible for the hardware
1067  */
1068 static void attach_device(struct amd_iommu *iommu,
1069                           struct protection_domain *domain,
1070                           u16 devid)
1071 {
1072         unsigned long flags;
1073         u64 pte_root = virt_to_phys(domain->pt_root);
1074 
1075         domain->dev_cnt += 1;
1076 
1077         pte_root |= (domain->mode & DEV_ENTRY_MODE_MASK)
1078                     << DEV_ENTRY_MODE_SHIFT;
1079         pte_root |= IOMMU_PTE_IR | IOMMU_PTE_IW | IOMMU_PTE_P | IOMMU_PTE_TV;
1080 
1081         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1082         amd_iommu_dev_table[devid].data[0] = lower_32_bits(pte_root);
1083         amd_iommu_dev_table[devid].data[1] = upper_32_bits(pte_root);
1084         amd_iommu_dev_table[devid].data[2] = domain->id;
1085 
1086         amd_iommu_pd_table[devid] = domain;
1087         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1088 
1089        /*
1090         * We might boot into a crash-kernel here. The crashed kernel
1091         * left the caches in the IOMMU dirty. So we have to flush
1092         * here to evict all dirty stuff.
1093         */
1094         iommu_queue_inv_dev_entry(iommu, devid);
1095         iommu_flush_tlb_pde(iommu, domain->id);
1096 }
1097 
1098 /*
1099  * Removes a device from a protection domain (unlocked)
1100  */
1101 static void __detach_device(struct protection_domain *domain, u16 devid)
1102 {
1103 
1104         /* lock domain */
1105         spin_lock(&domain->lock);
1106 
1107         /* remove domain from the lookup table */
1108         amd_iommu_pd_table[devid] = NULL;
1109 
1110         /* remove entry from the device table seen by the hardware */
1111         amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV;
1112         amd_iommu_dev_table[devid].data[1] = 0;
1113         amd_iommu_dev_table[devid].data[2] = 0;
1114 
1115         amd_iommu_apply_erratum_63(devid);
1116 
1117         /* decrease reference counter */
1118         domain->dev_cnt -= 1;
1119 
1120         /* ready */
1121         spin_unlock(&domain->lock);
1122 }
1123 
1124 /*
1125  * Removes a device from a protection domain (with devtable_lock held)
1126  */
1127 static void detach_device(struct protection_domain *domain, u16 devid)
1128 {
1129         unsigned long flags;
1130 
1131         /* lock device table */
1132         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1133         __detach_device(domain, devid);
1134         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1135 }
1136 
1137 static int device_change_notifier(struct notifier_block *nb,
1138                                   unsigned long action, void *data)
1139 {
1140         struct device *dev = data;
1141         struct pci_dev *pdev = to_pci_dev(dev);
1142         u16 devid = calc_devid(pdev->bus->number, pdev->devfn);
1143         struct protection_domain *domain;
1144         struct dma_ops_domain *dma_domain;
1145         struct amd_iommu *iommu;
1146         unsigned long flags;
1147 
1148         if (devid > amd_iommu_last_bdf)
1149                 goto out;
1150 
1151         devid = amd_iommu_alias_table[devid];
1152 
1153         iommu = amd_iommu_rlookup_table[devid];
1154         if (iommu == NULL)
1155                 goto out;
1156 
1157         domain = domain_for_device(devid);
1158 
1159         if (domain && !dma_ops_domain(domain))
1160                 WARN_ONCE(1, "AMD IOMMU WARNING: device %s already bound "
1161                           "to a non-dma-ops domain\n", dev_name(dev));
1162 
1163         switch (action) {
1164         case BUS_NOTIFY_UNBOUND_DRIVER:
1165                 if (!domain)
1166                         goto out;
1167                 detach_device(domain, devid);
1168                 break;
1169         case BUS_NOTIFY_ADD_DEVICE:
1170                 /* allocate a protection domain if a device is added */
1171                 dma_domain = find_protection_domain(devid);
1172                 if (dma_domain)
1173                         goto out;
1174                 dma_domain = dma_ops_domain_alloc(iommu);
1175                 if (!dma_domain)
1176                         goto out;
1177                 dma_domain->target_dev = devid;
1178 
1179                 spin_lock_irqsave(&iommu_pd_list_lock, flags);
1180                 list_add_tail(&dma_domain->list, &iommu_pd_list);
1181                 spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
1182 
1183                 break;
1184         default:
1185                 goto out;
1186         }
1187 
1188         iommu_queue_inv_dev_entry(iommu, devid);
1189         iommu_completion_wait(iommu);
1190 
1191 out:
1192         return 0;
1193 }
1194 
1195 static struct notifier_block device_nb = {
1196         .notifier_call = device_change_notifier,
1197 };
1198 
1199 /*****************************************************************************
1200  *
1201  * The next functions belong to the dma_ops mapping/unmapping code.
1202  *
1203  *****************************************************************************/
1204 
1205 /*
1206  * This function checks if the driver got a valid device from the caller to
1207  * avoid dereferencing invalid pointers.
1208  */
1209 static bool check_device(struct device *dev)
1210 {
1211         if (!dev || !dev->dma_mask)
1212                 return false;
1213 
1214         return true;
1215 }
1216 
1217 /*
1218  * In this function the list of preallocated protection domains is traversed to
1219  * find the domain for a specific device
1220  */
1221 static struct dma_ops_domain *find_protection_domain(u16 devid)
1222 {
1223         struct dma_ops_domain *entry, *ret = NULL;
1224         unsigned long flags;
1225 
1226         if (list_empty(&iommu_pd_list))
1227                 return NULL;
1228 
1229         spin_lock_irqsave(&iommu_pd_list_lock, flags);
1230 
1231         list_for_each_entry(entry, &iommu_pd_list, list) {
1232                 if (entry->target_dev == devid) {
1233                         ret = entry;
1234                         break;
1235                 }
1236         }
1237 
1238         spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
1239 
1240         return ret;
1241 }
1242 
1243 /*
1244  * In the dma_ops path we only have the struct device. This function
1245  * finds the corresponding IOMMU, the protection domain and the
1246  * requestor id for a given device.
1247  * If the device is not yet associated with a domain this is also done
1248  * in this function.
1249  */
1250 static int get_device_resources(struct device *dev,
1251                                 struct amd_iommu **iommu,
1252                                 struct protection_domain **domain,
1253                                 u16 *bdf)
1254 {
1255         struct dma_ops_domain *dma_dom;
1256         struct pci_dev *pcidev;
1257         u16 _bdf;
1258 
1259         *iommu = NULL;
1260         *domain = NULL;
1261         *bdf = 0xffff;
1262 
1263         if (dev->bus != &pci_bus_type)
1264                 return 0;
1265 
1266         pcidev = to_pci_dev(dev);
1267         _bdf = calc_devid(pcidev->bus->number, pcidev->devfn);
1268 
1269         /* device not translated by any IOMMU in the system? */
1270         if (_bdf > amd_iommu_last_bdf)
1271                 return 0;
1272 
1273         *bdf = amd_iommu_alias_table[_bdf];
1274 
1275         *iommu = amd_iommu_rlookup_table[*bdf];
1276         if (*iommu == NULL)
1277                 return 0;
1278         *domain = domain_for_device(*bdf);
1279         if (*domain == NULL) {
1280                 dma_dom = find_protection_domain(*bdf);
1281                 if (!dma_dom)
1282                         dma_dom = (*iommu)->default_dom;
1283                 *domain = &dma_dom->domain;
1284                 attach_device(*iommu, *domain, *bdf);
1285                 DUMP_printk("Using protection domain %d for device %s\n",
1286                             (*domain)->id, dev_name(dev));
1287         }
1288 
1289         if (domain_for_device(_bdf) == NULL)
1290                 attach_device(*iommu, *domain, _bdf);
1291 
1292         return 1;
1293 }
1294 
1295 /*
1296  * If the pte_page is not yet allocated this function is called
1297  */
1298 static u64* alloc_pte(struct protection_domain *dom,
1299                       unsigned long address, u64 **pte_page, gfp_t gfp)
1300 {
1301         u64 *pte, *page;
1302 
1303         pte = &dom->pt_root[IOMMU_PTE_L2_INDEX(address)];
1304 
1305         if (!IOMMU_PTE_PRESENT(*pte)) {
1306                 page = (u64 *)get_zeroed_page(gfp);
1307                 if (!page)
1308                         return NULL;
1309                 *pte = IOMMU_L2_PDE(virt_to_phys(page));
1310         }
1311 
1312         pte = IOMMU_PTE_PAGE(*pte);
1313         pte = &pte[IOMMU_PTE_L1_INDEX(address)];
1314 
1315         if (!IOMMU_PTE_PRESENT(*pte)) {
1316                 page = (u64 *)get_zeroed_page(gfp);
1317                 if (!page)
1318                         return NULL;
1319                 *pte = IOMMU_L1_PDE(virt_to_phys(page));
1320         }
1321 
1322         pte = IOMMU_PTE_PAGE(*pte);
1323 
1324         if (pte_page)
1325                 *pte_page = pte;
1326 
1327         pte = &pte[IOMMU_PTE_L0_INDEX(address)];
1328 
1329         return pte;
1330 }
1331 
1332 /*
1333  * This function fetches the PTE for a given address in the aperture
1334  */
1335 static u64* dma_ops_get_pte(struct dma_ops_domain *dom,
1336                             unsigned long address)
1337 {
1338         struct aperture_range *aperture;
1339         u64 *pte, *pte_page;
1340 
1341         aperture = dom->aperture[APERTURE_RANGE_INDEX(address)];
1342         if (!aperture)
1343                 return NULL;
1344 
1345         pte = aperture->pte_pages[APERTURE_PAGE_INDEX(address)];
1346         if (!pte) {
1347                 pte = alloc_pte(&dom->domain, address, &pte_page, GFP_ATOMIC);
1348                 aperture->pte_pages[APERTURE_PAGE_INDEX(address)] = pte_page;
1349         } else
1350                 pte += IOMMU_PTE_L0_INDEX(address);
1351 
1352         return pte;
1353 }
1354 
1355 /*
1356  * This is the generic map function. It maps one 4kb page at paddr to
1357  * the given address in the DMA address space for the domain.
1358  */
1359 static dma_addr_t dma_ops_domain_map(struct amd_iommu *iommu,
1360                                      struct dma_ops_domain *dom,
1361                                      unsigned long address,
1362                                      phys_addr_t paddr,
1363                                      int direction)
1364 {
1365         u64 *pte, __pte;
1366 
1367         WARN_ON(address > dom->aperture_size);
1368 
1369         paddr &= PAGE_MASK;
1370 
1371         pte  = dma_ops_get_pte(dom, address);
1372         if (!pte)
1373                 return bad_dma_address;
1374 
1375         __pte = paddr | IOMMU_PTE_P | IOMMU_PTE_FC;
1376 
1377         if (direction == DMA_TO_DEVICE)
1378                 __pte |= IOMMU_PTE_IR;
1379         else if (direction == DMA_FROM_DEVICE)
1380                 __pte |= IOMMU_PTE_IW;
1381         else if (direction == DMA_BIDIRECTIONAL)
1382                 __pte |= IOMMU_PTE_IR | IOMMU_PTE_IW;
1383 
1384         WARN_ON(*pte);
1385 
1386         *pte = __pte;
1387 
1388         return (dma_addr_t)address;
1389 }
1390 
1391 /*
1392  * The generic unmapping function for on page in the DMA address space.
1393  */
1394 static void dma_ops_domain_unmap(struct amd_iommu *iommu,
1395                                  struct dma_ops_domain *dom,
1396                                  unsigned long address)
1397 {
1398         struct aperture_range *aperture;
1399         u64 *pte;
1400 
1401         if (address >= dom->aperture_size)
1402                 return;
1403 
1404         aperture = dom->aperture[APERTURE_RANGE_INDEX(address)];
1405         if (!aperture)
1406                 return;
1407 
1408         pte  = aperture->pte_pages[APERTURE_PAGE_INDEX(address)];
1409         if (!pte)
1410                 return;
1411 
1412         pte += IOMMU_PTE_L0_INDEX(address);
1413 
1414         WARN_ON(!*pte);
1415 
1416         *pte = 0ULL;
1417 }
1418 
1419 /*
1420  * This function contains common code for mapping of a physically
1421  * contiguous memory region into DMA address space. It is used by all
1422  * mapping functions provided with this IOMMU driver.
1423  * Must be called with the domain lock held.
1424  */
1425 static dma_addr_t __map_single(struct device *dev,
1426                                struct amd_iommu *iommu,
1427                                struct dma_ops_domain *dma_dom,
1428                                phys_addr_t paddr,
1429                                size_t size,
1430                                int dir,
1431                                bool align,
1432                                u64 dma_mask)
1433 {
1434         dma_addr_t offset = paddr & ~PAGE_MASK;
1435         dma_addr_t address, start, ret;
1436         unsigned int pages;
1437         unsigned long align_mask = 0;
1438         int i;
1439 
1440         pages = iommu_num_pages(paddr, size, PAGE_SIZE);
1441         paddr &= PAGE_MASK;
1442 
1443         INC_STATS_COUNTER(total_map_requests);
1444 
1445         if (pages > 1)
1446                 INC_STATS_COUNTER(cross_page);
1447 
1448         if (align)
1449                 align_mask = (1UL << get_order(size)) - 1;
1450 
1451 retry:
1452         address = dma_ops_alloc_addresses(dev, dma_dom, pages, align_mask,
1453                                           dma_mask);
1454         if (unlikely(address == bad_dma_address)) {
1455                 /*
1456                  * setting next_address here will let the address
1457                  * allocator only scan the new allocated range in the
1458                  * first run. This is a small optimization.
1459                  */
1460                 dma_dom->next_address = dma_dom->aperture_size;
1461 
1462                 if (alloc_new_range(iommu, dma_dom, false, GFP_ATOMIC))
1463                         goto out;
1464 
1465                 /*
1466                  * aperture was sucessfully enlarged by 128 MB, try
1467                  * allocation again
1468                  */
1469                 goto retry;
1470         }
1471 
1472         start = address;
1473         for (i = 0; i < pages; ++i) {
1474                 ret = dma_ops_domain_map(iommu, dma_dom, start, paddr, dir);
1475                 if (ret == bad_dma_address)
1476                         goto out_unmap;
1477 
1478                 paddr += PAGE_SIZE;
1479                 start += PAGE_SIZE;
1480         }
1481         address += offset;
1482 
1483         ADD_STATS_COUNTER(alloced_io_mem, size);
1484 
1485         if (unlikely(dma_dom->need_flush && !amd_iommu_unmap_flush)) {
1486                 iommu_flush_tlb(iommu, dma_dom->domain.id);
1487                 dma_dom->need_flush = false;
1488         } else if (unlikely(iommu_has_npcache(iommu)))
1489                 iommu_flush_pages(iommu, dma_dom->domain.id, address, size);
1490 
1491 out:
1492         return address;
1493 
1494 out_unmap:
1495 
1496         for (--i; i >= 0; --i) {
1497                 start -= PAGE_SIZE;
1498                 dma_ops_domain_unmap(iommu, dma_dom, start);
1499         }
1500 
1501         dma_ops_free_addresses(dma_dom, address, pages);
1502 
1503         return bad_dma_address;
1504 }
1505 
1506 /*
1507  * Does the reverse of the __map_single function. Must be called with
1508  * the domain lock held too
1509  */
1510 static void __unmap_single(struct amd_iommu *iommu,
1511                            struct dma_ops_domain *dma_dom,
1512                            dma_addr_t dma_addr,
1513                            size_t size,
1514                            int dir)
1515 {
1516         dma_addr_t i, start;
1517         unsigned int pages;
1518 
1519         if ((dma_addr == bad_dma_address) ||
1520             (dma_addr + size > dma_dom->aperture_size))
1521                 return;
1522 
1523         pages = iommu_num_pages(dma_addr, size, PAGE_SIZE);
1524         dma_addr &= PAGE_MASK;
1525         start = dma_addr;
1526 
1527         for (i = 0; i < pages; ++i) {
1528                 dma_ops_domain_unmap(iommu, dma_dom, start);
1529                 start += PAGE_SIZE;
1530         }
1531 
1532         SUB_STATS_COUNTER(alloced_io_mem, size);
1533 
1534         dma_ops_free_addresses(dma_dom, dma_addr, pages);
1535 
1536         if (amd_iommu_unmap_flush || dma_dom->need_flush) {
1537                 iommu_flush_pages(iommu, dma_dom->domain.id, dma_addr, size);
1538                 dma_dom->need_flush = false;
1539         }
1540 }
1541 
1542 /*
1543  * The exported map_single function for dma_ops.
1544  */
1545 static dma_addr_t map_page(struct device *dev, struct page *page,
1546                            unsigned long offset, size_t size,
1547                            enum dma_data_direction dir,
1548                            struct dma_attrs *attrs)
1549 {
1550         unsigned long flags;
1551         struct amd_iommu *iommu;
1552         struct protection_domain *domain;
1553         u16 devid;
1554         dma_addr_t addr;
1555         u64 dma_mask;
1556         phys_addr_t paddr = page_to_phys(page) + offset;
1557 
1558         INC_STATS_COUNTER(cnt_map_single);
1559 
1560         if (!check_device(dev))
1561                 return bad_dma_address;
1562 
1563         dma_mask = *dev->dma_mask;
1564 
1565         get_device_resources(dev, &iommu, &domain, &devid);
1566 
1567         if (iommu == NULL || domain == NULL)
1568                 /* device not handled by any AMD IOMMU */
1569                 return (dma_addr_t)paddr;
1570 
1571         if (!dma_ops_domain(domain))
1572                 return bad_dma_address;
1573 
1574         spin_lock_irqsave(&domain->lock, flags);
1575         addr = __map_single(dev, iommu, domain->priv, paddr, size, dir, false,
1576                             dma_mask);
1577         if (addr == bad_dma_address)
1578                 goto out;
1579 
1580         iommu_completion_wait(iommu);
1581 
1582 out:
1583         spin_unlock_irqrestore(&domain->lock, flags);
1584 
1585         return addr;
1586 }
1587 
1588 /*
1589  * The exported unmap_single function for dma_ops.
1590  */
1591 static void unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
1592                        enum dma_data_direction dir, struct dma_attrs *attrs)
1593 {
1594         unsigned long flags;
1595         struct amd_iommu *iommu;
1596         struct protection_domain *domain;
1597         u16 devid;
1598 
1599         INC_STATS_COUNTER(cnt_unmap_single);
1600 
1601         if (!check_device(dev) ||
1602             !get_device_resources(dev, &iommu, &domain, &devid))
1603                 /* device not handled by any AMD IOMMU */
1604                 return;
1605 
1606         if (!dma_ops_domain(domain))
1607                 return;
1608 
1609         spin_lock_irqsave(&domain->lock, flags);
1610 
1611         __unmap_single(iommu, domain->priv, dma_addr, size, dir);
1612 
1613         iommu_completion_wait(iommu);
1614 
1615         spin_unlock_irqrestore(&domain->lock, flags);
1616 }
1617 
1618 /*
1619  * This is a special map_sg function which is used if we should map a
1620  * device which is not handled by an AMD IOMMU in the system.
1621  */
1622 static int map_sg_no_iommu(struct device *dev, struct scatterlist *sglist,
1623                            int nelems, int dir)
1624 {
1625         struct scatterlist *s;
1626         int i;
1627 
1628         for_each_sg(sglist, s, nelems, i) {
1629                 s->dma_address = (dma_addr_t)sg_phys(s);
1630                 s->dma_length  = s->length;
1631         }
1632 
1633         return nelems;
1634 }
1635 
1636 /*
1637  * The exported map_sg function for dma_ops (handles scatter-gather
1638  * lists).
1639  */
1640 static int map_sg(struct device *dev, struct scatterlist *sglist,
1641                   int nelems, enum dma_data_direction dir,
1642                   struct dma_attrs *attrs)
1643 {
1644         unsigned long flags;
1645         struct amd_iommu *iommu;
1646         struct protection_domain *domain;
1647         u16 devid;
1648         int i;
1649         struct scatterlist *s;
1650         phys_addr_t paddr;
1651         int mapped_elems = 0;
1652         u64 dma_mask;
1653 
1654         INC_STATS_COUNTER(cnt_map_sg);
1655 
1656         if (!check_device(dev))
1657                 return 0;
1658 
1659         dma_mask = *dev->dma_mask;
1660 
1661         get_device_resources(dev, &iommu, &domain, &devid);
1662 
1663         if (!iommu || !domain)
1664                 return map_sg_no_iommu(dev, sglist, nelems, dir);
1665 
1666         if (!dma_ops_domain(domain))
1667                 return 0;
1668 
1669         spin_lock_irqsave(&domain->lock, flags);
1670 
1671         for_each_sg(sglist, s, nelems, i) {
1672                 paddr = sg_phys(s);
1673 
1674                 s->dma_address = __map_single(dev, iommu, domain->priv,
1675                                               paddr, s->length, dir, false,
1676                                               dma_mask);
1677 
1678                 if (s->dma_address) {
1679                         s->dma_length = s->length;
1680                         mapped_elems++;
1681                 } else
1682                         goto unmap;
1683         }
1684 
1685         iommu_completion_wait(iommu);
1686 
1687 out:
1688         spin_unlock_irqrestore(&domain->lock, flags);
1689 
1690         return mapped_elems;
1691 unmap:
1692         for_each_sg(sglist, s, mapped_elems, i) {
1693                 if (s->dma_address)
1694                         __unmap_single(iommu, domain->priv, s->dma_address,
1695                                        s->dma_length, dir);
1696                 s->dma_address = s->dma_length = 0;
1697         }
1698 
1699         mapped_elems = 0;
1700 
1701         goto out;
1702 }
1703 
1704 /*
1705  * The exported map_sg function for dma_ops (handles scatter-gather
1706  * lists).
1707  */
1708 static void unmap_sg(struct device *dev, struct scatterlist *sglist,
1709                      int nelems, enum dma_data_direction dir,
1710                      struct dma_attrs *attrs)
1711 {
1712         unsigned long flags;
1713         struct amd_iommu *iommu;
1714         struct protection_domain *domain;
1715         struct scatterlist *s;
1716         u16 devid;
1717         int i;
1718 
1719         INC_STATS_COUNTER(cnt_unmap_sg);
1720 
1721         if (!check_device(dev) ||
1722             !get_device_resources(dev, &iommu, &domain, &devid))
1723                 return;
1724 
1725         if (!dma_ops_domain(domain))
1726                 return;
1727 
1728         spin_lock_irqsave(&domain->lock, flags);
1729 
1730         for_each_sg(sglist, s, nelems, i) {
1731                 __unmap_single(iommu, domain->priv, s->dma_address,
1732                                s->dma_length, dir);
1733                 s->dma_address = s->dma_length = 0;
1734         }
1735 
1736         iommu_completion_wait(iommu);
1737 
1738         spin_unlock_irqrestore(&domain->lock, flags);
1739 }
1740 
1741 /*
1742  * The exported alloc_coherent function for dma_ops.
1743  */
1744 static void *alloc_coherent(struct device *dev, size_t size,
1745                             dma_addr_t *dma_addr, gfp_t flag)
1746 {
1747         unsigned long flags;
1748         void *virt_addr;
1749         struct amd_iommu *iommu;
1750         struct protection_domain *domain;
1751         u16 devid;
1752         phys_addr_t paddr;
1753         u64 dma_mask = dev->coherent_dma_mask;
1754 
1755         INC_STATS_COUNTER(cnt_alloc_coherent);
1756 
1757         if (!check_device(dev))
1758                 return NULL;
1759 
1760         if (!get_device_resources(dev, &iommu, &domain, &devid))
1761                 flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
1762 
1763         flag |= __GFP_ZERO;
1764         virt_addr = (void *)__get_free_pages(flag, get_order(size));
1765         if (!virt_addr)
1766                 return NULL;
1767 
1768         paddr = virt_to_phys(virt_addr);
1769 
1770         if (!iommu || !domain) {
1771                 *dma_addr = (dma_addr_t)paddr;
1772                 return virt_addr;
1773         }
1774 
1775         if (!dma_ops_domain(domain))
1776                 goto out_free;
1777 
1778         if (!dma_mask)
1779                 dma_mask = *dev->dma_mask;
1780 
1781         spin_lock_irqsave(&domain->lock, flags);
1782 
1783         *dma_addr = __map_single(dev, iommu, domain->priv, paddr,
1784                                  size, DMA_BIDIRECTIONAL, true, dma_mask);
1785 
1786         if (*dma_addr == bad_dma_address) {
1787                 spin_unlock_irqrestore(&domain->lock, flags);
1788                 goto out_free;
1789         }
1790 
1791         iommu_completion_wait(iommu);
1792 
1793         spin_unlock_irqrestore(&domain->lock, flags);
1794 
1795         return virt_addr;
1796 
1797 out_free:
1798 
1799         free_pages((unsigned long)virt_addr, get_order(size));
1800 
1801         return NULL;
1802 }
1803 
1804 /*
1805  * The exported free_coherent function for dma_ops.
1806  */
1807 static void free_coherent(struct device *dev, size_t size,
1808                           void *virt_addr, dma_addr_t dma_addr)
1809 {
1810         unsigned long flags;
1811         struct amd_iommu *iommu;
1812         struct protection_domain *domain;
1813         u16 devid;
1814 
1815         INC_STATS_COUNTER(cnt_free_coherent);
1816 
1817         if (!check_device(dev))
1818                 return;
1819 
1820         get_device_resources(dev, &iommu, &domain, &devid);
1821 
1822         if (!iommu || !domain)
1823                 goto free_mem;
1824 
1825         if (!dma_ops_domain(domain))
1826                 goto free_mem;
1827 
1828         spin_lock_irqsave(&domain->lock, flags);
1829 
1830         __unmap_single(iommu, domain->priv, dma_addr, size, DMA_BIDIRECTIONAL);
1831 
1832         iommu_completion_wait(iommu);
1833 
1834         spin_unlock_irqrestore(&domain->lock, flags);
1835 
1836 free_mem:
1837         free_pages((unsigned long)virt_addr, get_order(size));
1838 }
1839 
1840 /*
1841  * This function is called by the DMA layer to find out if we can handle a
1842  * particular device. It is part of the dma_ops.
1843  */
1844 static int amd_iommu_dma_supported(struct device *dev, u64 mask)
1845 {
1846         u16 bdf;
1847         struct pci_dev *pcidev;
1848 
1849         /* No device or no PCI device */
1850         if (!dev || dev->bus != &pci_bus_type)
1851                 return 0;
1852 
1853         pcidev = to_pci_dev(dev);
1854 
1855         bdf = calc_devid(pcidev->bus->number, pcidev->devfn);
1856 
1857         /* Out of our scope? */
1858         if (bdf > amd_iommu_last_bdf)
1859                 return 0;
1860 
1861         return 1;
1862 }
1863 
1864 /*
1865  * The function for pre-allocating protection domains.
1866  *
1867  * If the driver core informs the DMA layer if a driver grabs a device
1868  * we don't need to preallocate the protection domains anymore.
1869  * For now we have to.
1870  */
1871 static void prealloc_protection_domains(void)
1872 {
1873         struct pci_dev *dev = NULL;
1874         struct dma_ops_domain *dma_dom;
1875         struct amd_iommu *iommu;
1876         u16 devid, __devid;
1877 
1878         while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
1879                 __devid = devid = calc_devid(dev->bus->number, dev->devfn);
1880                 if (devid > amd_iommu_last_bdf)
1881                         continue;
1882                 devid = amd_iommu_alias_table[devid];
1883                 if (domain_for_device(devid))
1884                         continue;
1885                 iommu = amd_iommu_rlookup_table[devid];
1886                 if (!iommu)
1887                         continue;
1888                 dma_dom = dma_ops_domain_alloc(iommu);
1889                 if (!dma_dom)
1890                         continue;
1891                 init_unity_mappings_for_device(dma_dom, devid);
1892                 dma_dom->target_dev = devid;
1893 
1894                 attach_device(iommu, &dma_dom->domain, devid);
1895                 if (__devid != devid)
1896                         attach_device(iommu, &dma_dom->domain, __devid);
1897 
1898                 list_add_tail(&dma_dom->list, &iommu_pd_list);
1899         }
1900 }
1901 
1902 static struct dma_map_ops amd_iommu_dma_ops = {
1903         .alloc_coherent = alloc_coherent,
1904         .free_coherent = free_coherent,
1905         .map_page = map_page,
1906         .unmap_page = unmap_page,
1907         .map_sg = map_sg,
1908         .unmap_sg = unmap_sg,
1909         .dma_supported = amd_iommu_dma_supported,
1910 };
1911 
1912 /*
1913  * The function which clues the AMD IOMMU driver into dma_ops.
1914  */
1915 int __init amd_iommu_init_dma_ops(void)
1916 {
1917         struct amd_iommu *iommu;
1918         int ret;
1919 
1920         /*
1921          * first allocate a default protection domain for every IOMMU we
1922          * found in the system. Devices not assigned to any other
1923          * protection domain will be assigned to the default one.
1924          */
1925         for_each_iommu(iommu) {
1926                 iommu->default_dom = dma_ops_domain_alloc(iommu);
1927                 if (iommu->default_dom == NULL)
1928                         return -ENOMEM;
1929                 iommu->default_dom->domain.flags |= PD_DEFAULT_MASK;
1930                 ret = iommu_init_unity_mappings(iommu);
1931                 if (ret)
1932                         goto free_domains;
1933         }
1934 
1935         /*
1936          * If device isolation is enabled, pre-allocate the protection
1937          * domains for each device.
1938          */
1939         if (amd_iommu_isolate)
1940                 prealloc_protection_domains();
1941 
1942         iommu_detected = 1;
1943         force_iommu = 1;
1944         bad_dma_address = 0;
1945 #ifdef CONFIG_GART_IOMMU
1946         gart_iommu_aperture_disabled = 1;
1947         gart_iommu_aperture = 0;
1948 #endif
1949 
1950         /* Make the driver finally visible to the drivers */
1951         dma_ops = &amd_iommu_dma_ops;
1952 
1953         register_iommu(&amd_iommu_ops);
1954 
1955         bus_register_notifier(&pci_bus_type, &device_nb);
1956 
1957         amd_iommu_stats_init();
1958 
1959         return 0;
1960 
1961 free_domains:
1962 
1963         for_each_iommu(iommu) {
1964                 if (iommu->default_dom)
1965                         dma_ops_domain_free(iommu->default_dom);
1966         }
1967 
1968         return ret;
1969 }
1970 
1971 /*****************************************************************************
1972  *
1973  * The following functions belong to the exported interface of AMD IOMMU
1974  *
1975  * This interface allows access to lower level functions of the IOMMU
1976  * like protection domain handling and assignement of devices to domains
1977  * which is not possible with the dma_ops interface.
1978  *
1979  *****************************************************************************/
1980 
1981 static void cleanup_domain(struct protection_domain *domain)
1982 {
1983         unsigned long flags;
1984         u16 devid;
1985 
1986         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1987 
1988         for (devid = 0; devid <= amd_iommu_last_bdf; ++devid)
1989                 if (amd_iommu_pd_table[devid] == domain)
1990                         __detach_device(domain, devid);
1991 
1992         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1993 }
1994 
1995 static int amd_iommu_domain_init(struct iommu_domain *dom)
1996 {
1997         struct protection_domain *domain;
1998 
1999         domain = kzalloc(sizeof(*domain), GFP_KERNEL);
2000         if (!domain)
2001                 return -ENOMEM;
2002 
2003         spin_lock_init(&domain->lock);
2004         domain->mode = PAGE_MODE_3_LEVEL;
2005         domain->id = domain_id_alloc();
2006         if (!domain->id)
2007                 goto out_free;
2008         domain->pt_root = (void *)get_zeroed_page(GFP_KERNEL);
2009         if (!domain->pt_root)
2010                 goto out_free;
2011 
2012         dom->priv = domain;
2013 
2014         return 0;
2015 
2016 out_free:
2017         kfree(domain);
2018 
2019         return -ENOMEM;
2020 }
2021 
2022 static void amd_iommu_domain_destroy(struct iommu_domain *dom)
2023 {
2024         struct protection_domain *domain = dom->priv;
2025 
2026         if (!domain)
2027                 return;
2028 
2029         if (domain->dev_cnt > 0)
2030                 cleanup_domain(domain);
2031 
2032         BUG_ON(domain->dev_cnt != 0);
2033 
2034         free_pagetable(domain);
2035 
2036         domain_id_free(domain->id);
2037 
2038         kfree(domain);
2039 
2040         dom->priv = NULL;
2041 }
2042 
2043 static void amd_iommu_detach_device(struct iommu_domain *dom,
2044                                     struct device *dev)
2045 {
2046         struct protection_domain *domain = dom->priv;
2047         struct amd_iommu *iommu;
2048         struct pci_dev *pdev;
2049         u16 devid;
2050 
2051         if (dev->bus != &pci_bus_type)
2052                 return;
2053 
2054         pdev = to_pci_dev(dev);
2055 
2056         devid = calc_devid(pdev->bus->number, pdev->devfn);
2057 
2058         if (devid > 0)
2059                 detach_device(domain, devid);
2060 
2061         iommu = amd_iommu_rlookup_table[devid];
2062         if (!iommu)
2063                 return;
2064 
2065         iommu_queue_inv_dev_entry(iommu, devid);
2066         iommu_completion_wait(iommu);
2067 }
2068 
2069 static int amd_iommu_attach_device(struct iommu_domain *dom,
2070                                    struct device *dev)
2071 {
2072         struct protection_domain *domain = dom->priv;
2073         struct protection_domain *old_domain;
2074         struct amd_iommu *iommu;
2075         struct pci_dev *pdev;
2076         u16 devid;
2077 
2078         if (dev->bus != &pci_bus_type)
2079                 return -EINVAL;
2080 
2081         pdev = to_pci_dev(dev);
2082 
2083         devid = calc_devid(pdev->bus->number, pdev->devfn);
2084 
2085         if (devid >= amd_iommu_last_bdf ||
2086                         devid != amd_iommu_alias_table[devid])
2087                 return -EINVAL;
2088 
2089         iommu = amd_iommu_rlookup_table[devid];
2090         if (!iommu)
2091                 return -EINVAL;
2092 
2093         old_domain = domain_for_device(devid);
2094         if (old_domain)
2095                 detach_device(old_domain, devid);
2096 
2097         attach_device(iommu, domain, devid);
2098 
2099         iommu_completion_wait(iommu);
2100 
2101         return 0;
2102 }
2103 
2104 static int amd_iommu_map_range(struct iommu_domain *dom,
2105                                unsigned long iova, phys_addr_t paddr,
2106                                size_t size, int iommu_prot)
2107 {
2108         struct protection_domain *domain = dom->priv;
2109         unsigned long i,  npages = iommu_num_pages(paddr, size, PAGE_SIZE);
2110         int prot = 0;
2111         int ret;
2112 
2113         if (iommu_prot & IOMMU_READ)
2114                 prot |= IOMMU_PROT_IR;
2115         if (iommu_prot & IOMMU_WRITE)
2116                 prot |= IOMMU_PROT_IW;
2117 
2118         iova  &= PAGE_MASK;
2119         paddr &= PAGE_MASK;
2120 
2121         for (i = 0; i < npages; ++i) {
2122                 ret = iommu_map_page(domain, iova, paddr, prot);
2123                 if (ret)
2124                         return ret;
2125 
2126                 iova  += PAGE_SIZE;
2127                 paddr += PAGE_SIZE;
2128         }
2129 
2130         return 0;
2131 }
2132 
2133 static void amd_iommu_unmap_range(struct iommu_domain *dom,
2134                                   unsigned long iova, size_t size)
2135 {
2136 
2137         struct protection_domain *domain = dom->priv;
2138         unsigned long i,  npages = iommu_num_pages(iova, size, PAGE_SIZE);
2139 
2140         iova  &= PAGE_MASK;
2141 
2142         for (i = 0; i < npages; ++i) {
2143                 iommu_unmap_page(domain, iova);
2144                 iova  += PAGE_SIZE;
2145         }
2146 
2147         iommu_flush_domain(domain->id);
2148 }
2149 
2150 static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom,
2151                                           unsigned long iova)
2152 {
2153         struct protection_domain *domain = dom->priv;
2154         unsigned long offset = iova & ~PAGE_MASK;
2155         phys_addr_t paddr;
2156         u64 *pte;
2157 
2158         pte = &domain->pt_root[IOMMU_PTE_L2_INDEX(iova)];
2159 
2160         if (!IOMMU_PTE_PRESENT(*pte))
2161                 return 0;
2162 
2163         pte = IOMMU_PTE_PAGE(*pte);
2164         pte = &pte[IOMMU_PTE_L1_INDEX(iova)];
2165 
2166         if (!IOMMU_PTE_PRESENT(*pte))
2167                 return 0;
2168 
2169         pte = IOMMU_PTE_PAGE(*pte);
2170         pte = &pte[IOMMU_PTE_L0_INDEX(iova)];
2171 
2172         if (!IOMMU_PTE_PRESENT(*pte))
2173                 return 0;
2174 
2175         paddr  = *pte & IOMMU_PAGE_MASK;
2176         paddr |= offset;
2177 
2178         return paddr;
2179 }
2180 
2181 static int amd_iommu_domain_has_cap(struct iommu_domain *domain,
2182                                     unsigned long cap)
2183 {
2184         return 0;
2185 }
2186 
2187 static struct iommu_ops amd_iommu_ops = {
2188         .domain_init = amd_iommu_domain_init,
2189         .domain_destroy = amd_iommu_domain_destroy,
2190         .attach_dev = amd_iommu_attach_device,
2191         .detach_dev = amd_iommu_detach_device,
2192         .map = amd_iommu_map_range,
2193         .unmap = amd_iommu_unmap_range,
2194         .iova_to_phys = amd_iommu_iova_to_phys,
2195         .domain_has_cap = amd_iommu_domain_has_cap,
2196 };
2197 
2198 
  This page was automatically generated by the LXR engine.