1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#define pr_fmt(fmt) "DMAR: " fmt
22
23#include <linux/init.h>
24#include <linux/bitmap.h>
25#include <linux/debugfs.h>
26#include <linux/export.h>
27#include <linux/slab.h>
28#include <linux/irq.h>
29#include <linux/interrupt.h>
30#include <linux/spinlock.h>
31#include <linux/pci.h>
32#include <linux/dmar.h>
33#include <linux/dma-mapping.h>
34#include <linux/dma-direct.h>
35#include <linux/mempool.h>
36#include <linux/memory.h>
37#include <linux/cpu.h>
38#include <linux/timer.h>
39#include <linux/io.h>
40#include <linux/iova.h>
41#include <linux/iommu.h>
42#include <linux/intel-iommu.h>
43#include <linux/syscore_ops.h>
44#include <linux/tboot.h>
45#include <linux/dmi.h>
46#include <linux/pci-ats.h>
47#include <linux/memblock.h>
48#include <linux/dma-contiguous.h>
49#include <linux/dma-direct.h>
50#include <linux/crash_dump.h>
51#include <asm/irq_remapping.h>
52#include <asm/cacheflush.h>
53#include <asm/iommu.h>
54
55#include "irq_remapping.h"
56
57#define ROOT_SIZE VTD_PAGE_SIZE
58#define CONTEXT_SIZE VTD_PAGE_SIZE
59
60#define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
61#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
62#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
63#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
64
65#define IOAPIC_RANGE_START (0xfee00000)
66#define IOAPIC_RANGE_END (0xfeefffff)
67#define IOVA_START_ADDR (0x1000)
68
69#define DEFAULT_DOMAIN_ADDRESS_WIDTH 57
70
71#define MAX_AGAW_WIDTH 64
72#define MAX_AGAW_PFN_WIDTH (MAX_AGAW_WIDTH - VTD_PAGE_SHIFT)
73
74#define __DOMAIN_MAX_PFN(gaw) ((((uint64_t)1) << (gaw-VTD_PAGE_SHIFT)) - 1)
75#define __DOMAIN_MAX_ADDR(gaw) ((((uint64_t)1) << gaw) - 1)
76
77
78
79#define DOMAIN_MAX_PFN(gaw) ((unsigned long) min_t(uint64_t, \
80 __DOMAIN_MAX_PFN(gaw), (unsigned long)-1))
81#define DOMAIN_MAX_ADDR(gaw) (((uint64_t)__DOMAIN_MAX_PFN(gaw)) << VTD_PAGE_SHIFT)
82
83
84#define IOVA_START_PFN (1)
85
86#define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT)
87
88
89#define LEVEL_STRIDE (9)
90#define LEVEL_MASK (((u64)1 << LEVEL_STRIDE) - 1)
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108#define INTEL_IOMMU_PGSIZES (~0xFFFUL)
109
110static inline int agaw_to_level(int agaw)
111{
112 return agaw + 2;
113}
114
115static inline int agaw_to_width(int agaw)
116{
117 return min_t(int, 30 + agaw * LEVEL_STRIDE, MAX_AGAW_WIDTH);
118}
119
120static inline int width_to_agaw(int width)
121{
122 return DIV_ROUND_UP(width - 30, LEVEL_STRIDE);
123}
124
125static inline unsigned int level_to_offset_bits(int level)
126{
127 return (level - 1) * LEVEL_STRIDE;
128}
129
130static inline int pfn_level_offset(unsigned long pfn, int level)
131{
132 return (pfn >> level_to_offset_bits(level)) & LEVEL_MASK;
133}
134
135static inline unsigned long level_mask(int level)
136{
137 return -1UL << level_to_offset_bits(level);
138}
139
140static inline unsigned long level_size(int level)
141{
142 return 1UL << level_to_offset_bits(level);
143}
144
145static inline unsigned long align_to_level(unsigned long pfn, int level)
146{
147 return (pfn + level_size(level) - 1) & level_mask(level);
148}
149
150static inline unsigned long lvl_to_nr_pages(unsigned int lvl)
151{
152 return 1 << min_t(int, (lvl - 1) * LEVEL_STRIDE, MAX_AGAW_PFN_WIDTH);
153}
154
155
156
157static inline unsigned long dma_to_mm_pfn(unsigned long dma_pfn)
158{
159 return dma_pfn >> (PAGE_SHIFT - VTD_PAGE_SHIFT);
160}
161
162static inline unsigned long mm_to_dma_pfn(unsigned long mm_pfn)
163{
164 return mm_pfn << (PAGE_SHIFT - VTD_PAGE_SHIFT);
165}
166static inline unsigned long page_to_dma_pfn(struct page *pg)
167{
168 return mm_to_dma_pfn(page_to_pfn(pg));
169}
170static inline unsigned long virt_to_dma_pfn(void *p)
171{
172 return page_to_dma_pfn(virt_to_page(p));
173}
174
175
176static struct intel_iommu **g_iommus;
177
178static void __init check_tylersburg_isoch(void);
179static int rwbf_quirk;
180
181
182
183
184
185static int force_on = 0;
186int intel_iommu_tboot_noforce;
187
188
189
190
191
192
193
194struct root_entry {
195 u64 lo;
196 u64 hi;
197};
198#define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
199
200
201
202
203
204static phys_addr_t root_entry_lctp(struct root_entry *re)
205{
206 if (!(re->lo & 1))
207 return 0;
208
209 return re->lo & VTD_PAGE_MASK;
210}
211
212
213
214
215
216static phys_addr_t root_entry_uctp(struct root_entry *re)
217{
218 if (!(re->hi & 1))
219 return 0;
220
221 return re->hi & VTD_PAGE_MASK;
222}
223
224
225
226
227
228
229
230
231
232
233
234struct context_entry {
235 u64 lo;
236 u64 hi;
237};
238
239static inline void context_clear_pasid_enable(struct context_entry *context)
240{
241 context->lo &= ~(1ULL << 11);
242}
243
244static inline bool context_pasid_enabled(struct context_entry *context)
245{
246 return !!(context->lo & (1ULL << 11));
247}
248
249static inline void context_set_copied(struct context_entry *context)
250{
251 context->hi |= (1ull << 3);
252}
253
254static inline bool context_copied(struct context_entry *context)
255{
256 return !!(context->hi & (1ULL << 3));
257}
258
259static inline bool __context_present(struct context_entry *context)
260{
261 return (context->lo & 1);
262}
263
264static inline bool context_present(struct context_entry *context)
265{
266 return context_pasid_enabled(context) ?
267 __context_present(context) :
268 __context_present(context) && !context_copied(context);
269}
270
271static inline void context_set_present(struct context_entry *context)
272{
273 context->lo |= 1;
274}
275
276static inline void context_set_fault_enable(struct context_entry *context)
277{
278 context->lo &= (((u64)-1) << 2) | 1;
279}
280
281static inline void context_set_translation_type(struct context_entry *context,
282 unsigned long value)
283{
284 context->lo &= (((u64)-1) << 4) | 3;
285 context->lo |= (value & 3) << 2;
286}
287
288static inline void context_set_address_root(struct context_entry *context,
289 unsigned long value)
290{
291 context->lo &= ~VTD_PAGE_MASK;
292 context->lo |= value & VTD_PAGE_MASK;
293}
294
295static inline void context_set_address_width(struct context_entry *context,
296 unsigned long value)
297{
298 context->hi |= value & 7;
299}
300
301static inline void context_set_domain_id(struct context_entry *context,
302 unsigned long value)
303{
304 context->hi |= (value & ((1 << 16) - 1)) << 8;
305}
306
307static inline int context_domain_id(struct context_entry *c)
308{
309 return((c->hi >> 8) & 0xffff);
310}
311
312static inline void context_clear_entry(struct context_entry *context)
313{
314 context->lo = 0;
315 context->hi = 0;
316}
317
318
319
320
321
322
323
324
325
326
327struct dma_pte {
328 u64 val;
329};
330
331static inline void dma_clear_pte(struct dma_pte *pte)
332{
333 pte->val = 0;
334}
335
336static inline u64 dma_pte_addr(struct dma_pte *pte)
337{
338#ifdef CONFIG_64BIT
339 return pte->val & VTD_PAGE_MASK;
340#else
341
342 return __cmpxchg64(&pte->val, 0ULL, 0ULL) & VTD_PAGE_MASK;
343#endif
344}
345
346static inline bool dma_pte_present(struct dma_pte *pte)
347{
348 return (pte->val & 3) != 0;
349}
350
351static inline bool dma_pte_superpage(struct dma_pte *pte)
352{
353 return (pte->val & DMA_PTE_LARGE_PAGE);
354}
355
356static inline int first_pte_in_page(struct dma_pte *pte)
357{
358 return !((unsigned long)pte & ~VTD_PAGE_MASK);
359}
360
361
362
363
364
365
366
367static struct dmar_domain *si_domain;
368static int hw_pass_through = 1;
369
370
371
372
373
374#define DOMAIN_FLAG_VIRTUAL_MACHINE (1 << 0)
375
376
377#define DOMAIN_FLAG_STATIC_IDENTITY (1 << 1)
378
379#define for_each_domain_iommu(idx, domain) \
380 for (idx = 0; idx < g_num_of_iommus; idx++) \
381 if (domain->iommu_refcnt[idx])
382
383struct dmar_domain {
384 int nid;
385
386 unsigned iommu_refcnt[DMAR_UNITS_SUPPORTED];
387
388
389
390 u16 iommu_did[DMAR_UNITS_SUPPORTED];
391
392
393
394
395 bool has_iotlb_device;
396 struct list_head devices;
397 struct iova_domain iovad;
398
399 struct dma_pte *pgd;
400 int gaw;
401
402
403 int agaw;
404
405 int flags;
406
407 int iommu_coherency;
408 int iommu_snooping;
409 int iommu_count;
410 int iommu_superpage;
411
412
413 u64 max_addr;
414
415 struct iommu_domain domain;
416
417};
418
419
420struct device_domain_info {
421 struct list_head link;
422 struct list_head global;
423 u8 bus;
424 u8 devfn;
425 u8 pasid_supported:3;
426 u8 pasid_enabled:1;
427 u8 pri_supported:1;
428 u8 pri_enabled:1;
429 u8 ats_supported:1;
430 u8 ats_enabled:1;
431 u8 ats_qdep;
432 struct device *dev;
433 struct intel_iommu *iommu;
434 struct dmar_domain *domain;
435};
436
437struct dmar_rmrr_unit {
438 struct list_head list;
439 struct acpi_dmar_header *hdr;
440 u64 base_address;
441 u64 end_address;
442 struct dmar_dev_scope *devices;
443 int devices_cnt;
444 struct iommu_resv_region *resv;
445};
446
447struct dmar_atsr_unit {
448 struct list_head list;
449 struct acpi_dmar_header *hdr;
450 struct dmar_dev_scope *devices;
451 int devices_cnt;
452 u8 include_all:1;
453};
454
455static LIST_HEAD(dmar_atsr_units);
456static LIST_HEAD(dmar_rmrr_units);
457
458#define for_each_rmrr_units(rmrr) \
459 list_for_each_entry(rmrr, &dmar_rmrr_units, list)
460
461
462static int g_num_of_iommus;
463
464static void domain_exit(struct dmar_domain *domain);
465static void domain_remove_dev_info(struct dmar_domain *domain);
466static void dmar_remove_one_dev_info(struct dmar_domain *domain,
467 struct device *dev);
468static void __dmar_remove_one_dev_info(struct device_domain_info *info);
469static void domain_context_clear(struct intel_iommu *iommu,
470 struct device *dev);
471static int domain_detach_iommu(struct dmar_domain *domain,
472 struct intel_iommu *iommu);
473
474#ifdef CONFIG_INTEL_IOMMU_DEFAULT_ON
475int dmar_disabled = 0;
476#else
477int dmar_disabled = 1;
478#endif
479
480int intel_iommu_enabled = 0;
481EXPORT_SYMBOL_GPL(intel_iommu_enabled);
482
483static int dmar_map_gfx = 1;
484static int dmar_forcedac;
485static int intel_iommu_strict;
486static int intel_iommu_superpage = 1;
487static int intel_iommu_ecs = 1;
488static int intel_iommu_pasid28;
489static int iommu_identity_mapping;
490
491#define IDENTMAP_ALL 1
492#define IDENTMAP_GFX 2
493#define IDENTMAP_AZALIA 4
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513#define ecs_enabled(iommu) (intel_iommu_ecs && ecap_ecs(iommu->ecap) && \
514 (intel_iommu_pasid28 || !ecap_broken_pasid(iommu->ecap)))
515
516
517#define pasid_enabled(iommu) (ecs_enabled(iommu) && \
518 (ecap_pasid(iommu->ecap) || ecap_broken_pasid(iommu->ecap)))
519
520int intel_iommu_gfx_mapped;
521EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
522
523#define DUMMY_DEVICE_DOMAIN_INFO ((struct device_domain_info *)(-1))
524static DEFINE_SPINLOCK(device_domain_lock);
525static LIST_HEAD(device_domain_list);
526
527const struct iommu_ops intel_iommu_ops;
528
529static bool translation_pre_enabled(struct intel_iommu *iommu)
530{
531 return (iommu->flags & VTD_FLAG_TRANS_PRE_ENABLED);
532}
533
534static void clear_translation_pre_enabled(struct intel_iommu *iommu)
535{
536 iommu->flags &= ~VTD_FLAG_TRANS_PRE_ENABLED;
537}
538
539static void init_translation_status(struct intel_iommu *iommu)
540{
541 u32 gsts;
542
543 gsts = readl(iommu->reg + DMAR_GSTS_REG);
544 if (gsts & DMA_GSTS_TES)
545 iommu->flags |= VTD_FLAG_TRANS_PRE_ENABLED;
546}
547
548
549static struct dmar_domain *to_dmar_domain(struct iommu_domain *dom)
550{
551 return container_of(dom, struct dmar_domain, domain);
552}
553
554static int __init intel_iommu_setup(char *str)
555{
556 if (!str)
557 return -EINVAL;
558 while (*str) {
559 if (!strncmp(str, "on", 2)) {
560 dmar_disabled = 0;
561 pr_info("IOMMU enabled\n");
562 } else if (!strncmp(str, "off", 3)) {
563 dmar_disabled = 1;
564 pr_info("IOMMU disabled\n");
565 } else if (!strncmp(str, "igfx_off", 8)) {
566 dmar_map_gfx = 0;
567 pr_info("Disable GFX device mapping\n");
568 } else if (!strncmp(str, "forcedac", 8)) {
569 pr_info("Forcing DAC for PCI devices\n");
570 dmar_forcedac = 1;
571 } else if (!strncmp(str, "strict", 6)) {
572 pr_info("Disable batched IOTLB flush\n");
573 intel_iommu_strict = 1;
574 } else if (!strncmp(str, "sp_off", 6)) {
575 pr_info("Disable supported super page\n");
576 intel_iommu_superpage = 0;
577 } else if (!strncmp(str, "ecs_off", 7)) {
578 printk(KERN_INFO
579 "Intel-IOMMU: disable extended context table support\n");
580 intel_iommu_ecs = 0;
581 } else if (!strncmp(str, "pasid28", 7)) {
582 printk(KERN_INFO
583 "Intel-IOMMU: enable pre-production PASID support\n");
584 intel_iommu_pasid28 = 1;
585 iommu_identity_mapping |= IDENTMAP_GFX;
586 } else if (!strncmp(str, "tboot_noforce", 13)) {
587 printk(KERN_INFO
588 "Intel-IOMMU: not forcing on after tboot. This could expose security risk for tboot\n");
589 intel_iommu_tboot_noforce = 1;
590 }
591
592 str += strcspn(str, ",");
593 while (*str == ',')
594 str++;
595 }
596 return 0;
597}
598__setup("intel_iommu=", intel_iommu_setup);
599
600static struct kmem_cache *iommu_domain_cache;
601static struct kmem_cache *iommu_devinfo_cache;
602
603static struct dmar_domain* get_iommu_domain(struct intel_iommu *iommu, u16 did)
604{
605 struct dmar_domain **domains;
606 int idx = did >> 8;
607
608 domains = iommu->domains[idx];
609 if (!domains)
610 return NULL;
611
612 return domains[did & 0xff];
613}
614
615static void set_iommu_domain(struct intel_iommu *iommu, u16 did,
616 struct dmar_domain *domain)
617{
618 struct dmar_domain **domains;
619 int idx = did >> 8;
620
621 if (!iommu->domains[idx]) {
622 size_t size = 256 * sizeof(struct dmar_domain *);
623 iommu->domains[idx] = kzalloc(size, GFP_ATOMIC);
624 }
625
626 domains = iommu->domains[idx];
627 if (WARN_ON(!domains))
628 return;
629 else
630 domains[did & 0xff] = domain;
631}
632
633static inline void *alloc_pgtable_page(int node)
634{
635 struct page *page;
636 void *vaddr = NULL;
637
638 page = alloc_pages_node(node, GFP_ATOMIC | __GFP_ZERO, 0);
639 if (page)
640 vaddr = page_address(page);
641 return vaddr;
642}
643
644static inline void free_pgtable_page(void *vaddr)
645{
646 free_page((unsigned long)vaddr);
647}
648
649static inline void *alloc_domain_mem(void)
650{
651 return kmem_cache_alloc(iommu_domain_cache, GFP_ATOMIC);
652}
653
654static void free_domain_mem(void *vaddr)
655{
656 kmem_cache_free(iommu_domain_cache, vaddr);
657}
658
659static inline void * alloc_devinfo_mem(void)
660{
661 return kmem_cache_alloc(iommu_devinfo_cache, GFP_ATOMIC);
662}
663
664static inline void free_devinfo_mem(void *vaddr)
665{
666 kmem_cache_free(iommu_devinfo_cache, vaddr);
667}
668
669static inline int domain_type_is_vm(struct dmar_domain *domain)
670{
671 return domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE;
672}
673
674static inline int domain_type_is_si(struct dmar_domain *domain)
675{
676 return domain->flags & DOMAIN_FLAG_STATIC_IDENTITY;
677}
678
679static inline int domain_type_is_vm_or_si(struct dmar_domain *domain)
680{
681 return domain->flags & (DOMAIN_FLAG_VIRTUAL_MACHINE |
682 DOMAIN_FLAG_STATIC_IDENTITY);
683}
684
685static inline int domain_pfn_supported(struct dmar_domain *domain,
686 unsigned long pfn)
687{
688 int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT;
689
690 return !(addr_width < BITS_PER_LONG && pfn >> addr_width);
691}
692
693static int __iommu_calculate_agaw(struct intel_iommu *iommu, int max_gaw)
694{
695 unsigned long sagaw;
696 int agaw = -1;
697
698 sagaw = cap_sagaw(iommu->cap);
699 for (agaw = width_to_agaw(max_gaw);
700 agaw >= 0; agaw--) {
701 if (test_bit(agaw, &sagaw))
702 break;
703 }
704
705 return agaw;
706}
707
708
709
710
711int iommu_calculate_max_sagaw(struct intel_iommu *iommu)
712{
713 return __iommu_calculate_agaw(iommu, MAX_AGAW_WIDTH);
714}
715
716
717
718
719
720
721int iommu_calculate_agaw(struct intel_iommu *iommu)
722{
723 return __iommu_calculate_agaw(iommu, DEFAULT_DOMAIN_ADDRESS_WIDTH);
724}
725
726
727static struct intel_iommu *domain_get_iommu(struct dmar_domain *domain)
728{
729 int iommu_id;
730
731
732 BUG_ON(domain_type_is_vm_or_si(domain));
733 for_each_domain_iommu(iommu_id, domain)
734 break;
735
736 if (iommu_id < 0 || iommu_id >= g_num_of_iommus)
737 return NULL;
738
739 return g_iommus[iommu_id];
740}
741
742static void domain_update_iommu_coherency(struct dmar_domain *domain)
743{
744 struct dmar_drhd_unit *drhd;
745 struct intel_iommu *iommu;
746 bool found = false;
747 int i;
748
749 domain->iommu_coherency = 1;
750
751 for_each_domain_iommu(i, domain) {
752 found = true;
753 if (!ecap_coherent(g_iommus[i]->ecap)) {
754 domain->iommu_coherency = 0;
755 break;
756 }
757 }
758 if (found)
759 return;
760
761
762 rcu_read_lock();
763 for_each_active_iommu(iommu, drhd) {
764 if (!ecap_coherent(iommu->ecap)) {
765 domain->iommu_coherency = 0;
766 break;
767 }
768 }
769 rcu_read_unlock();
770}
771
772static int domain_update_iommu_snooping(struct intel_iommu *skip)
773{
774 struct dmar_drhd_unit *drhd;
775 struct intel_iommu *iommu;
776 int ret = 1;
777
778 rcu_read_lock();
779 for_each_active_iommu(iommu, drhd) {
780 if (iommu != skip) {
781 if (!ecap_sc_support(iommu->ecap)) {
782 ret = 0;
783 break;
784 }
785 }
786 }
787 rcu_read_unlock();
788
789 return ret;
790}
791
792static int domain_update_iommu_superpage(struct intel_iommu *skip)
793{
794 struct dmar_drhd_unit *drhd;
795 struct intel_iommu *iommu;
796 int mask = 0xf;
797
798 if (!intel_iommu_superpage) {
799 return 0;
800 }
801
802
803 rcu_read_lock();
804 for_each_active_iommu(iommu, drhd) {
805 if (iommu != skip) {
806 mask &= cap_super_page_val(iommu->cap);
807 if (!mask)
808 break;
809 }
810 }
811 rcu_read_unlock();
812
813 return fls(mask);
814}
815
816
817static void domain_update_iommu_cap(struct dmar_domain *domain)
818{
819 domain_update_iommu_coherency(domain);
820 domain->iommu_snooping = domain_update_iommu_snooping(NULL);
821 domain->iommu_superpage = domain_update_iommu_superpage(NULL);
822}
823
824static inline struct context_entry *iommu_context_addr(struct intel_iommu *iommu,
825 u8 bus, u8 devfn, int alloc)
826{
827 struct root_entry *root = &iommu->root_entry[bus];
828 struct context_entry *context;
829 u64 *entry;
830
831 entry = &root->lo;
832 if (ecs_enabled(iommu)) {
833 if (devfn >= 0x80) {
834 devfn -= 0x80;
835 entry = &root->hi;
836 }
837 devfn *= 2;
838 }
839 if (*entry & 1)
840 context = phys_to_virt(*entry & VTD_PAGE_MASK);
841 else {
842 unsigned long phy_addr;
843 if (!alloc)
844 return NULL;
845
846 context = alloc_pgtable_page(iommu->node);
847 if (!context)
848 return NULL;
849
850 __iommu_flush_cache(iommu, (void *)context, CONTEXT_SIZE);
851 phy_addr = virt_to_phys((void *)context);
852 *entry = phy_addr | 1;
853 __iommu_flush_cache(iommu, entry, sizeof(*entry));
854 }
855 return &context[devfn];
856}
857
858static int iommu_dummy(struct device *dev)
859{
860 return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO;
861}
862
863static struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn)
864{
865 struct dmar_drhd_unit *drhd = NULL;
866 struct intel_iommu *iommu;
867 struct device *tmp;
868 struct pci_dev *ptmp, *pdev = NULL;
869 u16 segment = 0;
870 int i;
871
872 if (iommu_dummy(dev))
873 return NULL;
874
875 if (dev_is_pci(dev)) {
876 struct pci_dev *pf_pdev;
877
878 pdev = to_pci_dev(dev);
879
880#ifdef CONFIG_X86
881
882 if (is_vmd(pdev->bus))
883 return NULL;
884#endif
885
886
887
888 pf_pdev = pci_physfn(pdev);
889 dev = &pf_pdev->dev;
890 segment = pci_domain_nr(pdev->bus);
891 } else if (has_acpi_companion(dev))
892 dev = &ACPI_COMPANION(dev)->dev;
893
894 rcu_read_lock();
895 for_each_active_iommu(iommu, drhd) {
896 if (pdev && segment != drhd->segment)
897 continue;
898
899 for_each_active_dev_scope(drhd->devices,
900 drhd->devices_cnt, i, tmp) {
901 if (tmp == dev) {
902
903
904
905
906 if (pdev && pdev->is_virtfn)
907 goto got_pdev;
908
909 *bus = drhd->devices[i].bus;
910 *devfn = drhd->devices[i].devfn;
911 goto out;
912 }
913
914 if (!pdev || !dev_is_pci(tmp))
915 continue;
916
917 ptmp = to_pci_dev(tmp);
918 if (ptmp->subordinate &&
919 ptmp->subordinate->number <= pdev->bus->number &&
920 ptmp->subordinate->busn_res.end >= pdev->bus->number)
921 goto got_pdev;
922 }
923
924 if (pdev && drhd->include_all) {
925 got_pdev:
926 *bus = pdev->bus->number;
927 *devfn = pdev->devfn;
928 goto out;
929 }
930 }
931 iommu = NULL;
932 out:
933 rcu_read_unlock();
934
935 return iommu;
936}
937
938static void domain_flush_cache(struct dmar_domain *domain,
939 void *addr, int size)
940{
941 if (!domain->iommu_coherency)
942 clflush_cache_range(addr, size);
943}
944
945static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn)
946{
947 struct context_entry *context;
948 int ret = 0;
949 unsigned long flags;
950
951 spin_lock_irqsave(&iommu->lock, flags);
952 context = iommu_context_addr(iommu, bus, devfn, 0);
953 if (context)
954 ret = context_present(context);
955 spin_unlock_irqrestore(&iommu->lock, flags);
956 return ret;
957}
958
959static void free_context_table(struct intel_iommu *iommu)
960{
961 int i;
962 unsigned long flags;
963 struct context_entry *context;
964
965 spin_lock_irqsave(&iommu->lock, flags);
966 if (!iommu->root_entry) {
967 goto out;
968 }
969 for (i = 0; i < ROOT_ENTRY_NR; i++) {
970 context = iommu_context_addr(iommu, i, 0, 0);
971 if (context)
972 free_pgtable_page(context);
973
974 if (!ecs_enabled(iommu))
975 continue;
976
977 context = iommu_context_addr(iommu, i, 0x80, 0);
978 if (context)
979 free_pgtable_page(context);
980
981 }
982 free_pgtable_page(iommu->root_entry);
983 iommu->root_entry = NULL;
984out:
985 spin_unlock_irqrestore(&iommu->lock, flags);
986}
987
988static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
989 unsigned long pfn, int *target_level)
990{
991 struct dma_pte *parent, *pte = NULL;
992 int level = agaw_to_level(domain->agaw);
993 int offset;
994
995 BUG_ON(!domain->pgd);
996
997 if (!domain_pfn_supported(domain, pfn))
998
999 return NULL;
1000
1001 parent = domain->pgd;
1002
1003 while (1) {
1004 void *tmp_page;
1005
1006 offset = pfn_level_offset(pfn, level);
1007 pte = &parent[offset];
1008 if (!*target_level && (dma_pte_superpage(pte) || !dma_pte_present(pte)))
1009 break;
1010 if (level == *target_level)
1011 break;
1012
1013 if (!dma_pte_present(pte)) {
1014 uint64_t pteval;
1015
1016 tmp_page = alloc_pgtable_page(domain->nid);
1017
1018 if (!tmp_page)
1019 return NULL;
1020
1021 domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE);
1022 pteval = ((uint64_t)virt_to_dma_pfn(tmp_page) << VTD_PAGE_SHIFT) | DMA_PTE_READ | DMA_PTE_WRITE;
1023 if (cmpxchg64(&pte->val, 0ULL, pteval))
1024
1025 free_pgtable_page(tmp_page);
1026 else
1027 domain_flush_cache(domain, pte, sizeof(*pte));
1028 }
1029 if (level == 1)
1030 break;
1031
1032 parent = phys_to_virt(dma_pte_addr(pte));
1033 level--;
1034 }
1035
1036 if (!*target_level)
1037 *target_level = level;
1038
1039 return pte;
1040}
1041
1042
1043
1044static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain,
1045 unsigned long pfn,
1046 int level, int *large_page)
1047{
1048 struct dma_pte *parent, *pte = NULL;
1049 int total = agaw_to_level(domain->agaw);
1050 int offset;
1051
1052 parent = domain->pgd;
1053 while (level <= total) {
1054 offset = pfn_level_offset(pfn, total);
1055 pte = &parent[offset];
1056 if (level == total)
1057 return pte;
1058
1059 if (!dma_pte_present(pte)) {
1060 *large_page = total;
1061 break;
1062 }
1063
1064 if (dma_pte_superpage(pte)) {
1065 *large_page = total;
1066 return pte;
1067 }
1068
1069 parent = phys_to_virt(dma_pte_addr(pte));
1070 total--;
1071 }
1072 return NULL;
1073}
1074
1075
1076static void dma_pte_clear_range(struct dmar_domain *domain,
1077 unsigned long start_pfn,
1078 unsigned long last_pfn)
1079{
1080 unsigned int large_page = 1;
1081 struct dma_pte *first_pte, *pte;
1082
1083 BUG_ON(!domain_pfn_supported(domain, start_pfn));
1084 BUG_ON(!domain_pfn_supported(domain, last_pfn));
1085 BUG_ON(start_pfn > last_pfn);
1086
1087
1088 do {
1089 large_page = 1;
1090 first_pte = pte = dma_pfn_level_pte(domain, start_pfn, 1, &large_page);
1091 if (!pte) {
1092 start_pfn = align_to_level(start_pfn + 1, large_page + 1);
1093 continue;
1094 }
1095 do {
1096 dma_clear_pte(pte);
1097 start_pfn += lvl_to_nr_pages(large_page);
1098 pte++;
1099 } while (start_pfn <= last_pfn && !first_pte_in_page(pte));
1100
1101 domain_flush_cache(domain, first_pte,
1102 (void *)pte - (void *)first_pte);
1103
1104 } while (start_pfn && start_pfn <= last_pfn);
1105}
1106
1107static void dma_pte_free_level(struct dmar_domain *domain, int level,
1108 int retain_level, struct dma_pte *pte,
1109 unsigned long pfn, unsigned long start_pfn,
1110 unsigned long last_pfn)
1111{
1112 pfn = max(start_pfn, pfn);
1113 pte = &pte[pfn_level_offset(pfn, level)];
1114
1115 do {
1116 unsigned long level_pfn;
1117 struct dma_pte *level_pte;
1118
1119 if (!dma_pte_present(pte) || dma_pte_superpage(pte))
1120 goto next;
1121
1122 level_pfn = pfn & level_mask(level);
1123 level_pte = phys_to_virt(dma_pte_addr(pte));
1124
1125 if (level > 2) {
1126 dma_pte_free_level(domain, level - 1, retain_level,
1127 level_pte, level_pfn, start_pfn,
1128 last_pfn);
1129 }
1130
1131
1132
1133
1134
1135 if (level < retain_level && !(start_pfn > level_pfn ||
1136 last_pfn < level_pfn + level_size(level) - 1)) {
1137 dma_clear_pte(pte);
1138 domain_flush_cache(domain, pte, sizeof(*pte));
1139 free_pgtable_page(level_pte);
1140 }
1141next:
1142 pfn += level_size(level);
1143 } while (!first_pte_in_page(++pte) && pfn <= last_pfn);
1144}
1145
1146
1147
1148
1149
1150static void dma_pte_free_pagetable(struct dmar_domain *domain,
1151 unsigned long start_pfn,
1152 unsigned long last_pfn,
1153 int retain_level)
1154{
1155 BUG_ON(!domain_pfn_supported(domain, start_pfn));
1156 BUG_ON(!domain_pfn_supported(domain, last_pfn));
1157 BUG_ON(start_pfn > last_pfn);
1158
1159 dma_pte_clear_range(domain, start_pfn, last_pfn);
1160
1161
1162 dma_pte_free_level(domain, agaw_to_level(domain->agaw), retain_level,
1163 domain->pgd, 0, start_pfn, last_pfn);
1164
1165
1166 if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) {
1167 free_pgtable_page(domain->pgd);
1168 domain->pgd = NULL;
1169 }
1170}
1171
1172
1173
1174
1175
1176
1177
1178static struct page *dma_pte_list_pagetables(struct dmar_domain *domain,
1179 int level, struct dma_pte *pte,
1180 struct page *freelist)
1181{
1182 struct page *pg;
1183
1184 pg = pfn_to_page(dma_pte_addr(pte) >> PAGE_SHIFT);
1185 pg->freelist = freelist;
1186 freelist = pg;
1187
1188 if (level == 1)
1189 return freelist;
1190
1191 pte = page_address(pg);
1192 do {
1193 if (dma_pte_present(pte) && !dma_pte_superpage(pte))
1194 freelist = dma_pte_list_pagetables(domain, level - 1,
1195 pte, freelist);
1196 pte++;
1197 } while (!first_pte_in_page(pte));
1198
1199 return freelist;
1200}
1201
1202static struct page *dma_pte_clear_level(struct dmar_domain *domain, int level,
1203 struct dma_pte *pte, unsigned long pfn,
1204 unsigned long start_pfn,
1205 unsigned long last_pfn,
1206 struct page *freelist)
1207{
1208 struct dma_pte *first_pte = NULL, *last_pte = NULL;
1209
1210 pfn = max(start_pfn, pfn);
1211 pte = &pte[pfn_level_offset(pfn, level)];
1212
1213 do {
1214 unsigned long level_pfn;
1215
1216 if (!dma_pte_present(pte))
1217 goto next;
1218
1219 level_pfn = pfn & level_mask(level);
1220
1221
1222 if (start_pfn <= level_pfn &&
1223 last_pfn >= level_pfn + level_size(level) - 1) {
1224
1225
1226 if (level > 1 && !dma_pte_superpage(pte))
1227 freelist = dma_pte_list_pagetables(domain, level - 1, pte, freelist);
1228
1229 dma_clear_pte(pte);
1230 if (!first_pte)
1231 first_pte = pte;
1232 last_pte = pte;
1233 } else if (level > 1) {
1234
1235 freelist = dma_pte_clear_level(domain, level - 1,
1236 phys_to_virt(dma_pte_addr(pte)),
1237 level_pfn, start_pfn, last_pfn,
1238 freelist);
1239 }
1240next:
1241 pfn += level_size(level);
1242 } while (!first_pte_in_page(++pte) && pfn <= last_pfn);
1243
1244 if (first_pte)
1245 domain_flush_cache(domain, first_pte,
1246 (void *)++last_pte - (void *)first_pte);
1247
1248 return freelist;
1249}
1250
1251
1252
1253
1254static struct page *domain_unmap(struct dmar_domain *domain,
1255 unsigned long start_pfn,
1256 unsigned long last_pfn)
1257{
1258 struct page *freelist = NULL;
1259
1260 BUG_ON(!domain_pfn_supported(domain, start_pfn));
1261 BUG_ON(!domain_pfn_supported(domain, last_pfn));
1262 BUG_ON(start_pfn > last_pfn);
1263
1264
1265 freelist = dma_pte_clear_level(domain, agaw_to_level(domain->agaw),
1266 domain->pgd, 0, start_pfn, last_pfn, NULL);
1267
1268
1269 if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) {
1270 struct page *pgd_page = virt_to_page(domain->pgd);
1271 pgd_page->freelist = freelist;
1272 freelist = pgd_page;
1273
1274 domain->pgd = NULL;
1275 }
1276
1277 return freelist;
1278}
1279
1280static void dma_free_pagelist(struct page *freelist)
1281{
1282 struct page *pg;
1283
1284 while ((pg = freelist)) {
1285 freelist = pg->freelist;
1286 free_pgtable_page(page_address(pg));
1287 }
1288}
1289
1290static void iova_entry_free(unsigned long data)
1291{
1292 struct page *freelist = (struct page *)data;
1293
1294 dma_free_pagelist(freelist);
1295}
1296
1297
1298static int iommu_alloc_root_entry(struct intel_iommu *iommu)
1299{
1300 struct root_entry *root;
1301 unsigned long flags;
1302
1303 root = (struct root_entry *)alloc_pgtable_page(iommu->node);
1304 if (!root) {
1305 pr_err("Allocating root entry for %s failed\n",
1306 iommu->name);
1307 return -ENOMEM;
1308 }
1309
1310 __iommu_flush_cache(iommu, root, ROOT_SIZE);
1311
1312 spin_lock_irqsave(&iommu->lock, flags);
1313 iommu->root_entry = root;
1314 spin_unlock_irqrestore(&iommu->lock, flags);
1315
1316 return 0;
1317}
1318
1319static void iommu_set_root_entry(struct intel_iommu *iommu)
1320{
1321 u64 addr;
1322 u32 sts;
1323 unsigned long flag;
1324
1325 addr = virt_to_phys(iommu->root_entry);
1326 if (ecs_enabled(iommu))
1327 addr |= DMA_RTADDR_RTT;
1328
1329 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1330 dmar_writeq(iommu->reg + DMAR_RTADDR_REG, addr);
1331
1332 writel(iommu->gcmd | DMA_GCMD_SRTP, iommu->reg + DMAR_GCMD_REG);
1333
1334
1335 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1336 readl, (sts & DMA_GSTS_RTPS), sts);
1337
1338 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1339}
1340
1341static void iommu_flush_write_buffer(struct intel_iommu *iommu)
1342{
1343 u32 val;
1344 unsigned long flag;
1345
1346 if (!rwbf_quirk && !cap_rwbf(iommu->cap))
1347 return;
1348
1349 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1350 writel(iommu->gcmd | DMA_GCMD_WBF, iommu->reg + DMAR_GCMD_REG);
1351
1352
1353 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1354 readl, (!(val & DMA_GSTS_WBFS)), val);
1355
1356 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1357}
1358
1359
1360static void __iommu_flush_context(struct intel_iommu *iommu,
1361 u16 did, u16 source_id, u8 function_mask,
1362 u64 type)
1363{
1364 u64 val = 0;
1365 unsigned long flag;
1366
1367 switch (type) {
1368 case DMA_CCMD_GLOBAL_INVL:
1369 val = DMA_CCMD_GLOBAL_INVL;
1370 break;
1371 case DMA_CCMD_DOMAIN_INVL:
1372 val = DMA_CCMD_DOMAIN_INVL|DMA_CCMD_DID(did);
1373 break;
1374 case DMA_CCMD_DEVICE_INVL:
1375 val = DMA_CCMD_DEVICE_INVL|DMA_CCMD_DID(did)
1376 | DMA_CCMD_SID(source_id) | DMA_CCMD_FM(function_mask);
1377 break;
1378 default:
1379 BUG();
1380 }
1381 val |= DMA_CCMD_ICC;
1382
1383 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1384 dmar_writeq(iommu->reg + DMAR_CCMD_REG, val);
1385
1386
1387 IOMMU_WAIT_OP(iommu, DMAR_CCMD_REG,
1388 dmar_readq, (!(val & DMA_CCMD_ICC)), val);
1389
1390 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1391}
1392
1393
1394static void __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did,
1395 u64 addr, unsigned int size_order, u64 type)
1396{
1397 int tlb_offset = ecap_iotlb_offset(iommu->ecap);
1398 u64 val = 0, val_iva = 0;
1399 unsigned long flag;
1400
1401 switch (type) {
1402 case DMA_TLB_GLOBAL_FLUSH:
1403
1404 val = DMA_TLB_GLOBAL_FLUSH|DMA_TLB_IVT;
1405 break;
1406 case DMA_TLB_DSI_FLUSH:
1407 val = DMA_TLB_DSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
1408 break;
1409 case DMA_TLB_PSI_FLUSH:
1410 val = DMA_TLB_PSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
1411
1412 val_iva = size_order | addr;
1413 break;
1414 default:
1415 BUG();
1416 }
1417
1418#if 0
1419
1420
1421
1422
1423 if (cap_read_drain(iommu->cap))
1424 val |= DMA_TLB_READ_DRAIN;
1425#endif
1426 if (cap_write_drain(iommu->cap))
1427 val |= DMA_TLB_WRITE_DRAIN;
1428
1429 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1430
1431 if (val_iva)
1432 dmar_writeq(iommu->reg + tlb_offset, val_iva);
1433 dmar_writeq(iommu->reg + tlb_offset + 8, val);
1434
1435
1436 IOMMU_WAIT_OP(iommu, tlb_offset + 8,
1437 dmar_readq, (!(val & DMA_TLB_IVT)), val);
1438
1439 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1440
1441
1442 if (DMA_TLB_IAIG(val) == 0)
1443 pr_err("Flush IOTLB failed\n");
1444 if (DMA_TLB_IAIG(val) != DMA_TLB_IIRG(type))
1445 pr_debug("TLB flush request %Lx, actual %Lx\n",
1446 (unsigned long long)DMA_TLB_IIRG(type),
1447 (unsigned long long)DMA_TLB_IAIG(val));
1448}
1449
1450static struct device_domain_info *
1451iommu_support_dev_iotlb (struct dmar_domain *domain, struct intel_iommu *iommu,
1452 u8 bus, u8 devfn)
1453{
1454 struct device_domain_info *info;
1455
1456 assert_spin_locked(&device_domain_lock);
1457
1458 if (!iommu->qi)
1459 return NULL;
1460
1461 list_for_each_entry(info, &domain->devices, link)
1462 if (info->iommu == iommu && info->bus == bus &&
1463 info->devfn == devfn) {
1464 if (info->ats_supported && info->dev)
1465 return info;
1466 break;
1467 }
1468
1469 return NULL;
1470}
1471
1472static void domain_update_iotlb(struct dmar_domain *domain)
1473{
1474 struct device_domain_info *info;
1475 bool has_iotlb_device = false;
1476
1477 assert_spin_locked(&device_domain_lock);
1478
1479 list_for_each_entry(info, &domain->devices, link) {
1480 struct pci_dev *pdev;
1481
1482 if (!info->dev || !dev_is_pci(info->dev))
1483 continue;
1484
1485 pdev = to_pci_dev(info->dev);
1486 if (pdev->ats_enabled) {
1487 has_iotlb_device = true;
1488 break;
1489 }
1490 }
1491
1492 domain->has_iotlb_device = has_iotlb_device;
1493}
1494
1495static void iommu_enable_dev_iotlb(struct device_domain_info *info)
1496{
1497 struct pci_dev *pdev;
1498
1499 assert_spin_locked(&device_domain_lock);
1500
1501 if (!info || !dev_is_pci(info->dev))
1502 return;
1503
1504 pdev = to_pci_dev(info->dev);
1505
1506#ifdef CONFIG_INTEL_IOMMU_SVM
1507
1508
1509
1510
1511
1512 if (info->pasid_supported && !pci_enable_pasid(pdev, info->pasid_supported & ~1))
1513 info->pasid_enabled = 1;
1514
1515 if (info->pri_supported && !pci_reset_pri(pdev) && !pci_enable_pri(pdev, 32))
1516 info->pri_enabled = 1;
1517#endif
1518 if (info->ats_supported && !pci_enable_ats(pdev, VTD_PAGE_SHIFT)) {
1519 info->ats_enabled = 1;
1520 domain_update_iotlb(info->domain);
1521 info->ats_qdep = pci_ats_queue_depth(pdev);
1522 }
1523}
1524
1525static void iommu_disable_dev_iotlb(struct device_domain_info *info)
1526{
1527 struct pci_dev *pdev;
1528
1529 assert_spin_locked(&device_domain_lock);
1530
1531 if (!dev_is_pci(info->dev))
1532 return;
1533
1534 pdev = to_pci_dev(info->dev);
1535
1536 if (info->ats_enabled) {
1537 pci_disable_ats(pdev);
1538 info->ats_enabled = 0;
1539 domain_update_iotlb(info->domain);
1540 }
1541#ifdef CONFIG_INTEL_IOMMU_SVM
1542 if (info->pri_enabled) {
1543 pci_disable_pri(pdev);
1544 info->pri_enabled = 0;
1545 }
1546 if (info->pasid_enabled) {
1547 pci_disable_pasid(pdev);
1548 info->pasid_enabled = 0;
1549 }
1550#endif
1551}
1552
1553static void iommu_flush_dev_iotlb(struct dmar_domain *domain,
1554 u64 addr, unsigned mask)
1555{
1556 u16 sid, qdep;
1557 unsigned long flags;
1558 struct device_domain_info *info;
1559
1560 if (!domain->has_iotlb_device)
1561 return;
1562
1563 spin_lock_irqsave(&device_domain_lock, flags);
1564 list_for_each_entry(info, &domain->devices, link) {
1565 if (!info->ats_enabled)
1566 continue;
1567
1568 sid = info->bus << 8 | info->devfn;
1569 qdep = info->ats_qdep;
1570 qi_flush_dev_iotlb(info->iommu, sid, qdep, addr, mask);
1571 }
1572 spin_unlock_irqrestore(&device_domain_lock, flags);
1573}
1574
1575static void iommu_flush_iotlb_psi(struct intel_iommu *iommu,
1576 struct dmar_domain *domain,
1577 unsigned long pfn, unsigned int pages,
1578 int ih, int map)
1579{
1580 unsigned int mask = ilog2(__roundup_pow_of_two(pages));
1581 uint64_t addr = (uint64_t)pfn << VTD_PAGE_SHIFT;
1582 u16 did = domain->iommu_did[iommu->seq_id];
1583
1584 BUG_ON(pages == 0);
1585
1586 if (ih)
1587 ih = 1 << 6;
1588
1589
1590
1591
1592
1593
1594 if (!cap_pgsel_inv(iommu->cap) || mask > cap_max_amask_val(iommu->cap))
1595 iommu->flush.flush_iotlb(iommu, did, 0, 0,
1596 DMA_TLB_DSI_FLUSH);
1597 else
1598 iommu->flush.flush_iotlb(iommu, did, addr | ih, mask,
1599 DMA_TLB_PSI_FLUSH);
1600
1601
1602
1603
1604
1605 if (!cap_caching_mode(iommu->cap) || !map)
1606 iommu_flush_dev_iotlb(domain, addr, mask);
1607}
1608
1609static void iommu_flush_iova(struct iova_domain *iovad)
1610{
1611 struct dmar_domain *domain;
1612 int idx;
1613
1614 domain = container_of(iovad, struct dmar_domain, iovad);
1615
1616 for_each_domain_iommu(idx, domain) {
1617 struct intel_iommu *iommu = g_iommus[idx];
1618 u16 did = domain->iommu_did[iommu->seq_id];
1619
1620 iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH);
1621
1622 if (!cap_caching_mode(iommu->cap))
1623 iommu_flush_dev_iotlb(get_iommu_domain(iommu, did),
1624 0, MAX_AGAW_PFN_WIDTH);
1625 }
1626}
1627
1628static void iommu_disable_protect_mem_regions(struct intel_iommu *iommu)
1629{
1630 u32 pmen;
1631 unsigned long flags;
1632
1633 raw_spin_lock_irqsave(&iommu->register_lock, flags);
1634 pmen = readl(iommu->reg + DMAR_PMEN_REG);
1635 pmen &= ~DMA_PMEN_EPM;
1636 writel(pmen, iommu->reg + DMAR_PMEN_REG);
1637
1638
1639 IOMMU_WAIT_OP(iommu, DMAR_PMEN_REG,
1640 readl, !(pmen & DMA_PMEN_PRS), pmen);
1641
1642 raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1643}
1644
1645static void iommu_enable_translation(struct intel_iommu *iommu)
1646{
1647 u32 sts;
1648 unsigned long flags;
1649
1650 raw_spin_lock_irqsave(&iommu->register_lock, flags);
1651 iommu->gcmd |= DMA_GCMD_TE;
1652 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1653
1654
1655 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1656 readl, (sts & DMA_GSTS_TES), sts);
1657
1658 raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1659}
1660
1661static void iommu_disable_translation(struct intel_iommu *iommu)
1662{
1663 u32 sts;
1664 unsigned long flag;
1665
1666 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1667 iommu->gcmd &= ~DMA_GCMD_TE;
1668 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1669
1670
1671 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1672 readl, (!(sts & DMA_GSTS_TES)), sts);
1673
1674 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1675}
1676
1677
1678static int iommu_init_domains(struct intel_iommu *iommu)
1679{
1680 u32 ndomains, nlongs;
1681 size_t size;
1682
1683 ndomains = cap_ndoms(iommu->cap);
1684 pr_debug("%s: Number of Domains supported <%d>\n",
1685 iommu->name, ndomains);
1686 nlongs = BITS_TO_LONGS(ndomains);
1687
1688 spin_lock_init(&iommu->lock);
1689
1690 iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), GFP_KERNEL);
1691 if (!iommu->domain_ids) {
1692 pr_err("%s: Allocating domain id array failed\n",
1693 iommu->name);
1694 return -ENOMEM;
1695 }
1696
1697 size = (ALIGN(ndomains, 256) >> 8) * sizeof(struct dmar_domain **);
1698 iommu->domains = kzalloc(size, GFP_KERNEL);
1699
1700 if (iommu->domains) {
1701 size = 256 * sizeof(struct dmar_domain *);
1702 iommu->domains[0] = kzalloc(size, GFP_KERNEL);
1703 }
1704
1705 if (!iommu->domains || !iommu->domains[0]) {
1706 pr_err("%s: Allocating domain array failed\n",
1707 iommu->name);
1708 kfree(iommu->domain_ids);
1709 kfree(iommu->domains);
1710 iommu->domain_ids = NULL;
1711 iommu->domains = NULL;
1712 return -ENOMEM;
1713 }
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723 set_bit(0, iommu->domain_ids);
1724
1725 return 0;
1726}
1727
1728static void disable_dmar_iommu(struct intel_iommu *iommu)
1729{
1730 struct device_domain_info *info, *tmp;
1731 unsigned long flags;
1732
1733 if (!iommu->domains || !iommu->domain_ids)
1734 return;
1735
1736again:
1737 spin_lock_irqsave(&device_domain_lock, flags);
1738 list_for_each_entry_safe(info, tmp, &device_domain_list, global) {
1739 struct dmar_domain *domain;
1740
1741 if (info->iommu != iommu)
1742 continue;
1743
1744 if (!info->dev || !info->domain)
1745 continue;
1746
1747 domain = info->domain;
1748
1749 __dmar_remove_one_dev_info(info);
1750
1751 if (!domain_type_is_vm_or_si(domain)) {
1752
1753
1754
1755
1756
1757
1758 spin_unlock_irqrestore(&device_domain_lock, flags);
1759 domain_exit(domain);
1760 goto again;
1761 }
1762 }
1763 spin_unlock_irqrestore(&device_domain_lock, flags);
1764
1765 if (iommu->gcmd & DMA_GCMD_TE)
1766 iommu_disable_translation(iommu);
1767}
1768
1769static void free_dmar_iommu(struct intel_iommu *iommu)
1770{
1771 if ((iommu->domains) && (iommu->domain_ids)) {
1772 int elems = ALIGN(cap_ndoms(iommu->cap), 256) >> 8;
1773 int i;
1774
1775 for (i = 0; i < elems; i++)
1776 kfree(iommu->domains[i]);
1777 kfree(iommu->domains);
1778 kfree(iommu->domain_ids);
1779 iommu->domains = NULL;
1780 iommu->domain_ids = NULL;
1781 }
1782
1783 g_iommus[iommu->seq_id] = NULL;
1784
1785
1786 free_context_table(iommu);
1787
1788#ifdef CONFIG_INTEL_IOMMU_SVM
1789 if (pasid_enabled(iommu)) {
1790 if (ecap_prs(iommu->ecap))
1791 intel_svm_finish_prq(iommu);
1792 intel_svm_free_pasid_tables(iommu);
1793 }
1794#endif
1795}
1796
1797static struct dmar_domain *alloc_domain(int flags)
1798{
1799 struct dmar_domain *domain;
1800
1801 domain = alloc_domain_mem();
1802 if (!domain)
1803 return NULL;
1804
1805 memset(domain, 0, sizeof(*domain));
1806 domain->nid = -1;
1807 domain->flags = flags;
1808 domain->has_iotlb_device = false;
1809 INIT_LIST_HEAD(&domain->devices);
1810
1811 return domain;
1812}
1813
1814
1815static int domain_attach_iommu(struct dmar_domain *domain,
1816 struct intel_iommu *iommu)
1817{
1818 unsigned long ndomains;
1819 int num;
1820
1821 assert_spin_locked(&device_domain_lock);
1822 assert_spin_locked(&iommu->lock);
1823
1824 domain->iommu_refcnt[iommu->seq_id] += 1;
1825 domain->iommu_count += 1;
1826 if (domain->iommu_refcnt[iommu->seq_id] == 1) {
1827 ndomains = cap_ndoms(iommu->cap);
1828 num = find_first_zero_bit(iommu->domain_ids, ndomains);
1829
1830 if (num >= ndomains) {
1831 pr_err("%s: No free domain ids\n", iommu->name);
1832 domain->iommu_refcnt[iommu->seq_id] -= 1;
1833 domain->iommu_count -= 1;
1834 return -ENOSPC;
1835 }
1836
1837 set_bit(num, iommu->domain_ids);
1838 set_iommu_domain(iommu, num, domain);
1839
1840 domain->iommu_did[iommu->seq_id] = num;
1841 domain->nid = iommu->node;
1842
1843 domain_update_iommu_cap(domain);
1844 }
1845
1846 return 0;
1847}
1848
1849static int domain_detach_iommu(struct dmar_domain *domain,
1850 struct intel_iommu *iommu)
1851{
1852 int num, count = INT_MAX;
1853
1854 assert_spin_locked(&device_domain_lock);
1855 assert_spin_locked(&iommu->lock);
1856
1857 domain->iommu_refcnt[iommu->seq_id] -= 1;
1858 count = --domain->iommu_count;
1859 if (domain->iommu_refcnt[iommu->seq_id] == 0) {
1860 num = domain->iommu_did[iommu->seq_id];
1861 clear_bit(num, iommu->domain_ids);
1862 set_iommu_domain(iommu, num, NULL);
1863
1864 domain_update_iommu_cap(domain);
1865 domain->iommu_did[iommu->seq_id] = 0;
1866 }
1867
1868 return count;
1869}
1870
1871static struct iova_domain reserved_iova_list;
1872static struct lock_class_key reserved_rbtree_key;
1873
1874static int dmar_init_reserved_ranges(void)
1875{
1876 struct pci_dev *pdev = NULL;
1877 struct iova *iova;
1878 int i;
1879
1880 init_iova_domain(&reserved_iova_list, VTD_PAGE_SIZE, IOVA_START_PFN);
1881
1882 lockdep_set_class(&reserved_iova_list.iova_rbtree_lock,
1883 &reserved_rbtree_key);
1884
1885
1886 iova = reserve_iova(&reserved_iova_list, IOVA_PFN(IOAPIC_RANGE_START),
1887 IOVA_PFN(IOAPIC_RANGE_END));
1888 if (!iova) {
1889 pr_err("Reserve IOAPIC range failed\n");
1890 return -ENODEV;
1891 }
1892
1893
1894 for_each_pci_dev(pdev) {
1895 struct resource *r;
1896
1897 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
1898 r = &pdev->resource[i];
1899 if (!r->flags || !(r->flags & IORESOURCE_MEM))
1900 continue;
1901 iova = reserve_iova(&reserved_iova_list,
1902 IOVA_PFN(r->start),
1903 IOVA_PFN(r->end));
1904 if (!iova) {
1905 pr_err("Reserve iova failed\n");
1906 return -ENODEV;
1907 }
1908 }
1909 }
1910 return 0;
1911}
1912
1913static void domain_reserve_special_ranges(struct dmar_domain *domain)
1914{
1915 copy_reserved_iova(&reserved_iova_list, &domain->iovad);
1916}
1917
1918static inline int guestwidth_to_adjustwidth(int gaw)
1919{
1920 int agaw;
1921 int r = (gaw - 12) % 9;
1922
1923 if (r == 0)
1924 agaw = gaw;
1925 else
1926 agaw = gaw + 9 - r;
1927 if (agaw > 64)
1928 agaw = 64;
1929 return agaw;
1930}
1931
1932static int domain_init(struct dmar_domain *domain, struct intel_iommu *iommu,
1933 int guest_width)
1934{
1935 int adjust_width, agaw;
1936 unsigned long sagaw;
1937 int err;
1938
1939 init_iova_domain(&domain->iovad, VTD_PAGE_SIZE, IOVA_START_PFN);
1940
1941 err = init_iova_flush_queue(&domain->iovad,
1942 iommu_flush_iova, iova_entry_free);
1943 if (err)
1944 return err;
1945
1946 domain_reserve_special_ranges(domain);
1947
1948
1949 if (guest_width > cap_mgaw(iommu->cap))
1950 guest_width = cap_mgaw(iommu->cap);
1951 domain->gaw = guest_width;
1952 adjust_width = guestwidth_to_adjustwidth(guest_width);
1953 agaw = width_to_agaw(adjust_width);
1954 sagaw = cap_sagaw(iommu->cap);
1955 if (!test_bit(agaw, &sagaw)) {
1956
1957 pr_debug("Hardware doesn't support agaw %d\n", agaw);
1958 agaw = find_next_bit(&sagaw, 5, agaw);
1959 if (agaw >= 5)
1960 return -ENODEV;
1961 }
1962 domain->agaw = agaw;
1963
1964 if (ecap_coherent(iommu->ecap))
1965 domain->iommu_coherency = 1;
1966 else
1967 domain->iommu_coherency = 0;
1968
1969 if (ecap_sc_support(iommu->ecap))
1970 domain->iommu_snooping = 1;
1971 else
1972 domain->iommu_snooping = 0;
1973
1974 if (intel_iommu_superpage)
1975 domain->iommu_superpage = fls(cap_super_page_val(iommu->cap));
1976 else
1977 domain->iommu_superpage = 0;
1978
1979 domain->nid = iommu->node;
1980
1981
1982 domain->pgd = (struct dma_pte *)alloc_pgtable_page(domain->nid);
1983 if (!domain->pgd)
1984 return -ENOMEM;
1985 __iommu_flush_cache(iommu, domain->pgd, PAGE_SIZE);
1986 return 0;
1987}
1988
1989static void domain_exit(struct dmar_domain *domain)
1990{
1991 struct page *freelist = NULL;
1992
1993
1994 if (!domain)
1995 return;
1996
1997
1998 rcu_read_lock();
1999 domain_remove_dev_info(domain);
2000 rcu_read_unlock();
2001
2002
2003 put_iova_domain(&domain->iovad);
2004
2005 freelist = domain_unmap(domain, 0, DOMAIN_MAX_PFN(domain->gaw));
2006
2007 dma_free_pagelist(freelist);
2008
2009 free_domain_mem(domain);
2010}
2011
2012static int domain_context_mapping_one(struct dmar_domain *domain,
2013 struct intel_iommu *iommu,
2014 u8 bus, u8 devfn)
2015{
2016 u16 did = domain->iommu_did[iommu->seq_id];
2017 int translation = CONTEXT_TT_MULTI_LEVEL;
2018 struct device_domain_info *info = NULL;
2019 struct context_entry *context;
2020 unsigned long flags;
2021 struct dma_pte *pgd;
2022 int ret, agaw;
2023
2024 WARN_ON(did == 0);
2025
2026 if (hw_pass_through && domain_type_is_si(domain))
2027 translation = CONTEXT_TT_PASS_THROUGH;
2028
2029 pr_debug("Set context mapping for %02x:%02x.%d\n",
2030 bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
2031
2032 BUG_ON(!domain->pgd);
2033
2034 spin_lock_irqsave(&device_domain_lock, flags);
2035 spin_lock(&iommu->lock);
2036
2037 ret = -ENOMEM;
2038 context = iommu_context_addr(iommu, bus, devfn, 1);
2039 if (!context)
2040 goto out_unlock;
2041
2042 ret = 0;
2043 if (context_present(context))
2044 goto out_unlock;
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055 if (context_copied(context)) {
2056 u16 did_old = context_domain_id(context);
2057
2058 if (did_old < cap_ndoms(iommu->cap)) {
2059 iommu->flush.flush_context(iommu, did_old,
2060 (((u16)bus) << 8) | devfn,
2061 DMA_CCMD_MASK_NOBIT,
2062 DMA_CCMD_DEVICE_INVL);
2063 iommu->flush.flush_iotlb(iommu, did_old, 0, 0,
2064 DMA_TLB_DSI_FLUSH);
2065 }
2066 }
2067
2068 pgd = domain->pgd;
2069
2070 context_clear_entry(context);
2071 context_set_domain_id(context, did);
2072
2073
2074
2075
2076
2077 if (translation != CONTEXT_TT_PASS_THROUGH) {
2078 for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
2079 ret = -ENOMEM;
2080 pgd = phys_to_virt(dma_pte_addr(pgd));
2081 if (!dma_pte_present(pgd))
2082 goto out_unlock;
2083 }
2084
2085 info = iommu_support_dev_iotlb(domain, iommu, bus, devfn);
2086 if (info && info->ats_supported)
2087 translation = CONTEXT_TT_DEV_IOTLB;
2088 else
2089 translation = CONTEXT_TT_MULTI_LEVEL;
2090
2091 context_set_address_root(context, virt_to_phys(pgd));
2092 context_set_address_width(context, iommu->agaw);
2093 } else {
2094
2095
2096
2097
2098
2099 context_set_address_width(context, iommu->msagaw);
2100 }
2101
2102 context_set_translation_type(context, translation);
2103 context_set_fault_enable(context);
2104 context_set_present(context);
2105 domain_flush_cache(domain, context, sizeof(*context));
2106
2107
2108
2109
2110
2111
2112
2113 if (cap_caching_mode(iommu->cap)) {
2114 iommu->flush.flush_context(iommu, 0,
2115 (((u16)bus) << 8) | devfn,
2116 DMA_CCMD_MASK_NOBIT,
2117 DMA_CCMD_DEVICE_INVL);
2118 iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH);
2119 } else {
2120 iommu_flush_write_buffer(iommu);
2121 }
2122 iommu_enable_dev_iotlb(info);
2123
2124 ret = 0;
2125
2126out_unlock:
2127 spin_unlock(&iommu->lock);
2128 spin_unlock_irqrestore(&device_domain_lock, flags);
2129
2130 return ret;
2131}
2132
2133struct domain_context_mapping_data {
2134 struct dmar_domain *domain;
2135 struct intel_iommu *iommu;
2136};
2137
2138static int domain_context_mapping_cb(struct pci_dev *pdev,
2139 u16 alias, void *opaque)
2140{
2141 struct domain_context_mapping_data *data = opaque;
2142
2143 return domain_context_mapping_one(data->domain, data->iommu,
2144 PCI_BUS_NUM(alias), alias & 0xff);
2145}
2146
2147static int
2148domain_context_mapping(struct dmar_domain *domain, struct device *dev)
2149{
2150 struct intel_iommu *iommu;
2151 u8 bus, devfn;
2152 struct domain_context_mapping_data data;
2153
2154 iommu = device_to_iommu(dev, &bus, &devfn);
2155 if (!iommu)
2156 return -ENODEV;
2157
2158 if (!dev_is_pci(dev))
2159 return domain_context_mapping_one(domain, iommu, bus, devfn);
2160
2161 data.domain = domain;
2162 data.iommu = iommu;
2163
2164 return pci_for_each_dma_alias(to_pci_dev(dev),
2165 &domain_context_mapping_cb, &data);
2166}
2167
2168static int domain_context_mapped_cb(struct pci_dev *pdev,
2169 u16 alias, void *opaque)
2170{
2171 struct intel_iommu *iommu = opaque;
2172
2173 return !device_context_mapped(iommu, PCI_BUS_NUM(alias), alias & 0xff);
2174}
2175
2176static int domain_context_mapped(struct device *dev)
2177{
2178 struct intel_iommu *iommu;
2179 u8 bus, devfn;
2180
2181 iommu = device_to_iommu(dev, &bus, &devfn);
2182 if (!iommu)
2183 return -ENODEV;
2184
2185 if (!dev_is_pci(dev))
2186 return device_context_mapped(iommu, bus, devfn);
2187
2188 return !pci_for_each_dma_alias(to_pci_dev(dev),
2189 domain_context_mapped_cb, iommu);
2190}
2191
2192
2193static inline unsigned long aligned_nrpages(unsigned long host_addr,
2194 size_t size)
2195{
2196 host_addr &= ~PAGE_MASK;
2197 return PAGE_ALIGN(host_addr + size) >> VTD_PAGE_SHIFT;
2198}
2199
2200
2201static inline int hardware_largepage_caps(struct dmar_domain *domain,
2202 unsigned long iov_pfn,
2203 unsigned long phy_pfn,
2204 unsigned long pages)
2205{
2206 int support, level = 1;
2207 unsigned long pfnmerge;
2208
2209 support = domain->iommu_superpage;
2210
2211
2212
2213
2214
2215 pfnmerge = iov_pfn | phy_pfn;
2216
2217 while (support && !(pfnmerge & ~VTD_STRIDE_MASK)) {
2218 pages >>= VTD_STRIDE_SHIFT;
2219 if (!pages)
2220 break;
2221 pfnmerge >>= VTD_STRIDE_SHIFT;
2222 level++;
2223 support--;
2224 }
2225 return level;
2226}
2227
2228static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2229 struct scatterlist *sg, unsigned long phys_pfn,
2230 unsigned long nr_pages, int prot)
2231{
2232 struct dma_pte *first_pte = NULL, *pte = NULL;
2233 phys_addr_t uninitialized_var(pteval);
2234 unsigned long sg_res = 0;
2235 unsigned int largepage_lvl = 0;
2236 unsigned long lvl_pages = 0;
2237
2238 BUG_ON(!domain_pfn_supported(domain, iov_pfn + nr_pages - 1));
2239
2240 if ((prot & (DMA_PTE_READ|DMA_PTE_WRITE)) == 0)
2241 return -EINVAL;
2242
2243 prot &= DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP;
2244
2245 if (!sg) {
2246 sg_res = nr_pages;
2247 pteval = ((phys_addr_t)phys_pfn << VTD_PAGE_SHIFT) | prot;
2248 }
2249
2250 while (nr_pages > 0) {
2251 uint64_t tmp;
2252
2253 if (!sg_res) {
2254 unsigned int pgoff = sg->offset & ~PAGE_MASK;
2255
2256 sg_res = aligned_nrpages(sg->offset, sg->length);
2257 sg->dma_address = ((dma_addr_t)iov_pfn << VTD_PAGE_SHIFT) + pgoff;
2258 sg->dma_length = sg->length;
2259 pteval = (sg_phys(sg) - pgoff) | prot;
2260 phys_pfn = pteval >> VTD_PAGE_SHIFT;
2261 }
2262
2263 if (!pte) {
2264 largepage_lvl = hardware_largepage_caps(domain, iov_pfn, phys_pfn, sg_res);
2265
2266 first_pte = pte = pfn_to_dma_pte(domain, iov_pfn, &largepage_lvl);
2267 if (!pte)
2268 return -ENOMEM;
2269
2270 if (largepage_lvl > 1) {
2271 unsigned long nr_superpages, end_pfn;
2272
2273 pteval |= DMA_PTE_LARGE_PAGE;
2274 lvl_pages = lvl_to_nr_pages(largepage_lvl);
2275
2276 nr_superpages = sg_res / lvl_pages;
2277 end_pfn = iov_pfn + nr_superpages * lvl_pages - 1;
2278
2279
2280
2281
2282
2283
2284
2285 dma_pte_free_pagetable(domain, iov_pfn, end_pfn,
2286 largepage_lvl + 1);
2287 } else {
2288 pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE;
2289 }
2290
2291 }
2292
2293
2294
2295 tmp = cmpxchg64_local(&pte->val, 0ULL, pteval);
2296 if (tmp) {
2297 static int dumps = 5;
2298 pr_crit("ERROR: DMA PTE for vPFN 0x%lx already set (to %llx not %llx)\n",
2299 iov_pfn, tmp, (unsigned long long)pteval);
2300 if (dumps) {
2301 dumps--;
2302 debug_dma_dump_mappings(NULL);
2303 }
2304 WARN_ON(1);
2305 }
2306
2307 lvl_pages = lvl_to_nr_pages(largepage_lvl);
2308
2309 BUG_ON(nr_pages < lvl_pages);
2310 BUG_ON(sg_res < lvl_pages);
2311
2312 nr_pages -= lvl_pages;
2313 iov_pfn += lvl_pages;
2314 phys_pfn += lvl_pages;
2315 pteval += lvl_pages * VTD_PAGE_SIZE;
2316 sg_res -= lvl_pages;
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329 pte++;
2330 if (!nr_pages || first_pte_in_page(pte) ||
2331 (largepage_lvl > 1 && sg_res < lvl_pages)) {
2332 domain_flush_cache(domain, first_pte,
2333 (void *)pte - (void *)first_pte);
2334 pte = NULL;
2335 }
2336
2337 if (!sg_res && nr_pages)
2338 sg = sg_next(sg);
2339 }
2340 return 0;
2341}
2342
2343static inline int domain_sg_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2344 struct scatterlist *sg, unsigned long nr_pages,
2345 int prot)
2346{
2347 return __domain_mapping(domain, iov_pfn, sg, 0, nr_pages, prot);
2348}
2349
2350static inline int domain_pfn_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2351 unsigned long phys_pfn, unsigned long nr_pages,
2352 int prot)
2353{
2354 return __domain_mapping(domain, iov_pfn, NULL, phys_pfn, nr_pages, prot);
2355}
2356
2357static void domain_context_clear_one(struct intel_iommu *iommu, u8 bus, u8 devfn)
2358{
2359 unsigned long flags;
2360 struct context_entry *context;
2361 u16 did_old;
2362
2363 if (!iommu)
2364 return;
2365
2366 spin_lock_irqsave(&iommu->lock, flags);
2367 context = iommu_context_addr(iommu, bus, devfn, 0);
2368 if (!context) {
2369 spin_unlock_irqrestore(&iommu->lock, flags);
2370 return;
2371 }
2372 did_old = context_domain_id(context);
2373 context_clear_entry(context);
2374 __iommu_flush_cache(iommu, context, sizeof(*context));
2375 spin_unlock_irqrestore(&iommu->lock, flags);
2376 iommu->flush.flush_context(iommu,
2377 did_old,
2378 (((u16)bus) << 8) | devfn,
2379 DMA_CCMD_MASK_NOBIT,
2380 DMA_CCMD_DEVICE_INVL);
2381 iommu->flush.flush_iotlb(iommu,
2382 did_old,
2383 0,
2384 0,
2385 DMA_TLB_DSI_FLUSH);
2386}
2387
2388static inline void unlink_domain_info(struct device_domain_info *info)
2389{
2390 assert_spin_locked(&device_domain_lock);
2391 list_del(&info->link);
2392 list_del(&info->global);
2393 if (info->dev)
2394 info->dev->archdata.iommu = NULL;
2395}
2396
2397static void domain_remove_dev_info(struct dmar_domain *domain)
2398{
2399 struct device_domain_info *info, *tmp;
2400 unsigned long flags;
2401
2402 spin_lock_irqsave(&device_domain_lock, flags);
2403 list_for_each_entry_safe(info, tmp, &domain->devices, link)
2404 __dmar_remove_one_dev_info(info);
2405 spin_unlock_irqrestore(&device_domain_lock, flags);
2406}
2407
2408
2409
2410
2411
2412static struct dmar_domain *find_domain(struct device *dev)
2413{
2414 struct device_domain_info *info;
2415
2416
2417 info = dev->archdata.iommu;
2418 if (likely(info))
2419 return info->domain;
2420 return NULL;
2421}
2422
2423static inline struct device_domain_info *
2424dmar_search_domain_by_dev_info(int segment, int bus, int devfn)
2425{
2426 struct device_domain_info *info;
2427
2428 list_for_each_entry(info, &device_domain_list, global)
2429 if (info->iommu->segment == segment && info->bus == bus &&
2430 info->devfn == devfn)
2431 return info;
2432
2433 return NULL;
2434}
2435
2436static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
2437 int bus, int devfn,
2438 struct device *dev,
2439 struct dmar_domain *domain)
2440{
2441 struct dmar_domain *found = NULL;
2442 struct device_domain_info *info;
2443 unsigned long flags;
2444 int ret;
2445
2446 info = alloc_devinfo_mem();
2447 if (!info)
2448 return NULL;
2449
2450 info->bus = bus;
2451 info->devfn = devfn;
2452 info->ats_supported = info->pasid_supported = info->pri_supported = 0;
2453 info->ats_enabled = info->pasid_enabled = info->pri_enabled = 0;
2454 info->ats_qdep = 0;
2455 info->dev = dev;
2456 info->domain = domain;
2457 info->iommu = iommu;
2458
2459 if (dev && dev_is_pci(dev)) {
2460 struct pci_dev *pdev = to_pci_dev(info->dev);
2461
2462 if (ecap_dev_iotlb_support(iommu->ecap) &&
2463 pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ATS) &&
2464 dmar_find_matched_atsr_unit(pdev))
2465 info->ats_supported = 1;
2466
2467 if (ecs_enabled(iommu)) {
2468 if (pasid_enabled(iommu)) {
2469 int features = pci_pasid_features(pdev);
2470 if (features >= 0)
2471 info->pasid_supported = features | 1;
2472 }
2473
2474 if (info->ats_supported && ecap_prs(iommu->ecap) &&
2475 pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI))
2476 info->pri_supported = 1;
2477 }
2478 }
2479
2480 spin_lock_irqsave(&device_domain_lock, flags);
2481 if (dev)
2482 found = find_domain(dev);
2483
2484 if (!found) {
2485 struct device_domain_info *info2;
2486 info2 = dmar_search_domain_by_dev_info(iommu->segment, bus, devfn);
2487 if (info2) {
2488 found = info2->domain;
2489 info2->dev = dev;
2490 }
2491 }
2492
2493 if (found) {
2494 spin_unlock_irqrestore(&device_domain_lock, flags);
2495 free_devinfo_mem(info);
2496
2497 return found;
2498 }
2499
2500 spin_lock(&iommu->lock);
2501 ret = domain_attach_iommu(domain, iommu);
2502 spin_unlock(&iommu->lock);
2503
2504 if (ret) {
2505 spin_unlock_irqrestore(&device_domain_lock, flags);
2506 free_devinfo_mem(info);
2507 return NULL;
2508 }
2509
2510 list_add(&info->link, &domain->devices);
2511 list_add(&info->global, &device_domain_list);
2512 if (dev)
2513 dev->archdata.iommu = info;
2514 spin_unlock_irqrestore(&device_domain_lock, flags);
2515
2516 if (dev && domain_context_mapping(domain, dev)) {
2517 pr_err("Domain context map for %s failed\n", dev_name(dev));
2518 dmar_remove_one_dev_info(domain, dev);
2519 return NULL;
2520 }
2521
2522 return domain;
2523}
2524
2525static int get_last_alias(struct pci_dev *pdev, u16 alias, void *opaque)
2526{
2527 *(u16 *)opaque = alias;
2528 return 0;
2529}
2530
2531static struct dmar_domain *find_or_alloc_domain(struct device *dev, int gaw)
2532{
2533 struct device_domain_info *info = NULL;
2534 struct dmar_domain *domain = NULL;
2535 struct intel_iommu *iommu;
2536 u16 req_id, dma_alias;
2537 unsigned long flags;
2538 u8 bus, devfn;
2539
2540 iommu = device_to_iommu(dev, &bus, &devfn);
2541 if (!iommu)
2542 return NULL;
2543
2544 req_id = ((u16)bus << 8) | devfn;
2545
2546 if (dev_is_pci(dev)) {
2547 struct pci_dev *pdev = to_pci_dev(dev);
2548
2549 pci_for_each_dma_alias(pdev, get_last_alias, &dma_alias);
2550
2551 spin_lock_irqsave(&device_domain_lock, flags);
2552 info = dmar_search_domain_by_dev_info(pci_domain_nr(pdev->bus),
2553 PCI_BUS_NUM(dma_alias),
2554 dma_alias & 0xff);
2555 if (info) {
2556 iommu = info->iommu;
2557 domain = info->domain;
2558 }
2559 spin_unlock_irqrestore(&device_domain_lock, flags);
2560
2561
2562 if (info)
2563 goto out;
2564 }
2565
2566
2567 domain = alloc_domain(0);
2568 if (!domain)
2569 return NULL;
2570 if (domain_init(domain, iommu, gaw)) {
2571 domain_exit(domain);
2572 return NULL;
2573 }
2574
2575out:
2576
2577 return domain;
2578}
2579
2580static struct dmar_domain *set_domain_for_dev(struct device *dev,
2581 struct dmar_domain *domain)
2582{
2583 struct intel_iommu *iommu;
2584 struct dmar_domain *tmp;
2585 u16 req_id, dma_alias;
2586 u8 bus, devfn;
2587
2588 iommu = device_to_iommu(dev, &bus, &devfn);
2589 if (!iommu)
2590 return NULL;
2591
2592 req_id = ((u16)bus << 8) | devfn;
2593
2594 if (dev_is_pci(dev)) {
2595 struct pci_dev *pdev = to_pci_dev(dev);
2596
2597 pci_for_each_dma_alias(pdev, get_last_alias, &dma_alias);
2598
2599
2600 if (req_id != dma_alias) {
2601 tmp = dmar_insert_one_dev_info(iommu, PCI_BUS_NUM(dma_alias),
2602 dma_alias & 0xff, NULL, domain);
2603
2604 if (!tmp || tmp != domain)
2605 return tmp;
2606 }
2607 }
2608
2609 tmp = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain);
2610 if (!tmp || tmp != domain)
2611 return tmp;
2612
2613 return domain;
2614}
2615
2616static struct dmar_domain *get_domain_for_dev(struct device *dev, int gaw)
2617{
2618 struct dmar_domain *domain, *tmp;
2619
2620 domain = find_domain(dev);
2621 if (domain)
2622 goto out;
2623
2624 domain = find_or_alloc_domain(dev, gaw);
2625 if (!domain)
2626 goto out;
2627
2628 tmp = set_domain_for_dev(dev, domain);
2629 if (!tmp || domain != tmp) {
2630 domain_exit(domain);
2631 domain = tmp;
2632 }
2633
2634out:
2635
2636 return domain;
2637}
2638
2639static int iommu_domain_identity_map(struct dmar_domain *domain,
2640 unsigned long long start,
2641 unsigned long long end)
2642{
2643 unsigned long first_vpfn = start >> VTD_PAGE_SHIFT;
2644 unsigned long last_vpfn = end >> VTD_PAGE_SHIFT;
2645
2646 if (!reserve_iova(&domain->iovad, dma_to_mm_pfn(first_vpfn),
2647 dma_to_mm_pfn(last_vpfn))) {
2648 pr_err("Reserving iova failed\n");
2649 return -ENOMEM;
2650 }
2651
2652 pr_debug("Mapping reserved region %llx-%llx\n", start, end);
2653
2654
2655
2656
2657 dma_pte_clear_range(domain, first_vpfn, last_vpfn);
2658
2659 return domain_pfn_mapping(domain, first_vpfn, first_vpfn,
2660 last_vpfn - first_vpfn + 1,
2661 DMA_PTE_READ|DMA_PTE_WRITE);
2662}
2663
2664static int domain_prepare_identity_map(struct device *dev,
2665 struct dmar_domain *domain,
2666 unsigned long long start,
2667 unsigned long long end)
2668{
2669
2670
2671
2672
2673 if (domain == si_domain && hw_pass_through) {
2674 pr_warn("Ignoring identity map for HW passthrough device %s [0x%Lx - 0x%Lx]\n",
2675 dev_name(dev), start, end);
2676 return 0;
2677 }
2678
2679 pr_info("Setting identity map for device %s [0x%Lx - 0x%Lx]\n",
2680 dev_name(dev), start, end);
2681
2682 if (end < start) {
2683 WARN(1, "Your BIOS is broken; RMRR ends before it starts!\n"
2684 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2685 dmi_get_system_info(DMI_BIOS_VENDOR),
2686 dmi_get_system_info(DMI_BIOS_VERSION),
2687 dmi_get_system_info(DMI_PRODUCT_VERSION));
2688 return -EIO;
2689 }
2690
2691 if (end >> agaw_to_width(domain->agaw)) {
2692 WARN(1, "Your BIOS is broken; RMRR exceeds permitted address width (%d bits)\n"
2693 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2694 agaw_to_width(domain->agaw),
2695 dmi_get_system_info(DMI_BIOS_VENDOR),
2696 dmi_get_system_info(DMI_BIOS_VERSION),
2697 dmi_get_system_info(DMI_PRODUCT_VERSION));
2698 return -EIO;
2699 }
2700
2701 return iommu_domain_identity_map(domain, start, end);
2702}
2703
2704static int iommu_prepare_identity_map(struct device *dev,
2705 unsigned long long start,
2706 unsigned long long end)
2707{
2708 struct dmar_domain *domain;
2709 int ret;
2710
2711 domain = get_domain_for_dev(dev, DEFAULT_DOMAIN_ADDRESS_WIDTH);
2712 if (!domain)
2713 return -ENOMEM;
2714
2715 ret = domain_prepare_identity_map(dev, domain, start, end);
2716 if (ret)
2717 domain_exit(domain);
2718
2719 return ret;
2720}
2721
2722static inline int iommu_prepare_rmrr_dev(struct dmar_rmrr_unit *rmrr,
2723 struct device *dev)
2724{
2725 if (dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
2726 return 0;
2727 return iommu_prepare_identity_map(dev, rmrr->base_address,
2728 rmrr->end_address);
2729}
2730
2731#ifdef CONFIG_INTEL_IOMMU_FLOPPY_WA
2732static inline void iommu_prepare_isa(void)
2733{
2734 struct pci_dev *pdev;
2735 int ret;
2736
2737 pdev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
2738 if (!pdev)
2739 return;
2740
2741 pr_info("Prepare 0-16MiB unity mapping for LPC\n");
2742 ret = iommu_prepare_identity_map(&pdev->dev, 0, 16*1024*1024 - 1);
2743
2744 if (ret)
2745 pr_err("Failed to create 0-16MiB identity map - floppy might not work\n");
2746
2747 pci_dev_put(pdev);
2748}
2749#else
2750static inline void iommu_prepare_isa(void)
2751{
2752 return;
2753}
2754#endif
2755
2756static int md_domain_init(struct dmar_domain *domain, int guest_width);
2757
2758static int __init si_domain_init(int hw)
2759{
2760 int nid, ret = 0;
2761
2762 si_domain = alloc_domain(DOMAIN_FLAG_STATIC_IDENTITY);
2763 if (!si_domain)
2764 return -EFAULT;
2765
2766 if (md_domain_init(si_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
2767 domain_exit(si_domain);
2768 return -EFAULT;
2769 }
2770
2771 pr_debug("Identity mapping domain allocated\n");
2772
2773 if (hw)
2774 return 0;
2775
2776 for_each_online_node(nid) {
2777 unsigned long start_pfn, end_pfn;
2778 int i;
2779
2780 for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
2781 ret = iommu_domain_identity_map(si_domain,
2782 PFN_PHYS(start_pfn), PFN_PHYS(end_pfn));
2783 if (ret)
2784 return ret;
2785 }
2786 }
2787
2788 return 0;
2789}
2790
2791static int identity_mapping(struct device *dev)
2792{
2793 struct device_domain_info *info;
2794
2795 if (likely(!iommu_identity_mapping))
2796 return 0;
2797
2798 info = dev->archdata.iommu;
2799 if (info && info != DUMMY_DEVICE_DOMAIN_INFO)
2800 return (info->domain == si_domain);
2801
2802 return 0;
2803}
2804
2805static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev)
2806{
2807 struct dmar_domain *ndomain;
2808 struct intel_iommu *iommu;
2809 u8 bus, devfn;
2810
2811 iommu = device_to_iommu(dev, &bus, &devfn);
2812 if (!iommu)
2813 return -ENODEV;
2814
2815 ndomain = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain);
2816 if (ndomain != domain)
2817 return -EBUSY;
2818
2819 return 0;
2820}
2821
2822static bool device_has_rmrr(struct device *dev)
2823{
2824 struct dmar_rmrr_unit *rmrr;
2825 struct device *tmp;
2826 int i;
2827
2828 rcu_read_lock();
2829 for_each_rmrr_units(rmrr) {
2830
2831
2832
2833
2834 for_each_active_dev_scope(rmrr->devices,
2835 rmrr->devices_cnt, i, tmp)
2836 if (tmp == dev) {
2837 rcu_read_unlock();
2838 return true;
2839 }
2840 }
2841 rcu_read_unlock();
2842 return false;
2843}
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867static bool device_is_rmrr_locked(struct device *dev)
2868{
2869 if (!device_has_rmrr(dev))
2870 return false;
2871
2872 if (dev_is_pci(dev)) {
2873 struct pci_dev *pdev = to_pci_dev(dev);
2874
2875 if (IS_USB_DEVICE(pdev) || IS_GFX_DEVICE(pdev))
2876 return false;
2877 }
2878
2879 return true;
2880}
2881
2882static int iommu_should_identity_map(struct device *dev, int startup)
2883{
2884
2885 if (dev_is_pci(dev)) {
2886 struct pci_dev *pdev = to_pci_dev(dev);
2887
2888 if (device_is_rmrr_locked(dev))
2889 return 0;
2890
2891 if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
2892 return 1;
2893
2894 if ((iommu_identity_mapping & IDENTMAP_GFX) && IS_GFX_DEVICE(pdev))
2895 return 1;
2896
2897 if (!(iommu_identity_mapping & IDENTMAP_ALL))
2898 return 0;
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917 if (!pci_is_pcie(pdev)) {
2918 if (!pci_is_root_bus(pdev->bus))
2919 return 0;
2920 if (pdev->class >> 8 == PCI_CLASS_BRIDGE_PCI)
2921 return 0;
2922 } else if (pci_pcie_type(pdev) == PCI_EXP_TYPE_PCI_BRIDGE)
2923 return 0;
2924 } else {
2925 if (device_has_rmrr(dev))
2926 return 0;
2927 }
2928
2929
2930
2931
2932
2933
2934 if (!startup) {
2935
2936
2937
2938
2939 u64 dma_mask = *dev->dma_mask;
2940
2941 if (dev->coherent_dma_mask &&
2942 dev->coherent_dma_mask < dma_mask)
2943 dma_mask = dev->coherent_dma_mask;
2944
2945 return dma_mask >= dma_get_required_mask(dev);
2946 }
2947
2948 return 1;
2949}
2950
2951static int __init dev_prepare_static_identity_mapping(struct device *dev, int hw)
2952{
2953 int ret;
2954
2955 if (!iommu_should_identity_map(dev, 1))
2956 return 0;
2957
2958 ret = domain_add_dev_info(si_domain, dev);
2959 if (!ret)
2960 pr_info("%s identity mapping for device %s\n",
2961 hw ? "Hardware" : "Software", dev_name(dev));
2962 else if (ret == -ENODEV)
2963
2964 ret = 0;
2965
2966 return ret;
2967}
2968
2969
2970static int __init iommu_prepare_static_identity_mapping(int hw)
2971{
2972 struct pci_dev *pdev = NULL;
2973 struct dmar_drhd_unit *drhd;
2974 struct intel_iommu *iommu;
2975 struct device *dev;
2976 int i;
2977 int ret = 0;
2978
2979 for_each_pci_dev(pdev) {
2980 ret = dev_prepare_static_identity_mapping(&pdev->dev, hw);
2981 if (ret)
2982 return ret;
2983 }
2984
2985 for_each_active_iommu(iommu, drhd)
2986 for_each_active_dev_scope(drhd->devices, drhd->devices_cnt, i, dev) {
2987 struct acpi_device_physical_node *pn;
2988 struct acpi_device *adev;
2989
2990 if (dev->bus != &acpi_bus_type)
2991 continue;
2992
2993 adev= to_acpi_device(dev);
2994 mutex_lock(&adev->physical_node_lock);
2995 list_for_each_entry(pn, &adev->physical_node_list, node) {
2996 ret = dev_prepare_static_identity_mapping(pn->dev, hw);
2997 if (ret)
2998 break;
2999 }
3000 mutex_unlock(&adev->physical_node_lock);
3001 if (ret)
3002 return ret;
3003 }
3004
3005 return 0;
3006}
3007
3008static void intel_iommu_init_qi(struct intel_iommu *iommu)
3009{
3010
3011
3012
3013
3014
3015
3016 if (!iommu->qi) {
3017
3018
3019
3020 dmar_fault(-1, iommu);
3021
3022
3023
3024
3025 dmar_disable_qi(iommu);
3026 }
3027
3028 if (dmar_enable_qi(iommu)) {
3029
3030
3031
3032 iommu->flush.flush_context = __iommu_flush_context;
3033 iommu->flush.flush_iotlb = __iommu_flush_iotlb;
3034 pr_info("%s: Using Register based invalidation\n",
3035 iommu->name);
3036 } else {
3037 iommu->flush.flush_context = qi_flush_context;
3038 iommu->flush.flush_iotlb = qi_flush_iotlb;
3039 pr_info("%s: Using Queued invalidation\n", iommu->name);
3040 }
3041}
3042
3043static int copy_context_table(struct intel_iommu *iommu,
3044 struct root_entry *old_re,
3045 struct context_entry **tbl,
3046 int bus, bool ext)
3047{
3048 int tbl_idx, pos = 0, idx, devfn, ret = 0, did;
3049 struct context_entry *new_ce = NULL, ce;
3050 struct context_entry *old_ce = NULL;
3051 struct root_entry re;
3052 phys_addr_t old_ce_phys;
3053
3054 tbl_idx = ext ? bus * 2 : bus;
3055 memcpy(&re, old_re, sizeof(re));
3056
3057 for (devfn = 0; devfn < 256; devfn++) {
3058
3059 idx = (ext ? devfn * 2 : devfn) % 256;
3060
3061 if (idx == 0) {
3062
3063 if (new_ce) {
3064 tbl[tbl_idx] = new_ce;
3065 __iommu_flush_cache(iommu, new_ce,
3066 VTD_PAGE_SIZE);
3067 pos = 1;
3068 }
3069
3070 if (old_ce)
3071 iounmap(old_ce);
3072
3073 ret = 0;
3074 if (devfn < 0x80)
3075 old_ce_phys = root_entry_lctp(&re);
3076 else
3077 old_ce_phys = root_entry_uctp(&re);
3078
3079 if (!old_ce_phys) {
3080 if (ext && devfn == 0) {
3081
3082 devfn = 0x7f;
3083 continue;
3084 } else {
3085 goto out;
3086 }
3087 }
3088
3089 ret = -ENOMEM;
3090 old_ce = memremap(old_ce_phys, PAGE_SIZE,
3091 MEMREMAP_WB);
3092 if (!old_ce)
3093 goto out;
3094
3095 new_ce = alloc_pgtable_page(iommu->node);
3096 if (!new_ce)
3097 goto out_unmap;
3098
3099 ret = 0;
3100 }
3101
3102
3103 memcpy(&ce, old_ce + idx, sizeof(ce));
3104
3105 if (!__context_present(&ce))
3106 continue;
3107
3108 did = context_domain_id(&ce);
3109 if (did >= 0 && did < cap_ndoms(iommu->cap))
3110 set_bit(did, iommu->domain_ids);
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128 context_clear_pasid_enable(&ce);
3129 context_set_copied(&ce);
3130
3131 new_ce[idx] = ce;
3132 }
3133
3134 tbl[tbl_idx + pos] = new_ce;
3135
3136 __iommu_flush_cache(iommu, new_ce, VTD_PAGE_SIZE);
3137
3138out_unmap:
3139 memunmap(old_ce);
3140
3141out:
3142 return ret;
3143}
3144
3145static int copy_translation_tables(struct intel_iommu *iommu)
3146{
3147 struct context_entry **ctxt_tbls;
3148 struct root_entry *old_rt;
3149 phys_addr_t old_rt_phys;
3150 int ctxt_table_entries;
3151 unsigned long flags;
3152 u64 rtaddr_reg;
3153 int bus, ret;
3154 bool new_ext, ext;
3155
3156 rtaddr_reg = dmar_readq(iommu->reg + DMAR_RTADDR_REG);
3157 ext = !!(rtaddr_reg & DMA_RTADDR_RTT);
3158 new_ext = !!ecap_ecs(iommu->ecap);
3159
3160
3161
3162
3163
3164
3165
3166 if (new_ext != ext)
3167 return -EINVAL;
3168
3169 old_rt_phys = rtaddr_reg & VTD_PAGE_MASK;
3170 if (!old_rt_phys)
3171 return -EINVAL;
3172
3173 old_rt = memremap(old_rt_phys, PAGE_SIZE, MEMREMAP_WB);
3174 if (!old_rt)
3175 return -ENOMEM;
3176
3177
3178 ctxt_table_entries = ext ? 512 : 256;
3179 ret = -ENOMEM;
3180 ctxt_tbls = kzalloc(ctxt_table_entries * sizeof(void *), GFP_KERNEL);
3181 if (!ctxt_tbls)
3182 goto out_unmap;
3183
3184 for (bus = 0; bus < 256; bus++) {
3185 ret = copy_context_table(iommu, &old_rt[bus],
3186 ctxt_tbls, bus, ext);
3187 if (ret) {
3188 pr_err("%s: Failed to copy context table for bus %d\n",
3189 iommu->name, bus);
3190 continue;
3191 }
3192 }
3193
3194 spin_lock_irqsave(&iommu->lock, flags);
3195
3196
3197 for (bus = 0; bus < 256; bus++) {
3198 int idx = ext ? bus * 2 : bus;
3199 u64 val;
3200
3201 if (ctxt_tbls[idx]) {
3202 val = virt_to_phys(ctxt_tbls[idx]) | 1;
3203 iommu->root_entry[bus].lo = val;
3204 }
3205
3206 if (!ext || !ctxt_tbls[idx + 1])
3207 continue;
3208
3209 val = virt_to_phys(ctxt_tbls[idx + 1]) | 1;
3210 iommu->root_entry[bus].hi = val;
3211 }
3212
3213 spin_unlock_irqrestore(&iommu->lock, flags);
3214
3215 kfree(ctxt_tbls);
3216
3217 __iommu_flush_cache(iommu, iommu->root_entry, PAGE_SIZE);
3218
3219 ret = 0;
3220
3221out_unmap:
3222 memunmap(old_rt);
3223
3224 return ret;
3225}
3226
3227static int __init init_dmars(void)
3228{
3229 struct dmar_drhd_unit *drhd;
3230 struct dmar_rmrr_unit *rmrr;
3231 bool copied_tables = false;
3232 struct device *dev;
3233 struct intel_iommu *iommu;
3234 int i, ret;
3235
3236
3237
3238
3239
3240
3241
3242 for_each_drhd_unit(drhd) {
3243
3244
3245
3246
3247
3248 if (g_num_of_iommus < DMAR_UNITS_SUPPORTED) {
3249 g_num_of_iommus++;
3250 continue;
3251 }
3252 pr_err_once("Exceeded %d IOMMUs\n", DMAR_UNITS_SUPPORTED);
3253 }
3254
3255
3256 if (g_num_of_iommus < DMAR_UNITS_SUPPORTED)
3257 g_num_of_iommus = DMAR_UNITS_SUPPORTED;
3258
3259 g_iommus = kcalloc(g_num_of_iommus, sizeof(struct intel_iommu *),
3260 GFP_KERNEL);
3261 if (!g_iommus) {
3262 pr_err("Allocating global iommu array failed\n");
3263 ret = -ENOMEM;
3264 goto error;
3265 }
3266
3267 for_each_active_iommu(iommu, drhd) {
3268 g_iommus[iommu->seq_id] = iommu;
3269
3270 intel_iommu_init_qi(iommu);
3271
3272 ret = iommu_init_domains(iommu);
3273 if (ret)
3274 goto free_iommu;
3275
3276 init_translation_status(iommu);
3277
3278 if (translation_pre_enabled(iommu) && !is_kdump_kernel()) {
3279 iommu_disable_translation(iommu);
3280 clear_translation_pre_enabled(iommu);
3281 pr_warn("Translation was enabled for %s but we are not in kdump mode\n",
3282 iommu->name);
3283 }
3284
3285
3286
3287
3288
3289
3290 ret = iommu_alloc_root_entry(iommu);
3291 if (ret)
3292 goto free_iommu;
3293
3294 if (translation_pre_enabled(iommu)) {
3295 pr_info("Translation already enabled - trying to copy translation structures\n");
3296
3297 ret = copy_translation_tables(iommu);
3298 if (ret) {
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308 pr_err("Failed to copy translation tables from previous kernel for %s\n",
3309 iommu->name);
3310 iommu_disable_translation(iommu);
3311 clear_translation_pre_enabled(iommu);
3312 } else {
3313 pr_info("Copied translation tables from previous kernel for %s\n",
3314 iommu->name);
3315 copied_tables = true;
3316 }
3317 }
3318
3319 if (!ecap_pass_through(iommu->ecap))
3320 hw_pass_through = 0;
3321#ifdef CONFIG_INTEL_IOMMU_SVM
3322 if (pasid_enabled(iommu))
3323 intel_svm_alloc_pasid_tables(iommu);
3324#endif
3325 }
3326
3327
3328
3329
3330
3331
3332 for_each_active_iommu(iommu, drhd) {
3333 iommu_flush_write_buffer(iommu);
3334 iommu_set_root_entry(iommu);
3335 iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
3336 iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
3337 }
3338
3339 if (iommu_pass_through)
3340 iommu_identity_mapping |= IDENTMAP_ALL;
3341
3342#ifdef CONFIG_INTEL_IOMMU_BROKEN_GFX_WA
3343 iommu_identity_mapping |= IDENTMAP_GFX;
3344#endif
3345
3346 check_tylersburg_isoch();
3347
3348 if (iommu_identity_mapping) {
3349 ret = si_domain_init(hw_pass_through);
3350 if (ret)
3351 goto free_iommu;
3352 }
3353
3354
3355
3356
3357
3358
3359
3360
3361 if (copied_tables)
3362 goto domains_done;
3363
3364
3365
3366
3367
3368
3369 if (iommu_identity_mapping) {
3370 ret = iommu_prepare_static_identity_mapping(hw_pass_through);
3371 if (ret) {
3372 pr_crit("Failed to setup IOMMU pass-through\n");
3373 goto free_iommu;
3374 }
3375 }
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390 pr_info("Setting RMRR:\n");
3391 for_each_rmrr_units(rmrr) {
3392
3393 for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
3394 i, dev) {
3395 ret = iommu_prepare_rmrr_dev(rmrr, dev);
3396 if (ret)
3397 pr_err("Mapping reserved region failed\n");
3398 }
3399 }
3400
3401 iommu_prepare_isa();
3402
3403domains_done:
3404
3405
3406
3407
3408
3409
3410
3411
3412 for_each_iommu(iommu, drhd) {
3413 if (drhd->ignored) {
3414
3415
3416
3417
3418 if (force_on)
3419 iommu_disable_protect_mem_regions(iommu);
3420 continue;
3421 }
3422
3423 iommu_flush_write_buffer(iommu);
3424
3425#ifdef CONFIG_INTEL_IOMMU_SVM
3426 if (pasid_enabled(iommu) && ecap_prs(iommu->ecap)) {
3427 ret = intel_svm_enable_prq(iommu);
3428 if (ret)
3429 goto free_iommu;
3430 }
3431#endif
3432 ret = dmar_set_interrupt(iommu);
3433 if (ret)
3434 goto free_iommu;
3435
3436 if (!translation_pre_enabled(iommu))
3437 iommu_enable_translation(iommu);
3438
3439 iommu_disable_protect_mem_regions(iommu);
3440 }
3441
3442 return 0;
3443
3444free_iommu:
3445 for_each_active_iommu(iommu, drhd) {
3446 disable_dmar_iommu(iommu);
3447 free_dmar_iommu(iommu);
3448 }
3449
3450 kfree(g_iommus);
3451
3452error:
3453 return ret;
3454}
3455
3456
3457static unsigned long intel_alloc_iova(struct device *dev,
3458 struct dmar_domain *domain,
3459 unsigned long nrpages, uint64_t dma_mask)
3460{
3461 unsigned long iova_pfn = 0;
3462
3463
3464 dma_mask = min_t(uint64_t, DOMAIN_MAX_ADDR(domain->gaw), dma_mask);
3465
3466 nrpages = __roundup_pow_of_two(nrpages);
3467
3468 if (!dmar_forcedac && dma_mask > DMA_BIT_MASK(32)) {
3469
3470
3471
3472
3473
3474 iova_pfn = alloc_iova_fast(&domain->iovad, nrpages,
3475 IOVA_PFN(DMA_BIT_MASK(32)), false);
3476 if (iova_pfn)
3477 return iova_pfn;
3478 }
3479 iova_pfn = alloc_iova_fast(&domain->iovad, nrpages,
3480 IOVA_PFN(dma_mask), true);
3481 if (unlikely(!iova_pfn)) {
3482 pr_err("Allocating %ld-page iova for %s failed",
3483 nrpages, dev_name(dev));
3484 return 0;
3485 }
3486
3487 return iova_pfn;
3488}
3489
3490static struct dmar_domain *get_valid_domain_for_dev(struct device *dev)
3491{
3492 struct dmar_domain *domain, *tmp;
3493 struct dmar_rmrr_unit *rmrr;
3494 struct device *i_dev;
3495 int i, ret;
3496
3497 domain = find_domain(dev);
3498 if (domain)
3499 goto out;
3500
3501 domain = find_or_alloc_domain(dev, DEFAULT_DOMAIN_ADDRESS_WIDTH);
3502 if (!domain)
3503 goto out;
3504
3505
3506 rcu_read_lock();
3507 for_each_rmrr_units(rmrr) {
3508 for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
3509 i, i_dev) {
3510 if (i_dev != dev)
3511 continue;
3512
3513 ret = domain_prepare_identity_map(dev, domain,
3514 rmrr->base_address,
3515 rmrr->end_address);
3516 if (ret)
3517 dev_err(dev, "Mapping reserved region failed\n");
3518 }
3519 }
3520 rcu_read_unlock();
3521
3522 tmp = set_domain_for_dev(dev, domain);
3523 if (!tmp || domain != tmp) {
3524 domain_exit(domain);
3525 domain = tmp;
3526 }
3527
3528out:
3529
3530 if (!domain)
3531 pr_err("Allocating domain for %s failed\n", dev_name(dev));
3532
3533
3534 return domain;
3535}
3536
3537
3538static int iommu_no_mapping(struct device *dev)
3539{
3540 int found;
3541
3542 if (iommu_dummy(dev))
3543 return 1;
3544
3545 if (!iommu_identity_mapping)
3546 return 0;
3547
3548 found = identity_mapping(dev);
3549 if (found) {
3550 if (iommu_should_identity_map(dev, 0))
3551 return 1;
3552 else {
3553
3554
3555
3556
3557 dmar_remove_one_dev_info(si_domain, dev);
3558 pr_info("32bit %s uses non-identity mapping\n",
3559 dev_name(dev));
3560 return 0;
3561 }
3562 } else {
3563
3564
3565
3566
3567 if (iommu_should_identity_map(dev, 0)) {
3568 int ret;
3569 ret = domain_add_dev_info(si_domain, dev);
3570 if (!ret) {
3571 pr_info("64bit %s uses identity mapping\n",
3572 dev_name(dev));
3573 return 1;
3574 }
3575 }
3576 }
3577
3578 return 0;
3579}
3580
3581static dma_addr_t __intel_map_single(struct device *dev, phys_addr_t paddr,
3582 size_t size, int dir, u64 dma_mask)
3583{
3584 struct dmar_domain *domain;
3585 phys_addr_t start_paddr;
3586 unsigned long iova_pfn;
3587 int prot = 0;
3588 int ret;
3589 struct intel_iommu *iommu;
3590 unsigned long paddr_pfn = paddr >> PAGE_SHIFT;
3591
3592 BUG_ON(dir == DMA_NONE);
3593
3594 if (iommu_no_mapping(dev))
3595 return paddr;
3596
3597 domain = get_valid_domain_for_dev(dev);
3598 if (!domain)
3599 return 0;
3600
3601 iommu = domain_get_iommu(domain);
3602 size = aligned_nrpages(paddr, size);
3603
3604 iova_pfn = intel_alloc_iova(dev, domain, dma_to_mm_pfn(size), dma_mask);
3605 if (!iova_pfn)
3606 goto error;
3607
3608
3609
3610
3611
3612 if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL || \
3613 !cap_zlr(iommu->cap))
3614 prot |= DMA_PTE_READ;
3615 if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)
3616 prot |= DMA_PTE_WRITE;
3617
3618
3619
3620
3621
3622
3623 ret = domain_pfn_mapping(domain, mm_to_dma_pfn(iova_pfn),
3624 mm_to_dma_pfn(paddr_pfn), size, prot);
3625 if (ret)
3626 goto error;
3627
3628
3629 if (cap_caching_mode(iommu->cap))
3630 iommu_flush_iotlb_psi(iommu, domain,
3631 mm_to_dma_pfn(iova_pfn),
3632 size, 0, 1);
3633 else
3634 iommu_flush_write_buffer(iommu);
3635
3636 start_paddr = (phys_addr_t)iova_pfn << PAGE_SHIFT;
3637 start_paddr += paddr & ~PAGE_MASK;
3638 return start_paddr;
3639
3640error:
3641 if (iova_pfn)
3642 free_iova_fast(&domain->iovad, iova_pfn, dma_to_mm_pfn(size));
3643 pr_err("Device %s request: %zx@%llx dir %d --- failed\n",
3644 dev_name(dev), size, (unsigned long long)paddr, dir);
3645 return 0;
3646}
3647
3648static dma_addr_t intel_map_page(struct device *dev, struct page *page,
3649 unsigned long offset, size_t size,
3650 enum dma_data_direction dir,
3651 unsigned long attrs)
3652{
3653 return __intel_map_single(dev, page_to_phys(page) + offset, size,
3654 dir, *dev->dma_mask);
3655}
3656
3657static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size)
3658{
3659 struct dmar_domain *domain;
3660 unsigned long start_pfn, last_pfn;
3661 unsigned long nrpages;
3662 unsigned long iova_pfn;
3663 struct intel_iommu *iommu;
3664 struct page *freelist;
3665
3666 if (iommu_no_mapping(dev))
3667 return;
3668
3669 domain = find_domain(dev);
3670 BUG_ON(!domain);
3671
3672 iommu = domain_get_iommu(domain);
3673
3674 iova_pfn = IOVA_PFN(dev_addr);
3675
3676 nrpages = aligned_nrpages(dev_addr, size);
3677 start_pfn = mm_to_dma_pfn(iova_pfn);
3678 last_pfn = start_pfn + nrpages - 1;
3679
3680 pr_debug("Device %s unmapping: pfn %lx-%lx\n",
3681 dev_name(dev), start_pfn, last_pfn);
3682
3683 freelist = domain_unmap(domain, start_pfn, last_pfn);
3684
3685 if (intel_iommu_strict) {
3686 iommu_flush_iotlb_psi(iommu, domain, start_pfn,
3687 nrpages, !freelist, 0);
3688
3689 free_iova_fast(&domain->iovad, iova_pfn, dma_to_mm_pfn(nrpages));
3690 dma_free_pagelist(freelist);
3691 } else {
3692 queue_iova(&domain->iovad, iova_pfn, nrpages,
3693 (unsigned long)freelist);
3694
3695
3696
3697
3698 }
3699}
3700
3701static void intel_unmap_page(struct device *dev, dma_addr_t dev_addr,
3702 size_t size, enum dma_data_direction dir,
3703 unsigned long attrs)
3704{
3705 intel_unmap(dev, dev_addr, size);
3706}
3707
3708static void *intel_alloc_coherent(struct device *dev, size_t size,
3709 dma_addr_t *dma_handle, gfp_t flags,
3710 unsigned long attrs)
3711{
3712 void *vaddr;
3713
3714 vaddr = dma_direct_alloc(dev, size, dma_handle, flags, attrs);
3715 if (iommu_no_mapping(dev) || !vaddr)
3716 return vaddr;
3717
3718 *dma_handle = __intel_map_single(dev, virt_to_phys(vaddr),
3719 PAGE_ALIGN(size), DMA_BIDIRECTIONAL,
3720 dev->coherent_dma_mask);
3721 if (!*dma_handle)
3722 goto out_free_pages;
3723 return vaddr;
3724
3725out_free_pages:
3726 dma_direct_free(dev, size, vaddr, *dma_handle, attrs);
3727 return NULL;
3728}
3729
3730static void intel_free_coherent(struct device *dev, size_t size, void *vaddr,
3731 dma_addr_t dma_handle, unsigned long attrs)
3732{
3733 if (!iommu_no_mapping(dev))
3734 intel_unmap(dev, dma_handle, PAGE_ALIGN(size));
3735 dma_direct_free(dev, size, vaddr, dma_handle, attrs);
3736}
3737
3738static void intel_unmap_sg(struct device *dev, struct scatterlist *sglist,
3739 int nelems, enum dma_data_direction dir,
3740 unsigned long attrs)
3741{
3742 dma_addr_t startaddr = sg_dma_address(sglist) & PAGE_MASK;
3743 unsigned long nrpages = 0;
3744 struct scatterlist *sg;
3745 int i;
3746
3747 for_each_sg(sglist, sg, nelems, i) {
3748 nrpages += aligned_nrpages(sg_dma_address(sg), sg_dma_len(sg));
3749 }
3750
3751 intel_unmap(dev, startaddr, nrpages << VTD_PAGE_SHIFT);
3752}
3753
3754static int intel_nontranslate_map_sg(struct device *hddev,
3755 struct scatterlist *sglist, int nelems, int dir)
3756{
3757 int i;
3758 struct scatterlist *sg;
3759
3760 for_each_sg(sglist, sg, nelems, i) {
3761 BUG_ON(!sg_page(sg));
3762 sg->dma_address = sg_phys(sg);
3763 sg->dma_length = sg->length;
3764 }
3765 return nelems;
3766}
3767
3768static int intel_map_sg(struct device *dev, struct scatterlist *sglist, int nelems,
3769 enum dma_data_direction dir, unsigned long attrs)
3770{
3771 int i;
3772 struct dmar_domain *domain;
3773 size_t size = 0;
3774 int prot = 0;
3775 unsigned long iova_pfn;
3776 int ret;
3777 struct scatterlist *sg;
3778 unsigned long start_vpfn;
3779 struct intel_iommu *iommu;
3780
3781 BUG_ON(dir == DMA_NONE);
3782 if (iommu_no_mapping(dev))
3783 return intel_nontranslate_map_sg(dev, sglist, nelems, dir);
3784
3785 domain = get_valid_domain_for_dev(dev);
3786 if (!domain)
3787 return 0;
3788
3789 iommu = domain_get_iommu(domain);
3790
3791 for_each_sg(sglist, sg, nelems, i)
3792 size += aligned_nrpages(sg->offset, sg->length);
3793
3794 iova_pfn = intel_alloc_iova(dev, domain, dma_to_mm_pfn(size),
3795 *dev->dma_mask);
3796 if (!iova_pfn) {
3797 sglist->dma_length = 0;
3798 return 0;
3799 }
3800
3801
3802
3803
3804
3805 if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL || \
3806 !cap_zlr(iommu->cap))
3807 prot |= DMA_PTE_READ;
3808 if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)
3809 prot |= DMA_PTE_WRITE;
3810
3811 start_vpfn = mm_to_dma_pfn(iova_pfn);
3812
3813 ret = domain_sg_mapping(domain, start_vpfn, sglist, size, prot);
3814 if (unlikely(ret)) {
3815 dma_pte_free_pagetable(domain, start_vpfn,
3816 start_vpfn + size - 1,
3817 agaw_to_level(domain->agaw) + 1);
3818 free_iova_fast(&domain->iovad, iova_pfn, dma_to_mm_pfn(size));
3819 return 0;
3820 }
3821
3822
3823 if (cap_caching_mode(iommu->cap))
3824 iommu_flush_iotlb_psi(iommu, domain, start_vpfn, size, 0, 1);
3825 else
3826 iommu_flush_write_buffer(iommu);
3827
3828 return nelems;
3829}
3830
3831static int intel_mapping_error(struct device *dev, dma_addr_t dma_addr)
3832{
3833 return !dma_addr;
3834}
3835
3836const struct dma_map_ops intel_dma_ops = {
3837 .alloc = intel_alloc_coherent,
3838 .free = intel_free_coherent,
3839 .map_sg = intel_map_sg,
3840 .unmap_sg = intel_unmap_sg,
3841 .map_page = intel_map_page,
3842 .unmap_page = intel_unmap_page,
3843 .mapping_error = intel_mapping_error,
3844#ifdef CONFIG_X86
3845 .dma_supported = dma_direct_supported,
3846#endif
3847};
3848
3849static inline int iommu_domain_cache_init(void)
3850{
3851 int ret = 0;
3852
3853 iommu_domain_cache = kmem_cache_create("iommu_domain",
3854 sizeof(struct dmar_domain),
3855 0,
3856 SLAB_HWCACHE_ALIGN,
3857
3858 NULL);
3859 if (!iommu_domain_cache) {
3860 pr_err("Couldn't create iommu_domain cache\n");
3861 ret = -ENOMEM;
3862 }
3863
3864 return ret;
3865}
3866
3867static inline int iommu_devinfo_cache_init(void)
3868{
3869 int ret = 0;
3870
3871 iommu_devinfo_cache = kmem_cache_create("iommu_devinfo",
3872 sizeof(struct device_domain_info),
3873 0,
3874 SLAB_HWCACHE_ALIGN,
3875 NULL);
3876 if (!iommu_devinfo_cache) {
3877 pr_err("Couldn't create devinfo cache\n");
3878 ret = -ENOMEM;
3879 }
3880
3881 return ret;
3882}
3883
3884static int __init iommu_init_mempool(void)
3885{
3886 int ret;
3887 ret = iova_cache_get();
3888 if (ret)
3889 return ret;
3890
3891 ret = iommu_domain_cache_init();
3892 if (ret)
3893 goto domain_error;
3894
3895 ret = iommu_devinfo_cache_init();
3896 if (!ret)
3897 return ret;
3898
3899 kmem_cache_destroy(iommu_domain_cache);
3900domain_error:
3901 iova_cache_put();
3902
3903 return -ENOMEM;
3904}
3905
3906static void __init iommu_exit_mempool(void)
3907{
3908 kmem_cache_destroy(iommu_devinfo_cache);
3909 kmem_cache_destroy(iommu_domain_cache);
3910 iova_cache_put();
3911}
3912
3913static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev)
3914{
3915 struct dmar_drhd_unit *drhd;
3916 u32 vtbar;
3917 int rc;
3918
3919
3920
3921
3922
3923
3924 rc = pci_bus_read_config_dword(pdev->bus, PCI_DEVFN(0, 0), 0xb0, &vtbar);
3925 if (rc) {
3926
3927 dev_info(&pdev->dev, "failed to run vt-d quirk\n");
3928 return;
3929 }
3930 vtbar &= 0xffff0000;
3931
3932
3933 drhd = dmar_find_matched_drhd_unit(pdev);
3934 if (WARN_TAINT_ONCE(!drhd || drhd->reg_base_addr - vtbar != 0xa000,
3935 TAINT_FIRMWARE_WORKAROUND,
3936 "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))
3937 pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
3938}
3939DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu);
3940
3941static void __init init_no_remapping_devices(void)
3942{
3943 struct dmar_drhd_unit *drhd;
3944 struct device *dev;
3945 int i;
3946
3947 for_each_drhd_unit(drhd) {
3948 if (!drhd->include_all) {
3949 for_each_active_dev_scope(drhd->devices,
3950 drhd->devices_cnt, i, dev)
3951 break;
3952
3953 if (i == drhd->devices_cnt)
3954 drhd->ignored = 1;
3955 }
3956 }
3957
3958 for_each_active_drhd_unit(drhd) {
3959 if (drhd->include_all)
3960 continue;
3961
3962 for_each_active_dev_scope(drhd->devices,
3963 drhd->devices_cnt, i, dev)
3964 if (!dev_is_pci(dev) || !IS_GFX_DEVICE(to_pci_dev(dev)))
3965 break;
3966 if (i < drhd->devices_cnt)
3967 continue;
3968
3969
3970
3971 if (dmar_map_gfx) {
3972 intel_iommu_gfx_mapped = 1;
3973 } else {
3974 drhd->ignored = 1;
3975 for_each_active_dev_scope(drhd->devices,
3976 drhd->devices_cnt, i, dev)
3977 dev->archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
3978 }
3979 }
3980}
3981
3982#ifdef CONFIG_SUSPEND
3983static int init_iommu_hw(void)
3984{
3985 struct dmar_drhd_unit *drhd;
3986 struct intel_iommu *iommu = NULL;
3987
3988 for_each_active_iommu(iommu, drhd)
3989 if (iommu->qi)
3990 dmar_reenable_qi(iommu);
3991
3992 for_each_iommu(iommu, drhd) {
3993 if (drhd->ignored) {
3994
3995
3996
3997
3998 if (force_on)
3999 iommu_disable_protect_mem_regions(iommu);
4000 continue;
4001 }
4002
4003 iommu_flush_write_buffer(iommu);
4004
4005 iommu_set_root_entry(iommu);
4006
4007 iommu->flush.flush_context(iommu, 0, 0, 0,
4008 DMA_CCMD_GLOBAL_INVL);
4009 iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
4010 iommu_enable_translation(iommu);
4011 iommu_disable_protect_mem_regions(iommu);
4012 }
4013
4014 return 0;
4015}
4016
4017static void iommu_flush_all(void)
4018{
4019 struct dmar_drhd_unit *drhd;
4020 struct intel_iommu *iommu;
4021
4022 for_each_active_iommu(iommu, drhd) {
4023 iommu->flush.flush_context(iommu, 0, 0, 0,
4024 DMA_CCMD_GLOBAL_INVL);
4025 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
4026 DMA_TLB_GLOBAL_FLUSH);
4027 }
4028}
4029
4030static int iommu_suspend(void)
4031{
4032 struct dmar_drhd_unit *drhd;
4033 struct intel_iommu *iommu = NULL;
4034 unsigned long flag;
4035
4036 for_each_active_iommu(iommu, drhd) {
4037 iommu->iommu_state = kzalloc(sizeof(u32) * MAX_SR_DMAR_REGS,
4038 GFP_ATOMIC);
4039 if (!iommu->iommu_state)
4040 goto nomem;
4041 }
4042
4043 iommu_flush_all();
4044
4045 for_each_active_iommu(iommu, drhd) {
4046 iommu_disable_translation(iommu);
4047
4048 raw_spin_lock_irqsave(&iommu->register_lock, flag);
4049
4050 iommu->iommu_state[SR_DMAR_FECTL_REG] =
4051 readl(iommu->reg + DMAR_FECTL_REG);
4052 iommu->iommu_state[SR_DMAR_FEDATA_REG] =
4053 readl(iommu->reg + DMAR_FEDATA_REG);
4054 iommu->iommu_state[SR_DMAR_FEADDR_REG] =
4055 readl(iommu->reg + DMAR_FEADDR_REG);
4056 iommu->iommu_state[SR_DMAR_FEUADDR_REG] =
4057 readl(iommu->reg + DMAR_FEUADDR_REG);
4058
4059 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
4060 }
4061 return 0;
4062
4063nomem:
4064 for_each_active_iommu(iommu, drhd)
4065 kfree(iommu->iommu_state);
4066
4067 return -ENOMEM;
4068}
4069
4070static void iommu_resume(void)
4071{
4072 struct dmar_drhd_unit *drhd;
4073 struct intel_iommu *iommu = NULL;
4074 unsigned long flag;
4075
4076 if (init_iommu_hw()) {
4077 if (force_on)
4078 panic("tboot: IOMMU setup failed, DMAR can not resume!\n");
4079 else
4080 WARN(1, "IOMMU setup failed, DMAR can not resume!\n");
4081 return;
4082 }
4083
4084 for_each_active_iommu(iommu, drhd) {
4085
4086 raw_spin_lock_irqsave(&iommu->register_lock, flag);
4087
4088 writel(iommu->iommu_state[SR_DMAR_FECTL_REG],
4089 iommu->reg + DMAR_FECTL_REG);
4090 writel(iommu->iommu_state[SR_DMAR_FEDATA_REG],
4091 iommu->reg + DMAR_FEDATA_REG);
4092 writel(iommu->iommu_state[SR_DMAR_FEADDR_REG],
4093 iommu->reg + DMAR_FEADDR_REG);
4094 writel(iommu->iommu_state[SR_DMAR_FEUADDR_REG],
4095 iommu->reg + DMAR_FEUADDR_REG);
4096
4097 raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
4098 }
4099
4100 for_each_active_iommu(iommu, drhd)
4101 kfree(iommu->iommu_state);
4102}
4103
4104static struct syscore_ops iommu_syscore_ops = {
4105 .resume = iommu_resume,
4106 .suspend = iommu_suspend,
4107};
4108
4109static void __init init_iommu_pm_ops(void)
4110{
4111 register_syscore_ops(&iommu_syscore_ops);
4112}
4113
4114#else
4115static inline void init_iommu_pm_ops(void) {}
4116#endif
4117
4118
4119int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg)
4120{
4121 struct acpi_dmar_reserved_memory *rmrr;
4122 int prot = DMA_PTE_READ|DMA_PTE_WRITE;
4123 struct dmar_rmrr_unit *rmrru;
4124 size_t length;
4125
4126 rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
4127 if (!rmrru)
4128 goto out;
4129
4130 rmrru->hdr = header;
4131 rmrr = (struct acpi_dmar_reserved_memory *)header;
4132 rmrru->base_address = rmrr->base_address;
4133 rmrru->end_address = rmrr->end_address;
4134
4135 length = rmrr->end_address - rmrr->base_address + 1;
4136 rmrru->resv = iommu_alloc_resv_region(rmrr->base_address, length, prot,
4137 IOMMU_RESV_DIRECT);
4138 if (!rmrru->resv)
4139 goto free_rmrru;
4140
4141 rmrru->devices = dmar_alloc_dev_scope((void *)(rmrr + 1),
4142 ((void *)rmrr) + rmrr->header.length,
4143 &rmrru->devices_cnt);
4144 if (rmrru->devices_cnt && rmrru->devices == NULL)
4145 goto free_all;
4146
4147 list_add(&rmrru->list, &dmar_rmrr_units);
4148
4149 return 0;
4150free_all:
4151 kfree(rmrru->resv);
4152free_rmrru:
4153 kfree(rmrru);
4154out:
4155 return -ENOMEM;
4156}
4157
4158static struct dmar_atsr_unit *dmar_find_atsr(struct acpi_dmar_atsr *atsr)
4159{
4160 struct dmar_atsr_unit *atsru;
4161 struct acpi_dmar_atsr *tmp;
4162
4163 list_for_each_entry_rcu(atsru, &dmar_atsr_units, list) {
4164 tmp = (struct acpi_dmar_atsr *)atsru->hdr;
4165 if (atsr->segment != tmp->segment)
4166 continue;
4167 if (atsr->header.length != tmp->header.length)
4168 continue;
4169 if (memcmp(atsr, tmp, atsr->header.length) == 0)
4170 return atsru;
4171 }
4172
4173 return NULL;
4174}
4175
4176int dmar_parse_one_atsr(struct acpi_dmar_header *hdr, void *arg)
4177{
4178 struct acpi_dmar_atsr *atsr;
4179 struct dmar_atsr_unit *atsru;
4180
4181 if (system_state >= SYSTEM_RUNNING && !intel_iommu_enabled)
4182 return 0;
4183
4184 atsr = container_of(hdr, struct acpi_dmar_atsr, header);
4185 atsru = dmar_find_atsr(atsr);
4186 if (atsru)
4187 return 0;
4188
4189 atsru = kzalloc(sizeof(*atsru) + hdr->length, GFP_KERNEL);
4190 if (!atsru)
4191 return -ENOMEM;
4192
4193
4194
4195
4196
4197
4198 atsru->hdr = (void *)(atsru + 1);
4199 memcpy(atsru->hdr, hdr, hdr->length);
4200 atsru->include_all = atsr->flags & 0x1;
4201 if (!atsru->include_all) {
4202 atsru->devices = dmar_alloc_dev_scope((void *)(atsr + 1),
4203 (void *)atsr + atsr->header.length,
4204 &atsru->devices_cnt);
4205 if (atsru->devices_cnt && atsru->devices == NULL) {
4206 kfree(atsru);
4207 return -ENOMEM;
4208 }
4209 }
4210
4211 list_add_rcu(&atsru->list, &dmar_atsr_units);
4212
4213 return 0;
4214}
4215
4216static void intel_iommu_free_atsr(struct dmar_atsr_unit *atsru)
4217{
4218 dmar_free_dev_scope(&atsru->devices, &atsru->devices_cnt);
4219 kfree(atsru);
4220}
4221
4222int dmar_release_one_atsr(struct acpi_dmar_header *hdr, void *arg)
4223{
4224 struct acpi_dmar_atsr *atsr;
4225 struct dmar_atsr_unit *atsru;
4226
4227 atsr = container_of(hdr, struct acpi_dmar_atsr, header);
4228 atsru = dmar_find_atsr(atsr);
4229 if (atsru) {
4230 list_del_rcu(&atsru->list);
4231 synchronize_rcu();
4232 intel_iommu_free_atsr(atsru);
4233 }
4234
4235 return 0;
4236}
4237
4238int dmar_check_one_atsr(struct acpi_dmar_header *hdr, void *arg)
4239{
4240 int i;
4241 struct device *dev;
4242 struct acpi_dmar_atsr *atsr;
4243 struct dmar_atsr_unit *atsru;
4244
4245 atsr = container_of(hdr, struct acpi_dmar_atsr, header);
4246 atsru = dmar_find_atsr(atsr);
4247 if (!atsru)
4248 return 0;
4249
4250 if (!atsru->include_all && atsru->devices && atsru->devices_cnt) {
4251 for_each_active_dev_scope(atsru->devices, atsru->devices_cnt,
4252 i, dev)
4253 return -EBUSY;
4254 }
4255
4256 return 0;
4257}
4258
4259static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
4260{
4261 int sp, ret = 0;
4262 struct intel_iommu *iommu = dmaru->iommu;
4263
4264 if (g_iommus[iommu->seq_id])
4265 return 0;
4266
4267 if (hw_pass_through && !ecap_pass_through(iommu->ecap)) {
4268 pr_warn("%s: Doesn't support hardware pass through.\n",
4269 iommu->name);
4270 return -ENXIO;
4271 }
4272 if (!ecap_sc_support(iommu->ecap) &&
4273 domain_update_iommu_snooping(iommu)) {
4274 pr_warn("%s: Doesn't support snooping.\n",
4275 iommu->name);
4276 return -ENXIO;
4277 }
4278 sp = domain_update_iommu_superpage(iommu) - 1;
4279 if (sp >= 0 && !(cap_super_page_val(iommu->cap) & (1 << sp))) {
4280 pr_warn("%s: Doesn't support large page.\n",
4281 iommu->name);
4282 return -ENXIO;
4283 }
4284
4285
4286
4287
4288 if (iommu->gcmd & DMA_GCMD_TE)
4289 iommu_disable_translation(iommu);
4290
4291 g_iommus[iommu->seq_id] = iommu;
4292 ret = iommu_init_domains(iommu);
4293 if (ret == 0)
4294 ret = iommu_alloc_root_entry(iommu);
4295 if (ret)
4296 goto out;
4297
4298#ifdef CONFIG_INTEL_IOMMU_SVM
4299 if (pasid_enabled(iommu))
4300 intel_svm_alloc_pasid_tables(iommu);
4301#endif
4302
4303 if (dmaru->ignored) {
4304
4305
4306
4307 if (force_on)
4308 iommu_disable_protect_mem_regions(iommu);
4309 return 0;
4310 }
4311
4312 intel_iommu_init_qi(iommu);
4313 iommu_flush_write_buffer(iommu);
4314
4315#ifdef CONFIG_INTEL_IOMMU_SVM
4316 if (pasid_enabled(iommu) && ecap_prs(iommu->ecap)) {
4317 ret = intel_svm_enable_prq(iommu);
4318 if (ret)
4319 goto disable_iommu;
4320 }
4321#endif
4322 ret = dmar_set_interrupt(iommu);
4323 if (ret)
4324 goto disable_iommu;
4325
4326 iommu_set_root_entry(iommu);
4327 iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
4328 iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
4329 iommu_enable_translation(iommu);
4330
4331 iommu_disable_protect_mem_regions(iommu);
4332 return 0;
4333
4334disable_iommu:
4335 disable_dmar_iommu(iommu);
4336out:
4337 free_dmar_iommu(iommu);
4338 return ret;
4339}
4340
4341int dmar_iommu_hotplug(struct dmar_drhd_unit *dmaru, bool insert)
4342{
4343 int ret = 0;
4344 struct intel_iommu *iommu = dmaru->iommu;
4345
4346 if (!intel_iommu_enabled)
4347 return 0;
4348 if (iommu == NULL)
4349 return -EINVAL;
4350
4351 if (insert) {
4352 ret = intel_iommu_add(dmaru);
4353 } else {
4354 disable_dmar_iommu(iommu);
4355 free_dmar_iommu(iommu);
4356 }
4357
4358 return ret;
4359}
4360
4361static void intel_iommu_free_dmars(void)
4362{
4363 struct dmar_rmrr_unit *rmrru, *rmrr_n;
4364 struct dmar_atsr_unit *atsru, *atsr_n;
4365
4366 list_for_each_entry_safe(rmrru, rmrr_n, &dmar_rmrr_units, list) {
4367 list_del(&rmrru->list);
4368 dmar_free_dev_scope(&rmrru->devices, &rmrru->devices_cnt);
4369 kfree(rmrru->resv);
4370 kfree(rmrru);
4371 }
4372
4373 list_for_each_entry_safe(atsru, atsr_n, &dmar_atsr_units, list) {
4374 list_del(&atsru->list);
4375 intel_iommu_free_atsr(atsru);
4376 }
4377}
4378
4379int dmar_find_matched_atsr_unit(struct pci_dev *dev)
4380{
4381 int i, ret = 1;
4382 struct pci_bus *bus;
4383 struct pci_dev *bridge = NULL;
4384 struct device *tmp;
4385 struct acpi_dmar_atsr *atsr;
4386 struct dmar_atsr_unit *atsru;
4387
4388 dev = pci_physfn(dev);
4389 for (bus = dev->bus; bus; bus = bus->parent) {
4390 bridge = bus->self;
4391
4392 if (!bridge)
4393 return 1;
4394
4395 if (!pci_is_pcie(bridge) ||
4396 pci_pcie_type(bridge) == PCI_EXP_TYPE_PCI_BRIDGE)
4397 return 0;
4398
4399 if (pci_pcie_type(bridge) == PCI_EXP_TYPE_ROOT_PORT)
4400 break;
4401 }
4402
4403 rcu_read_lock();
4404 list_for_each_entry_rcu(atsru, &dmar_atsr_units, list) {
4405 atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
4406 if (atsr->segment != pci_domain_nr(dev->bus))
4407 continue;
4408
4409 for_each_dev_scope(atsru->devices, atsru->devices_cnt, i, tmp)
4410 if (tmp == &bridge->dev)
4411 goto out;
4412
4413 if (atsru->include_all)
4414 goto out;
4415 }
4416 ret = 0;
4417out:
4418 rcu_read_unlock();
4419
4420 return ret;
4421}
4422
4423int dmar_iommu_notify_scope_dev(struct dmar_pci_notify_info *info)
4424{
4425 int ret = 0;
4426 struct dmar_rmrr_unit *rmrru;
4427 struct dmar_atsr_unit *atsru;
4428 struct acpi_dmar_atsr *atsr;
4429 struct acpi_dmar_reserved_memory *rmrr;
4430
4431 if (!intel_iommu_enabled && system_state >= SYSTEM_RUNNING)
4432 return 0;
4433
4434 list_for_each_entry(rmrru, &dmar_rmrr_units, list) {
4435 rmrr = container_of(rmrru->hdr,
4436 struct acpi_dmar_reserved_memory, header);
4437 if (info->event == BUS_NOTIFY_ADD_DEVICE) {
4438 ret = dmar_insert_dev_scope(info, (void *)(rmrr + 1),
4439 ((void *)rmrr) + rmrr->header.length,
4440 rmrr->segment, rmrru->devices,
4441 rmrru->devices_cnt);
4442 if(ret < 0)
4443 return ret;
4444 } else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
4445 dmar_remove_dev_scope(info, rmrr->segment,
4446 rmrru->devices, rmrru->devices_cnt);
4447 }
4448 }
4449
4450 list_for_each_entry(atsru, &dmar_atsr_units, list) {
4451 if (atsru->include_all)
4452 continue;
4453
4454 atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
4455 if (info->event == BUS_NOTIFY_ADD_DEVICE) {
4456 ret = dmar_insert_dev_scope(info, (void *)(atsr + 1),
4457 (void *)atsr + atsr->header.length,
4458 atsr->segment, atsru->devices,
4459 atsru->devices_cnt);
4460 if (ret > 0)
4461 break;
4462 else if(ret < 0)
4463 return ret;
4464 } else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
4465 if (dmar_remove_dev_scope(info, atsr->segment,
4466 atsru->devices, atsru->devices_cnt))
4467 break;
4468 }
4469 }
4470
4471 return 0;
4472}
4473
4474
4475
4476
4477
4478
4479
4480static int device_notifier(struct notifier_block *nb,
4481 unsigned long action, void *data)
4482{
4483 struct device *dev = data;
4484 struct dmar_domain *domain;
4485
4486 if (iommu_dummy(dev))
4487 return 0;
4488
4489 if (action != BUS_NOTIFY_REMOVED_DEVICE)
4490 return 0;
4491
4492 domain = find_domain(dev);
4493 if (!domain)
4494 return 0;
4495
4496 dmar_remove_one_dev_info(domain, dev);
4497 if (!domain_type_is_vm_or_si(domain) && list_empty(&domain->devices))
4498 domain_exit(domain);
4499
4500 return 0;
4501}
4502
4503static struct notifier_block device_nb = {
4504 .notifier_call = device_notifier,
4505};
4506
4507static int intel_iommu_memory_notifier(struct notifier_block *nb,
4508 unsigned long val, void *v)
4509{
4510 struct memory_notify *mhp = v;
4511 unsigned long long start, end;
4512 unsigned long start_vpfn, last_vpfn;
4513
4514 switch (val) {
4515 case MEM_GOING_ONLINE:
4516 start = mhp->start_pfn << PAGE_SHIFT;
4517 end = ((mhp->start_pfn + mhp->nr_pages) << PAGE_SHIFT) - 1;
4518 if (iommu_domain_identity_map(si_domain, start, end)) {
4519 pr_warn("Failed to build identity map for [%llx-%llx]\n",
4520 start, end);
4521 return NOTIFY_BAD;
4522 }
4523 break;
4524
4525 case MEM_OFFLINE:
4526 case MEM_CANCEL_ONLINE:
4527 start_vpfn = mm_to_dma_pfn(mhp->start_pfn);
4528 last_vpfn = mm_to_dma_pfn(mhp->start_pfn + mhp->nr_pages - 1);
4529 while (start_vpfn <= last_vpfn) {
4530 struct iova *iova;
4531 struct dmar_drhd_unit *drhd;
4532 struct intel_iommu *iommu;
4533 struct page *freelist;
4534
4535 iova = find_iova(&si_domain->iovad, start_vpfn);
4536 if (iova == NULL) {
4537 pr_debug("Failed get IOVA for PFN %lx\n",
4538 start_vpfn);
4539 break;
4540 }
4541
4542 iova = split_and_remove_iova(&si_domain->iovad, iova,
4543 start_vpfn, last_vpfn);
4544 if (iova == NULL) {
4545 pr_warn("Failed to split IOVA PFN [%lx-%lx]\n",
4546 start_vpfn, last_vpfn);
4547 return NOTIFY_BAD;
4548 }
4549
4550 freelist = domain_unmap(si_domain, iova->pfn_lo,
4551 iova->pfn_hi);
4552
4553 rcu_read_lock();
4554 for_each_active_iommu(iommu, drhd)
4555 iommu_flush_iotlb_psi(iommu, si_domain,
4556 iova->pfn_lo, iova_size(iova),
4557 !freelist, 0);
4558 rcu_read_unlock();
4559 dma_free_pagelist(freelist);
4560
4561 start_vpfn = iova->pfn_hi + 1;
4562 free_iova_mem(iova);
4563 }
4564 break;
4565 }
4566
4567 return NOTIFY_OK;
4568}
4569
4570static struct notifier_block intel_iommu_memory_nb = {
4571 .notifier_call = intel_iommu_memory_notifier,
4572 .priority = 0
4573};
4574
4575static void free_all_cpu_cached_iovas(unsigned int cpu)
4576{
4577 int i;
4578
4579 for (i = 0; i < g_num_of_iommus; i++) {
4580 struct intel_iommu *iommu = g_iommus[i];
4581 struct dmar_domain *domain;
4582 int did;
4583
4584 if (!iommu)
4585 continue;
4586
4587 for (did = 0; did < cap_ndoms(iommu->cap); did++) {
4588 domain = get_iommu_domain(iommu, (u16)did);
4589
4590 if (!domain)
4591 continue;
4592 free_cpu_cached_iovas(cpu, &domain->iovad);
4593 }
4594 }
4595}
4596
4597static int intel_iommu_cpu_dead(unsigned int cpu)
4598{
4599 free_all_cpu_cached_iovas(cpu);
4600 return 0;
4601}
4602
4603static void intel_disable_iommus(void)
4604{
4605 struct intel_iommu *iommu = NULL;
4606 struct dmar_drhd_unit *drhd;
4607
4608 for_each_iommu(iommu, drhd)
4609 iommu_disable_translation(iommu);
4610}
4611
4612static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev)
4613{
4614 struct iommu_device *iommu_dev = dev_to_iommu_device(dev);
4615
4616 return container_of(iommu_dev, struct intel_iommu, iommu);
4617}
4618
4619static ssize_t intel_iommu_show_version(struct device *dev,
4620 struct device_attribute *attr,
4621 char *buf)
4622{
4623 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4624 u32 ver = readl(iommu->reg + DMAR_VER_REG);
4625 return sprintf(buf, "%d:%d\n",
4626 DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver));
4627}
4628static DEVICE_ATTR(version, S_IRUGO, intel_iommu_show_version, NULL);
4629
4630static ssize_t intel_iommu_show_address(struct device *dev,
4631 struct device_attribute *attr,
4632 char *buf)
4633{
4634 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4635 return sprintf(buf, "%llx\n", iommu->reg_phys);
4636}
4637static DEVICE_ATTR(address, S_IRUGO, intel_iommu_show_address, NULL);
4638
4639static ssize_t intel_iommu_show_cap(struct device *dev,
4640 struct device_attribute *attr,
4641 char *buf)
4642{
4643 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4644 return sprintf(buf, "%llx\n", iommu->cap);
4645}
4646static DEVICE_ATTR(cap, S_IRUGO, intel_iommu_show_cap, NULL);
4647
4648static ssize_t intel_iommu_show_ecap(struct device *dev,
4649 struct device_attribute *attr,
4650 char *buf)
4651{
4652 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4653 return sprintf(buf, "%llx\n", iommu->ecap);
4654}
4655static DEVICE_ATTR(ecap, S_IRUGO, intel_iommu_show_ecap, NULL);
4656
4657static ssize_t intel_iommu_show_ndoms(struct device *dev,
4658 struct device_attribute *attr,
4659 char *buf)
4660{
4661 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4662 return sprintf(buf, "%ld\n", cap_ndoms(iommu->cap));
4663}
4664static DEVICE_ATTR(domains_supported, S_IRUGO, intel_iommu_show_ndoms, NULL);
4665
4666static ssize_t intel_iommu_show_ndoms_used(struct device *dev,
4667 struct device_attribute *attr,
4668 char *buf)
4669{
4670 struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4671 return sprintf(buf, "%d\n", bitmap_weight(iommu->domain_ids,
4672 cap_ndoms(iommu->cap)));
4673}
4674static DEVICE_ATTR(domains_used, S_IRUGO, intel_iommu_show_ndoms_used, NULL);
4675
4676static struct attribute *intel_iommu_attrs[] = {
4677 &dev_attr_version.attr,
4678 &dev_attr_address.attr,
4679 &dev_attr_cap.attr,
4680 &dev_attr_ecap.attr,
4681 &dev_attr_domains_supported.attr,
4682 &dev_attr_domains_used.attr,
4683 NULL,
4684};
4685
4686static struct attribute_group intel_iommu_group = {
4687 .name = "intel-iommu",
4688 .attrs = intel_iommu_attrs,
4689};
4690
4691const struct attribute_group *intel_iommu_groups[] = {
4692 &intel_iommu_group,
4693 NULL,
4694};
4695
4696int __init intel_iommu_init(void)
4697{
4698 int ret = -ENODEV;
4699 struct dmar_drhd_unit *drhd;
4700 struct intel_iommu *iommu;
4701
4702
4703 force_on = tboot_force_iommu();
4704
4705 if (iommu_init_mempool()) {
4706 if (force_on)
4707 panic("tboot: Failed to initialize iommu memory\n");
4708 return -ENOMEM;
4709 }
4710
4711 down_write(&dmar_global_lock);
4712 if (dmar_table_init()) {
4713 if (force_on)
4714 panic("tboot: Failed to initialize DMAR table\n");
4715 goto out_free_dmar;
4716 }
4717
4718 if (dmar_dev_scope_init() < 0) {
4719 if (force_on)
4720 panic("tboot: Failed to initialize DMAR device scope\n");
4721 goto out_free_dmar;
4722 }
4723
4724 up_write(&dmar_global_lock);
4725
4726
4727
4728
4729
4730 dmar_register_bus_notifier();
4731
4732 down_write(&dmar_global_lock);
4733
4734 if (no_iommu || dmar_disabled) {
4735
4736
4737
4738
4739
4740
4741
4742
4743 if (intel_iommu_tboot_noforce) {
4744 for_each_iommu(iommu, drhd)
4745 iommu_disable_protect_mem_regions(iommu);
4746 }
4747
4748
4749
4750
4751
4752
4753 intel_disable_iommus();
4754 goto out_free_dmar;
4755 }
4756
4757 if (list_empty(&dmar_rmrr_units))
4758 pr_info("No RMRR found\n");
4759
4760 if (list_empty(&dmar_atsr_units))
4761 pr_info("No ATSR found\n");
4762
4763 if (dmar_init_reserved_ranges()) {
4764 if (force_on)
4765 panic("tboot: Failed to reserve iommu ranges\n");
4766 goto out_free_reserved_range;
4767 }
4768
4769 init_no_remapping_devices();
4770
4771 ret = init_dmars();
4772 if (ret) {
4773 if (force_on)
4774 panic("tboot: Failed to initialize DMARs\n");
4775 pr_err("Initialization failed\n");
4776 goto out_free_reserved_range;
4777 }
4778 up_write(&dmar_global_lock);
4779 pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
4780
4781#if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB)
4782 swiotlb = 0;
4783#endif
4784 dma_ops = &intel_dma_ops;
4785
4786 init_iommu_pm_ops();
4787
4788 for_each_active_iommu(iommu, drhd) {
4789 iommu_device_sysfs_add(&iommu->iommu, NULL,
4790 intel_iommu_groups,
4791 "%s", iommu->name);
4792 iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops);
4793 iommu_device_register(&iommu->iommu);
4794 }
4795
4796 bus_set_iommu(&pci_bus_type, &intel_iommu_ops);
4797 bus_register_notifier(&pci_bus_type, &device_nb);
4798 if (si_domain && !hw_pass_through)
4799 register_memory_notifier(&intel_iommu_memory_nb);
4800 cpuhp_setup_state(CPUHP_IOMMU_INTEL_DEAD, "iommu/intel:dead", NULL,
4801 intel_iommu_cpu_dead);
4802 intel_iommu_enabled = 1;
4803
4804 return 0;
4805
4806out_free_reserved_range:
4807 put_iova_domain(&reserved_iova_list);
4808out_free_dmar:
4809 intel_iommu_free_dmars();
4810 up_write(&dmar_global_lock);
4811 iommu_exit_mempool();
4812 return ret;
4813}
4814
4815static int domain_context_clear_one_cb(struct pci_dev *pdev, u16 alias, void *opaque)
4816{
4817 struct intel_iommu *iommu = opaque;
4818
4819 domain_context_clear_one(iommu, PCI_BUS_NUM(alias), alias & 0xff);
4820 return 0;
4821}
4822
4823
4824
4825
4826
4827
4828
4829static void domain_context_clear(struct intel_iommu *iommu, struct device *dev)
4830{
4831 if (!iommu || !dev || !dev_is_pci(dev))
4832 return;
4833
4834 pci_for_each_dma_alias(to_pci_dev(dev), &domain_context_clear_one_cb, iommu);
4835}
4836
4837static void __dmar_remove_one_dev_info(struct device_domain_info *info)
4838{
4839 struct intel_iommu *iommu;
4840 unsigned long flags;
4841
4842 assert_spin_locked(&device_domain_lock);
4843
4844 if (WARN_ON(!info))
4845 return;
4846
4847 iommu = info->iommu;
4848
4849 if (info->dev) {
4850 iommu_disable_dev_iotlb(info);
4851 domain_context_clear(iommu, info->dev);
4852 }
4853
4854 unlink_domain_info(info);
4855
4856 spin_lock_irqsave(&iommu->lock, flags);
4857 domain_detach_iommu(info->domain, iommu);
4858 spin_unlock_irqrestore(&iommu->lock, flags);
4859
4860 free_devinfo_mem(info);
4861}
4862
4863static void dmar_remove_one_dev_info(struct dmar_domain *domain,
4864 struct device *dev)
4865{
4866 struct device_domain_info *info;
4867 unsigned long flags;
4868
4869 spin_lock_irqsave(&device_domain_lock, flags);
4870 info = dev->archdata.iommu;
4871 __dmar_remove_one_dev_info(info);
4872 spin_unlock_irqrestore(&device_domain_lock, flags);
4873}
4874
4875static int md_domain_init(struct dmar_domain *domain, int guest_width)
4876{
4877 int adjust_width;
4878
4879 init_iova_domain(&domain->iovad, VTD_PAGE_SIZE, IOVA_START_PFN);
4880 domain_reserve_special_ranges(domain);
4881
4882
4883 domain->gaw = guest_width;
4884 adjust_width = guestwidth_to_adjustwidth(guest_width);
4885 domain->agaw = width_to_agaw(adjust_width);
4886
4887 domain->iommu_coherency = 0;
4888 domain->iommu_snooping = 0;
4889 domain->iommu_superpage = 0;
4890 domain->max_addr = 0;
4891
4892
4893 domain->pgd = (struct dma_pte *)alloc_pgtable_page(domain->nid);
4894 if (!domain->pgd)
4895 return -ENOMEM;
4896 domain_flush_cache(domain, domain->pgd, PAGE_SIZE);
4897 return 0;
4898}
4899
4900static struct iommu_domain *intel_iommu_domain_alloc(unsigned type)
4901{
4902 struct dmar_domain *dmar_domain;
4903 struct iommu_domain *domain;
4904
4905 if (type != IOMMU_DOMAIN_UNMANAGED)
4906 return NULL;
4907
4908 dmar_domain = alloc_domain(DOMAIN_FLAG_VIRTUAL_MACHINE);
4909 if (!dmar_domain) {
4910 pr_err("Can't allocate dmar_domain\n");
4911 return NULL;
4912 }
4913 if (md_domain_init(dmar_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
4914 pr_err("Domain initialization failed\n");
4915 domain_exit(dmar_domain);
4916 return NULL;
4917 }
4918 domain_update_iommu_cap(dmar_domain);
4919
4920 domain = &dmar_domain->domain;
4921 domain->geometry.aperture_start = 0;
4922 domain->geometry.aperture_end = __DOMAIN_MAX_ADDR(dmar_domain->gaw);
4923 domain->geometry.force_aperture = true;
4924
4925 return domain;
4926}
4927
4928static void intel_iommu_domain_free(struct iommu_domain *domain)
4929{
4930 domain_exit(to_dmar_domain(domain));
4931}
4932
4933static int intel_iommu_attach_device(struct iommu_domain *domain,
4934 struct device *dev)
4935{
4936 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4937 struct intel_iommu *iommu;
4938 int addr_width;
4939 u8 bus, devfn;
4940
4941 if (device_is_rmrr_locked(dev)) {
4942 dev_warn(dev, "Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.\n");
4943 return -EPERM;
4944 }
4945
4946
4947 if (unlikely(domain_context_mapped(dev))) {
4948 struct dmar_domain *old_domain;
4949
4950 old_domain = find_domain(dev);
4951 if (old_domain) {
4952 rcu_read_lock();
4953 dmar_remove_one_dev_info(old_domain, dev);
4954 rcu_read_unlock();
4955
4956 if (!domain_type_is_vm_or_si(old_domain) &&
4957 list_empty(&old_domain->devices))
4958 domain_exit(old_domain);
4959 }
4960 }
4961
4962 iommu = device_to_iommu(dev, &bus, &devfn);
4963 if (!iommu)
4964 return -ENODEV;
4965
4966
4967 addr_width = agaw_to_width(iommu->agaw);
4968 if (addr_width > cap_mgaw(iommu->cap))
4969 addr_width = cap_mgaw(iommu->cap);
4970
4971 if (dmar_domain->max_addr > (1LL << addr_width)) {
4972 pr_err("%s: iommu width (%d) is not "
4973 "sufficient for the mapped address (%llx)\n",
4974 __func__, addr_width, dmar_domain->max_addr);
4975 return -EFAULT;
4976 }
4977 dmar_domain->gaw = addr_width;
4978
4979
4980
4981
4982 while (iommu->agaw < dmar_domain->agaw) {
4983 struct dma_pte *pte;
4984
4985 pte = dmar_domain->pgd;
4986 if (dma_pte_present(pte)) {
4987 dmar_domain->pgd = (struct dma_pte *)
4988 phys_to_virt(dma_pte_addr(pte));
4989 free_pgtable_page(pte);
4990 }
4991 dmar_domain->agaw--;
4992 }
4993
4994 return domain_add_dev_info(dmar_domain, dev);
4995}
4996
4997static void intel_iommu_detach_device(struct iommu_domain *domain,
4998 struct device *dev)
4999{
5000 dmar_remove_one_dev_info(to_dmar_domain(domain), dev);
5001}
5002
5003static int intel_iommu_map(struct iommu_domain *domain,
5004 unsigned long iova, phys_addr_t hpa,
5005 size_t size, int iommu_prot)
5006{
5007 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5008 u64 max_addr;
5009 int prot = 0;
5010 int ret;
5011
5012 if (iommu_prot & IOMMU_READ)
5013 prot |= DMA_PTE_READ;
5014 if (iommu_prot & IOMMU_WRITE)
5015 prot |= DMA_PTE_WRITE;
5016 if ((iommu_prot & IOMMU_CACHE) && dmar_domain->iommu_snooping)
5017 prot |= DMA_PTE_SNP;
5018
5019 max_addr = iova + size;
5020 if (dmar_domain->max_addr < max_addr) {
5021 u64 end;
5022
5023
5024 end = __DOMAIN_MAX_ADDR(dmar_domain->gaw) + 1;
5025 if (end < max_addr) {
5026 pr_err("%s: iommu width (%d) is not "
5027 "sufficient for the mapped address (%llx)\n",
5028 __func__, dmar_domain->gaw, max_addr);
5029 return -EFAULT;
5030 }
5031 dmar_domain->max_addr = max_addr;
5032 }
5033
5034
5035 size = aligned_nrpages(hpa, size);
5036 ret = domain_pfn_mapping(dmar_domain, iova >> VTD_PAGE_SHIFT,
5037 hpa >> VTD_PAGE_SHIFT, size, prot);
5038 return ret;
5039}
5040
5041static size_t intel_iommu_unmap(struct iommu_domain *domain,
5042 unsigned long iova, size_t size)
5043{
5044 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5045 struct page *freelist = NULL;
5046 unsigned long start_pfn, last_pfn;
5047 unsigned int npages;
5048 int iommu_id, level = 0;
5049
5050
5051
5052 BUG_ON(!pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level));
5053
5054 if (size < VTD_PAGE_SIZE << level_to_offset_bits(level))
5055 size = VTD_PAGE_SIZE << level_to_offset_bits(level);
5056
5057 start_pfn = iova >> VTD_PAGE_SHIFT;
5058 last_pfn = (iova + size - 1) >> VTD_PAGE_SHIFT;
5059
5060 freelist = domain_unmap(dmar_domain, start_pfn, last_pfn);
5061
5062 npages = last_pfn - start_pfn + 1;
5063
5064 for_each_domain_iommu(iommu_id, dmar_domain)
5065 iommu_flush_iotlb_psi(g_iommus[iommu_id], dmar_domain,
5066 start_pfn, npages, !freelist, 0);
5067
5068 dma_free_pagelist(freelist);
5069
5070 if (dmar_domain->max_addr == iova + size)
5071 dmar_domain->max_addr = iova;
5072
5073 return size;
5074}
5075
5076static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,
5077 dma_addr_t iova)
5078{
5079 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5080 struct dma_pte *pte;
5081 int level = 0;
5082 u64 phys = 0;
5083
5084 pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level);
5085 if (pte)
5086 phys = dma_pte_addr(pte);
5087
5088 return phys;
5089}
5090
5091static bool intel_iommu_capable(enum iommu_cap cap)
5092{
5093 if (cap == IOMMU_CAP_CACHE_COHERENCY)
5094 return domain_update_iommu_snooping(NULL) == 1;
5095 if (cap == IOMMU_CAP_INTR_REMAP)
5096 return irq_remapping_enabled == 1;
5097
5098 return false;
5099}
5100
5101static int intel_iommu_add_device(struct device *dev)
5102{
5103 struct intel_iommu *iommu;
5104 struct iommu_group *group;
5105 u8 bus, devfn;
5106
5107 iommu = device_to_iommu(dev, &bus, &devfn);
5108 if (!iommu)
5109 return -ENODEV;
5110
5111 iommu_device_link(&iommu->iommu, dev);
5112
5113 group = iommu_group_get_for_dev(dev);
5114
5115 if (IS_ERR(group))
5116 return PTR_ERR(group);
5117
5118 iommu_group_put(group);
5119 return 0;
5120}
5121
5122static void intel_iommu_remove_device(struct device *dev)
5123{
5124 struct intel_iommu *iommu;
5125 u8 bus, devfn;
5126
5127 iommu = device_to_iommu(dev, &bus, &devfn);
5128 if (!iommu)
5129 return;
5130
5131 iommu_group_remove_device(dev);
5132
5133 iommu_device_unlink(&iommu->iommu, dev);
5134}
5135
5136static void intel_iommu_get_resv_regions(struct device *device,
5137 struct list_head *head)
5138{
5139 struct iommu_resv_region *reg;
5140 struct dmar_rmrr_unit *rmrr;
5141 struct device *i_dev;
5142 int i;
5143
5144 rcu_read_lock();
5145 for_each_rmrr_units(rmrr) {
5146 for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
5147 i, i_dev) {
5148 if (i_dev != device)
5149 continue;
5150
5151 list_add_tail(&rmrr->resv->list, head);
5152 }
5153 }
5154 rcu_read_unlock();
5155
5156 reg = iommu_alloc_resv_region(IOAPIC_RANGE_START,
5157 IOAPIC_RANGE_END - IOAPIC_RANGE_START + 1,
5158 0, IOMMU_RESV_MSI);
5159 if (!reg)
5160 return;
5161 list_add_tail(®->list, head);
5162}
5163
5164static void intel_iommu_put_resv_regions(struct device *dev,
5165 struct list_head *head)
5166{
5167 struct iommu_resv_region *entry, *next;
5168
5169 list_for_each_entry_safe(entry, next, head, list) {
5170 if (entry->type == IOMMU_RESV_RESERVED)
5171 kfree(entry);
5172 }
5173}
5174
5175#ifdef CONFIG_INTEL_IOMMU_SVM
5176#define MAX_NR_PASID_BITS (20)
5177static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu)
5178{
5179
5180
5181
5182
5183
5184
5185
5186
5187 if (ecap_pss(iommu->ecap) < 5)
5188 return 0;
5189
5190
5191 return find_first_bit((unsigned long *)&iommu->pasid_max,
5192 MAX_NR_PASID_BITS) - 5;
5193}
5194
5195int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct intel_svm_dev *sdev)
5196{
5197 struct device_domain_info *info;
5198 struct context_entry *context;
5199 struct dmar_domain *domain;
5200 unsigned long flags;
5201 u64 ctx_lo;
5202 int ret;
5203
5204 domain = get_valid_domain_for_dev(sdev->dev);
5205 if (!domain)
5206 return -EINVAL;
5207
5208 spin_lock_irqsave(&device_domain_lock, flags);
5209 spin_lock(&iommu->lock);
5210
5211 ret = -EINVAL;
5212 info = sdev->dev->archdata.iommu;
5213 if (!info || !info->pasid_supported)
5214 goto out;
5215
5216 context = iommu_context_addr(iommu, info->bus, info->devfn, 0);
5217 if (WARN_ON(!context))
5218 goto out;
5219
5220 ctx_lo = context[0].lo;
5221
5222 sdev->did = domain->iommu_did[iommu->seq_id];
5223 sdev->sid = PCI_DEVID(info->bus, info->devfn);
5224
5225 if (!(ctx_lo & CONTEXT_PASIDE)) {
5226 if (iommu->pasid_state_table)
5227 context[1].hi = (u64)virt_to_phys(iommu->pasid_state_table);
5228 context[1].lo = (u64)virt_to_phys(iommu->pasid_table) |
5229 intel_iommu_get_pts(iommu);
5230
5231 wmb();
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241 if ((ctx_lo & CONTEXT_TT_MASK) == (CONTEXT_TT_PASS_THROUGH << 2)) {
5242 ctx_lo &= ~CONTEXT_TT_MASK;
5243 if (info->ats_supported)
5244 ctx_lo |= CONTEXT_TT_PT_PASID_DEV_IOTLB << 2;
5245 else
5246 ctx_lo |= CONTEXT_TT_PT_PASID << 2;
5247 }
5248 ctx_lo |= CONTEXT_PASIDE;
5249 if (iommu->pasid_state_table)
5250 ctx_lo |= CONTEXT_DINVE;
5251 if (info->pri_supported)
5252 ctx_lo |= CONTEXT_PRS;
5253 context[0].lo = ctx_lo;
5254 wmb();
5255 iommu->flush.flush_context(iommu, sdev->did, sdev->sid,
5256 DMA_CCMD_MASK_NOBIT,
5257 DMA_CCMD_DEVICE_INVL);
5258 }
5259
5260
5261 if (!info->pasid_enabled)
5262 iommu_enable_dev_iotlb(info);
5263
5264 if (info->ats_enabled) {
5265 sdev->dev_iotlb = 1;
5266 sdev->qdep = info->ats_qdep;
5267 if (sdev->qdep >= QI_DEV_EIOTLB_MAX_INVS)
5268 sdev->qdep = 0;
5269 }
5270 ret = 0;
5271
5272 out:
5273 spin_unlock(&iommu->lock);
5274 spin_unlock_irqrestore(&device_domain_lock, flags);
5275
5276 return ret;
5277}
5278
5279struct intel_iommu *intel_svm_device_to_iommu(struct device *dev)
5280{
5281 struct intel_iommu *iommu;
5282 u8 bus, devfn;
5283
5284 if (iommu_dummy(dev)) {
5285 dev_warn(dev,
5286 "No IOMMU translation for device; cannot enable SVM\n");
5287 return NULL;
5288 }
5289
5290 iommu = device_to_iommu(dev, &bus, &devfn);
5291 if ((!iommu)) {
5292 dev_err(dev, "No IOMMU for device; cannot enable SVM\n");
5293 return NULL;
5294 }
5295
5296 if (!iommu->pasid_table) {
5297 dev_err(dev, "PASID not enabled on IOMMU; cannot enable SVM\n");
5298 return NULL;
5299 }
5300
5301 return iommu;
5302}
5303#endif
5304
5305const struct iommu_ops intel_iommu_ops = {
5306 .capable = intel_iommu_capable,
5307 .domain_alloc = intel_iommu_domain_alloc,
5308 .domain_free = intel_iommu_domain_free,
5309 .attach_dev = intel_iommu_attach_device,
5310 .detach_dev = intel_iommu_detach_device,
5311 .map = intel_iommu_map,
5312 .unmap = intel_iommu_unmap,
5313 .map_sg = default_iommu_map_sg,
5314 .iova_to_phys = intel_iommu_iova_to_phys,
5315 .add_device = intel_iommu_add_device,
5316 .remove_device = intel_iommu_remove_device,
5317 .get_resv_regions = intel_iommu_get_resv_regions,
5318 .put_resv_regions = intel_iommu_put_resv_regions,
5319 .device_group = pci_device_group,
5320 .pgsize_bitmap = INTEL_IOMMU_PGSIZES,
5321};
5322
5323static void quirk_iommu_g4x_gfx(struct pci_dev *dev)
5324{
5325
5326 pr_info("Disabling IOMMU for graphics on this chipset\n");
5327 dmar_map_gfx = 0;
5328}
5329
5330DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_g4x_gfx);
5331DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_g4x_gfx);
5332DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_g4x_gfx);
5333DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_g4x_gfx);
5334DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_g4x_gfx);
5335DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_g4x_gfx);
5336DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_g4x_gfx);
5337
5338static void quirk_iommu_rwbf(struct pci_dev *dev)
5339{
5340
5341
5342
5343
5344 pr_info("Forcing write-buffer flush capability\n");
5345 rwbf_quirk = 1;
5346}
5347
5348DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);
5349DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_rwbf);
5350DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_rwbf);
5351DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_rwbf);
5352DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_rwbf);
5353DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_rwbf);
5354DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_rwbf);
5355
5356#define GGC 0x52
5357#define GGC_MEMORY_SIZE_MASK (0xf << 8)
5358#define GGC_MEMORY_SIZE_NONE (0x0 << 8)
5359#define GGC_MEMORY_SIZE_1M (0x1 << 8)
5360#define GGC_MEMORY_SIZE_2M (0x3 << 8)
5361#define GGC_MEMORY_VT_ENABLED (0x8 << 8)
5362#define GGC_MEMORY_SIZE_2M_VT (0x9 << 8)
5363#define GGC_MEMORY_SIZE_3M_VT (0xa << 8)
5364#define GGC_MEMORY_SIZE_4M_VT (0xb << 8)
5365
5366static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev)
5367{
5368 unsigned short ggc;
5369
5370 if (pci_read_config_word(dev, GGC, &ggc))
5371 return;
5372
5373 if (!(ggc & GGC_MEMORY_VT_ENABLED)) {
5374 pr_info("BIOS has allocated no shadow GTT; disabling IOMMU for graphics\n");
5375 dmar_map_gfx = 0;
5376 } else if (dmar_map_gfx) {
5377
5378 pr_info("Disabling batched IOTLB flush on Ironlake\n");
5379 intel_iommu_strict = 1;
5380 }
5381}
5382DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0040, quirk_calpella_no_shadow_gtt);
5383DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0044, quirk_calpella_no_shadow_gtt);
5384DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0062, quirk_calpella_no_shadow_gtt);
5385DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x006a, quirk_calpella_no_shadow_gtt);
5386
5387
5388
5389
5390
5391
5392
5393
5394static void __init check_tylersburg_isoch(void)
5395{
5396 struct pci_dev *pdev;
5397 uint32_t vtisochctrl;
5398
5399
5400 pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x3a3e, NULL);
5401 if (!pdev)
5402 return;
5403 pci_dev_put(pdev);
5404
5405
5406
5407
5408 pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x342e, NULL);
5409 if (!pdev)
5410 return;
5411
5412 if (pci_read_config_dword(pdev, 0x188, &vtisochctrl)) {
5413 pci_dev_put(pdev);
5414 return;
5415 }
5416
5417 pci_dev_put(pdev);
5418
5419
5420 if (vtisochctrl & 1)
5421 return;
5422
5423
5424 vtisochctrl &= 0x1c;
5425
5426
5427 if (vtisochctrl == 0x10)
5428 return;
5429
5430
5431 if (!vtisochctrl) {
5432 WARN(1, "Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.\n"
5433 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
5434 dmi_get_system_info(DMI_BIOS_VENDOR),
5435 dmi_get_system_info(DMI_BIOS_VERSION),
5436 dmi_get_system_info(DMI_PRODUCT_VERSION));
5437 iommu_identity_mapping |= IDENTMAP_AZALIA;
5438 return;
5439 }
5440
5441 pr_warn("Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n",
5442 vtisochctrl);
5443}
5444