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