xref: /openbmc/linux/drivers/iommu/intel/iommu.c (revision d87c25e8)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright © 2006-2014 Intel Corporation.
4  *
5  * Authors: David Woodhouse <dwmw2@infradead.org>,
6  *          Ashok Raj <ashok.raj@intel.com>,
7  *          Shaohua Li <shaohua.li@intel.com>,
8  *          Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
9  *          Fenghua Yu <fenghua.yu@intel.com>
10  *          Joerg Roedel <jroedel@suse.de>
11  */
12 
13 #define pr_fmt(fmt)     "DMAR: " fmt
14 #define dev_fmt(fmt)    pr_fmt(fmt)
15 
16 #include <linux/init.h>
17 #include <linux/bitmap.h>
18 #include <linux/debugfs.h>
19 #include <linux/export.h>
20 #include <linux/slab.h>
21 #include <linux/irq.h>
22 #include <linux/interrupt.h>
23 #include <linux/spinlock.h>
24 #include <linux/pci.h>
25 #include <linux/dmar.h>
26 #include <linux/dma-map-ops.h>
27 #include <linux/mempool.h>
28 #include <linux/memory.h>
29 #include <linux/cpu.h>
30 #include <linux/timer.h>
31 #include <linux/io.h>
32 #include <linux/iova.h>
33 #include <linux/iommu.h>
34 #include <linux/dma-iommu.h>
35 #include <linux/intel-iommu.h>
36 #include <linux/intel-svm.h>
37 #include <linux/syscore_ops.h>
38 #include <linux/tboot.h>
39 #include <linux/dmi.h>
40 #include <linux/pci-ats.h>
41 #include <linux/memblock.h>
42 #include <linux/dma-direct.h>
43 #include <linux/crash_dump.h>
44 #include <linux/numa.h>
45 #include <asm/irq_remapping.h>
46 #include <asm/cacheflush.h>
47 #include <asm/iommu.h>
48 
49 #include "../irq_remapping.h"
50 #include "../iommu-sva-lib.h"
51 #include "pasid.h"
52 #include "cap_audit.h"
53 
54 #define ROOT_SIZE		VTD_PAGE_SIZE
55 #define CONTEXT_SIZE		VTD_PAGE_SIZE
56 
57 #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
58 #define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
59 #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
60 #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
61 
62 #define IOAPIC_RANGE_START	(0xfee00000)
63 #define IOAPIC_RANGE_END	(0xfeefffff)
64 #define IOVA_START_ADDR		(0x1000)
65 
66 #define DEFAULT_DOMAIN_ADDRESS_WIDTH 57
67 
68 #define MAX_AGAW_WIDTH 64
69 #define MAX_AGAW_PFN_WIDTH	(MAX_AGAW_WIDTH - VTD_PAGE_SHIFT)
70 
71 #define __DOMAIN_MAX_PFN(gaw)  ((((uint64_t)1) << ((gaw) - VTD_PAGE_SHIFT)) - 1)
72 #define __DOMAIN_MAX_ADDR(gaw) ((((uint64_t)1) << (gaw)) - 1)
73 
74 /* We limit DOMAIN_MAX_PFN to fit in an unsigned long, and DOMAIN_MAX_ADDR
75    to match. That way, we can use 'unsigned long' for PFNs with impunity. */
76 #define DOMAIN_MAX_PFN(gaw)	((unsigned long) min_t(uint64_t, \
77 				__DOMAIN_MAX_PFN(gaw), (unsigned long)-1))
78 #define DOMAIN_MAX_ADDR(gaw)	(((uint64_t)__DOMAIN_MAX_PFN(gaw)) << VTD_PAGE_SHIFT)
79 
80 /* IO virtual address start page frame number */
81 #define IOVA_START_PFN		(1)
82 
83 #define IOVA_PFN(addr)		((addr) >> PAGE_SHIFT)
84 
85 /* page table handling */
86 #define LEVEL_STRIDE		(9)
87 #define LEVEL_MASK		(((u64)1 << LEVEL_STRIDE) - 1)
88 
89 static inline int agaw_to_level(int agaw)
90 {
91 	return agaw + 2;
92 }
93 
94 static inline int agaw_to_width(int agaw)
95 {
96 	return min_t(int, 30 + agaw * LEVEL_STRIDE, MAX_AGAW_WIDTH);
97 }
98 
99 static inline int width_to_agaw(int width)
100 {
101 	return DIV_ROUND_UP(width - 30, LEVEL_STRIDE);
102 }
103 
104 static inline unsigned int level_to_offset_bits(int level)
105 {
106 	return (level - 1) * LEVEL_STRIDE;
107 }
108 
109 static inline int pfn_level_offset(u64 pfn, int level)
110 {
111 	return (pfn >> level_to_offset_bits(level)) & LEVEL_MASK;
112 }
113 
114 static inline u64 level_mask(int level)
115 {
116 	return -1ULL << level_to_offset_bits(level);
117 }
118 
119 static inline u64 level_size(int level)
120 {
121 	return 1ULL << level_to_offset_bits(level);
122 }
123 
124 static inline u64 align_to_level(u64 pfn, int level)
125 {
126 	return (pfn + level_size(level) - 1) & level_mask(level);
127 }
128 
129 static inline unsigned long lvl_to_nr_pages(unsigned int lvl)
130 {
131 	return 1UL << min_t(int, (lvl - 1) * LEVEL_STRIDE, MAX_AGAW_PFN_WIDTH);
132 }
133 
134 /* VT-d pages must always be _smaller_ than MM pages. Otherwise things
135    are never going to work. */
136 static inline unsigned long mm_to_dma_pfn(unsigned long mm_pfn)
137 {
138 	return mm_pfn << (PAGE_SHIFT - VTD_PAGE_SHIFT);
139 }
140 static inline unsigned long page_to_dma_pfn(struct page *pg)
141 {
142 	return mm_to_dma_pfn(page_to_pfn(pg));
143 }
144 static inline unsigned long virt_to_dma_pfn(void *p)
145 {
146 	return page_to_dma_pfn(virt_to_page(p));
147 }
148 
149 /* global iommu list, set NULL for ignored DMAR units */
150 static struct intel_iommu **g_iommus;
151 
152 static void __init check_tylersburg_isoch(void);
153 static int rwbf_quirk;
154 static inline struct device_domain_info *
155 dmar_search_domain_by_dev_info(int segment, int bus, int devfn);
156 
157 /*
158  * set to 1 to panic kernel if can't successfully enable VT-d
159  * (used when kernel is launched w/ TXT)
160  */
161 static int force_on = 0;
162 static int intel_iommu_tboot_noforce;
163 static int no_platform_optin;
164 
165 #define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
166 
167 /*
168  * Take a root_entry and return the Lower Context Table Pointer (LCTP)
169  * if marked present.
170  */
171 static phys_addr_t root_entry_lctp(struct root_entry *re)
172 {
173 	if (!(re->lo & 1))
174 		return 0;
175 
176 	return re->lo & VTD_PAGE_MASK;
177 }
178 
179 /*
180  * Take a root_entry and return the Upper Context Table Pointer (UCTP)
181  * if marked present.
182  */
183 static phys_addr_t root_entry_uctp(struct root_entry *re)
184 {
185 	if (!(re->hi & 1))
186 		return 0;
187 
188 	return re->hi & VTD_PAGE_MASK;
189 }
190 
191 static inline void context_clear_pasid_enable(struct context_entry *context)
192 {
193 	context->lo &= ~(1ULL << 11);
194 }
195 
196 static inline bool context_pasid_enabled(struct context_entry *context)
197 {
198 	return !!(context->lo & (1ULL << 11));
199 }
200 
201 static inline void context_set_copied(struct context_entry *context)
202 {
203 	context->hi |= (1ull << 3);
204 }
205 
206 static inline bool context_copied(struct context_entry *context)
207 {
208 	return !!(context->hi & (1ULL << 3));
209 }
210 
211 static inline bool __context_present(struct context_entry *context)
212 {
213 	return (context->lo & 1);
214 }
215 
216 bool context_present(struct context_entry *context)
217 {
218 	return context_pasid_enabled(context) ?
219 	     __context_present(context) :
220 	     __context_present(context) && !context_copied(context);
221 }
222 
223 static inline void context_set_present(struct context_entry *context)
224 {
225 	context->lo |= 1;
226 }
227 
228 static inline void context_set_fault_enable(struct context_entry *context)
229 {
230 	context->lo &= (((u64)-1) << 2) | 1;
231 }
232 
233 static inline void context_set_translation_type(struct context_entry *context,
234 						unsigned long value)
235 {
236 	context->lo &= (((u64)-1) << 4) | 3;
237 	context->lo |= (value & 3) << 2;
238 }
239 
240 static inline void context_set_address_root(struct context_entry *context,
241 					    unsigned long value)
242 {
243 	context->lo &= ~VTD_PAGE_MASK;
244 	context->lo |= value & VTD_PAGE_MASK;
245 }
246 
247 static inline void context_set_address_width(struct context_entry *context,
248 					     unsigned long value)
249 {
250 	context->hi |= value & 7;
251 }
252 
253 static inline void context_set_domain_id(struct context_entry *context,
254 					 unsigned long value)
255 {
256 	context->hi |= (value & ((1 << 16) - 1)) << 8;
257 }
258 
259 static inline int context_domain_id(struct context_entry *c)
260 {
261 	return((c->hi >> 8) & 0xffff);
262 }
263 
264 static inline void context_clear_entry(struct context_entry *context)
265 {
266 	context->lo = 0;
267 	context->hi = 0;
268 }
269 
270 /*
271  * This domain is a statically identity mapping domain.
272  *	1. This domain creats a static 1:1 mapping to all usable memory.
273  * 	2. It maps to each iommu if successful.
274  *	3. Each iommu mapps to this domain if successful.
275  */
276 static struct dmar_domain *si_domain;
277 static int hw_pass_through = 1;
278 
279 #define for_each_domain_iommu(idx, domain)			\
280 	for (idx = 0; idx < g_num_of_iommus; idx++)		\
281 		if (domain->iommu_refcnt[idx])
282 
283 struct dmar_rmrr_unit {
284 	struct list_head list;		/* list of rmrr units	*/
285 	struct acpi_dmar_header *hdr;	/* ACPI header		*/
286 	u64	base_address;		/* reserved base address*/
287 	u64	end_address;		/* reserved end address */
288 	struct dmar_dev_scope *devices;	/* target devices */
289 	int	devices_cnt;		/* target device count */
290 };
291 
292 struct dmar_atsr_unit {
293 	struct list_head list;		/* list of ATSR units */
294 	struct acpi_dmar_header *hdr;	/* ACPI header */
295 	struct dmar_dev_scope *devices;	/* target devices */
296 	int devices_cnt;		/* target device count */
297 	u8 include_all:1;		/* include all ports */
298 };
299 
300 struct dmar_satc_unit {
301 	struct list_head list;		/* list of SATC units */
302 	struct acpi_dmar_header *hdr;	/* ACPI header */
303 	struct dmar_dev_scope *devices;	/* target devices */
304 	struct intel_iommu *iommu;	/* the corresponding iommu */
305 	int devices_cnt;		/* target device count */
306 	u8 atc_required:1;		/* ATS is required */
307 };
308 
309 static LIST_HEAD(dmar_atsr_units);
310 static LIST_HEAD(dmar_rmrr_units);
311 static LIST_HEAD(dmar_satc_units);
312 
313 #define for_each_rmrr_units(rmrr) \
314 	list_for_each_entry(rmrr, &dmar_rmrr_units, list)
315 
316 /* bitmap for indexing intel_iommus */
317 static int g_num_of_iommus;
318 
319 static void domain_exit(struct dmar_domain *domain);
320 static void domain_remove_dev_info(struct dmar_domain *domain);
321 static void dmar_remove_one_dev_info(struct device *dev);
322 static void __dmar_remove_one_dev_info(struct device_domain_info *info);
323 static int intel_iommu_attach_device(struct iommu_domain *domain,
324 				     struct device *dev);
325 static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,
326 					    dma_addr_t iova);
327 
328 int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON);
329 int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON);
330 
331 int intel_iommu_enabled = 0;
332 EXPORT_SYMBOL_GPL(intel_iommu_enabled);
333 
334 static int dmar_map_gfx = 1;
335 static int intel_iommu_superpage = 1;
336 static int iommu_identity_mapping;
337 static int iommu_skip_te_disable;
338 
339 #define IDENTMAP_GFX		2
340 #define IDENTMAP_AZALIA		4
341 
342 int intel_iommu_gfx_mapped;
343 EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
344 
345 #define DEFER_DEVICE_DOMAIN_INFO ((struct device_domain_info *)(-2))
346 struct device_domain_info *get_domain_info(struct device *dev)
347 {
348 	struct device_domain_info *info;
349 
350 	if (!dev)
351 		return NULL;
352 
353 	info = dev_iommu_priv_get(dev);
354 	if (unlikely(info == DEFER_DEVICE_DOMAIN_INFO))
355 		return NULL;
356 
357 	return info;
358 }
359 
360 DEFINE_SPINLOCK(device_domain_lock);
361 static LIST_HEAD(device_domain_list);
362 
363 /*
364  * Iterate over elements in device_domain_list and call the specified
365  * callback @fn against each element.
366  */
367 int for_each_device_domain(int (*fn)(struct device_domain_info *info,
368 				     void *data), void *data)
369 {
370 	int ret = 0;
371 	unsigned long flags;
372 	struct device_domain_info *info;
373 
374 	spin_lock_irqsave(&device_domain_lock, flags);
375 	list_for_each_entry(info, &device_domain_list, global) {
376 		ret = fn(info, data);
377 		if (ret) {
378 			spin_unlock_irqrestore(&device_domain_lock, flags);
379 			return ret;
380 		}
381 	}
382 	spin_unlock_irqrestore(&device_domain_lock, flags);
383 
384 	return 0;
385 }
386 
387 const struct iommu_ops intel_iommu_ops;
388 
389 static bool translation_pre_enabled(struct intel_iommu *iommu)
390 {
391 	return (iommu->flags & VTD_FLAG_TRANS_PRE_ENABLED);
392 }
393 
394 static void clear_translation_pre_enabled(struct intel_iommu *iommu)
395 {
396 	iommu->flags &= ~VTD_FLAG_TRANS_PRE_ENABLED;
397 }
398 
399 static void init_translation_status(struct intel_iommu *iommu)
400 {
401 	u32 gsts;
402 
403 	gsts = readl(iommu->reg + DMAR_GSTS_REG);
404 	if (gsts & DMA_GSTS_TES)
405 		iommu->flags |= VTD_FLAG_TRANS_PRE_ENABLED;
406 }
407 
408 static int __init intel_iommu_setup(char *str)
409 {
410 	if (!str)
411 		return -EINVAL;
412 
413 	while (*str) {
414 		if (!strncmp(str, "on", 2)) {
415 			dmar_disabled = 0;
416 			pr_info("IOMMU enabled\n");
417 		} else if (!strncmp(str, "off", 3)) {
418 			dmar_disabled = 1;
419 			no_platform_optin = 1;
420 			pr_info("IOMMU disabled\n");
421 		} else if (!strncmp(str, "igfx_off", 8)) {
422 			dmar_map_gfx = 0;
423 			pr_info("Disable GFX device mapping\n");
424 		} else if (!strncmp(str, "forcedac", 8)) {
425 			pr_warn("intel_iommu=forcedac deprecated; use iommu.forcedac instead\n");
426 			iommu_dma_forcedac = true;
427 		} else if (!strncmp(str, "strict", 6)) {
428 			pr_warn("intel_iommu=strict deprecated; use iommu.strict=1 instead\n");
429 			iommu_set_dma_strict();
430 		} else if (!strncmp(str, "sp_off", 6)) {
431 			pr_info("Disable supported super page\n");
432 			intel_iommu_superpage = 0;
433 		} else if (!strncmp(str, "sm_on", 5)) {
434 			pr_info("Enable scalable mode if hardware supports\n");
435 			intel_iommu_sm = 1;
436 		} else if (!strncmp(str, "sm_off", 6)) {
437 			pr_info("Scalable mode is disallowed\n");
438 			intel_iommu_sm = 0;
439 		} else if (!strncmp(str, "tboot_noforce", 13)) {
440 			pr_info("Intel-IOMMU: not forcing on after tboot. This could expose security risk for tboot\n");
441 			intel_iommu_tboot_noforce = 1;
442 		} else {
443 			pr_notice("Unknown option - '%s'\n", str);
444 		}
445 
446 		str += strcspn(str, ",");
447 		while (*str == ',')
448 			str++;
449 	}
450 
451 	return 1;
452 }
453 __setup("intel_iommu=", intel_iommu_setup);
454 
455 static struct kmem_cache *iommu_domain_cache;
456 static struct kmem_cache *iommu_devinfo_cache;
457 
458 static struct dmar_domain* get_iommu_domain(struct intel_iommu *iommu, u16 did)
459 {
460 	struct dmar_domain **domains;
461 	int idx = did >> 8;
462 
463 	domains = iommu->domains[idx];
464 	if (!domains)
465 		return NULL;
466 
467 	return domains[did & 0xff];
468 }
469 
470 static void set_iommu_domain(struct intel_iommu *iommu, u16 did,
471 			     struct dmar_domain *domain)
472 {
473 	struct dmar_domain **domains;
474 	int idx = did >> 8;
475 
476 	if (!iommu->domains[idx]) {
477 		size_t size = 256 * sizeof(struct dmar_domain *);
478 		iommu->domains[idx] = kzalloc(size, GFP_ATOMIC);
479 	}
480 
481 	domains = iommu->domains[idx];
482 	if (WARN_ON(!domains))
483 		return;
484 	else
485 		domains[did & 0xff] = domain;
486 }
487 
488 void *alloc_pgtable_page(int node)
489 {
490 	struct page *page;
491 	void *vaddr = NULL;
492 
493 	page = alloc_pages_node(node, GFP_ATOMIC | __GFP_ZERO, 0);
494 	if (page)
495 		vaddr = page_address(page);
496 	return vaddr;
497 }
498 
499 void free_pgtable_page(void *vaddr)
500 {
501 	free_page((unsigned long)vaddr);
502 }
503 
504 static inline void *alloc_domain_mem(void)
505 {
506 	return kmem_cache_alloc(iommu_domain_cache, GFP_ATOMIC);
507 }
508 
509 static void free_domain_mem(void *vaddr)
510 {
511 	kmem_cache_free(iommu_domain_cache, vaddr);
512 }
513 
514 static inline void * alloc_devinfo_mem(void)
515 {
516 	return kmem_cache_alloc(iommu_devinfo_cache, GFP_ATOMIC);
517 }
518 
519 static inline void free_devinfo_mem(void *vaddr)
520 {
521 	kmem_cache_free(iommu_devinfo_cache, vaddr);
522 }
523 
524 static inline int domain_type_is_si(struct dmar_domain *domain)
525 {
526 	return domain->domain.type == IOMMU_DOMAIN_IDENTITY;
527 }
528 
529 static inline bool domain_use_first_level(struct dmar_domain *domain)
530 {
531 	return domain->flags & DOMAIN_FLAG_USE_FIRST_LEVEL;
532 }
533 
534 static inline int domain_pfn_supported(struct dmar_domain *domain,
535 				       unsigned long pfn)
536 {
537 	int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT;
538 
539 	return !(addr_width < BITS_PER_LONG && pfn >> addr_width);
540 }
541 
542 static int __iommu_calculate_agaw(struct intel_iommu *iommu, int max_gaw)
543 {
544 	unsigned long sagaw;
545 	int agaw;
546 
547 	sagaw = cap_sagaw(iommu->cap);
548 	for (agaw = width_to_agaw(max_gaw);
549 	     agaw >= 0; agaw--) {
550 		if (test_bit(agaw, &sagaw))
551 			break;
552 	}
553 
554 	return agaw;
555 }
556 
557 /*
558  * Calculate max SAGAW for each iommu.
559  */
560 int iommu_calculate_max_sagaw(struct intel_iommu *iommu)
561 {
562 	return __iommu_calculate_agaw(iommu, MAX_AGAW_WIDTH);
563 }
564 
565 /*
566  * calculate agaw for each iommu.
567  * "SAGAW" may be different across iommus, use a default agaw, and
568  * get a supported less agaw for iommus that don't support the default agaw.
569  */
570 int iommu_calculate_agaw(struct intel_iommu *iommu)
571 {
572 	return __iommu_calculate_agaw(iommu, DEFAULT_DOMAIN_ADDRESS_WIDTH);
573 }
574 
575 /* This functionin only returns single iommu in a domain */
576 struct intel_iommu *domain_get_iommu(struct dmar_domain *domain)
577 {
578 	int iommu_id;
579 
580 	/* si_domain and vm domain should not get here. */
581 	if (WARN_ON(!iommu_is_dma_domain(&domain->domain)))
582 		return NULL;
583 
584 	for_each_domain_iommu(iommu_id, domain)
585 		break;
586 
587 	if (iommu_id < 0 || iommu_id >= g_num_of_iommus)
588 		return NULL;
589 
590 	return g_iommus[iommu_id];
591 }
592 
593 static inline bool iommu_paging_structure_coherency(struct intel_iommu *iommu)
594 {
595 	return sm_supported(iommu) ?
596 			ecap_smpwc(iommu->ecap) : ecap_coherent(iommu->ecap);
597 }
598 
599 static void domain_update_iommu_coherency(struct dmar_domain *domain)
600 {
601 	struct dmar_drhd_unit *drhd;
602 	struct intel_iommu *iommu;
603 	bool found = false;
604 	int i;
605 
606 	domain->iommu_coherency = true;
607 
608 	for_each_domain_iommu(i, domain) {
609 		found = true;
610 		if (!iommu_paging_structure_coherency(g_iommus[i])) {
611 			domain->iommu_coherency = false;
612 			break;
613 		}
614 	}
615 	if (found)
616 		return;
617 
618 	/* No hardware attached; use lowest common denominator */
619 	rcu_read_lock();
620 	for_each_active_iommu(iommu, drhd) {
621 		if (!iommu_paging_structure_coherency(iommu)) {
622 			domain->iommu_coherency = false;
623 			break;
624 		}
625 	}
626 	rcu_read_unlock();
627 }
628 
629 static bool domain_update_iommu_snooping(struct intel_iommu *skip)
630 {
631 	struct dmar_drhd_unit *drhd;
632 	struct intel_iommu *iommu;
633 	bool ret = true;
634 
635 	rcu_read_lock();
636 	for_each_active_iommu(iommu, drhd) {
637 		if (iommu != skip) {
638 			/*
639 			 * If the hardware is operating in the scalable mode,
640 			 * the snooping control is always supported since we
641 			 * always set PASID-table-entry.PGSNP bit if the domain
642 			 * is managed outside (UNMANAGED).
643 			 */
644 			if (!sm_supported(iommu) &&
645 			    !ecap_sc_support(iommu->ecap)) {
646 				ret = false;
647 				break;
648 			}
649 		}
650 	}
651 	rcu_read_unlock();
652 
653 	return ret;
654 }
655 
656 static int domain_update_iommu_superpage(struct dmar_domain *domain,
657 					 struct intel_iommu *skip)
658 {
659 	struct dmar_drhd_unit *drhd;
660 	struct intel_iommu *iommu;
661 	int mask = 0x3;
662 
663 	if (!intel_iommu_superpage)
664 		return 0;
665 
666 	/* set iommu_superpage to the smallest common denominator */
667 	rcu_read_lock();
668 	for_each_active_iommu(iommu, drhd) {
669 		if (iommu != skip) {
670 			if (domain && domain_use_first_level(domain)) {
671 				if (!cap_fl1gp_support(iommu->cap))
672 					mask = 0x1;
673 			} else {
674 				mask &= cap_super_page_val(iommu->cap);
675 			}
676 
677 			if (!mask)
678 				break;
679 		}
680 	}
681 	rcu_read_unlock();
682 
683 	return fls(mask);
684 }
685 
686 static int domain_update_device_node(struct dmar_domain *domain)
687 {
688 	struct device_domain_info *info;
689 	int nid = NUMA_NO_NODE;
690 
691 	assert_spin_locked(&device_domain_lock);
692 
693 	if (list_empty(&domain->devices))
694 		return NUMA_NO_NODE;
695 
696 	list_for_each_entry(info, &domain->devices, link) {
697 		if (!info->dev)
698 			continue;
699 
700 		/*
701 		 * There could possibly be multiple device numa nodes as devices
702 		 * within the same domain may sit behind different IOMMUs. There
703 		 * isn't perfect answer in such situation, so we select first
704 		 * come first served policy.
705 		 */
706 		nid = dev_to_node(info->dev);
707 		if (nid != NUMA_NO_NODE)
708 			break;
709 	}
710 
711 	return nid;
712 }
713 
714 static void domain_update_iotlb(struct dmar_domain *domain);
715 
716 /* Return the super pagesize bitmap if supported. */
717 static unsigned long domain_super_pgsize_bitmap(struct dmar_domain *domain)
718 {
719 	unsigned long bitmap = 0;
720 
721 	/*
722 	 * 1-level super page supports page size of 2MiB, 2-level super page
723 	 * supports page size of both 2MiB and 1GiB.
724 	 */
725 	if (domain->iommu_superpage == 1)
726 		bitmap |= SZ_2M;
727 	else if (domain->iommu_superpage == 2)
728 		bitmap |= SZ_2M | SZ_1G;
729 
730 	return bitmap;
731 }
732 
733 /* Some capabilities may be different across iommus */
734 static void domain_update_iommu_cap(struct dmar_domain *domain)
735 {
736 	domain_update_iommu_coherency(domain);
737 	domain->iommu_snooping = domain_update_iommu_snooping(NULL);
738 	domain->iommu_superpage = domain_update_iommu_superpage(domain, NULL);
739 
740 	/*
741 	 * If RHSA is missing, we should default to the device numa domain
742 	 * as fall back.
743 	 */
744 	if (domain->nid == NUMA_NO_NODE)
745 		domain->nid = domain_update_device_node(domain);
746 
747 	/*
748 	 * First-level translation restricts the input-address to a
749 	 * canonical address (i.e., address bits 63:N have the same
750 	 * value as address bit [N-1], where N is 48-bits with 4-level
751 	 * paging and 57-bits with 5-level paging). Hence, skip bit
752 	 * [N-1].
753 	 */
754 	if (domain_use_first_level(domain))
755 		domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw - 1);
756 	else
757 		domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw);
758 
759 	domain->domain.pgsize_bitmap |= domain_super_pgsize_bitmap(domain);
760 	domain_update_iotlb(domain);
761 }
762 
763 struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus,
764 					 u8 devfn, int alloc)
765 {
766 	struct root_entry *root = &iommu->root_entry[bus];
767 	struct context_entry *context;
768 	u64 *entry;
769 
770 	entry = &root->lo;
771 	if (sm_supported(iommu)) {
772 		if (devfn >= 0x80) {
773 			devfn -= 0x80;
774 			entry = &root->hi;
775 		}
776 		devfn *= 2;
777 	}
778 	if (*entry & 1)
779 		context = phys_to_virt(*entry & VTD_PAGE_MASK);
780 	else {
781 		unsigned long phy_addr;
782 		if (!alloc)
783 			return NULL;
784 
785 		context = alloc_pgtable_page(iommu->node);
786 		if (!context)
787 			return NULL;
788 
789 		__iommu_flush_cache(iommu, (void *)context, CONTEXT_SIZE);
790 		phy_addr = virt_to_phys((void *)context);
791 		*entry = phy_addr | 1;
792 		__iommu_flush_cache(iommu, entry, sizeof(*entry));
793 	}
794 	return &context[devfn];
795 }
796 
797 static bool attach_deferred(struct device *dev)
798 {
799 	return dev_iommu_priv_get(dev) == DEFER_DEVICE_DOMAIN_INFO;
800 }
801 
802 /**
803  * is_downstream_to_pci_bridge - test if a device belongs to the PCI
804  *				 sub-hierarchy of a candidate PCI-PCI bridge
805  * @dev: candidate PCI device belonging to @bridge PCI sub-hierarchy
806  * @bridge: the candidate PCI-PCI bridge
807  *
808  * Return: true if @dev belongs to @bridge PCI sub-hierarchy, else false.
809  */
810 static bool
811 is_downstream_to_pci_bridge(struct device *dev, struct device *bridge)
812 {
813 	struct pci_dev *pdev, *pbridge;
814 
815 	if (!dev_is_pci(dev) || !dev_is_pci(bridge))
816 		return false;
817 
818 	pdev = to_pci_dev(dev);
819 	pbridge = to_pci_dev(bridge);
820 
821 	if (pbridge->subordinate &&
822 	    pbridge->subordinate->number <= pdev->bus->number &&
823 	    pbridge->subordinate->busn_res.end >= pdev->bus->number)
824 		return true;
825 
826 	return false;
827 }
828 
829 static bool quirk_ioat_snb_local_iommu(struct pci_dev *pdev)
830 {
831 	struct dmar_drhd_unit *drhd;
832 	u32 vtbar;
833 	int rc;
834 
835 	/* We know that this device on this chipset has its own IOMMU.
836 	 * If we find it under a different IOMMU, then the BIOS is lying
837 	 * to us. Hope that the IOMMU for this device is actually
838 	 * disabled, and it needs no translation...
839 	 */
840 	rc = pci_bus_read_config_dword(pdev->bus, PCI_DEVFN(0, 0), 0xb0, &vtbar);
841 	if (rc) {
842 		/* "can't" happen */
843 		dev_info(&pdev->dev, "failed to run vt-d quirk\n");
844 		return false;
845 	}
846 	vtbar &= 0xffff0000;
847 
848 	/* we know that the this iommu should be at offset 0xa000 from vtbar */
849 	drhd = dmar_find_matched_drhd_unit(pdev);
850 	if (!drhd || drhd->reg_base_addr - vtbar != 0xa000) {
851 		pr_warn_once(FW_BUG "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n");
852 		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
853 		return true;
854 	}
855 
856 	return false;
857 }
858 
859 static bool iommu_is_dummy(struct intel_iommu *iommu, struct device *dev)
860 {
861 	if (!iommu || iommu->drhd->ignored)
862 		return true;
863 
864 	if (dev_is_pci(dev)) {
865 		struct pci_dev *pdev = to_pci_dev(dev);
866 
867 		if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
868 		    pdev->device == PCI_DEVICE_ID_INTEL_IOAT_SNB &&
869 		    quirk_ioat_snb_local_iommu(pdev))
870 			return true;
871 	}
872 
873 	return false;
874 }
875 
876 struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn)
877 {
878 	struct dmar_drhd_unit *drhd = NULL;
879 	struct pci_dev *pdev = NULL;
880 	struct intel_iommu *iommu;
881 	struct device *tmp;
882 	u16 segment = 0;
883 	int i;
884 
885 	if (!dev)
886 		return NULL;
887 
888 	if (dev_is_pci(dev)) {
889 		struct pci_dev *pf_pdev;
890 
891 		pdev = pci_real_dma_dev(to_pci_dev(dev));
892 
893 		/* VFs aren't listed in scope tables; we need to look up
894 		 * the PF instead to find the IOMMU. */
895 		pf_pdev = pci_physfn(pdev);
896 		dev = &pf_pdev->dev;
897 		segment = pci_domain_nr(pdev->bus);
898 	} else if (has_acpi_companion(dev))
899 		dev = &ACPI_COMPANION(dev)->dev;
900 
901 	rcu_read_lock();
902 	for_each_iommu(iommu, drhd) {
903 		if (pdev && segment != drhd->segment)
904 			continue;
905 
906 		for_each_active_dev_scope(drhd->devices,
907 					  drhd->devices_cnt, i, tmp) {
908 			if (tmp == dev) {
909 				/* For a VF use its original BDF# not that of the PF
910 				 * which we used for the IOMMU lookup. Strictly speaking
911 				 * we could do this for all PCI devices; we only need to
912 				 * get the BDF# from the scope table for ACPI matches. */
913 				if (pdev && pdev->is_virtfn)
914 					goto got_pdev;
915 
916 				if (bus && devfn) {
917 					*bus = drhd->devices[i].bus;
918 					*devfn = drhd->devices[i].devfn;
919 				}
920 				goto out;
921 			}
922 
923 			if (is_downstream_to_pci_bridge(dev, tmp))
924 				goto got_pdev;
925 		}
926 
927 		if (pdev && drhd->include_all) {
928 		got_pdev:
929 			if (bus && devfn) {
930 				*bus = pdev->bus->number;
931 				*devfn = pdev->devfn;
932 			}
933 			goto out;
934 		}
935 	}
936 	iommu = NULL;
937  out:
938 	if (iommu_is_dummy(iommu, dev))
939 		iommu = NULL;
940 
941 	rcu_read_unlock();
942 
943 	return iommu;
944 }
945 
946 static void domain_flush_cache(struct dmar_domain *domain,
947 			       void *addr, int size)
948 {
949 	if (!domain->iommu_coherency)
950 		clflush_cache_range(addr, size);
951 }
952 
953 static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn)
954 {
955 	struct context_entry *context;
956 	int ret = 0;
957 	unsigned long flags;
958 
959 	spin_lock_irqsave(&iommu->lock, flags);
960 	context = iommu_context_addr(iommu, bus, devfn, 0);
961 	if (context)
962 		ret = context_present(context);
963 	spin_unlock_irqrestore(&iommu->lock, flags);
964 	return ret;
965 }
966 
967 static void free_context_table(struct intel_iommu *iommu)
968 {
969 	int i;
970 	unsigned long flags;
971 	struct context_entry *context;
972 
973 	spin_lock_irqsave(&iommu->lock, flags);
974 	if (!iommu->root_entry) {
975 		goto out;
976 	}
977 	for (i = 0; i < ROOT_ENTRY_NR; i++) {
978 		context = iommu_context_addr(iommu, i, 0, 0);
979 		if (context)
980 			free_pgtable_page(context);
981 
982 		if (!sm_supported(iommu))
983 			continue;
984 
985 		context = iommu_context_addr(iommu, i, 0x80, 0);
986 		if (context)
987 			free_pgtable_page(context);
988 
989 	}
990 	free_pgtable_page(iommu->root_entry);
991 	iommu->root_entry = NULL;
992 out:
993 	spin_unlock_irqrestore(&iommu->lock, flags);
994 }
995 
996 #ifdef CONFIG_DMAR_DEBUG
997 static void pgtable_walk(struct intel_iommu *iommu, unsigned long pfn, u8 bus, u8 devfn)
998 {
999 	struct device_domain_info *info;
1000 	struct dma_pte *parent, *pte;
1001 	struct dmar_domain *domain;
1002 	int offset, level;
1003 
1004 	info = dmar_search_domain_by_dev_info(iommu->segment, bus, devfn);
1005 	if (!info || !info->domain) {
1006 		pr_info("device [%02x:%02x.%d] not probed\n",
1007 			bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
1008 		return;
1009 	}
1010 
1011 	domain = info->domain;
1012 	level = agaw_to_level(domain->agaw);
1013 	parent = domain->pgd;
1014 	if (!parent) {
1015 		pr_info("no page table setup\n");
1016 		return;
1017 	}
1018 
1019 	while (1) {
1020 		offset = pfn_level_offset(pfn, level);
1021 		pte = &parent[offset];
1022 		if (!pte || (dma_pte_superpage(pte) || !dma_pte_present(pte))) {
1023 			pr_info("PTE not present at level %d\n", level);
1024 			break;
1025 		}
1026 
1027 		pr_info("pte level: %d, pte value: 0x%016llx\n", level, pte->val);
1028 
1029 		if (level == 1)
1030 			break;
1031 
1032 		parent = phys_to_virt(dma_pte_addr(pte));
1033 		level--;
1034 	}
1035 }
1036 
1037 void dmar_fault_dump_ptes(struct intel_iommu *iommu, u16 source_id,
1038 			  unsigned long long addr, u32 pasid)
1039 {
1040 	struct pasid_dir_entry *dir, *pde;
1041 	struct pasid_entry *entries, *pte;
1042 	struct context_entry *ctx_entry;
1043 	struct root_entry *rt_entry;
1044 	u8 devfn = source_id & 0xff;
1045 	u8 bus = source_id >> 8;
1046 	int i, dir_index, index;
1047 
1048 	pr_info("Dump %s table entries for IOVA 0x%llx\n", iommu->name, addr);
1049 
1050 	/* root entry dump */
1051 	rt_entry = &iommu->root_entry[bus];
1052 	if (!rt_entry) {
1053 		pr_info("root table entry is not present\n");
1054 		return;
1055 	}
1056 
1057 	if (sm_supported(iommu))
1058 		pr_info("scalable mode root entry: hi 0x%016llx, low 0x%016llx\n",
1059 			rt_entry->hi, rt_entry->lo);
1060 	else
1061 		pr_info("root entry: 0x%016llx", rt_entry->lo);
1062 
1063 	/* context entry dump */
1064 	ctx_entry = iommu_context_addr(iommu, bus, devfn, 0);
1065 	if (!ctx_entry) {
1066 		pr_info("context table entry is not present\n");
1067 		return;
1068 	}
1069 
1070 	pr_info("context entry: hi 0x%016llx, low 0x%016llx\n",
1071 		ctx_entry->hi, ctx_entry->lo);
1072 
1073 	/* legacy mode does not require PASID entries */
1074 	if (!sm_supported(iommu))
1075 		goto pgtable_walk;
1076 
1077 	/* get the pointer to pasid directory entry */
1078 	dir = phys_to_virt(ctx_entry->lo & VTD_PAGE_MASK);
1079 	if (!dir) {
1080 		pr_info("pasid directory entry is not present\n");
1081 		return;
1082 	}
1083 	/* For request-without-pasid, get the pasid from context entry */
1084 	if (intel_iommu_sm && pasid == INVALID_IOASID)
1085 		pasid = PASID_RID2PASID;
1086 
1087 	dir_index = pasid >> PASID_PDE_SHIFT;
1088 	pde = &dir[dir_index];
1089 	pr_info("pasid dir entry: 0x%016llx\n", pde->val);
1090 
1091 	/* get the pointer to the pasid table entry */
1092 	entries = get_pasid_table_from_pde(pde);
1093 	if (!entries) {
1094 		pr_info("pasid table entry is not present\n");
1095 		return;
1096 	}
1097 	index = pasid & PASID_PTE_MASK;
1098 	pte = &entries[index];
1099 	for (i = 0; i < ARRAY_SIZE(pte->val); i++)
1100 		pr_info("pasid table entry[%d]: 0x%016llx\n", i, pte->val[i]);
1101 
1102 pgtable_walk:
1103 	pgtable_walk(iommu, addr >> VTD_PAGE_SHIFT, bus, devfn);
1104 }
1105 #endif
1106 
1107 static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
1108 				      unsigned long pfn, int *target_level)
1109 {
1110 	struct dma_pte *parent, *pte;
1111 	int level = agaw_to_level(domain->agaw);
1112 	int offset;
1113 
1114 	BUG_ON(!domain->pgd);
1115 
1116 	if (!domain_pfn_supported(domain, pfn))
1117 		/* Address beyond IOMMU's addressing capabilities. */
1118 		return NULL;
1119 
1120 	parent = domain->pgd;
1121 
1122 	while (1) {
1123 		void *tmp_page;
1124 
1125 		offset = pfn_level_offset(pfn, level);
1126 		pte = &parent[offset];
1127 		if (!*target_level && (dma_pte_superpage(pte) || !dma_pte_present(pte)))
1128 			break;
1129 		if (level == *target_level)
1130 			break;
1131 
1132 		if (!dma_pte_present(pte)) {
1133 			uint64_t pteval;
1134 
1135 			tmp_page = alloc_pgtable_page(domain->nid);
1136 
1137 			if (!tmp_page)
1138 				return NULL;
1139 
1140 			domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE);
1141 			pteval = ((uint64_t)virt_to_dma_pfn(tmp_page) << VTD_PAGE_SHIFT) | DMA_PTE_READ | DMA_PTE_WRITE;
1142 			if (domain_use_first_level(domain)) {
1143 				pteval |= DMA_FL_PTE_XD | DMA_FL_PTE_US;
1144 				if (iommu_is_dma_domain(&domain->domain))
1145 					pteval |= DMA_FL_PTE_ACCESS;
1146 			}
1147 			if (cmpxchg64(&pte->val, 0ULL, pteval))
1148 				/* Someone else set it while we were thinking; use theirs. */
1149 				free_pgtable_page(tmp_page);
1150 			else
1151 				domain_flush_cache(domain, pte, sizeof(*pte));
1152 		}
1153 		if (level == 1)
1154 			break;
1155 
1156 		parent = phys_to_virt(dma_pte_addr(pte));
1157 		level--;
1158 	}
1159 
1160 	if (!*target_level)
1161 		*target_level = level;
1162 
1163 	return pte;
1164 }
1165 
1166 /* return address's pte at specific level */
1167 static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain,
1168 					 unsigned long pfn,
1169 					 int level, int *large_page)
1170 {
1171 	struct dma_pte *parent, *pte;
1172 	int total = agaw_to_level(domain->agaw);
1173 	int offset;
1174 
1175 	parent = domain->pgd;
1176 	while (level <= total) {
1177 		offset = pfn_level_offset(pfn, total);
1178 		pte = &parent[offset];
1179 		if (level == total)
1180 			return pte;
1181 
1182 		if (!dma_pte_present(pte)) {
1183 			*large_page = total;
1184 			break;
1185 		}
1186 
1187 		if (dma_pte_superpage(pte)) {
1188 			*large_page = total;
1189 			return pte;
1190 		}
1191 
1192 		parent = phys_to_virt(dma_pte_addr(pte));
1193 		total--;
1194 	}
1195 	return NULL;
1196 }
1197 
1198 /* clear last level pte, a tlb flush should be followed */
1199 static void dma_pte_clear_range(struct dmar_domain *domain,
1200 				unsigned long start_pfn,
1201 				unsigned long last_pfn)
1202 {
1203 	unsigned int large_page;
1204 	struct dma_pte *first_pte, *pte;
1205 
1206 	BUG_ON(!domain_pfn_supported(domain, start_pfn));
1207 	BUG_ON(!domain_pfn_supported(domain, last_pfn));
1208 	BUG_ON(start_pfn > last_pfn);
1209 
1210 	/* we don't need lock here; nobody else touches the iova range */
1211 	do {
1212 		large_page = 1;
1213 		first_pte = pte = dma_pfn_level_pte(domain, start_pfn, 1, &large_page);
1214 		if (!pte) {
1215 			start_pfn = align_to_level(start_pfn + 1, large_page + 1);
1216 			continue;
1217 		}
1218 		do {
1219 			dma_clear_pte(pte);
1220 			start_pfn += lvl_to_nr_pages(large_page);
1221 			pte++;
1222 		} while (start_pfn <= last_pfn && !first_pte_in_page(pte));
1223 
1224 		domain_flush_cache(domain, first_pte,
1225 				   (void *)pte - (void *)first_pte);
1226 
1227 	} while (start_pfn && start_pfn <= last_pfn);
1228 }
1229 
1230 static void dma_pte_free_level(struct dmar_domain *domain, int level,
1231 			       int retain_level, struct dma_pte *pte,
1232 			       unsigned long pfn, unsigned long start_pfn,
1233 			       unsigned long last_pfn)
1234 {
1235 	pfn = max(start_pfn, pfn);
1236 	pte = &pte[pfn_level_offset(pfn, level)];
1237 
1238 	do {
1239 		unsigned long level_pfn;
1240 		struct dma_pte *level_pte;
1241 
1242 		if (!dma_pte_present(pte) || dma_pte_superpage(pte))
1243 			goto next;
1244 
1245 		level_pfn = pfn & level_mask(level);
1246 		level_pte = phys_to_virt(dma_pte_addr(pte));
1247 
1248 		if (level > 2) {
1249 			dma_pte_free_level(domain, level - 1, retain_level,
1250 					   level_pte, level_pfn, start_pfn,
1251 					   last_pfn);
1252 		}
1253 
1254 		/*
1255 		 * Free the page table if we're below the level we want to
1256 		 * retain and the range covers the entire table.
1257 		 */
1258 		if (level < retain_level && !(start_pfn > level_pfn ||
1259 		      last_pfn < level_pfn + level_size(level) - 1)) {
1260 			dma_clear_pte(pte);
1261 			domain_flush_cache(domain, pte, sizeof(*pte));
1262 			free_pgtable_page(level_pte);
1263 		}
1264 next:
1265 		pfn += level_size(level);
1266 	} while (!first_pte_in_page(++pte) && pfn <= last_pfn);
1267 }
1268 
1269 /*
1270  * clear last level (leaf) ptes and free page table pages below the
1271  * level we wish to keep intact.
1272  */
1273 static void dma_pte_free_pagetable(struct dmar_domain *domain,
1274 				   unsigned long start_pfn,
1275 				   unsigned long last_pfn,
1276 				   int retain_level)
1277 {
1278 	dma_pte_clear_range(domain, start_pfn, last_pfn);
1279 
1280 	/* We don't need lock here; nobody else touches the iova range */
1281 	dma_pte_free_level(domain, agaw_to_level(domain->agaw), retain_level,
1282 			   domain->pgd, 0, start_pfn, last_pfn);
1283 
1284 	/* free pgd */
1285 	if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) {
1286 		free_pgtable_page(domain->pgd);
1287 		domain->pgd = NULL;
1288 	}
1289 }
1290 
1291 /* When a page at a given level is being unlinked from its parent, we don't
1292    need to *modify* it at all. All we need to do is make a list of all the
1293    pages which can be freed just as soon as we've flushed the IOTLB and we
1294    know the hardware page-walk will no longer touch them.
1295    The 'pte' argument is the *parent* PTE, pointing to the page that is to
1296    be freed. */
1297 static void dma_pte_list_pagetables(struct dmar_domain *domain,
1298 				    int level, struct dma_pte *pte,
1299 				    struct list_head *freelist)
1300 {
1301 	struct page *pg;
1302 
1303 	pg = pfn_to_page(dma_pte_addr(pte) >> PAGE_SHIFT);
1304 	list_add_tail(&pg->lru, freelist);
1305 
1306 	if (level == 1)
1307 		return;
1308 
1309 	pte = page_address(pg);
1310 	do {
1311 		if (dma_pte_present(pte) && !dma_pte_superpage(pte))
1312 			dma_pte_list_pagetables(domain, level - 1, pte, freelist);
1313 		pte++;
1314 	} while (!first_pte_in_page(pte));
1315 }
1316 
1317 static void dma_pte_clear_level(struct dmar_domain *domain, int level,
1318 				struct dma_pte *pte, unsigned long pfn,
1319 				unsigned long start_pfn, unsigned long last_pfn,
1320 				struct list_head *freelist)
1321 {
1322 	struct dma_pte *first_pte = NULL, *last_pte = NULL;
1323 
1324 	pfn = max(start_pfn, pfn);
1325 	pte = &pte[pfn_level_offset(pfn, level)];
1326 
1327 	do {
1328 		unsigned long level_pfn = pfn & level_mask(level);
1329 
1330 		if (!dma_pte_present(pte))
1331 			goto next;
1332 
1333 		/* If range covers entire pagetable, free it */
1334 		if (start_pfn <= level_pfn &&
1335 		    last_pfn >= level_pfn + level_size(level) - 1) {
1336 			/* These suborbinate page tables are going away entirely. Don't
1337 			   bother to clear them; we're just going to *free* them. */
1338 			if (level > 1 && !dma_pte_superpage(pte))
1339 				dma_pte_list_pagetables(domain, level - 1, pte, freelist);
1340 
1341 			dma_clear_pte(pte);
1342 			if (!first_pte)
1343 				first_pte = pte;
1344 			last_pte = pte;
1345 		} else if (level > 1) {
1346 			/* Recurse down into a level that isn't *entirely* obsolete */
1347 			dma_pte_clear_level(domain, level - 1,
1348 					    phys_to_virt(dma_pte_addr(pte)),
1349 					    level_pfn, start_pfn, last_pfn,
1350 					    freelist);
1351 		}
1352 next:
1353 		pfn = level_pfn + level_size(level);
1354 	} while (!first_pte_in_page(++pte) && pfn <= last_pfn);
1355 
1356 	if (first_pte)
1357 		domain_flush_cache(domain, first_pte,
1358 				   (void *)++last_pte - (void *)first_pte);
1359 }
1360 
1361 /* We can't just free the pages because the IOMMU may still be walking
1362    the page tables, and may have cached the intermediate levels. The
1363    pages can only be freed after the IOTLB flush has been done. */
1364 static void domain_unmap(struct dmar_domain *domain, unsigned long start_pfn,
1365 			 unsigned long last_pfn, struct list_head *freelist)
1366 {
1367 	BUG_ON(!domain_pfn_supported(domain, start_pfn));
1368 	BUG_ON(!domain_pfn_supported(domain, last_pfn));
1369 	BUG_ON(start_pfn > last_pfn);
1370 
1371 	/* we don't need lock here; nobody else touches the iova range */
1372 	dma_pte_clear_level(domain, agaw_to_level(domain->agaw),
1373 			    domain->pgd, 0, start_pfn, last_pfn, freelist);
1374 
1375 	/* free pgd */
1376 	if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) {
1377 		struct page *pgd_page = virt_to_page(domain->pgd);
1378 		list_add_tail(&pgd_page->lru, freelist);
1379 		domain->pgd = NULL;
1380 	}
1381 }
1382 
1383 /* iommu handling */
1384 static int iommu_alloc_root_entry(struct intel_iommu *iommu)
1385 {
1386 	struct root_entry *root;
1387 	unsigned long flags;
1388 
1389 	root = (struct root_entry *)alloc_pgtable_page(iommu->node);
1390 	if (!root) {
1391 		pr_err("Allocating root entry for %s failed\n",
1392 			iommu->name);
1393 		return -ENOMEM;
1394 	}
1395 
1396 	__iommu_flush_cache(iommu, root, ROOT_SIZE);
1397 
1398 	spin_lock_irqsave(&iommu->lock, flags);
1399 	iommu->root_entry = root;
1400 	spin_unlock_irqrestore(&iommu->lock, flags);
1401 
1402 	return 0;
1403 }
1404 
1405 static void iommu_set_root_entry(struct intel_iommu *iommu)
1406 {
1407 	u64 addr;
1408 	u32 sts;
1409 	unsigned long flag;
1410 
1411 	addr = virt_to_phys(iommu->root_entry);
1412 	if (sm_supported(iommu))
1413 		addr |= DMA_RTADDR_SMT;
1414 
1415 	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1416 	dmar_writeq(iommu->reg + DMAR_RTADDR_REG, addr);
1417 
1418 	writel(iommu->gcmd | DMA_GCMD_SRTP, iommu->reg + DMAR_GCMD_REG);
1419 
1420 	/* Make sure hardware complete it */
1421 	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1422 		      readl, (sts & DMA_GSTS_RTPS), sts);
1423 
1424 	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1425 
1426 	iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
1427 	if (sm_supported(iommu))
1428 		qi_flush_pasid_cache(iommu, 0, QI_PC_GLOBAL, 0);
1429 	iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
1430 }
1431 
1432 void iommu_flush_write_buffer(struct intel_iommu *iommu)
1433 {
1434 	u32 val;
1435 	unsigned long flag;
1436 
1437 	if (!rwbf_quirk && !cap_rwbf(iommu->cap))
1438 		return;
1439 
1440 	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1441 	writel(iommu->gcmd | DMA_GCMD_WBF, iommu->reg + DMAR_GCMD_REG);
1442 
1443 	/* Make sure hardware complete it */
1444 	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1445 		      readl, (!(val & DMA_GSTS_WBFS)), val);
1446 
1447 	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1448 }
1449 
1450 /* return value determine if we need a write buffer flush */
1451 static void __iommu_flush_context(struct intel_iommu *iommu,
1452 				  u16 did, u16 source_id, u8 function_mask,
1453 				  u64 type)
1454 {
1455 	u64 val = 0;
1456 	unsigned long flag;
1457 
1458 	switch (type) {
1459 	case DMA_CCMD_GLOBAL_INVL:
1460 		val = DMA_CCMD_GLOBAL_INVL;
1461 		break;
1462 	case DMA_CCMD_DOMAIN_INVL:
1463 		val = DMA_CCMD_DOMAIN_INVL|DMA_CCMD_DID(did);
1464 		break;
1465 	case DMA_CCMD_DEVICE_INVL:
1466 		val = DMA_CCMD_DEVICE_INVL|DMA_CCMD_DID(did)
1467 			| DMA_CCMD_SID(source_id) | DMA_CCMD_FM(function_mask);
1468 		break;
1469 	default:
1470 		BUG();
1471 	}
1472 	val |= DMA_CCMD_ICC;
1473 
1474 	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1475 	dmar_writeq(iommu->reg + DMAR_CCMD_REG, val);
1476 
1477 	/* Make sure hardware complete it */
1478 	IOMMU_WAIT_OP(iommu, DMAR_CCMD_REG,
1479 		dmar_readq, (!(val & DMA_CCMD_ICC)), val);
1480 
1481 	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1482 }
1483 
1484 /* return value determine if we need a write buffer flush */
1485 static void __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did,
1486 				u64 addr, unsigned int size_order, u64 type)
1487 {
1488 	int tlb_offset = ecap_iotlb_offset(iommu->ecap);
1489 	u64 val = 0, val_iva = 0;
1490 	unsigned long flag;
1491 
1492 	switch (type) {
1493 	case DMA_TLB_GLOBAL_FLUSH:
1494 		/* global flush doesn't need set IVA_REG */
1495 		val = DMA_TLB_GLOBAL_FLUSH|DMA_TLB_IVT;
1496 		break;
1497 	case DMA_TLB_DSI_FLUSH:
1498 		val = DMA_TLB_DSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
1499 		break;
1500 	case DMA_TLB_PSI_FLUSH:
1501 		val = DMA_TLB_PSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
1502 		/* IH bit is passed in as part of address */
1503 		val_iva = size_order | addr;
1504 		break;
1505 	default:
1506 		BUG();
1507 	}
1508 	/* Note: set drain read/write */
1509 #if 0
1510 	/*
1511 	 * This is probably to be super secure.. Looks like we can
1512 	 * ignore it without any impact.
1513 	 */
1514 	if (cap_read_drain(iommu->cap))
1515 		val |= DMA_TLB_READ_DRAIN;
1516 #endif
1517 	if (cap_write_drain(iommu->cap))
1518 		val |= DMA_TLB_WRITE_DRAIN;
1519 
1520 	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1521 	/* Note: Only uses first TLB reg currently */
1522 	if (val_iva)
1523 		dmar_writeq(iommu->reg + tlb_offset, val_iva);
1524 	dmar_writeq(iommu->reg + tlb_offset + 8, val);
1525 
1526 	/* Make sure hardware complete it */
1527 	IOMMU_WAIT_OP(iommu, tlb_offset + 8,
1528 		dmar_readq, (!(val & DMA_TLB_IVT)), val);
1529 
1530 	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1531 
1532 	/* check IOTLB invalidation granularity */
1533 	if (DMA_TLB_IAIG(val) == 0)
1534 		pr_err("Flush IOTLB failed\n");
1535 	if (DMA_TLB_IAIG(val) != DMA_TLB_IIRG(type))
1536 		pr_debug("TLB flush request %Lx, actual %Lx\n",
1537 			(unsigned long long)DMA_TLB_IIRG(type),
1538 			(unsigned long long)DMA_TLB_IAIG(val));
1539 }
1540 
1541 static struct device_domain_info *
1542 iommu_support_dev_iotlb (struct dmar_domain *domain, struct intel_iommu *iommu,
1543 			 u8 bus, u8 devfn)
1544 {
1545 	struct device_domain_info *info;
1546 
1547 	assert_spin_locked(&device_domain_lock);
1548 
1549 	if (!iommu->qi)
1550 		return NULL;
1551 
1552 	list_for_each_entry(info, &domain->devices, link)
1553 		if (info->iommu == iommu && info->bus == bus &&
1554 		    info->devfn == devfn) {
1555 			if (info->ats_supported && info->dev)
1556 				return info;
1557 			break;
1558 		}
1559 
1560 	return NULL;
1561 }
1562 
1563 static void domain_update_iotlb(struct dmar_domain *domain)
1564 {
1565 	struct device_domain_info *info;
1566 	bool has_iotlb_device = false;
1567 
1568 	assert_spin_locked(&device_domain_lock);
1569 
1570 	list_for_each_entry(info, &domain->devices, link)
1571 		if (info->ats_enabled) {
1572 			has_iotlb_device = true;
1573 			break;
1574 		}
1575 
1576 	if (!has_iotlb_device) {
1577 		struct subdev_domain_info *sinfo;
1578 
1579 		list_for_each_entry(sinfo, &domain->subdevices, link_domain) {
1580 			info = get_domain_info(sinfo->pdev);
1581 			if (info && info->ats_enabled) {
1582 				has_iotlb_device = true;
1583 				break;
1584 			}
1585 		}
1586 	}
1587 
1588 	domain->has_iotlb_device = has_iotlb_device;
1589 }
1590 
1591 static void iommu_enable_dev_iotlb(struct device_domain_info *info)
1592 {
1593 	struct pci_dev *pdev;
1594 
1595 	assert_spin_locked(&device_domain_lock);
1596 
1597 	if (!info || !dev_is_pci(info->dev))
1598 		return;
1599 
1600 	pdev = to_pci_dev(info->dev);
1601 	/* For IOMMU that supports device IOTLB throttling (DIT), we assign
1602 	 * PFSID to the invalidation desc of a VF such that IOMMU HW can gauge
1603 	 * queue depth at PF level. If DIT is not set, PFSID will be treated as
1604 	 * reserved, which should be set to 0.
1605 	 */
1606 	if (!ecap_dit(info->iommu->ecap))
1607 		info->pfsid = 0;
1608 	else {
1609 		struct pci_dev *pf_pdev;
1610 
1611 		/* pdev will be returned if device is not a vf */
1612 		pf_pdev = pci_physfn(pdev);
1613 		info->pfsid = pci_dev_id(pf_pdev);
1614 	}
1615 
1616 #ifdef CONFIG_INTEL_IOMMU_SVM
1617 	/* The PCIe spec, in its wisdom, declares that the behaviour of
1618 	   the device if you enable PASID support after ATS support is
1619 	   undefined. So always enable PASID support on devices which
1620 	   have it, even if we can't yet know if we're ever going to
1621 	   use it. */
1622 	if (info->pasid_supported && !pci_enable_pasid(pdev, info->pasid_supported & ~1))
1623 		info->pasid_enabled = 1;
1624 
1625 	if (info->pri_supported &&
1626 	    (info->pasid_enabled ? pci_prg_resp_pasid_required(pdev) : 1)  &&
1627 	    !pci_reset_pri(pdev) && !pci_enable_pri(pdev, PRQ_DEPTH))
1628 		info->pri_enabled = 1;
1629 #endif
1630 	if (info->ats_supported && pci_ats_page_aligned(pdev) &&
1631 	    !pci_enable_ats(pdev, VTD_PAGE_SHIFT)) {
1632 		info->ats_enabled = 1;
1633 		domain_update_iotlb(info->domain);
1634 		info->ats_qdep = pci_ats_queue_depth(pdev);
1635 	}
1636 }
1637 
1638 static void iommu_disable_dev_iotlb(struct device_domain_info *info)
1639 {
1640 	struct pci_dev *pdev;
1641 
1642 	assert_spin_locked(&device_domain_lock);
1643 
1644 	if (!dev_is_pci(info->dev))
1645 		return;
1646 
1647 	pdev = to_pci_dev(info->dev);
1648 
1649 	if (info->ats_enabled) {
1650 		pci_disable_ats(pdev);
1651 		info->ats_enabled = 0;
1652 		domain_update_iotlb(info->domain);
1653 	}
1654 #ifdef CONFIG_INTEL_IOMMU_SVM
1655 	if (info->pri_enabled) {
1656 		pci_disable_pri(pdev);
1657 		info->pri_enabled = 0;
1658 	}
1659 	if (info->pasid_enabled) {
1660 		pci_disable_pasid(pdev);
1661 		info->pasid_enabled = 0;
1662 	}
1663 #endif
1664 }
1665 
1666 static void __iommu_flush_dev_iotlb(struct device_domain_info *info,
1667 				    u64 addr, unsigned int mask)
1668 {
1669 	u16 sid, qdep;
1670 
1671 	if (!info || !info->ats_enabled)
1672 		return;
1673 
1674 	sid = info->bus << 8 | info->devfn;
1675 	qdep = info->ats_qdep;
1676 	qi_flush_dev_iotlb(info->iommu, sid, info->pfsid,
1677 			   qdep, addr, mask);
1678 }
1679 
1680 static void iommu_flush_dev_iotlb(struct dmar_domain *domain,
1681 				  u64 addr, unsigned mask)
1682 {
1683 	unsigned long flags;
1684 	struct device_domain_info *info;
1685 	struct subdev_domain_info *sinfo;
1686 
1687 	if (!domain->has_iotlb_device)
1688 		return;
1689 
1690 	spin_lock_irqsave(&device_domain_lock, flags);
1691 	list_for_each_entry(info, &domain->devices, link)
1692 		__iommu_flush_dev_iotlb(info, addr, mask);
1693 
1694 	list_for_each_entry(sinfo, &domain->subdevices, link_domain) {
1695 		info = get_domain_info(sinfo->pdev);
1696 		__iommu_flush_dev_iotlb(info, addr, mask);
1697 	}
1698 	spin_unlock_irqrestore(&device_domain_lock, flags);
1699 }
1700 
1701 static void domain_flush_piotlb(struct intel_iommu *iommu,
1702 				struct dmar_domain *domain,
1703 				u64 addr, unsigned long npages, bool ih)
1704 {
1705 	u16 did = domain->iommu_did[iommu->seq_id];
1706 
1707 	if (domain->default_pasid)
1708 		qi_flush_piotlb(iommu, did, domain->default_pasid,
1709 				addr, npages, ih);
1710 
1711 	if (!list_empty(&domain->devices))
1712 		qi_flush_piotlb(iommu, did, PASID_RID2PASID, addr, npages, ih);
1713 }
1714 
1715 static void iommu_flush_iotlb_psi(struct intel_iommu *iommu,
1716 				  struct dmar_domain *domain,
1717 				  unsigned long pfn, unsigned int pages,
1718 				  int ih, int map)
1719 {
1720 	unsigned int mask = ilog2(__roundup_pow_of_two(pages));
1721 	uint64_t addr = (uint64_t)pfn << VTD_PAGE_SHIFT;
1722 	u16 did = domain->iommu_did[iommu->seq_id];
1723 
1724 	BUG_ON(pages == 0);
1725 
1726 	if (ih)
1727 		ih = 1 << 6;
1728 
1729 	if (domain_use_first_level(domain)) {
1730 		domain_flush_piotlb(iommu, domain, addr, pages, ih);
1731 	} else {
1732 		/*
1733 		 * Fallback to domain selective flush if no PSI support or
1734 		 * the size is too big. PSI requires page size to be 2 ^ x,
1735 		 * and the base address is naturally aligned to the size.
1736 		 */
1737 		if (!cap_pgsel_inv(iommu->cap) ||
1738 		    mask > cap_max_amask_val(iommu->cap))
1739 			iommu->flush.flush_iotlb(iommu, did, 0, 0,
1740 							DMA_TLB_DSI_FLUSH);
1741 		else
1742 			iommu->flush.flush_iotlb(iommu, did, addr | ih, mask,
1743 							DMA_TLB_PSI_FLUSH);
1744 	}
1745 
1746 	/*
1747 	 * In caching mode, changes of pages from non-present to present require
1748 	 * flush. However, device IOTLB doesn't need to be flushed in this case.
1749 	 */
1750 	if (!cap_caching_mode(iommu->cap) || !map)
1751 		iommu_flush_dev_iotlb(domain, addr, mask);
1752 }
1753 
1754 /* Notification for newly created mappings */
1755 static inline void __mapping_notify_one(struct intel_iommu *iommu,
1756 					struct dmar_domain *domain,
1757 					unsigned long pfn, unsigned int pages)
1758 {
1759 	/*
1760 	 * It's a non-present to present mapping. Only flush if caching mode
1761 	 * and second level.
1762 	 */
1763 	if (cap_caching_mode(iommu->cap) && !domain_use_first_level(domain))
1764 		iommu_flush_iotlb_psi(iommu, domain, pfn, pages, 0, 1);
1765 	else
1766 		iommu_flush_write_buffer(iommu);
1767 }
1768 
1769 static void intel_flush_iotlb_all(struct iommu_domain *domain)
1770 {
1771 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
1772 	int idx;
1773 
1774 	for_each_domain_iommu(idx, dmar_domain) {
1775 		struct intel_iommu *iommu = g_iommus[idx];
1776 		u16 did = dmar_domain->iommu_did[iommu->seq_id];
1777 
1778 		if (domain_use_first_level(dmar_domain))
1779 			domain_flush_piotlb(iommu, dmar_domain, 0, -1, 0);
1780 		else
1781 			iommu->flush.flush_iotlb(iommu, did, 0, 0,
1782 						 DMA_TLB_DSI_FLUSH);
1783 
1784 		if (!cap_caching_mode(iommu->cap))
1785 			iommu_flush_dev_iotlb(get_iommu_domain(iommu, did),
1786 					      0, MAX_AGAW_PFN_WIDTH);
1787 	}
1788 }
1789 
1790 static void iommu_disable_protect_mem_regions(struct intel_iommu *iommu)
1791 {
1792 	u32 pmen;
1793 	unsigned long flags;
1794 
1795 	if (!cap_plmr(iommu->cap) && !cap_phmr(iommu->cap))
1796 		return;
1797 
1798 	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1799 	pmen = readl(iommu->reg + DMAR_PMEN_REG);
1800 	pmen &= ~DMA_PMEN_EPM;
1801 	writel(pmen, iommu->reg + DMAR_PMEN_REG);
1802 
1803 	/* wait for the protected region status bit to clear */
1804 	IOMMU_WAIT_OP(iommu, DMAR_PMEN_REG,
1805 		readl, !(pmen & DMA_PMEN_PRS), pmen);
1806 
1807 	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1808 }
1809 
1810 static void iommu_enable_translation(struct intel_iommu *iommu)
1811 {
1812 	u32 sts;
1813 	unsigned long flags;
1814 
1815 	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1816 	iommu->gcmd |= DMA_GCMD_TE;
1817 	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1818 
1819 	/* Make sure hardware complete it */
1820 	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1821 		      readl, (sts & DMA_GSTS_TES), sts);
1822 
1823 	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1824 }
1825 
1826 static void iommu_disable_translation(struct intel_iommu *iommu)
1827 {
1828 	u32 sts;
1829 	unsigned long flag;
1830 
1831 	if (iommu_skip_te_disable && iommu->drhd->gfx_dedicated &&
1832 	    (cap_read_drain(iommu->cap) || cap_write_drain(iommu->cap)))
1833 		return;
1834 
1835 	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1836 	iommu->gcmd &= ~DMA_GCMD_TE;
1837 	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1838 
1839 	/* Make sure hardware complete it */
1840 	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
1841 		      readl, (!(sts & DMA_GSTS_TES)), sts);
1842 
1843 	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1844 }
1845 
1846 static int iommu_init_domains(struct intel_iommu *iommu)
1847 {
1848 	u32 ndomains;
1849 	size_t size;
1850 
1851 	ndomains = cap_ndoms(iommu->cap);
1852 	pr_debug("%s: Number of Domains supported <%d>\n",
1853 		 iommu->name, ndomains);
1854 
1855 	spin_lock_init(&iommu->lock);
1856 
1857 	iommu->domain_ids = bitmap_zalloc(ndomains, GFP_KERNEL);
1858 	if (!iommu->domain_ids)
1859 		return -ENOMEM;
1860 
1861 	size = (ALIGN(ndomains, 256) >> 8) * sizeof(struct dmar_domain **);
1862 	iommu->domains = kzalloc(size, GFP_KERNEL);
1863 
1864 	if (iommu->domains) {
1865 		size = 256 * sizeof(struct dmar_domain *);
1866 		iommu->domains[0] = kzalloc(size, GFP_KERNEL);
1867 	}
1868 
1869 	if (!iommu->domains || !iommu->domains[0]) {
1870 		pr_err("%s: Allocating domain array failed\n",
1871 		       iommu->name);
1872 		bitmap_free(iommu->domain_ids);
1873 		kfree(iommu->domains);
1874 		iommu->domain_ids = NULL;
1875 		iommu->domains    = NULL;
1876 		return -ENOMEM;
1877 	}
1878 
1879 	/*
1880 	 * If Caching mode is set, then invalid translations are tagged
1881 	 * with domain-id 0, hence we need to pre-allocate it. We also
1882 	 * use domain-id 0 as a marker for non-allocated domain-id, so
1883 	 * make sure it is not used for a real domain.
1884 	 */
1885 	set_bit(0, iommu->domain_ids);
1886 
1887 	/*
1888 	 * Vt-d spec rev3.0 (section 6.2.3.1) requires that each pasid
1889 	 * entry for first-level or pass-through translation modes should
1890 	 * be programmed with a domain id different from those used for
1891 	 * second-level or nested translation. We reserve a domain id for
1892 	 * this purpose.
1893 	 */
1894 	if (sm_supported(iommu))
1895 		set_bit(FLPT_DEFAULT_DID, iommu->domain_ids);
1896 
1897 	return 0;
1898 }
1899 
1900 static void disable_dmar_iommu(struct intel_iommu *iommu)
1901 {
1902 	struct device_domain_info *info, *tmp;
1903 	unsigned long flags;
1904 
1905 	if (!iommu->domains || !iommu->domain_ids)
1906 		return;
1907 
1908 	spin_lock_irqsave(&device_domain_lock, flags);
1909 	list_for_each_entry_safe(info, tmp, &device_domain_list, global) {
1910 		if (info->iommu != iommu)
1911 			continue;
1912 
1913 		if (!info->dev || !info->domain)
1914 			continue;
1915 
1916 		__dmar_remove_one_dev_info(info);
1917 	}
1918 	spin_unlock_irqrestore(&device_domain_lock, flags);
1919 
1920 	if (iommu->gcmd & DMA_GCMD_TE)
1921 		iommu_disable_translation(iommu);
1922 }
1923 
1924 static void free_dmar_iommu(struct intel_iommu *iommu)
1925 {
1926 	if ((iommu->domains) && (iommu->domain_ids)) {
1927 		int elems = ALIGN(cap_ndoms(iommu->cap), 256) >> 8;
1928 		int i;
1929 
1930 		for (i = 0; i < elems; i++)
1931 			kfree(iommu->domains[i]);
1932 		kfree(iommu->domains);
1933 		bitmap_free(iommu->domain_ids);
1934 		iommu->domains = NULL;
1935 		iommu->domain_ids = NULL;
1936 	}
1937 
1938 	g_iommus[iommu->seq_id] = NULL;
1939 
1940 	/* free context mapping */
1941 	free_context_table(iommu);
1942 
1943 #ifdef CONFIG_INTEL_IOMMU_SVM
1944 	if (pasid_supported(iommu)) {
1945 		if (ecap_prs(iommu->ecap))
1946 			intel_svm_finish_prq(iommu);
1947 	}
1948 	if (vccap_pasid(iommu->vccap))
1949 		ioasid_unregister_allocator(&iommu->pasid_allocator);
1950 
1951 #endif
1952 }
1953 
1954 /*
1955  * Check and return whether first level is used by default for
1956  * DMA translation.
1957  */
1958 static bool first_level_by_default(unsigned int type)
1959 {
1960 	/* Only SL is available in legacy mode */
1961 	if (!scalable_mode_support())
1962 		return false;
1963 
1964 	/* Only level (either FL or SL) is available, just use it */
1965 	if (intel_cap_flts_sanity() ^ intel_cap_slts_sanity())
1966 		return intel_cap_flts_sanity();
1967 
1968 	/* Both levels are available, decide it based on domain type */
1969 	return type != IOMMU_DOMAIN_UNMANAGED;
1970 }
1971 
1972 static struct dmar_domain *alloc_domain(unsigned int type)
1973 {
1974 	struct dmar_domain *domain;
1975 
1976 	domain = alloc_domain_mem();
1977 	if (!domain)
1978 		return NULL;
1979 
1980 	memset(domain, 0, sizeof(*domain));
1981 	domain->nid = NUMA_NO_NODE;
1982 	if (first_level_by_default(type))
1983 		domain->flags |= DOMAIN_FLAG_USE_FIRST_LEVEL;
1984 	domain->has_iotlb_device = false;
1985 	INIT_LIST_HEAD(&domain->devices);
1986 	INIT_LIST_HEAD(&domain->subdevices);
1987 
1988 	return domain;
1989 }
1990 
1991 /* Must be called with iommu->lock */
1992 static int domain_attach_iommu(struct dmar_domain *domain,
1993 			       struct intel_iommu *iommu)
1994 {
1995 	unsigned long ndomains;
1996 	int num;
1997 
1998 	assert_spin_locked(&device_domain_lock);
1999 	assert_spin_locked(&iommu->lock);
2000 
2001 	domain->iommu_refcnt[iommu->seq_id] += 1;
2002 	if (domain->iommu_refcnt[iommu->seq_id] == 1) {
2003 		ndomains = cap_ndoms(iommu->cap);
2004 		num      = find_first_zero_bit(iommu->domain_ids, ndomains);
2005 
2006 		if (num >= ndomains) {
2007 			pr_err("%s: No free domain ids\n", iommu->name);
2008 			domain->iommu_refcnt[iommu->seq_id] -= 1;
2009 			return -ENOSPC;
2010 		}
2011 
2012 		set_bit(num, iommu->domain_ids);
2013 		set_iommu_domain(iommu, num, domain);
2014 
2015 		domain->iommu_did[iommu->seq_id] = num;
2016 		domain->nid			 = iommu->node;
2017 
2018 		domain_update_iommu_cap(domain);
2019 	}
2020 
2021 	return 0;
2022 }
2023 
2024 static void domain_detach_iommu(struct dmar_domain *domain,
2025 				struct intel_iommu *iommu)
2026 {
2027 	int num;
2028 
2029 	assert_spin_locked(&device_domain_lock);
2030 	assert_spin_locked(&iommu->lock);
2031 
2032 	domain->iommu_refcnt[iommu->seq_id] -= 1;
2033 	if (domain->iommu_refcnt[iommu->seq_id] == 0) {
2034 		num = domain->iommu_did[iommu->seq_id];
2035 		clear_bit(num, iommu->domain_ids);
2036 		set_iommu_domain(iommu, num, NULL);
2037 
2038 		domain_update_iommu_cap(domain);
2039 		domain->iommu_did[iommu->seq_id] = 0;
2040 	}
2041 }
2042 
2043 static inline int guestwidth_to_adjustwidth(int gaw)
2044 {
2045 	int agaw;
2046 	int r = (gaw - 12) % 9;
2047 
2048 	if (r == 0)
2049 		agaw = gaw;
2050 	else
2051 		agaw = gaw + 9 - r;
2052 	if (agaw > 64)
2053 		agaw = 64;
2054 	return agaw;
2055 }
2056 
2057 static void domain_exit(struct dmar_domain *domain)
2058 {
2059 
2060 	/* Remove associated devices and clear attached or cached domains */
2061 	domain_remove_dev_info(domain);
2062 
2063 	if (domain->pgd) {
2064 		LIST_HEAD(freelist);
2065 
2066 		domain_unmap(domain, 0, DOMAIN_MAX_PFN(domain->gaw), &freelist);
2067 		put_pages_list(&freelist);
2068 	}
2069 
2070 	free_domain_mem(domain);
2071 }
2072 
2073 /*
2074  * Get the PASID directory size for scalable mode context entry.
2075  * Value of X in the PDTS field of a scalable mode context entry
2076  * indicates PASID directory with 2^(X + 7) entries.
2077  */
2078 static inline unsigned long context_get_sm_pds(struct pasid_table *table)
2079 {
2080 	unsigned long pds, max_pde;
2081 
2082 	max_pde = table->max_pasid >> PASID_PDE_SHIFT;
2083 	pds = find_first_bit(&max_pde, MAX_NR_PASID_BITS);
2084 	if (pds < 7)
2085 		return 0;
2086 
2087 	return pds - 7;
2088 }
2089 
2090 /*
2091  * Set the RID_PASID field of a scalable mode context entry. The
2092  * IOMMU hardware will use the PASID value set in this field for
2093  * DMA translations of DMA requests without PASID.
2094  */
2095 static inline void
2096 context_set_sm_rid2pasid(struct context_entry *context, unsigned long pasid)
2097 {
2098 	context->hi |= pasid & ((1 << 20) - 1);
2099 }
2100 
2101 /*
2102  * Set the DTE(Device-TLB Enable) field of a scalable mode context
2103  * entry.
2104  */
2105 static inline void context_set_sm_dte(struct context_entry *context)
2106 {
2107 	context->lo |= (1 << 2);
2108 }
2109 
2110 /*
2111  * Set the PRE(Page Request Enable) field of a scalable mode context
2112  * entry.
2113  */
2114 static inline void context_set_sm_pre(struct context_entry *context)
2115 {
2116 	context->lo |= (1 << 4);
2117 }
2118 
2119 /* Convert value to context PASID directory size field coding. */
2120 #define context_pdts(pds)	(((pds) & 0x7) << 9)
2121 
2122 static int domain_context_mapping_one(struct dmar_domain *domain,
2123 				      struct intel_iommu *iommu,
2124 				      struct pasid_table *table,
2125 				      u8 bus, u8 devfn)
2126 {
2127 	u16 did = domain->iommu_did[iommu->seq_id];
2128 	int translation = CONTEXT_TT_MULTI_LEVEL;
2129 	struct device_domain_info *info = NULL;
2130 	struct context_entry *context;
2131 	unsigned long flags;
2132 	int ret;
2133 
2134 	WARN_ON(did == 0);
2135 
2136 	if (hw_pass_through && domain_type_is_si(domain))
2137 		translation = CONTEXT_TT_PASS_THROUGH;
2138 
2139 	pr_debug("Set context mapping for %02x:%02x.%d\n",
2140 		bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
2141 
2142 	BUG_ON(!domain->pgd);
2143 
2144 	spin_lock_irqsave(&device_domain_lock, flags);
2145 	spin_lock(&iommu->lock);
2146 
2147 	ret = -ENOMEM;
2148 	context = iommu_context_addr(iommu, bus, devfn, 1);
2149 	if (!context)
2150 		goto out_unlock;
2151 
2152 	ret = 0;
2153 	if (context_present(context))
2154 		goto out_unlock;
2155 
2156 	/*
2157 	 * For kdump cases, old valid entries may be cached due to the
2158 	 * in-flight DMA and copied pgtable, but there is no unmapping
2159 	 * behaviour for them, thus we need an explicit cache flush for
2160 	 * the newly-mapped device. For kdump, at this point, the device
2161 	 * is supposed to finish reset at its driver probe stage, so no
2162 	 * in-flight DMA will exist, and we don't need to worry anymore
2163 	 * hereafter.
2164 	 */
2165 	if (context_copied(context)) {
2166 		u16 did_old = context_domain_id(context);
2167 
2168 		if (did_old < cap_ndoms(iommu->cap)) {
2169 			iommu->flush.flush_context(iommu, did_old,
2170 						   (((u16)bus) << 8) | devfn,
2171 						   DMA_CCMD_MASK_NOBIT,
2172 						   DMA_CCMD_DEVICE_INVL);
2173 			iommu->flush.flush_iotlb(iommu, did_old, 0, 0,
2174 						 DMA_TLB_DSI_FLUSH);
2175 		}
2176 	}
2177 
2178 	context_clear_entry(context);
2179 
2180 	if (sm_supported(iommu)) {
2181 		unsigned long pds;
2182 
2183 		WARN_ON(!table);
2184 
2185 		/* Setup the PASID DIR pointer: */
2186 		pds = context_get_sm_pds(table);
2187 		context->lo = (u64)virt_to_phys(table->table) |
2188 				context_pdts(pds);
2189 
2190 		/* Setup the RID_PASID field: */
2191 		context_set_sm_rid2pasid(context, PASID_RID2PASID);
2192 
2193 		/*
2194 		 * Setup the Device-TLB enable bit and Page request
2195 		 * Enable bit:
2196 		 */
2197 		info = iommu_support_dev_iotlb(domain, iommu, bus, devfn);
2198 		if (info && info->ats_supported)
2199 			context_set_sm_dte(context);
2200 		if (info && info->pri_supported)
2201 			context_set_sm_pre(context);
2202 	} else {
2203 		struct dma_pte *pgd = domain->pgd;
2204 		int agaw;
2205 
2206 		context_set_domain_id(context, did);
2207 
2208 		if (translation != CONTEXT_TT_PASS_THROUGH) {
2209 			/*
2210 			 * Skip top levels of page tables for iommu which has
2211 			 * less agaw than default. Unnecessary for PT mode.
2212 			 */
2213 			for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
2214 				ret = -ENOMEM;
2215 				pgd = phys_to_virt(dma_pte_addr(pgd));
2216 				if (!dma_pte_present(pgd))
2217 					goto out_unlock;
2218 			}
2219 
2220 			info = iommu_support_dev_iotlb(domain, iommu, bus, devfn);
2221 			if (info && info->ats_supported)
2222 				translation = CONTEXT_TT_DEV_IOTLB;
2223 			else
2224 				translation = CONTEXT_TT_MULTI_LEVEL;
2225 
2226 			context_set_address_root(context, virt_to_phys(pgd));
2227 			context_set_address_width(context, agaw);
2228 		} else {
2229 			/*
2230 			 * In pass through mode, AW must be programmed to
2231 			 * indicate the largest AGAW value supported by
2232 			 * hardware. And ASR is ignored by hardware.
2233 			 */
2234 			context_set_address_width(context, iommu->msagaw);
2235 		}
2236 
2237 		context_set_translation_type(context, translation);
2238 	}
2239 
2240 	context_set_fault_enable(context);
2241 	context_set_present(context);
2242 	if (!ecap_coherent(iommu->ecap))
2243 		clflush_cache_range(context, sizeof(*context));
2244 
2245 	/*
2246 	 * It's a non-present to present mapping. If hardware doesn't cache
2247 	 * non-present entry we only need to flush the write-buffer. If the
2248 	 * _does_ cache non-present entries, then it does so in the special
2249 	 * domain #0, which we have to flush:
2250 	 */
2251 	if (cap_caching_mode(iommu->cap)) {
2252 		iommu->flush.flush_context(iommu, 0,
2253 					   (((u16)bus) << 8) | devfn,
2254 					   DMA_CCMD_MASK_NOBIT,
2255 					   DMA_CCMD_DEVICE_INVL);
2256 		iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH);
2257 	} else {
2258 		iommu_flush_write_buffer(iommu);
2259 	}
2260 	iommu_enable_dev_iotlb(info);
2261 
2262 	ret = 0;
2263 
2264 out_unlock:
2265 	spin_unlock(&iommu->lock);
2266 	spin_unlock_irqrestore(&device_domain_lock, flags);
2267 
2268 	return ret;
2269 }
2270 
2271 struct domain_context_mapping_data {
2272 	struct dmar_domain *domain;
2273 	struct intel_iommu *iommu;
2274 	struct pasid_table *table;
2275 };
2276 
2277 static int domain_context_mapping_cb(struct pci_dev *pdev,
2278 				     u16 alias, void *opaque)
2279 {
2280 	struct domain_context_mapping_data *data = opaque;
2281 
2282 	return domain_context_mapping_one(data->domain, data->iommu,
2283 					  data->table, PCI_BUS_NUM(alias),
2284 					  alias & 0xff);
2285 }
2286 
2287 static int
2288 domain_context_mapping(struct dmar_domain *domain, struct device *dev)
2289 {
2290 	struct domain_context_mapping_data data;
2291 	struct pasid_table *table;
2292 	struct intel_iommu *iommu;
2293 	u8 bus, devfn;
2294 
2295 	iommu = device_to_iommu(dev, &bus, &devfn);
2296 	if (!iommu)
2297 		return -ENODEV;
2298 
2299 	table = intel_pasid_get_table(dev);
2300 
2301 	if (!dev_is_pci(dev))
2302 		return domain_context_mapping_one(domain, iommu, table,
2303 						  bus, devfn);
2304 
2305 	data.domain = domain;
2306 	data.iommu = iommu;
2307 	data.table = table;
2308 
2309 	return pci_for_each_dma_alias(to_pci_dev(dev),
2310 				      &domain_context_mapping_cb, &data);
2311 }
2312 
2313 static int domain_context_mapped_cb(struct pci_dev *pdev,
2314 				    u16 alias, void *opaque)
2315 {
2316 	struct intel_iommu *iommu = opaque;
2317 
2318 	return !device_context_mapped(iommu, PCI_BUS_NUM(alias), alias & 0xff);
2319 }
2320 
2321 static int domain_context_mapped(struct device *dev)
2322 {
2323 	struct intel_iommu *iommu;
2324 	u8 bus, devfn;
2325 
2326 	iommu = device_to_iommu(dev, &bus, &devfn);
2327 	if (!iommu)
2328 		return -ENODEV;
2329 
2330 	if (!dev_is_pci(dev))
2331 		return device_context_mapped(iommu, bus, devfn);
2332 
2333 	return !pci_for_each_dma_alias(to_pci_dev(dev),
2334 				       domain_context_mapped_cb, iommu);
2335 }
2336 
2337 /* Returns a number of VTD pages, but aligned to MM page size */
2338 static inline unsigned long aligned_nrpages(unsigned long host_addr,
2339 					    size_t size)
2340 {
2341 	host_addr &= ~PAGE_MASK;
2342 	return PAGE_ALIGN(host_addr + size) >> VTD_PAGE_SHIFT;
2343 }
2344 
2345 /* Return largest possible superpage level for a given mapping */
2346 static inline int hardware_largepage_caps(struct dmar_domain *domain,
2347 					  unsigned long iov_pfn,
2348 					  unsigned long phy_pfn,
2349 					  unsigned long pages)
2350 {
2351 	int support, level = 1;
2352 	unsigned long pfnmerge;
2353 
2354 	support = domain->iommu_superpage;
2355 
2356 	/* To use a large page, the virtual *and* physical addresses
2357 	   must be aligned to 2MiB/1GiB/etc. Lower bits set in either
2358 	   of them will mean we have to use smaller pages. So just
2359 	   merge them and check both at once. */
2360 	pfnmerge = iov_pfn | phy_pfn;
2361 
2362 	while (support && !(pfnmerge & ~VTD_STRIDE_MASK)) {
2363 		pages >>= VTD_STRIDE_SHIFT;
2364 		if (!pages)
2365 			break;
2366 		pfnmerge >>= VTD_STRIDE_SHIFT;
2367 		level++;
2368 		support--;
2369 	}
2370 	return level;
2371 }
2372 
2373 /*
2374  * Ensure that old small page tables are removed to make room for superpage(s).
2375  * We're going to add new large pages, so make sure we don't remove their parent
2376  * tables. The IOTLB/devTLBs should be flushed if any PDE/PTEs are cleared.
2377  */
2378 static void switch_to_super_page(struct dmar_domain *domain,
2379 				 unsigned long start_pfn,
2380 				 unsigned long end_pfn, int level)
2381 {
2382 	unsigned long lvl_pages = lvl_to_nr_pages(level);
2383 	struct dma_pte *pte = NULL;
2384 	int i;
2385 
2386 	while (start_pfn <= end_pfn) {
2387 		if (!pte)
2388 			pte = pfn_to_dma_pte(domain, start_pfn, &level);
2389 
2390 		if (dma_pte_present(pte)) {
2391 			dma_pte_free_pagetable(domain, start_pfn,
2392 					       start_pfn + lvl_pages - 1,
2393 					       level + 1);
2394 
2395 			for_each_domain_iommu(i, domain)
2396 				iommu_flush_iotlb_psi(g_iommus[i], domain,
2397 						      start_pfn, lvl_pages,
2398 						      0, 0);
2399 		}
2400 
2401 		pte++;
2402 		start_pfn += lvl_pages;
2403 		if (first_pte_in_page(pte))
2404 			pte = NULL;
2405 	}
2406 }
2407 
2408 static int
2409 __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2410 		 unsigned long phys_pfn, unsigned long nr_pages, int prot)
2411 {
2412 	struct dma_pte *first_pte = NULL, *pte = NULL;
2413 	unsigned int largepage_lvl = 0;
2414 	unsigned long lvl_pages = 0;
2415 	phys_addr_t pteval;
2416 	u64 attr;
2417 
2418 	BUG_ON(!domain_pfn_supported(domain, iov_pfn + nr_pages - 1));
2419 
2420 	if ((prot & (DMA_PTE_READ|DMA_PTE_WRITE)) == 0)
2421 		return -EINVAL;
2422 
2423 	attr = prot & (DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP);
2424 	attr |= DMA_FL_PTE_PRESENT;
2425 	if (domain_use_first_level(domain)) {
2426 		attr |= DMA_FL_PTE_XD | DMA_FL_PTE_US | DMA_FL_PTE_ACCESS;
2427 		if (prot & DMA_PTE_WRITE)
2428 			attr |= DMA_FL_PTE_DIRTY;
2429 	}
2430 
2431 	pteval = ((phys_addr_t)phys_pfn << VTD_PAGE_SHIFT) | attr;
2432 
2433 	while (nr_pages > 0) {
2434 		uint64_t tmp;
2435 
2436 		if (!pte) {
2437 			largepage_lvl = hardware_largepage_caps(domain, iov_pfn,
2438 					phys_pfn, nr_pages);
2439 
2440 			pte = pfn_to_dma_pte(domain, iov_pfn, &largepage_lvl);
2441 			if (!pte)
2442 				return -ENOMEM;
2443 			first_pte = pte;
2444 
2445 			lvl_pages = lvl_to_nr_pages(largepage_lvl);
2446 
2447 			/* It is large page*/
2448 			if (largepage_lvl > 1) {
2449 				unsigned long end_pfn;
2450 				unsigned long pages_to_remove;
2451 
2452 				pteval |= DMA_PTE_LARGE_PAGE;
2453 				pages_to_remove = min_t(unsigned long, nr_pages,
2454 							nr_pte_to_next_page(pte) * lvl_pages);
2455 				end_pfn = iov_pfn + pages_to_remove - 1;
2456 				switch_to_super_page(domain, iov_pfn, end_pfn, largepage_lvl);
2457 			} else {
2458 				pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE;
2459 			}
2460 
2461 		}
2462 		/* We don't need lock here, nobody else
2463 		 * touches the iova range
2464 		 */
2465 		tmp = cmpxchg64_local(&pte->val, 0ULL, pteval);
2466 		if (tmp) {
2467 			static int dumps = 5;
2468 			pr_crit("ERROR: DMA PTE for vPFN 0x%lx already set (to %llx not %llx)\n",
2469 				iov_pfn, tmp, (unsigned long long)pteval);
2470 			if (dumps) {
2471 				dumps--;
2472 				debug_dma_dump_mappings(NULL);
2473 			}
2474 			WARN_ON(1);
2475 		}
2476 
2477 		nr_pages -= lvl_pages;
2478 		iov_pfn += lvl_pages;
2479 		phys_pfn += lvl_pages;
2480 		pteval += lvl_pages * VTD_PAGE_SIZE;
2481 
2482 		/* If the next PTE would be the first in a new page, then we
2483 		 * need to flush the cache on the entries we've just written.
2484 		 * And then we'll need to recalculate 'pte', so clear it and
2485 		 * let it get set again in the if (!pte) block above.
2486 		 *
2487 		 * If we're done (!nr_pages) we need to flush the cache too.
2488 		 *
2489 		 * Also if we've been setting superpages, we may need to
2490 		 * recalculate 'pte' and switch back to smaller pages for the
2491 		 * end of the mapping, if the trailing size is not enough to
2492 		 * use another superpage (i.e. nr_pages < lvl_pages).
2493 		 */
2494 		pte++;
2495 		if (!nr_pages || first_pte_in_page(pte) ||
2496 		    (largepage_lvl > 1 && nr_pages < lvl_pages)) {
2497 			domain_flush_cache(domain, first_pte,
2498 					   (void *)pte - (void *)first_pte);
2499 			pte = NULL;
2500 		}
2501 	}
2502 
2503 	return 0;
2504 }
2505 
2506 static void domain_context_clear_one(struct device_domain_info *info, u8 bus, u8 devfn)
2507 {
2508 	struct intel_iommu *iommu = info->iommu;
2509 	struct context_entry *context;
2510 	unsigned long flags;
2511 	u16 did_old;
2512 
2513 	if (!iommu)
2514 		return;
2515 
2516 	spin_lock_irqsave(&iommu->lock, flags);
2517 	context = iommu_context_addr(iommu, bus, devfn, 0);
2518 	if (!context) {
2519 		spin_unlock_irqrestore(&iommu->lock, flags);
2520 		return;
2521 	}
2522 
2523 	if (sm_supported(iommu)) {
2524 		if (hw_pass_through && domain_type_is_si(info->domain))
2525 			did_old = FLPT_DEFAULT_DID;
2526 		else
2527 			did_old = info->domain->iommu_did[iommu->seq_id];
2528 	} else {
2529 		did_old = context_domain_id(context);
2530 	}
2531 
2532 	context_clear_entry(context);
2533 	__iommu_flush_cache(iommu, context, sizeof(*context));
2534 	spin_unlock_irqrestore(&iommu->lock, flags);
2535 	iommu->flush.flush_context(iommu,
2536 				   did_old,
2537 				   (((u16)bus) << 8) | devfn,
2538 				   DMA_CCMD_MASK_NOBIT,
2539 				   DMA_CCMD_DEVICE_INVL);
2540 
2541 	if (sm_supported(iommu))
2542 		qi_flush_pasid_cache(iommu, did_old, QI_PC_ALL_PASIDS, 0);
2543 
2544 	iommu->flush.flush_iotlb(iommu,
2545 				 did_old,
2546 				 0,
2547 				 0,
2548 				 DMA_TLB_DSI_FLUSH);
2549 
2550 	__iommu_flush_dev_iotlb(info, 0, MAX_AGAW_PFN_WIDTH);
2551 }
2552 
2553 static inline void unlink_domain_info(struct device_domain_info *info)
2554 {
2555 	assert_spin_locked(&device_domain_lock);
2556 	list_del(&info->link);
2557 	list_del(&info->global);
2558 	if (info->dev)
2559 		dev_iommu_priv_set(info->dev, NULL);
2560 }
2561 
2562 static void domain_remove_dev_info(struct dmar_domain *domain)
2563 {
2564 	struct device_domain_info *info, *tmp;
2565 	unsigned long flags;
2566 
2567 	spin_lock_irqsave(&device_domain_lock, flags);
2568 	list_for_each_entry_safe(info, tmp, &domain->devices, link)
2569 		__dmar_remove_one_dev_info(info);
2570 	spin_unlock_irqrestore(&device_domain_lock, flags);
2571 }
2572 
2573 struct dmar_domain *find_domain(struct device *dev)
2574 {
2575 	struct device_domain_info *info;
2576 
2577 	if (unlikely(!dev || !dev->iommu))
2578 		return NULL;
2579 
2580 	if (unlikely(attach_deferred(dev)))
2581 		return NULL;
2582 
2583 	/* No lock here, assumes no domain exit in normal case */
2584 	info = get_domain_info(dev);
2585 	if (likely(info))
2586 		return info->domain;
2587 
2588 	return NULL;
2589 }
2590 
2591 static inline struct device_domain_info *
2592 dmar_search_domain_by_dev_info(int segment, int bus, int devfn)
2593 {
2594 	struct device_domain_info *info;
2595 
2596 	list_for_each_entry(info, &device_domain_list, global)
2597 		if (info->segment == segment && info->bus == bus &&
2598 		    info->devfn == devfn)
2599 			return info;
2600 
2601 	return NULL;
2602 }
2603 
2604 static int domain_setup_first_level(struct intel_iommu *iommu,
2605 				    struct dmar_domain *domain,
2606 				    struct device *dev,
2607 				    u32 pasid)
2608 {
2609 	struct dma_pte *pgd = domain->pgd;
2610 	int agaw, level;
2611 	int flags = 0;
2612 
2613 	/*
2614 	 * Skip top levels of page tables for iommu which has
2615 	 * less agaw than default. Unnecessary for PT mode.
2616 	 */
2617 	for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
2618 		pgd = phys_to_virt(dma_pte_addr(pgd));
2619 		if (!dma_pte_present(pgd))
2620 			return -ENOMEM;
2621 	}
2622 
2623 	level = agaw_to_level(agaw);
2624 	if (level != 4 && level != 5)
2625 		return -EINVAL;
2626 
2627 	if (pasid != PASID_RID2PASID)
2628 		flags |= PASID_FLAG_SUPERVISOR_MODE;
2629 	if (level == 5)
2630 		flags |= PASID_FLAG_FL5LP;
2631 
2632 	if (domain->domain.type == IOMMU_DOMAIN_UNMANAGED)
2633 		flags |= PASID_FLAG_PAGE_SNOOP;
2634 
2635 	return intel_pasid_setup_first_level(iommu, dev, (pgd_t *)pgd, pasid,
2636 					     domain->iommu_did[iommu->seq_id],
2637 					     flags);
2638 }
2639 
2640 static bool dev_is_real_dma_subdevice(struct device *dev)
2641 {
2642 	return dev && dev_is_pci(dev) &&
2643 	       pci_real_dma_dev(to_pci_dev(dev)) != to_pci_dev(dev);
2644 }
2645 
2646 static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
2647 						    int bus, int devfn,
2648 						    struct device *dev,
2649 						    struct dmar_domain *domain)
2650 {
2651 	struct dmar_domain *found = NULL;
2652 	struct device_domain_info *info;
2653 	unsigned long flags;
2654 	int ret;
2655 
2656 	info = alloc_devinfo_mem();
2657 	if (!info)
2658 		return NULL;
2659 
2660 	if (!dev_is_real_dma_subdevice(dev)) {
2661 		info->bus = bus;
2662 		info->devfn = devfn;
2663 		info->segment = iommu->segment;
2664 	} else {
2665 		struct pci_dev *pdev = to_pci_dev(dev);
2666 
2667 		info->bus = pdev->bus->number;
2668 		info->devfn = pdev->devfn;
2669 		info->segment = pci_domain_nr(pdev->bus);
2670 	}
2671 
2672 	info->ats_supported = info->pasid_supported = info->pri_supported = 0;
2673 	info->ats_enabled = info->pasid_enabled = info->pri_enabled = 0;
2674 	info->ats_qdep = 0;
2675 	info->dev = dev;
2676 	info->domain = domain;
2677 	info->iommu = iommu;
2678 	info->pasid_table = NULL;
2679 	info->auxd_enabled = 0;
2680 	INIT_LIST_HEAD(&info->subdevices);
2681 
2682 	if (dev && dev_is_pci(dev)) {
2683 		struct pci_dev *pdev = to_pci_dev(info->dev);
2684 
2685 		if (ecap_dev_iotlb_support(iommu->ecap) &&
2686 		    pci_ats_supported(pdev) &&
2687 		    dmar_find_matched_atsr_unit(pdev))
2688 			info->ats_supported = 1;
2689 
2690 		if (sm_supported(iommu)) {
2691 			if (pasid_supported(iommu)) {
2692 				int features = pci_pasid_features(pdev);
2693 				if (features >= 0)
2694 					info->pasid_supported = features | 1;
2695 			}
2696 
2697 			if (info->ats_supported && ecap_prs(iommu->ecap) &&
2698 			    pci_pri_supported(pdev))
2699 				info->pri_supported = 1;
2700 		}
2701 	}
2702 
2703 	spin_lock_irqsave(&device_domain_lock, flags);
2704 	if (dev)
2705 		found = find_domain(dev);
2706 
2707 	if (!found) {
2708 		struct device_domain_info *info2;
2709 		info2 = dmar_search_domain_by_dev_info(info->segment, info->bus,
2710 						       info->devfn);
2711 		if (info2) {
2712 			found      = info2->domain;
2713 			info2->dev = dev;
2714 		}
2715 	}
2716 
2717 	if (found) {
2718 		spin_unlock_irqrestore(&device_domain_lock, flags);
2719 		free_devinfo_mem(info);
2720 		/* Caller must free the original domain */
2721 		return found;
2722 	}
2723 
2724 	spin_lock(&iommu->lock);
2725 	ret = domain_attach_iommu(domain, iommu);
2726 	spin_unlock(&iommu->lock);
2727 
2728 	if (ret) {
2729 		spin_unlock_irqrestore(&device_domain_lock, flags);
2730 		free_devinfo_mem(info);
2731 		return NULL;
2732 	}
2733 
2734 	list_add(&info->link, &domain->devices);
2735 	list_add(&info->global, &device_domain_list);
2736 	if (dev)
2737 		dev_iommu_priv_set(dev, info);
2738 	spin_unlock_irqrestore(&device_domain_lock, flags);
2739 
2740 	/* PASID table is mandatory for a PCI device in scalable mode. */
2741 	if (dev && dev_is_pci(dev) && sm_supported(iommu)) {
2742 		ret = intel_pasid_alloc_table(dev);
2743 		if (ret) {
2744 			dev_err(dev, "PASID table allocation failed\n");
2745 			dmar_remove_one_dev_info(dev);
2746 			return NULL;
2747 		}
2748 
2749 		/* Setup the PASID entry for requests without PASID: */
2750 		spin_lock_irqsave(&iommu->lock, flags);
2751 		if (hw_pass_through && domain_type_is_si(domain))
2752 			ret = intel_pasid_setup_pass_through(iommu, domain,
2753 					dev, PASID_RID2PASID);
2754 		else if (domain_use_first_level(domain))
2755 			ret = domain_setup_first_level(iommu, domain, dev,
2756 					PASID_RID2PASID);
2757 		else
2758 			ret = intel_pasid_setup_second_level(iommu, domain,
2759 					dev, PASID_RID2PASID);
2760 		spin_unlock_irqrestore(&iommu->lock, flags);
2761 		if (ret) {
2762 			dev_err(dev, "Setup RID2PASID failed\n");
2763 			dmar_remove_one_dev_info(dev);
2764 			return NULL;
2765 		}
2766 	}
2767 
2768 	if (dev && domain_context_mapping(domain, dev)) {
2769 		dev_err(dev, "Domain context map failed\n");
2770 		dmar_remove_one_dev_info(dev);
2771 		return NULL;
2772 	}
2773 
2774 	return domain;
2775 }
2776 
2777 static int iommu_domain_identity_map(struct dmar_domain *domain,
2778 				     unsigned long first_vpfn,
2779 				     unsigned long last_vpfn)
2780 {
2781 	/*
2782 	 * RMRR range might have overlap with physical memory range,
2783 	 * clear it first
2784 	 */
2785 	dma_pte_clear_range(domain, first_vpfn, last_vpfn);
2786 
2787 	return __domain_mapping(domain, first_vpfn,
2788 				first_vpfn, last_vpfn - first_vpfn + 1,
2789 				DMA_PTE_READ|DMA_PTE_WRITE);
2790 }
2791 
2792 static int md_domain_init(struct dmar_domain *domain, int guest_width);
2793 
2794 static int __init si_domain_init(int hw)
2795 {
2796 	struct dmar_rmrr_unit *rmrr;
2797 	struct device *dev;
2798 	int i, nid, ret;
2799 
2800 	si_domain = alloc_domain(IOMMU_DOMAIN_IDENTITY);
2801 	if (!si_domain)
2802 		return -EFAULT;
2803 
2804 	if (md_domain_init(si_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
2805 		domain_exit(si_domain);
2806 		return -EFAULT;
2807 	}
2808 
2809 	if (hw)
2810 		return 0;
2811 
2812 	for_each_online_node(nid) {
2813 		unsigned long start_pfn, end_pfn;
2814 		int i;
2815 
2816 		for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
2817 			ret = iommu_domain_identity_map(si_domain,
2818 					mm_to_dma_pfn(start_pfn),
2819 					mm_to_dma_pfn(end_pfn));
2820 			if (ret)
2821 				return ret;
2822 		}
2823 	}
2824 
2825 	/*
2826 	 * Identity map the RMRRs so that devices with RMRRs could also use
2827 	 * the si_domain.
2828 	 */
2829 	for_each_rmrr_units(rmrr) {
2830 		for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
2831 					  i, dev) {
2832 			unsigned long long start = rmrr->base_address;
2833 			unsigned long long end = rmrr->end_address;
2834 
2835 			if (WARN_ON(end < start ||
2836 				    end >> agaw_to_width(si_domain->agaw)))
2837 				continue;
2838 
2839 			ret = iommu_domain_identity_map(si_domain,
2840 					mm_to_dma_pfn(start >> PAGE_SHIFT),
2841 					mm_to_dma_pfn(end >> PAGE_SHIFT));
2842 			if (ret)
2843 				return ret;
2844 		}
2845 	}
2846 
2847 	return 0;
2848 }
2849 
2850 static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev)
2851 {
2852 	struct dmar_domain *ndomain;
2853 	struct intel_iommu *iommu;
2854 	u8 bus, devfn;
2855 
2856 	iommu = device_to_iommu(dev, &bus, &devfn);
2857 	if (!iommu)
2858 		return -ENODEV;
2859 
2860 	ndomain = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain);
2861 	if (ndomain != domain)
2862 		return -EBUSY;
2863 
2864 	return 0;
2865 }
2866 
2867 static bool device_has_rmrr(struct device *dev)
2868 {
2869 	struct dmar_rmrr_unit *rmrr;
2870 	struct device *tmp;
2871 	int i;
2872 
2873 	rcu_read_lock();
2874 	for_each_rmrr_units(rmrr) {
2875 		/*
2876 		 * Return TRUE if this RMRR contains the device that
2877 		 * is passed in.
2878 		 */
2879 		for_each_active_dev_scope(rmrr->devices,
2880 					  rmrr->devices_cnt, i, tmp)
2881 			if (tmp == dev ||
2882 			    is_downstream_to_pci_bridge(dev, tmp)) {
2883 				rcu_read_unlock();
2884 				return true;
2885 			}
2886 	}
2887 	rcu_read_unlock();
2888 	return false;
2889 }
2890 
2891 /**
2892  * device_rmrr_is_relaxable - Test whether the RMRR of this device
2893  * is relaxable (ie. is allowed to be not enforced under some conditions)
2894  * @dev: device handle
2895  *
2896  * We assume that PCI USB devices with RMRRs have them largely
2897  * for historical reasons and that the RMRR space is not actively used post
2898  * boot.  This exclusion may change if vendors begin to abuse it.
2899  *
2900  * The same exception is made for graphics devices, with the requirement that
2901  * any use of the RMRR regions will be torn down before assigning the device
2902  * to a guest.
2903  *
2904  * Return: true if the RMRR is relaxable, false otherwise
2905  */
2906 static bool device_rmrr_is_relaxable(struct device *dev)
2907 {
2908 	struct pci_dev *pdev;
2909 
2910 	if (!dev_is_pci(dev))
2911 		return false;
2912 
2913 	pdev = to_pci_dev(dev);
2914 	if (IS_USB_DEVICE(pdev) || IS_GFX_DEVICE(pdev))
2915 		return true;
2916 	else
2917 		return false;
2918 }
2919 
2920 /*
2921  * There are a couple cases where we need to restrict the functionality of
2922  * devices associated with RMRRs.  The first is when evaluating a device for
2923  * identity mapping because problems exist when devices are moved in and out
2924  * of domains and their respective RMRR information is lost.  This means that
2925  * a device with associated RMRRs will never be in a "passthrough" domain.
2926  * The second is use of the device through the IOMMU API.  This interface
2927  * expects to have full control of the IOVA space for the device.  We cannot
2928  * satisfy both the requirement that RMRR access is maintained and have an
2929  * unencumbered IOVA space.  We also have no ability to quiesce the device's
2930  * use of the RMRR space or even inform the IOMMU API user of the restriction.
2931  * We therefore prevent devices associated with an RMRR from participating in
2932  * the IOMMU API, which eliminates them from device assignment.
2933  *
2934  * In both cases, devices which have relaxable RMRRs are not concerned by this
2935  * restriction. See device_rmrr_is_relaxable comment.
2936  */
2937 static bool device_is_rmrr_locked(struct device *dev)
2938 {
2939 	if (!device_has_rmrr(dev))
2940 		return false;
2941 
2942 	if (device_rmrr_is_relaxable(dev))
2943 		return false;
2944 
2945 	return true;
2946 }
2947 
2948 /*
2949  * Return the required default domain type for a specific device.
2950  *
2951  * @dev: the device in query
2952  * @startup: true if this is during early boot
2953  *
2954  * Returns:
2955  *  - IOMMU_DOMAIN_DMA: device requires a dynamic mapping domain
2956  *  - IOMMU_DOMAIN_IDENTITY: device requires an identical mapping domain
2957  *  - 0: both identity and dynamic domains work for this device
2958  */
2959 static int device_def_domain_type(struct device *dev)
2960 {
2961 	if (dev_is_pci(dev)) {
2962 		struct pci_dev *pdev = to_pci_dev(dev);
2963 
2964 		if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
2965 			return IOMMU_DOMAIN_IDENTITY;
2966 
2967 		if ((iommu_identity_mapping & IDENTMAP_GFX) && IS_GFX_DEVICE(pdev))
2968 			return IOMMU_DOMAIN_IDENTITY;
2969 	}
2970 
2971 	return 0;
2972 }
2973 
2974 static void intel_iommu_init_qi(struct intel_iommu *iommu)
2975 {
2976 	/*
2977 	 * Start from the sane iommu hardware state.
2978 	 * If the queued invalidation is already initialized by us
2979 	 * (for example, while enabling interrupt-remapping) then
2980 	 * we got the things already rolling from a sane state.
2981 	 */
2982 	if (!iommu->qi) {
2983 		/*
2984 		 * Clear any previous faults.
2985 		 */
2986 		dmar_fault(-1, iommu);
2987 		/*
2988 		 * Disable queued invalidation if supported and already enabled
2989 		 * before OS handover.
2990 		 */
2991 		dmar_disable_qi(iommu);
2992 	}
2993 
2994 	if (dmar_enable_qi(iommu)) {
2995 		/*
2996 		 * Queued Invalidate not enabled, use Register Based Invalidate
2997 		 */
2998 		iommu->flush.flush_context = __iommu_flush_context;
2999 		iommu->flush.flush_iotlb = __iommu_flush_iotlb;
3000 		pr_info("%s: Using Register based invalidation\n",
3001 			iommu->name);
3002 	} else {
3003 		iommu->flush.flush_context = qi_flush_context;
3004 		iommu->flush.flush_iotlb = qi_flush_iotlb;
3005 		pr_info("%s: Using Queued invalidation\n", iommu->name);
3006 	}
3007 }
3008 
3009 static int copy_context_table(struct intel_iommu *iommu,
3010 			      struct root_entry *old_re,
3011 			      struct context_entry **tbl,
3012 			      int bus, bool ext)
3013 {
3014 	int tbl_idx, pos = 0, idx, devfn, ret = 0, did;
3015 	struct context_entry *new_ce = NULL, ce;
3016 	struct context_entry *old_ce = NULL;
3017 	struct root_entry re;
3018 	phys_addr_t old_ce_phys;
3019 
3020 	tbl_idx = ext ? bus * 2 : bus;
3021 	memcpy(&re, old_re, sizeof(re));
3022 
3023 	for (devfn = 0; devfn < 256; devfn++) {
3024 		/* First calculate the correct index */
3025 		idx = (ext ? devfn * 2 : devfn) % 256;
3026 
3027 		if (idx == 0) {
3028 			/* First save what we may have and clean up */
3029 			if (new_ce) {
3030 				tbl[tbl_idx] = new_ce;
3031 				__iommu_flush_cache(iommu, new_ce,
3032 						    VTD_PAGE_SIZE);
3033 				pos = 1;
3034 			}
3035 
3036 			if (old_ce)
3037 				memunmap(old_ce);
3038 
3039 			ret = 0;
3040 			if (devfn < 0x80)
3041 				old_ce_phys = root_entry_lctp(&re);
3042 			else
3043 				old_ce_phys = root_entry_uctp(&re);
3044 
3045 			if (!old_ce_phys) {
3046 				if (ext && devfn == 0) {
3047 					/* No LCTP, try UCTP */
3048 					devfn = 0x7f;
3049 					continue;
3050 				} else {
3051 					goto out;
3052 				}
3053 			}
3054 
3055 			ret = -ENOMEM;
3056 			old_ce = memremap(old_ce_phys, PAGE_SIZE,
3057 					MEMREMAP_WB);
3058 			if (!old_ce)
3059 				goto out;
3060 
3061 			new_ce = alloc_pgtable_page(iommu->node);
3062 			if (!new_ce)
3063 				goto out_unmap;
3064 
3065 			ret = 0;
3066 		}
3067 
3068 		/* Now copy the context entry */
3069 		memcpy(&ce, old_ce + idx, sizeof(ce));
3070 
3071 		if (!__context_present(&ce))
3072 			continue;
3073 
3074 		did = context_domain_id(&ce);
3075 		if (did >= 0 && did < cap_ndoms(iommu->cap))
3076 			set_bit(did, iommu->domain_ids);
3077 
3078 		/*
3079 		 * We need a marker for copied context entries. This
3080 		 * marker needs to work for the old format as well as
3081 		 * for extended context entries.
3082 		 *
3083 		 * Bit 67 of the context entry is used. In the old
3084 		 * format this bit is available to software, in the
3085 		 * extended format it is the PGE bit, but PGE is ignored
3086 		 * by HW if PASIDs are disabled (and thus still
3087 		 * available).
3088 		 *
3089 		 * So disable PASIDs first and then mark the entry
3090 		 * copied. This means that we don't copy PASID
3091 		 * translations from the old kernel, but this is fine as
3092 		 * faults there are not fatal.
3093 		 */
3094 		context_clear_pasid_enable(&ce);
3095 		context_set_copied(&ce);
3096 
3097 		new_ce[idx] = ce;
3098 	}
3099 
3100 	tbl[tbl_idx + pos] = new_ce;
3101 
3102 	__iommu_flush_cache(iommu, new_ce, VTD_PAGE_SIZE);
3103 
3104 out_unmap:
3105 	memunmap(old_ce);
3106 
3107 out:
3108 	return ret;
3109 }
3110 
3111 static int copy_translation_tables(struct intel_iommu *iommu)
3112 {
3113 	struct context_entry **ctxt_tbls;
3114 	struct root_entry *old_rt;
3115 	phys_addr_t old_rt_phys;
3116 	int ctxt_table_entries;
3117 	unsigned long flags;
3118 	u64 rtaddr_reg;
3119 	int bus, ret;
3120 	bool new_ext, ext;
3121 
3122 	rtaddr_reg = dmar_readq(iommu->reg + DMAR_RTADDR_REG);
3123 	ext        = !!(rtaddr_reg & DMA_RTADDR_RTT);
3124 	new_ext    = !!ecap_ecs(iommu->ecap);
3125 
3126 	/*
3127 	 * The RTT bit can only be changed when translation is disabled,
3128 	 * but disabling translation means to open a window for data
3129 	 * corruption. So bail out and don't copy anything if we would
3130 	 * have to change the bit.
3131 	 */
3132 	if (new_ext != ext)
3133 		return -EINVAL;
3134 
3135 	old_rt_phys = rtaddr_reg & VTD_PAGE_MASK;
3136 	if (!old_rt_phys)
3137 		return -EINVAL;
3138 
3139 	old_rt = memremap(old_rt_phys, PAGE_SIZE, MEMREMAP_WB);
3140 	if (!old_rt)
3141 		return -ENOMEM;
3142 
3143 	/* This is too big for the stack - allocate it from slab */
3144 	ctxt_table_entries = ext ? 512 : 256;
3145 	ret = -ENOMEM;
3146 	ctxt_tbls = kcalloc(ctxt_table_entries, sizeof(void *), GFP_KERNEL);
3147 	if (!ctxt_tbls)
3148 		goto out_unmap;
3149 
3150 	for (bus = 0; bus < 256; bus++) {
3151 		ret = copy_context_table(iommu, &old_rt[bus],
3152 					 ctxt_tbls, bus, ext);
3153 		if (ret) {
3154 			pr_err("%s: Failed to copy context table for bus %d\n",
3155 				iommu->name, bus);
3156 			continue;
3157 		}
3158 	}
3159 
3160 	spin_lock_irqsave(&iommu->lock, flags);
3161 
3162 	/* Context tables are copied, now write them to the root_entry table */
3163 	for (bus = 0; bus < 256; bus++) {
3164 		int idx = ext ? bus * 2 : bus;
3165 		u64 val;
3166 
3167 		if (ctxt_tbls[idx]) {
3168 			val = virt_to_phys(ctxt_tbls[idx]) | 1;
3169 			iommu->root_entry[bus].lo = val;
3170 		}
3171 
3172 		if (!ext || !ctxt_tbls[idx + 1])
3173 			continue;
3174 
3175 		val = virt_to_phys(ctxt_tbls[idx + 1]) | 1;
3176 		iommu->root_entry[bus].hi = val;
3177 	}
3178 
3179 	spin_unlock_irqrestore(&iommu->lock, flags);
3180 
3181 	kfree(ctxt_tbls);
3182 
3183 	__iommu_flush_cache(iommu, iommu->root_entry, PAGE_SIZE);
3184 
3185 	ret = 0;
3186 
3187 out_unmap:
3188 	memunmap(old_rt);
3189 
3190 	return ret;
3191 }
3192 
3193 #ifdef CONFIG_INTEL_IOMMU_SVM
3194 static ioasid_t intel_vcmd_ioasid_alloc(ioasid_t min, ioasid_t max, void *data)
3195 {
3196 	struct intel_iommu *iommu = data;
3197 	ioasid_t ioasid;
3198 
3199 	if (!iommu)
3200 		return INVALID_IOASID;
3201 	/*
3202 	 * VT-d virtual command interface always uses the full 20 bit
3203 	 * PASID range. Host can partition guest PASID range based on
3204 	 * policies but it is out of guest's control.
3205 	 */
3206 	if (min < PASID_MIN || max > intel_pasid_max_id)
3207 		return INVALID_IOASID;
3208 
3209 	if (vcmd_alloc_pasid(iommu, &ioasid))
3210 		return INVALID_IOASID;
3211 
3212 	return ioasid;
3213 }
3214 
3215 static void intel_vcmd_ioasid_free(ioasid_t ioasid, void *data)
3216 {
3217 	struct intel_iommu *iommu = data;
3218 
3219 	if (!iommu)
3220 		return;
3221 	/*
3222 	 * Sanity check the ioasid owner is done at upper layer, e.g. VFIO
3223 	 * We can only free the PASID when all the devices are unbound.
3224 	 */
3225 	if (ioasid_find(NULL, ioasid, NULL)) {
3226 		pr_alert("Cannot free active IOASID %d\n", ioasid);
3227 		return;
3228 	}
3229 	vcmd_free_pasid(iommu, ioasid);
3230 }
3231 
3232 static void register_pasid_allocator(struct intel_iommu *iommu)
3233 {
3234 	/*
3235 	 * If we are running in the host, no need for custom allocator
3236 	 * in that PASIDs are allocated from the host system-wide.
3237 	 */
3238 	if (!cap_caching_mode(iommu->cap))
3239 		return;
3240 
3241 	if (!sm_supported(iommu)) {
3242 		pr_warn("VT-d Scalable Mode not enabled, no PASID allocation\n");
3243 		return;
3244 	}
3245 
3246 	/*
3247 	 * Register a custom PASID allocator if we are running in a guest,
3248 	 * guest PASID must be obtained via virtual command interface.
3249 	 * There can be multiple vIOMMUs in each guest but only one allocator
3250 	 * is active. All vIOMMU allocators will eventually be calling the same
3251 	 * host allocator.
3252 	 */
3253 	if (!vccap_pasid(iommu->vccap))
3254 		return;
3255 
3256 	pr_info("Register custom PASID allocator\n");
3257 	iommu->pasid_allocator.alloc = intel_vcmd_ioasid_alloc;
3258 	iommu->pasid_allocator.free = intel_vcmd_ioasid_free;
3259 	iommu->pasid_allocator.pdata = (void *)iommu;
3260 	if (ioasid_register_allocator(&iommu->pasid_allocator)) {
3261 		pr_warn("Custom PASID allocator failed, scalable mode disabled\n");
3262 		/*
3263 		 * Disable scalable mode on this IOMMU if there
3264 		 * is no custom allocator. Mixing SM capable vIOMMU
3265 		 * and non-SM vIOMMU are not supported.
3266 		 */
3267 		intel_iommu_sm = 0;
3268 	}
3269 }
3270 #endif
3271 
3272 static int __init init_dmars(void)
3273 {
3274 	struct dmar_drhd_unit *drhd;
3275 	struct intel_iommu *iommu;
3276 	int ret;
3277 
3278 	/*
3279 	 * for each drhd
3280 	 *    allocate root
3281 	 *    initialize and program root entry to not present
3282 	 * endfor
3283 	 */
3284 	for_each_drhd_unit(drhd) {
3285 		/*
3286 		 * lock not needed as this is only incremented in the single
3287 		 * threaded kernel __init code path all other access are read
3288 		 * only
3289 		 */
3290 		if (g_num_of_iommus < DMAR_UNITS_SUPPORTED) {
3291 			g_num_of_iommus++;
3292 			continue;
3293 		}
3294 		pr_err_once("Exceeded %d IOMMUs\n", DMAR_UNITS_SUPPORTED);
3295 	}
3296 
3297 	/* Preallocate enough resources for IOMMU hot-addition */
3298 	if (g_num_of_iommus < DMAR_UNITS_SUPPORTED)
3299 		g_num_of_iommus = DMAR_UNITS_SUPPORTED;
3300 
3301 	g_iommus = kcalloc(g_num_of_iommus, sizeof(struct intel_iommu *),
3302 			GFP_KERNEL);
3303 	if (!g_iommus) {
3304 		ret = -ENOMEM;
3305 		goto error;
3306 	}
3307 
3308 	ret = intel_cap_audit(CAP_AUDIT_STATIC_DMAR, NULL);
3309 	if (ret)
3310 		goto free_iommu;
3311 
3312 	for_each_iommu(iommu, drhd) {
3313 		if (drhd->ignored) {
3314 			iommu_disable_translation(iommu);
3315 			continue;
3316 		}
3317 
3318 		/*
3319 		 * Find the max pasid size of all IOMMU's in the system.
3320 		 * We need to ensure the system pasid table is no bigger
3321 		 * than the smallest supported.
3322 		 */
3323 		if (pasid_supported(iommu)) {
3324 			u32 temp = 2 << ecap_pss(iommu->ecap);
3325 
3326 			intel_pasid_max_id = min_t(u32, temp,
3327 						   intel_pasid_max_id);
3328 		}
3329 
3330 		g_iommus[iommu->seq_id] = iommu;
3331 
3332 		intel_iommu_init_qi(iommu);
3333 
3334 		ret = iommu_init_domains(iommu);
3335 		if (ret)
3336 			goto free_iommu;
3337 
3338 		init_translation_status(iommu);
3339 
3340 		if (translation_pre_enabled(iommu) && !is_kdump_kernel()) {
3341 			iommu_disable_translation(iommu);
3342 			clear_translation_pre_enabled(iommu);
3343 			pr_warn("Translation was enabled for %s but we are not in kdump mode\n",
3344 				iommu->name);
3345 		}
3346 
3347 		/*
3348 		 * TBD:
3349 		 * we could share the same root & context tables
3350 		 * among all IOMMU's. Need to Split it later.
3351 		 */
3352 		ret = iommu_alloc_root_entry(iommu);
3353 		if (ret)
3354 			goto free_iommu;
3355 
3356 		if (translation_pre_enabled(iommu)) {
3357 			pr_info("Translation already enabled - trying to copy translation structures\n");
3358 
3359 			ret = copy_translation_tables(iommu);
3360 			if (ret) {
3361 				/*
3362 				 * We found the IOMMU with translation
3363 				 * enabled - but failed to copy over the
3364 				 * old root-entry table. Try to proceed
3365 				 * by disabling translation now and
3366 				 * allocating a clean root-entry table.
3367 				 * This might cause DMAR faults, but
3368 				 * probably the dump will still succeed.
3369 				 */
3370 				pr_err("Failed to copy translation tables from previous kernel for %s\n",
3371 				       iommu->name);
3372 				iommu_disable_translation(iommu);
3373 				clear_translation_pre_enabled(iommu);
3374 			} else {
3375 				pr_info("Copied translation tables from previous kernel for %s\n",
3376 					iommu->name);
3377 			}
3378 		}
3379 
3380 		if (!ecap_pass_through(iommu->ecap))
3381 			hw_pass_through = 0;
3382 		intel_svm_check(iommu);
3383 	}
3384 
3385 	/*
3386 	 * Now that qi is enabled on all iommus, set the root entry and flush
3387 	 * caches. This is required on some Intel X58 chipsets, otherwise the
3388 	 * flush_context function will loop forever and the boot hangs.
3389 	 */
3390 	for_each_active_iommu(iommu, drhd) {
3391 		iommu_flush_write_buffer(iommu);
3392 #ifdef CONFIG_INTEL_IOMMU_SVM
3393 		register_pasid_allocator(iommu);
3394 #endif
3395 		iommu_set_root_entry(iommu);
3396 	}
3397 
3398 #ifdef CONFIG_INTEL_IOMMU_BROKEN_GFX_WA
3399 	dmar_map_gfx = 0;
3400 #endif
3401 
3402 	if (!dmar_map_gfx)
3403 		iommu_identity_mapping |= IDENTMAP_GFX;
3404 
3405 	check_tylersburg_isoch();
3406 
3407 	ret = si_domain_init(hw_pass_through);
3408 	if (ret)
3409 		goto free_iommu;
3410 
3411 	/*
3412 	 * for each drhd
3413 	 *   enable fault log
3414 	 *   global invalidate context cache
3415 	 *   global invalidate iotlb
3416 	 *   enable translation
3417 	 */
3418 	for_each_iommu(iommu, drhd) {
3419 		if (drhd->ignored) {
3420 			/*
3421 			 * we always have to disable PMRs or DMA may fail on
3422 			 * this device
3423 			 */
3424 			if (force_on)
3425 				iommu_disable_protect_mem_regions(iommu);
3426 			continue;
3427 		}
3428 
3429 		iommu_flush_write_buffer(iommu);
3430 
3431 #ifdef CONFIG_INTEL_IOMMU_SVM
3432 		if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) {
3433 			/*
3434 			 * Call dmar_alloc_hwirq() with dmar_global_lock held,
3435 			 * could cause possible lock race condition.
3436 			 */
3437 			up_write(&dmar_global_lock);
3438 			ret = intel_svm_enable_prq(iommu);
3439 			down_write(&dmar_global_lock);
3440 			if (ret)
3441 				goto free_iommu;
3442 		}
3443 #endif
3444 		ret = dmar_set_interrupt(iommu);
3445 		if (ret)
3446 			goto free_iommu;
3447 	}
3448 
3449 	return 0;
3450 
3451 free_iommu:
3452 	for_each_active_iommu(iommu, drhd) {
3453 		disable_dmar_iommu(iommu);
3454 		free_dmar_iommu(iommu);
3455 	}
3456 
3457 	kfree(g_iommus);
3458 
3459 error:
3460 	return ret;
3461 }
3462 
3463 static inline int iommu_domain_cache_init(void)
3464 {
3465 	int ret = 0;
3466 
3467 	iommu_domain_cache = kmem_cache_create("iommu_domain",
3468 					 sizeof(struct dmar_domain),
3469 					 0,
3470 					 SLAB_HWCACHE_ALIGN,
3471 
3472 					 NULL);
3473 	if (!iommu_domain_cache) {
3474 		pr_err("Couldn't create iommu_domain cache\n");
3475 		ret = -ENOMEM;
3476 	}
3477 
3478 	return ret;
3479 }
3480 
3481 static inline int iommu_devinfo_cache_init(void)
3482 {
3483 	int ret = 0;
3484 
3485 	iommu_devinfo_cache = kmem_cache_create("iommu_devinfo",
3486 					 sizeof(struct device_domain_info),
3487 					 0,
3488 					 SLAB_HWCACHE_ALIGN,
3489 					 NULL);
3490 	if (!iommu_devinfo_cache) {
3491 		pr_err("Couldn't create devinfo cache\n");
3492 		ret = -ENOMEM;
3493 	}
3494 
3495 	return ret;
3496 }
3497 
3498 static int __init iommu_init_mempool(void)
3499 {
3500 	int ret;
3501 	ret = iova_cache_get();
3502 	if (ret)
3503 		return ret;
3504 
3505 	ret = iommu_domain_cache_init();
3506 	if (ret)
3507 		goto domain_error;
3508 
3509 	ret = iommu_devinfo_cache_init();
3510 	if (!ret)
3511 		return ret;
3512 
3513 	kmem_cache_destroy(iommu_domain_cache);
3514 domain_error:
3515 	iova_cache_put();
3516 
3517 	return -ENOMEM;
3518 }
3519 
3520 static void __init iommu_exit_mempool(void)
3521 {
3522 	kmem_cache_destroy(iommu_devinfo_cache);
3523 	kmem_cache_destroy(iommu_domain_cache);
3524 	iova_cache_put();
3525 }
3526 
3527 static void __init init_no_remapping_devices(void)
3528 {
3529 	struct dmar_drhd_unit *drhd;
3530 	struct device *dev;
3531 	int i;
3532 
3533 	for_each_drhd_unit(drhd) {
3534 		if (!drhd->include_all) {
3535 			for_each_active_dev_scope(drhd->devices,
3536 						  drhd->devices_cnt, i, dev)
3537 				break;
3538 			/* ignore DMAR unit if no devices exist */
3539 			if (i == drhd->devices_cnt)
3540 				drhd->ignored = 1;
3541 		}
3542 	}
3543 
3544 	for_each_active_drhd_unit(drhd) {
3545 		if (drhd->include_all)
3546 			continue;
3547 
3548 		for_each_active_dev_scope(drhd->devices,
3549 					  drhd->devices_cnt, i, dev)
3550 			if (!dev_is_pci(dev) || !IS_GFX_DEVICE(to_pci_dev(dev)))
3551 				break;
3552 		if (i < drhd->devices_cnt)
3553 			continue;
3554 
3555 		/* This IOMMU has *only* gfx devices. Either bypass it or
3556 		   set the gfx_mapped flag, as appropriate */
3557 		drhd->gfx_dedicated = 1;
3558 		if (!dmar_map_gfx)
3559 			drhd->ignored = 1;
3560 	}
3561 }
3562 
3563 #ifdef CONFIG_SUSPEND
3564 static int init_iommu_hw(void)
3565 {
3566 	struct dmar_drhd_unit *drhd;
3567 	struct intel_iommu *iommu = NULL;
3568 
3569 	for_each_active_iommu(iommu, drhd)
3570 		if (iommu->qi)
3571 			dmar_reenable_qi(iommu);
3572 
3573 	for_each_iommu(iommu, drhd) {
3574 		if (drhd->ignored) {
3575 			/*
3576 			 * we always have to disable PMRs or DMA may fail on
3577 			 * this device
3578 			 */
3579 			if (force_on)
3580 				iommu_disable_protect_mem_regions(iommu);
3581 			continue;
3582 		}
3583 
3584 		iommu_flush_write_buffer(iommu);
3585 		iommu_set_root_entry(iommu);
3586 		iommu_enable_translation(iommu);
3587 		iommu_disable_protect_mem_regions(iommu);
3588 	}
3589 
3590 	return 0;
3591 }
3592 
3593 static void iommu_flush_all(void)
3594 {
3595 	struct dmar_drhd_unit *drhd;
3596 	struct intel_iommu *iommu;
3597 
3598 	for_each_active_iommu(iommu, drhd) {
3599 		iommu->flush.flush_context(iommu, 0, 0, 0,
3600 					   DMA_CCMD_GLOBAL_INVL);
3601 		iommu->flush.flush_iotlb(iommu, 0, 0, 0,
3602 					 DMA_TLB_GLOBAL_FLUSH);
3603 	}
3604 }
3605 
3606 static int iommu_suspend(void)
3607 {
3608 	struct dmar_drhd_unit *drhd;
3609 	struct intel_iommu *iommu = NULL;
3610 	unsigned long flag;
3611 
3612 	for_each_active_iommu(iommu, drhd) {
3613 		iommu->iommu_state = kcalloc(MAX_SR_DMAR_REGS, sizeof(u32),
3614 					     GFP_KERNEL);
3615 		if (!iommu->iommu_state)
3616 			goto nomem;
3617 	}
3618 
3619 	iommu_flush_all();
3620 
3621 	for_each_active_iommu(iommu, drhd) {
3622 		iommu_disable_translation(iommu);
3623 
3624 		raw_spin_lock_irqsave(&iommu->register_lock, flag);
3625 
3626 		iommu->iommu_state[SR_DMAR_FECTL_REG] =
3627 			readl(iommu->reg + DMAR_FECTL_REG);
3628 		iommu->iommu_state[SR_DMAR_FEDATA_REG] =
3629 			readl(iommu->reg + DMAR_FEDATA_REG);
3630 		iommu->iommu_state[SR_DMAR_FEADDR_REG] =
3631 			readl(iommu->reg + DMAR_FEADDR_REG);
3632 		iommu->iommu_state[SR_DMAR_FEUADDR_REG] =
3633 			readl(iommu->reg + DMAR_FEUADDR_REG);
3634 
3635 		raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
3636 	}
3637 	return 0;
3638 
3639 nomem:
3640 	for_each_active_iommu(iommu, drhd)
3641 		kfree(iommu->iommu_state);
3642 
3643 	return -ENOMEM;
3644 }
3645 
3646 static void iommu_resume(void)
3647 {
3648 	struct dmar_drhd_unit *drhd;
3649 	struct intel_iommu *iommu = NULL;
3650 	unsigned long flag;
3651 
3652 	if (init_iommu_hw()) {
3653 		if (force_on)
3654 			panic("tboot: IOMMU setup failed, DMAR can not resume!\n");
3655 		else
3656 			WARN(1, "IOMMU setup failed, DMAR can not resume!\n");
3657 		return;
3658 	}
3659 
3660 	for_each_active_iommu(iommu, drhd) {
3661 
3662 		raw_spin_lock_irqsave(&iommu->register_lock, flag);
3663 
3664 		writel(iommu->iommu_state[SR_DMAR_FECTL_REG],
3665 			iommu->reg + DMAR_FECTL_REG);
3666 		writel(iommu->iommu_state[SR_DMAR_FEDATA_REG],
3667 			iommu->reg + DMAR_FEDATA_REG);
3668 		writel(iommu->iommu_state[SR_DMAR_FEADDR_REG],
3669 			iommu->reg + DMAR_FEADDR_REG);
3670 		writel(iommu->iommu_state[SR_DMAR_FEUADDR_REG],
3671 			iommu->reg + DMAR_FEUADDR_REG);
3672 
3673 		raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
3674 	}
3675 
3676 	for_each_active_iommu(iommu, drhd)
3677 		kfree(iommu->iommu_state);
3678 }
3679 
3680 static struct syscore_ops iommu_syscore_ops = {
3681 	.resume		= iommu_resume,
3682 	.suspend	= iommu_suspend,
3683 };
3684 
3685 static void __init init_iommu_pm_ops(void)
3686 {
3687 	register_syscore_ops(&iommu_syscore_ops);
3688 }
3689 
3690 #else
3691 static inline void init_iommu_pm_ops(void) {}
3692 #endif	/* CONFIG_PM */
3693 
3694 static int rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr)
3695 {
3696 	if (!IS_ALIGNED(rmrr->base_address, PAGE_SIZE) ||
3697 	    !IS_ALIGNED(rmrr->end_address + 1, PAGE_SIZE) ||
3698 	    rmrr->end_address <= rmrr->base_address ||
3699 	    arch_rmrr_sanity_check(rmrr))
3700 		return -EINVAL;
3701 
3702 	return 0;
3703 }
3704 
3705 int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg)
3706 {
3707 	struct acpi_dmar_reserved_memory *rmrr;
3708 	struct dmar_rmrr_unit *rmrru;
3709 
3710 	rmrr = (struct acpi_dmar_reserved_memory *)header;
3711 	if (rmrr_sanity_check(rmrr)) {
3712 		pr_warn(FW_BUG
3713 			   "Your BIOS is broken; bad RMRR [%#018Lx-%#018Lx]\n"
3714 			   "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
3715 			   rmrr->base_address, rmrr->end_address,
3716 			   dmi_get_system_info(DMI_BIOS_VENDOR),
3717 			   dmi_get_system_info(DMI_BIOS_VERSION),
3718 			   dmi_get_system_info(DMI_PRODUCT_VERSION));
3719 		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
3720 	}
3721 
3722 	rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
3723 	if (!rmrru)
3724 		goto out;
3725 
3726 	rmrru->hdr = header;
3727 
3728 	rmrru->base_address = rmrr->base_address;
3729 	rmrru->end_address = rmrr->end_address;
3730 
3731 	rmrru->devices = dmar_alloc_dev_scope((void *)(rmrr + 1),
3732 				((void *)rmrr) + rmrr->header.length,
3733 				&rmrru->devices_cnt);
3734 	if (rmrru->devices_cnt && rmrru->devices == NULL)
3735 		goto free_rmrru;
3736 
3737 	list_add(&rmrru->list, &dmar_rmrr_units);
3738 
3739 	return 0;
3740 free_rmrru:
3741 	kfree(rmrru);
3742 out:
3743 	return -ENOMEM;
3744 }
3745 
3746 static struct dmar_atsr_unit *dmar_find_atsr(struct acpi_dmar_atsr *atsr)
3747 {
3748 	struct dmar_atsr_unit *atsru;
3749 	struct acpi_dmar_atsr *tmp;
3750 
3751 	list_for_each_entry_rcu(atsru, &dmar_atsr_units, list,
3752 				dmar_rcu_check()) {
3753 		tmp = (struct acpi_dmar_atsr *)atsru->hdr;
3754 		if (atsr->segment != tmp->segment)
3755 			continue;
3756 		if (atsr->header.length != tmp->header.length)
3757 			continue;
3758 		if (memcmp(atsr, tmp, atsr->header.length) == 0)
3759 			return atsru;
3760 	}
3761 
3762 	return NULL;
3763 }
3764 
3765 int dmar_parse_one_atsr(struct acpi_dmar_header *hdr, void *arg)
3766 {
3767 	struct acpi_dmar_atsr *atsr;
3768 	struct dmar_atsr_unit *atsru;
3769 
3770 	if (system_state >= SYSTEM_RUNNING && !intel_iommu_enabled)
3771 		return 0;
3772 
3773 	atsr = container_of(hdr, struct acpi_dmar_atsr, header);
3774 	atsru = dmar_find_atsr(atsr);
3775 	if (atsru)
3776 		return 0;
3777 
3778 	atsru = kzalloc(sizeof(*atsru) + hdr->length, GFP_KERNEL);
3779 	if (!atsru)
3780 		return -ENOMEM;
3781 
3782 	/*
3783 	 * If memory is allocated from slab by ACPI _DSM method, we need to
3784 	 * copy the memory content because the memory buffer will be freed
3785 	 * on return.
3786 	 */
3787 	atsru->hdr = (void *)(atsru + 1);
3788 	memcpy(atsru->hdr, hdr, hdr->length);
3789 	atsru->include_all = atsr->flags & 0x1;
3790 	if (!atsru->include_all) {
3791 		atsru->devices = dmar_alloc_dev_scope((void *)(atsr + 1),
3792 				(void *)atsr + atsr->header.length,
3793 				&atsru->devices_cnt);
3794 		if (atsru->devices_cnt && atsru->devices == NULL) {
3795 			kfree(atsru);
3796 			return -ENOMEM;
3797 		}
3798 	}
3799 
3800 	list_add_rcu(&atsru->list, &dmar_atsr_units);
3801 
3802 	return 0;
3803 }
3804 
3805 static void intel_iommu_free_atsr(struct dmar_atsr_unit *atsru)
3806 {
3807 	dmar_free_dev_scope(&atsru->devices, &atsru->devices_cnt);
3808 	kfree(atsru);
3809 }
3810 
3811 int dmar_release_one_atsr(struct acpi_dmar_header *hdr, void *arg)
3812 {
3813 	struct acpi_dmar_atsr *atsr;
3814 	struct dmar_atsr_unit *atsru;
3815 
3816 	atsr = container_of(hdr, struct acpi_dmar_atsr, header);
3817 	atsru = dmar_find_atsr(atsr);
3818 	if (atsru) {
3819 		list_del_rcu(&atsru->list);
3820 		synchronize_rcu();
3821 		intel_iommu_free_atsr(atsru);
3822 	}
3823 
3824 	return 0;
3825 }
3826 
3827 int dmar_check_one_atsr(struct acpi_dmar_header *hdr, void *arg)
3828 {
3829 	int i;
3830 	struct device *dev;
3831 	struct acpi_dmar_atsr *atsr;
3832 	struct dmar_atsr_unit *atsru;
3833 
3834 	atsr = container_of(hdr, struct acpi_dmar_atsr, header);
3835 	atsru = dmar_find_atsr(atsr);
3836 	if (!atsru)
3837 		return 0;
3838 
3839 	if (!atsru->include_all && atsru->devices && atsru->devices_cnt) {
3840 		for_each_active_dev_scope(atsru->devices, atsru->devices_cnt,
3841 					  i, dev)
3842 			return -EBUSY;
3843 	}
3844 
3845 	return 0;
3846 }
3847 
3848 static struct dmar_satc_unit *dmar_find_satc(struct acpi_dmar_satc *satc)
3849 {
3850 	struct dmar_satc_unit *satcu;
3851 	struct acpi_dmar_satc *tmp;
3852 
3853 	list_for_each_entry_rcu(satcu, &dmar_satc_units, list,
3854 				dmar_rcu_check()) {
3855 		tmp = (struct acpi_dmar_satc *)satcu->hdr;
3856 		if (satc->segment != tmp->segment)
3857 			continue;
3858 		if (satc->header.length != tmp->header.length)
3859 			continue;
3860 		if (memcmp(satc, tmp, satc->header.length) == 0)
3861 			return satcu;
3862 	}
3863 
3864 	return NULL;
3865 }
3866 
3867 int dmar_parse_one_satc(struct acpi_dmar_header *hdr, void *arg)
3868 {
3869 	struct acpi_dmar_satc *satc;
3870 	struct dmar_satc_unit *satcu;
3871 
3872 	if (system_state >= SYSTEM_RUNNING && !intel_iommu_enabled)
3873 		return 0;
3874 
3875 	satc = container_of(hdr, struct acpi_dmar_satc, header);
3876 	satcu = dmar_find_satc(satc);
3877 	if (satcu)
3878 		return 0;
3879 
3880 	satcu = kzalloc(sizeof(*satcu) + hdr->length, GFP_KERNEL);
3881 	if (!satcu)
3882 		return -ENOMEM;
3883 
3884 	satcu->hdr = (void *)(satcu + 1);
3885 	memcpy(satcu->hdr, hdr, hdr->length);
3886 	satcu->atc_required = satc->flags & 0x1;
3887 	satcu->devices = dmar_alloc_dev_scope((void *)(satc + 1),
3888 					      (void *)satc + satc->header.length,
3889 					      &satcu->devices_cnt);
3890 	if (satcu->devices_cnt && !satcu->devices) {
3891 		kfree(satcu);
3892 		return -ENOMEM;
3893 	}
3894 	list_add_rcu(&satcu->list, &dmar_satc_units);
3895 
3896 	return 0;
3897 }
3898 
3899 static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
3900 {
3901 	int sp, ret;
3902 	struct intel_iommu *iommu = dmaru->iommu;
3903 
3904 	if (g_iommus[iommu->seq_id])
3905 		return 0;
3906 
3907 	ret = intel_cap_audit(CAP_AUDIT_HOTPLUG_DMAR, iommu);
3908 	if (ret)
3909 		goto out;
3910 
3911 	if (hw_pass_through && !ecap_pass_through(iommu->ecap)) {
3912 		pr_warn("%s: Doesn't support hardware pass through.\n",
3913 			iommu->name);
3914 		return -ENXIO;
3915 	}
3916 	if (!ecap_sc_support(iommu->ecap) &&
3917 	    domain_update_iommu_snooping(iommu)) {
3918 		pr_warn("%s: Doesn't support snooping.\n",
3919 			iommu->name);
3920 		return -ENXIO;
3921 	}
3922 	sp = domain_update_iommu_superpage(NULL, iommu) - 1;
3923 	if (sp >= 0 && !(cap_super_page_val(iommu->cap) & (1 << sp))) {
3924 		pr_warn("%s: Doesn't support large page.\n",
3925 			iommu->name);
3926 		return -ENXIO;
3927 	}
3928 
3929 	/*
3930 	 * Disable translation if already enabled prior to OS handover.
3931 	 */
3932 	if (iommu->gcmd & DMA_GCMD_TE)
3933 		iommu_disable_translation(iommu);
3934 
3935 	g_iommus[iommu->seq_id] = iommu;
3936 	ret = iommu_init_domains(iommu);
3937 	if (ret == 0)
3938 		ret = iommu_alloc_root_entry(iommu);
3939 	if (ret)
3940 		goto out;
3941 
3942 	intel_svm_check(iommu);
3943 
3944 	if (dmaru->ignored) {
3945 		/*
3946 		 * we always have to disable PMRs or DMA may fail on this device
3947 		 */
3948 		if (force_on)
3949 			iommu_disable_protect_mem_regions(iommu);
3950 		return 0;
3951 	}
3952 
3953 	intel_iommu_init_qi(iommu);
3954 	iommu_flush_write_buffer(iommu);
3955 
3956 #ifdef CONFIG_INTEL_IOMMU_SVM
3957 	if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) {
3958 		ret = intel_svm_enable_prq(iommu);
3959 		if (ret)
3960 			goto disable_iommu;
3961 	}
3962 #endif
3963 	ret = dmar_set_interrupt(iommu);
3964 	if (ret)
3965 		goto disable_iommu;
3966 
3967 	iommu_set_root_entry(iommu);
3968 	iommu_enable_translation(iommu);
3969 
3970 	iommu_disable_protect_mem_regions(iommu);
3971 	return 0;
3972 
3973 disable_iommu:
3974 	disable_dmar_iommu(iommu);
3975 out:
3976 	free_dmar_iommu(iommu);
3977 	return ret;
3978 }
3979 
3980 int dmar_iommu_hotplug(struct dmar_drhd_unit *dmaru, bool insert)
3981 {
3982 	int ret = 0;
3983 	struct intel_iommu *iommu = dmaru->iommu;
3984 
3985 	if (!intel_iommu_enabled)
3986 		return 0;
3987 	if (iommu == NULL)
3988 		return -EINVAL;
3989 
3990 	if (insert) {
3991 		ret = intel_iommu_add(dmaru);
3992 	} else {
3993 		disable_dmar_iommu(iommu);
3994 		free_dmar_iommu(iommu);
3995 	}
3996 
3997 	return ret;
3998 }
3999 
4000 static void intel_iommu_free_dmars(void)
4001 {
4002 	struct dmar_rmrr_unit *rmrru, *rmrr_n;
4003 	struct dmar_atsr_unit *atsru, *atsr_n;
4004 	struct dmar_satc_unit *satcu, *satc_n;
4005 
4006 	list_for_each_entry_safe(rmrru, rmrr_n, &dmar_rmrr_units, list) {
4007 		list_del(&rmrru->list);
4008 		dmar_free_dev_scope(&rmrru->devices, &rmrru->devices_cnt);
4009 		kfree(rmrru);
4010 	}
4011 
4012 	list_for_each_entry_safe(atsru, atsr_n, &dmar_atsr_units, list) {
4013 		list_del(&atsru->list);
4014 		intel_iommu_free_atsr(atsru);
4015 	}
4016 	list_for_each_entry_safe(satcu, satc_n, &dmar_satc_units, list) {
4017 		list_del(&satcu->list);
4018 		dmar_free_dev_scope(&satcu->devices, &satcu->devices_cnt);
4019 		kfree(satcu);
4020 	}
4021 }
4022 
4023 int dmar_find_matched_atsr_unit(struct pci_dev *dev)
4024 {
4025 	int i, ret = 1;
4026 	struct pci_bus *bus;
4027 	struct pci_dev *bridge = NULL;
4028 	struct device *tmp;
4029 	struct acpi_dmar_atsr *atsr;
4030 	struct dmar_atsr_unit *atsru;
4031 
4032 	dev = pci_physfn(dev);
4033 	for (bus = dev->bus; bus; bus = bus->parent) {
4034 		bridge = bus->self;
4035 		/* If it's an integrated device, allow ATS */
4036 		if (!bridge)
4037 			return 1;
4038 		/* Connected via non-PCIe: no ATS */
4039 		if (!pci_is_pcie(bridge) ||
4040 		    pci_pcie_type(bridge) == PCI_EXP_TYPE_PCI_BRIDGE)
4041 			return 0;
4042 		/* If we found the root port, look it up in the ATSR */
4043 		if (pci_pcie_type(bridge) == PCI_EXP_TYPE_ROOT_PORT)
4044 			break;
4045 	}
4046 
4047 	rcu_read_lock();
4048 	list_for_each_entry_rcu(atsru, &dmar_atsr_units, list) {
4049 		atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
4050 		if (atsr->segment != pci_domain_nr(dev->bus))
4051 			continue;
4052 
4053 		for_each_dev_scope(atsru->devices, atsru->devices_cnt, i, tmp)
4054 			if (tmp == &bridge->dev)
4055 				goto out;
4056 
4057 		if (atsru->include_all)
4058 			goto out;
4059 	}
4060 	ret = 0;
4061 out:
4062 	rcu_read_unlock();
4063 
4064 	return ret;
4065 }
4066 
4067 int dmar_iommu_notify_scope_dev(struct dmar_pci_notify_info *info)
4068 {
4069 	int ret;
4070 	struct dmar_rmrr_unit *rmrru;
4071 	struct dmar_atsr_unit *atsru;
4072 	struct dmar_satc_unit *satcu;
4073 	struct acpi_dmar_atsr *atsr;
4074 	struct acpi_dmar_reserved_memory *rmrr;
4075 	struct acpi_dmar_satc *satc;
4076 
4077 	if (!intel_iommu_enabled && system_state >= SYSTEM_RUNNING)
4078 		return 0;
4079 
4080 	list_for_each_entry(rmrru, &dmar_rmrr_units, list) {
4081 		rmrr = container_of(rmrru->hdr,
4082 				    struct acpi_dmar_reserved_memory, header);
4083 		if (info->event == BUS_NOTIFY_ADD_DEVICE) {
4084 			ret = dmar_insert_dev_scope(info, (void *)(rmrr + 1),
4085 				((void *)rmrr) + rmrr->header.length,
4086 				rmrr->segment, rmrru->devices,
4087 				rmrru->devices_cnt);
4088 			if (ret < 0)
4089 				return ret;
4090 		} else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
4091 			dmar_remove_dev_scope(info, rmrr->segment,
4092 				rmrru->devices, rmrru->devices_cnt);
4093 		}
4094 	}
4095 
4096 	list_for_each_entry(atsru, &dmar_atsr_units, list) {
4097 		if (atsru->include_all)
4098 			continue;
4099 
4100 		atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
4101 		if (info->event == BUS_NOTIFY_ADD_DEVICE) {
4102 			ret = dmar_insert_dev_scope(info, (void *)(atsr + 1),
4103 					(void *)atsr + atsr->header.length,
4104 					atsr->segment, atsru->devices,
4105 					atsru->devices_cnt);
4106 			if (ret > 0)
4107 				break;
4108 			else if (ret < 0)
4109 				return ret;
4110 		} else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
4111 			if (dmar_remove_dev_scope(info, atsr->segment,
4112 					atsru->devices, atsru->devices_cnt))
4113 				break;
4114 		}
4115 	}
4116 	list_for_each_entry(satcu, &dmar_satc_units, list) {
4117 		satc = container_of(satcu->hdr, struct acpi_dmar_satc, header);
4118 		if (info->event == BUS_NOTIFY_ADD_DEVICE) {
4119 			ret = dmar_insert_dev_scope(info, (void *)(satc + 1),
4120 					(void *)satc + satc->header.length,
4121 					satc->segment, satcu->devices,
4122 					satcu->devices_cnt);
4123 			if (ret > 0)
4124 				break;
4125 			else if (ret < 0)
4126 				return ret;
4127 		} else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
4128 			if (dmar_remove_dev_scope(info, satc->segment,
4129 					satcu->devices, satcu->devices_cnt))
4130 				break;
4131 		}
4132 	}
4133 
4134 	return 0;
4135 }
4136 
4137 static int intel_iommu_memory_notifier(struct notifier_block *nb,
4138 				       unsigned long val, void *v)
4139 {
4140 	struct memory_notify *mhp = v;
4141 	unsigned long start_vpfn = mm_to_dma_pfn(mhp->start_pfn);
4142 	unsigned long last_vpfn = mm_to_dma_pfn(mhp->start_pfn +
4143 			mhp->nr_pages - 1);
4144 
4145 	switch (val) {
4146 	case MEM_GOING_ONLINE:
4147 		if (iommu_domain_identity_map(si_domain,
4148 					      start_vpfn, last_vpfn)) {
4149 			pr_warn("Failed to build identity map for [%lx-%lx]\n",
4150 				start_vpfn, last_vpfn);
4151 			return NOTIFY_BAD;
4152 		}
4153 		break;
4154 
4155 	case MEM_OFFLINE:
4156 	case MEM_CANCEL_ONLINE:
4157 		{
4158 			struct dmar_drhd_unit *drhd;
4159 			struct intel_iommu *iommu;
4160 			LIST_HEAD(freelist);
4161 
4162 			domain_unmap(si_domain, start_vpfn, last_vpfn, &freelist);
4163 
4164 			rcu_read_lock();
4165 			for_each_active_iommu(iommu, drhd)
4166 				iommu_flush_iotlb_psi(iommu, si_domain,
4167 					start_vpfn, mhp->nr_pages,
4168 					list_empty(&freelist), 0);
4169 			rcu_read_unlock();
4170 			put_pages_list(&freelist);
4171 		}
4172 		break;
4173 	}
4174 
4175 	return NOTIFY_OK;
4176 }
4177 
4178 static struct notifier_block intel_iommu_memory_nb = {
4179 	.notifier_call = intel_iommu_memory_notifier,
4180 	.priority = 0
4181 };
4182 
4183 static void intel_disable_iommus(void)
4184 {
4185 	struct intel_iommu *iommu = NULL;
4186 	struct dmar_drhd_unit *drhd;
4187 
4188 	for_each_iommu(iommu, drhd)
4189 		iommu_disable_translation(iommu);
4190 }
4191 
4192 void intel_iommu_shutdown(void)
4193 {
4194 	struct dmar_drhd_unit *drhd;
4195 	struct intel_iommu *iommu = NULL;
4196 
4197 	if (no_iommu || dmar_disabled)
4198 		return;
4199 
4200 	down_write(&dmar_global_lock);
4201 
4202 	/* Disable PMRs explicitly here. */
4203 	for_each_iommu(iommu, drhd)
4204 		iommu_disable_protect_mem_regions(iommu);
4205 
4206 	/* Make sure the IOMMUs are switched off */
4207 	intel_disable_iommus();
4208 
4209 	up_write(&dmar_global_lock);
4210 }
4211 
4212 static inline struct intel_iommu *dev_to_intel_iommu(struct device *dev)
4213 {
4214 	struct iommu_device *iommu_dev = dev_to_iommu_device(dev);
4215 
4216 	return container_of(iommu_dev, struct intel_iommu, iommu);
4217 }
4218 
4219 static ssize_t version_show(struct device *dev,
4220 			    struct device_attribute *attr, char *buf)
4221 {
4222 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4223 	u32 ver = readl(iommu->reg + DMAR_VER_REG);
4224 	return sprintf(buf, "%d:%d\n",
4225 		       DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver));
4226 }
4227 static DEVICE_ATTR_RO(version);
4228 
4229 static ssize_t address_show(struct device *dev,
4230 			    struct device_attribute *attr, char *buf)
4231 {
4232 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4233 	return sprintf(buf, "%llx\n", iommu->reg_phys);
4234 }
4235 static DEVICE_ATTR_RO(address);
4236 
4237 static ssize_t cap_show(struct device *dev,
4238 			struct device_attribute *attr, char *buf)
4239 {
4240 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4241 	return sprintf(buf, "%llx\n", iommu->cap);
4242 }
4243 static DEVICE_ATTR_RO(cap);
4244 
4245 static ssize_t ecap_show(struct device *dev,
4246 			 struct device_attribute *attr, char *buf)
4247 {
4248 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4249 	return sprintf(buf, "%llx\n", iommu->ecap);
4250 }
4251 static DEVICE_ATTR_RO(ecap);
4252 
4253 static ssize_t domains_supported_show(struct device *dev,
4254 				      struct device_attribute *attr, char *buf)
4255 {
4256 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4257 	return sprintf(buf, "%ld\n", cap_ndoms(iommu->cap));
4258 }
4259 static DEVICE_ATTR_RO(domains_supported);
4260 
4261 static ssize_t domains_used_show(struct device *dev,
4262 				 struct device_attribute *attr, char *buf)
4263 {
4264 	struct intel_iommu *iommu = dev_to_intel_iommu(dev);
4265 	return sprintf(buf, "%d\n", bitmap_weight(iommu->domain_ids,
4266 						  cap_ndoms(iommu->cap)));
4267 }
4268 static DEVICE_ATTR_RO(domains_used);
4269 
4270 static struct attribute *intel_iommu_attrs[] = {
4271 	&dev_attr_version.attr,
4272 	&dev_attr_address.attr,
4273 	&dev_attr_cap.attr,
4274 	&dev_attr_ecap.attr,
4275 	&dev_attr_domains_supported.attr,
4276 	&dev_attr_domains_used.attr,
4277 	NULL,
4278 };
4279 
4280 static struct attribute_group intel_iommu_group = {
4281 	.name = "intel-iommu",
4282 	.attrs = intel_iommu_attrs,
4283 };
4284 
4285 const struct attribute_group *intel_iommu_groups[] = {
4286 	&intel_iommu_group,
4287 	NULL,
4288 };
4289 
4290 static inline bool has_external_pci(void)
4291 {
4292 	struct pci_dev *pdev = NULL;
4293 
4294 	for_each_pci_dev(pdev)
4295 		if (pdev->external_facing)
4296 			return true;
4297 
4298 	return false;
4299 }
4300 
4301 static int __init platform_optin_force_iommu(void)
4302 {
4303 	if (!dmar_platform_optin() || no_platform_optin || !has_external_pci())
4304 		return 0;
4305 
4306 	if (no_iommu || dmar_disabled)
4307 		pr_info("Intel-IOMMU force enabled due to platform opt in\n");
4308 
4309 	/*
4310 	 * If Intel-IOMMU is disabled by default, we will apply identity
4311 	 * map for all devices except those marked as being untrusted.
4312 	 */
4313 	if (dmar_disabled)
4314 		iommu_set_default_passthrough(false);
4315 
4316 	dmar_disabled = 0;
4317 	no_iommu = 0;
4318 
4319 	return 1;
4320 }
4321 
4322 static int __init probe_acpi_namespace_devices(void)
4323 {
4324 	struct dmar_drhd_unit *drhd;
4325 	/* To avoid a -Wunused-but-set-variable warning. */
4326 	struct intel_iommu *iommu __maybe_unused;
4327 	struct device *dev;
4328 	int i, ret = 0;
4329 
4330 	for_each_active_iommu(iommu, drhd) {
4331 		for_each_active_dev_scope(drhd->devices,
4332 					  drhd->devices_cnt, i, dev) {
4333 			struct acpi_device_physical_node *pn;
4334 			struct iommu_group *group;
4335 			struct acpi_device *adev;
4336 
4337 			if (dev->bus != &acpi_bus_type)
4338 				continue;
4339 
4340 			adev = to_acpi_device(dev);
4341 			mutex_lock(&adev->physical_node_lock);
4342 			list_for_each_entry(pn,
4343 					    &adev->physical_node_list, node) {
4344 				group = iommu_group_get(pn->dev);
4345 				if (group) {
4346 					iommu_group_put(group);
4347 					continue;
4348 				}
4349 
4350 				pn->dev->bus->iommu_ops = &intel_iommu_ops;
4351 				ret = iommu_probe_device(pn->dev);
4352 				if (ret)
4353 					break;
4354 			}
4355 			mutex_unlock(&adev->physical_node_lock);
4356 
4357 			if (ret)
4358 				return ret;
4359 		}
4360 	}
4361 
4362 	return 0;
4363 }
4364 
4365 int __init intel_iommu_init(void)
4366 {
4367 	int ret = -ENODEV;
4368 	struct dmar_drhd_unit *drhd;
4369 	struct intel_iommu *iommu;
4370 
4371 	/*
4372 	 * Intel IOMMU is required for a TXT/tboot launch or platform
4373 	 * opt in, so enforce that.
4374 	 */
4375 	force_on = (!intel_iommu_tboot_noforce && tboot_force_iommu()) ||
4376 		    platform_optin_force_iommu();
4377 
4378 	if (iommu_init_mempool()) {
4379 		if (force_on)
4380 			panic("tboot: Failed to initialize iommu memory\n");
4381 		return -ENOMEM;
4382 	}
4383 
4384 	down_write(&dmar_global_lock);
4385 	if (dmar_table_init()) {
4386 		if (force_on)
4387 			panic("tboot: Failed to initialize DMAR table\n");
4388 		goto out_free_dmar;
4389 	}
4390 
4391 	if (dmar_dev_scope_init() < 0) {
4392 		if (force_on)
4393 			panic("tboot: Failed to initialize DMAR device scope\n");
4394 		goto out_free_dmar;
4395 	}
4396 
4397 	up_write(&dmar_global_lock);
4398 
4399 	/*
4400 	 * The bus notifier takes the dmar_global_lock, so lockdep will
4401 	 * complain later when we register it under the lock.
4402 	 */
4403 	dmar_register_bus_notifier();
4404 
4405 	down_write(&dmar_global_lock);
4406 
4407 	if (!no_iommu)
4408 		intel_iommu_debugfs_init();
4409 
4410 	if (no_iommu || dmar_disabled) {
4411 		/*
4412 		 * We exit the function here to ensure IOMMU's remapping and
4413 		 * mempool aren't setup, which means that the IOMMU's PMRs
4414 		 * won't be disabled via the call to init_dmars(). So disable
4415 		 * it explicitly here. The PMRs were setup by tboot prior to
4416 		 * calling SENTER, but the kernel is expected to reset/tear
4417 		 * down the PMRs.
4418 		 */
4419 		if (intel_iommu_tboot_noforce) {
4420 			for_each_iommu(iommu, drhd)
4421 				iommu_disable_protect_mem_regions(iommu);
4422 		}
4423 
4424 		/*
4425 		 * Make sure the IOMMUs are switched off, even when we
4426 		 * boot into a kexec kernel and the previous kernel left
4427 		 * them enabled
4428 		 */
4429 		intel_disable_iommus();
4430 		goto out_free_dmar;
4431 	}
4432 
4433 	if (list_empty(&dmar_rmrr_units))
4434 		pr_info("No RMRR found\n");
4435 
4436 	if (list_empty(&dmar_atsr_units))
4437 		pr_info("No ATSR found\n");
4438 
4439 	if (list_empty(&dmar_satc_units))
4440 		pr_info("No SATC found\n");
4441 
4442 	if (dmar_map_gfx)
4443 		intel_iommu_gfx_mapped = 1;
4444 
4445 	init_no_remapping_devices();
4446 
4447 	ret = init_dmars();
4448 	if (ret) {
4449 		if (force_on)
4450 			panic("tboot: Failed to initialize DMARs\n");
4451 		pr_err("Initialization failed\n");
4452 		goto out_free_dmar;
4453 	}
4454 	up_write(&dmar_global_lock);
4455 
4456 	init_iommu_pm_ops();
4457 
4458 	down_read(&dmar_global_lock);
4459 	for_each_active_iommu(iommu, drhd) {
4460 		/*
4461 		 * The flush queue implementation does not perform
4462 		 * page-selective invalidations that are required for efficient
4463 		 * TLB flushes in virtual environments.  The benefit of batching
4464 		 * is likely to be much lower than the overhead of synchronizing
4465 		 * the virtual and physical IOMMU page-tables.
4466 		 */
4467 		if (cap_caching_mode(iommu->cap)) {
4468 			pr_info_once("IOMMU batching disallowed due to virtualization\n");
4469 			iommu_set_dma_strict();
4470 		}
4471 		iommu_device_sysfs_add(&iommu->iommu, NULL,
4472 				       intel_iommu_groups,
4473 				       "%s", iommu->name);
4474 		iommu_device_register(&iommu->iommu, &intel_iommu_ops, NULL);
4475 	}
4476 	up_read(&dmar_global_lock);
4477 
4478 	bus_set_iommu(&pci_bus_type, &intel_iommu_ops);
4479 	if (si_domain && !hw_pass_through)
4480 		register_memory_notifier(&intel_iommu_memory_nb);
4481 
4482 	down_read(&dmar_global_lock);
4483 	if (probe_acpi_namespace_devices())
4484 		pr_warn("ACPI name space devices didn't probe correctly\n");
4485 
4486 	/* Finally, we enable the DMA remapping hardware. */
4487 	for_each_iommu(iommu, drhd) {
4488 		if (!drhd->ignored && !translation_pre_enabled(iommu))
4489 			iommu_enable_translation(iommu);
4490 
4491 		iommu_disable_protect_mem_regions(iommu);
4492 	}
4493 	up_read(&dmar_global_lock);
4494 
4495 	pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
4496 
4497 	intel_iommu_enabled = 1;
4498 
4499 	return 0;
4500 
4501 out_free_dmar:
4502 	intel_iommu_free_dmars();
4503 	up_write(&dmar_global_lock);
4504 	iommu_exit_mempool();
4505 	return ret;
4506 }
4507 
4508 static int domain_context_clear_one_cb(struct pci_dev *pdev, u16 alias, void *opaque)
4509 {
4510 	struct device_domain_info *info = opaque;
4511 
4512 	domain_context_clear_one(info, PCI_BUS_NUM(alias), alias & 0xff);
4513 	return 0;
4514 }
4515 
4516 /*
4517  * NB - intel-iommu lacks any sort of reference counting for the users of
4518  * dependent devices.  If multiple endpoints have intersecting dependent
4519  * devices, unbinding the driver from any one of them will possibly leave
4520  * the others unable to operate.
4521  */
4522 static void domain_context_clear(struct device_domain_info *info)
4523 {
4524 	if (!info->iommu || !info->dev || !dev_is_pci(info->dev))
4525 		return;
4526 
4527 	pci_for_each_dma_alias(to_pci_dev(info->dev),
4528 			       &domain_context_clear_one_cb, info);
4529 }
4530 
4531 static void __dmar_remove_one_dev_info(struct device_domain_info *info)
4532 {
4533 	struct dmar_domain *domain;
4534 	struct intel_iommu *iommu;
4535 	unsigned long flags;
4536 
4537 	assert_spin_locked(&device_domain_lock);
4538 
4539 	if (WARN_ON(!info))
4540 		return;
4541 
4542 	iommu = info->iommu;
4543 	domain = info->domain;
4544 
4545 	if (info->dev && !dev_is_real_dma_subdevice(info->dev)) {
4546 		if (dev_is_pci(info->dev) && sm_supported(iommu))
4547 			intel_pasid_tear_down_entry(iommu, info->dev,
4548 					PASID_RID2PASID, false);
4549 
4550 		iommu_disable_dev_iotlb(info);
4551 		domain_context_clear(info);
4552 		intel_pasid_free_table(info->dev);
4553 	}
4554 
4555 	unlink_domain_info(info);
4556 
4557 	spin_lock_irqsave(&iommu->lock, flags);
4558 	domain_detach_iommu(domain, iommu);
4559 	spin_unlock_irqrestore(&iommu->lock, flags);
4560 
4561 	free_devinfo_mem(info);
4562 }
4563 
4564 static void dmar_remove_one_dev_info(struct device *dev)
4565 {
4566 	struct device_domain_info *info;
4567 	unsigned long flags;
4568 
4569 	spin_lock_irqsave(&device_domain_lock, flags);
4570 	info = get_domain_info(dev);
4571 	if (info)
4572 		__dmar_remove_one_dev_info(info);
4573 	spin_unlock_irqrestore(&device_domain_lock, flags);
4574 }
4575 
4576 static int md_domain_init(struct dmar_domain *domain, int guest_width)
4577 {
4578 	int adjust_width;
4579 
4580 	/* calculate AGAW */
4581 	domain->gaw = guest_width;
4582 	adjust_width = guestwidth_to_adjustwidth(guest_width);
4583 	domain->agaw = width_to_agaw(adjust_width);
4584 
4585 	domain->iommu_coherency = false;
4586 	domain->iommu_snooping = false;
4587 	domain->iommu_superpage = 0;
4588 	domain->max_addr = 0;
4589 
4590 	/* always allocate the top pgd */
4591 	domain->pgd = alloc_pgtable_page(domain->nid);
4592 	if (!domain->pgd)
4593 		return -ENOMEM;
4594 	domain_flush_cache(domain, domain->pgd, PAGE_SIZE);
4595 	return 0;
4596 }
4597 
4598 static struct iommu_domain *intel_iommu_domain_alloc(unsigned type)
4599 {
4600 	struct dmar_domain *dmar_domain;
4601 	struct iommu_domain *domain;
4602 
4603 	switch (type) {
4604 	case IOMMU_DOMAIN_DMA:
4605 	case IOMMU_DOMAIN_DMA_FQ:
4606 	case IOMMU_DOMAIN_UNMANAGED:
4607 		dmar_domain = alloc_domain(type);
4608 		if (!dmar_domain) {
4609 			pr_err("Can't allocate dmar_domain\n");
4610 			return NULL;
4611 		}
4612 		if (md_domain_init(dmar_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
4613 			pr_err("Domain initialization failed\n");
4614 			domain_exit(dmar_domain);
4615 			return NULL;
4616 		}
4617 
4618 		domain = &dmar_domain->domain;
4619 		domain->geometry.aperture_start = 0;
4620 		domain->geometry.aperture_end   =
4621 				__DOMAIN_MAX_ADDR(dmar_domain->gaw);
4622 		domain->geometry.force_aperture = true;
4623 
4624 		return domain;
4625 	case IOMMU_DOMAIN_IDENTITY:
4626 		return &si_domain->domain;
4627 	default:
4628 		return NULL;
4629 	}
4630 
4631 	return NULL;
4632 }
4633 
4634 static void intel_iommu_domain_free(struct iommu_domain *domain)
4635 {
4636 	if (domain != &si_domain->domain)
4637 		domain_exit(to_dmar_domain(domain));
4638 }
4639 
4640 /*
4641  * Check whether a @domain could be attached to the @dev through the
4642  * aux-domain attach/detach APIs.
4643  */
4644 static inline bool
4645 is_aux_domain(struct device *dev, struct iommu_domain *domain)
4646 {
4647 	struct device_domain_info *info = get_domain_info(dev);
4648 
4649 	return info && info->auxd_enabled &&
4650 			domain->type == IOMMU_DOMAIN_UNMANAGED;
4651 }
4652 
4653 static inline struct subdev_domain_info *
4654 lookup_subdev_info(struct dmar_domain *domain, struct device *dev)
4655 {
4656 	struct subdev_domain_info *sinfo;
4657 
4658 	if (!list_empty(&domain->subdevices)) {
4659 		list_for_each_entry(sinfo, &domain->subdevices, link_domain) {
4660 			if (sinfo->pdev == dev)
4661 				return sinfo;
4662 		}
4663 	}
4664 
4665 	return NULL;
4666 }
4667 
4668 static int auxiliary_link_device(struct dmar_domain *domain,
4669 				 struct device *dev)
4670 {
4671 	struct device_domain_info *info = get_domain_info(dev);
4672 	struct subdev_domain_info *sinfo = lookup_subdev_info(domain, dev);
4673 
4674 	assert_spin_locked(&device_domain_lock);
4675 	if (WARN_ON(!info))
4676 		return -EINVAL;
4677 
4678 	if (!sinfo) {
4679 		sinfo = kzalloc(sizeof(*sinfo), GFP_ATOMIC);
4680 		if (!sinfo)
4681 			return -ENOMEM;
4682 		sinfo->domain = domain;
4683 		sinfo->pdev = dev;
4684 		list_add(&sinfo->link_phys, &info->subdevices);
4685 		list_add(&sinfo->link_domain, &domain->subdevices);
4686 	}
4687 
4688 	return ++sinfo->users;
4689 }
4690 
4691 static int auxiliary_unlink_device(struct dmar_domain *domain,
4692 				   struct device *dev)
4693 {
4694 	struct device_domain_info *info = get_domain_info(dev);
4695 	struct subdev_domain_info *sinfo = lookup_subdev_info(domain, dev);
4696 	int ret;
4697 
4698 	assert_spin_locked(&device_domain_lock);
4699 	if (WARN_ON(!info || !sinfo || sinfo->users <= 0))
4700 		return -EINVAL;
4701 
4702 	ret = --sinfo->users;
4703 	if (!ret) {
4704 		list_del(&sinfo->link_phys);
4705 		list_del(&sinfo->link_domain);
4706 		kfree(sinfo);
4707 	}
4708 
4709 	return ret;
4710 }
4711 
4712 static int aux_domain_add_dev(struct dmar_domain *domain,
4713 			      struct device *dev)
4714 {
4715 	int ret;
4716 	unsigned long flags;
4717 	struct intel_iommu *iommu;
4718 
4719 	iommu = device_to_iommu(dev, NULL, NULL);
4720 	if (!iommu)
4721 		return -ENODEV;
4722 
4723 	if (domain->default_pasid <= 0) {
4724 		u32 pasid;
4725 
4726 		/* No private data needed for the default pasid */
4727 		pasid = ioasid_alloc(NULL, PASID_MIN,
4728 				     pci_max_pasids(to_pci_dev(dev)) - 1,
4729 				     NULL);
4730 		if (pasid == INVALID_IOASID) {
4731 			pr_err("Can't allocate default pasid\n");
4732 			return -ENODEV;
4733 		}
4734 		domain->default_pasid = pasid;
4735 	}
4736 
4737 	spin_lock_irqsave(&device_domain_lock, flags);
4738 	ret = auxiliary_link_device(domain, dev);
4739 	if (ret <= 0)
4740 		goto link_failed;
4741 
4742 	/*
4743 	 * Subdevices from the same physical device can be attached to the
4744 	 * same domain. For such cases, only the first subdevice attachment
4745 	 * needs to go through the full steps in this function. So if ret >
4746 	 * 1, just goto out.
4747 	 */
4748 	if (ret > 1)
4749 		goto out;
4750 
4751 	/*
4752 	 * iommu->lock must be held to attach domain to iommu and setup the
4753 	 * pasid entry for second level translation.
4754 	 */
4755 	spin_lock(&iommu->lock);
4756 	ret = domain_attach_iommu(domain, iommu);
4757 	if (ret)
4758 		goto attach_failed;
4759 
4760 	/* Setup the PASID entry for mediated devices: */
4761 	if (domain_use_first_level(domain))
4762 		ret = domain_setup_first_level(iommu, domain, dev,
4763 					       domain->default_pasid);
4764 	else
4765 		ret = intel_pasid_setup_second_level(iommu, domain, dev,
4766 						     domain->default_pasid);
4767 	if (ret)
4768 		goto table_failed;
4769 
4770 	spin_unlock(&iommu->lock);
4771 out:
4772 	spin_unlock_irqrestore(&device_domain_lock, flags);
4773 
4774 	return 0;
4775 
4776 table_failed:
4777 	domain_detach_iommu(domain, iommu);
4778 attach_failed:
4779 	spin_unlock(&iommu->lock);
4780 	auxiliary_unlink_device(domain, dev);
4781 link_failed:
4782 	spin_unlock_irqrestore(&device_domain_lock, flags);
4783 	if (list_empty(&domain->subdevices) && domain->default_pasid > 0)
4784 		ioasid_put(domain->default_pasid);
4785 
4786 	return ret;
4787 }
4788 
4789 static void aux_domain_remove_dev(struct dmar_domain *domain,
4790 				  struct device *dev)
4791 {
4792 	struct device_domain_info *info;
4793 	struct intel_iommu *iommu;
4794 	unsigned long flags;
4795 
4796 	if (!is_aux_domain(dev, &domain->domain))
4797 		return;
4798 
4799 	spin_lock_irqsave(&device_domain_lock, flags);
4800 	info = get_domain_info(dev);
4801 	iommu = info->iommu;
4802 
4803 	if (!auxiliary_unlink_device(domain, dev)) {
4804 		spin_lock(&iommu->lock);
4805 		intel_pasid_tear_down_entry(iommu, dev,
4806 					    domain->default_pasid, false);
4807 		domain_detach_iommu(domain, iommu);
4808 		spin_unlock(&iommu->lock);
4809 	}
4810 
4811 	spin_unlock_irqrestore(&device_domain_lock, flags);
4812 
4813 	if (list_empty(&domain->subdevices) && domain->default_pasid > 0)
4814 		ioasid_put(domain->default_pasid);
4815 }
4816 
4817 static int prepare_domain_attach_device(struct iommu_domain *domain,
4818 					struct device *dev)
4819 {
4820 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4821 	struct intel_iommu *iommu;
4822 	int addr_width;
4823 
4824 	iommu = device_to_iommu(dev, NULL, NULL);
4825 	if (!iommu)
4826 		return -ENODEV;
4827 
4828 	if ((dmar_domain->flags & DOMAIN_FLAG_NESTING_MODE) &&
4829 	    !ecap_nest(iommu->ecap)) {
4830 		dev_err(dev, "%s: iommu not support nested translation\n",
4831 			iommu->name);
4832 		return -EINVAL;
4833 	}
4834 
4835 	/* check if this iommu agaw is sufficient for max mapped address */
4836 	addr_width = agaw_to_width(iommu->agaw);
4837 	if (addr_width > cap_mgaw(iommu->cap))
4838 		addr_width = cap_mgaw(iommu->cap);
4839 
4840 	if (dmar_domain->max_addr > (1LL << addr_width)) {
4841 		dev_err(dev, "%s: iommu width (%d) is not "
4842 		        "sufficient for the mapped address (%llx)\n",
4843 		        __func__, addr_width, dmar_domain->max_addr);
4844 		return -EFAULT;
4845 	}
4846 	dmar_domain->gaw = addr_width;
4847 
4848 	/*
4849 	 * Knock out extra levels of page tables if necessary
4850 	 */
4851 	while (iommu->agaw < dmar_domain->agaw) {
4852 		struct dma_pte *pte;
4853 
4854 		pte = dmar_domain->pgd;
4855 		if (dma_pte_present(pte)) {
4856 			dmar_domain->pgd = phys_to_virt(dma_pte_addr(pte));
4857 			free_pgtable_page(pte);
4858 		}
4859 		dmar_domain->agaw--;
4860 	}
4861 
4862 	return 0;
4863 }
4864 
4865 static int intel_iommu_attach_device(struct iommu_domain *domain,
4866 				     struct device *dev)
4867 {
4868 	int ret;
4869 
4870 	if (domain->type == IOMMU_DOMAIN_UNMANAGED &&
4871 	    device_is_rmrr_locked(dev)) {
4872 		dev_warn(dev, "Device is ineligible for IOMMU domain attach due to platform RMRR requirement.  Contact your platform vendor.\n");
4873 		return -EPERM;
4874 	}
4875 
4876 	if (is_aux_domain(dev, domain))
4877 		return -EPERM;
4878 
4879 	/* normally dev is not mapped */
4880 	if (unlikely(domain_context_mapped(dev))) {
4881 		struct dmar_domain *old_domain;
4882 
4883 		old_domain = find_domain(dev);
4884 		if (old_domain)
4885 			dmar_remove_one_dev_info(dev);
4886 	}
4887 
4888 	ret = prepare_domain_attach_device(domain, dev);
4889 	if (ret)
4890 		return ret;
4891 
4892 	return domain_add_dev_info(to_dmar_domain(domain), dev);
4893 }
4894 
4895 static int intel_iommu_aux_attach_device(struct iommu_domain *domain,
4896 					 struct device *dev)
4897 {
4898 	int ret;
4899 
4900 	if (!is_aux_domain(dev, domain))
4901 		return -EPERM;
4902 
4903 	ret = prepare_domain_attach_device(domain, dev);
4904 	if (ret)
4905 		return ret;
4906 
4907 	return aux_domain_add_dev(to_dmar_domain(domain), dev);
4908 }
4909 
4910 static void intel_iommu_detach_device(struct iommu_domain *domain,
4911 				      struct device *dev)
4912 {
4913 	dmar_remove_one_dev_info(dev);
4914 }
4915 
4916 static void intel_iommu_aux_detach_device(struct iommu_domain *domain,
4917 					  struct device *dev)
4918 {
4919 	aux_domain_remove_dev(to_dmar_domain(domain), dev);
4920 }
4921 
4922 #ifdef CONFIG_INTEL_IOMMU_SVM
4923 /*
4924  * 2D array for converting and sanitizing IOMMU generic TLB granularity to
4925  * VT-d granularity. Invalidation is typically included in the unmap operation
4926  * as a result of DMA or VFIO unmap. However, for assigned devices guest
4927  * owns the first level page tables. Invalidations of translation caches in the
4928  * guest are trapped and passed down to the host.
4929  *
4930  * vIOMMU in the guest will only expose first level page tables, therefore
4931  * we do not support IOTLB granularity for request without PASID (second level).
4932  *
4933  * For example, to find the VT-d granularity encoding for IOTLB
4934  * type and page selective granularity within PASID:
4935  * X: indexed by iommu cache type
4936  * Y: indexed by enum iommu_inv_granularity
4937  * [IOMMU_CACHE_INV_TYPE_IOTLB][IOMMU_INV_GRANU_ADDR]
4938  */
4939 
4940 static const int
4941 inv_type_granu_table[IOMMU_CACHE_INV_TYPE_NR][IOMMU_INV_GRANU_NR] = {
4942 	/*
4943 	 * PASID based IOTLB invalidation: PASID selective (per PASID),
4944 	 * page selective (address granularity)
4945 	 */
4946 	{-EINVAL, QI_GRAN_NONG_PASID, QI_GRAN_PSI_PASID},
4947 	/* PASID based dev TLBs */
4948 	{-EINVAL, -EINVAL, QI_DEV_IOTLB_GRAN_PASID_SEL},
4949 	/* PASID cache */
4950 	{-EINVAL, -EINVAL, -EINVAL}
4951 };
4952 
4953 static inline int to_vtd_granularity(int type, int granu)
4954 {
4955 	return inv_type_granu_table[type][granu];
4956 }
4957 
4958 static inline u64 to_vtd_size(u64 granu_size, u64 nr_granules)
4959 {
4960 	u64 nr_pages = (granu_size * nr_granules) >> VTD_PAGE_SHIFT;
4961 
4962 	/* VT-d size is encoded as 2^size of 4K pages, 0 for 4k, 9 for 2MB, etc.
4963 	 * IOMMU cache invalidate API passes granu_size in bytes, and number of
4964 	 * granu size in contiguous memory.
4965 	 */
4966 	return order_base_2(nr_pages);
4967 }
4968 
4969 static int
4970 intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev,
4971 			   struct iommu_cache_invalidate_info *inv_info)
4972 {
4973 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4974 	struct device_domain_info *info;
4975 	struct intel_iommu *iommu;
4976 	unsigned long flags;
4977 	int cache_type;
4978 	u8 bus, devfn;
4979 	u16 did, sid;
4980 	int ret = 0;
4981 	u64 size = 0;
4982 
4983 	if (!inv_info || !dmar_domain)
4984 		return -EINVAL;
4985 
4986 	if (!dev || !dev_is_pci(dev))
4987 		return -ENODEV;
4988 
4989 	iommu = device_to_iommu(dev, &bus, &devfn);
4990 	if (!iommu)
4991 		return -ENODEV;
4992 
4993 	if (!(dmar_domain->flags & DOMAIN_FLAG_NESTING_MODE))
4994 		return -EINVAL;
4995 
4996 	spin_lock_irqsave(&device_domain_lock, flags);
4997 	spin_lock(&iommu->lock);
4998 	info = get_domain_info(dev);
4999 	if (!info) {
5000 		ret = -EINVAL;
5001 		goto out_unlock;
5002 	}
5003 	did = dmar_domain->iommu_did[iommu->seq_id];
5004 	sid = PCI_DEVID(bus, devfn);
5005 
5006 	/* Size is only valid in address selective invalidation */
5007 	if (inv_info->granularity == IOMMU_INV_GRANU_ADDR)
5008 		size = to_vtd_size(inv_info->granu.addr_info.granule_size,
5009 				   inv_info->granu.addr_info.nb_granules);
5010 
5011 	for_each_set_bit(cache_type,
5012 			 (unsigned long *)&inv_info->cache,
5013 			 IOMMU_CACHE_INV_TYPE_NR) {
5014 		int granu = 0;
5015 		u64 pasid = 0;
5016 		u64 addr = 0;
5017 
5018 		granu = to_vtd_granularity(cache_type, inv_info->granularity);
5019 		if (granu == -EINVAL) {
5020 			pr_err_ratelimited("Invalid cache type and granu combination %d/%d\n",
5021 					   cache_type, inv_info->granularity);
5022 			break;
5023 		}
5024 
5025 		/*
5026 		 * PASID is stored in different locations based on the
5027 		 * granularity.
5028 		 */
5029 		if (inv_info->granularity == IOMMU_INV_GRANU_PASID &&
5030 		    (inv_info->granu.pasid_info.flags & IOMMU_INV_PASID_FLAGS_PASID))
5031 			pasid = inv_info->granu.pasid_info.pasid;
5032 		else if (inv_info->granularity == IOMMU_INV_GRANU_ADDR &&
5033 			 (inv_info->granu.addr_info.flags & IOMMU_INV_ADDR_FLAGS_PASID))
5034 			pasid = inv_info->granu.addr_info.pasid;
5035 
5036 		switch (BIT(cache_type)) {
5037 		case IOMMU_CACHE_INV_TYPE_IOTLB:
5038 			/* HW will ignore LSB bits based on address mask */
5039 			if (inv_info->granularity == IOMMU_INV_GRANU_ADDR &&
5040 			    size &&
5041 			    (inv_info->granu.addr_info.addr & ((BIT(VTD_PAGE_SHIFT + size)) - 1))) {
5042 				pr_err_ratelimited("User address not aligned, 0x%llx, size order %llu\n",
5043 						   inv_info->granu.addr_info.addr, size);
5044 			}
5045 
5046 			/*
5047 			 * If granu is PASID-selective, address is ignored.
5048 			 * We use npages = -1 to indicate that.
5049 			 */
5050 			qi_flush_piotlb(iommu, did, pasid,
5051 					mm_to_dma_pfn(inv_info->granu.addr_info.addr),
5052 					(granu == QI_GRAN_NONG_PASID) ? -1 : 1 << size,
5053 					inv_info->granu.addr_info.flags & IOMMU_INV_ADDR_FLAGS_LEAF);
5054 
5055 			if (!info->ats_enabled)
5056 				break;
5057 			/*
5058 			 * Always flush device IOTLB if ATS is enabled. vIOMMU
5059 			 * in the guest may assume IOTLB flush is inclusive,
5060 			 * which is more efficient.
5061 			 */
5062 			fallthrough;
5063 		case IOMMU_CACHE_INV_TYPE_DEV_IOTLB:
5064 			/*
5065 			 * PASID based device TLB invalidation does not support
5066 			 * IOMMU_INV_GRANU_PASID granularity but only supports
5067 			 * IOMMU_INV_GRANU_ADDR.
5068 			 * The equivalent of that is we set the size to be the
5069 			 * entire range of 64 bit. User only provides PASID info
5070 			 * without address info. So we set addr to 0.
5071 			 */
5072 			if (inv_info->granularity == IOMMU_INV_GRANU_PASID) {
5073 				size = 64 - VTD_PAGE_SHIFT;
5074 				addr = 0;
5075 			} else if (inv_info->granularity == IOMMU_INV_GRANU_ADDR) {
5076 				addr = inv_info->granu.addr_info.addr;
5077 			}
5078 
5079 			if (info->ats_enabled)
5080 				qi_flush_dev_iotlb_pasid(iommu, sid,
5081 						info->pfsid, pasid,
5082 						info->ats_qdep, addr,
5083 						size);
5084 			else
5085 				pr_warn_ratelimited("Passdown device IOTLB flush w/o ATS!\n");
5086 			break;
5087 		default:
5088 			dev_err_ratelimited(dev, "Unsupported IOMMU invalidation type %d\n",
5089 					    cache_type);
5090 			ret = -EINVAL;
5091 		}
5092 	}
5093 out_unlock:
5094 	spin_unlock(&iommu->lock);
5095 	spin_unlock_irqrestore(&device_domain_lock, flags);
5096 
5097 	return ret;
5098 }
5099 #endif
5100 
5101 static int intel_iommu_map(struct iommu_domain *domain,
5102 			   unsigned long iova, phys_addr_t hpa,
5103 			   size_t size, int iommu_prot, gfp_t gfp)
5104 {
5105 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5106 	u64 max_addr;
5107 	int prot = 0;
5108 
5109 	if (iommu_prot & IOMMU_READ)
5110 		prot |= DMA_PTE_READ;
5111 	if (iommu_prot & IOMMU_WRITE)
5112 		prot |= DMA_PTE_WRITE;
5113 	if ((iommu_prot & IOMMU_CACHE) && dmar_domain->iommu_snooping)
5114 		prot |= DMA_PTE_SNP;
5115 
5116 	max_addr = iova + size;
5117 	if (dmar_domain->max_addr < max_addr) {
5118 		u64 end;
5119 
5120 		/* check if minimum agaw is sufficient for mapped address */
5121 		end = __DOMAIN_MAX_ADDR(dmar_domain->gaw) + 1;
5122 		if (end < max_addr) {
5123 			pr_err("%s: iommu width (%d) is not "
5124 			       "sufficient for the mapped address (%llx)\n",
5125 			       __func__, dmar_domain->gaw, max_addr);
5126 			return -EFAULT;
5127 		}
5128 		dmar_domain->max_addr = max_addr;
5129 	}
5130 	/* Round up size to next multiple of PAGE_SIZE, if it and
5131 	   the low bits of hpa would take us onto the next page */
5132 	size = aligned_nrpages(hpa, size);
5133 	return __domain_mapping(dmar_domain, iova >> VTD_PAGE_SHIFT,
5134 				hpa >> VTD_PAGE_SHIFT, size, prot);
5135 }
5136 
5137 static int intel_iommu_map_pages(struct iommu_domain *domain,
5138 				 unsigned long iova, phys_addr_t paddr,
5139 				 size_t pgsize, size_t pgcount,
5140 				 int prot, gfp_t gfp, size_t *mapped)
5141 {
5142 	unsigned long pgshift = __ffs(pgsize);
5143 	size_t size = pgcount << pgshift;
5144 	int ret;
5145 
5146 	if (pgsize != SZ_4K && pgsize != SZ_2M && pgsize != SZ_1G)
5147 		return -EINVAL;
5148 
5149 	if (!IS_ALIGNED(iova | paddr, pgsize))
5150 		return -EINVAL;
5151 
5152 	ret = intel_iommu_map(domain, iova, paddr, size, prot, gfp);
5153 	if (!ret && mapped)
5154 		*mapped = size;
5155 
5156 	return ret;
5157 }
5158 
5159 static size_t intel_iommu_unmap(struct iommu_domain *domain,
5160 				unsigned long iova, size_t size,
5161 				struct iommu_iotlb_gather *gather)
5162 {
5163 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5164 	unsigned long start_pfn, last_pfn;
5165 	int level = 0;
5166 
5167 	/* Cope with horrid API which requires us to unmap more than the
5168 	   size argument if it happens to be a large-page mapping. */
5169 	BUG_ON(!pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level));
5170 
5171 	if (size < VTD_PAGE_SIZE << level_to_offset_bits(level))
5172 		size = VTD_PAGE_SIZE << level_to_offset_bits(level);
5173 
5174 	start_pfn = iova >> VTD_PAGE_SHIFT;
5175 	last_pfn = (iova + size - 1) >> VTD_PAGE_SHIFT;
5176 
5177 	domain_unmap(dmar_domain, start_pfn, last_pfn, &gather->freelist);
5178 
5179 	if (dmar_domain->max_addr == iova + size)
5180 		dmar_domain->max_addr = iova;
5181 
5182 	iommu_iotlb_gather_add_page(domain, gather, iova, size);
5183 
5184 	return size;
5185 }
5186 
5187 static size_t intel_iommu_unmap_pages(struct iommu_domain *domain,
5188 				      unsigned long iova,
5189 				      size_t pgsize, size_t pgcount,
5190 				      struct iommu_iotlb_gather *gather)
5191 {
5192 	unsigned long pgshift = __ffs(pgsize);
5193 	size_t size = pgcount << pgshift;
5194 
5195 	return intel_iommu_unmap(domain, iova, size, gather);
5196 }
5197 
5198 static void intel_iommu_tlb_sync(struct iommu_domain *domain,
5199 				 struct iommu_iotlb_gather *gather)
5200 {
5201 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5202 	unsigned long iova_pfn = IOVA_PFN(gather->start);
5203 	size_t size = gather->end - gather->start;
5204 	unsigned long start_pfn;
5205 	unsigned long nrpages;
5206 	int iommu_id;
5207 
5208 	nrpages = aligned_nrpages(gather->start, size);
5209 	start_pfn = mm_to_dma_pfn(iova_pfn);
5210 
5211 	for_each_domain_iommu(iommu_id, dmar_domain)
5212 		iommu_flush_iotlb_psi(g_iommus[iommu_id], dmar_domain,
5213 				      start_pfn, nrpages,
5214 				      list_empty(&gather->freelist), 0);
5215 
5216 	put_pages_list(&gather->freelist);
5217 }
5218 
5219 static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,
5220 					    dma_addr_t iova)
5221 {
5222 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5223 	struct dma_pte *pte;
5224 	int level = 0;
5225 	u64 phys = 0;
5226 
5227 	pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level);
5228 	if (pte && dma_pte_present(pte))
5229 		phys = dma_pte_addr(pte) +
5230 			(iova & (BIT_MASK(level_to_offset_bits(level) +
5231 						VTD_PAGE_SHIFT) - 1));
5232 
5233 	return phys;
5234 }
5235 
5236 static bool intel_iommu_capable(enum iommu_cap cap)
5237 {
5238 	if (cap == IOMMU_CAP_CACHE_COHERENCY)
5239 		return domain_update_iommu_snooping(NULL);
5240 	if (cap == IOMMU_CAP_INTR_REMAP)
5241 		return irq_remapping_enabled == 1;
5242 
5243 	return false;
5244 }
5245 
5246 static struct iommu_device *intel_iommu_probe_device(struct device *dev)
5247 {
5248 	struct intel_iommu *iommu;
5249 
5250 	iommu = device_to_iommu(dev, NULL, NULL);
5251 	if (!iommu)
5252 		return ERR_PTR(-ENODEV);
5253 
5254 	if (translation_pre_enabled(iommu))
5255 		dev_iommu_priv_set(dev, DEFER_DEVICE_DOMAIN_INFO);
5256 
5257 	return &iommu->iommu;
5258 }
5259 
5260 static void intel_iommu_release_device(struct device *dev)
5261 {
5262 	struct intel_iommu *iommu;
5263 
5264 	iommu = device_to_iommu(dev, NULL, NULL);
5265 	if (!iommu)
5266 		return;
5267 
5268 	dmar_remove_one_dev_info(dev);
5269 
5270 	set_dma_ops(dev, NULL);
5271 }
5272 
5273 static void intel_iommu_probe_finalize(struct device *dev)
5274 {
5275 	set_dma_ops(dev, NULL);
5276 	iommu_setup_dma_ops(dev, 0, U64_MAX);
5277 }
5278 
5279 static void intel_iommu_get_resv_regions(struct device *device,
5280 					 struct list_head *head)
5281 {
5282 	int prot = DMA_PTE_READ | DMA_PTE_WRITE;
5283 	struct iommu_resv_region *reg;
5284 	struct dmar_rmrr_unit *rmrr;
5285 	struct device *i_dev;
5286 	int i;
5287 
5288 	down_read(&dmar_global_lock);
5289 	for_each_rmrr_units(rmrr) {
5290 		for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt,
5291 					  i, i_dev) {
5292 			struct iommu_resv_region *resv;
5293 			enum iommu_resv_type type;
5294 			size_t length;
5295 
5296 			if (i_dev != device &&
5297 			    !is_downstream_to_pci_bridge(device, i_dev))
5298 				continue;
5299 
5300 			length = rmrr->end_address - rmrr->base_address + 1;
5301 
5302 			type = device_rmrr_is_relaxable(device) ?
5303 				IOMMU_RESV_DIRECT_RELAXABLE : IOMMU_RESV_DIRECT;
5304 
5305 			resv = iommu_alloc_resv_region(rmrr->base_address,
5306 						       length, prot, type);
5307 			if (!resv)
5308 				break;
5309 
5310 			list_add_tail(&resv->list, head);
5311 		}
5312 	}
5313 	up_read(&dmar_global_lock);
5314 
5315 #ifdef CONFIG_INTEL_IOMMU_FLOPPY_WA
5316 	if (dev_is_pci(device)) {
5317 		struct pci_dev *pdev = to_pci_dev(device);
5318 
5319 		if ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA) {
5320 			reg = iommu_alloc_resv_region(0, 1UL << 24, prot,
5321 						   IOMMU_RESV_DIRECT_RELAXABLE);
5322 			if (reg)
5323 				list_add_tail(&reg->list, head);
5324 		}
5325 	}
5326 #endif /* CONFIG_INTEL_IOMMU_FLOPPY_WA */
5327 
5328 	reg = iommu_alloc_resv_region(IOAPIC_RANGE_START,
5329 				      IOAPIC_RANGE_END - IOAPIC_RANGE_START + 1,
5330 				      0, IOMMU_RESV_MSI);
5331 	if (!reg)
5332 		return;
5333 	list_add_tail(&reg->list, head);
5334 }
5335 
5336 int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct device *dev)
5337 {
5338 	struct device_domain_info *info;
5339 	struct context_entry *context;
5340 	struct dmar_domain *domain;
5341 	unsigned long flags;
5342 	u64 ctx_lo;
5343 	int ret;
5344 
5345 	domain = find_domain(dev);
5346 	if (!domain)
5347 		return -EINVAL;
5348 
5349 	spin_lock_irqsave(&device_domain_lock, flags);
5350 	spin_lock(&iommu->lock);
5351 
5352 	ret = -EINVAL;
5353 	info = get_domain_info(dev);
5354 	if (!info || !info->pasid_supported)
5355 		goto out;
5356 
5357 	context = iommu_context_addr(iommu, info->bus, info->devfn, 0);
5358 	if (WARN_ON(!context))
5359 		goto out;
5360 
5361 	ctx_lo = context[0].lo;
5362 
5363 	if (!(ctx_lo & CONTEXT_PASIDE)) {
5364 		ctx_lo |= CONTEXT_PASIDE;
5365 		context[0].lo = ctx_lo;
5366 		wmb();
5367 		iommu->flush.flush_context(iommu,
5368 					   domain->iommu_did[iommu->seq_id],
5369 					   PCI_DEVID(info->bus, info->devfn),
5370 					   DMA_CCMD_MASK_NOBIT,
5371 					   DMA_CCMD_DEVICE_INVL);
5372 	}
5373 
5374 	/* Enable PASID support in the device, if it wasn't already */
5375 	if (!info->pasid_enabled)
5376 		iommu_enable_dev_iotlb(info);
5377 
5378 	ret = 0;
5379 
5380  out:
5381 	spin_unlock(&iommu->lock);
5382 	spin_unlock_irqrestore(&device_domain_lock, flags);
5383 
5384 	return ret;
5385 }
5386 
5387 static struct iommu_group *intel_iommu_device_group(struct device *dev)
5388 {
5389 	if (dev_is_pci(dev))
5390 		return pci_device_group(dev);
5391 	return generic_device_group(dev);
5392 }
5393 
5394 static int intel_iommu_enable_auxd(struct device *dev)
5395 {
5396 	struct device_domain_info *info;
5397 	struct intel_iommu *iommu;
5398 	unsigned long flags;
5399 	int ret;
5400 
5401 	iommu = device_to_iommu(dev, NULL, NULL);
5402 	if (!iommu || dmar_disabled)
5403 		return -EINVAL;
5404 
5405 	if (!sm_supported(iommu) || !pasid_supported(iommu))
5406 		return -EINVAL;
5407 
5408 	ret = intel_iommu_enable_pasid(iommu, dev);
5409 	if (ret)
5410 		return -ENODEV;
5411 
5412 	spin_lock_irqsave(&device_domain_lock, flags);
5413 	info = get_domain_info(dev);
5414 	info->auxd_enabled = 1;
5415 	spin_unlock_irqrestore(&device_domain_lock, flags);
5416 
5417 	return 0;
5418 }
5419 
5420 static int intel_iommu_disable_auxd(struct device *dev)
5421 {
5422 	struct device_domain_info *info;
5423 	unsigned long flags;
5424 
5425 	spin_lock_irqsave(&device_domain_lock, flags);
5426 	info = get_domain_info(dev);
5427 	if (!WARN_ON(!info))
5428 		info->auxd_enabled = 0;
5429 	spin_unlock_irqrestore(&device_domain_lock, flags);
5430 
5431 	return 0;
5432 }
5433 
5434 static int intel_iommu_enable_sva(struct device *dev)
5435 {
5436 	struct device_domain_info *info = get_domain_info(dev);
5437 	struct intel_iommu *iommu;
5438 	int ret;
5439 
5440 	if (!info || dmar_disabled)
5441 		return -EINVAL;
5442 
5443 	iommu = info->iommu;
5444 	if (!iommu)
5445 		return -EINVAL;
5446 
5447 	if (!(iommu->flags & VTD_FLAG_SVM_CAPABLE))
5448 		return -ENODEV;
5449 
5450 	if (intel_iommu_enable_pasid(iommu, dev))
5451 		return -ENODEV;
5452 
5453 	if (!info->pasid_enabled || !info->pri_enabled || !info->ats_enabled)
5454 		return -EINVAL;
5455 
5456 	ret = iopf_queue_add_device(iommu->iopf_queue, dev);
5457 	if (!ret)
5458 		ret = iommu_register_device_fault_handler(dev, iommu_queue_iopf, dev);
5459 
5460 	return ret;
5461 }
5462 
5463 static int intel_iommu_disable_sva(struct device *dev)
5464 {
5465 	struct device_domain_info *info = get_domain_info(dev);
5466 	struct intel_iommu *iommu = info->iommu;
5467 	int ret;
5468 
5469 	ret = iommu_unregister_device_fault_handler(dev);
5470 	if (!ret)
5471 		ret = iopf_queue_remove_device(iommu->iopf_queue, dev);
5472 
5473 	return ret;
5474 }
5475 
5476 static int intel_iommu_enable_iopf(struct device *dev)
5477 {
5478 	struct device_domain_info *info = get_domain_info(dev);
5479 
5480 	if (info && info->pri_supported)
5481 		return 0;
5482 
5483 	return -ENODEV;
5484 }
5485 
5486 static int
5487 intel_iommu_dev_enable_feat(struct device *dev, enum iommu_dev_features feat)
5488 {
5489 	switch (feat) {
5490 	case IOMMU_DEV_FEAT_AUX:
5491 		return intel_iommu_enable_auxd(dev);
5492 
5493 	case IOMMU_DEV_FEAT_IOPF:
5494 		return intel_iommu_enable_iopf(dev);
5495 
5496 	case IOMMU_DEV_FEAT_SVA:
5497 		return intel_iommu_enable_sva(dev);
5498 
5499 	default:
5500 		return -ENODEV;
5501 	}
5502 }
5503 
5504 static int
5505 intel_iommu_dev_disable_feat(struct device *dev, enum iommu_dev_features feat)
5506 {
5507 	switch (feat) {
5508 	case IOMMU_DEV_FEAT_AUX:
5509 		return intel_iommu_disable_auxd(dev);
5510 
5511 	case IOMMU_DEV_FEAT_IOPF:
5512 		return 0;
5513 
5514 	case IOMMU_DEV_FEAT_SVA:
5515 		return intel_iommu_disable_sva(dev);
5516 
5517 	default:
5518 		return -ENODEV;
5519 	}
5520 }
5521 
5522 static bool
5523 intel_iommu_dev_feat_enabled(struct device *dev, enum iommu_dev_features feat)
5524 {
5525 	struct device_domain_info *info = get_domain_info(dev);
5526 
5527 	if (feat == IOMMU_DEV_FEAT_AUX)
5528 		return scalable_mode_support() && info && info->auxd_enabled;
5529 
5530 	return false;
5531 }
5532 
5533 static int
5534 intel_iommu_aux_get_pasid(struct iommu_domain *domain, struct device *dev)
5535 {
5536 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5537 
5538 	return dmar_domain->default_pasid > 0 ?
5539 			dmar_domain->default_pasid : -EINVAL;
5540 }
5541 
5542 static bool intel_iommu_is_attach_deferred(struct iommu_domain *domain,
5543 					   struct device *dev)
5544 {
5545 	return attach_deferred(dev);
5546 }
5547 
5548 static int
5549 intel_iommu_enable_nesting(struct iommu_domain *domain)
5550 {
5551 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5552 	unsigned long flags;
5553 	int ret = -ENODEV;
5554 
5555 	spin_lock_irqsave(&device_domain_lock, flags);
5556 	if (list_empty(&dmar_domain->devices)) {
5557 		dmar_domain->flags |= DOMAIN_FLAG_NESTING_MODE;
5558 		dmar_domain->flags &= ~DOMAIN_FLAG_USE_FIRST_LEVEL;
5559 		ret = 0;
5560 	}
5561 	spin_unlock_irqrestore(&device_domain_lock, flags);
5562 
5563 	return ret;
5564 }
5565 
5566 /*
5567  * Check that the device does not live on an external facing PCI port that is
5568  * marked as untrusted. Such devices should not be able to apply quirks and
5569  * thus not be able to bypass the IOMMU restrictions.
5570  */
5571 static bool risky_device(struct pci_dev *pdev)
5572 {
5573 	if (pdev->untrusted) {
5574 		pci_info(pdev,
5575 			 "Skipping IOMMU quirk for dev [%04X:%04X] on untrusted PCI link\n",
5576 			 pdev->vendor, pdev->device);
5577 		pci_info(pdev, "Please check with your BIOS/Platform vendor about this\n");
5578 		return true;
5579 	}
5580 	return false;
5581 }
5582 
5583 static void intel_iommu_iotlb_sync_map(struct iommu_domain *domain,
5584 				       unsigned long iova, size_t size)
5585 {
5586 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
5587 	unsigned long pages = aligned_nrpages(iova, size);
5588 	unsigned long pfn = iova >> VTD_PAGE_SHIFT;
5589 	struct intel_iommu *iommu;
5590 	int iommu_id;
5591 
5592 	for_each_domain_iommu(iommu_id, dmar_domain) {
5593 		iommu = g_iommus[iommu_id];
5594 		__mapping_notify_one(iommu, dmar_domain, pfn, pages);
5595 	}
5596 }
5597 
5598 const struct iommu_ops intel_iommu_ops = {
5599 	.capable		= intel_iommu_capable,
5600 	.domain_alloc		= intel_iommu_domain_alloc,
5601 	.domain_free		= intel_iommu_domain_free,
5602 	.enable_nesting		= intel_iommu_enable_nesting,
5603 	.attach_dev		= intel_iommu_attach_device,
5604 	.detach_dev		= intel_iommu_detach_device,
5605 	.aux_attach_dev		= intel_iommu_aux_attach_device,
5606 	.aux_detach_dev		= intel_iommu_aux_detach_device,
5607 	.aux_get_pasid		= intel_iommu_aux_get_pasid,
5608 	.map_pages		= intel_iommu_map_pages,
5609 	.unmap_pages		= intel_iommu_unmap_pages,
5610 	.iotlb_sync_map		= intel_iommu_iotlb_sync_map,
5611 	.flush_iotlb_all        = intel_flush_iotlb_all,
5612 	.iotlb_sync		= intel_iommu_tlb_sync,
5613 	.iova_to_phys		= intel_iommu_iova_to_phys,
5614 	.probe_device		= intel_iommu_probe_device,
5615 	.probe_finalize		= intel_iommu_probe_finalize,
5616 	.release_device		= intel_iommu_release_device,
5617 	.get_resv_regions	= intel_iommu_get_resv_regions,
5618 	.put_resv_regions	= generic_iommu_put_resv_regions,
5619 	.device_group		= intel_iommu_device_group,
5620 	.dev_feat_enabled	= intel_iommu_dev_feat_enabled,
5621 	.dev_enable_feat	= intel_iommu_dev_enable_feat,
5622 	.dev_disable_feat	= intel_iommu_dev_disable_feat,
5623 	.is_attach_deferred	= intel_iommu_is_attach_deferred,
5624 	.def_domain_type	= device_def_domain_type,
5625 	.pgsize_bitmap		= SZ_4K,
5626 #ifdef CONFIG_INTEL_IOMMU_SVM
5627 	.cache_invalidate	= intel_iommu_sva_invalidate,
5628 	.sva_bind_gpasid	= intel_svm_bind_gpasid,
5629 	.sva_unbind_gpasid	= intel_svm_unbind_gpasid,
5630 	.sva_bind		= intel_svm_bind,
5631 	.sva_unbind		= intel_svm_unbind,
5632 	.sva_get_pasid		= intel_svm_get_pasid,
5633 	.page_response		= intel_svm_page_response,
5634 #endif
5635 };
5636 
5637 static void quirk_iommu_igfx(struct pci_dev *dev)
5638 {
5639 	if (risky_device(dev))
5640 		return;
5641 
5642 	pci_info(dev, "Disabling IOMMU for graphics on this chipset\n");
5643 	dmar_map_gfx = 0;
5644 }
5645 
5646 /* G4x/GM45 integrated gfx dmar support is totally busted. */
5647 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_igfx);
5648 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_igfx);
5649 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_igfx);
5650 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_igfx);
5651 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_igfx);
5652 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_igfx);
5653 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_igfx);
5654 
5655 /* Broadwell igfx malfunctions with dmar */
5656 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1606, quirk_iommu_igfx);
5657 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x160B, quirk_iommu_igfx);
5658 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x160E, quirk_iommu_igfx);
5659 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1602, quirk_iommu_igfx);
5660 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x160A, quirk_iommu_igfx);
5661 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x160D, quirk_iommu_igfx);
5662 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1616, quirk_iommu_igfx);
5663 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x161B, quirk_iommu_igfx);
5664 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x161E, quirk_iommu_igfx);
5665 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1612, quirk_iommu_igfx);
5666 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x161A, quirk_iommu_igfx);
5667 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x161D, quirk_iommu_igfx);
5668 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1626, quirk_iommu_igfx);
5669 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x162B, quirk_iommu_igfx);
5670 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x162E, quirk_iommu_igfx);
5671 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1622, quirk_iommu_igfx);
5672 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x162A, quirk_iommu_igfx);
5673 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x162D, quirk_iommu_igfx);
5674 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1636, quirk_iommu_igfx);
5675 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163B, quirk_iommu_igfx);
5676 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163E, quirk_iommu_igfx);
5677 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
5678 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
5679 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
5680 
5681 static void quirk_iommu_rwbf(struct pci_dev *dev)
5682 {
5683 	if (risky_device(dev))
5684 		return;
5685 
5686 	/*
5687 	 * Mobile 4 Series Chipset neglects to set RWBF capability,
5688 	 * but needs it. Same seems to hold for the desktop versions.
5689 	 */
5690 	pci_info(dev, "Forcing write-buffer flush capability\n");
5691 	rwbf_quirk = 1;
5692 }
5693 
5694 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);
5695 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_rwbf);
5696 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_rwbf);
5697 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_rwbf);
5698 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_rwbf);
5699 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_rwbf);
5700 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_rwbf);
5701 
5702 #define GGC 0x52
5703 #define GGC_MEMORY_SIZE_MASK	(0xf << 8)
5704 #define GGC_MEMORY_SIZE_NONE	(0x0 << 8)
5705 #define GGC_MEMORY_SIZE_1M	(0x1 << 8)
5706 #define GGC_MEMORY_SIZE_2M	(0x3 << 8)
5707 #define GGC_MEMORY_VT_ENABLED	(0x8 << 8)
5708 #define GGC_MEMORY_SIZE_2M_VT	(0x9 << 8)
5709 #define GGC_MEMORY_SIZE_3M_VT	(0xa << 8)
5710 #define GGC_MEMORY_SIZE_4M_VT	(0xb << 8)
5711 
5712 static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev)
5713 {
5714 	unsigned short ggc;
5715 
5716 	if (risky_device(dev))
5717 		return;
5718 
5719 	if (pci_read_config_word(dev, GGC, &ggc))
5720 		return;
5721 
5722 	if (!(ggc & GGC_MEMORY_VT_ENABLED)) {
5723 		pci_info(dev, "BIOS has allocated no shadow GTT; disabling IOMMU for graphics\n");
5724 		dmar_map_gfx = 0;
5725 	} else if (dmar_map_gfx) {
5726 		/* we have to ensure the gfx device is idle before we flush */
5727 		pci_info(dev, "Disabling batched IOTLB flush on Ironlake\n");
5728 		iommu_set_dma_strict();
5729 	}
5730 }
5731 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0040, quirk_calpella_no_shadow_gtt);
5732 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0044, quirk_calpella_no_shadow_gtt);
5733 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0062, quirk_calpella_no_shadow_gtt);
5734 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x006a, quirk_calpella_no_shadow_gtt);
5735 
5736 static void quirk_igfx_skip_te_disable(struct pci_dev *dev)
5737 {
5738 	unsigned short ver;
5739 
5740 	if (!IS_GFX_DEVICE(dev))
5741 		return;
5742 
5743 	ver = (dev->device >> 8) & 0xff;
5744 	if (ver != 0x45 && ver != 0x46 && ver != 0x4c &&
5745 	    ver != 0x4e && ver != 0x8a && ver != 0x98 &&
5746 	    ver != 0x9a)
5747 		return;
5748 
5749 	if (risky_device(dev))
5750 		return;
5751 
5752 	pci_info(dev, "Skip IOMMU disabling for graphics\n");
5753 	iommu_skip_te_disable = 1;
5754 }
5755 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_igfx_skip_te_disable);
5756 
5757 /* On Tylersburg chipsets, some BIOSes have been known to enable the
5758    ISOCH DMAR unit for the Azalia sound device, but not give it any
5759    TLB entries, which causes it to deadlock. Check for that.  We do
5760    this in a function called from init_dmars(), instead of in a PCI
5761    quirk, because we don't want to print the obnoxious "BIOS broken"
5762    message if VT-d is actually disabled.
5763 */
5764 static void __init check_tylersburg_isoch(void)
5765 {
5766 	struct pci_dev *pdev;
5767 	uint32_t vtisochctrl;
5768 
5769 	/* If there's no Azalia in the system anyway, forget it. */
5770 	pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x3a3e, NULL);
5771 	if (!pdev)
5772 		return;
5773 
5774 	if (risky_device(pdev)) {
5775 		pci_dev_put(pdev);
5776 		return;
5777 	}
5778 
5779 	pci_dev_put(pdev);
5780 
5781 	/* System Management Registers. Might be hidden, in which case
5782 	   we can't do the sanity check. But that's OK, because the
5783 	   known-broken BIOSes _don't_ actually hide it, so far. */
5784 	pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x342e, NULL);
5785 	if (!pdev)
5786 		return;
5787 
5788 	if (risky_device(pdev)) {
5789 		pci_dev_put(pdev);
5790 		return;
5791 	}
5792 
5793 	if (pci_read_config_dword(pdev, 0x188, &vtisochctrl)) {
5794 		pci_dev_put(pdev);
5795 		return;
5796 	}
5797 
5798 	pci_dev_put(pdev);
5799 
5800 	/* If Azalia DMA is routed to the non-isoch DMAR unit, fine. */
5801 	if (vtisochctrl & 1)
5802 		return;
5803 
5804 	/* Drop all bits other than the number of TLB entries */
5805 	vtisochctrl &= 0x1c;
5806 
5807 	/* If we have the recommended number of TLB entries (16), fine. */
5808 	if (vtisochctrl == 0x10)
5809 		return;
5810 
5811 	/* Zero TLB entries? You get to ride the short bus to school. */
5812 	if (!vtisochctrl) {
5813 		WARN(1, "Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.\n"
5814 		     "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
5815 		     dmi_get_system_info(DMI_BIOS_VENDOR),
5816 		     dmi_get_system_info(DMI_BIOS_VERSION),
5817 		     dmi_get_system_info(DMI_PRODUCT_VERSION));
5818 		iommu_identity_mapping |= IDENTMAP_AZALIA;
5819 		return;
5820 	}
5821 
5822 	pr_warn("Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n",
5823 	       vtisochctrl);
5824 }
5825