]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/x86/kernel/amd_iommu.c
Merge branch 'x86/iommu' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux...
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / amd_iommu.c
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/scatterlist.h>
24 #include <linux/iommu-helper.h>
25 #include <asm/proto.h>
26 #include <asm/iommu.h>
27 #include <asm/amd_iommu_types.h>
28 #include <asm/amd_iommu.h>
29
30 #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28))
31
32 #define EXIT_LOOP_COUNT 10000000
33
34 static DEFINE_RWLOCK(amd_iommu_devtable_lock);
35
36 /*
37  * general struct to manage commands send to an IOMMU
38  */
39 struct iommu_cmd {
40         u32 data[4];
41 };
42
43 static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
44                              struct unity_map_entry *e);
45
46 /* returns !0 if the IOMMU is caching non-present entries in its TLB */
47 static int iommu_has_npcache(struct amd_iommu *iommu)
48 {
49         return iommu->cap & IOMMU_CAP_NPCACHE;
50 }
51
52 /****************************************************************************
53  *
54  * IOMMU command queuing functions
55  *
56  ****************************************************************************/
57
58 /*
59  * Writes the command to the IOMMUs command buffer and informs the
60  * hardware about the new command. Must be called with iommu->lock held.
61  */
62 static int __iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd)
63 {
64         u32 tail, head;
65         u8 *target;
66
67         tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
68         target = (iommu->cmd_buf + tail);
69         memcpy_toio(target, cmd, sizeof(*cmd));
70         tail = (tail + sizeof(*cmd)) % iommu->cmd_buf_size;
71         head = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
72         if (tail == head)
73                 return -ENOMEM;
74         writel(tail, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
75
76         return 0;
77 }
78
79 /*
80  * General queuing function for commands. Takes iommu->lock and calls
81  * __iommu_queue_command().
82  */
83 static int iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd)
84 {
85         unsigned long flags;
86         int ret;
87
88         spin_lock_irqsave(&iommu->lock, flags);
89         ret = __iommu_queue_command(iommu, cmd);
90         spin_unlock_irqrestore(&iommu->lock, flags);
91
92         return ret;
93 }
94
95 /*
96  * This function is called whenever we need to ensure that the IOMMU has
97  * completed execution of all commands we sent. It sends a
98  * COMPLETION_WAIT command and waits for it to finish. The IOMMU informs
99  * us about that by writing a value to a physical address we pass with
100  * the command.
101  */
102 static int iommu_completion_wait(struct amd_iommu *iommu)
103 {
104         int ret;
105         struct iommu_cmd cmd;
106         volatile u64 ready = 0;
107         unsigned long ready_phys = virt_to_phys(&ready);
108         unsigned long i = 0;
109
110         memset(&cmd, 0, sizeof(cmd));
111         cmd.data[0] = LOW_U32(ready_phys) | CMD_COMPL_WAIT_STORE_MASK;
112         cmd.data[1] = upper_32_bits(ready_phys);
113         cmd.data[2] = 1; /* value written to 'ready' */
114         CMD_SET_TYPE(&cmd, CMD_COMPL_WAIT);
115
116         iommu->need_sync = 0;
117
118         ret = iommu_queue_command(iommu, &cmd);
119
120         if (ret)
121                 return ret;
122
123         while (!ready && (i < EXIT_LOOP_COUNT)) {
124                 ++i;
125                 cpu_relax();
126         }
127
128         if (unlikely((i == EXIT_LOOP_COUNT) && printk_ratelimit()))
129                 printk(KERN_WARNING "AMD IOMMU: Completion wait loop failed\n");
130
131         return 0;
132 }
133
134 /*
135  * Command send function for invalidating a device table entry
136  */
137 static int iommu_queue_inv_dev_entry(struct amd_iommu *iommu, u16 devid)
138 {
139         struct iommu_cmd cmd;
140
141         BUG_ON(iommu == NULL);
142
143         memset(&cmd, 0, sizeof(cmd));
144         CMD_SET_TYPE(&cmd, CMD_INV_DEV_ENTRY);
145         cmd.data[0] = devid;
146
147         iommu->need_sync = 1;
148
149         return iommu_queue_command(iommu, &cmd);
150 }
151
152 /*
153  * Generic command send function for invalidaing TLB entries
154  */
155 static int iommu_queue_inv_iommu_pages(struct amd_iommu *iommu,
156                 u64 address, u16 domid, int pde, int s)
157 {
158         struct iommu_cmd cmd;
159
160         memset(&cmd, 0, sizeof(cmd));
161         address &= PAGE_MASK;
162         CMD_SET_TYPE(&cmd, CMD_INV_IOMMU_PAGES);
163         cmd.data[1] |= domid;
164         cmd.data[2] = LOW_U32(address);
165         cmd.data[3] = upper_32_bits(address);
166         if (s) /* size bit - we flush more than one 4kb page */
167                 cmd.data[2] |= CMD_INV_IOMMU_PAGES_SIZE_MASK;
168         if (pde) /* PDE bit - we wan't flush everything not only the PTEs */
169                 cmd.data[2] |= CMD_INV_IOMMU_PAGES_PDE_MASK;
170
171         iommu->need_sync = 1;
172
173         return iommu_queue_command(iommu, &cmd);
174 }
175
176 /*
177  * TLB invalidation function which is called from the mapping functions.
178  * It invalidates a single PTE if the range to flush is within a single
179  * page. Otherwise it flushes the whole TLB of the IOMMU.
180  */
181 static int iommu_flush_pages(struct amd_iommu *iommu, u16 domid,
182                 u64 address, size_t size)
183 {
184         int s = 0;
185         unsigned pages = iommu_num_pages(address, size);
186
187         address &= PAGE_MASK;
188
189         if (pages > 1) {
190                 /*
191                  * If we have to flush more than one page, flush all
192                  * TLB entries for this domain
193                  */
194                 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
195                 s = 1;
196         }
197
198         iommu_queue_inv_iommu_pages(iommu, address, domid, 0, s);
199
200         return 0;
201 }
202
203 /****************************************************************************
204  *
205  * The functions below are used the create the page table mappings for
206  * unity mapped regions.
207  *
208  ****************************************************************************/
209
210 /*
211  * Generic mapping functions. It maps a physical address into a DMA
212  * address space. It allocates the page table pages if necessary.
213  * In the future it can be extended to a generic mapping function
214  * supporting all features of AMD IOMMU page tables like level skipping
215  * and full 64 bit address spaces.
216  */
217 static int iommu_map(struct protection_domain *dom,
218                      unsigned long bus_addr,
219                      unsigned long phys_addr,
220                      int prot)
221 {
222         u64 __pte, *pte, *page;
223
224         bus_addr  = PAGE_ALIGN(bus_addr);
225         phys_addr = PAGE_ALIGN(bus_addr);
226
227         /* only support 512GB address spaces for now */
228         if (bus_addr > IOMMU_MAP_SIZE_L3 || !(prot & IOMMU_PROT_MASK))
229                 return -EINVAL;
230
231         pte = &dom->pt_root[IOMMU_PTE_L2_INDEX(bus_addr)];
232
233         if (!IOMMU_PTE_PRESENT(*pte)) {
234                 page = (u64 *)get_zeroed_page(GFP_KERNEL);
235                 if (!page)
236                         return -ENOMEM;
237                 *pte = IOMMU_L2_PDE(virt_to_phys(page));
238         }
239
240         pte = IOMMU_PTE_PAGE(*pte);
241         pte = &pte[IOMMU_PTE_L1_INDEX(bus_addr)];
242
243         if (!IOMMU_PTE_PRESENT(*pte)) {
244                 page = (u64 *)get_zeroed_page(GFP_KERNEL);
245                 if (!page)
246                         return -ENOMEM;
247                 *pte = IOMMU_L1_PDE(virt_to_phys(page));
248         }
249
250         pte = IOMMU_PTE_PAGE(*pte);
251         pte = &pte[IOMMU_PTE_L0_INDEX(bus_addr)];
252
253         if (IOMMU_PTE_PRESENT(*pte))
254                 return -EBUSY;
255
256         __pte = phys_addr | IOMMU_PTE_P;
257         if (prot & IOMMU_PROT_IR)
258                 __pte |= IOMMU_PTE_IR;
259         if (prot & IOMMU_PROT_IW)
260                 __pte |= IOMMU_PTE_IW;
261
262         *pte = __pte;
263
264         return 0;
265 }
266
267 /*
268  * This function checks if a specific unity mapping entry is needed for
269  * this specific IOMMU.
270  */
271 static int iommu_for_unity_map(struct amd_iommu *iommu,
272                                struct unity_map_entry *entry)
273 {
274         u16 bdf, i;
275
276         for (i = entry->devid_start; i <= entry->devid_end; ++i) {
277                 bdf = amd_iommu_alias_table[i];
278                 if (amd_iommu_rlookup_table[bdf] == iommu)
279                         return 1;
280         }
281
282         return 0;
283 }
284
285 /*
286  * Init the unity mappings for a specific IOMMU in the system
287  *
288  * Basically iterates over all unity mapping entries and applies them to
289  * the default domain DMA of that IOMMU if necessary.
290  */
291 static int iommu_init_unity_mappings(struct amd_iommu *iommu)
292 {
293         struct unity_map_entry *entry;
294         int ret;
295
296         list_for_each_entry(entry, &amd_iommu_unity_map, list) {
297                 if (!iommu_for_unity_map(iommu, entry))
298                         continue;
299                 ret = dma_ops_unity_map(iommu->default_dom, entry);
300                 if (ret)
301                         return ret;
302         }
303
304         return 0;
305 }
306
307 /*
308  * This function actually applies the mapping to the page table of the
309  * dma_ops domain.
310  */
311 static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
312                              struct unity_map_entry *e)
313 {
314         u64 addr;
315         int ret;
316
317         for (addr = e->address_start; addr < e->address_end;
318              addr += PAGE_SIZE) {
319                 ret = iommu_map(&dma_dom->domain, addr, addr, e->prot);
320                 if (ret)
321                         return ret;
322                 /*
323                  * if unity mapping is in aperture range mark the page
324                  * as allocated in the aperture
325                  */
326                 if (addr < dma_dom->aperture_size)
327                         __set_bit(addr >> PAGE_SHIFT, dma_dom->bitmap);
328         }
329
330         return 0;
331 }
332
333 /*
334  * Inits the unity mappings required for a specific device
335  */
336 static int init_unity_mappings_for_device(struct dma_ops_domain *dma_dom,
337                                           u16 devid)
338 {
339         struct unity_map_entry *e;
340         int ret;
341
342         list_for_each_entry(e, &amd_iommu_unity_map, list) {
343                 if (!(devid >= e->devid_start && devid <= e->devid_end))
344                         continue;
345                 ret = dma_ops_unity_map(dma_dom, e);
346                 if (ret)
347                         return ret;
348         }
349
350         return 0;
351 }
352
353 /****************************************************************************
354  *
355  * The next functions belong to the address allocator for the dma_ops
356  * interface functions. They work like the allocators in the other IOMMU
357  * drivers. Its basically a bitmap which marks the allocated pages in
358  * the aperture. Maybe it could be enhanced in the future to a more
359  * efficient allocator.
360  *
361  ****************************************************************************/
362 static unsigned long dma_mask_to_pages(unsigned long mask)
363 {
364         return (mask >> PAGE_SHIFT) +
365                 (PAGE_ALIGN(mask & ~PAGE_MASK) >> PAGE_SHIFT);
366 }
367
368 /*
369  * The address allocator core function.
370  *
371  * called with domain->lock held
372  */
373 static unsigned long dma_ops_alloc_addresses(struct device *dev,
374                                              struct dma_ops_domain *dom,
375                                              unsigned int pages)
376 {
377         unsigned long limit = dma_mask_to_pages(*dev->dma_mask);
378         unsigned long address;
379         unsigned long size = dom->aperture_size >> PAGE_SHIFT;
380         unsigned long boundary_size;
381
382         boundary_size = ALIGN(dma_get_seg_boundary(dev) + 1,
383                         PAGE_SIZE) >> PAGE_SHIFT;
384         limit = limit < size ? limit : size;
385
386         if (dom->next_bit >= limit)
387                 dom->next_bit = 0;
388
389         address = iommu_area_alloc(dom->bitmap, limit, dom->next_bit, pages,
390                         0 , boundary_size, 0);
391         if (address == -1)
392                 address = iommu_area_alloc(dom->bitmap, limit, 0, pages,
393                                 0, boundary_size, 0);
394
395         if (likely(address != -1)) {
396                 dom->next_bit = address + pages;
397                 address <<= PAGE_SHIFT;
398         } else
399                 address = bad_dma_address;
400
401         WARN_ON((address + (PAGE_SIZE*pages)) > dom->aperture_size);
402
403         return address;
404 }
405
406 /*
407  * The address free function.
408  *
409  * called with domain->lock held
410  */
411 static void dma_ops_free_addresses(struct dma_ops_domain *dom,
412                                    unsigned long address,
413                                    unsigned int pages)
414 {
415         address >>= PAGE_SHIFT;
416         iommu_area_free(dom->bitmap, address, pages);
417 }
418
419 /****************************************************************************
420  *
421  * The next functions belong to the domain allocation. A domain is
422  * allocated for every IOMMU as the default domain. If device isolation
423  * is enabled, every device get its own domain. The most important thing
424  * about domains is the page table mapping the DMA address space they
425  * contain.
426  *
427  ****************************************************************************/
428
429 static u16 domain_id_alloc(void)
430 {
431         unsigned long flags;
432         int id;
433
434         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
435         id = find_first_zero_bit(amd_iommu_pd_alloc_bitmap, MAX_DOMAIN_ID);
436         BUG_ON(id == 0);
437         if (id > 0 && id < MAX_DOMAIN_ID)
438                 __set_bit(id, amd_iommu_pd_alloc_bitmap);
439         else
440                 id = 0;
441         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
442
443         return id;
444 }
445
446 /*
447  * Used to reserve address ranges in the aperture (e.g. for exclusion
448  * ranges.
449  */
450 static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
451                                       unsigned long start_page,
452                                       unsigned int pages)
453 {
454         unsigned int last_page = dom->aperture_size >> PAGE_SHIFT;
455
456         if (start_page + pages > last_page)
457                 pages = last_page - start_page;
458
459         set_bit_string(dom->bitmap, start_page, pages);
460 }
461
462 static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom)
463 {
464         int i, j;
465         u64 *p1, *p2, *p3;
466
467         p1 = dma_dom->domain.pt_root;
468
469         if (!p1)
470                 return;
471
472         for (i = 0; i < 512; ++i) {
473                 if (!IOMMU_PTE_PRESENT(p1[i]))
474                         continue;
475
476                 p2 = IOMMU_PTE_PAGE(p1[i]);
477                 for (j = 0; j < 512; ++i) {
478                         if (!IOMMU_PTE_PRESENT(p2[j]))
479                                 continue;
480                         p3 = IOMMU_PTE_PAGE(p2[j]);
481                         free_page((unsigned long)p3);
482                 }
483
484                 free_page((unsigned long)p2);
485         }
486
487         free_page((unsigned long)p1);
488 }
489
490 /*
491  * Free a domain, only used if something went wrong in the
492  * allocation path and we need to free an already allocated page table
493  */
494 static void dma_ops_domain_free(struct dma_ops_domain *dom)
495 {
496         if (!dom)
497                 return;
498
499         dma_ops_free_pagetable(dom);
500
501         kfree(dom->pte_pages);
502
503         kfree(dom->bitmap);
504
505         kfree(dom);
506 }
507
508 /*
509  * Allocates a new protection domain usable for the dma_ops functions.
510  * It also intializes the page table and the address allocator data
511  * structures required for the dma_ops interface
512  */
513 static struct dma_ops_domain *dma_ops_domain_alloc(struct amd_iommu *iommu,
514                                                    unsigned order)
515 {
516         struct dma_ops_domain *dma_dom;
517         unsigned i, num_pte_pages;
518         u64 *l2_pde;
519         u64 address;
520
521         /*
522          * Currently the DMA aperture must be between 32 MB and 1GB in size
523          */
524         if ((order < 25) || (order > 30))
525                 return NULL;
526
527         dma_dom = kzalloc(sizeof(struct dma_ops_domain), GFP_KERNEL);
528         if (!dma_dom)
529                 return NULL;
530
531         spin_lock_init(&dma_dom->domain.lock);
532
533         dma_dom->domain.id = domain_id_alloc();
534         if (dma_dom->domain.id == 0)
535                 goto free_dma_dom;
536         dma_dom->domain.mode = PAGE_MODE_3_LEVEL;
537         dma_dom->domain.pt_root = (void *)get_zeroed_page(GFP_KERNEL);
538         dma_dom->domain.priv = dma_dom;
539         if (!dma_dom->domain.pt_root)
540                 goto free_dma_dom;
541         dma_dom->aperture_size = (1ULL << order);
542         dma_dom->bitmap = kzalloc(dma_dom->aperture_size / (PAGE_SIZE * 8),
543                                   GFP_KERNEL);
544         if (!dma_dom->bitmap)
545                 goto free_dma_dom;
546         /*
547          * mark the first page as allocated so we never return 0 as
548          * a valid dma-address. So we can use 0 as error value
549          */
550         dma_dom->bitmap[0] = 1;
551         dma_dom->next_bit = 0;
552
553         /* Intialize the exclusion range if necessary */
554         if (iommu->exclusion_start &&
555             iommu->exclusion_start < dma_dom->aperture_size) {
556                 unsigned long startpage = iommu->exclusion_start >> PAGE_SHIFT;
557                 int pages = iommu_num_pages(iommu->exclusion_start,
558                                             iommu->exclusion_length);
559                 dma_ops_reserve_addresses(dma_dom, startpage, pages);
560         }
561
562         /*
563          * At the last step, build the page tables so we don't need to
564          * allocate page table pages in the dma_ops mapping/unmapping
565          * path.
566          */
567         num_pte_pages = dma_dom->aperture_size / (PAGE_SIZE * 512);
568         dma_dom->pte_pages = kzalloc(num_pte_pages * sizeof(void *),
569                         GFP_KERNEL);
570         if (!dma_dom->pte_pages)
571                 goto free_dma_dom;
572
573         l2_pde = (u64 *)get_zeroed_page(GFP_KERNEL);
574         if (l2_pde == NULL)
575                 goto free_dma_dom;
576
577         dma_dom->domain.pt_root[0] = IOMMU_L2_PDE(virt_to_phys(l2_pde));
578
579         for (i = 0; i < num_pte_pages; ++i) {
580                 dma_dom->pte_pages[i] = (u64 *)get_zeroed_page(GFP_KERNEL);
581                 if (!dma_dom->pte_pages[i])
582                         goto free_dma_dom;
583                 address = virt_to_phys(dma_dom->pte_pages[i]);
584                 l2_pde[i] = IOMMU_L1_PDE(address);
585         }
586
587         return dma_dom;
588
589 free_dma_dom:
590         dma_ops_domain_free(dma_dom);
591
592         return NULL;
593 }
594
595 /*
596  * Find out the protection domain structure for a given PCI device. This
597  * will give us the pointer to the page table root for example.
598  */
599 static struct protection_domain *domain_for_device(u16 devid)
600 {
601         struct protection_domain *dom;
602         unsigned long flags;
603
604         read_lock_irqsave(&amd_iommu_devtable_lock, flags);
605         dom = amd_iommu_pd_table[devid];
606         read_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
607
608         return dom;
609 }
610
611 /*
612  * If a device is not yet associated with a domain, this function does
613  * assigns it visible for the hardware
614  */
615 static void set_device_domain(struct amd_iommu *iommu,
616                               struct protection_domain *domain,
617                               u16 devid)
618 {
619         unsigned long flags;
620
621         u64 pte_root = virt_to_phys(domain->pt_root);
622
623         pte_root |= (domain->mode & 0x07) << 9;
624         pte_root |= IOMMU_PTE_IR | IOMMU_PTE_IW | IOMMU_PTE_P | 2;
625
626         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
627         amd_iommu_dev_table[devid].data[0] = pte_root;
628         amd_iommu_dev_table[devid].data[1] = pte_root >> 32;
629         amd_iommu_dev_table[devid].data[2] = domain->id;
630
631         amd_iommu_pd_table[devid] = domain;
632         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
633
634         iommu_queue_inv_dev_entry(iommu, devid);
635
636         iommu->need_sync = 1;
637 }
638
639 /*****************************************************************************
640  *
641  * The next functions belong to the dma_ops mapping/unmapping code.
642  *
643  *****************************************************************************/
644
645 /*
646  * In the dma_ops path we only have the struct device. This function
647  * finds the corresponding IOMMU, the protection domain and the
648  * requestor id for a given device.
649  * If the device is not yet associated with a domain this is also done
650  * in this function.
651  */
652 static int get_device_resources(struct device *dev,
653                                 struct amd_iommu **iommu,
654                                 struct protection_domain **domain,
655                                 u16 *bdf)
656 {
657         struct dma_ops_domain *dma_dom;
658         struct pci_dev *pcidev;
659         u16 _bdf;
660
661         BUG_ON(!dev || dev->bus != &pci_bus_type || !dev->dma_mask);
662
663         pcidev = to_pci_dev(dev);
664         _bdf = calc_devid(pcidev->bus->number, pcidev->devfn);
665
666         /* device not translated by any IOMMU in the system? */
667         if (_bdf > amd_iommu_last_bdf) {
668                 *iommu = NULL;
669                 *domain = NULL;
670                 *bdf = 0xffff;
671                 return 0;
672         }
673
674         *bdf = amd_iommu_alias_table[_bdf];
675
676         *iommu = amd_iommu_rlookup_table[*bdf];
677         if (*iommu == NULL)
678                 return 0;
679         dma_dom = (*iommu)->default_dom;
680         *domain = domain_for_device(*bdf);
681         if (*domain == NULL) {
682                 *domain = &dma_dom->domain;
683                 set_device_domain(*iommu, *domain, *bdf);
684                 printk(KERN_INFO "AMD IOMMU: Using protection domain %d for "
685                                 "device ", (*domain)->id);
686                 print_devid(_bdf, 1);
687         }
688
689         return 1;
690 }
691
692 /*
693  * This is the generic map function. It maps one 4kb page at paddr to
694  * the given address in the DMA address space for the domain.
695  */
696 static dma_addr_t dma_ops_domain_map(struct amd_iommu *iommu,
697                                      struct dma_ops_domain *dom,
698                                      unsigned long address,
699                                      phys_addr_t paddr,
700                                      int direction)
701 {
702         u64 *pte, __pte;
703
704         WARN_ON(address > dom->aperture_size);
705
706         paddr &= PAGE_MASK;
707
708         pte  = dom->pte_pages[IOMMU_PTE_L1_INDEX(address)];
709         pte += IOMMU_PTE_L0_INDEX(address);
710
711         __pte = paddr | IOMMU_PTE_P | IOMMU_PTE_FC;
712
713         if (direction == DMA_TO_DEVICE)
714                 __pte |= IOMMU_PTE_IR;
715         else if (direction == DMA_FROM_DEVICE)
716                 __pte |= IOMMU_PTE_IW;
717         else if (direction == DMA_BIDIRECTIONAL)
718                 __pte |= IOMMU_PTE_IR | IOMMU_PTE_IW;
719
720         WARN_ON(*pte);
721
722         *pte = __pte;
723
724         return (dma_addr_t)address;
725 }
726
727 /*
728  * The generic unmapping function for on page in the DMA address space.
729  */
730 static void dma_ops_domain_unmap(struct amd_iommu *iommu,
731                                  struct dma_ops_domain *dom,
732                                  unsigned long address)
733 {
734         u64 *pte;
735
736         if (address >= dom->aperture_size)
737                 return;
738
739         WARN_ON(address & 0xfffULL || address > dom->aperture_size);
740
741         pte  = dom->pte_pages[IOMMU_PTE_L1_INDEX(address)];
742         pte += IOMMU_PTE_L0_INDEX(address);
743
744         WARN_ON(!*pte);
745
746         *pte = 0ULL;
747 }
748
749 /*
750  * This function contains common code for mapping of a physically
751  * contiguous memory region into DMA address space. It is uses by all
752  * mapping functions provided by this IOMMU driver.
753  * Must be called with the domain lock held.
754  */
755 static dma_addr_t __map_single(struct device *dev,
756                                struct amd_iommu *iommu,
757                                struct dma_ops_domain *dma_dom,
758                                phys_addr_t paddr,
759                                size_t size,
760                                int dir)
761 {
762         dma_addr_t offset = paddr & ~PAGE_MASK;
763         dma_addr_t address, start;
764         unsigned int pages;
765         int i;
766
767         pages = iommu_num_pages(paddr, size);
768         paddr &= PAGE_MASK;
769
770         address = dma_ops_alloc_addresses(dev, dma_dom, pages);
771         if (unlikely(address == bad_dma_address))
772                 goto out;
773
774         start = address;
775         for (i = 0; i < pages; ++i) {
776                 dma_ops_domain_map(iommu, dma_dom, start, paddr, dir);
777                 paddr += PAGE_SIZE;
778                 start += PAGE_SIZE;
779         }
780         address += offset;
781
782 out:
783         return address;
784 }
785
786 /*
787  * Does the reverse of the __map_single function. Must be called with
788  * the domain lock held too
789  */
790 static void __unmap_single(struct amd_iommu *iommu,
791                            struct dma_ops_domain *dma_dom,
792                            dma_addr_t dma_addr,
793                            size_t size,
794                            int dir)
795 {
796         dma_addr_t i, start;
797         unsigned int pages;
798
799         if ((dma_addr == 0) || (dma_addr + size > dma_dom->aperture_size))
800                 return;
801
802         pages = iommu_num_pages(dma_addr, size);
803         dma_addr &= PAGE_MASK;
804         start = dma_addr;
805
806         for (i = 0; i < pages; ++i) {
807                 dma_ops_domain_unmap(iommu, dma_dom, start);
808                 start += PAGE_SIZE;
809         }
810
811         dma_ops_free_addresses(dma_dom, dma_addr, pages);
812 }
813
814 /*
815  * The exported map_single function for dma_ops.
816  */
817 static dma_addr_t map_single(struct device *dev, phys_addr_t paddr,
818                              size_t size, int dir)
819 {
820         unsigned long flags;
821         struct amd_iommu *iommu;
822         struct protection_domain *domain;
823         u16 devid;
824         dma_addr_t addr;
825
826         get_device_resources(dev, &iommu, &domain, &devid);
827
828         if (iommu == NULL || domain == NULL)
829                 /* device not handled by any AMD IOMMU */
830                 return (dma_addr_t)paddr;
831
832         spin_lock_irqsave(&domain->lock, flags);
833         addr = __map_single(dev, iommu, domain->priv, paddr, size, dir);
834         if (addr == bad_dma_address)
835                 goto out;
836
837         if (iommu_has_npcache(iommu))
838                 iommu_flush_pages(iommu, domain->id, addr, size);
839
840         if (iommu->need_sync)
841                 iommu_completion_wait(iommu);
842
843 out:
844         spin_unlock_irqrestore(&domain->lock, flags);
845
846         return addr;
847 }
848
849 /*
850  * The exported unmap_single function for dma_ops.
851  */
852 static void unmap_single(struct device *dev, dma_addr_t dma_addr,
853                          size_t size, int dir)
854 {
855         unsigned long flags;
856         struct amd_iommu *iommu;
857         struct protection_domain *domain;
858         u16 devid;
859
860         if (!get_device_resources(dev, &iommu, &domain, &devid))
861                 /* device not handled by any AMD IOMMU */
862                 return;
863
864         spin_lock_irqsave(&domain->lock, flags);
865
866         __unmap_single(iommu, domain->priv, dma_addr, size, dir);
867
868         iommu_flush_pages(iommu, domain->id, dma_addr, size);
869
870         if (iommu->need_sync)
871                 iommu_completion_wait(iommu);
872
873         spin_unlock_irqrestore(&domain->lock, flags);
874 }
875
876 /*
877  * This is a special map_sg function which is used if we should map a
878  * device which is not handled by an AMD IOMMU in the system.
879  */
880 static int map_sg_no_iommu(struct device *dev, struct scatterlist *sglist,
881                            int nelems, int dir)
882 {
883         struct scatterlist *s;
884         int i;
885
886         for_each_sg(sglist, s, nelems, i) {
887                 s->dma_address = (dma_addr_t)sg_phys(s);
888                 s->dma_length  = s->length;
889         }
890
891         return nelems;
892 }
893
894 /*
895  * The exported map_sg function for dma_ops (handles scatter-gather
896  * lists).
897  */
898 static int map_sg(struct device *dev, struct scatterlist *sglist,
899                   int nelems, int dir)
900 {
901         unsigned long flags;
902         struct amd_iommu *iommu;
903         struct protection_domain *domain;
904         u16 devid;
905         int i;
906         struct scatterlist *s;
907         phys_addr_t paddr;
908         int mapped_elems = 0;
909
910         get_device_resources(dev, &iommu, &domain, &devid);
911
912         if (!iommu || !domain)
913                 return map_sg_no_iommu(dev, sglist, nelems, dir);
914
915         spin_lock_irqsave(&domain->lock, flags);
916
917         for_each_sg(sglist, s, nelems, i) {
918                 paddr = sg_phys(s);
919
920                 s->dma_address = __map_single(dev, iommu, domain->priv,
921                                               paddr, s->length, dir);
922
923                 if (s->dma_address) {
924                         s->dma_length = s->length;
925                         mapped_elems++;
926                 } else
927                         goto unmap;
928                 if (iommu_has_npcache(iommu))
929                         iommu_flush_pages(iommu, domain->id, s->dma_address,
930                                           s->dma_length);
931         }
932
933         if (iommu->need_sync)
934                 iommu_completion_wait(iommu);
935
936 out:
937         spin_unlock_irqrestore(&domain->lock, flags);
938
939         return mapped_elems;
940 unmap:
941         for_each_sg(sglist, s, mapped_elems, i) {
942                 if (s->dma_address)
943                         __unmap_single(iommu, domain->priv, s->dma_address,
944                                        s->dma_length, dir);
945                 s->dma_address = s->dma_length = 0;
946         }
947
948         mapped_elems = 0;
949
950         goto out;
951 }
952
953 /*
954  * The exported map_sg function for dma_ops (handles scatter-gather
955  * lists).
956  */
957 static void unmap_sg(struct device *dev, struct scatterlist *sglist,
958                      int nelems, int dir)
959 {
960         unsigned long flags;
961         struct amd_iommu *iommu;
962         struct protection_domain *domain;
963         struct scatterlist *s;
964         u16 devid;
965         int i;
966
967         if (!get_device_resources(dev, &iommu, &domain, &devid))
968                 return;
969
970         spin_lock_irqsave(&domain->lock, flags);
971
972         for_each_sg(sglist, s, nelems, i) {
973                 __unmap_single(iommu, domain->priv, s->dma_address,
974                                s->dma_length, dir);
975                 iommu_flush_pages(iommu, domain->id, s->dma_address,
976                                   s->dma_length);
977                 s->dma_address = s->dma_length = 0;
978         }
979
980         if (iommu->need_sync)
981                 iommu_completion_wait(iommu);
982
983         spin_unlock_irqrestore(&domain->lock, flags);
984 }
985
986 /*
987  * The exported alloc_coherent function for dma_ops.
988  */
989 static void *alloc_coherent(struct device *dev, size_t size,
990                             dma_addr_t *dma_addr, gfp_t flag)
991 {
992         unsigned long flags;
993         void *virt_addr;
994         struct amd_iommu *iommu;
995         struct protection_domain *domain;
996         u16 devid;
997         phys_addr_t paddr;
998
999         virt_addr = (void *)__get_free_pages(flag, get_order(size));
1000         if (!virt_addr)
1001                 return 0;
1002
1003         memset(virt_addr, 0, size);
1004         paddr = virt_to_phys(virt_addr);
1005
1006         get_device_resources(dev, &iommu, &domain, &devid);
1007
1008         if (!iommu || !domain) {
1009                 *dma_addr = (dma_addr_t)paddr;
1010                 return virt_addr;
1011         }
1012
1013         spin_lock_irqsave(&domain->lock, flags);
1014
1015         *dma_addr = __map_single(dev, iommu, domain->priv, paddr,
1016                                  size, DMA_BIDIRECTIONAL);
1017
1018         if (*dma_addr == bad_dma_address) {
1019                 free_pages((unsigned long)virt_addr, get_order(size));
1020                 virt_addr = NULL;
1021                 goto out;
1022         }
1023
1024         if (iommu_has_npcache(iommu))
1025                 iommu_flush_pages(iommu, domain->id, *dma_addr, size);
1026
1027         if (iommu->need_sync)
1028                 iommu_completion_wait(iommu);
1029
1030 out:
1031         spin_unlock_irqrestore(&domain->lock, flags);
1032
1033         return virt_addr;
1034 }
1035
1036 /*
1037  * The exported free_coherent function for dma_ops.
1038  * FIXME: fix the generic x86 DMA layer so that it actually calls that
1039  *        function.
1040  */
1041 static void free_coherent(struct device *dev, size_t size,
1042                           void *virt_addr, dma_addr_t dma_addr)
1043 {
1044         unsigned long flags;
1045         struct amd_iommu *iommu;
1046         struct protection_domain *domain;
1047         u16 devid;
1048
1049         get_device_resources(dev, &iommu, &domain, &devid);
1050
1051         if (!iommu || !domain)
1052                 goto free_mem;
1053
1054         spin_lock_irqsave(&domain->lock, flags);
1055
1056         __unmap_single(iommu, domain->priv, dma_addr, size, DMA_BIDIRECTIONAL);
1057         iommu_flush_pages(iommu, domain->id, dma_addr, size);
1058
1059         if (iommu->need_sync)
1060                 iommu_completion_wait(iommu);
1061
1062         spin_unlock_irqrestore(&domain->lock, flags);
1063
1064 free_mem:
1065         free_pages((unsigned long)virt_addr, get_order(size));
1066 }
1067
1068 /*
1069  * The function for pre-allocating protection domains.
1070  *
1071  * If the driver core informs the DMA layer if a driver grabs a device
1072  * we don't need to preallocate the protection domains anymore.
1073  * For now we have to.
1074  */
1075 void prealloc_protection_domains(void)
1076 {
1077         struct pci_dev *dev = NULL;
1078         struct dma_ops_domain *dma_dom;
1079         struct amd_iommu *iommu;
1080         int order = amd_iommu_aperture_order;
1081         u16 devid;
1082
1083         while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
1084                 devid = (dev->bus->number << 8) | dev->devfn;
1085                 if (devid > amd_iommu_last_bdf)
1086                         continue;
1087                 devid = amd_iommu_alias_table[devid];
1088                 if (domain_for_device(devid))
1089                         continue;
1090                 iommu = amd_iommu_rlookup_table[devid];
1091                 if (!iommu)
1092                         continue;
1093                 dma_dom = dma_ops_domain_alloc(iommu, order);
1094                 if (!dma_dom)
1095                         continue;
1096                 init_unity_mappings_for_device(dma_dom, devid);
1097                 set_device_domain(iommu, &dma_dom->domain, devid);
1098                 printk(KERN_INFO "AMD IOMMU: Allocated domain %d for device ",
1099                        dma_dom->domain.id);
1100                 print_devid(devid, 1);
1101         }
1102 }
1103
1104 static struct dma_mapping_ops amd_iommu_dma_ops = {
1105         .alloc_coherent = alloc_coherent,
1106         .free_coherent = free_coherent,
1107         .map_single = map_single,
1108         .unmap_single = unmap_single,
1109         .map_sg = map_sg,
1110         .unmap_sg = unmap_sg,
1111 };
1112
1113 /*
1114  * The function which clues the AMD IOMMU driver into dma_ops.
1115  */
1116 int __init amd_iommu_init_dma_ops(void)
1117 {
1118         struct amd_iommu *iommu;
1119         int order = amd_iommu_aperture_order;
1120         int ret;
1121
1122         /*
1123          * first allocate a default protection domain for every IOMMU we
1124          * found in the system. Devices not assigned to any other
1125          * protection domain will be assigned to the default one.
1126          */
1127         list_for_each_entry(iommu, &amd_iommu_list, list) {
1128                 iommu->default_dom = dma_ops_domain_alloc(iommu, order);
1129                 if (iommu->default_dom == NULL)
1130                         return -ENOMEM;
1131                 ret = iommu_init_unity_mappings(iommu);
1132                 if (ret)
1133                         goto free_domains;
1134         }
1135
1136         /*
1137          * If device isolation is enabled, pre-allocate the protection
1138          * domains for each device.
1139          */
1140         if (amd_iommu_isolate)
1141                 prealloc_protection_domains();
1142
1143         iommu_detected = 1;
1144         force_iommu = 1;
1145         bad_dma_address = 0;
1146 #ifdef CONFIG_GART_IOMMU
1147         gart_iommu_aperture_disabled = 1;
1148         gart_iommu_aperture = 0;
1149 #endif
1150
1151         /* Make the driver finally visible to the drivers */
1152         dma_ops = &amd_iommu_dma_ops;
1153
1154         return 0;
1155
1156 free_domains:
1157
1158         list_for_each_entry(iommu, &amd_iommu_list, list) {
1159                 if (iommu->default_dom)
1160                         dma_ops_domain_free(iommu->default_dom);
1161         }
1162
1163         return ret;
1164 }