iommu/amd: Make sure iommu->need_sync contains correct value
[pandora-kernel.git] / drivers / iommu / amd_iommu.c
1 /*
2  * Copyright (C) 2007-2010 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/pci-ats.h>
22 #include <linux/bitmap.h>
23 #include <linux/slab.h>
24 #include <linux/debugfs.h>
25 #include <linux/scatterlist.h>
26 #include <linux/dma-mapping.h>
27 #include <linux/iommu-helper.h>
28 #include <linux/iommu.h>
29 #include <linux/delay.h>
30 #include <linux/amd-iommu.h>
31 #include <asm/msidef.h>
32 #include <asm/proto.h>
33 #include <asm/iommu.h>
34 #include <asm/gart.h>
35 #include <asm/dma.h>
36
37 #include "amd_iommu_proto.h"
38 #include "amd_iommu_types.h"
39
40 #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28))
41
42 #define LOOP_TIMEOUT    100000
43
44 static DEFINE_RWLOCK(amd_iommu_devtable_lock);
45
46 /* A list of preallocated protection domains */
47 static LIST_HEAD(iommu_pd_list);
48 static DEFINE_SPINLOCK(iommu_pd_list_lock);
49
50 /* List of all available dev_data structures */
51 static LIST_HEAD(dev_data_list);
52 static DEFINE_SPINLOCK(dev_data_list_lock);
53
54 /*
55  * Domain for untranslated devices - only allocated
56  * if iommu=pt passed on kernel cmd line.
57  */
58 static struct protection_domain *pt_domain;
59
60 static struct iommu_ops amd_iommu_ops;
61
62 /*
63  * general struct to manage commands send to an IOMMU
64  */
65 struct iommu_cmd {
66         u32 data[4];
67 };
68
69 static void update_domain(struct protection_domain *domain);
70
71 /****************************************************************************
72  *
73  * Helper functions
74  *
75  ****************************************************************************/
76
77 static struct iommu_dev_data *alloc_dev_data(u16 devid)
78 {
79         struct iommu_dev_data *dev_data;
80         unsigned long flags;
81
82         dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
83         if (!dev_data)
84                 return NULL;
85
86         dev_data->devid = devid;
87         atomic_set(&dev_data->bind, 0);
88
89         spin_lock_irqsave(&dev_data_list_lock, flags);
90         list_add_tail(&dev_data->dev_data_list, &dev_data_list);
91         spin_unlock_irqrestore(&dev_data_list_lock, flags);
92
93         return dev_data;
94 }
95
96 static void free_dev_data(struct iommu_dev_data *dev_data)
97 {
98         unsigned long flags;
99
100         spin_lock_irqsave(&dev_data_list_lock, flags);
101         list_del(&dev_data->dev_data_list);
102         spin_unlock_irqrestore(&dev_data_list_lock, flags);
103
104         kfree(dev_data);
105 }
106
107 static struct iommu_dev_data *search_dev_data(u16 devid)
108 {
109         struct iommu_dev_data *dev_data;
110         unsigned long flags;
111
112         spin_lock_irqsave(&dev_data_list_lock, flags);
113         list_for_each_entry(dev_data, &dev_data_list, dev_data_list) {
114                 if (dev_data->devid == devid)
115                         goto out_unlock;
116         }
117
118         dev_data = NULL;
119
120 out_unlock:
121         spin_unlock_irqrestore(&dev_data_list_lock, flags);
122
123         return dev_data;
124 }
125
126 static struct iommu_dev_data *find_dev_data(u16 devid)
127 {
128         struct iommu_dev_data *dev_data;
129
130         dev_data = search_dev_data(devid);
131
132         if (dev_data == NULL)
133                 dev_data = alloc_dev_data(devid);
134
135         return dev_data;
136 }
137
138 static inline u16 get_device_id(struct device *dev)
139 {
140         struct pci_dev *pdev = to_pci_dev(dev);
141
142         return calc_devid(pdev->bus->number, pdev->devfn);
143 }
144
145 static struct iommu_dev_data *get_dev_data(struct device *dev)
146 {
147         return dev->archdata.iommu;
148 }
149
150 /*
151  * In this function the list of preallocated protection domains is traversed to
152  * find the domain for a specific device
153  */
154 static struct dma_ops_domain *find_protection_domain(u16 devid)
155 {
156         struct dma_ops_domain *entry, *ret = NULL;
157         unsigned long flags;
158         u16 alias = amd_iommu_alias_table[devid];
159
160         if (list_empty(&iommu_pd_list))
161                 return NULL;
162
163         spin_lock_irqsave(&iommu_pd_list_lock, flags);
164
165         list_for_each_entry(entry, &iommu_pd_list, list) {
166                 if (entry->target_dev == devid ||
167                     entry->target_dev == alias) {
168                         ret = entry;
169                         break;
170                 }
171         }
172
173         spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
174
175         return ret;
176 }
177
178 /*
179  * This function checks if the driver got a valid device from the caller to
180  * avoid dereferencing invalid pointers.
181  */
182 static bool check_device(struct device *dev)
183 {
184         u16 devid;
185
186         if (!dev || !dev->dma_mask)
187                 return false;
188
189         /* No device or no PCI device */
190         if (dev->bus != &pci_bus_type)
191                 return false;
192
193         devid = get_device_id(dev);
194
195         /* Out of our scope? */
196         if (devid > amd_iommu_last_bdf)
197                 return false;
198
199         if (amd_iommu_rlookup_table[devid] == NULL)
200                 return false;
201
202         return true;
203 }
204
205 static int iommu_init_device(struct device *dev)
206 {
207         struct iommu_dev_data *dev_data;
208         u16 alias;
209
210         if (dev->archdata.iommu)
211                 return 0;
212
213         dev_data = find_dev_data(get_device_id(dev));
214         if (!dev_data)
215                 return -ENOMEM;
216
217         alias = amd_iommu_alias_table[dev_data->devid];
218         if (alias != dev_data->devid) {
219                 struct iommu_dev_data *alias_data;
220
221                 alias_data = find_dev_data(alias);
222                 if (alias_data == NULL) {
223                         pr_err("AMD-Vi: Warning: Unhandled device %s\n",
224                                         dev_name(dev));
225                         free_dev_data(dev_data);
226                         return -ENOTSUPP;
227                 }
228                 dev_data->alias_data = alias_data;
229         }
230
231         dev->archdata.iommu = dev_data;
232
233         return 0;
234 }
235
236 static void iommu_ignore_device(struct device *dev)
237 {
238         u16 devid, alias;
239
240         devid = get_device_id(dev);
241         alias = amd_iommu_alias_table[devid];
242
243         memset(&amd_iommu_dev_table[devid], 0, sizeof(struct dev_table_entry));
244         memset(&amd_iommu_dev_table[alias], 0, sizeof(struct dev_table_entry));
245
246         amd_iommu_rlookup_table[devid] = NULL;
247         amd_iommu_rlookup_table[alias] = NULL;
248 }
249
250 static void iommu_uninit_device(struct device *dev)
251 {
252         /*
253          * Nothing to do here - we keep dev_data around for unplugged devices
254          * and reuse it when the device is re-plugged - not doing so would
255          * introduce a ton of races.
256          */
257 }
258
259 void __init amd_iommu_uninit_devices(void)
260 {
261         struct iommu_dev_data *dev_data, *n;
262         struct pci_dev *pdev = NULL;
263
264         for_each_pci_dev(pdev) {
265
266                 if (!check_device(&pdev->dev))
267                         continue;
268
269                 iommu_uninit_device(&pdev->dev);
270         }
271
272         /* Free all of our dev_data structures */
273         list_for_each_entry_safe(dev_data, n, &dev_data_list, dev_data_list)
274                 free_dev_data(dev_data);
275 }
276
277 int __init amd_iommu_init_devices(void)
278 {
279         struct pci_dev *pdev = NULL;
280         int ret = 0;
281
282         for_each_pci_dev(pdev) {
283
284                 if (!check_device(&pdev->dev))
285                         continue;
286
287                 ret = iommu_init_device(&pdev->dev);
288                 if (ret == -ENOTSUPP)
289                         iommu_ignore_device(&pdev->dev);
290                 else if (ret)
291                         goto out_free;
292         }
293
294         return 0;
295
296 out_free:
297
298         amd_iommu_uninit_devices();
299
300         return ret;
301 }
302 #ifdef CONFIG_AMD_IOMMU_STATS
303
304 /*
305  * Initialization code for statistics collection
306  */
307
308 DECLARE_STATS_COUNTER(compl_wait);
309 DECLARE_STATS_COUNTER(cnt_map_single);
310 DECLARE_STATS_COUNTER(cnt_unmap_single);
311 DECLARE_STATS_COUNTER(cnt_map_sg);
312 DECLARE_STATS_COUNTER(cnt_unmap_sg);
313 DECLARE_STATS_COUNTER(cnt_alloc_coherent);
314 DECLARE_STATS_COUNTER(cnt_free_coherent);
315 DECLARE_STATS_COUNTER(cross_page);
316 DECLARE_STATS_COUNTER(domain_flush_single);
317 DECLARE_STATS_COUNTER(domain_flush_all);
318 DECLARE_STATS_COUNTER(alloced_io_mem);
319 DECLARE_STATS_COUNTER(total_map_requests);
320
321 static struct dentry *stats_dir;
322 static struct dentry *de_fflush;
323
324 static void amd_iommu_stats_add(struct __iommu_counter *cnt)
325 {
326         if (stats_dir == NULL)
327                 return;
328
329         cnt->dent = debugfs_create_u64(cnt->name, 0444, stats_dir,
330                                        &cnt->value);
331 }
332
333 static void amd_iommu_stats_init(void)
334 {
335         stats_dir = debugfs_create_dir("amd-iommu", NULL);
336         if (stats_dir == NULL)
337                 return;
338
339         de_fflush  = debugfs_create_bool("fullflush", 0444, stats_dir,
340                                          (u32 *)&amd_iommu_unmap_flush);
341
342         amd_iommu_stats_add(&compl_wait);
343         amd_iommu_stats_add(&cnt_map_single);
344         amd_iommu_stats_add(&cnt_unmap_single);
345         amd_iommu_stats_add(&cnt_map_sg);
346         amd_iommu_stats_add(&cnt_unmap_sg);
347         amd_iommu_stats_add(&cnt_alloc_coherent);
348         amd_iommu_stats_add(&cnt_free_coherent);
349         amd_iommu_stats_add(&cross_page);
350         amd_iommu_stats_add(&domain_flush_single);
351         amd_iommu_stats_add(&domain_flush_all);
352         amd_iommu_stats_add(&alloced_io_mem);
353         amd_iommu_stats_add(&total_map_requests);
354 }
355
356 #endif
357
358 /****************************************************************************
359  *
360  * Interrupt handling functions
361  *
362  ****************************************************************************/
363
364 static void dump_dte_entry(u16 devid)
365 {
366         int i;
367
368         for (i = 0; i < 8; ++i)
369                 pr_err("AMD-Vi: DTE[%d]: %08x\n", i,
370                         amd_iommu_dev_table[devid].data[i]);
371 }
372
373 static void dump_command(unsigned long phys_addr)
374 {
375         struct iommu_cmd *cmd = phys_to_virt(phys_addr);
376         int i;
377
378         for (i = 0; i < 4; ++i)
379                 pr_err("AMD-Vi: CMD[%d]: %08x\n", i, cmd->data[i]);
380 }
381
382 static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
383 {
384         u32 *event = __evt;
385         int type  = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
386         int devid = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
387         int domid = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
388         int flags = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
389         u64 address = (u64)(((u64)event[3]) << 32) | event[2];
390
391         printk(KERN_ERR "AMD-Vi: Event logged [");
392
393         switch (type) {
394         case EVENT_TYPE_ILL_DEV:
395                 printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
396                        "address=0x%016llx flags=0x%04x]\n",
397                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
398                        address, flags);
399                 dump_dte_entry(devid);
400                 break;
401         case EVENT_TYPE_IO_FAULT:
402                 printk("IO_PAGE_FAULT device=%02x:%02x.%x "
403                        "domain=0x%04x address=0x%016llx flags=0x%04x]\n",
404                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
405                        domid, address, flags);
406                 break;
407         case EVENT_TYPE_DEV_TAB_ERR:
408                 printk("DEV_TAB_HARDWARE_ERROR device=%02x:%02x.%x "
409                        "address=0x%016llx flags=0x%04x]\n",
410                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
411                        address, flags);
412                 break;
413         case EVENT_TYPE_PAGE_TAB_ERR:
414                 printk("PAGE_TAB_HARDWARE_ERROR device=%02x:%02x.%x "
415                        "domain=0x%04x address=0x%016llx flags=0x%04x]\n",
416                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
417                        domid, address, flags);
418                 break;
419         case EVENT_TYPE_ILL_CMD:
420                 printk("ILLEGAL_COMMAND_ERROR address=0x%016llx]\n", address);
421                 dump_command(address);
422                 break;
423         case EVENT_TYPE_CMD_HARD_ERR:
424                 printk("COMMAND_HARDWARE_ERROR address=0x%016llx "
425                        "flags=0x%04x]\n", address, flags);
426                 break;
427         case EVENT_TYPE_IOTLB_INV_TO:
428                 printk("IOTLB_INV_TIMEOUT device=%02x:%02x.%x "
429                        "address=0x%016llx]\n",
430                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
431                        address);
432                 break;
433         case EVENT_TYPE_INV_DEV_REQ:
434                 printk("INVALID_DEVICE_REQUEST device=%02x:%02x.%x "
435                        "address=0x%016llx flags=0x%04x]\n",
436                        PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid),
437                        address, flags);
438                 break;
439         default:
440                 printk(KERN_ERR "UNKNOWN type=0x%02x]\n", type);
441         }
442 }
443
444 static void iommu_poll_events(struct amd_iommu *iommu)
445 {
446         u32 head, tail;
447         unsigned long flags;
448
449         spin_lock_irqsave(&iommu->lock, flags);
450
451         head = readl(iommu->mmio_base + MMIO_EVT_HEAD_OFFSET);
452         tail = readl(iommu->mmio_base + MMIO_EVT_TAIL_OFFSET);
453
454         while (head != tail) {
455                 iommu_print_event(iommu, iommu->evt_buf + head);
456                 head = (head + EVENT_ENTRY_SIZE) % iommu->evt_buf_size;
457         }
458
459         writel(head, iommu->mmio_base + MMIO_EVT_HEAD_OFFSET);
460
461         spin_unlock_irqrestore(&iommu->lock, flags);
462 }
463
464 irqreturn_t amd_iommu_int_thread(int irq, void *data)
465 {
466         struct amd_iommu *iommu;
467
468         for_each_iommu(iommu)
469                 iommu_poll_events(iommu);
470
471         return IRQ_HANDLED;
472 }
473
474 irqreturn_t amd_iommu_int_handler(int irq, void *data)
475 {
476         return IRQ_WAKE_THREAD;
477 }
478
479 /****************************************************************************
480  *
481  * IOMMU command queuing functions
482  *
483  ****************************************************************************/
484
485 static int wait_on_sem(volatile u64 *sem)
486 {
487         int i = 0;
488
489         while (*sem == 0 && i < LOOP_TIMEOUT) {
490                 udelay(1);
491                 i += 1;
492         }
493
494         if (i == LOOP_TIMEOUT) {
495                 pr_alert("AMD-Vi: Completion-Wait loop timed out\n");
496                 return -EIO;
497         }
498
499         return 0;
500 }
501
502 static void copy_cmd_to_buffer(struct amd_iommu *iommu,
503                                struct iommu_cmd *cmd,
504                                u32 tail)
505 {
506         u8 *target;
507
508         target = iommu->cmd_buf + tail;
509         tail   = (tail + sizeof(*cmd)) % iommu->cmd_buf_size;
510
511         /* Copy command to buffer */
512         memcpy(target, cmd, sizeof(*cmd));
513
514         /* Tell the IOMMU about it */
515         writel(tail, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
516 }
517
518 static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
519 {
520         WARN_ON(address & 0x7ULL);
521
522         memset(cmd, 0, sizeof(*cmd));
523         cmd->data[0] = lower_32_bits(__pa(address)) | CMD_COMPL_WAIT_STORE_MASK;
524         cmd->data[1] = upper_32_bits(__pa(address));
525         cmd->data[2] = 1;
526         CMD_SET_TYPE(cmd, CMD_COMPL_WAIT);
527 }
528
529 static void build_inv_dte(struct iommu_cmd *cmd, u16 devid)
530 {
531         memset(cmd, 0, sizeof(*cmd));
532         cmd->data[0] = devid;
533         CMD_SET_TYPE(cmd, CMD_INV_DEV_ENTRY);
534 }
535
536 static void build_inv_iommu_pages(struct iommu_cmd *cmd, u64 address,
537                                   size_t size, u16 domid, int pde)
538 {
539         u64 pages;
540         int s;
541
542         pages = iommu_num_pages(address, size, PAGE_SIZE);
543         s     = 0;
544
545         if (pages > 1) {
546                 /*
547                  * If we have to flush more than one page, flush all
548                  * TLB entries for this domain
549                  */
550                 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
551                 s = 1;
552         }
553
554         address &= PAGE_MASK;
555
556         memset(cmd, 0, sizeof(*cmd));
557         cmd->data[1] |= domid;
558         cmd->data[2]  = lower_32_bits(address);
559         cmd->data[3]  = upper_32_bits(address);
560         CMD_SET_TYPE(cmd, CMD_INV_IOMMU_PAGES);
561         if (s) /* size bit - we flush more than one 4kb page */
562                 cmd->data[2] |= CMD_INV_IOMMU_PAGES_SIZE_MASK;
563         if (pde) /* PDE bit - we wan't flush everything not only the PTEs */
564                 cmd->data[2] |= CMD_INV_IOMMU_PAGES_PDE_MASK;
565 }
566
567 static void build_inv_iotlb_pages(struct iommu_cmd *cmd, u16 devid, int qdep,
568                                   u64 address, size_t size)
569 {
570         u64 pages;
571         int s;
572
573         pages = iommu_num_pages(address, size, PAGE_SIZE);
574         s     = 0;
575
576         if (pages > 1) {
577                 /*
578                  * If we have to flush more than one page, flush all
579                  * TLB entries for this domain
580                  */
581                 address = CMD_INV_IOMMU_ALL_PAGES_ADDRESS;
582                 s = 1;
583         }
584
585         address &= PAGE_MASK;
586
587         memset(cmd, 0, sizeof(*cmd));
588         cmd->data[0]  = devid;
589         cmd->data[0] |= (qdep & 0xff) << 24;
590         cmd->data[1]  = devid;
591         cmd->data[2]  = lower_32_bits(address);
592         cmd->data[3]  = upper_32_bits(address);
593         CMD_SET_TYPE(cmd, CMD_INV_IOTLB_PAGES);
594         if (s)
595                 cmd->data[2] |= CMD_INV_IOMMU_PAGES_SIZE_MASK;
596 }
597
598 static void build_inv_all(struct iommu_cmd *cmd)
599 {
600         memset(cmd, 0, sizeof(*cmd));
601         CMD_SET_TYPE(cmd, CMD_INV_ALL);
602 }
603
604 /*
605  * Writes the command to the IOMMUs command buffer and informs the
606  * hardware about the new command.
607  */
608 static int iommu_queue_command_sync(struct amd_iommu *iommu,
609                                     struct iommu_cmd *cmd,
610                                     bool sync)
611 {
612         u32 left, tail, head, next_tail;
613         unsigned long flags;
614
615         WARN_ON(iommu->cmd_buf_size & CMD_BUFFER_UNINITIALIZED);
616
617 again:
618         spin_lock_irqsave(&iommu->lock, flags);
619
620         head      = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
621         tail      = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
622         next_tail = (tail + sizeof(*cmd)) % iommu->cmd_buf_size;
623         left      = (head - next_tail) % iommu->cmd_buf_size;
624
625         if (left <= 2) {
626                 struct iommu_cmd sync_cmd;
627                 volatile u64 sem = 0;
628                 int ret;
629
630                 build_completion_wait(&sync_cmd, (u64)&sem);
631                 copy_cmd_to_buffer(iommu, &sync_cmd, tail);
632
633                 spin_unlock_irqrestore(&iommu->lock, flags);
634
635                 if ((ret = wait_on_sem(&sem)) != 0)
636                         return ret;
637
638                 goto again;
639         }
640
641         copy_cmd_to_buffer(iommu, cmd, tail);
642
643         /* We need to sync now to make sure all commands are processed */
644         iommu->need_sync = sync;
645
646         spin_unlock_irqrestore(&iommu->lock, flags);
647
648         return 0;
649 }
650
651 static int iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd)
652 {
653         return iommu_queue_command_sync(iommu, cmd, true);
654 }
655
656 /*
657  * This function queues a completion wait command into the command
658  * buffer of an IOMMU
659  */
660 static int iommu_completion_wait(struct amd_iommu *iommu)
661 {
662         struct iommu_cmd cmd;
663         volatile u64 sem = 0;
664         int ret;
665
666         if (!iommu->need_sync)
667                 return 0;
668
669         build_completion_wait(&cmd, (u64)&sem);
670
671         ret = iommu_queue_command_sync(iommu, &cmd, false);
672         if (ret)
673                 return ret;
674
675         return wait_on_sem(&sem);
676 }
677
678 static int iommu_flush_dte(struct amd_iommu *iommu, u16 devid)
679 {
680         struct iommu_cmd cmd;
681
682         build_inv_dte(&cmd, devid);
683
684         return iommu_queue_command(iommu, &cmd);
685 }
686
687 static void iommu_flush_dte_all(struct amd_iommu *iommu)
688 {
689         u32 devid;
690
691         for (devid = 0; devid <= 0xffff; ++devid)
692                 iommu_flush_dte(iommu, devid);
693
694         iommu_completion_wait(iommu);
695 }
696
697 /*
698  * This function uses heavy locking and may disable irqs for some time. But
699  * this is no issue because it is only called during resume.
700  */
701 static void iommu_flush_tlb_all(struct amd_iommu *iommu)
702 {
703         u32 dom_id;
704
705         for (dom_id = 0; dom_id <= 0xffff; ++dom_id) {
706                 struct iommu_cmd cmd;
707                 build_inv_iommu_pages(&cmd, 0, CMD_INV_IOMMU_ALL_PAGES_ADDRESS,
708                                       dom_id, 1);
709                 iommu_queue_command(iommu, &cmd);
710         }
711
712         iommu_completion_wait(iommu);
713 }
714
715 static void iommu_flush_all(struct amd_iommu *iommu)
716 {
717         struct iommu_cmd cmd;
718
719         build_inv_all(&cmd);
720
721         iommu_queue_command(iommu, &cmd);
722         iommu_completion_wait(iommu);
723 }
724
725 void iommu_flush_all_caches(struct amd_iommu *iommu)
726 {
727         if (iommu_feature(iommu, FEATURE_IA)) {
728                 iommu_flush_all(iommu);
729         } else {
730                 iommu_flush_dte_all(iommu);
731                 iommu_flush_tlb_all(iommu);
732         }
733 }
734
735 /*
736  * Command send function for flushing on-device TLB
737  */
738 static int device_flush_iotlb(struct iommu_dev_data *dev_data,
739                               u64 address, size_t size)
740 {
741         struct amd_iommu *iommu;
742         struct iommu_cmd cmd;
743         int qdep;
744
745         qdep     = dev_data->ats.qdep;
746         iommu    = amd_iommu_rlookup_table[dev_data->devid];
747
748         build_inv_iotlb_pages(&cmd, dev_data->devid, qdep, address, size);
749
750         return iommu_queue_command(iommu, &cmd);
751 }
752
753 /*
754  * Command send function for invalidating a device table entry
755  */
756 static int device_flush_dte(struct iommu_dev_data *dev_data)
757 {
758         struct amd_iommu *iommu;
759         int ret;
760
761         iommu = amd_iommu_rlookup_table[dev_data->devid];
762
763         ret = iommu_flush_dte(iommu, dev_data->devid);
764         if (ret)
765                 return ret;
766
767         if (dev_data->ats.enabled)
768                 ret = device_flush_iotlb(dev_data, 0, ~0UL);
769
770         return ret;
771 }
772
773 /*
774  * TLB invalidation function which is called from the mapping functions.
775  * It invalidates a single PTE if the range to flush is within a single
776  * page. Otherwise it flushes the whole TLB of the IOMMU.
777  */
778 static void __domain_flush_pages(struct protection_domain *domain,
779                                  u64 address, size_t size, int pde)
780 {
781         struct iommu_dev_data *dev_data;
782         struct iommu_cmd cmd;
783         int ret = 0, i;
784
785         build_inv_iommu_pages(&cmd, address, size, domain->id, pde);
786
787         for (i = 0; i < amd_iommus_present; ++i) {
788                 if (!domain->dev_iommu[i])
789                         continue;
790
791                 /*
792                  * Devices of this domain are behind this IOMMU
793                  * We need a TLB flush
794                  */
795                 ret |= iommu_queue_command(amd_iommus[i], &cmd);
796         }
797
798         list_for_each_entry(dev_data, &domain->dev_list, list) {
799
800                 if (!dev_data->ats.enabled)
801                         continue;
802
803                 ret |= device_flush_iotlb(dev_data, address, size);
804         }
805
806         WARN_ON(ret);
807 }
808
809 static void domain_flush_pages(struct protection_domain *domain,
810                                u64 address, size_t size)
811 {
812         __domain_flush_pages(domain, address, size, 0);
813 }
814
815 /* Flush the whole IO/TLB for a given protection domain */
816 static void domain_flush_tlb(struct protection_domain *domain)
817 {
818         __domain_flush_pages(domain, 0, CMD_INV_IOMMU_ALL_PAGES_ADDRESS, 0);
819 }
820
821 /* Flush the whole IO/TLB for a given protection domain - including PDE */
822 static void domain_flush_tlb_pde(struct protection_domain *domain)
823 {
824         __domain_flush_pages(domain, 0, CMD_INV_IOMMU_ALL_PAGES_ADDRESS, 1);
825 }
826
827 static void domain_flush_complete(struct protection_domain *domain)
828 {
829         int i;
830
831         for (i = 0; i < amd_iommus_present; ++i) {
832                 if (!domain->dev_iommu[i])
833                         continue;
834
835                 /*
836                  * Devices of this domain are behind this IOMMU
837                  * We need to wait for completion of all commands.
838                  */
839                 iommu_completion_wait(amd_iommus[i]);
840         }
841 }
842
843
844 /*
845  * This function flushes the DTEs for all devices in domain
846  */
847 static void domain_flush_devices(struct protection_domain *domain)
848 {
849         struct iommu_dev_data *dev_data;
850         unsigned long flags;
851
852         spin_lock_irqsave(&domain->lock, flags);
853
854         list_for_each_entry(dev_data, &domain->dev_list, list)
855                 device_flush_dte(dev_data);
856
857         spin_unlock_irqrestore(&domain->lock, flags);
858 }
859
860 /****************************************************************************
861  *
862  * The functions below are used the create the page table mappings for
863  * unity mapped regions.
864  *
865  ****************************************************************************/
866
867 /*
868  * This function is used to add another level to an IO page table. Adding
869  * another level increases the size of the address space by 9 bits to a size up
870  * to 64 bits.
871  */
872 static bool increase_address_space(struct protection_domain *domain,
873                                    gfp_t gfp)
874 {
875         u64 *pte;
876
877         if (domain->mode == PAGE_MODE_6_LEVEL)
878                 /* address space already 64 bit large */
879                 return false;
880
881         pte = (void *)get_zeroed_page(gfp);
882         if (!pte)
883                 return false;
884
885         *pte             = PM_LEVEL_PDE(domain->mode,
886                                         virt_to_phys(domain->pt_root));
887         domain->pt_root  = pte;
888         domain->mode    += 1;
889         domain->updated  = true;
890
891         return true;
892 }
893
894 static u64 *alloc_pte(struct protection_domain *domain,
895                       unsigned long address,
896                       unsigned long page_size,
897                       u64 **pte_page,
898                       gfp_t gfp)
899 {
900         int level, end_lvl;
901         u64 *pte, *page;
902
903         BUG_ON(!is_power_of_2(page_size));
904
905         while (address > PM_LEVEL_SIZE(domain->mode))
906                 increase_address_space(domain, gfp);
907
908         level   = domain->mode - 1;
909         pte     = &domain->pt_root[PM_LEVEL_INDEX(level, address)];
910         address = PAGE_SIZE_ALIGN(address, page_size);
911         end_lvl = PAGE_SIZE_LEVEL(page_size);
912
913         while (level > end_lvl) {
914                 if (!IOMMU_PTE_PRESENT(*pte)) {
915                         page = (u64 *)get_zeroed_page(gfp);
916                         if (!page)
917                                 return NULL;
918                         *pte = PM_LEVEL_PDE(level, virt_to_phys(page));
919                 }
920
921                 /* No level skipping support yet */
922                 if (PM_PTE_LEVEL(*pte) != level)
923                         return NULL;
924
925                 level -= 1;
926
927                 pte = IOMMU_PTE_PAGE(*pte);
928
929                 if (pte_page && level == end_lvl)
930                         *pte_page = pte;
931
932                 pte = &pte[PM_LEVEL_INDEX(level, address)];
933         }
934
935         return pte;
936 }
937
938 /*
939  * This function checks if there is a PTE for a given dma address. If
940  * there is one, it returns the pointer to it.
941  */
942 static u64 *fetch_pte(struct protection_domain *domain, unsigned long address)
943 {
944         int level;
945         u64 *pte;
946
947         if (address > PM_LEVEL_SIZE(domain->mode))
948                 return NULL;
949
950         level   =  domain->mode - 1;
951         pte     = &domain->pt_root[PM_LEVEL_INDEX(level, address)];
952
953         while (level > 0) {
954
955                 /* Not Present */
956                 if (!IOMMU_PTE_PRESENT(*pte))
957                         return NULL;
958
959                 /* Large PTE */
960                 if (PM_PTE_LEVEL(*pte) == 0x07) {
961                         unsigned long pte_mask, __pte;
962
963                         /*
964                          * If we have a series of large PTEs, make
965                          * sure to return a pointer to the first one.
966                          */
967                         pte_mask = PTE_PAGE_SIZE(*pte);
968                         pte_mask = ~((PAGE_SIZE_PTE_COUNT(pte_mask) << 3) - 1);
969                         __pte    = ((unsigned long)pte) & pte_mask;
970
971                         return (u64 *)__pte;
972                 }
973
974                 /* No level skipping support yet */
975                 if (PM_PTE_LEVEL(*pte) != level)
976                         return NULL;
977
978                 level -= 1;
979
980                 /* Walk to the next level */
981                 pte = IOMMU_PTE_PAGE(*pte);
982                 pte = &pte[PM_LEVEL_INDEX(level, address)];
983         }
984
985         return pte;
986 }
987
988 /*
989  * Generic mapping functions. It maps a physical address into a DMA
990  * address space. It allocates the page table pages if necessary.
991  * In the future it can be extended to a generic mapping function
992  * supporting all features of AMD IOMMU page tables like level skipping
993  * and full 64 bit address spaces.
994  */
995 static int iommu_map_page(struct protection_domain *dom,
996                           unsigned long bus_addr,
997                           unsigned long phys_addr,
998                           int prot,
999                           unsigned long page_size)
1000 {
1001         u64 __pte, *pte;
1002         int i, count;
1003
1004         if (!(prot & IOMMU_PROT_MASK))
1005                 return -EINVAL;
1006
1007         bus_addr  = PAGE_ALIGN(bus_addr);
1008         phys_addr = PAGE_ALIGN(phys_addr);
1009         count     = PAGE_SIZE_PTE_COUNT(page_size);
1010         pte       = alloc_pte(dom, bus_addr, page_size, NULL, GFP_KERNEL);
1011
1012         for (i = 0; i < count; ++i)
1013                 if (IOMMU_PTE_PRESENT(pte[i]))
1014                         return -EBUSY;
1015
1016         if (page_size > PAGE_SIZE) {
1017                 __pte = PAGE_SIZE_PTE(phys_addr, page_size);
1018                 __pte |= PM_LEVEL_ENC(7) | IOMMU_PTE_P | IOMMU_PTE_FC;
1019         } else
1020                 __pte = phys_addr | IOMMU_PTE_P | IOMMU_PTE_FC;
1021
1022         if (prot & IOMMU_PROT_IR)
1023                 __pte |= IOMMU_PTE_IR;
1024         if (prot & IOMMU_PROT_IW)
1025                 __pte |= IOMMU_PTE_IW;
1026
1027         for (i = 0; i < count; ++i)
1028                 pte[i] = __pte;
1029
1030         update_domain(dom);
1031
1032         return 0;
1033 }
1034
1035 static unsigned long iommu_unmap_page(struct protection_domain *dom,
1036                                       unsigned long bus_addr,
1037                                       unsigned long page_size)
1038 {
1039         unsigned long long unmap_size, unmapped;
1040         u64 *pte;
1041
1042         BUG_ON(!is_power_of_2(page_size));
1043
1044         unmapped = 0;
1045
1046         while (unmapped < page_size) {
1047
1048                 pte = fetch_pte(dom, bus_addr);
1049
1050                 if (!pte) {
1051                         /*
1052                          * No PTE for this address
1053                          * move forward in 4kb steps
1054                          */
1055                         unmap_size = PAGE_SIZE;
1056                 } else if (PM_PTE_LEVEL(*pte) == 0) {
1057                         /* 4kb PTE found for this address */
1058                         unmap_size = PAGE_SIZE;
1059                         *pte       = 0ULL;
1060                 } else {
1061                         int count, i;
1062
1063                         /* Large PTE found which maps this address */
1064                         unmap_size = PTE_PAGE_SIZE(*pte);
1065                         count      = PAGE_SIZE_PTE_COUNT(unmap_size);
1066                         for (i = 0; i < count; i++)
1067                                 pte[i] = 0ULL;
1068                 }
1069
1070                 bus_addr  = (bus_addr & ~(unmap_size - 1)) + unmap_size;
1071                 unmapped += unmap_size;
1072         }
1073
1074         BUG_ON(!is_power_of_2(unmapped));
1075
1076         return unmapped;
1077 }
1078
1079 /*
1080  * This function checks if a specific unity mapping entry is needed for
1081  * this specific IOMMU.
1082  */
1083 static int iommu_for_unity_map(struct amd_iommu *iommu,
1084                                struct unity_map_entry *entry)
1085 {
1086         u16 bdf, i;
1087
1088         for (i = entry->devid_start; i <= entry->devid_end; ++i) {
1089                 bdf = amd_iommu_alias_table[i];
1090                 if (amd_iommu_rlookup_table[bdf] == iommu)
1091                         return 1;
1092         }
1093
1094         return 0;
1095 }
1096
1097 /*
1098  * This function actually applies the mapping to the page table of the
1099  * dma_ops domain.
1100  */
1101 static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
1102                              struct unity_map_entry *e)
1103 {
1104         u64 addr;
1105         int ret;
1106
1107         for (addr = e->address_start; addr < e->address_end;
1108              addr += PAGE_SIZE) {
1109                 ret = iommu_map_page(&dma_dom->domain, addr, addr, e->prot,
1110                                      PAGE_SIZE);
1111                 if (ret)
1112                         return ret;
1113                 /*
1114                  * if unity mapping is in aperture range mark the page
1115                  * as allocated in the aperture
1116                  */
1117                 if (addr < dma_dom->aperture_size)
1118                         __set_bit(addr >> PAGE_SHIFT,
1119                                   dma_dom->aperture[0]->bitmap);
1120         }
1121
1122         return 0;
1123 }
1124
1125 /*
1126  * Init the unity mappings for a specific IOMMU in the system
1127  *
1128  * Basically iterates over all unity mapping entries and applies them to
1129  * the default domain DMA of that IOMMU if necessary.
1130  */
1131 static int iommu_init_unity_mappings(struct amd_iommu *iommu)
1132 {
1133         struct unity_map_entry *entry;
1134         int ret;
1135
1136         list_for_each_entry(entry, &amd_iommu_unity_map, list) {
1137                 if (!iommu_for_unity_map(iommu, entry))
1138                         continue;
1139                 ret = dma_ops_unity_map(iommu->default_dom, entry);
1140                 if (ret)
1141                         return ret;
1142         }
1143
1144         return 0;
1145 }
1146
1147 /*
1148  * Inits the unity mappings required for a specific device
1149  */
1150 static int init_unity_mappings_for_device(struct dma_ops_domain *dma_dom,
1151                                           u16 devid)
1152 {
1153         struct unity_map_entry *e;
1154         int ret;
1155
1156         list_for_each_entry(e, &amd_iommu_unity_map, list) {
1157                 if (!(devid >= e->devid_start && devid <= e->devid_end))
1158                         continue;
1159                 ret = dma_ops_unity_map(dma_dom, e);
1160                 if (ret)
1161                         return ret;
1162         }
1163
1164         return 0;
1165 }
1166
1167 /****************************************************************************
1168  *
1169  * The next functions belong to the address allocator for the dma_ops
1170  * interface functions. They work like the allocators in the other IOMMU
1171  * drivers. Its basically a bitmap which marks the allocated pages in
1172  * the aperture. Maybe it could be enhanced in the future to a more
1173  * efficient allocator.
1174  *
1175  ****************************************************************************/
1176
1177 /*
1178  * The address allocator core functions.
1179  *
1180  * called with domain->lock held
1181  */
1182
1183 /*
1184  * Used to reserve address ranges in the aperture (e.g. for exclusion
1185  * ranges.
1186  */
1187 static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
1188                                       unsigned long start_page,
1189                                       unsigned int pages)
1190 {
1191         unsigned int i, last_page = dom->aperture_size >> PAGE_SHIFT;
1192
1193         if (start_page + pages > last_page)
1194                 pages = last_page - start_page;
1195
1196         for (i = start_page; i < start_page + pages; ++i) {
1197                 int index = i / APERTURE_RANGE_PAGES;
1198                 int page  = i % APERTURE_RANGE_PAGES;
1199                 __set_bit(page, dom->aperture[index]->bitmap);
1200         }
1201 }
1202
1203 /*
1204  * This function is used to add a new aperture range to an existing
1205  * aperture in case of dma_ops domain allocation or address allocation
1206  * failure.
1207  */
1208 static int alloc_new_range(struct dma_ops_domain *dma_dom,
1209                            bool populate, gfp_t gfp)
1210 {
1211         int index = dma_dom->aperture_size >> APERTURE_RANGE_SHIFT;
1212         struct amd_iommu *iommu;
1213         unsigned long i, old_size;
1214
1215 #ifdef CONFIG_IOMMU_STRESS
1216         populate = false;
1217 #endif
1218
1219         if (index >= APERTURE_MAX_RANGES)
1220                 return -ENOMEM;
1221
1222         dma_dom->aperture[index] = kzalloc(sizeof(struct aperture_range), gfp);
1223         if (!dma_dom->aperture[index])
1224                 return -ENOMEM;
1225
1226         dma_dom->aperture[index]->bitmap = (void *)get_zeroed_page(gfp);
1227         if (!dma_dom->aperture[index]->bitmap)
1228                 goto out_free;
1229
1230         dma_dom->aperture[index]->offset = dma_dom->aperture_size;
1231
1232         if (populate) {
1233                 unsigned long address = dma_dom->aperture_size;
1234                 int i, num_ptes = APERTURE_RANGE_PAGES / 512;
1235                 u64 *pte, *pte_page;
1236
1237                 for (i = 0; i < num_ptes; ++i) {
1238                         pte = alloc_pte(&dma_dom->domain, address, PAGE_SIZE,
1239                                         &pte_page, gfp);
1240                         if (!pte)
1241                                 goto out_free;
1242
1243                         dma_dom->aperture[index]->pte_pages[i] = pte_page;
1244
1245                         address += APERTURE_RANGE_SIZE / 64;
1246                 }
1247         }
1248
1249         old_size                = dma_dom->aperture_size;
1250         dma_dom->aperture_size += APERTURE_RANGE_SIZE;
1251
1252         /* Reserve address range used for MSI messages */
1253         if (old_size < MSI_ADDR_BASE_LO &&
1254             dma_dom->aperture_size > MSI_ADDR_BASE_LO) {
1255                 unsigned long spage;
1256                 int pages;
1257
1258                 pages = iommu_num_pages(MSI_ADDR_BASE_LO, 0x10000, PAGE_SIZE);
1259                 spage = MSI_ADDR_BASE_LO >> PAGE_SHIFT;
1260
1261                 dma_ops_reserve_addresses(dma_dom, spage, pages);
1262         }
1263
1264         /* Initialize the exclusion range if necessary */
1265         for_each_iommu(iommu) {
1266                 if (iommu->exclusion_start &&
1267                     iommu->exclusion_start >= dma_dom->aperture[index]->offset
1268                     && iommu->exclusion_start < dma_dom->aperture_size) {
1269                         unsigned long startpage;
1270                         int pages = iommu_num_pages(iommu->exclusion_start,
1271                                                     iommu->exclusion_length,
1272                                                     PAGE_SIZE);
1273                         startpage = iommu->exclusion_start >> PAGE_SHIFT;
1274                         dma_ops_reserve_addresses(dma_dom, startpage, pages);
1275                 }
1276         }
1277
1278         /*
1279          * Check for areas already mapped as present in the new aperture
1280          * range and mark those pages as reserved in the allocator. Such
1281          * mappings may already exist as a result of requested unity
1282          * mappings for devices.
1283          */
1284         for (i = dma_dom->aperture[index]->offset;
1285              i < dma_dom->aperture_size;
1286              i += PAGE_SIZE) {
1287                 u64 *pte = fetch_pte(&dma_dom->domain, i);
1288                 if (!pte || !IOMMU_PTE_PRESENT(*pte))
1289                         continue;
1290
1291                 dma_ops_reserve_addresses(dma_dom, i << PAGE_SHIFT, 1);
1292         }
1293
1294         update_domain(&dma_dom->domain);
1295
1296         return 0;
1297
1298 out_free:
1299         update_domain(&dma_dom->domain);
1300
1301         free_page((unsigned long)dma_dom->aperture[index]->bitmap);
1302
1303         kfree(dma_dom->aperture[index]);
1304         dma_dom->aperture[index] = NULL;
1305
1306         return -ENOMEM;
1307 }
1308
1309 static unsigned long dma_ops_area_alloc(struct device *dev,
1310                                         struct dma_ops_domain *dom,
1311                                         unsigned int pages,
1312                                         unsigned long align_mask,
1313                                         u64 dma_mask,
1314                                         unsigned long start)
1315 {
1316         unsigned long next_bit = dom->next_address % APERTURE_RANGE_SIZE;
1317         int max_index = dom->aperture_size >> APERTURE_RANGE_SHIFT;
1318         int i = start >> APERTURE_RANGE_SHIFT;
1319         unsigned long boundary_size;
1320         unsigned long address = -1;
1321         unsigned long limit;
1322
1323         next_bit >>= PAGE_SHIFT;
1324
1325         boundary_size = ALIGN(dma_get_seg_boundary(dev) + 1,
1326                         PAGE_SIZE) >> PAGE_SHIFT;
1327
1328         for (;i < max_index; ++i) {
1329                 unsigned long offset = dom->aperture[i]->offset >> PAGE_SHIFT;
1330
1331                 if (dom->aperture[i]->offset >= dma_mask)
1332                         break;
1333
1334                 limit = iommu_device_max_index(APERTURE_RANGE_PAGES, offset,
1335                                                dma_mask >> PAGE_SHIFT);
1336
1337                 address = iommu_area_alloc(dom->aperture[i]->bitmap,
1338                                            limit, next_bit, pages, 0,
1339                                             boundary_size, align_mask);
1340                 if (address != -1) {
1341                         address = dom->aperture[i]->offset +
1342                                   (address << PAGE_SHIFT);
1343                         dom->next_address = address + (pages << PAGE_SHIFT);
1344                         break;
1345                 }
1346
1347                 next_bit = 0;
1348         }
1349
1350         return address;
1351 }
1352
1353 static unsigned long dma_ops_alloc_addresses(struct device *dev,
1354                                              struct dma_ops_domain *dom,
1355                                              unsigned int pages,
1356                                              unsigned long align_mask,
1357                                              u64 dma_mask)
1358 {
1359         unsigned long address;
1360
1361 #ifdef CONFIG_IOMMU_STRESS
1362         dom->next_address = 0;
1363         dom->need_flush = true;
1364 #endif
1365
1366         address = dma_ops_area_alloc(dev, dom, pages, align_mask,
1367                                      dma_mask, dom->next_address);
1368
1369         if (address == -1) {
1370                 dom->next_address = 0;
1371                 address = dma_ops_area_alloc(dev, dom, pages, align_mask,
1372                                              dma_mask, 0);
1373                 dom->need_flush = true;
1374         }
1375
1376         if (unlikely(address == -1))
1377                 address = DMA_ERROR_CODE;
1378
1379         WARN_ON((address + (PAGE_SIZE*pages)) > dom->aperture_size);
1380
1381         return address;
1382 }
1383
1384 /*
1385  * The address free function.
1386  *
1387  * called with domain->lock held
1388  */
1389 static void dma_ops_free_addresses(struct dma_ops_domain *dom,
1390                                    unsigned long address,
1391                                    unsigned int pages)
1392 {
1393         unsigned i = address >> APERTURE_RANGE_SHIFT;
1394         struct aperture_range *range = dom->aperture[i];
1395
1396         BUG_ON(i >= APERTURE_MAX_RANGES || range == NULL);
1397
1398 #ifdef CONFIG_IOMMU_STRESS
1399         if (i < 4)
1400                 return;
1401 #endif
1402
1403         if (address >= dom->next_address)
1404                 dom->need_flush = true;
1405
1406         address = (address % APERTURE_RANGE_SIZE) >> PAGE_SHIFT;
1407
1408         bitmap_clear(range->bitmap, address, pages);
1409
1410 }
1411
1412 /****************************************************************************
1413  *
1414  * The next functions belong to the domain allocation. A domain is
1415  * allocated for every IOMMU as the default domain. If device isolation
1416  * is enabled, every device get its own domain. The most important thing
1417  * about domains is the page table mapping the DMA address space they
1418  * contain.
1419  *
1420  ****************************************************************************/
1421
1422 /*
1423  * This function adds a protection domain to the global protection domain list
1424  */
1425 static void add_domain_to_list(struct protection_domain *domain)
1426 {
1427         unsigned long flags;
1428
1429         spin_lock_irqsave(&amd_iommu_pd_lock, flags);
1430         list_add(&domain->list, &amd_iommu_pd_list);
1431         spin_unlock_irqrestore(&amd_iommu_pd_lock, flags);
1432 }
1433
1434 /*
1435  * This function removes a protection domain to the global
1436  * protection domain list
1437  */
1438 static void del_domain_from_list(struct protection_domain *domain)
1439 {
1440         unsigned long flags;
1441
1442         spin_lock_irqsave(&amd_iommu_pd_lock, flags);
1443         list_del(&domain->list);
1444         spin_unlock_irqrestore(&amd_iommu_pd_lock, flags);
1445 }
1446
1447 static u16 domain_id_alloc(void)
1448 {
1449         unsigned long flags;
1450         int id;
1451
1452         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1453         id = find_first_zero_bit(amd_iommu_pd_alloc_bitmap, MAX_DOMAIN_ID);
1454         BUG_ON(id == 0);
1455         if (id > 0 && id < MAX_DOMAIN_ID)
1456                 __set_bit(id, amd_iommu_pd_alloc_bitmap);
1457         else
1458                 id = 0;
1459         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1460
1461         return id;
1462 }
1463
1464 static void domain_id_free(int id)
1465 {
1466         unsigned long flags;
1467
1468         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1469         if (id > 0 && id < MAX_DOMAIN_ID)
1470                 __clear_bit(id, amd_iommu_pd_alloc_bitmap);
1471         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1472 }
1473
1474 static void free_pagetable(struct protection_domain *domain)
1475 {
1476         int i, j;
1477         u64 *p1, *p2, *p3;
1478
1479         p1 = domain->pt_root;
1480
1481         if (!p1)
1482                 return;
1483
1484         for (i = 0; i < 512; ++i) {
1485                 if (!IOMMU_PTE_PRESENT(p1[i]))
1486                         continue;
1487
1488                 p2 = IOMMU_PTE_PAGE(p1[i]);
1489                 for (j = 0; j < 512; ++j) {
1490                         if (!IOMMU_PTE_PRESENT(p2[j]))
1491                                 continue;
1492                         p3 = IOMMU_PTE_PAGE(p2[j]);
1493                         free_page((unsigned long)p3);
1494                 }
1495
1496                 free_page((unsigned long)p2);
1497         }
1498
1499         free_page((unsigned long)p1);
1500
1501         domain->pt_root = NULL;
1502 }
1503
1504 /*
1505  * Free a domain, only used if something went wrong in the
1506  * allocation path and we need to free an already allocated page table
1507  */
1508 static void dma_ops_domain_free(struct dma_ops_domain *dom)
1509 {
1510         int i;
1511
1512         if (!dom)
1513                 return;
1514
1515         del_domain_from_list(&dom->domain);
1516
1517         free_pagetable(&dom->domain);
1518
1519         for (i = 0; i < APERTURE_MAX_RANGES; ++i) {
1520                 if (!dom->aperture[i])
1521                         continue;
1522                 free_page((unsigned long)dom->aperture[i]->bitmap);
1523                 kfree(dom->aperture[i]);
1524         }
1525
1526         kfree(dom);
1527 }
1528
1529 /*
1530  * Allocates a new protection domain usable for the dma_ops functions.
1531  * It also initializes the page table and the address allocator data
1532  * structures required for the dma_ops interface
1533  */
1534 static struct dma_ops_domain *dma_ops_domain_alloc(void)
1535 {
1536         struct dma_ops_domain *dma_dom;
1537
1538         dma_dom = kzalloc(sizeof(struct dma_ops_domain), GFP_KERNEL);
1539         if (!dma_dom)
1540                 return NULL;
1541
1542         spin_lock_init(&dma_dom->domain.lock);
1543
1544         dma_dom->domain.id = domain_id_alloc();
1545         if (dma_dom->domain.id == 0)
1546                 goto free_dma_dom;
1547         INIT_LIST_HEAD(&dma_dom->domain.dev_list);
1548         dma_dom->domain.mode = PAGE_MODE_2_LEVEL;
1549         dma_dom->domain.pt_root = (void *)get_zeroed_page(GFP_KERNEL);
1550         dma_dom->domain.flags = PD_DMA_OPS_MASK;
1551         dma_dom->domain.priv = dma_dom;
1552         if (!dma_dom->domain.pt_root)
1553                 goto free_dma_dom;
1554
1555         dma_dom->need_flush = false;
1556         dma_dom->target_dev = 0xffff;
1557
1558         add_domain_to_list(&dma_dom->domain);
1559
1560         if (alloc_new_range(dma_dom, true, GFP_KERNEL))
1561                 goto free_dma_dom;
1562
1563         /*
1564          * mark the first page as allocated so we never return 0 as
1565          * a valid dma-address. So we can use 0 as error value
1566          */
1567         dma_dom->aperture[0]->bitmap[0] = 1;
1568         dma_dom->next_address = 0;
1569
1570
1571         return dma_dom;
1572
1573 free_dma_dom:
1574         dma_ops_domain_free(dma_dom);
1575
1576         return NULL;
1577 }
1578
1579 /*
1580  * little helper function to check whether a given protection domain is a
1581  * dma_ops domain
1582  */
1583 static bool dma_ops_domain(struct protection_domain *domain)
1584 {
1585         return domain->flags & PD_DMA_OPS_MASK;
1586 }
1587
1588 static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
1589 {
1590         u64 pte_root = virt_to_phys(domain->pt_root);
1591         u32 flags = 0;
1592
1593         pte_root |= (domain->mode & DEV_ENTRY_MODE_MASK)
1594                     << DEV_ENTRY_MODE_SHIFT;
1595         pte_root |= IOMMU_PTE_IR | IOMMU_PTE_IW | IOMMU_PTE_P | IOMMU_PTE_TV;
1596
1597         if (ats)
1598                 flags |= DTE_FLAG_IOTLB;
1599
1600         amd_iommu_dev_table[devid].data[3] |= flags;
1601         amd_iommu_dev_table[devid].data[2]  = domain->id;
1602         amd_iommu_dev_table[devid].data[1]  = upper_32_bits(pte_root);
1603         amd_iommu_dev_table[devid].data[0]  = lower_32_bits(pte_root);
1604 }
1605
1606 static void clear_dte_entry(u16 devid)
1607 {
1608         /* remove entry from the device table seen by the hardware */
1609         amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV;
1610         amd_iommu_dev_table[devid].data[1] = 0;
1611         amd_iommu_dev_table[devid].data[2] = 0;
1612
1613         amd_iommu_apply_erratum_63(devid);
1614 }
1615
1616 static void do_attach(struct iommu_dev_data *dev_data,
1617                       struct protection_domain *domain)
1618 {
1619         struct amd_iommu *iommu;
1620         bool ats;
1621
1622         iommu = amd_iommu_rlookup_table[dev_data->devid];
1623         ats   = dev_data->ats.enabled;
1624
1625         /* Update data structures */
1626         dev_data->domain = domain;
1627         list_add(&dev_data->list, &domain->dev_list);
1628         set_dte_entry(dev_data->devid, domain, ats);
1629
1630         /* Do reference counting */
1631         domain->dev_iommu[iommu->index] += 1;
1632         domain->dev_cnt                 += 1;
1633
1634         /* Flush the DTE entry */
1635         device_flush_dte(dev_data);
1636 }
1637
1638 static void do_detach(struct iommu_dev_data *dev_data)
1639 {
1640         struct amd_iommu *iommu;
1641
1642         iommu = amd_iommu_rlookup_table[dev_data->devid];
1643
1644         /* decrease reference counters */
1645         dev_data->domain->dev_iommu[iommu->index] -= 1;
1646         dev_data->domain->dev_cnt                 -= 1;
1647
1648         /* Update data structures */
1649         dev_data->domain = NULL;
1650         list_del(&dev_data->list);
1651         clear_dte_entry(dev_data->devid);
1652
1653         /* Flush the DTE entry */
1654         device_flush_dte(dev_data);
1655 }
1656
1657 /*
1658  * If a device is not yet associated with a domain, this function does
1659  * assigns it visible for the hardware
1660  */
1661 static int __attach_device(struct iommu_dev_data *dev_data,
1662                            struct protection_domain *domain)
1663 {
1664         int ret;
1665
1666         /* lock domain */
1667         spin_lock(&domain->lock);
1668
1669         if (dev_data->alias_data != NULL) {
1670                 struct iommu_dev_data *alias_data = dev_data->alias_data;
1671
1672                 /* Some sanity checks */
1673                 ret = -EBUSY;
1674                 if (alias_data->domain != NULL &&
1675                                 alias_data->domain != domain)
1676                         goto out_unlock;
1677
1678                 if (dev_data->domain != NULL &&
1679                                 dev_data->domain != domain)
1680                         goto out_unlock;
1681
1682                 /* Do real assignment */
1683                 if (alias_data->domain == NULL)
1684                         do_attach(alias_data, domain);
1685
1686                 atomic_inc(&alias_data->bind);
1687         }
1688
1689         if (dev_data->domain == NULL)
1690                 do_attach(dev_data, domain);
1691
1692         atomic_inc(&dev_data->bind);
1693
1694         ret = 0;
1695
1696 out_unlock:
1697
1698         /* ready */
1699         spin_unlock(&domain->lock);
1700
1701         return ret;
1702 }
1703
1704 /*
1705  * If a device is not yet associated with a domain, this function does
1706  * assigns it visible for the hardware
1707  */
1708 static int attach_device(struct device *dev,
1709                          struct protection_domain *domain)
1710 {
1711         struct pci_dev *pdev = to_pci_dev(dev);
1712         struct iommu_dev_data *dev_data;
1713         unsigned long flags;
1714         int ret;
1715
1716         dev_data = get_dev_data(dev);
1717
1718         if (amd_iommu_iotlb_sup && pci_enable_ats(pdev, PAGE_SHIFT) == 0) {
1719                 dev_data->ats.enabled = true;
1720                 dev_data->ats.qdep    = pci_ats_queue_depth(pdev);
1721         }
1722
1723         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1724         ret = __attach_device(dev_data, domain);
1725         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1726
1727         /*
1728          * We might boot into a crash-kernel here. The crashed kernel
1729          * left the caches in the IOMMU dirty. So we have to flush
1730          * here to evict all dirty stuff.
1731          */
1732         domain_flush_tlb_pde(domain);
1733
1734         return ret;
1735 }
1736
1737 /*
1738  * Removes a device from a protection domain (unlocked)
1739  */
1740 static void __detach_device(struct iommu_dev_data *dev_data)
1741 {
1742         struct protection_domain *domain;
1743         unsigned long flags;
1744
1745         BUG_ON(!dev_data->domain);
1746
1747         domain = dev_data->domain;
1748
1749         spin_lock_irqsave(&domain->lock, flags);
1750
1751         if (dev_data->alias_data != NULL) {
1752                 struct iommu_dev_data *alias_data = dev_data->alias_data;
1753
1754                 if (atomic_dec_and_test(&alias_data->bind))
1755                         do_detach(alias_data);
1756         }
1757
1758         if (atomic_dec_and_test(&dev_data->bind))
1759                 do_detach(dev_data);
1760
1761         spin_unlock_irqrestore(&domain->lock, flags);
1762
1763         /*
1764          * If we run in passthrough mode the device must be assigned to the
1765          * passthrough domain if it is detached from any other domain.
1766          * Make sure we can deassign from the pt_domain itself.
1767          */
1768         if (iommu_pass_through &&
1769             (dev_data->domain == NULL && domain != pt_domain))
1770                 __attach_device(dev_data, pt_domain);
1771 }
1772
1773 /*
1774  * Removes a device from a protection domain (with devtable_lock held)
1775  */
1776 static void detach_device(struct device *dev)
1777 {
1778         struct iommu_dev_data *dev_data;
1779         unsigned long flags;
1780
1781         dev_data = get_dev_data(dev);
1782
1783         /* lock device table */
1784         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
1785         __detach_device(dev_data);
1786         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1787
1788         if (dev_data->ats.enabled) {
1789                 pci_disable_ats(to_pci_dev(dev));
1790                 dev_data->ats.enabled = false;
1791         }
1792 }
1793
1794 /*
1795  * Find out the protection domain structure for a given PCI device. This
1796  * will give us the pointer to the page table root for example.
1797  */
1798 static struct protection_domain *domain_for_device(struct device *dev)
1799 {
1800         struct iommu_dev_data *dev_data;
1801         struct protection_domain *dom = NULL;
1802         unsigned long flags;
1803
1804         dev_data   = get_dev_data(dev);
1805
1806         if (dev_data->domain)
1807                 return dev_data->domain;
1808
1809         if (dev_data->alias_data != NULL) {
1810                 struct iommu_dev_data *alias_data = dev_data->alias_data;
1811
1812                 read_lock_irqsave(&amd_iommu_devtable_lock, flags);
1813                 if (alias_data->domain != NULL) {
1814                         __attach_device(dev_data, alias_data->domain);
1815                         dom = alias_data->domain;
1816                 }
1817                 read_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
1818         }
1819
1820         return dom;
1821 }
1822
1823 static int device_change_notifier(struct notifier_block *nb,
1824                                   unsigned long action, void *data)
1825 {
1826         struct device *dev = data;
1827         u16 devid;
1828         struct protection_domain *domain;
1829         struct dma_ops_domain *dma_domain;
1830         struct amd_iommu *iommu;
1831         unsigned long flags;
1832
1833         if (!check_device(dev))
1834                 return 0;
1835
1836         devid  = get_device_id(dev);
1837         iommu  = amd_iommu_rlookup_table[devid];
1838
1839         switch (action) {
1840         case BUS_NOTIFY_UNBOUND_DRIVER:
1841
1842                 domain = domain_for_device(dev);
1843
1844                 if (!domain)
1845                         goto out;
1846                 if (iommu_pass_through)
1847                         break;
1848                 detach_device(dev);
1849                 break;
1850         case BUS_NOTIFY_ADD_DEVICE:
1851
1852                 iommu_init_device(dev);
1853
1854                 domain = domain_for_device(dev);
1855
1856                 /* allocate a protection domain if a device is added */
1857                 dma_domain = find_protection_domain(devid);
1858                 if (dma_domain)
1859                         goto out;
1860                 dma_domain = dma_ops_domain_alloc();
1861                 if (!dma_domain)
1862                         goto out;
1863                 dma_domain->target_dev = devid;
1864
1865                 spin_lock_irqsave(&iommu_pd_list_lock, flags);
1866                 list_add_tail(&dma_domain->list, &iommu_pd_list);
1867                 spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
1868
1869                 break;
1870         case BUS_NOTIFY_DEL_DEVICE:
1871
1872                 iommu_uninit_device(dev);
1873
1874         default:
1875                 goto out;
1876         }
1877
1878         iommu_completion_wait(iommu);
1879
1880 out:
1881         return 0;
1882 }
1883
1884 static struct notifier_block device_nb = {
1885         .notifier_call = device_change_notifier,
1886 };
1887
1888 void amd_iommu_init_notifier(void)
1889 {
1890         bus_register_notifier(&pci_bus_type, &device_nb);
1891 }
1892
1893 /*****************************************************************************
1894  *
1895  * The next functions belong to the dma_ops mapping/unmapping code.
1896  *
1897  *****************************************************************************/
1898
1899 /*
1900  * In the dma_ops path we only have the struct device. This function
1901  * finds the corresponding IOMMU, the protection domain and the
1902  * requestor id for a given device.
1903  * If the device is not yet associated with a domain this is also done
1904  * in this function.
1905  */
1906 static struct protection_domain *get_domain(struct device *dev)
1907 {
1908         struct protection_domain *domain;
1909         struct dma_ops_domain *dma_dom;
1910         u16 devid = get_device_id(dev);
1911
1912         if (!check_device(dev))
1913                 return ERR_PTR(-EINVAL);
1914
1915         domain = domain_for_device(dev);
1916         if (domain != NULL && !dma_ops_domain(domain))
1917                 return ERR_PTR(-EBUSY);
1918
1919         if (domain != NULL)
1920                 return domain;
1921
1922         /* Device not bount yet - bind it */
1923         dma_dom = find_protection_domain(devid);
1924         if (!dma_dom)
1925                 dma_dom = amd_iommu_rlookup_table[devid]->default_dom;
1926         attach_device(dev, &dma_dom->domain);
1927         DUMP_printk("Using protection domain %d for device %s\n",
1928                     dma_dom->domain.id, dev_name(dev));
1929
1930         return &dma_dom->domain;
1931 }
1932
1933 static void update_device_table(struct protection_domain *domain)
1934 {
1935         struct iommu_dev_data *dev_data;
1936
1937         list_for_each_entry(dev_data, &domain->dev_list, list)
1938                 set_dte_entry(dev_data->devid, domain, dev_data->ats.enabled);
1939 }
1940
1941 static void update_domain(struct protection_domain *domain)
1942 {
1943         if (!domain->updated)
1944                 return;
1945
1946         update_device_table(domain);
1947
1948         domain_flush_devices(domain);
1949         domain_flush_tlb_pde(domain);
1950
1951         domain->updated = false;
1952 }
1953
1954 /*
1955  * This function fetches the PTE for a given address in the aperture
1956  */
1957 static u64* dma_ops_get_pte(struct dma_ops_domain *dom,
1958                             unsigned long address)
1959 {
1960         struct aperture_range *aperture;
1961         u64 *pte, *pte_page;
1962
1963         aperture = dom->aperture[APERTURE_RANGE_INDEX(address)];
1964         if (!aperture)
1965                 return NULL;
1966
1967         pte = aperture->pte_pages[APERTURE_PAGE_INDEX(address)];
1968         if (!pte) {
1969                 pte = alloc_pte(&dom->domain, address, PAGE_SIZE, &pte_page,
1970                                 GFP_ATOMIC);
1971                 aperture->pte_pages[APERTURE_PAGE_INDEX(address)] = pte_page;
1972         } else
1973                 pte += PM_LEVEL_INDEX(0, address);
1974
1975         update_domain(&dom->domain);
1976
1977         return pte;
1978 }
1979
1980 /*
1981  * This is the generic map function. It maps one 4kb page at paddr to
1982  * the given address in the DMA address space for the domain.
1983  */
1984 static dma_addr_t dma_ops_domain_map(struct dma_ops_domain *dom,
1985                                      unsigned long address,
1986                                      phys_addr_t paddr,
1987                                      int direction)
1988 {
1989         u64 *pte, __pte;
1990
1991         WARN_ON(address > dom->aperture_size);
1992
1993         paddr &= PAGE_MASK;
1994
1995         pte  = dma_ops_get_pte(dom, address);
1996         if (!pte)
1997                 return DMA_ERROR_CODE;
1998
1999         __pte = paddr | IOMMU_PTE_P | IOMMU_PTE_FC;
2000
2001         if (direction == DMA_TO_DEVICE)
2002                 __pte |= IOMMU_PTE_IR;
2003         else if (direction == DMA_FROM_DEVICE)
2004                 __pte |= IOMMU_PTE_IW;
2005         else if (direction == DMA_BIDIRECTIONAL)
2006                 __pte |= IOMMU_PTE_IR | IOMMU_PTE_IW;
2007
2008         WARN_ON(*pte);
2009
2010         *pte = __pte;
2011
2012         return (dma_addr_t)address;
2013 }
2014
2015 /*
2016  * The generic unmapping function for on page in the DMA address space.
2017  */
2018 static void dma_ops_domain_unmap(struct dma_ops_domain *dom,
2019                                  unsigned long address)
2020 {
2021         struct aperture_range *aperture;
2022         u64 *pte;
2023
2024         if (address >= dom->aperture_size)
2025                 return;
2026
2027         aperture = dom->aperture[APERTURE_RANGE_INDEX(address)];
2028         if (!aperture)
2029                 return;
2030
2031         pte  = aperture->pte_pages[APERTURE_PAGE_INDEX(address)];
2032         if (!pte)
2033                 return;
2034
2035         pte += PM_LEVEL_INDEX(0, address);
2036
2037         WARN_ON(!*pte);
2038
2039         *pte = 0ULL;
2040 }
2041
2042 /*
2043  * This function contains common code for mapping of a physically
2044  * contiguous memory region into DMA address space. It is used by all
2045  * mapping functions provided with this IOMMU driver.
2046  * Must be called with the domain lock held.
2047  */
2048 static dma_addr_t __map_single(struct device *dev,
2049                                struct dma_ops_domain *dma_dom,
2050                                phys_addr_t paddr,
2051                                size_t size,
2052                                int dir,
2053                                bool align,
2054                                u64 dma_mask)
2055 {
2056         dma_addr_t offset = paddr & ~PAGE_MASK;
2057         dma_addr_t address, start, ret;
2058         unsigned int pages;
2059         unsigned long align_mask = 0;
2060         int i;
2061
2062         pages = iommu_num_pages(paddr, size, PAGE_SIZE);
2063         paddr &= PAGE_MASK;
2064
2065         INC_STATS_COUNTER(total_map_requests);
2066
2067         if (pages > 1)
2068                 INC_STATS_COUNTER(cross_page);
2069
2070         if (align)
2071                 align_mask = (1UL << get_order(size)) - 1;
2072
2073 retry:
2074         address = dma_ops_alloc_addresses(dev, dma_dom, pages, align_mask,
2075                                           dma_mask);
2076         if (unlikely(address == DMA_ERROR_CODE)) {
2077                 /*
2078                  * setting next_address here will let the address
2079                  * allocator only scan the new allocated range in the
2080                  * first run. This is a small optimization.
2081                  */
2082                 dma_dom->next_address = dma_dom->aperture_size;
2083
2084                 if (alloc_new_range(dma_dom, false, GFP_ATOMIC))
2085                         goto out;
2086
2087                 /*
2088                  * aperture was successfully enlarged by 128 MB, try
2089                  * allocation again
2090                  */
2091                 goto retry;
2092         }
2093
2094         start = address;
2095         for (i = 0; i < pages; ++i) {
2096                 ret = dma_ops_domain_map(dma_dom, start, paddr, dir);
2097                 if (ret == DMA_ERROR_CODE)
2098                         goto out_unmap;
2099
2100                 paddr += PAGE_SIZE;
2101                 start += PAGE_SIZE;
2102         }
2103         address += offset;
2104
2105         ADD_STATS_COUNTER(alloced_io_mem, size);
2106
2107         if (unlikely(dma_dom->need_flush && !amd_iommu_unmap_flush)) {
2108                 domain_flush_tlb(&dma_dom->domain);
2109                 dma_dom->need_flush = false;
2110         } else if (unlikely(amd_iommu_np_cache))
2111                 domain_flush_pages(&dma_dom->domain, address, size);
2112
2113 out:
2114         return address;
2115
2116 out_unmap:
2117
2118         for (--i; i >= 0; --i) {
2119                 start -= PAGE_SIZE;
2120                 dma_ops_domain_unmap(dma_dom, start);
2121         }
2122
2123         dma_ops_free_addresses(dma_dom, address, pages);
2124
2125         return DMA_ERROR_CODE;
2126 }
2127
2128 /*
2129  * Does the reverse of the __map_single function. Must be called with
2130  * the domain lock held too
2131  */
2132 static void __unmap_single(struct dma_ops_domain *dma_dom,
2133                            dma_addr_t dma_addr,
2134                            size_t size,
2135                            int dir)
2136 {
2137         dma_addr_t flush_addr;
2138         dma_addr_t i, start;
2139         unsigned int pages;
2140
2141         if ((dma_addr == DMA_ERROR_CODE) ||
2142             (dma_addr + size > dma_dom->aperture_size))
2143                 return;
2144
2145         flush_addr = dma_addr;
2146         pages = iommu_num_pages(dma_addr, size, PAGE_SIZE);
2147         dma_addr &= PAGE_MASK;
2148         start = dma_addr;
2149
2150         for (i = 0; i < pages; ++i) {
2151                 dma_ops_domain_unmap(dma_dom, start);
2152                 start += PAGE_SIZE;
2153         }
2154
2155         SUB_STATS_COUNTER(alloced_io_mem, size);
2156
2157         dma_ops_free_addresses(dma_dom, dma_addr, pages);
2158
2159         if (amd_iommu_unmap_flush || dma_dom->need_flush) {
2160                 domain_flush_pages(&dma_dom->domain, flush_addr, size);
2161                 dma_dom->need_flush = false;
2162         }
2163 }
2164
2165 /*
2166  * The exported map_single function for dma_ops.
2167  */
2168 static dma_addr_t map_page(struct device *dev, struct page *page,
2169                            unsigned long offset, size_t size,
2170                            enum dma_data_direction dir,
2171                            struct dma_attrs *attrs)
2172 {
2173         unsigned long flags;
2174         struct protection_domain *domain;
2175         dma_addr_t addr;
2176         u64 dma_mask;
2177         phys_addr_t paddr = page_to_phys(page) + offset;
2178
2179         INC_STATS_COUNTER(cnt_map_single);
2180
2181         domain = get_domain(dev);
2182         if (PTR_ERR(domain) == -EINVAL)
2183                 return (dma_addr_t)paddr;
2184         else if (IS_ERR(domain))
2185                 return DMA_ERROR_CODE;
2186
2187         dma_mask = *dev->dma_mask;
2188
2189         spin_lock_irqsave(&domain->lock, flags);
2190
2191         addr = __map_single(dev, domain->priv, paddr, size, dir, false,
2192                             dma_mask);
2193         if (addr == DMA_ERROR_CODE)
2194                 goto out;
2195
2196         domain_flush_complete(domain);
2197
2198 out:
2199         spin_unlock_irqrestore(&domain->lock, flags);
2200
2201         return addr;
2202 }
2203
2204 /*
2205  * The exported unmap_single function for dma_ops.
2206  */
2207 static void unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
2208                        enum dma_data_direction dir, struct dma_attrs *attrs)
2209 {
2210         unsigned long flags;
2211         struct protection_domain *domain;
2212
2213         INC_STATS_COUNTER(cnt_unmap_single);
2214
2215         domain = get_domain(dev);
2216         if (IS_ERR(domain))
2217                 return;
2218
2219         spin_lock_irqsave(&domain->lock, flags);
2220
2221         __unmap_single(domain->priv, dma_addr, size, dir);
2222
2223         domain_flush_complete(domain);
2224
2225         spin_unlock_irqrestore(&domain->lock, flags);
2226 }
2227
2228 /*
2229  * This is a special map_sg function which is used if we should map a
2230  * device which is not handled by an AMD IOMMU in the system.
2231  */
2232 static int map_sg_no_iommu(struct device *dev, struct scatterlist *sglist,
2233                            int nelems, int dir)
2234 {
2235         struct scatterlist *s;
2236         int i;
2237
2238         for_each_sg(sglist, s, nelems, i) {
2239                 s->dma_address = (dma_addr_t)sg_phys(s);
2240                 s->dma_length  = s->length;
2241         }
2242
2243         return nelems;
2244 }
2245
2246 /*
2247  * The exported map_sg function for dma_ops (handles scatter-gather
2248  * lists).
2249  */
2250 static int map_sg(struct device *dev, struct scatterlist *sglist,
2251                   int nelems, enum dma_data_direction dir,
2252                   struct dma_attrs *attrs)
2253 {
2254         unsigned long flags;
2255         struct protection_domain *domain;
2256         int i;
2257         struct scatterlist *s;
2258         phys_addr_t paddr;
2259         int mapped_elems = 0;
2260         u64 dma_mask;
2261
2262         INC_STATS_COUNTER(cnt_map_sg);
2263
2264         domain = get_domain(dev);
2265         if (PTR_ERR(domain) == -EINVAL)
2266                 return map_sg_no_iommu(dev, sglist, nelems, dir);
2267         else if (IS_ERR(domain))
2268                 return 0;
2269
2270         dma_mask = *dev->dma_mask;
2271
2272         spin_lock_irqsave(&domain->lock, flags);
2273
2274         for_each_sg(sglist, s, nelems, i) {
2275                 paddr = sg_phys(s);
2276
2277                 s->dma_address = __map_single(dev, domain->priv,
2278                                               paddr, s->length, dir, false,
2279                                               dma_mask);
2280
2281                 if (s->dma_address) {
2282                         s->dma_length = s->length;
2283                         mapped_elems++;
2284                 } else
2285                         goto unmap;
2286         }
2287
2288         domain_flush_complete(domain);
2289
2290 out:
2291         spin_unlock_irqrestore(&domain->lock, flags);
2292
2293         return mapped_elems;
2294 unmap:
2295         for_each_sg(sglist, s, mapped_elems, i) {
2296                 if (s->dma_address)
2297                         __unmap_single(domain->priv, s->dma_address,
2298                                        s->dma_length, dir);
2299                 s->dma_address = s->dma_length = 0;
2300         }
2301
2302         mapped_elems = 0;
2303
2304         goto out;
2305 }
2306
2307 /*
2308  * The exported map_sg function for dma_ops (handles scatter-gather
2309  * lists).
2310  */
2311 static void unmap_sg(struct device *dev, struct scatterlist *sglist,
2312                      int nelems, enum dma_data_direction dir,
2313                      struct dma_attrs *attrs)
2314 {
2315         unsigned long flags;
2316         struct protection_domain *domain;
2317         struct scatterlist *s;
2318         int i;
2319
2320         INC_STATS_COUNTER(cnt_unmap_sg);
2321
2322         domain = get_domain(dev);
2323         if (IS_ERR(domain))
2324                 return;
2325
2326         spin_lock_irqsave(&domain->lock, flags);
2327
2328         for_each_sg(sglist, s, nelems, i) {
2329                 __unmap_single(domain->priv, s->dma_address,
2330                                s->dma_length, dir);
2331                 s->dma_address = s->dma_length = 0;
2332         }
2333
2334         domain_flush_complete(domain);
2335
2336         spin_unlock_irqrestore(&domain->lock, flags);
2337 }
2338
2339 /*
2340  * The exported alloc_coherent function for dma_ops.
2341  */
2342 static void *alloc_coherent(struct device *dev, size_t size,
2343                             dma_addr_t *dma_addr, gfp_t flag)
2344 {
2345         unsigned long flags;
2346         void *virt_addr;
2347         struct protection_domain *domain;
2348         phys_addr_t paddr;
2349         u64 dma_mask = dev->coherent_dma_mask;
2350
2351         INC_STATS_COUNTER(cnt_alloc_coherent);
2352
2353         domain = get_domain(dev);
2354         if (PTR_ERR(domain) == -EINVAL) {
2355                 virt_addr = (void *)__get_free_pages(flag, get_order(size));
2356                 *dma_addr = __pa(virt_addr);
2357                 return virt_addr;
2358         } else if (IS_ERR(domain))
2359                 return NULL;
2360
2361         dma_mask  = dev->coherent_dma_mask;
2362         flag     &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
2363         flag     |= __GFP_ZERO;
2364
2365         virt_addr = (void *)__get_free_pages(flag, get_order(size));
2366         if (!virt_addr)
2367                 return NULL;
2368
2369         paddr = virt_to_phys(virt_addr);
2370
2371         if (!dma_mask)
2372                 dma_mask = *dev->dma_mask;
2373
2374         spin_lock_irqsave(&domain->lock, flags);
2375
2376         *dma_addr = __map_single(dev, domain->priv, paddr,
2377                                  size, DMA_BIDIRECTIONAL, true, dma_mask);
2378
2379         if (*dma_addr == DMA_ERROR_CODE) {
2380                 spin_unlock_irqrestore(&domain->lock, flags);
2381                 goto out_free;
2382         }
2383
2384         domain_flush_complete(domain);
2385
2386         spin_unlock_irqrestore(&domain->lock, flags);
2387
2388         return virt_addr;
2389
2390 out_free:
2391
2392         free_pages((unsigned long)virt_addr, get_order(size));
2393
2394         return NULL;
2395 }
2396
2397 /*
2398  * The exported free_coherent function for dma_ops.
2399  */
2400 static void free_coherent(struct device *dev, size_t size,
2401                           void *virt_addr, dma_addr_t dma_addr)
2402 {
2403         unsigned long flags;
2404         struct protection_domain *domain;
2405
2406         INC_STATS_COUNTER(cnt_free_coherent);
2407
2408         domain = get_domain(dev);
2409         if (IS_ERR(domain))
2410                 goto free_mem;
2411
2412         spin_lock_irqsave(&domain->lock, flags);
2413
2414         __unmap_single(domain->priv, dma_addr, size, DMA_BIDIRECTIONAL);
2415
2416         domain_flush_complete(domain);
2417
2418         spin_unlock_irqrestore(&domain->lock, flags);
2419
2420 free_mem:
2421         free_pages((unsigned long)virt_addr, get_order(size));
2422 }
2423
2424 /*
2425  * This function is called by the DMA layer to find out if we can handle a
2426  * particular device. It is part of the dma_ops.
2427  */
2428 static int amd_iommu_dma_supported(struct device *dev, u64 mask)
2429 {
2430         return check_device(dev);
2431 }
2432
2433 /*
2434  * The function for pre-allocating protection domains.
2435  *
2436  * If the driver core informs the DMA layer if a driver grabs a device
2437  * we don't need to preallocate the protection domains anymore.
2438  * For now we have to.
2439  */
2440 static void prealloc_protection_domains(void)
2441 {
2442         struct pci_dev *dev = NULL;
2443         struct dma_ops_domain *dma_dom;
2444         u16 devid;
2445
2446         for_each_pci_dev(dev) {
2447
2448                 /* Do we handle this device? */
2449                 if (!check_device(&dev->dev))
2450                         continue;
2451
2452                 /* Is there already any domain for it? */
2453                 if (domain_for_device(&dev->dev))
2454                         continue;
2455
2456                 devid = get_device_id(&dev->dev);
2457
2458                 dma_dom = dma_ops_domain_alloc();
2459                 if (!dma_dom)
2460                         continue;
2461                 init_unity_mappings_for_device(dma_dom, devid);
2462                 dma_dom->target_dev = devid;
2463
2464                 attach_device(&dev->dev, &dma_dom->domain);
2465
2466                 list_add_tail(&dma_dom->list, &iommu_pd_list);
2467         }
2468 }
2469
2470 static struct dma_map_ops amd_iommu_dma_ops = {
2471         .alloc_coherent = alloc_coherent,
2472         .free_coherent = free_coherent,
2473         .map_page = map_page,
2474         .unmap_page = unmap_page,
2475         .map_sg = map_sg,
2476         .unmap_sg = unmap_sg,
2477         .dma_supported = amd_iommu_dma_supported,
2478 };
2479
2480 static unsigned device_dma_ops_init(void)
2481 {
2482         struct pci_dev *pdev = NULL;
2483         unsigned unhandled = 0;
2484
2485         for_each_pci_dev(pdev) {
2486                 if (!check_device(&pdev->dev)) {
2487                         unhandled += 1;
2488                         continue;
2489                 }
2490
2491                 pdev->dev.archdata.dma_ops = &amd_iommu_dma_ops;
2492         }
2493
2494         return unhandled;
2495 }
2496
2497 /*
2498  * The function which clues the AMD IOMMU driver into dma_ops.
2499  */
2500
2501 void __init amd_iommu_init_api(void)
2502 {
2503         register_iommu(&amd_iommu_ops);
2504 }
2505
2506 int __init amd_iommu_init_dma_ops(void)
2507 {
2508         struct amd_iommu *iommu;
2509         int ret, unhandled;
2510
2511         /*
2512          * first allocate a default protection domain for every IOMMU we
2513          * found in the system. Devices not assigned to any other
2514          * protection domain will be assigned to the default one.
2515          */
2516         for_each_iommu(iommu) {
2517                 iommu->default_dom = dma_ops_domain_alloc();
2518                 if (iommu->default_dom == NULL)
2519                         return -ENOMEM;
2520                 iommu->default_dom->domain.flags |= PD_DEFAULT_MASK;
2521                 ret = iommu_init_unity_mappings(iommu);
2522                 if (ret)
2523                         goto free_domains;
2524         }
2525
2526         /*
2527          * Pre-allocate the protection domains for each device.
2528          */
2529         prealloc_protection_domains();
2530
2531         iommu_detected = 1;
2532         swiotlb = 0;
2533
2534         /* Make the driver finally visible to the drivers */
2535         unhandled = device_dma_ops_init();
2536         if (unhandled && max_pfn > MAX_DMA32_PFN) {
2537                 /* There are unhandled devices - initialize swiotlb for them */
2538                 swiotlb = 1;
2539         }
2540
2541         amd_iommu_stats_init();
2542
2543         return 0;
2544
2545 free_domains:
2546
2547         for_each_iommu(iommu) {
2548                 if (iommu->default_dom)
2549                         dma_ops_domain_free(iommu->default_dom);
2550         }
2551
2552         return ret;
2553 }
2554
2555 /*****************************************************************************
2556  *
2557  * The following functions belong to the exported interface of AMD IOMMU
2558  *
2559  * This interface allows access to lower level functions of the IOMMU
2560  * like protection domain handling and assignement of devices to domains
2561  * which is not possible with the dma_ops interface.
2562  *
2563  *****************************************************************************/
2564
2565 static void cleanup_domain(struct protection_domain *domain)
2566 {
2567         struct iommu_dev_data *dev_data, *next;
2568         unsigned long flags;
2569
2570         write_lock_irqsave(&amd_iommu_devtable_lock, flags);
2571
2572         list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {
2573                 __detach_device(dev_data);
2574                 atomic_set(&dev_data->bind, 0);
2575         }
2576
2577         write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
2578 }
2579
2580 static void protection_domain_free(struct protection_domain *domain)
2581 {
2582         if (!domain)
2583                 return;
2584
2585         del_domain_from_list(domain);
2586
2587         if (domain->id)
2588                 domain_id_free(domain->id);
2589
2590         kfree(domain);
2591 }
2592
2593 static struct protection_domain *protection_domain_alloc(void)
2594 {
2595         struct protection_domain *domain;
2596
2597         domain = kzalloc(sizeof(*domain), GFP_KERNEL);
2598         if (!domain)
2599                 return NULL;
2600
2601         spin_lock_init(&domain->lock);
2602         mutex_init(&domain->api_lock);
2603         domain->id = domain_id_alloc();
2604         if (!domain->id)
2605                 goto out_err;
2606         INIT_LIST_HEAD(&domain->dev_list);
2607
2608         add_domain_to_list(domain);
2609
2610         return domain;
2611
2612 out_err:
2613         kfree(domain);
2614
2615         return NULL;
2616 }
2617
2618 static int amd_iommu_domain_init(struct iommu_domain *dom)
2619 {
2620         struct protection_domain *domain;
2621
2622         domain = protection_domain_alloc();
2623         if (!domain)
2624                 goto out_free;
2625
2626         domain->mode    = PAGE_MODE_3_LEVEL;
2627         domain->pt_root = (void *)get_zeroed_page(GFP_KERNEL);
2628         if (!domain->pt_root)
2629                 goto out_free;
2630
2631         dom->priv = domain;
2632
2633         return 0;
2634
2635 out_free:
2636         protection_domain_free(domain);
2637
2638         return -ENOMEM;
2639 }
2640
2641 static void amd_iommu_domain_destroy(struct iommu_domain *dom)
2642 {
2643         struct protection_domain *domain = dom->priv;
2644
2645         if (!domain)
2646                 return;
2647
2648         if (domain->dev_cnt > 0)
2649                 cleanup_domain(domain);
2650
2651         BUG_ON(domain->dev_cnt != 0);
2652
2653         free_pagetable(domain);
2654
2655         protection_domain_free(domain);
2656
2657         dom->priv = NULL;
2658 }
2659
2660 static void amd_iommu_detach_device(struct iommu_domain *dom,
2661                                     struct device *dev)
2662 {
2663         struct iommu_dev_data *dev_data = dev->archdata.iommu;
2664         struct amd_iommu *iommu;
2665         u16 devid;
2666
2667         if (!check_device(dev))
2668                 return;
2669
2670         devid = get_device_id(dev);
2671
2672         if (dev_data->domain != NULL)
2673                 detach_device(dev);
2674
2675         iommu = amd_iommu_rlookup_table[devid];
2676         if (!iommu)
2677                 return;
2678
2679         iommu_completion_wait(iommu);
2680 }
2681
2682 static int amd_iommu_attach_device(struct iommu_domain *dom,
2683                                    struct device *dev)
2684 {
2685         struct protection_domain *domain = dom->priv;
2686         struct iommu_dev_data *dev_data;
2687         struct amd_iommu *iommu;
2688         int ret;
2689
2690         if (!check_device(dev))
2691                 return -EINVAL;
2692
2693         dev_data = dev->archdata.iommu;
2694
2695         iommu = amd_iommu_rlookup_table[dev_data->devid];
2696         if (!iommu)
2697                 return -EINVAL;
2698
2699         if (dev_data->domain)
2700                 detach_device(dev);
2701
2702         ret = attach_device(dev, domain);
2703
2704         iommu_completion_wait(iommu);
2705
2706         return ret;
2707 }
2708
2709 static int amd_iommu_map(struct iommu_domain *dom, unsigned long iova,
2710                          phys_addr_t paddr, int gfp_order, int iommu_prot)
2711 {
2712         unsigned long page_size = 0x1000UL << gfp_order;
2713         struct protection_domain *domain = dom->priv;
2714         int prot = 0;
2715         int ret;
2716
2717         if (iommu_prot & IOMMU_READ)
2718                 prot |= IOMMU_PROT_IR;
2719         if (iommu_prot & IOMMU_WRITE)
2720                 prot |= IOMMU_PROT_IW;
2721
2722         mutex_lock(&domain->api_lock);
2723         ret = iommu_map_page(domain, iova, paddr, prot, page_size);
2724         mutex_unlock(&domain->api_lock);
2725
2726         return ret;
2727 }
2728
2729 static int amd_iommu_unmap(struct iommu_domain *dom, unsigned long iova,
2730                            int gfp_order)
2731 {
2732         struct protection_domain *domain = dom->priv;
2733         unsigned long page_size, unmap_size;
2734
2735         page_size  = 0x1000UL << gfp_order;
2736
2737         mutex_lock(&domain->api_lock);
2738         unmap_size = iommu_unmap_page(domain, iova, page_size);
2739         mutex_unlock(&domain->api_lock);
2740
2741         domain_flush_tlb_pde(domain);
2742
2743         return get_order(unmap_size);
2744 }
2745
2746 static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom,
2747                                           unsigned long iova)
2748 {
2749         struct protection_domain *domain = dom->priv;
2750         unsigned long offset_mask;
2751         phys_addr_t paddr;
2752         u64 *pte, __pte;
2753
2754         pte = fetch_pte(domain, iova);
2755
2756         if (!pte || !IOMMU_PTE_PRESENT(*pte))
2757                 return 0;
2758
2759         if (PM_PTE_LEVEL(*pte) == 0)
2760                 offset_mask = PAGE_SIZE - 1;
2761         else
2762                 offset_mask = PTE_PAGE_SIZE(*pte) - 1;
2763
2764         __pte = *pte & PM_ADDR_MASK;
2765         paddr = (__pte & ~offset_mask) | (iova & offset_mask);
2766
2767         return paddr;
2768 }
2769
2770 static int amd_iommu_domain_has_cap(struct iommu_domain *domain,
2771                                     unsigned long cap)
2772 {
2773         switch (cap) {
2774         case IOMMU_CAP_CACHE_COHERENCY:
2775                 return 1;
2776         }
2777
2778         return 0;
2779 }
2780
2781 static struct iommu_ops amd_iommu_ops = {
2782         .domain_init = amd_iommu_domain_init,
2783         .domain_destroy = amd_iommu_domain_destroy,
2784         .attach_dev = amd_iommu_attach_device,
2785         .detach_dev = amd_iommu_detach_device,
2786         .map = amd_iommu_map,
2787         .unmap = amd_iommu_unmap,
2788         .iova_to_phys = amd_iommu_iova_to_phys,
2789         .domain_has_cap = amd_iommu_domain_has_cap,
2790 };
2791
2792 /*****************************************************************************
2793  *
2794  * The next functions do a basic initialization of IOMMU for pass through
2795  * mode
2796  *
2797  * In passthrough mode the IOMMU is initialized and enabled but not used for
2798  * DMA-API translation.
2799  *
2800  *****************************************************************************/
2801
2802 int __init amd_iommu_init_passthrough(void)
2803 {
2804         struct amd_iommu *iommu;
2805         struct pci_dev *dev = NULL;
2806         u16 devid;
2807
2808         /* allocate passthrough domain */
2809         pt_domain = protection_domain_alloc();
2810         if (!pt_domain)
2811                 return -ENOMEM;
2812
2813         pt_domain->mode |= PAGE_MODE_NONE;
2814
2815         for_each_pci_dev(dev) {
2816                 if (!check_device(&dev->dev))
2817                         continue;
2818
2819                 devid = get_device_id(&dev->dev);
2820
2821                 iommu = amd_iommu_rlookup_table[devid];
2822                 if (!iommu)
2823                         continue;
2824
2825                 attach_device(&dev->dev, pt_domain);
2826         }
2827
2828         pr_info("AMD-Vi: Initialized for Passthrough Mode\n");
2829
2830         return 0;
2831 }