2 * Copyright (c) 2006, Intel Corporation.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA.
17 * Copyright (C) 2006-2008 Intel Corporation
18 * Author: Ashok Raj <ashok.raj@intel.com>
19 * Author: Shaohua Li <shaohua.li@intel.com>
20 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
21 * Author: Fenghua Yu <fenghua.yu@intel.com>
24 #include <linux/init.h>
25 #include <linux/bitmap.h>
26 #include <linux/debugfs.h>
27 #include <linux/export.h>
28 #include <linux/slab.h>
29 #include <linux/irq.h>
30 #include <linux/interrupt.h>
31 #include <linux/spinlock.h>
32 #include <linux/pci.h>
33 #include <linux/dmar.h>
34 #include <linux/dma-mapping.h>
35 #include <linux/mempool.h>
36 #include <linux/timer.h>
37 #include <linux/iova.h>
38 #include <linux/iommu.h>
39 #include <linux/intel-iommu.h>
40 #include <linux/syscore_ops.h>
41 #include <linux/tboot.h>
42 #include <linux/dmi.h>
43 #include <linux/pci-ats.h>
44 #include <linux/memblock.h>
45 #include <asm/irq_remapping.h>
46 #include <asm/cacheflush.h>
47 #include <asm/iommu.h>
49 #include "irq_remapping.h"
52 #define ROOT_SIZE VTD_PAGE_SIZE
53 #define CONTEXT_SIZE VTD_PAGE_SIZE
55 #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
56 #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
57 #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
59 #define IOAPIC_RANGE_START (0xfee00000)
60 #define IOAPIC_RANGE_END (0xfeefffff)
61 #define IOVA_START_ADDR (0x1000)
63 #define DEFAULT_DOMAIN_ADDRESS_WIDTH 48
65 #define MAX_AGAW_WIDTH 64
67 #define __DOMAIN_MAX_PFN(gaw) ((((uint64_t)1) << (gaw-VTD_PAGE_SHIFT)) - 1)
68 #define __DOMAIN_MAX_ADDR(gaw) ((((uint64_t)1) << gaw) - 1)
70 /* We limit DOMAIN_MAX_PFN to fit in an unsigned long, and DOMAIN_MAX_ADDR
71 to match. That way, we can use 'unsigned long' for PFNs with impunity. */
72 #define DOMAIN_MAX_PFN(gaw) ((unsigned long) min_t(uint64_t, \
73 __DOMAIN_MAX_PFN(gaw), (unsigned long)-1))
74 #define DOMAIN_MAX_ADDR(gaw) (((uint64_t)__DOMAIN_MAX_PFN(gaw)) << VTD_PAGE_SHIFT)
76 #define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT)
77 #define DMA_32BIT_PFN IOVA_PFN(DMA_BIT_MASK(32))
78 #define DMA_64BIT_PFN IOVA_PFN(DMA_BIT_MASK(64))
80 /* page table handling */
81 #define LEVEL_STRIDE (9)
82 #define LEVEL_MASK (((u64)1 << LEVEL_STRIDE) - 1)
85 * This bitmap is used to advertise the page sizes our hardware support
86 * to the IOMMU core, which will then use this information to split
87 * physically contiguous memory regions it is mapping into page sizes
90 * Traditionally the IOMMU core just handed us the mappings directly,
91 * after making sure the size is an order of a 4KiB page and that the
92 * mapping has natural alignment.
94 * To retain this behavior, we currently advertise that we support
95 * all page sizes that are an order of 4KiB.
97 * If at some point we'd like to utilize the IOMMU core's new behavior,
98 * we could change this to advertise the real page sizes we support.
100 #define INTEL_IOMMU_PGSIZES (~0xFFFUL)
102 static inline int agaw_to_level(int agaw
)
107 static inline int agaw_to_width(int agaw
)
109 return 30 + agaw
* LEVEL_STRIDE
;
112 static inline int width_to_agaw(int width
)
114 return (width
- 30) / LEVEL_STRIDE
;
117 static inline unsigned int level_to_offset_bits(int level
)
119 return (level
- 1) * LEVEL_STRIDE
;
122 static inline int pfn_level_offset(unsigned long pfn
, int level
)
124 return (pfn
>> level_to_offset_bits(level
)) & LEVEL_MASK
;
127 static inline unsigned long level_mask(int level
)
129 return -1UL << level_to_offset_bits(level
);
132 static inline unsigned long level_size(int level
)
134 return 1UL << level_to_offset_bits(level
);
137 static inline unsigned long align_to_level(unsigned long pfn
, int level
)
139 return (pfn
+ level_size(level
) - 1) & level_mask(level
);
142 static inline unsigned long lvl_to_nr_pages(unsigned int lvl
)
144 return 1 << ((lvl
- 1) * LEVEL_STRIDE
);
147 /* VT-d pages must always be _smaller_ than MM pages. Otherwise things
148 are never going to work. */
149 static inline unsigned long dma_to_mm_pfn(unsigned long dma_pfn
)
151 return dma_pfn
>> (PAGE_SHIFT
- VTD_PAGE_SHIFT
);
154 static inline unsigned long mm_to_dma_pfn(unsigned long mm_pfn
)
156 return mm_pfn
<< (PAGE_SHIFT
- VTD_PAGE_SHIFT
);
158 static inline unsigned long page_to_dma_pfn(struct page
*pg
)
160 return mm_to_dma_pfn(page_to_pfn(pg
));
162 static inline unsigned long virt_to_dma_pfn(void *p
)
164 return page_to_dma_pfn(virt_to_page(p
));
167 /* global iommu list, set NULL for ignored DMAR units */
168 static struct intel_iommu
**g_iommus
;
170 static void __init
check_tylersburg_isoch(void);
171 static int rwbf_quirk
;
174 * set to 1 to panic kernel if can't successfully enable VT-d
175 * (used when kernel is launched w/ TXT)
177 static int force_on
= 0;
182 * 12-63: Context Ptr (12 - (haw-1))
189 #define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
190 static inline bool root_present(struct root_entry
*root
)
192 return (root
->val
& 1);
194 static inline void set_root_present(struct root_entry
*root
)
198 static inline void set_root_value(struct root_entry
*root
, unsigned long value
)
200 root
->val
|= value
& VTD_PAGE_MASK
;
203 static inline struct context_entry
*
204 get_context_addr_from_root(struct root_entry
*root
)
206 return (struct context_entry
*)
207 (root_present(root
)?phys_to_virt(
208 root
->val
& VTD_PAGE_MASK
) :
215 * 1: fault processing disable
216 * 2-3: translation type
217 * 12-63: address space root
223 struct context_entry
{
228 static inline bool context_present(struct context_entry
*context
)
230 return (context
->lo
& 1);
232 static inline void context_set_present(struct context_entry
*context
)
237 static inline void context_set_fault_enable(struct context_entry
*context
)
239 context
->lo
&= (((u64
)-1) << 2) | 1;
242 static inline void context_set_translation_type(struct context_entry
*context
,
245 context
->lo
&= (((u64
)-1) << 4) | 3;
246 context
->lo
|= (value
& 3) << 2;
249 static inline void context_set_address_root(struct context_entry
*context
,
252 context
->lo
|= value
& VTD_PAGE_MASK
;
255 static inline void context_set_address_width(struct context_entry
*context
,
258 context
->hi
|= value
& 7;
261 static inline void context_set_domain_id(struct context_entry
*context
,
264 context
->hi
|= (value
& ((1 << 16) - 1)) << 8;
267 static inline void context_clear_entry(struct context_entry
*context
)
280 * 12-63: Host physcial address
286 static inline void dma_clear_pte(struct dma_pte
*pte
)
291 static inline void dma_set_pte_readable(struct dma_pte
*pte
)
293 pte
->val
|= DMA_PTE_READ
;
296 static inline void dma_set_pte_writable(struct dma_pte
*pte
)
298 pte
->val
|= DMA_PTE_WRITE
;
301 static inline void dma_set_pte_snp(struct dma_pte
*pte
)
303 pte
->val
|= DMA_PTE_SNP
;
306 static inline void dma_set_pte_prot(struct dma_pte
*pte
, unsigned long prot
)
308 pte
->val
= (pte
->val
& ~3) | (prot
& 3);
311 static inline u64
dma_pte_addr(struct dma_pte
*pte
)
314 return pte
->val
& VTD_PAGE_MASK
;
316 /* Must have a full atomic 64-bit read */
317 return __cmpxchg64(&pte
->val
, 0ULL, 0ULL) & VTD_PAGE_MASK
;
321 static inline void dma_set_pte_pfn(struct dma_pte
*pte
, unsigned long pfn
)
323 pte
->val
|= (uint64_t)pfn
<< VTD_PAGE_SHIFT
;
326 static inline bool dma_pte_present(struct dma_pte
*pte
)
328 return (pte
->val
& 3) != 0;
331 static inline bool dma_pte_superpage(struct dma_pte
*pte
)
333 return (pte
->val
& (1 << 7));
336 static inline int first_pte_in_page(struct dma_pte
*pte
)
338 return !((unsigned long)pte
& ~VTD_PAGE_MASK
);
342 * This domain is a statically identity mapping domain.
343 * 1. This domain creats a static 1:1 mapping to all usable memory.
344 * 2. It maps to each iommu if successful.
345 * 3. Each iommu mapps to this domain if successful.
347 static struct dmar_domain
*si_domain
;
348 static int hw_pass_through
= 1;
350 /* devices under the same p2p bridge are owned in one domain */
351 #define DOMAIN_FLAG_P2P_MULTIPLE_DEVICES (1 << 0)
353 /* domain represents a virtual machine, more than one devices
354 * across iommus may be owned in one domain, e.g. kvm guest.
356 #define DOMAIN_FLAG_VIRTUAL_MACHINE (1 << 1)
358 /* si_domain contains mulitple devices */
359 #define DOMAIN_FLAG_STATIC_IDENTITY (1 << 2)
361 /* define the limit of IOMMUs supported in each domain */
363 # define IOMMU_UNITS_SUPPORTED MAX_IO_APICS
365 # define IOMMU_UNITS_SUPPORTED 64
369 int id
; /* domain id */
370 int nid
; /* node id */
371 DECLARE_BITMAP(iommu_bmp
, IOMMU_UNITS_SUPPORTED
);
372 /* bitmap of iommus this domain uses*/
374 struct list_head devices
; /* all devices' list */
375 struct iova_domain iovad
; /* iova's that belong to this domain */
377 struct dma_pte
*pgd
; /* virtual address */
378 int gaw
; /* max guest address width */
380 /* adjusted guest address width, 0 is level 2 30-bit */
383 int flags
; /* flags to find out type of domain */
385 int iommu_coherency
;/* indicate coherency of iommu access */
386 int iommu_snooping
; /* indicate snooping control feature*/
387 int iommu_count
; /* reference count of iommu */
388 int iommu_superpage
;/* Level of superpages supported:
389 0 == 4KiB (no superpages), 1 == 2MiB,
390 2 == 1GiB, 3 == 512GiB, 4 == 1TiB */
391 spinlock_t iommu_lock
; /* protect iommu set in domain */
392 u64 max_addr
; /* maximum mapped address */
395 /* PCI domain-device relationship */
396 struct device_domain_info
{
397 struct list_head link
; /* link to domain siblings */
398 struct list_head global
; /* link to global list */
399 int segment
; /* PCI domain */
400 u8 bus
; /* PCI bus number */
401 u8 devfn
; /* PCI devfn number */
402 struct pci_dev
*dev
; /* it's NULL for PCIe-to-PCI bridge */
403 struct intel_iommu
*iommu
; /* IOMMU used by this device */
404 struct dmar_domain
*domain
; /* pointer to domain */
407 static void flush_unmaps_timeout(unsigned long data
);
409 DEFINE_TIMER(unmap_timer
, flush_unmaps_timeout
, 0, 0);
411 #define HIGH_WATER_MARK 250
412 struct deferred_flush_tables
{
414 struct iova
*iova
[HIGH_WATER_MARK
];
415 struct dmar_domain
*domain
[HIGH_WATER_MARK
];
418 static struct deferred_flush_tables
*deferred_flush
;
420 /* bitmap for indexing intel_iommus */
421 static int g_num_of_iommus
;
423 static DEFINE_SPINLOCK(async_umap_flush_lock
);
424 static LIST_HEAD(unmaps_to_do
);
427 static long list_size
;
429 static void domain_remove_dev_info(struct dmar_domain
*domain
);
431 #ifdef CONFIG_INTEL_IOMMU_DEFAULT_ON
432 int dmar_disabled
= 0;
434 int dmar_disabled
= 1;
435 #endif /*CONFIG_INTEL_IOMMU_DEFAULT_ON*/
437 int intel_iommu_enabled
= 0;
438 EXPORT_SYMBOL_GPL(intel_iommu_enabled
);
440 static int dmar_map_gfx
= 1;
441 static int dmar_forcedac
;
442 static int intel_iommu_strict
;
443 static int intel_iommu_superpage
= 1;
445 int intel_iommu_gfx_mapped
;
446 EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped
);
448 #define DUMMY_DEVICE_DOMAIN_INFO ((struct device_domain_info *)(-1))
449 static DEFINE_SPINLOCK(device_domain_lock
);
450 static LIST_HEAD(device_domain_list
);
452 static struct iommu_ops intel_iommu_ops
;
454 static int __init
intel_iommu_setup(char *str
)
459 if (!strncmp(str
, "on", 2)) {
461 printk(KERN_INFO
"Intel-IOMMU: enabled\n");
462 } else if (!strncmp(str
, "off", 3)) {
464 printk(KERN_INFO
"Intel-IOMMU: disabled\n");
465 } else if (!strncmp(str
, "igfx_off", 8)) {
468 "Intel-IOMMU: disable GFX device mapping\n");
469 } else if (!strncmp(str
, "forcedac", 8)) {
471 "Intel-IOMMU: Forcing DAC for PCI devices\n");
473 } else if (!strncmp(str
, "strict", 6)) {
475 "Intel-IOMMU: disable batched IOTLB flush\n");
476 intel_iommu_strict
= 1;
477 } else if (!strncmp(str
, "sp_off", 6)) {
479 "Intel-IOMMU: disable supported super page\n");
480 intel_iommu_superpage
= 0;
483 str
+= strcspn(str
, ",");
489 __setup("intel_iommu=", intel_iommu_setup
);
491 static struct kmem_cache
*iommu_domain_cache
;
492 static struct kmem_cache
*iommu_devinfo_cache
;
493 static struct kmem_cache
*iommu_iova_cache
;
495 static inline void *alloc_pgtable_page(int node
)
500 page
= alloc_pages_node(node
, GFP_ATOMIC
| __GFP_ZERO
, 0);
502 vaddr
= page_address(page
);
506 static inline void free_pgtable_page(void *vaddr
)
508 free_page((unsigned long)vaddr
);
511 static inline void *alloc_domain_mem(void)
513 return kmem_cache_alloc(iommu_domain_cache
, GFP_ATOMIC
);
516 static void free_domain_mem(void *vaddr
)
518 kmem_cache_free(iommu_domain_cache
, vaddr
);
521 static inline void * alloc_devinfo_mem(void)
523 return kmem_cache_alloc(iommu_devinfo_cache
, GFP_ATOMIC
);
526 static inline void free_devinfo_mem(void *vaddr
)
528 kmem_cache_free(iommu_devinfo_cache
, vaddr
);
531 struct iova
*alloc_iova_mem(void)
533 return kmem_cache_alloc(iommu_iova_cache
, GFP_ATOMIC
);
536 void free_iova_mem(struct iova
*iova
)
538 kmem_cache_free(iommu_iova_cache
, iova
);
542 static int __iommu_calculate_agaw(struct intel_iommu
*iommu
, int max_gaw
)
547 sagaw
= cap_sagaw(iommu
->cap
);
548 for (agaw
= width_to_agaw(max_gaw
);
550 if (test_bit(agaw
, &sagaw
))
558 * Calculate max SAGAW for each iommu.
560 int iommu_calculate_max_sagaw(struct intel_iommu
*iommu
)
562 return __iommu_calculate_agaw(iommu
, MAX_AGAW_WIDTH
);
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.
570 int iommu_calculate_agaw(struct intel_iommu
*iommu
)
572 return __iommu_calculate_agaw(iommu
, DEFAULT_DOMAIN_ADDRESS_WIDTH
);
575 /* This functionin only returns single iommu in a domain */
576 static struct intel_iommu
*domain_get_iommu(struct dmar_domain
*domain
)
580 /* si_domain and vm domain should not get here. */
581 BUG_ON(domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
);
582 BUG_ON(domain
->flags
& DOMAIN_FLAG_STATIC_IDENTITY
);
584 iommu_id
= find_first_bit(domain
->iommu_bmp
, g_num_of_iommus
);
585 if (iommu_id
< 0 || iommu_id
>= g_num_of_iommus
)
588 return g_iommus
[iommu_id
];
591 static void domain_update_iommu_coherency(struct dmar_domain
*domain
)
595 i
= find_first_bit(domain
->iommu_bmp
, g_num_of_iommus
);
597 domain
->iommu_coherency
= i
< g_num_of_iommus
? 1 : 0;
599 for_each_set_bit(i
, domain
->iommu_bmp
, g_num_of_iommus
) {
600 if (!ecap_coherent(g_iommus
[i
]->ecap
)) {
601 domain
->iommu_coherency
= 0;
607 static void domain_update_iommu_snooping(struct dmar_domain
*domain
)
611 domain
->iommu_snooping
= 1;
613 for_each_set_bit(i
, domain
->iommu_bmp
, g_num_of_iommus
) {
614 if (!ecap_sc_support(g_iommus
[i
]->ecap
)) {
615 domain
->iommu_snooping
= 0;
621 static void domain_update_iommu_superpage(struct dmar_domain
*domain
)
623 struct dmar_drhd_unit
*drhd
;
624 struct intel_iommu
*iommu
= NULL
;
627 if (!intel_iommu_superpage
) {
628 domain
->iommu_superpage
= 0;
632 /* set iommu_superpage to the smallest common denominator */
633 for_each_active_iommu(iommu
, drhd
) {
634 mask
&= cap_super_page_val(iommu
->cap
);
639 domain
->iommu_superpage
= fls(mask
);
642 /* Some capabilities may be different across iommus */
643 static void domain_update_iommu_cap(struct dmar_domain
*domain
)
645 domain_update_iommu_coherency(domain
);
646 domain_update_iommu_snooping(domain
);
647 domain_update_iommu_superpage(domain
);
650 static struct intel_iommu
*device_to_iommu(int segment
, u8 bus
, u8 devfn
)
652 struct dmar_drhd_unit
*drhd
= NULL
;
655 for_each_drhd_unit(drhd
) {
658 if (segment
!= drhd
->segment
)
661 for (i
= 0; i
< drhd
->devices_cnt
; i
++) {
662 if (drhd
->devices
[i
] &&
663 drhd
->devices
[i
]->bus
->number
== bus
&&
664 drhd
->devices
[i
]->devfn
== devfn
)
666 if (drhd
->devices
[i
] &&
667 drhd
->devices
[i
]->subordinate
&&
668 drhd
->devices
[i
]->subordinate
->number
<= bus
&&
669 drhd
->devices
[i
]->subordinate
->busn_res
.end
>= bus
)
673 if (drhd
->include_all
)
680 static void domain_flush_cache(struct dmar_domain
*domain
,
681 void *addr
, int size
)
683 if (!domain
->iommu_coherency
)
684 clflush_cache_range(addr
, size
);
687 /* Gets context entry for a given bus and devfn */
688 static struct context_entry
* device_to_context_entry(struct intel_iommu
*iommu
,
691 struct root_entry
*root
;
692 struct context_entry
*context
;
693 unsigned long phy_addr
;
696 spin_lock_irqsave(&iommu
->lock
, flags
);
697 root
= &iommu
->root_entry
[bus
];
698 context
= get_context_addr_from_root(root
);
700 context
= (struct context_entry
*)
701 alloc_pgtable_page(iommu
->node
);
703 spin_unlock_irqrestore(&iommu
->lock
, flags
);
706 __iommu_flush_cache(iommu
, (void *)context
, CONTEXT_SIZE
);
707 phy_addr
= virt_to_phys((void *)context
);
708 set_root_value(root
, phy_addr
);
709 set_root_present(root
);
710 __iommu_flush_cache(iommu
, root
, sizeof(*root
));
712 spin_unlock_irqrestore(&iommu
->lock
, flags
);
713 return &context
[devfn
];
716 static int device_context_mapped(struct intel_iommu
*iommu
, u8 bus
, u8 devfn
)
718 struct root_entry
*root
;
719 struct context_entry
*context
;
723 spin_lock_irqsave(&iommu
->lock
, flags
);
724 root
= &iommu
->root_entry
[bus
];
725 context
= get_context_addr_from_root(root
);
730 ret
= context_present(&context
[devfn
]);
732 spin_unlock_irqrestore(&iommu
->lock
, flags
);
736 static void clear_context_table(struct intel_iommu
*iommu
, u8 bus
, u8 devfn
)
738 struct root_entry
*root
;
739 struct context_entry
*context
;
742 spin_lock_irqsave(&iommu
->lock
, flags
);
743 root
= &iommu
->root_entry
[bus
];
744 context
= get_context_addr_from_root(root
);
746 context_clear_entry(&context
[devfn
]);
747 __iommu_flush_cache(iommu
, &context
[devfn
], \
750 spin_unlock_irqrestore(&iommu
->lock
, flags
);
753 static void free_context_table(struct intel_iommu
*iommu
)
755 struct root_entry
*root
;
758 struct context_entry
*context
;
760 spin_lock_irqsave(&iommu
->lock
, flags
);
761 if (!iommu
->root_entry
) {
764 for (i
= 0; i
< ROOT_ENTRY_NR
; i
++) {
765 root
= &iommu
->root_entry
[i
];
766 context
= get_context_addr_from_root(root
);
768 free_pgtable_page(context
);
770 free_pgtable_page(iommu
->root_entry
);
771 iommu
->root_entry
= NULL
;
773 spin_unlock_irqrestore(&iommu
->lock
, flags
);
776 static struct dma_pte
*pfn_to_dma_pte(struct dmar_domain
*domain
,
777 unsigned long pfn
, int target_level
)
779 int addr_width
= agaw_to_width(domain
->agaw
) - VTD_PAGE_SHIFT
;
780 struct dma_pte
*parent
, *pte
= NULL
;
781 int level
= agaw_to_level(domain
->agaw
);
784 BUG_ON(!domain
->pgd
);
785 BUG_ON(addr_width
< BITS_PER_LONG
&& pfn
>> addr_width
);
786 parent
= domain
->pgd
;
791 offset
= pfn_level_offset(pfn
, level
);
792 pte
= &parent
[offset
];
793 if (!target_level
&& (dma_pte_superpage(pte
) || !dma_pte_present(pte
)))
795 if (level
== target_level
)
798 if (!dma_pte_present(pte
)) {
801 tmp_page
= alloc_pgtable_page(domain
->nid
);
806 domain_flush_cache(domain
, tmp_page
, VTD_PAGE_SIZE
);
807 pteval
= ((uint64_t)virt_to_dma_pfn(tmp_page
) << VTD_PAGE_SHIFT
) | DMA_PTE_READ
| DMA_PTE_WRITE
;
808 if (cmpxchg64(&pte
->val
, 0ULL, pteval
)) {
809 /* Someone else set it while we were thinking; use theirs. */
810 free_pgtable_page(tmp_page
);
813 domain_flush_cache(domain
, pte
, sizeof(*pte
));
816 parent
= phys_to_virt(dma_pte_addr(pte
));
824 /* return address's pte at specific level */
825 static struct dma_pte
*dma_pfn_level_pte(struct dmar_domain
*domain
,
827 int level
, int *large_page
)
829 struct dma_pte
*parent
, *pte
= NULL
;
830 int total
= agaw_to_level(domain
->agaw
);
833 parent
= domain
->pgd
;
834 while (level
<= total
) {
835 offset
= pfn_level_offset(pfn
, total
);
836 pte
= &parent
[offset
];
840 if (!dma_pte_present(pte
)) {
845 if (pte
->val
& DMA_PTE_LARGE_PAGE
) {
850 parent
= phys_to_virt(dma_pte_addr(pte
));
856 /* clear last level pte, a tlb flush should be followed */
857 static int dma_pte_clear_range(struct dmar_domain
*domain
,
858 unsigned long start_pfn
,
859 unsigned long last_pfn
)
861 int addr_width
= agaw_to_width(domain
->agaw
) - VTD_PAGE_SHIFT
;
862 unsigned int large_page
= 1;
863 struct dma_pte
*first_pte
, *pte
;
866 BUG_ON(addr_width
< BITS_PER_LONG
&& start_pfn
>> addr_width
);
867 BUG_ON(addr_width
< BITS_PER_LONG
&& last_pfn
>> addr_width
);
868 BUG_ON(start_pfn
> last_pfn
);
870 /* we don't need lock here; nobody else touches the iova range */
873 first_pte
= pte
= dma_pfn_level_pte(domain
, start_pfn
, 1, &large_page
);
875 start_pfn
= align_to_level(start_pfn
+ 1, large_page
+ 1);
880 start_pfn
+= lvl_to_nr_pages(large_page
);
882 } while (start_pfn
<= last_pfn
&& !first_pte_in_page(pte
));
884 domain_flush_cache(domain
, first_pte
,
885 (void *)pte
- (void *)first_pte
);
887 } while (start_pfn
&& start_pfn
<= last_pfn
);
889 order
= (large_page
- 1) * 9;
893 /* free page table pages. last level pte should already be cleared */
894 static void dma_pte_free_pagetable(struct dmar_domain
*domain
,
895 unsigned long start_pfn
,
896 unsigned long last_pfn
)
898 int addr_width
= agaw_to_width(domain
->agaw
) - VTD_PAGE_SHIFT
;
899 struct dma_pte
*first_pte
, *pte
;
900 int total
= agaw_to_level(domain
->agaw
);
905 BUG_ON(addr_width
< BITS_PER_LONG
&& start_pfn
>> addr_width
);
906 BUG_ON(addr_width
< BITS_PER_LONG
&& last_pfn
>> addr_width
);
907 BUG_ON(start_pfn
> last_pfn
);
909 /* We don't need lock here; nobody else touches the iova range */
911 while (level
<= total
) {
912 tmp
= align_to_level(start_pfn
, level
);
914 /* If we can't even clear one PTE at this level, we're done */
915 if (tmp
+ level_size(level
) - 1 > last_pfn
)
920 first_pte
= pte
= dma_pfn_level_pte(domain
, tmp
, level
, &large_page
);
921 if (large_page
> level
)
922 level
= large_page
+ 1;
924 tmp
= align_to_level(tmp
+ 1, level
+ 1);
928 if (dma_pte_present(pte
)) {
929 free_pgtable_page(phys_to_virt(dma_pte_addr(pte
)));
933 tmp
+= level_size(level
);
934 } while (!first_pte_in_page(pte
) &&
935 tmp
+ level_size(level
) - 1 <= last_pfn
);
937 domain_flush_cache(domain
, first_pte
,
938 (void *)pte
- (void *)first_pte
);
940 } while (tmp
&& tmp
+ level_size(level
) - 1 <= last_pfn
);
944 if (start_pfn
== 0 && last_pfn
== DOMAIN_MAX_PFN(domain
->gaw
)) {
945 free_pgtable_page(domain
->pgd
);
951 static int iommu_alloc_root_entry(struct intel_iommu
*iommu
)
953 struct root_entry
*root
;
956 root
= (struct root_entry
*)alloc_pgtable_page(iommu
->node
);
960 __iommu_flush_cache(iommu
, root
, ROOT_SIZE
);
962 spin_lock_irqsave(&iommu
->lock
, flags
);
963 iommu
->root_entry
= root
;
964 spin_unlock_irqrestore(&iommu
->lock
, flags
);
969 static void iommu_set_root_entry(struct intel_iommu
*iommu
)
975 addr
= iommu
->root_entry
;
977 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
978 dmar_writeq(iommu
->reg
+ DMAR_RTADDR_REG
, virt_to_phys(addr
));
980 writel(iommu
->gcmd
| DMA_GCMD_SRTP
, iommu
->reg
+ DMAR_GCMD_REG
);
982 /* Make sure hardware complete it */
983 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
,
984 readl
, (sts
& DMA_GSTS_RTPS
), sts
);
986 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
989 static void iommu_flush_write_buffer(struct intel_iommu
*iommu
)
994 if (!rwbf_quirk
&& !cap_rwbf(iommu
->cap
))
997 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
998 writel(iommu
->gcmd
| DMA_GCMD_WBF
, iommu
->reg
+ DMAR_GCMD_REG
);
1000 /* Make sure hardware complete it */
1001 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
,
1002 readl
, (!(val
& DMA_GSTS_WBFS
)), val
);
1004 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1007 /* return value determine if we need a write buffer flush */
1008 static void __iommu_flush_context(struct intel_iommu
*iommu
,
1009 u16 did
, u16 source_id
, u8 function_mask
,
1016 case DMA_CCMD_GLOBAL_INVL
:
1017 val
= DMA_CCMD_GLOBAL_INVL
;
1019 case DMA_CCMD_DOMAIN_INVL
:
1020 val
= DMA_CCMD_DOMAIN_INVL
|DMA_CCMD_DID(did
);
1022 case DMA_CCMD_DEVICE_INVL
:
1023 val
= DMA_CCMD_DEVICE_INVL
|DMA_CCMD_DID(did
)
1024 | DMA_CCMD_SID(source_id
) | DMA_CCMD_FM(function_mask
);
1029 val
|= DMA_CCMD_ICC
;
1031 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
1032 dmar_writeq(iommu
->reg
+ DMAR_CCMD_REG
, val
);
1034 /* Make sure hardware complete it */
1035 IOMMU_WAIT_OP(iommu
, DMAR_CCMD_REG
,
1036 dmar_readq
, (!(val
& DMA_CCMD_ICC
)), val
);
1038 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1041 /* return value determine if we need a write buffer flush */
1042 static void __iommu_flush_iotlb(struct intel_iommu
*iommu
, u16 did
,
1043 u64 addr
, unsigned int size_order
, u64 type
)
1045 int tlb_offset
= ecap_iotlb_offset(iommu
->ecap
);
1046 u64 val
= 0, val_iva
= 0;
1050 case DMA_TLB_GLOBAL_FLUSH
:
1051 /* global flush doesn't need set IVA_REG */
1052 val
= DMA_TLB_GLOBAL_FLUSH
|DMA_TLB_IVT
;
1054 case DMA_TLB_DSI_FLUSH
:
1055 val
= DMA_TLB_DSI_FLUSH
|DMA_TLB_IVT
|DMA_TLB_DID(did
);
1057 case DMA_TLB_PSI_FLUSH
:
1058 val
= DMA_TLB_PSI_FLUSH
|DMA_TLB_IVT
|DMA_TLB_DID(did
);
1059 /* Note: always flush non-leaf currently */
1060 val_iva
= size_order
| addr
;
1065 /* Note: set drain read/write */
1068 * This is probably to be super secure.. Looks like we can
1069 * ignore it without any impact.
1071 if (cap_read_drain(iommu
->cap
))
1072 val
|= DMA_TLB_READ_DRAIN
;
1074 if (cap_write_drain(iommu
->cap
))
1075 val
|= DMA_TLB_WRITE_DRAIN
;
1077 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
1078 /* Note: Only uses first TLB reg currently */
1080 dmar_writeq(iommu
->reg
+ tlb_offset
, val_iva
);
1081 dmar_writeq(iommu
->reg
+ tlb_offset
+ 8, val
);
1083 /* Make sure hardware complete it */
1084 IOMMU_WAIT_OP(iommu
, tlb_offset
+ 8,
1085 dmar_readq
, (!(val
& DMA_TLB_IVT
)), val
);
1087 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1089 /* check IOTLB invalidation granularity */
1090 if (DMA_TLB_IAIG(val
) == 0)
1091 printk(KERN_ERR
"IOMMU: flush IOTLB failed\n");
1092 if (DMA_TLB_IAIG(val
) != DMA_TLB_IIRG(type
))
1093 pr_debug("IOMMU: tlb flush request %Lx, actual %Lx\n",
1094 (unsigned long long)DMA_TLB_IIRG(type
),
1095 (unsigned long long)DMA_TLB_IAIG(val
));
1098 static struct device_domain_info
*iommu_support_dev_iotlb(
1099 struct dmar_domain
*domain
, int segment
, u8 bus
, u8 devfn
)
1102 unsigned long flags
;
1103 struct device_domain_info
*info
;
1104 struct intel_iommu
*iommu
= device_to_iommu(segment
, bus
, devfn
);
1106 if (!ecap_dev_iotlb_support(iommu
->ecap
))
1112 spin_lock_irqsave(&device_domain_lock
, flags
);
1113 list_for_each_entry(info
, &domain
->devices
, link
)
1114 if (info
->bus
== bus
&& info
->devfn
== devfn
) {
1118 spin_unlock_irqrestore(&device_domain_lock
, flags
);
1120 if (!found
|| !info
->dev
)
1123 if (!pci_find_ext_capability(info
->dev
, PCI_EXT_CAP_ID_ATS
))
1126 if (!dmar_find_matched_atsr_unit(info
->dev
))
1129 info
->iommu
= iommu
;
1134 static void iommu_enable_dev_iotlb(struct device_domain_info
*info
)
1139 pci_enable_ats(info
->dev
, VTD_PAGE_SHIFT
);
1142 static void iommu_disable_dev_iotlb(struct device_domain_info
*info
)
1144 if (!info
->dev
|| !pci_ats_enabled(info
->dev
))
1147 pci_disable_ats(info
->dev
);
1150 static void iommu_flush_dev_iotlb(struct dmar_domain
*domain
,
1151 u64 addr
, unsigned mask
)
1154 unsigned long flags
;
1155 struct device_domain_info
*info
;
1157 spin_lock_irqsave(&device_domain_lock
, flags
);
1158 list_for_each_entry(info
, &domain
->devices
, link
) {
1159 if (!info
->dev
|| !pci_ats_enabled(info
->dev
))
1162 sid
= info
->bus
<< 8 | info
->devfn
;
1163 qdep
= pci_ats_queue_depth(info
->dev
);
1164 qi_flush_dev_iotlb(info
->iommu
, sid
, qdep
, addr
, mask
);
1166 spin_unlock_irqrestore(&device_domain_lock
, flags
);
1169 static void iommu_flush_iotlb_psi(struct intel_iommu
*iommu
, u16 did
,
1170 unsigned long pfn
, unsigned int pages
, int map
)
1172 unsigned int mask
= ilog2(__roundup_pow_of_two(pages
));
1173 uint64_t addr
= (uint64_t)pfn
<< VTD_PAGE_SHIFT
;
1178 * Fallback to domain selective flush if no PSI support or the size is
1180 * PSI requires page size to be 2 ^ x, and the base address is naturally
1181 * aligned to the size
1183 if (!cap_pgsel_inv(iommu
->cap
) || mask
> cap_max_amask_val(iommu
->cap
))
1184 iommu
->flush
.flush_iotlb(iommu
, did
, 0, 0,
1187 iommu
->flush
.flush_iotlb(iommu
, did
, addr
, mask
,
1191 * In caching mode, changes of pages from non-present to present require
1192 * flush. However, device IOTLB doesn't need to be flushed in this case.
1194 if (!cap_caching_mode(iommu
->cap
) || !map
)
1195 iommu_flush_dev_iotlb(iommu
->domains
[did
], addr
, mask
);
1198 static void iommu_disable_protect_mem_regions(struct intel_iommu
*iommu
)
1201 unsigned long flags
;
1203 raw_spin_lock_irqsave(&iommu
->register_lock
, flags
);
1204 pmen
= readl(iommu
->reg
+ DMAR_PMEN_REG
);
1205 pmen
&= ~DMA_PMEN_EPM
;
1206 writel(pmen
, iommu
->reg
+ DMAR_PMEN_REG
);
1208 /* wait for the protected region status bit to clear */
1209 IOMMU_WAIT_OP(iommu
, DMAR_PMEN_REG
,
1210 readl
, !(pmen
& DMA_PMEN_PRS
), pmen
);
1212 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flags
);
1215 static int iommu_enable_translation(struct intel_iommu
*iommu
)
1218 unsigned long flags
;
1220 raw_spin_lock_irqsave(&iommu
->register_lock
, flags
);
1221 iommu
->gcmd
|= DMA_GCMD_TE
;
1222 writel(iommu
->gcmd
, iommu
->reg
+ DMAR_GCMD_REG
);
1224 /* Make sure hardware complete it */
1225 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
,
1226 readl
, (sts
& DMA_GSTS_TES
), sts
);
1228 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flags
);
1232 static int iommu_disable_translation(struct intel_iommu
*iommu
)
1237 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
1238 iommu
->gcmd
&= ~DMA_GCMD_TE
;
1239 writel(iommu
->gcmd
, iommu
->reg
+ DMAR_GCMD_REG
);
1241 /* Make sure hardware complete it */
1242 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
,
1243 readl
, (!(sts
& DMA_GSTS_TES
)), sts
);
1245 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1250 static int iommu_init_domains(struct intel_iommu
*iommu
)
1252 unsigned long ndomains
;
1253 unsigned long nlongs
;
1255 ndomains
= cap_ndoms(iommu
->cap
);
1256 pr_debug("IOMMU %d: Number of Domains supported <%ld>\n", iommu
->seq_id
,
1258 nlongs
= BITS_TO_LONGS(ndomains
);
1260 spin_lock_init(&iommu
->lock
);
1262 /* TBD: there might be 64K domains,
1263 * consider other allocation for future chip
1265 iommu
->domain_ids
= kcalloc(nlongs
, sizeof(unsigned long), GFP_KERNEL
);
1266 if (!iommu
->domain_ids
) {
1267 printk(KERN_ERR
"Allocating domain id array failed\n");
1270 iommu
->domains
= kcalloc(ndomains
, sizeof(struct dmar_domain
*),
1272 if (!iommu
->domains
) {
1273 printk(KERN_ERR
"Allocating domain array failed\n");
1278 * if Caching mode is set, then invalid translations are tagged
1279 * with domainid 0. Hence we need to pre-allocate it.
1281 if (cap_caching_mode(iommu
->cap
))
1282 set_bit(0, iommu
->domain_ids
);
1287 static void domain_exit(struct dmar_domain
*domain
);
1288 static void vm_domain_exit(struct dmar_domain
*domain
);
1290 void free_dmar_iommu(struct intel_iommu
*iommu
)
1292 struct dmar_domain
*domain
;
1294 unsigned long flags
;
1296 if ((iommu
->domains
) && (iommu
->domain_ids
)) {
1297 for_each_set_bit(i
, iommu
->domain_ids
, cap_ndoms(iommu
->cap
)) {
1298 domain
= iommu
->domains
[i
];
1299 clear_bit(i
, iommu
->domain_ids
);
1301 spin_lock_irqsave(&domain
->iommu_lock
, flags
);
1302 if (--domain
->iommu_count
== 0) {
1303 if (domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
)
1304 vm_domain_exit(domain
);
1306 domain_exit(domain
);
1308 spin_unlock_irqrestore(&domain
->iommu_lock
, flags
);
1312 if (iommu
->gcmd
& DMA_GCMD_TE
)
1313 iommu_disable_translation(iommu
);
1316 irq_set_handler_data(iommu
->irq
, NULL
);
1317 /* This will mask the irq */
1318 free_irq(iommu
->irq
, iommu
);
1319 destroy_irq(iommu
->irq
);
1322 kfree(iommu
->domains
);
1323 kfree(iommu
->domain_ids
);
1325 g_iommus
[iommu
->seq_id
] = NULL
;
1327 /* if all iommus are freed, free g_iommus */
1328 for (i
= 0; i
< g_num_of_iommus
; i
++) {
1333 if (i
== g_num_of_iommus
)
1336 /* free context mapping */
1337 free_context_table(iommu
);
1340 static struct dmar_domain
*alloc_domain(void)
1342 struct dmar_domain
*domain
;
1344 domain
= alloc_domain_mem();
1349 memset(domain
->iommu_bmp
, 0, sizeof(domain
->iommu_bmp
));
1355 static int iommu_attach_domain(struct dmar_domain
*domain
,
1356 struct intel_iommu
*iommu
)
1359 unsigned long ndomains
;
1360 unsigned long flags
;
1362 ndomains
= cap_ndoms(iommu
->cap
);
1364 spin_lock_irqsave(&iommu
->lock
, flags
);
1366 num
= find_first_zero_bit(iommu
->domain_ids
, ndomains
);
1367 if (num
>= ndomains
) {
1368 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1369 printk(KERN_ERR
"IOMMU: no free domain ids\n");
1374 set_bit(num
, iommu
->domain_ids
);
1375 set_bit(iommu
->seq_id
, domain
->iommu_bmp
);
1376 iommu
->domains
[num
] = domain
;
1377 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1382 static void iommu_detach_domain(struct dmar_domain
*domain
,
1383 struct intel_iommu
*iommu
)
1385 unsigned long flags
;
1389 spin_lock_irqsave(&iommu
->lock
, flags
);
1390 ndomains
= cap_ndoms(iommu
->cap
);
1391 for_each_set_bit(num
, iommu
->domain_ids
, ndomains
) {
1392 if (iommu
->domains
[num
] == domain
) {
1399 clear_bit(num
, iommu
->domain_ids
);
1400 clear_bit(iommu
->seq_id
, domain
->iommu_bmp
);
1401 iommu
->domains
[num
] = NULL
;
1403 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1406 static struct iova_domain reserved_iova_list
;
1407 static struct lock_class_key reserved_rbtree_key
;
1409 static int dmar_init_reserved_ranges(void)
1411 struct pci_dev
*pdev
= NULL
;
1415 init_iova_domain(&reserved_iova_list
, DMA_32BIT_PFN
);
1417 lockdep_set_class(&reserved_iova_list
.iova_rbtree_lock
,
1418 &reserved_rbtree_key
);
1420 /* IOAPIC ranges shouldn't be accessed by DMA */
1421 iova
= reserve_iova(&reserved_iova_list
, IOVA_PFN(IOAPIC_RANGE_START
),
1422 IOVA_PFN(IOAPIC_RANGE_END
));
1424 printk(KERN_ERR
"Reserve IOAPIC range failed\n");
1428 /* Reserve all PCI MMIO to avoid peer-to-peer access */
1429 for_each_pci_dev(pdev
) {
1432 for (i
= 0; i
< PCI_NUM_RESOURCES
; i
++) {
1433 r
= &pdev
->resource
[i
];
1434 if (!r
->flags
|| !(r
->flags
& IORESOURCE_MEM
))
1436 iova
= reserve_iova(&reserved_iova_list
,
1440 printk(KERN_ERR
"Reserve iova failed\n");
1448 static void domain_reserve_special_ranges(struct dmar_domain
*domain
)
1450 copy_reserved_iova(&reserved_iova_list
, &domain
->iovad
);
1453 static inline int guestwidth_to_adjustwidth(int gaw
)
1456 int r
= (gaw
- 12) % 9;
1467 static int domain_init(struct dmar_domain
*domain
, int guest_width
)
1469 struct intel_iommu
*iommu
;
1470 int adjust_width
, agaw
;
1471 unsigned long sagaw
;
1473 init_iova_domain(&domain
->iovad
, DMA_32BIT_PFN
);
1474 spin_lock_init(&domain
->iommu_lock
);
1476 domain_reserve_special_ranges(domain
);
1478 /* calculate AGAW */
1479 iommu
= domain_get_iommu(domain
);
1480 if (guest_width
> cap_mgaw(iommu
->cap
))
1481 guest_width
= cap_mgaw(iommu
->cap
);
1482 domain
->gaw
= guest_width
;
1483 adjust_width
= guestwidth_to_adjustwidth(guest_width
);
1484 agaw
= width_to_agaw(adjust_width
);
1485 sagaw
= cap_sagaw(iommu
->cap
);
1486 if (!test_bit(agaw
, &sagaw
)) {
1487 /* hardware doesn't support it, choose a bigger one */
1488 pr_debug("IOMMU: hardware doesn't support agaw %d\n", agaw
);
1489 agaw
= find_next_bit(&sagaw
, 5, agaw
);
1493 domain
->agaw
= agaw
;
1494 INIT_LIST_HEAD(&domain
->devices
);
1496 if (ecap_coherent(iommu
->ecap
))
1497 domain
->iommu_coherency
= 1;
1499 domain
->iommu_coherency
= 0;
1501 if (ecap_sc_support(iommu
->ecap
))
1502 domain
->iommu_snooping
= 1;
1504 domain
->iommu_snooping
= 0;
1506 domain
->iommu_superpage
= fls(cap_super_page_val(iommu
->cap
));
1507 domain
->iommu_count
= 1;
1508 domain
->nid
= iommu
->node
;
1510 /* always allocate the top pgd */
1511 domain
->pgd
= (struct dma_pte
*)alloc_pgtable_page(domain
->nid
);
1514 __iommu_flush_cache(iommu
, domain
->pgd
, PAGE_SIZE
);
1518 static void domain_exit(struct dmar_domain
*domain
)
1520 struct dmar_drhd_unit
*drhd
;
1521 struct intel_iommu
*iommu
;
1523 /* Domain 0 is reserved, so dont process it */
1527 /* Flush any lazy unmaps that may reference this domain */
1528 if (!intel_iommu_strict
)
1529 flush_unmaps_timeout(0);
1531 domain_remove_dev_info(domain
);
1533 put_iova_domain(&domain
->iovad
);
1536 dma_pte_clear_range(domain
, 0, DOMAIN_MAX_PFN(domain
->gaw
));
1538 /* free page tables */
1539 dma_pte_free_pagetable(domain
, 0, DOMAIN_MAX_PFN(domain
->gaw
));
1541 for_each_active_iommu(iommu
, drhd
)
1542 if (test_bit(iommu
->seq_id
, domain
->iommu_bmp
))
1543 iommu_detach_domain(domain
, iommu
);
1545 free_domain_mem(domain
);
1548 static int domain_context_mapping_one(struct dmar_domain
*domain
, int segment
,
1549 u8 bus
, u8 devfn
, int translation
)
1551 struct context_entry
*context
;
1552 unsigned long flags
;
1553 struct intel_iommu
*iommu
;
1554 struct dma_pte
*pgd
;
1556 unsigned long ndomains
;
1559 struct device_domain_info
*info
= NULL
;
1561 pr_debug("Set context mapping for %02x:%02x.%d\n",
1562 bus
, PCI_SLOT(devfn
), PCI_FUNC(devfn
));
1564 BUG_ON(!domain
->pgd
);
1565 BUG_ON(translation
!= CONTEXT_TT_PASS_THROUGH
&&
1566 translation
!= CONTEXT_TT_MULTI_LEVEL
);
1568 iommu
= device_to_iommu(segment
, bus
, devfn
);
1572 context
= device_to_context_entry(iommu
, bus
, devfn
);
1575 spin_lock_irqsave(&iommu
->lock
, flags
);
1576 if (context_present(context
)) {
1577 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1584 if (domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
||
1585 domain
->flags
& DOMAIN_FLAG_STATIC_IDENTITY
) {
1588 /* find an available domain id for this device in iommu */
1589 ndomains
= cap_ndoms(iommu
->cap
);
1590 for_each_set_bit(num
, iommu
->domain_ids
, ndomains
) {
1591 if (iommu
->domains
[num
] == domain
) {
1599 num
= find_first_zero_bit(iommu
->domain_ids
, ndomains
);
1600 if (num
>= ndomains
) {
1601 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1602 printk(KERN_ERR
"IOMMU: no free domain ids\n");
1606 set_bit(num
, iommu
->domain_ids
);
1607 iommu
->domains
[num
] = domain
;
1611 /* Skip top levels of page tables for
1612 * iommu which has less agaw than default.
1613 * Unnecessary for PT mode.
1615 if (translation
!= CONTEXT_TT_PASS_THROUGH
) {
1616 for (agaw
= domain
->agaw
; agaw
!= iommu
->agaw
; agaw
--) {
1617 pgd
= phys_to_virt(dma_pte_addr(pgd
));
1618 if (!dma_pte_present(pgd
)) {
1619 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1626 context_set_domain_id(context
, id
);
1628 if (translation
!= CONTEXT_TT_PASS_THROUGH
) {
1629 info
= iommu_support_dev_iotlb(domain
, segment
, bus
, devfn
);
1630 translation
= info
? CONTEXT_TT_DEV_IOTLB
:
1631 CONTEXT_TT_MULTI_LEVEL
;
1634 * In pass through mode, AW must be programmed to indicate the largest
1635 * AGAW value supported by hardware. And ASR is ignored by hardware.
1637 if (unlikely(translation
== CONTEXT_TT_PASS_THROUGH
))
1638 context_set_address_width(context
, iommu
->msagaw
);
1640 context_set_address_root(context
, virt_to_phys(pgd
));
1641 context_set_address_width(context
, iommu
->agaw
);
1644 context_set_translation_type(context
, translation
);
1645 context_set_fault_enable(context
);
1646 context_set_present(context
);
1647 domain_flush_cache(domain
, context
, sizeof(*context
));
1650 * It's a non-present to present mapping. If hardware doesn't cache
1651 * non-present entry we only need to flush the write-buffer. If the
1652 * _does_ cache non-present entries, then it does so in the special
1653 * domain #0, which we have to flush:
1655 if (cap_caching_mode(iommu
->cap
)) {
1656 iommu
->flush
.flush_context(iommu
, 0,
1657 (((u16
)bus
) << 8) | devfn
,
1658 DMA_CCMD_MASK_NOBIT
,
1659 DMA_CCMD_DEVICE_INVL
);
1660 iommu
->flush
.flush_iotlb(iommu
, domain
->id
, 0, 0, DMA_TLB_DSI_FLUSH
);
1662 iommu_flush_write_buffer(iommu
);
1664 iommu_enable_dev_iotlb(info
);
1665 spin_unlock_irqrestore(&iommu
->lock
, flags
);
1667 spin_lock_irqsave(&domain
->iommu_lock
, flags
);
1668 if (!test_and_set_bit(iommu
->seq_id
, domain
->iommu_bmp
)) {
1669 domain
->iommu_count
++;
1670 if (domain
->iommu_count
== 1)
1671 domain
->nid
= iommu
->node
;
1672 domain_update_iommu_cap(domain
);
1674 spin_unlock_irqrestore(&domain
->iommu_lock
, flags
);
1679 domain_context_mapping(struct dmar_domain
*domain
, struct pci_dev
*pdev
,
1683 struct pci_dev
*tmp
, *parent
;
1685 ret
= domain_context_mapping_one(domain
, pci_domain_nr(pdev
->bus
),
1686 pdev
->bus
->number
, pdev
->devfn
,
1691 /* dependent device mapping */
1692 tmp
= pci_find_upstream_pcie_bridge(pdev
);
1695 /* Secondary interface's bus number and devfn 0 */
1696 parent
= pdev
->bus
->self
;
1697 while (parent
!= tmp
) {
1698 ret
= domain_context_mapping_one(domain
,
1699 pci_domain_nr(parent
->bus
),
1700 parent
->bus
->number
,
1701 parent
->devfn
, translation
);
1704 parent
= parent
->bus
->self
;
1706 if (pci_is_pcie(tmp
)) /* this is a PCIe-to-PCI bridge */
1707 return domain_context_mapping_one(domain
,
1708 pci_domain_nr(tmp
->subordinate
),
1709 tmp
->subordinate
->number
, 0,
1711 else /* this is a legacy PCI bridge */
1712 return domain_context_mapping_one(domain
,
1713 pci_domain_nr(tmp
->bus
),
1719 static int domain_context_mapped(struct pci_dev
*pdev
)
1722 struct pci_dev
*tmp
, *parent
;
1723 struct intel_iommu
*iommu
;
1725 iommu
= device_to_iommu(pci_domain_nr(pdev
->bus
), pdev
->bus
->number
,
1730 ret
= device_context_mapped(iommu
, pdev
->bus
->number
, pdev
->devfn
);
1733 /* dependent device mapping */
1734 tmp
= pci_find_upstream_pcie_bridge(pdev
);
1737 /* Secondary interface's bus number and devfn 0 */
1738 parent
= pdev
->bus
->self
;
1739 while (parent
!= tmp
) {
1740 ret
= device_context_mapped(iommu
, parent
->bus
->number
,
1744 parent
= parent
->bus
->self
;
1746 if (pci_is_pcie(tmp
))
1747 return device_context_mapped(iommu
, tmp
->subordinate
->number
,
1750 return device_context_mapped(iommu
, tmp
->bus
->number
,
1754 /* Returns a number of VTD pages, but aligned to MM page size */
1755 static inline unsigned long aligned_nrpages(unsigned long host_addr
,
1758 host_addr
&= ~PAGE_MASK
;
1759 return PAGE_ALIGN(host_addr
+ size
) >> VTD_PAGE_SHIFT
;
1762 /* Return largest possible superpage level for a given mapping */
1763 static inline int hardware_largepage_caps(struct dmar_domain
*domain
,
1764 unsigned long iov_pfn
,
1765 unsigned long phy_pfn
,
1766 unsigned long pages
)
1768 int support
, level
= 1;
1769 unsigned long pfnmerge
;
1771 support
= domain
->iommu_superpage
;
1773 /* To use a large page, the virtual *and* physical addresses
1774 must be aligned to 2MiB/1GiB/etc. Lower bits set in either
1775 of them will mean we have to use smaller pages. So just
1776 merge them and check both at once. */
1777 pfnmerge
= iov_pfn
| phy_pfn
;
1779 while (support
&& !(pfnmerge
& ~VTD_STRIDE_MASK
)) {
1780 pages
>>= VTD_STRIDE_SHIFT
;
1783 pfnmerge
>>= VTD_STRIDE_SHIFT
;
1790 static int __domain_mapping(struct dmar_domain
*domain
, unsigned long iov_pfn
,
1791 struct scatterlist
*sg
, unsigned long phys_pfn
,
1792 unsigned long nr_pages
, int prot
)
1794 struct dma_pte
*first_pte
= NULL
, *pte
= NULL
;
1795 phys_addr_t
uninitialized_var(pteval
);
1796 int addr_width
= agaw_to_width(domain
->agaw
) - VTD_PAGE_SHIFT
;
1797 unsigned long sg_res
;
1798 unsigned int largepage_lvl
= 0;
1799 unsigned long lvl_pages
= 0;
1801 BUG_ON(addr_width
< BITS_PER_LONG
&& (iov_pfn
+ nr_pages
- 1) >> addr_width
);
1803 if ((prot
& (DMA_PTE_READ
|DMA_PTE_WRITE
)) == 0)
1806 prot
&= DMA_PTE_READ
| DMA_PTE_WRITE
| DMA_PTE_SNP
;
1811 sg_res
= nr_pages
+ 1;
1812 pteval
= ((phys_addr_t
)phys_pfn
<< VTD_PAGE_SHIFT
) | prot
;
1815 while (nr_pages
> 0) {
1819 sg_res
= aligned_nrpages(sg
->offset
, sg
->length
);
1820 sg
->dma_address
= ((dma_addr_t
)iov_pfn
<< VTD_PAGE_SHIFT
) + sg
->offset
;
1821 sg
->dma_length
= sg
->length
;
1822 pteval
= page_to_phys(sg_page(sg
)) | prot
;
1823 phys_pfn
= pteval
>> VTD_PAGE_SHIFT
;
1827 largepage_lvl
= hardware_largepage_caps(domain
, iov_pfn
, phys_pfn
, sg_res
);
1829 first_pte
= pte
= pfn_to_dma_pte(domain
, iov_pfn
, largepage_lvl
);
1832 /* It is large page*/
1833 if (largepage_lvl
> 1) {
1834 pteval
|= DMA_PTE_LARGE_PAGE
;
1835 /* Ensure that old small page tables are removed to make room
1836 for superpage, if they exist. */
1837 dma_pte_clear_range(domain
, iov_pfn
,
1838 iov_pfn
+ lvl_to_nr_pages(largepage_lvl
) - 1);
1839 dma_pte_free_pagetable(domain
, iov_pfn
,
1840 iov_pfn
+ lvl_to_nr_pages(largepage_lvl
) - 1);
1842 pteval
&= ~(uint64_t)DMA_PTE_LARGE_PAGE
;
1846 /* We don't need lock here, nobody else
1847 * touches the iova range
1849 tmp
= cmpxchg64_local(&pte
->val
, 0ULL, pteval
);
1851 static int dumps
= 5;
1852 printk(KERN_CRIT
"ERROR: DMA PTE for vPFN 0x%lx already set (to %llx not %llx)\n",
1853 iov_pfn
, tmp
, (unsigned long long)pteval
);
1856 debug_dma_dump_mappings(NULL
);
1861 lvl_pages
= lvl_to_nr_pages(largepage_lvl
);
1863 BUG_ON(nr_pages
< lvl_pages
);
1864 BUG_ON(sg_res
< lvl_pages
);
1866 nr_pages
-= lvl_pages
;
1867 iov_pfn
+= lvl_pages
;
1868 phys_pfn
+= lvl_pages
;
1869 pteval
+= lvl_pages
* VTD_PAGE_SIZE
;
1870 sg_res
-= lvl_pages
;
1872 /* If the next PTE would be the first in a new page, then we
1873 need to flush the cache on the entries we've just written.
1874 And then we'll need to recalculate 'pte', so clear it and
1875 let it get set again in the if (!pte) block above.
1877 If we're done (!nr_pages) we need to flush the cache too.
1879 Also if we've been setting superpages, we may need to
1880 recalculate 'pte' and switch back to smaller pages for the
1881 end of the mapping, if the trailing size is not enough to
1882 use another superpage (i.e. sg_res < lvl_pages). */
1884 if (!nr_pages
|| first_pte_in_page(pte
) ||
1885 (largepage_lvl
> 1 && sg_res
< lvl_pages
)) {
1886 domain_flush_cache(domain
, first_pte
,
1887 (void *)pte
- (void *)first_pte
);
1891 if (!sg_res
&& nr_pages
)
1897 static inline int domain_sg_mapping(struct dmar_domain
*domain
, unsigned long iov_pfn
,
1898 struct scatterlist
*sg
, unsigned long nr_pages
,
1901 return __domain_mapping(domain
, iov_pfn
, sg
, 0, nr_pages
, prot
);
1904 static inline int domain_pfn_mapping(struct dmar_domain
*domain
, unsigned long iov_pfn
,
1905 unsigned long phys_pfn
, unsigned long nr_pages
,
1908 return __domain_mapping(domain
, iov_pfn
, NULL
, phys_pfn
, nr_pages
, prot
);
1911 static void iommu_detach_dev(struct intel_iommu
*iommu
, u8 bus
, u8 devfn
)
1916 clear_context_table(iommu
, bus
, devfn
);
1917 iommu
->flush
.flush_context(iommu
, 0, 0, 0,
1918 DMA_CCMD_GLOBAL_INVL
);
1919 iommu
->flush
.flush_iotlb(iommu
, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH
);
1922 static inline void unlink_domain_info(struct device_domain_info
*info
)
1924 assert_spin_locked(&device_domain_lock
);
1925 list_del(&info
->link
);
1926 list_del(&info
->global
);
1928 info
->dev
->dev
.archdata
.iommu
= NULL
;
1931 static void domain_remove_dev_info(struct dmar_domain
*domain
)
1933 struct device_domain_info
*info
;
1934 unsigned long flags
;
1935 struct intel_iommu
*iommu
;
1937 spin_lock_irqsave(&device_domain_lock
, flags
);
1938 while (!list_empty(&domain
->devices
)) {
1939 info
= list_entry(domain
->devices
.next
,
1940 struct device_domain_info
, link
);
1941 unlink_domain_info(info
);
1942 spin_unlock_irqrestore(&device_domain_lock
, flags
);
1944 iommu_disable_dev_iotlb(info
);
1945 iommu
= device_to_iommu(info
->segment
, info
->bus
, info
->devfn
);
1946 iommu_detach_dev(iommu
, info
->bus
, info
->devfn
);
1947 free_devinfo_mem(info
);
1949 spin_lock_irqsave(&device_domain_lock
, flags
);
1951 spin_unlock_irqrestore(&device_domain_lock
, flags
);
1956 * Note: we use struct pci_dev->dev.archdata.iommu stores the info
1958 static struct dmar_domain
*
1959 find_domain(struct pci_dev
*pdev
)
1961 struct device_domain_info
*info
;
1963 /* No lock here, assumes no domain exit in normal case */
1964 info
= pdev
->dev
.archdata
.iommu
;
1966 return info
->domain
;
1970 /* domain is initialized */
1971 static struct dmar_domain
*get_domain_for_dev(struct pci_dev
*pdev
, int gaw
)
1973 struct dmar_domain
*domain
, *found
= NULL
;
1974 struct intel_iommu
*iommu
;
1975 struct dmar_drhd_unit
*drhd
;
1976 struct device_domain_info
*info
, *tmp
;
1977 struct pci_dev
*dev_tmp
;
1978 unsigned long flags
;
1979 int bus
= 0, devfn
= 0;
1983 domain
= find_domain(pdev
);
1987 segment
= pci_domain_nr(pdev
->bus
);
1989 dev_tmp
= pci_find_upstream_pcie_bridge(pdev
);
1991 if (pci_is_pcie(dev_tmp
)) {
1992 bus
= dev_tmp
->subordinate
->number
;
1995 bus
= dev_tmp
->bus
->number
;
1996 devfn
= dev_tmp
->devfn
;
1998 spin_lock_irqsave(&device_domain_lock
, flags
);
1999 list_for_each_entry(info
, &device_domain_list
, global
) {
2000 if (info
->segment
== segment
&&
2001 info
->bus
== bus
&& info
->devfn
== devfn
) {
2002 found
= info
->domain
;
2006 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2007 /* pcie-pci bridge already has a domain, uses it */
2014 domain
= alloc_domain();
2018 /* Allocate new domain for the device */
2019 drhd
= dmar_find_matched_drhd_unit(pdev
);
2021 printk(KERN_ERR
"IOMMU: can't find DMAR for device %s\n",
2023 free_domain_mem(domain
);
2026 iommu
= drhd
->iommu
;
2028 ret
= iommu_attach_domain(domain
, iommu
);
2030 free_domain_mem(domain
);
2034 if (domain_init(domain
, gaw
)) {
2035 domain_exit(domain
);
2039 /* register pcie-to-pci device */
2041 info
= alloc_devinfo_mem();
2043 domain_exit(domain
);
2046 info
->segment
= segment
;
2048 info
->devfn
= devfn
;
2050 info
->domain
= domain
;
2051 /* This domain is shared by devices under p2p bridge */
2052 domain
->flags
|= DOMAIN_FLAG_P2P_MULTIPLE_DEVICES
;
2054 /* pcie-to-pci bridge already has a domain, uses it */
2056 spin_lock_irqsave(&device_domain_lock
, flags
);
2057 list_for_each_entry(tmp
, &device_domain_list
, global
) {
2058 if (tmp
->segment
== segment
&&
2059 tmp
->bus
== bus
&& tmp
->devfn
== devfn
) {
2060 found
= tmp
->domain
;
2065 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2066 free_devinfo_mem(info
);
2067 domain_exit(domain
);
2070 list_add(&info
->link
, &domain
->devices
);
2071 list_add(&info
->global
, &device_domain_list
);
2072 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2077 info
= alloc_devinfo_mem();
2080 info
->segment
= segment
;
2081 info
->bus
= pdev
->bus
->number
;
2082 info
->devfn
= pdev
->devfn
;
2084 info
->domain
= domain
;
2085 spin_lock_irqsave(&device_domain_lock
, flags
);
2086 /* somebody is fast */
2087 found
= find_domain(pdev
);
2088 if (found
!= NULL
) {
2089 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2090 if (found
!= domain
) {
2091 domain_exit(domain
);
2094 free_devinfo_mem(info
);
2097 list_add(&info
->link
, &domain
->devices
);
2098 list_add(&info
->global
, &device_domain_list
);
2099 pdev
->dev
.archdata
.iommu
= info
;
2100 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2103 /* recheck it here, maybe others set it */
2104 return find_domain(pdev
);
2107 static int iommu_identity_mapping
;
2108 #define IDENTMAP_ALL 1
2109 #define IDENTMAP_GFX 2
2110 #define IDENTMAP_AZALIA 4
2112 static int iommu_domain_identity_map(struct dmar_domain
*domain
,
2113 unsigned long long start
,
2114 unsigned long long end
)
2116 unsigned long first_vpfn
= start
>> VTD_PAGE_SHIFT
;
2117 unsigned long last_vpfn
= end
>> VTD_PAGE_SHIFT
;
2119 if (!reserve_iova(&domain
->iovad
, dma_to_mm_pfn(first_vpfn
),
2120 dma_to_mm_pfn(last_vpfn
))) {
2121 printk(KERN_ERR
"IOMMU: reserve iova failed\n");
2125 pr_debug("Mapping reserved region %llx-%llx for domain %d\n",
2126 start
, end
, domain
->id
);
2128 * RMRR range might have overlap with physical memory range,
2131 dma_pte_clear_range(domain
, first_vpfn
, last_vpfn
);
2133 return domain_pfn_mapping(domain
, first_vpfn
, first_vpfn
,
2134 last_vpfn
- first_vpfn
+ 1,
2135 DMA_PTE_READ
|DMA_PTE_WRITE
);
2138 static int iommu_prepare_identity_map(struct pci_dev
*pdev
,
2139 unsigned long long start
,
2140 unsigned long long end
)
2142 struct dmar_domain
*domain
;
2145 domain
= get_domain_for_dev(pdev
, DEFAULT_DOMAIN_ADDRESS_WIDTH
);
2149 /* For _hardware_ passthrough, don't bother. But for software
2150 passthrough, we do it anyway -- it may indicate a memory
2151 range which is reserved in E820, so which didn't get set
2152 up to start with in si_domain */
2153 if (domain
== si_domain
&& hw_pass_through
) {
2154 printk("Ignoring identity map for HW passthrough device %s [0x%Lx - 0x%Lx]\n",
2155 pci_name(pdev
), start
, end
);
2160 "IOMMU: Setting identity map for device %s [0x%Lx - 0x%Lx]\n",
2161 pci_name(pdev
), start
, end
);
2164 WARN(1, "Your BIOS is broken; RMRR ends before it starts!\n"
2165 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2166 dmi_get_system_info(DMI_BIOS_VENDOR
),
2167 dmi_get_system_info(DMI_BIOS_VERSION
),
2168 dmi_get_system_info(DMI_PRODUCT_VERSION
));
2173 if (end
>> agaw_to_width(domain
->agaw
)) {
2174 WARN(1, "Your BIOS is broken; RMRR exceeds permitted address width (%d bits)\n"
2175 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2176 agaw_to_width(domain
->agaw
),
2177 dmi_get_system_info(DMI_BIOS_VENDOR
),
2178 dmi_get_system_info(DMI_BIOS_VERSION
),
2179 dmi_get_system_info(DMI_PRODUCT_VERSION
));
2184 ret
= iommu_domain_identity_map(domain
, start
, end
);
2188 /* context entry init */
2189 ret
= domain_context_mapping(domain
, pdev
, CONTEXT_TT_MULTI_LEVEL
);
2196 domain_exit(domain
);
2200 static inline int iommu_prepare_rmrr_dev(struct dmar_rmrr_unit
*rmrr
,
2201 struct pci_dev
*pdev
)
2203 if (pdev
->dev
.archdata
.iommu
== DUMMY_DEVICE_DOMAIN_INFO
)
2205 return iommu_prepare_identity_map(pdev
, rmrr
->base_address
,
2209 #ifdef CONFIG_INTEL_IOMMU_FLOPPY_WA
2210 static inline void iommu_prepare_isa(void)
2212 struct pci_dev
*pdev
;
2215 pdev
= pci_get_class(PCI_CLASS_BRIDGE_ISA
<< 8, NULL
);
2219 printk(KERN_INFO
"IOMMU: Prepare 0-16MiB unity mapping for LPC\n");
2220 ret
= iommu_prepare_identity_map(pdev
, 0, 16*1024*1024 - 1);
2223 printk(KERN_ERR
"IOMMU: Failed to create 0-16MiB identity map; "
2224 "floppy might not work\n");
2228 static inline void iommu_prepare_isa(void)
2232 #endif /* !CONFIG_INTEL_IOMMU_FLPY_WA */
2234 static int md_domain_init(struct dmar_domain
*domain
, int guest_width
);
2236 static int __init
si_domain_init(int hw
)
2238 struct dmar_drhd_unit
*drhd
;
2239 struct intel_iommu
*iommu
;
2242 si_domain
= alloc_domain();
2246 pr_debug("Identity mapping domain is domain %d\n", si_domain
->id
);
2248 for_each_active_iommu(iommu
, drhd
) {
2249 ret
= iommu_attach_domain(si_domain
, iommu
);
2251 domain_exit(si_domain
);
2256 if (md_domain_init(si_domain
, DEFAULT_DOMAIN_ADDRESS_WIDTH
)) {
2257 domain_exit(si_domain
);
2261 si_domain
->flags
= DOMAIN_FLAG_STATIC_IDENTITY
;
2266 for_each_online_node(nid
) {
2267 unsigned long start_pfn
, end_pfn
;
2270 for_each_mem_pfn_range(i
, nid
, &start_pfn
, &end_pfn
, NULL
) {
2271 ret
= iommu_domain_identity_map(si_domain
,
2272 PFN_PHYS(start_pfn
), PFN_PHYS(end_pfn
));
2281 static void domain_remove_one_dev_info(struct dmar_domain
*domain
,
2282 struct pci_dev
*pdev
);
2283 static int identity_mapping(struct pci_dev
*pdev
)
2285 struct device_domain_info
*info
;
2287 if (likely(!iommu_identity_mapping
))
2290 info
= pdev
->dev
.archdata
.iommu
;
2291 if (info
&& info
!= DUMMY_DEVICE_DOMAIN_INFO
)
2292 return (info
->domain
== si_domain
);
2297 static int domain_add_dev_info(struct dmar_domain
*domain
,
2298 struct pci_dev
*pdev
,
2301 struct device_domain_info
*info
;
2302 unsigned long flags
;
2305 info
= alloc_devinfo_mem();
2309 info
->segment
= pci_domain_nr(pdev
->bus
);
2310 info
->bus
= pdev
->bus
->number
;
2311 info
->devfn
= pdev
->devfn
;
2313 info
->domain
= domain
;
2315 spin_lock_irqsave(&device_domain_lock
, flags
);
2316 list_add(&info
->link
, &domain
->devices
);
2317 list_add(&info
->global
, &device_domain_list
);
2318 pdev
->dev
.archdata
.iommu
= info
;
2319 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2321 ret
= domain_context_mapping(domain
, pdev
, translation
);
2323 spin_lock_irqsave(&device_domain_lock
, flags
);
2324 unlink_domain_info(info
);
2325 spin_unlock_irqrestore(&device_domain_lock
, flags
);
2326 free_devinfo_mem(info
);
2333 static bool device_has_rmrr(struct pci_dev
*dev
)
2335 struct dmar_rmrr_unit
*rmrr
;
2338 for_each_rmrr_units(rmrr
) {
2339 for (i
= 0; i
< rmrr
->devices_cnt
; i
++) {
2341 * Return TRUE if this RMRR contains the device that
2344 if (rmrr
->devices
[i
] == dev
)
2351 static int iommu_should_identity_map(struct pci_dev
*pdev
, int startup
)
2355 * We want to prevent any device associated with an RMRR from
2356 * getting placed into the SI Domain. This is done because
2357 * problems exist when devices are moved in and out of domains
2358 * and their respective RMRR info is lost. We exempt USB devices
2359 * from this process due to their usage of RMRRs that are known
2360 * to not be needed after BIOS hand-off to OS.
2362 if (device_has_rmrr(pdev
) &&
2363 (pdev
->class >> 8) != PCI_CLASS_SERIAL_USB
)
2366 if ((iommu_identity_mapping
& IDENTMAP_AZALIA
) && IS_AZALIA(pdev
))
2369 if ((iommu_identity_mapping
& IDENTMAP_GFX
) && IS_GFX_DEVICE(pdev
))
2372 if (!(iommu_identity_mapping
& IDENTMAP_ALL
))
2376 * We want to start off with all devices in the 1:1 domain, and
2377 * take them out later if we find they can't access all of memory.
2379 * However, we can't do this for PCI devices behind bridges,
2380 * because all PCI devices behind the same bridge will end up
2381 * with the same source-id on their transactions.
2383 * Practically speaking, we can't change things around for these
2384 * devices at run-time, because we can't be sure there'll be no
2385 * DMA transactions in flight for any of their siblings.
2387 * So PCI devices (unless they're on the root bus) as well as
2388 * their parent PCI-PCI or PCIe-PCI bridges must be left _out_ of
2389 * the 1:1 domain, just in _case_ one of their siblings turns out
2390 * not to be able to map all of memory.
2392 if (!pci_is_pcie(pdev
)) {
2393 if (!pci_is_root_bus(pdev
->bus
))
2395 if (pdev
->class >> 8 == PCI_CLASS_BRIDGE_PCI
)
2397 } else if (pci_pcie_type(pdev
) == PCI_EXP_TYPE_PCI_BRIDGE
)
2401 * At boot time, we don't yet know if devices will be 64-bit capable.
2402 * Assume that they will -- if they turn out not to be, then we can
2403 * take them out of the 1:1 domain later.
2407 * If the device's dma_mask is less than the system's memory
2408 * size then this is not a candidate for identity mapping.
2410 u64 dma_mask
= pdev
->dma_mask
;
2412 if (pdev
->dev
.coherent_dma_mask
&&
2413 pdev
->dev
.coherent_dma_mask
< dma_mask
)
2414 dma_mask
= pdev
->dev
.coherent_dma_mask
;
2416 return dma_mask
>= dma_get_required_mask(&pdev
->dev
);
2422 static int __init
iommu_prepare_static_identity_mapping(int hw
)
2424 struct pci_dev
*pdev
= NULL
;
2427 ret
= si_domain_init(hw
);
2431 for_each_pci_dev(pdev
) {
2432 if (iommu_should_identity_map(pdev
, 1)) {
2433 ret
= domain_add_dev_info(si_domain
, pdev
,
2434 hw
? CONTEXT_TT_PASS_THROUGH
:
2435 CONTEXT_TT_MULTI_LEVEL
);
2437 /* device not associated with an iommu */
2442 pr_info("IOMMU: %s identity mapping for device %s\n",
2443 hw
? "hardware" : "software", pci_name(pdev
));
2450 static int __init
init_dmars(void)
2452 struct dmar_drhd_unit
*drhd
;
2453 struct dmar_rmrr_unit
*rmrr
;
2454 struct pci_dev
*pdev
;
2455 struct intel_iommu
*iommu
;
2461 * initialize and program root entry to not present
2464 for_each_drhd_unit(drhd
) {
2466 * lock not needed as this is only incremented in the single
2467 * threaded kernel __init code path all other access are read
2470 if (g_num_of_iommus
< IOMMU_UNITS_SUPPORTED
) {
2474 printk_once(KERN_ERR
"intel-iommu: exceeded %d IOMMUs\n",
2475 IOMMU_UNITS_SUPPORTED
);
2478 g_iommus
= kcalloc(g_num_of_iommus
, sizeof(struct intel_iommu
*),
2481 printk(KERN_ERR
"Allocating global iommu array failed\n");
2486 deferred_flush
= kzalloc(g_num_of_iommus
*
2487 sizeof(struct deferred_flush_tables
), GFP_KERNEL
);
2488 if (!deferred_flush
) {
2493 for_each_drhd_unit(drhd
) {
2497 iommu
= drhd
->iommu
;
2498 g_iommus
[iommu
->seq_id
] = iommu
;
2500 ret
= iommu_init_domains(iommu
);
2506 * we could share the same root & context tables
2507 * among all IOMMU's. Need to Split it later.
2509 ret
= iommu_alloc_root_entry(iommu
);
2511 printk(KERN_ERR
"IOMMU: allocate root entry failed\n");
2514 if (!ecap_pass_through(iommu
->ecap
))
2515 hw_pass_through
= 0;
2519 * Start from the sane iommu hardware state.
2521 for_each_drhd_unit(drhd
) {
2525 iommu
= drhd
->iommu
;
2528 * If the queued invalidation is already initialized by us
2529 * (for example, while enabling interrupt-remapping) then
2530 * we got the things already rolling from a sane state.
2536 * Clear any previous faults.
2538 dmar_fault(-1, iommu
);
2540 * Disable queued invalidation if supported and already enabled
2541 * before OS handover.
2543 dmar_disable_qi(iommu
);
2546 for_each_drhd_unit(drhd
) {
2550 iommu
= drhd
->iommu
;
2552 if (dmar_enable_qi(iommu
)) {
2554 * Queued Invalidate not enabled, use Register Based
2557 iommu
->flush
.flush_context
= __iommu_flush_context
;
2558 iommu
->flush
.flush_iotlb
= __iommu_flush_iotlb
;
2559 printk(KERN_INFO
"IOMMU %d 0x%Lx: using Register based "
2562 (unsigned long long)drhd
->reg_base_addr
);
2564 iommu
->flush
.flush_context
= qi_flush_context
;
2565 iommu
->flush
.flush_iotlb
= qi_flush_iotlb
;
2566 printk(KERN_INFO
"IOMMU %d 0x%Lx: using Queued "
2569 (unsigned long long)drhd
->reg_base_addr
);
2573 if (iommu_pass_through
)
2574 iommu_identity_mapping
|= IDENTMAP_ALL
;
2576 #ifdef CONFIG_INTEL_IOMMU_BROKEN_GFX_WA
2577 iommu_identity_mapping
|= IDENTMAP_GFX
;
2580 check_tylersburg_isoch();
2583 * If pass through is not set or not enabled, setup context entries for
2584 * identity mappings for rmrr, gfx, and isa and may fall back to static
2585 * identity mapping if iommu_identity_mapping is set.
2587 if (iommu_identity_mapping
) {
2588 ret
= iommu_prepare_static_identity_mapping(hw_pass_through
);
2590 printk(KERN_CRIT
"Failed to setup IOMMU pass-through\n");
2596 * for each dev attached to rmrr
2598 * locate drhd for dev, alloc domain for dev
2599 * allocate free domain
2600 * allocate page table entries for rmrr
2601 * if context not allocated for bus
2602 * allocate and init context
2603 * set present in root table for this bus
2604 * init context with domain, translation etc
2608 printk(KERN_INFO
"IOMMU: Setting RMRR:\n");
2609 for_each_rmrr_units(rmrr
) {
2610 for (i
= 0; i
< rmrr
->devices_cnt
; i
++) {
2611 pdev
= rmrr
->devices
[i
];
2613 * some BIOS lists non-exist devices in DMAR
2618 ret
= iommu_prepare_rmrr_dev(rmrr
, pdev
);
2621 "IOMMU: mapping reserved region failed\n");
2625 iommu_prepare_isa();
2630 * global invalidate context cache
2631 * global invalidate iotlb
2632 * enable translation
2634 for_each_drhd_unit(drhd
) {
2635 if (drhd
->ignored
) {
2637 * we always have to disable PMRs or DMA may fail on
2641 iommu_disable_protect_mem_regions(drhd
->iommu
);
2644 iommu
= drhd
->iommu
;
2646 iommu_flush_write_buffer(iommu
);
2648 ret
= dmar_set_interrupt(iommu
);
2652 iommu_set_root_entry(iommu
);
2654 iommu
->flush
.flush_context(iommu
, 0, 0, 0, DMA_CCMD_GLOBAL_INVL
);
2655 iommu
->flush
.flush_iotlb(iommu
, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH
);
2657 ret
= iommu_enable_translation(iommu
);
2661 iommu_disable_protect_mem_regions(iommu
);
2666 for_each_drhd_unit(drhd
) {
2669 iommu
= drhd
->iommu
;
2676 /* This takes a number of _MM_ pages, not VTD pages */
2677 static struct iova
*intel_alloc_iova(struct device
*dev
,
2678 struct dmar_domain
*domain
,
2679 unsigned long nrpages
, uint64_t dma_mask
)
2681 struct pci_dev
*pdev
= to_pci_dev(dev
);
2682 struct iova
*iova
= NULL
;
2684 /* Restrict dma_mask to the width that the iommu can handle */
2685 dma_mask
= min_t(uint64_t, DOMAIN_MAX_ADDR(domain
->gaw
), dma_mask
);
2687 if (!dmar_forcedac
&& dma_mask
> DMA_BIT_MASK(32)) {
2689 * First try to allocate an io virtual address in
2690 * DMA_BIT_MASK(32) and if that fails then try allocating
2693 iova
= alloc_iova(&domain
->iovad
, nrpages
,
2694 IOVA_PFN(DMA_BIT_MASK(32)), 1);
2698 iova
= alloc_iova(&domain
->iovad
, nrpages
, IOVA_PFN(dma_mask
), 1);
2699 if (unlikely(!iova
)) {
2700 printk(KERN_ERR
"Allocating %ld-page iova for %s failed",
2701 nrpages
, pci_name(pdev
));
2708 static struct dmar_domain
*__get_valid_domain_for_dev(struct pci_dev
*pdev
)
2710 struct dmar_domain
*domain
;
2713 domain
= get_domain_for_dev(pdev
,
2714 DEFAULT_DOMAIN_ADDRESS_WIDTH
);
2717 "Allocating domain for %s failed", pci_name(pdev
));
2721 /* make sure context mapping is ok */
2722 if (unlikely(!domain_context_mapped(pdev
))) {
2723 ret
= domain_context_mapping(domain
, pdev
,
2724 CONTEXT_TT_MULTI_LEVEL
);
2727 "Domain context map for %s failed",
2736 static inline struct dmar_domain
*get_valid_domain_for_dev(struct pci_dev
*dev
)
2738 struct device_domain_info
*info
;
2740 /* No lock here, assumes no domain exit in normal case */
2741 info
= dev
->dev
.archdata
.iommu
;
2743 return info
->domain
;
2745 return __get_valid_domain_for_dev(dev
);
2748 static int iommu_dummy(struct pci_dev
*pdev
)
2750 return pdev
->dev
.archdata
.iommu
== DUMMY_DEVICE_DOMAIN_INFO
;
2753 /* Check if the pdev needs to go through non-identity map and unmap process.*/
2754 static int iommu_no_mapping(struct device
*dev
)
2756 struct pci_dev
*pdev
;
2759 if (unlikely(dev
->bus
!= &pci_bus_type
))
2762 pdev
= to_pci_dev(dev
);
2763 if (iommu_dummy(pdev
))
2766 if (!iommu_identity_mapping
)
2769 found
= identity_mapping(pdev
);
2771 if (iommu_should_identity_map(pdev
, 0))
2775 * 32 bit DMA is removed from si_domain and fall back
2776 * to non-identity mapping.
2778 domain_remove_one_dev_info(si_domain
, pdev
);
2779 printk(KERN_INFO
"32bit %s uses non-identity mapping\n",
2785 * In case of a detached 64 bit DMA device from vm, the device
2786 * is put into si_domain for identity mapping.
2788 if (iommu_should_identity_map(pdev
, 0)) {
2790 ret
= domain_add_dev_info(si_domain
, pdev
,
2792 CONTEXT_TT_PASS_THROUGH
:
2793 CONTEXT_TT_MULTI_LEVEL
);
2795 printk(KERN_INFO
"64bit %s uses identity mapping\n",
2805 static dma_addr_t
__intel_map_single(struct device
*hwdev
, phys_addr_t paddr
,
2806 size_t size
, int dir
, u64 dma_mask
)
2808 struct pci_dev
*pdev
= to_pci_dev(hwdev
);
2809 struct dmar_domain
*domain
;
2810 phys_addr_t start_paddr
;
2814 struct intel_iommu
*iommu
;
2815 unsigned long paddr_pfn
= paddr
>> PAGE_SHIFT
;
2817 BUG_ON(dir
== DMA_NONE
);
2819 if (iommu_no_mapping(hwdev
))
2822 domain
= get_valid_domain_for_dev(pdev
);
2826 iommu
= domain_get_iommu(domain
);
2827 size
= aligned_nrpages(paddr
, size
);
2829 iova
= intel_alloc_iova(hwdev
, domain
, dma_to_mm_pfn(size
), dma_mask
);
2834 * Check if DMAR supports zero-length reads on write only
2837 if (dir
== DMA_TO_DEVICE
|| dir
== DMA_BIDIRECTIONAL
|| \
2838 !cap_zlr(iommu
->cap
))
2839 prot
|= DMA_PTE_READ
;
2840 if (dir
== DMA_FROM_DEVICE
|| dir
== DMA_BIDIRECTIONAL
)
2841 prot
|= DMA_PTE_WRITE
;
2843 * paddr - (paddr + size) might be partial page, we should map the whole
2844 * page. Note: if two part of one page are separately mapped, we
2845 * might have two guest_addr mapping to the same host paddr, but this
2846 * is not a big problem
2848 ret
= domain_pfn_mapping(domain
, mm_to_dma_pfn(iova
->pfn_lo
),
2849 mm_to_dma_pfn(paddr_pfn
), size
, prot
);
2853 /* it's a non-present to present mapping. Only flush if caching mode */
2854 if (cap_caching_mode(iommu
->cap
))
2855 iommu_flush_iotlb_psi(iommu
, domain
->id
, mm_to_dma_pfn(iova
->pfn_lo
), size
, 1);
2857 iommu_flush_write_buffer(iommu
);
2859 start_paddr
= (phys_addr_t
)iova
->pfn_lo
<< PAGE_SHIFT
;
2860 start_paddr
+= paddr
& ~PAGE_MASK
;
2865 __free_iova(&domain
->iovad
, iova
);
2866 printk(KERN_ERR
"Device %s request: %zx@%llx dir %d --- failed\n",
2867 pci_name(pdev
), size
, (unsigned long long)paddr
, dir
);
2871 static dma_addr_t
intel_map_page(struct device
*dev
, struct page
*page
,
2872 unsigned long offset
, size_t size
,
2873 enum dma_data_direction dir
,
2874 struct dma_attrs
*attrs
)
2876 return __intel_map_single(dev
, page_to_phys(page
) + offset
, size
,
2877 dir
, to_pci_dev(dev
)->dma_mask
);
2880 static void flush_unmaps(void)
2886 /* just flush them all */
2887 for (i
= 0; i
< g_num_of_iommus
; i
++) {
2888 struct intel_iommu
*iommu
= g_iommus
[i
];
2892 if (!deferred_flush
[i
].next
)
2895 /* In caching mode, global flushes turn emulation expensive */
2896 if (!cap_caching_mode(iommu
->cap
))
2897 iommu
->flush
.flush_iotlb(iommu
, 0, 0, 0,
2898 DMA_TLB_GLOBAL_FLUSH
);
2899 for (j
= 0; j
< deferred_flush
[i
].next
; j
++) {
2901 struct iova
*iova
= deferred_flush
[i
].iova
[j
];
2902 struct dmar_domain
*domain
= deferred_flush
[i
].domain
[j
];
2904 /* On real hardware multiple invalidations are expensive */
2905 if (cap_caching_mode(iommu
->cap
))
2906 iommu_flush_iotlb_psi(iommu
, domain
->id
,
2907 iova
->pfn_lo
, iova
->pfn_hi
- iova
->pfn_lo
+ 1, 0);
2909 mask
= ilog2(mm_to_dma_pfn(iova
->pfn_hi
- iova
->pfn_lo
+ 1));
2910 iommu_flush_dev_iotlb(deferred_flush
[i
].domain
[j
],
2911 (uint64_t)iova
->pfn_lo
<< PAGE_SHIFT
, mask
);
2913 __free_iova(&deferred_flush
[i
].domain
[j
]->iovad
, iova
);
2915 deferred_flush
[i
].next
= 0;
2921 static void flush_unmaps_timeout(unsigned long data
)
2923 unsigned long flags
;
2925 spin_lock_irqsave(&async_umap_flush_lock
, flags
);
2927 spin_unlock_irqrestore(&async_umap_flush_lock
, flags
);
2930 static void add_unmap(struct dmar_domain
*dom
, struct iova
*iova
)
2932 unsigned long flags
;
2934 struct intel_iommu
*iommu
;
2936 spin_lock_irqsave(&async_umap_flush_lock
, flags
);
2937 if (list_size
== HIGH_WATER_MARK
)
2940 iommu
= domain_get_iommu(dom
);
2941 iommu_id
= iommu
->seq_id
;
2943 next
= deferred_flush
[iommu_id
].next
;
2944 deferred_flush
[iommu_id
].domain
[next
] = dom
;
2945 deferred_flush
[iommu_id
].iova
[next
] = iova
;
2946 deferred_flush
[iommu_id
].next
++;
2949 mod_timer(&unmap_timer
, jiffies
+ msecs_to_jiffies(10));
2953 spin_unlock_irqrestore(&async_umap_flush_lock
, flags
);
2956 static void intel_unmap_page(struct device
*dev
, dma_addr_t dev_addr
,
2957 size_t size
, enum dma_data_direction dir
,
2958 struct dma_attrs
*attrs
)
2960 struct pci_dev
*pdev
= to_pci_dev(dev
);
2961 struct dmar_domain
*domain
;
2962 unsigned long start_pfn
, last_pfn
;
2964 struct intel_iommu
*iommu
;
2966 if (iommu_no_mapping(dev
))
2969 domain
= find_domain(pdev
);
2972 iommu
= domain_get_iommu(domain
);
2974 iova
= find_iova(&domain
->iovad
, IOVA_PFN(dev_addr
));
2975 if (WARN_ONCE(!iova
, "Driver unmaps unmatched page at PFN %llx\n",
2976 (unsigned long long)dev_addr
))
2979 start_pfn
= mm_to_dma_pfn(iova
->pfn_lo
);
2980 last_pfn
= mm_to_dma_pfn(iova
->pfn_hi
+ 1) - 1;
2982 pr_debug("Device %s unmapping: pfn %lx-%lx\n",
2983 pci_name(pdev
), start_pfn
, last_pfn
);
2985 /* clear the whole page */
2986 dma_pte_clear_range(domain
, start_pfn
, last_pfn
);
2988 /* free page tables */
2989 dma_pte_free_pagetable(domain
, start_pfn
, last_pfn
);
2991 if (intel_iommu_strict
) {
2992 iommu_flush_iotlb_psi(iommu
, domain
->id
, start_pfn
,
2993 last_pfn
- start_pfn
+ 1, 0);
2995 __free_iova(&domain
->iovad
, iova
);
2997 add_unmap(domain
, iova
);
2999 * queue up the release of the unmap to save the 1/6th of the
3000 * cpu used up by the iotlb flush operation...
3005 static void *intel_alloc_coherent(struct device
*hwdev
, size_t size
,
3006 dma_addr_t
*dma_handle
, gfp_t flags
,
3007 struct dma_attrs
*attrs
)
3012 size
= PAGE_ALIGN(size
);
3013 order
= get_order(size
);
3015 if (!iommu_no_mapping(hwdev
))
3016 flags
&= ~(GFP_DMA
| GFP_DMA32
);
3017 else if (hwdev
->coherent_dma_mask
< dma_get_required_mask(hwdev
)) {
3018 if (hwdev
->coherent_dma_mask
< DMA_BIT_MASK(32))
3024 vaddr
= (void *)__get_free_pages(flags
, order
);
3027 memset(vaddr
, 0, size
);
3029 *dma_handle
= __intel_map_single(hwdev
, virt_to_bus(vaddr
), size
,
3031 hwdev
->coherent_dma_mask
);
3034 free_pages((unsigned long)vaddr
, order
);
3038 static void intel_free_coherent(struct device
*hwdev
, size_t size
, void *vaddr
,
3039 dma_addr_t dma_handle
, struct dma_attrs
*attrs
)
3043 size
= PAGE_ALIGN(size
);
3044 order
= get_order(size
);
3046 intel_unmap_page(hwdev
, dma_handle
, size
, DMA_BIDIRECTIONAL
, NULL
);
3047 free_pages((unsigned long)vaddr
, order
);
3050 static void intel_unmap_sg(struct device
*hwdev
, struct scatterlist
*sglist
,
3051 int nelems
, enum dma_data_direction dir
,
3052 struct dma_attrs
*attrs
)
3054 struct pci_dev
*pdev
= to_pci_dev(hwdev
);
3055 struct dmar_domain
*domain
;
3056 unsigned long start_pfn
, last_pfn
;
3058 struct intel_iommu
*iommu
;
3060 if (iommu_no_mapping(hwdev
))
3063 domain
= find_domain(pdev
);
3066 iommu
= domain_get_iommu(domain
);
3068 iova
= find_iova(&domain
->iovad
, IOVA_PFN(sglist
[0].dma_address
));
3069 if (WARN_ONCE(!iova
, "Driver unmaps unmatched sglist at PFN %llx\n",
3070 (unsigned long long)sglist
[0].dma_address
))
3073 start_pfn
= mm_to_dma_pfn(iova
->pfn_lo
);
3074 last_pfn
= mm_to_dma_pfn(iova
->pfn_hi
+ 1) - 1;
3076 /* clear the whole page */
3077 dma_pte_clear_range(domain
, start_pfn
, last_pfn
);
3079 /* free page tables */
3080 dma_pte_free_pagetable(domain
, start_pfn
, last_pfn
);
3082 if (intel_iommu_strict
) {
3083 iommu_flush_iotlb_psi(iommu
, domain
->id
, start_pfn
,
3084 last_pfn
- start_pfn
+ 1, 0);
3086 __free_iova(&domain
->iovad
, iova
);
3088 add_unmap(domain
, iova
);
3090 * queue up the release of the unmap to save the 1/6th of the
3091 * cpu used up by the iotlb flush operation...
3096 static int intel_nontranslate_map_sg(struct device
*hddev
,
3097 struct scatterlist
*sglist
, int nelems
, int dir
)
3100 struct scatterlist
*sg
;
3102 for_each_sg(sglist
, sg
, nelems
, i
) {
3103 BUG_ON(!sg_page(sg
));
3104 sg
->dma_address
= page_to_phys(sg_page(sg
)) + sg
->offset
;
3105 sg
->dma_length
= sg
->length
;
3110 static int intel_map_sg(struct device
*hwdev
, struct scatterlist
*sglist
, int nelems
,
3111 enum dma_data_direction dir
, struct dma_attrs
*attrs
)
3114 struct pci_dev
*pdev
= to_pci_dev(hwdev
);
3115 struct dmar_domain
*domain
;
3118 struct iova
*iova
= NULL
;
3120 struct scatterlist
*sg
;
3121 unsigned long start_vpfn
;
3122 struct intel_iommu
*iommu
;
3124 BUG_ON(dir
== DMA_NONE
);
3125 if (iommu_no_mapping(hwdev
))
3126 return intel_nontranslate_map_sg(hwdev
, sglist
, nelems
, dir
);
3128 domain
= get_valid_domain_for_dev(pdev
);
3132 iommu
= domain_get_iommu(domain
);
3134 for_each_sg(sglist
, sg
, nelems
, i
)
3135 size
+= aligned_nrpages(sg
->offset
, sg
->length
);
3137 iova
= intel_alloc_iova(hwdev
, domain
, dma_to_mm_pfn(size
),
3140 sglist
->dma_length
= 0;
3145 * Check if DMAR supports zero-length reads on write only
3148 if (dir
== DMA_TO_DEVICE
|| dir
== DMA_BIDIRECTIONAL
|| \
3149 !cap_zlr(iommu
->cap
))
3150 prot
|= DMA_PTE_READ
;
3151 if (dir
== DMA_FROM_DEVICE
|| dir
== DMA_BIDIRECTIONAL
)
3152 prot
|= DMA_PTE_WRITE
;
3154 start_vpfn
= mm_to_dma_pfn(iova
->pfn_lo
);
3156 ret
= domain_sg_mapping(domain
, start_vpfn
, sglist
, size
, prot
);
3157 if (unlikely(ret
)) {
3158 /* clear the page */
3159 dma_pte_clear_range(domain
, start_vpfn
,
3160 start_vpfn
+ size
- 1);
3161 /* free page tables */
3162 dma_pte_free_pagetable(domain
, start_vpfn
,
3163 start_vpfn
+ size
- 1);
3165 __free_iova(&domain
->iovad
, iova
);
3169 /* it's a non-present to present mapping. Only flush if caching mode */
3170 if (cap_caching_mode(iommu
->cap
))
3171 iommu_flush_iotlb_psi(iommu
, domain
->id
, start_vpfn
, size
, 1);
3173 iommu_flush_write_buffer(iommu
);
3178 static int intel_mapping_error(struct device
*dev
, dma_addr_t dma_addr
)
3183 struct dma_map_ops intel_dma_ops
= {
3184 .alloc
= intel_alloc_coherent
,
3185 .free
= intel_free_coherent
,
3186 .map_sg
= intel_map_sg
,
3187 .unmap_sg
= intel_unmap_sg
,
3188 .map_page
= intel_map_page
,
3189 .unmap_page
= intel_unmap_page
,
3190 .mapping_error
= intel_mapping_error
,
3193 static inline int iommu_domain_cache_init(void)
3197 iommu_domain_cache
= kmem_cache_create("iommu_domain",
3198 sizeof(struct dmar_domain
),
3203 if (!iommu_domain_cache
) {
3204 printk(KERN_ERR
"Couldn't create iommu_domain cache\n");
3211 static inline int iommu_devinfo_cache_init(void)
3215 iommu_devinfo_cache
= kmem_cache_create("iommu_devinfo",
3216 sizeof(struct device_domain_info
),
3220 if (!iommu_devinfo_cache
) {
3221 printk(KERN_ERR
"Couldn't create devinfo cache\n");
3228 static inline int iommu_iova_cache_init(void)
3232 iommu_iova_cache
= kmem_cache_create("iommu_iova",
3233 sizeof(struct iova
),
3237 if (!iommu_iova_cache
) {
3238 printk(KERN_ERR
"Couldn't create iova cache\n");
3245 static int __init
iommu_init_mempool(void)
3248 ret
= iommu_iova_cache_init();
3252 ret
= iommu_domain_cache_init();
3256 ret
= iommu_devinfo_cache_init();
3260 kmem_cache_destroy(iommu_domain_cache
);
3262 kmem_cache_destroy(iommu_iova_cache
);
3267 static void __init
iommu_exit_mempool(void)
3269 kmem_cache_destroy(iommu_devinfo_cache
);
3270 kmem_cache_destroy(iommu_domain_cache
);
3271 kmem_cache_destroy(iommu_iova_cache
);
3275 static void quirk_ioat_snb_local_iommu(struct pci_dev
*pdev
)
3277 struct dmar_drhd_unit
*drhd
;
3281 /* We know that this device on this chipset has its own IOMMU.
3282 * If we find it under a different IOMMU, then the BIOS is lying
3283 * to us. Hope that the IOMMU for this device is actually
3284 * disabled, and it needs no translation...
3286 rc
= pci_bus_read_config_dword(pdev
->bus
, PCI_DEVFN(0, 0), 0xb0, &vtbar
);
3288 /* "can't" happen */
3289 dev_info(&pdev
->dev
, "failed to run vt-d quirk\n");
3292 vtbar
&= 0xffff0000;
3294 /* we know that the this iommu should be at offset 0xa000 from vtbar */
3295 drhd
= dmar_find_matched_drhd_unit(pdev
);
3296 if (WARN_TAINT_ONCE(!drhd
|| drhd
->reg_base_addr
- vtbar
!= 0xa000,
3297 TAINT_FIRMWARE_WORKAROUND
,
3298 "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))
3299 pdev
->dev
.archdata
.iommu
= DUMMY_DEVICE_DOMAIN_INFO
;
3301 DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL
, PCI_DEVICE_ID_INTEL_IOAT_SNB
, quirk_ioat_snb_local_iommu
);
3303 static void __init
init_no_remapping_devices(void)
3305 struct dmar_drhd_unit
*drhd
;
3307 for_each_drhd_unit(drhd
) {
3308 if (!drhd
->include_all
) {
3310 for (i
= 0; i
< drhd
->devices_cnt
; i
++)
3311 if (drhd
->devices
[i
] != NULL
)
3313 /* ignore DMAR unit if no pci devices exist */
3314 if (i
== drhd
->devices_cnt
)
3319 for_each_drhd_unit(drhd
) {
3321 if (drhd
->ignored
|| drhd
->include_all
)
3324 for (i
= 0; i
< drhd
->devices_cnt
; i
++)
3325 if (drhd
->devices
[i
] &&
3326 !IS_GFX_DEVICE(drhd
->devices
[i
]))
3329 if (i
< drhd
->devices_cnt
)
3332 /* This IOMMU has *only* gfx devices. Either bypass it or
3333 set the gfx_mapped flag, as appropriate */
3335 intel_iommu_gfx_mapped
= 1;
3338 for (i
= 0; i
< drhd
->devices_cnt
; i
++) {
3339 if (!drhd
->devices
[i
])
3341 drhd
->devices
[i
]->dev
.archdata
.iommu
= DUMMY_DEVICE_DOMAIN_INFO
;
3347 #ifdef CONFIG_SUSPEND
3348 static int init_iommu_hw(void)
3350 struct dmar_drhd_unit
*drhd
;
3351 struct intel_iommu
*iommu
= NULL
;
3353 for_each_active_iommu(iommu
, drhd
)
3355 dmar_reenable_qi(iommu
);
3357 for_each_iommu(iommu
, drhd
) {
3358 if (drhd
->ignored
) {
3360 * we always have to disable PMRs or DMA may fail on
3364 iommu_disable_protect_mem_regions(iommu
);
3368 iommu_flush_write_buffer(iommu
);
3370 iommu_set_root_entry(iommu
);
3372 iommu
->flush
.flush_context(iommu
, 0, 0, 0,
3373 DMA_CCMD_GLOBAL_INVL
);
3374 iommu
->flush
.flush_iotlb(iommu
, 0, 0, 0,
3375 DMA_TLB_GLOBAL_FLUSH
);
3376 if (iommu_enable_translation(iommu
))
3378 iommu_disable_protect_mem_regions(iommu
);
3384 static void iommu_flush_all(void)
3386 struct dmar_drhd_unit
*drhd
;
3387 struct intel_iommu
*iommu
;
3389 for_each_active_iommu(iommu
, drhd
) {
3390 iommu
->flush
.flush_context(iommu
, 0, 0, 0,
3391 DMA_CCMD_GLOBAL_INVL
);
3392 iommu
->flush
.flush_iotlb(iommu
, 0, 0, 0,
3393 DMA_TLB_GLOBAL_FLUSH
);
3397 static int iommu_suspend(void)
3399 struct dmar_drhd_unit
*drhd
;
3400 struct intel_iommu
*iommu
= NULL
;
3403 for_each_active_iommu(iommu
, drhd
) {
3404 iommu
->iommu_state
= kzalloc(sizeof(u32
) * MAX_SR_DMAR_REGS
,
3406 if (!iommu
->iommu_state
)
3412 for_each_active_iommu(iommu
, drhd
) {
3413 iommu_disable_translation(iommu
);
3415 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
3417 iommu
->iommu_state
[SR_DMAR_FECTL_REG
] =
3418 readl(iommu
->reg
+ DMAR_FECTL_REG
);
3419 iommu
->iommu_state
[SR_DMAR_FEDATA_REG
] =
3420 readl(iommu
->reg
+ DMAR_FEDATA_REG
);
3421 iommu
->iommu_state
[SR_DMAR_FEADDR_REG
] =
3422 readl(iommu
->reg
+ DMAR_FEADDR_REG
);
3423 iommu
->iommu_state
[SR_DMAR_FEUADDR_REG
] =
3424 readl(iommu
->reg
+ DMAR_FEUADDR_REG
);
3426 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
3431 for_each_active_iommu(iommu
, drhd
)
3432 kfree(iommu
->iommu_state
);
3437 static void iommu_resume(void)
3439 struct dmar_drhd_unit
*drhd
;
3440 struct intel_iommu
*iommu
= NULL
;
3443 if (init_iommu_hw()) {
3445 panic("tboot: IOMMU setup failed, DMAR can not resume!\n");
3447 WARN(1, "IOMMU setup failed, DMAR can not resume!\n");
3451 for_each_active_iommu(iommu
, drhd
) {
3453 raw_spin_lock_irqsave(&iommu
->register_lock
, flag
);
3455 writel(iommu
->iommu_state
[SR_DMAR_FECTL_REG
],
3456 iommu
->reg
+ DMAR_FECTL_REG
);
3457 writel(iommu
->iommu_state
[SR_DMAR_FEDATA_REG
],
3458 iommu
->reg
+ DMAR_FEDATA_REG
);
3459 writel(iommu
->iommu_state
[SR_DMAR_FEADDR_REG
],
3460 iommu
->reg
+ DMAR_FEADDR_REG
);
3461 writel(iommu
->iommu_state
[SR_DMAR_FEUADDR_REG
],
3462 iommu
->reg
+ DMAR_FEUADDR_REG
);
3464 raw_spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
3467 for_each_active_iommu(iommu
, drhd
)
3468 kfree(iommu
->iommu_state
);
3471 static struct syscore_ops iommu_syscore_ops
= {
3472 .resume
= iommu_resume
,
3473 .suspend
= iommu_suspend
,
3476 static void __init
init_iommu_pm_ops(void)
3478 register_syscore_ops(&iommu_syscore_ops
);
3482 static inline void init_iommu_pm_ops(void) {}
3483 #endif /* CONFIG_PM */
3485 LIST_HEAD(dmar_rmrr_units
);
3487 static void __init
dmar_register_rmrr_unit(struct dmar_rmrr_unit
*rmrr
)
3489 list_add(&rmrr
->list
, &dmar_rmrr_units
);
3493 int __init
dmar_parse_one_rmrr(struct acpi_dmar_header
*header
)
3495 struct acpi_dmar_reserved_memory
*rmrr
;
3496 struct dmar_rmrr_unit
*rmrru
;
3498 rmrru
= kzalloc(sizeof(*rmrru
), GFP_KERNEL
);
3502 rmrru
->hdr
= header
;
3503 rmrr
= (struct acpi_dmar_reserved_memory
*)header
;
3504 rmrru
->base_address
= rmrr
->base_address
;
3505 rmrru
->end_address
= rmrr
->end_address
;
3507 dmar_register_rmrr_unit(rmrru
);
3512 rmrr_parse_dev(struct dmar_rmrr_unit
*rmrru
)
3514 struct acpi_dmar_reserved_memory
*rmrr
;
3517 rmrr
= (struct acpi_dmar_reserved_memory
*) rmrru
->hdr
;
3518 ret
= dmar_parse_dev_scope((void *)(rmrr
+ 1),
3519 ((void *)rmrr
) + rmrr
->header
.length
,
3520 &rmrru
->devices_cnt
, &rmrru
->devices
, rmrr
->segment
);
3522 if (ret
|| (rmrru
->devices_cnt
== 0)) {
3523 list_del(&rmrru
->list
);
3529 static LIST_HEAD(dmar_atsr_units
);
3531 int __init
dmar_parse_one_atsr(struct acpi_dmar_header
*hdr
)
3533 struct acpi_dmar_atsr
*atsr
;
3534 struct dmar_atsr_unit
*atsru
;
3536 atsr
= container_of(hdr
, struct acpi_dmar_atsr
, header
);
3537 atsru
= kzalloc(sizeof(*atsru
), GFP_KERNEL
);
3542 atsru
->include_all
= atsr
->flags
& 0x1;
3544 list_add(&atsru
->list
, &dmar_atsr_units
);
3549 static int __init
atsr_parse_dev(struct dmar_atsr_unit
*atsru
)
3552 struct acpi_dmar_atsr
*atsr
;
3554 if (atsru
->include_all
)
3557 atsr
= container_of(atsru
->hdr
, struct acpi_dmar_atsr
, header
);
3558 rc
= dmar_parse_dev_scope((void *)(atsr
+ 1),
3559 (void *)atsr
+ atsr
->header
.length
,
3560 &atsru
->devices_cnt
, &atsru
->devices
,
3562 if (rc
|| !atsru
->devices_cnt
) {
3563 list_del(&atsru
->list
);
3570 int dmar_find_matched_atsr_unit(struct pci_dev
*dev
)
3573 struct pci_bus
*bus
;
3574 struct acpi_dmar_atsr
*atsr
;
3575 struct dmar_atsr_unit
*atsru
;
3577 dev
= pci_physfn(dev
);
3579 list_for_each_entry(atsru
, &dmar_atsr_units
, list
) {
3580 atsr
= container_of(atsru
->hdr
, struct acpi_dmar_atsr
, header
);
3581 if (atsr
->segment
== pci_domain_nr(dev
->bus
))
3588 for (bus
= dev
->bus
; bus
; bus
= bus
->parent
) {
3589 struct pci_dev
*bridge
= bus
->self
;
3591 if (!bridge
|| !pci_is_pcie(bridge
) ||
3592 pci_pcie_type(bridge
) == PCI_EXP_TYPE_PCI_BRIDGE
)
3595 if (pci_pcie_type(bridge
) == PCI_EXP_TYPE_ROOT_PORT
) {
3596 for (i
= 0; i
< atsru
->devices_cnt
; i
++)
3597 if (atsru
->devices
[i
] == bridge
)
3603 if (atsru
->include_all
)
3609 int __init
dmar_parse_rmrr_atsr_dev(void)
3611 struct dmar_rmrr_unit
*rmrr
, *rmrr_n
;
3612 struct dmar_atsr_unit
*atsr
, *atsr_n
;
3615 list_for_each_entry_safe(rmrr
, rmrr_n
, &dmar_rmrr_units
, list
) {
3616 ret
= rmrr_parse_dev(rmrr
);
3621 list_for_each_entry_safe(atsr
, atsr_n
, &dmar_atsr_units
, list
) {
3622 ret
= atsr_parse_dev(atsr
);
3631 * Here we only respond to action of unbound device from driver.
3633 * Added device is not attached to its DMAR domain here yet. That will happen
3634 * when mapping the device to iova.
3636 static int device_notifier(struct notifier_block
*nb
,
3637 unsigned long action
, void *data
)
3639 struct device
*dev
= data
;
3640 struct pci_dev
*pdev
= to_pci_dev(dev
);
3641 struct dmar_domain
*domain
;
3643 if (iommu_no_mapping(dev
))
3646 domain
= find_domain(pdev
);
3650 if (action
== BUS_NOTIFY_UNBOUND_DRIVER
&& !iommu_pass_through
) {
3651 domain_remove_one_dev_info(domain
, pdev
);
3653 if (!(domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
) &&
3654 !(domain
->flags
& DOMAIN_FLAG_STATIC_IDENTITY
) &&
3655 list_empty(&domain
->devices
))
3656 domain_exit(domain
);
3662 static struct notifier_block device_nb
= {
3663 .notifier_call
= device_notifier
,
3666 int __init
intel_iommu_init(void)
3669 struct dmar_drhd_unit
*drhd
;
3671 /* VT-d is required for a TXT/tboot launch, so enforce that */
3672 force_on
= tboot_force_iommu();
3674 if (dmar_table_init()) {
3676 panic("tboot: Failed to initialize DMAR table\n");
3681 * Disable translation if already enabled prior to OS handover.
3683 for_each_drhd_unit(drhd
) {
3684 struct intel_iommu
*iommu
;
3689 iommu
= drhd
->iommu
;
3690 if (iommu
->gcmd
& DMA_GCMD_TE
)
3691 iommu_disable_translation(iommu
);
3694 if (dmar_dev_scope_init() < 0) {
3696 panic("tboot: Failed to initialize DMAR device scope\n");
3700 if (no_iommu
|| dmar_disabled
)
3703 if (iommu_init_mempool()) {
3705 panic("tboot: Failed to initialize iommu memory\n");
3709 if (list_empty(&dmar_rmrr_units
))
3710 printk(KERN_INFO
"DMAR: No RMRR found\n");
3712 if (list_empty(&dmar_atsr_units
))
3713 printk(KERN_INFO
"DMAR: No ATSR found\n");
3715 if (dmar_init_reserved_ranges()) {
3717 panic("tboot: Failed to reserve iommu ranges\n");
3721 init_no_remapping_devices();
3726 panic("tboot: Failed to initialize DMARs\n");
3727 printk(KERN_ERR
"IOMMU: dmar init failed\n");
3728 put_iova_domain(&reserved_iova_list
);
3729 iommu_exit_mempool();
3733 "PCI-DMA: Intel(R) Virtualization Technology for Directed I/O\n");
3735 init_timer(&unmap_timer
);
3736 #ifdef CONFIG_SWIOTLB
3739 dma_ops
= &intel_dma_ops
;
3741 init_iommu_pm_ops();
3743 bus_set_iommu(&pci_bus_type
, &intel_iommu_ops
);
3745 bus_register_notifier(&pci_bus_type
, &device_nb
);
3747 intel_iommu_enabled
= 1;
3752 static void iommu_detach_dependent_devices(struct intel_iommu
*iommu
,
3753 struct pci_dev
*pdev
)
3755 struct pci_dev
*tmp
, *parent
;
3757 if (!iommu
|| !pdev
)
3760 /* dependent device detach */
3761 tmp
= pci_find_upstream_pcie_bridge(pdev
);
3762 /* Secondary interface's bus number and devfn 0 */
3764 parent
= pdev
->bus
->self
;
3765 while (parent
!= tmp
) {
3766 iommu_detach_dev(iommu
, parent
->bus
->number
,
3768 parent
= parent
->bus
->self
;
3770 if (pci_is_pcie(tmp
)) /* this is a PCIe-to-PCI bridge */
3771 iommu_detach_dev(iommu
,
3772 tmp
->subordinate
->number
, 0);
3773 else /* this is a legacy PCI bridge */
3774 iommu_detach_dev(iommu
, tmp
->bus
->number
,
3779 static void domain_remove_one_dev_info(struct dmar_domain
*domain
,
3780 struct pci_dev
*pdev
)
3782 struct device_domain_info
*info
;
3783 struct intel_iommu
*iommu
;
3784 unsigned long flags
;
3786 struct list_head
*entry
, *tmp
;
3788 iommu
= device_to_iommu(pci_domain_nr(pdev
->bus
), pdev
->bus
->number
,
3793 spin_lock_irqsave(&device_domain_lock
, flags
);
3794 list_for_each_safe(entry
, tmp
, &domain
->devices
) {
3795 info
= list_entry(entry
, struct device_domain_info
, link
);
3796 if (info
->segment
== pci_domain_nr(pdev
->bus
) &&
3797 info
->bus
== pdev
->bus
->number
&&
3798 info
->devfn
== pdev
->devfn
) {
3799 unlink_domain_info(info
);
3800 spin_unlock_irqrestore(&device_domain_lock
, flags
);
3802 iommu_disable_dev_iotlb(info
);
3803 iommu_detach_dev(iommu
, info
->bus
, info
->devfn
);
3804 iommu_detach_dependent_devices(iommu
, pdev
);
3805 free_devinfo_mem(info
);
3807 spin_lock_irqsave(&device_domain_lock
, flags
);
3815 /* if there is no other devices under the same iommu
3816 * owned by this domain, clear this iommu in iommu_bmp
3817 * update iommu count and coherency
3819 if (iommu
== device_to_iommu(info
->segment
, info
->bus
,
3824 spin_unlock_irqrestore(&device_domain_lock
, flags
);
3827 unsigned long tmp_flags
;
3828 spin_lock_irqsave(&domain
->iommu_lock
, tmp_flags
);
3829 clear_bit(iommu
->seq_id
, domain
->iommu_bmp
);
3830 domain
->iommu_count
--;
3831 domain_update_iommu_cap(domain
);
3832 spin_unlock_irqrestore(&domain
->iommu_lock
, tmp_flags
);
3834 if (!(domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
) &&
3835 !(domain
->flags
& DOMAIN_FLAG_STATIC_IDENTITY
)) {
3836 spin_lock_irqsave(&iommu
->lock
, tmp_flags
);
3837 clear_bit(domain
->id
, iommu
->domain_ids
);
3838 iommu
->domains
[domain
->id
] = NULL
;
3839 spin_unlock_irqrestore(&iommu
->lock
, tmp_flags
);
3844 static void vm_domain_remove_all_dev_info(struct dmar_domain
*domain
)
3846 struct device_domain_info
*info
;
3847 struct intel_iommu
*iommu
;
3848 unsigned long flags1
, flags2
;
3850 spin_lock_irqsave(&device_domain_lock
, flags1
);
3851 while (!list_empty(&domain
->devices
)) {
3852 info
= list_entry(domain
->devices
.next
,
3853 struct device_domain_info
, link
);
3854 unlink_domain_info(info
);
3855 spin_unlock_irqrestore(&device_domain_lock
, flags1
);
3857 iommu_disable_dev_iotlb(info
);
3858 iommu
= device_to_iommu(info
->segment
, info
->bus
, info
->devfn
);
3859 iommu_detach_dev(iommu
, info
->bus
, info
->devfn
);
3860 iommu_detach_dependent_devices(iommu
, info
->dev
);
3862 /* clear this iommu in iommu_bmp, update iommu count
3865 spin_lock_irqsave(&domain
->iommu_lock
, flags2
);
3866 if (test_and_clear_bit(iommu
->seq_id
,
3867 domain
->iommu_bmp
)) {
3868 domain
->iommu_count
--;
3869 domain_update_iommu_cap(domain
);
3871 spin_unlock_irqrestore(&domain
->iommu_lock
, flags2
);
3873 free_devinfo_mem(info
);
3874 spin_lock_irqsave(&device_domain_lock
, flags1
);
3876 spin_unlock_irqrestore(&device_domain_lock
, flags1
);
3879 /* domain id for virtual machine, it won't be set in context */
3880 static unsigned long vm_domid
;
3882 static struct dmar_domain
*iommu_alloc_vm_domain(void)
3884 struct dmar_domain
*domain
;
3886 domain
= alloc_domain_mem();
3890 domain
->id
= vm_domid
++;
3892 memset(domain
->iommu_bmp
, 0, sizeof(domain
->iommu_bmp
));
3893 domain
->flags
= DOMAIN_FLAG_VIRTUAL_MACHINE
;
3898 static int md_domain_init(struct dmar_domain
*domain
, int guest_width
)
3902 init_iova_domain(&domain
->iovad
, DMA_32BIT_PFN
);
3903 spin_lock_init(&domain
->iommu_lock
);
3905 domain_reserve_special_ranges(domain
);
3907 /* calculate AGAW */
3908 domain
->gaw
= guest_width
;
3909 adjust_width
= guestwidth_to_adjustwidth(guest_width
);
3910 domain
->agaw
= width_to_agaw(adjust_width
);
3912 INIT_LIST_HEAD(&domain
->devices
);
3914 domain
->iommu_count
= 0;
3915 domain
->iommu_coherency
= 0;
3916 domain
->iommu_snooping
= 0;
3917 domain
->iommu_superpage
= 0;
3918 domain
->max_addr
= 0;
3921 /* always allocate the top pgd */
3922 domain
->pgd
= (struct dma_pte
*)alloc_pgtable_page(domain
->nid
);
3925 domain_flush_cache(domain
, domain
->pgd
, PAGE_SIZE
);
3929 static void iommu_free_vm_domain(struct dmar_domain
*domain
)
3931 unsigned long flags
;
3932 struct dmar_drhd_unit
*drhd
;
3933 struct intel_iommu
*iommu
;
3935 unsigned long ndomains
;
3937 for_each_drhd_unit(drhd
) {
3940 iommu
= drhd
->iommu
;
3942 ndomains
= cap_ndoms(iommu
->cap
);
3943 for_each_set_bit(i
, iommu
->domain_ids
, ndomains
) {
3944 if (iommu
->domains
[i
] == domain
) {
3945 spin_lock_irqsave(&iommu
->lock
, flags
);
3946 clear_bit(i
, iommu
->domain_ids
);
3947 iommu
->domains
[i
] = NULL
;
3948 spin_unlock_irqrestore(&iommu
->lock
, flags
);
3955 static void vm_domain_exit(struct dmar_domain
*domain
)
3957 /* Domain 0 is reserved, so dont process it */
3961 vm_domain_remove_all_dev_info(domain
);
3963 put_iova_domain(&domain
->iovad
);
3966 dma_pte_clear_range(domain
, 0, DOMAIN_MAX_PFN(domain
->gaw
));
3968 /* free page tables */
3969 dma_pte_free_pagetable(domain
, 0, DOMAIN_MAX_PFN(domain
->gaw
));
3971 iommu_free_vm_domain(domain
);
3972 free_domain_mem(domain
);
3975 static int intel_iommu_domain_init(struct iommu_domain
*domain
)
3977 struct dmar_domain
*dmar_domain
;
3979 dmar_domain
= iommu_alloc_vm_domain();
3982 "intel_iommu_domain_init: dmar_domain == NULL\n");
3985 if (md_domain_init(dmar_domain
, DEFAULT_DOMAIN_ADDRESS_WIDTH
)) {
3987 "intel_iommu_domain_init() failed\n");
3988 vm_domain_exit(dmar_domain
);
3991 domain_update_iommu_cap(dmar_domain
);
3992 domain
->priv
= dmar_domain
;
3994 domain
->geometry
.aperture_start
= 0;
3995 domain
->geometry
.aperture_end
= __DOMAIN_MAX_ADDR(dmar_domain
->gaw
);
3996 domain
->geometry
.force_aperture
= true;
4001 static void intel_iommu_domain_destroy(struct iommu_domain
*domain
)
4003 struct dmar_domain
*dmar_domain
= domain
->priv
;
4005 domain
->priv
= NULL
;
4006 vm_domain_exit(dmar_domain
);
4009 static int intel_iommu_attach_device(struct iommu_domain
*domain
,
4012 struct dmar_domain
*dmar_domain
= domain
->priv
;
4013 struct pci_dev
*pdev
= to_pci_dev(dev
);
4014 struct intel_iommu
*iommu
;
4017 /* normally pdev is not mapped */
4018 if (unlikely(domain_context_mapped(pdev
))) {
4019 struct dmar_domain
*old_domain
;
4021 old_domain
= find_domain(pdev
);
4023 if (dmar_domain
->flags
& DOMAIN_FLAG_VIRTUAL_MACHINE
||
4024 dmar_domain
->flags
& DOMAIN_FLAG_STATIC_IDENTITY
)
4025 domain_remove_one_dev_info(old_domain
, pdev
);
4027 domain_remove_dev_info(old_domain
);
4031 iommu
= device_to_iommu(pci_domain_nr(pdev
->bus
), pdev
->bus
->number
,
4036 /* check if this iommu agaw is sufficient for max mapped address */
4037 addr_width
= agaw_to_width(iommu
->agaw
);
4038 if (addr_width
> cap_mgaw(iommu
->cap
))
4039 addr_width
= cap_mgaw(iommu
->cap
);
4041 if (dmar_domain
->max_addr
> (1LL << addr_width
)) {
4042 printk(KERN_ERR
"%s: iommu width (%d) is not "
4043 "sufficient for the mapped address (%llx)\n",
4044 __func__
, addr_width
, dmar_domain
->max_addr
);
4047 dmar_domain
->gaw
= addr_width
;
4050 * Knock out extra levels of page tables if necessary
4052 while (iommu
->agaw
< dmar_domain
->agaw
) {
4053 struct dma_pte
*pte
;
4055 pte
= dmar_domain
->pgd
;
4056 if (dma_pte_present(pte
)) {
4057 dmar_domain
->pgd
= (struct dma_pte
*)
4058 phys_to_virt(dma_pte_addr(pte
));
4059 free_pgtable_page(pte
);
4061 dmar_domain
->agaw
--;
4064 return domain_add_dev_info(dmar_domain
, pdev
, CONTEXT_TT_MULTI_LEVEL
);
4067 static void intel_iommu_detach_device(struct iommu_domain
*domain
,
4070 struct dmar_domain
*dmar_domain
= domain
->priv
;
4071 struct pci_dev
*pdev
= to_pci_dev(dev
);
4073 domain_remove_one_dev_info(dmar_domain
, pdev
);
4076 static int intel_iommu_map(struct iommu_domain
*domain
,
4077 unsigned long iova
, phys_addr_t hpa
,
4078 size_t size
, int iommu_prot
)
4080 struct dmar_domain
*dmar_domain
= domain
->priv
;
4085 if (iommu_prot
& IOMMU_READ
)
4086 prot
|= DMA_PTE_READ
;
4087 if (iommu_prot
& IOMMU_WRITE
)
4088 prot
|= DMA_PTE_WRITE
;
4089 if ((iommu_prot
& IOMMU_CACHE
) && dmar_domain
->iommu_snooping
)
4090 prot
|= DMA_PTE_SNP
;
4092 max_addr
= iova
+ size
;
4093 if (dmar_domain
->max_addr
< max_addr
) {
4096 /* check if minimum agaw is sufficient for mapped address */
4097 end
= __DOMAIN_MAX_ADDR(dmar_domain
->gaw
) + 1;
4098 if (end
< max_addr
) {
4099 printk(KERN_ERR
"%s: iommu width (%d) is not "
4100 "sufficient for the mapped address (%llx)\n",
4101 __func__
, dmar_domain
->gaw
, max_addr
);
4104 dmar_domain
->max_addr
= max_addr
;
4106 /* Round up size to next multiple of PAGE_SIZE, if it and
4107 the low bits of hpa would take us onto the next page */
4108 size
= aligned_nrpages(hpa
, size
);
4109 ret
= domain_pfn_mapping(dmar_domain
, iova
>> VTD_PAGE_SHIFT
,
4110 hpa
>> VTD_PAGE_SHIFT
, size
, prot
);
4114 static size_t intel_iommu_unmap(struct iommu_domain
*domain
,
4115 unsigned long iova
, size_t size
)
4117 struct dmar_domain
*dmar_domain
= domain
->priv
;
4120 order
= dma_pte_clear_range(dmar_domain
, iova
>> VTD_PAGE_SHIFT
,
4121 (iova
+ size
- 1) >> VTD_PAGE_SHIFT
);
4123 if (dmar_domain
->max_addr
== iova
+ size
)
4124 dmar_domain
->max_addr
= iova
;
4126 return PAGE_SIZE
<< order
;
4129 static phys_addr_t
intel_iommu_iova_to_phys(struct iommu_domain
*domain
,
4132 struct dmar_domain
*dmar_domain
= domain
->priv
;
4133 struct dma_pte
*pte
;
4136 pte
= pfn_to_dma_pte(dmar_domain
, iova
>> VTD_PAGE_SHIFT
, 0);
4138 phys
= dma_pte_addr(pte
);
4143 static int intel_iommu_domain_has_cap(struct iommu_domain
*domain
,
4146 struct dmar_domain
*dmar_domain
= domain
->priv
;
4148 if (cap
== IOMMU_CAP_CACHE_COHERENCY
)
4149 return dmar_domain
->iommu_snooping
;
4150 if (cap
== IOMMU_CAP_INTR_REMAP
)
4151 return irq_remapping_enabled
;
4156 #define REQ_ACS_FLAGS (PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF)
4158 static int intel_iommu_add_device(struct device
*dev
)
4160 struct pci_dev
*pdev
= to_pci_dev(dev
);
4161 struct pci_dev
*bridge
, *dma_pdev
= NULL
;
4162 struct iommu_group
*group
;
4165 if (!device_to_iommu(pci_domain_nr(pdev
->bus
),
4166 pdev
->bus
->number
, pdev
->devfn
))
4169 bridge
= pci_find_upstream_pcie_bridge(pdev
);
4171 if (pci_is_pcie(bridge
))
4172 dma_pdev
= pci_get_domain_bus_and_slot(
4173 pci_domain_nr(pdev
->bus
),
4174 bridge
->subordinate
->number
, 0);
4176 dma_pdev
= pci_dev_get(bridge
);
4178 dma_pdev
= pci_dev_get(pdev
);
4180 /* Account for quirked devices */
4181 swap_pci_ref(&dma_pdev
, pci_get_dma_source(dma_pdev
));
4184 * If it's a multifunction device that does not support our
4185 * required ACS flags, add to the same group as lowest numbered
4186 * function that also does not suport the required ACS flags.
4188 if (dma_pdev
->multifunction
&&
4189 !pci_acs_enabled(dma_pdev
, REQ_ACS_FLAGS
)) {
4190 u8 i
, slot
= PCI_SLOT(dma_pdev
->devfn
);
4192 for (i
= 0; i
< 8; i
++) {
4193 struct pci_dev
*tmp
;
4195 tmp
= pci_get_slot(dma_pdev
->bus
, PCI_DEVFN(slot
, i
));
4199 if (!pci_acs_enabled(tmp
, REQ_ACS_FLAGS
)) {
4200 swap_pci_ref(&dma_pdev
, tmp
);
4208 * Devices on the root bus go through the iommu. If that's not us,
4209 * find the next upstream device and test ACS up to the root bus.
4210 * Finding the next device may require skipping virtual buses.
4212 while (!pci_is_root_bus(dma_pdev
->bus
)) {
4213 struct pci_bus
*bus
= dma_pdev
->bus
;
4215 while (!bus
->self
) {
4216 if (!pci_is_root_bus(bus
))
4222 if (pci_acs_path_enabled(bus
->self
, NULL
, REQ_ACS_FLAGS
))
4225 swap_pci_ref(&dma_pdev
, pci_dev_get(bus
->self
));
4229 group
= iommu_group_get(&dma_pdev
->dev
);
4230 pci_dev_put(dma_pdev
);
4232 group
= iommu_group_alloc();
4234 return PTR_ERR(group
);
4237 ret
= iommu_group_add_device(group
, dev
);
4239 iommu_group_put(group
);
4243 static void intel_iommu_remove_device(struct device
*dev
)
4245 iommu_group_remove_device(dev
);
4248 static struct iommu_ops intel_iommu_ops
= {
4249 .domain_init
= intel_iommu_domain_init
,
4250 .domain_destroy
= intel_iommu_domain_destroy
,
4251 .attach_dev
= intel_iommu_attach_device
,
4252 .detach_dev
= intel_iommu_detach_device
,
4253 .map
= intel_iommu_map
,
4254 .unmap
= intel_iommu_unmap
,
4255 .iova_to_phys
= intel_iommu_iova_to_phys
,
4256 .domain_has_cap
= intel_iommu_domain_has_cap
,
4257 .add_device
= intel_iommu_add_device
,
4258 .remove_device
= intel_iommu_remove_device
,
4259 .pgsize_bitmap
= INTEL_IOMMU_PGSIZES
,
4262 static void quirk_iommu_g4x_gfx(struct pci_dev
*dev
)
4264 /* G4x/GM45 integrated gfx dmar support is totally busted. */
4265 printk(KERN_INFO
"DMAR: Disabling IOMMU for graphics on this chipset\n");
4269 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2a40, quirk_iommu_g4x_gfx
);
4270 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e00, quirk_iommu_g4x_gfx
);
4271 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e10, quirk_iommu_g4x_gfx
);
4272 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e20, quirk_iommu_g4x_gfx
);
4273 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e30, quirk_iommu_g4x_gfx
);
4274 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e40, quirk_iommu_g4x_gfx
);
4275 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e90, quirk_iommu_g4x_gfx
);
4277 static void quirk_iommu_rwbf(struct pci_dev
*dev
)
4280 * Mobile 4 Series Chipset neglects to set RWBF capability,
4281 * but needs it. Same seems to hold for the desktop versions.
4283 printk(KERN_INFO
"DMAR: Forcing write-buffer flush capability\n");
4287 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2a40, quirk_iommu_rwbf
);
4288 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e00, quirk_iommu_rwbf
);
4289 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e10, quirk_iommu_rwbf
);
4290 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e20, quirk_iommu_rwbf
);
4291 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e30, quirk_iommu_rwbf
);
4292 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e40, quirk_iommu_rwbf
);
4293 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x2e90, quirk_iommu_rwbf
);
4296 #define GGC_MEMORY_SIZE_MASK (0xf << 8)
4297 #define GGC_MEMORY_SIZE_NONE (0x0 << 8)
4298 #define GGC_MEMORY_SIZE_1M (0x1 << 8)
4299 #define GGC_MEMORY_SIZE_2M (0x3 << 8)
4300 #define GGC_MEMORY_VT_ENABLED (0x8 << 8)
4301 #define GGC_MEMORY_SIZE_2M_VT (0x9 << 8)
4302 #define GGC_MEMORY_SIZE_3M_VT (0xa << 8)
4303 #define GGC_MEMORY_SIZE_4M_VT (0xb << 8)
4305 static void quirk_calpella_no_shadow_gtt(struct pci_dev
*dev
)
4309 if (pci_read_config_word(dev
, GGC
, &ggc
))
4312 if (!(ggc
& GGC_MEMORY_VT_ENABLED
)) {
4313 printk(KERN_INFO
"DMAR: BIOS has allocated no shadow GTT; disabling IOMMU for graphics\n");
4315 } else if (dmar_map_gfx
) {
4316 /* we have to ensure the gfx device is idle before we flush */
4317 printk(KERN_INFO
"DMAR: Disabling batched IOTLB flush on Ironlake\n");
4318 intel_iommu_strict
= 1;
4321 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x0040, quirk_calpella_no_shadow_gtt
);
4322 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x0044, quirk_calpella_no_shadow_gtt
);
4323 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x0062, quirk_calpella_no_shadow_gtt
);
4324 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL
, 0x006a, quirk_calpella_no_shadow_gtt
);
4326 /* On Tylersburg chipsets, some BIOSes have been known to enable the
4327 ISOCH DMAR unit for the Azalia sound device, but not give it any
4328 TLB entries, which causes it to deadlock. Check for that. We do
4329 this in a function called from init_dmars(), instead of in a PCI
4330 quirk, because we don't want to print the obnoxious "BIOS broken"
4331 message if VT-d is actually disabled.
4333 static void __init
check_tylersburg_isoch(void)
4335 struct pci_dev
*pdev
;
4336 uint32_t vtisochctrl
;
4338 /* If there's no Azalia in the system anyway, forget it. */
4339 pdev
= pci_get_device(PCI_VENDOR_ID_INTEL
, 0x3a3e, NULL
);
4344 /* System Management Registers. Might be hidden, in which case
4345 we can't do the sanity check. But that's OK, because the
4346 known-broken BIOSes _don't_ actually hide it, so far. */
4347 pdev
= pci_get_device(PCI_VENDOR_ID_INTEL
, 0x342e, NULL
);
4351 if (pci_read_config_dword(pdev
, 0x188, &vtisochctrl
)) {
4358 /* If Azalia DMA is routed to the non-isoch DMAR unit, fine. */
4359 if (vtisochctrl
& 1)
4362 /* Drop all bits other than the number of TLB entries */
4363 vtisochctrl
&= 0x1c;
4365 /* If we have the recommended number of TLB entries (16), fine. */
4366 if (vtisochctrl
== 0x10)
4369 /* Zero TLB entries? You get to ride the short bus to school. */
4371 WARN(1, "Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.\n"
4372 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
4373 dmi_get_system_info(DMI_BIOS_VENDOR
),
4374 dmi_get_system_info(DMI_BIOS_VERSION
),
4375 dmi_get_system_info(DMI_PRODUCT_VERSION
));
4376 iommu_identity_mapping
|= IDENTMAP_AZALIA
;
4380 printk(KERN_WARNING
"DMAR: Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n",