25 #include <linux/bitmap.h>
27 #include <linux/export.h>
28 #include <linux/slab.h>
32 #include <linux/pci.h>
45 #include <asm/irq_remapping.h>
46 #include <asm/cacheflush.h>
47 #include <asm/iommu.h>
49 #define ROOT_SIZE VTD_PAGE_SIZE
50 #define CONTEXT_SIZE VTD_PAGE_SIZE
52 #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
53 #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
54 #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
56 #define IOAPIC_RANGE_START (0xfee00000)
57 #define IOAPIC_RANGE_END (0xfeefffff)
58 #define IOVA_START_ADDR (0x1000)
60 #define DEFAULT_DOMAIN_ADDRESS_WIDTH 48
62 #define MAX_AGAW_WIDTH 64
64 #define __DOMAIN_MAX_PFN(gaw) ((((uint64_t)1) << (gaw-VTD_PAGE_SHIFT)) - 1)
65 #define __DOMAIN_MAX_ADDR(gaw) ((((uint64_t)1) << gaw) - 1)
69 #define DOMAIN_MAX_PFN(gaw) ((unsigned long) min_t(uint64_t, \
70 __DOMAIN_MAX_PFN(gaw), (unsigned long)-1))
71 #define DOMAIN_MAX_ADDR(gaw) (((uint64_t)__DOMAIN_MAX_PFN(gaw)) << VTD_PAGE_SHIFT)
73 #define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT)
74 #define DMA_32BIT_PFN IOVA_PFN(DMA_BIT_MASK(32))
75 #define DMA_64BIT_PFN IOVA_PFN(DMA_BIT_MASK(64))
78 #define LEVEL_STRIDE (9)
79 #define LEVEL_MASK (((u64)1 << LEVEL_STRIDE) - 1)
97 #define INTEL_IOMMU_PGSIZES (~0xFFFUL)
99 static inline int agaw_to_level(
int agaw)
104 static inline int agaw_to_width(
int agaw)
109 static inline int width_to_agaw(
int width)
114 static inline unsigned int level_to_offset_bits(
int level)
119 static inline int pfn_level_offset(
unsigned long pfn,
int level)
121 return (pfn >> level_to_offset_bits(level)) &
LEVEL_MASK;
124 static inline unsigned long level_mask(
int level)
126 return -1
UL << level_to_offset_bits(level);
129 static inline unsigned long level_size(
int level)
131 return 1
UL << level_to_offset_bits(level);
134 static inline unsigned long align_to_level(
unsigned long pfn,
int level)
136 return (pfn + level_size(level) - 1) & level_mask(level);
139 static inline unsigned long lvl_to_nr_pages(
unsigned int lvl)
146 static inline unsigned long dma_to_mm_pfn(
unsigned long dma_pfn)
151 static inline unsigned long mm_to_dma_pfn(
unsigned long mm_pfn)
155 static inline unsigned long page_to_dma_pfn(
struct page *
pg)
159 static inline unsigned long virt_to_dma_pfn(
void *
p)
167 static void __init check_tylersburg_isoch(
void);
168 static int rwbf_quirk;
174 static int force_on = 0;
186 #define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
187 static inline bool root_present(
struct root_entry *root)
189 return (root->
val & 1);
191 static inline void set_root_present(
struct root_entry *root)
195 static inline void set_root_value(
struct root_entry *root,
unsigned long value)
201 get_context_addr_from_root(
struct root_entry *root)
227 return (context->
lo & 1);
236 context->
lo &= (((
u64)-1) << 2) | 1;
242 context->
lo &= (((
u64)-1) << 4) | 3;
243 context->
lo |= (value & 3) << 2;
255 context->
hi |= value & 7;
261 context->
hi |= (value & ((1 << 16) - 1)) << 8;
283 static inline void dma_clear_pte(
struct dma_pte *
pte)
288 static inline void dma_set_pte_readable(
struct dma_pte *
pte)
293 static inline void dma_set_pte_writable(
struct dma_pte *
pte)
298 static inline void dma_set_pte_snp(
struct dma_pte *
pte)
303 static inline void dma_set_pte_prot(
struct dma_pte *
pte,
unsigned long prot)
305 pte->
val = (pte->
val & ~3) | (prot & 3);
308 static inline u64 dma_pte_addr(
struct dma_pte *pte)
318 static inline void dma_set_pte_pfn(
struct dma_pte *pte,
unsigned long pfn)
323 static inline bool dma_pte_present(
struct dma_pte *pte)
325 return (pte->
val & 3) != 0;
328 static inline bool dma_pte_superpage(
struct dma_pte *pte)
330 return (pte->
val & (1 << 7));
333 static inline int first_pte_in_page(
struct dma_pte *pte)
345 static int hw_pass_through = 1;
348 #define DOMAIN_FLAG_P2P_MULTIPLE_DEVICES (1 << 0)
353 #define DOMAIN_FLAG_VIRTUAL_MACHINE (1 << 1)
356 #define DOMAIN_FLAG_STATIC_IDENTITY (1 << 2)
360 # define IOMMU_UNITS_SUPPORTED MAX_IO_APICS
362 # define IOMMU_UNITS_SUPPORTED 64
404 static void flush_unmaps_timeout(
unsigned long data);
408 #define HIGH_WATER_MARK 250
418 static int g_num_of_iommus;
424 static long list_size;
428 #ifdef CONFIG_INTEL_IOMMU_DEFAULT_ON
431 int dmar_disabled = 1;
437 static int dmar_map_gfx = 1;
438 static int dmar_forcedac;
439 static int intel_iommu_strict;
440 static int intel_iommu_superpage = 1;
445 #define DUMMY_DEVICE_DOMAIN_INFO ((struct device_domain_info *)(-1))
451 static int __init intel_iommu_setup(
char *
str)
459 }
else if (!
strncmp(str,
"off", 3)) {
462 }
else if (!
strncmp(str,
"igfx_off", 8)) {
465 "Intel-IOMMU: disable GFX device mapping\n");
466 }
else if (!
strncmp(str,
"forcedac", 8)) {
468 "Intel-IOMMU: Forcing DAC for PCI devices\n");
470 }
else if (!
strncmp(str,
"strict", 6)) {
472 "Intel-IOMMU: disable batched IOTLB flush\n");
473 intel_iommu_strict = 1;
474 }
else if (!
strncmp(str,
"sp_off", 6)) {
476 "Intel-IOMMU: disable supported super page\n");
477 intel_iommu_superpage = 0;
486 __setup(
"intel_iommu=", intel_iommu_setup);
489 static struct kmem_cache *iommu_devinfo_cache;
492 static inline void *alloc_pgtable_page(
int node)
503 static inline void free_pgtable_page(
void *vaddr)
508 static inline void *alloc_domain_mem(
void)
513 static void free_domain_mem(
void *vaddr)
518 static inline void * alloc_devinfo_mem(
void)
523 static inline void free_devinfo_mem(
void *vaddr)
545 for (agaw = width_to_agaw(max_gaw);
582 if (iommu_id < 0 || iommu_id >= g_num_of_iommus)
585 return g_iommus[iommu_id];
588 static void domain_update_iommu_coherency(
struct dmar_domain *domain)
604 static void domain_update_iommu_snooping(
struct dmar_domain *domain)
618 static void domain_update_iommu_superpage(
struct dmar_domain *domain)
620 struct dmar_drhd_unit *drhd;
624 if (!intel_iommu_superpage) {
630 for_each_active_iommu(iommu, drhd) {
640 static void domain_update_iommu_cap(
struct dmar_domain *domain)
642 domain_update_iommu_coherency(domain);
643 domain_update_iommu_snooping(domain);
644 domain_update_iommu_superpage(domain);
649 struct dmar_drhd_unit *drhd =
NULL;
652 for_each_drhd_unit(drhd) {
655 if (segment != drhd->segment)
658 for (i = 0; i < drhd->devices_cnt; i++) {
659 if (drhd->devices[i] &&
660 drhd->devices[i]->bus->number == bus &&
661 drhd->devices[i]->devfn == devfn)
663 if (drhd->devices[i] &&
664 drhd->devices[i]->subordinate &&
665 drhd->devices[i]->subordinate->number <= bus &&
666 drhd->devices[i]->subordinate->busn_res.end >= bus)
670 if (drhd->include_all)
677 static void domain_flush_cache(
struct dmar_domain *domain,
690 unsigned long phy_addr;
694 root = &iommu->root_entry[
bus];
695 context = get_context_addr_from_root(root);
698 alloc_pgtable_page(iommu->
node);
700 spin_unlock_irqrestore(&iommu->lock, flags);
703 __iommu_flush_cache(iommu, (
void *)context,
CONTEXT_SIZE);
705 set_root_value(root, phy_addr);
706 set_root_present(root);
707 __iommu_flush_cache(iommu, root,
sizeof(*root));
709 spin_unlock_irqrestore(&iommu->lock, flags);
710 return &context[
devfn];
713 static int device_context_mapped(
struct intel_iommu *iommu,
u8 bus,
u8 devfn)
721 root = &iommu->root_entry[
bus];
722 context = get_context_addr_from_root(root);
727 ret = context_present(&context[devfn]);
729 spin_unlock_irqrestore(&iommu->lock, flags);
733 static void clear_context_table(
struct intel_iommu *iommu,
u8 bus,
u8 devfn)
740 root = &iommu->root_entry[
bus];
741 context = get_context_addr_from_root(root);
743 context_clear_entry(&context[devfn]);
744 __iommu_flush_cache(iommu, &context[devfn], \
747 spin_unlock_irqrestore(&iommu->lock, flags);
750 static void free_context_table(
struct intel_iommu *iommu)
758 if (!iommu->root_entry) {
762 root = &iommu->root_entry[
i];
763 context = get_context_addr_from_root(root);
765 free_pgtable_page(context);
767 free_pgtable_page(iommu->root_entry);
768 iommu->root_entry =
NULL;
770 spin_unlock_irqrestore(&iommu->lock, flags);
774 unsigned long pfn,
int target_level)
778 int level = agaw_to_level(domain->
agaw);
782 BUG_ON(addr_width < BITS_PER_LONG && pfn >> addr_width);
783 parent = domain->
pgd;
788 offset = pfn_level_offset(pfn, level);
790 if (!target_level && (dma_pte_superpage(pte) || !dma_pte_present(pte)))
792 if (level == target_level)
795 if (!dma_pte_present(pte)) {
798 tmp_page = alloc_pgtable_page(domain->
nid);
807 free_pgtable_page(tmp_page);
810 domain_flush_cache(domain, pte,
sizeof(*pte));
824 int level,
int *large_page)
827 int total = agaw_to_level(domain->
agaw);
830 parent = domain->
pgd;
831 while (level <= total) {
832 offset = pfn_level_offset(pfn, total);
837 if (!dma_pte_present(pte)) {
854 static int dma_pte_clear_range(
struct dmar_domain *domain,
855 unsigned long start_pfn,
856 unsigned long last_pfn)
859 unsigned int large_page = 1;
863 BUG_ON(addr_width < BITS_PER_LONG && start_pfn >> addr_width);
864 BUG_ON(addr_width < BITS_PER_LONG && last_pfn >> addr_width);
865 BUG_ON(start_pfn > last_pfn);
870 first_pte = pte = dma_pfn_level_pte(domain, start_pfn, 1, &large_page);
872 start_pfn = align_to_level(start_pfn + 1, large_page + 1);
877 start_pfn += lvl_to_nr_pages(large_page);
879 }
while (start_pfn <= last_pfn && !first_pte_in_page(pte));
881 domain_flush_cache(domain, first_pte,
882 (
void *)pte - (
void *)first_pte);
884 }
while (start_pfn && start_pfn <= last_pfn);
886 order = (large_page - 1) * 9;
891 static void dma_pte_free_pagetable(
struct dmar_domain *domain,
892 unsigned long start_pfn,
893 unsigned long last_pfn)
897 int total = agaw_to_level(domain->
agaw);
902 BUG_ON(addr_width < BITS_PER_LONG && start_pfn >> addr_width);
903 BUG_ON(addr_width < BITS_PER_LONG && last_pfn >> addr_width);
904 BUG_ON(start_pfn > last_pfn);
908 while (level <= total) {
909 tmp = align_to_level(start_pfn, level);
912 if (tmp + level_size(level) - 1 > last_pfn)
917 first_pte = pte = dma_pfn_level_pte(domain, tmp, level, &large_page);
918 if (large_page > level)
919 level = large_page + 1;
921 tmp = align_to_level(tmp + 1, level + 1);
925 if (dma_pte_present(pte)) {
930 tmp += level_size(level);
931 }
while (!first_pte_in_page(pte) &&
932 tmp + level_size(level) - 1 <= last_pfn);
934 domain_flush_cache(domain, first_pte,
935 (
void *)pte - (
void *)first_pte);
937 }
while (tmp && tmp + level_size(level) - 1 <= last_pfn);
942 free_pgtable_page(domain->
pgd);
948 static int iommu_alloc_root_entry(
struct intel_iommu *iommu)
957 __iommu_flush_cache(iommu, root,
ROOT_SIZE);
960 iommu->root_entry = root;
961 spin_unlock_irqrestore(&iommu->lock, flags);
966 static void iommu_set_root_entry(
struct intel_iommu *iommu)
972 addr = iommu->root_entry;
986 static void iommu_flush_write_buffer(
struct intel_iommu *iommu)
1005 static void __iommu_flush_context(
struct intel_iommu *iommu,
1006 u16 did,
u16 source_id,
u8 function_mask,
1039 static void __iommu_flush_iotlb(
struct intel_iommu *iommu,
u16 did,
1040 u64 addr,
unsigned int size_order,
u64 type)
1043 u64 val = 0, val_iva = 0;
1057 val_iva = size_order |
addr;
1077 dmar_writeq(iommu->
reg + tlb_offset, val_iva);
1078 dmar_writeq(iommu->
reg + tlb_offset + 8, val);
1090 pr_debug(
"IOMMU: tlb flush request %Lx, actual %Lx\n",
1099 unsigned long flags;
1101 struct intel_iommu *iommu = device_to_iommu(segment, bus, devfn);
1111 if (info->bus == bus && info->devfn == devfn) {
1115 spin_unlock_irqrestore(&device_domain_lock, flags);
1117 if (!found || !info->
dev)
1126 info->
iommu = iommu;
1141 if (!info->
dev || !pci_ats_enabled(info->
dev))
1147 static void iommu_flush_dev_iotlb(
struct dmar_domain *domain,
1148 u64 addr,
unsigned mask)
1151 unsigned long flags;
1156 if (!info->
dev || !pci_ats_enabled(info->
dev))
1159 sid = info->
bus << 8 | info->
devfn;
1163 spin_unlock_irqrestore(&device_domain_lock, flags);
1166 static void iommu_flush_iotlb_psi(
struct intel_iommu *iommu,
u16 did,
1167 unsigned long pfn,
unsigned int pages,
int map)
1169 unsigned int mask =
ilog2(__roundup_pow_of_two(pages));
1181 iommu->flush.flush_iotlb(iommu, did, 0, 0,
1184 iommu->flush.flush_iotlb(iommu, did, addr, mask,
1192 iommu_flush_dev_iotlb(iommu->domains[did], addr, mask);
1195 static void iommu_disable_protect_mem_regions(
struct intel_iommu *iommu)
1198 unsigned long flags;
1212 static int iommu_enable_translation(
struct intel_iommu *iommu)
1215 unsigned long flags;
1229 static int iommu_disable_translation(
struct intel_iommu *iommu)
1247 static int iommu_init_domains(
struct intel_iommu *iommu)
1249 unsigned long ndomains;
1250 unsigned long nlongs;
1253 pr_debug(
"IOMMU %d: Number of Domains supported <%ld>\n", iommu->
seq_id,
1262 iommu->domain_ids = kcalloc(nlongs,
sizeof(
unsigned long),
GFP_KERNEL);
1263 if (!iommu->domain_ids) {
1267 iommu->domains = kcalloc(ndomains,
sizeof(
struct dmar_domain *),
1269 if (!iommu->domains) {
1279 set_bit(0, iommu->domain_ids);
1284 static void domain_exit(
struct dmar_domain *domain);
1285 static void vm_domain_exit(
struct dmar_domain *domain);
1291 unsigned long flags;
1293 if ((iommu->domains) && (iommu->domain_ids)) {
1295 domain = iommu->domains[
i];
1301 vm_domain_exit(domain);
1303 domain_exit(domain);
1305 spin_unlock_irqrestore(&domain->
iommu_lock, flags);
1310 iommu_disable_translation(iommu);
1319 kfree(iommu->domains);
1320 kfree(iommu->domain_ids);
1325 for (i = 0; i < g_num_of_iommus; i++) {
1330 if (i == g_num_of_iommus)
1334 free_context_table(iommu);
1341 domain = alloc_domain_mem();
1346 memset(domain->iommu_bmp, 0,
sizeof(domain->iommu_bmp));
1352 static int iommu_attach_domain(
struct dmar_domain *domain,
1356 unsigned long ndomains;
1357 unsigned long flags;
1364 if (num >= ndomains) {
1365 spin_unlock_irqrestore(&iommu->lock, flags);
1371 set_bit(num, iommu->domain_ids);
1373 iommu->domains[num] = domain;
1374 spin_unlock_irqrestore(&iommu->lock, flags);
1379 static void iommu_detach_domain(
struct dmar_domain *domain,
1382 unsigned long flags;
1389 if (iommu->domains[num] == domain) {
1398 iommu->domains[num] =
NULL;
1400 spin_unlock_irqrestore(&iommu->lock, flags);
1406 static int dmar_init_reserved_ranges(
void)
1415 &reserved_rbtree_key);
1445 static void domain_reserve_special_ranges(
struct dmar_domain *domain)
1450 static inline int guestwidth_to_adjustwidth(
int gaw)
1453 int r = (gaw - 12) % 9;
1464 static int domain_init(
struct dmar_domain *domain,
int guest_width)
1467 int adjust_width,
agaw;
1468 unsigned long sagaw;
1473 domain_reserve_special_ranges(domain);
1476 iommu = domain_get_iommu(domain);
1479 domain->
gaw = guest_width;
1480 adjust_width = guestwidth_to_adjustwidth(guest_width);
1481 agaw = width_to_agaw(adjust_width);
1485 pr_debug(
"IOMMU: hardware doesn't support agaw %d\n", agaw);
1491 INIT_LIST_HEAD(&domain->
devices);
1508 domain->
pgd = (
struct dma_pte *)alloc_pgtable_page(domain->
nid);
1515 static void domain_exit(
struct dmar_domain *domain)
1517 struct dmar_drhd_unit *drhd;
1525 if (!intel_iommu_strict)
1526 flush_unmaps_timeout(0);
1528 domain_remove_dev_info(domain);
1538 for_each_active_iommu(iommu, drhd)
1540 iommu_detach_domain(domain, iommu);
1542 free_domain_mem(domain);
1549 unsigned long flags;
1553 unsigned long ndomains;
1558 pr_debug(
"Set context mapping for %02x:%02x.%d\n",
1565 iommu = device_to_iommu(segment, bus, devfn);
1569 context = device_to_context_entry(iommu, bus, devfn);
1573 if (context_present(context)) {
1574 spin_unlock_irqrestore(&iommu->lock, flags);
1588 if (iommu->domains[num] == domain) {
1597 if (num >= ndomains) {
1598 spin_unlock_irqrestore(&iommu->lock, flags);
1603 set_bit(num, iommu->domain_ids);
1604 iommu->domains[num] =
domain;
1613 for (agaw = domain->agaw; agaw != iommu->
agaw; agaw--) {
1615 if (!dma_pte_present(pgd)) {
1616 spin_unlock_irqrestore(&iommu->lock, flags);
1623 context_set_domain_id(context,
id);
1626 info = iommu_support_dev_iotlb(domain, segment, bus, devfn);
1635 context_set_address_width(context, iommu->
msagaw);
1638 context_set_address_width(context, iommu->
agaw);
1641 context_set_translation_type(context, translation);
1642 context_set_fault_enable(context);
1643 context_set_present(context);
1644 domain_flush_cache(domain, context,
sizeof(*context));
1653 iommu->flush.flush_context(iommu, 0,
1654 (((
u16)bus) << 8) | devfn,
1659 iommu_flush_write_buffer(iommu);
1661 iommu_enable_dev_iotlb(info);
1662 spin_unlock_irqrestore(&iommu->lock, flags);
1666 domain->iommu_count++;
1667 if (domain->iommu_count == 1)
1668 domain->nid = iommu->
node;
1669 domain_update_iommu_cap(domain);
1671 spin_unlock_irqrestore(&domain->iommu_lock, flags);
1693 parent = pdev->
bus->self;
1694 while (parent != tmp) {
1695 ret = domain_context_mapping_one(domain,
1697 parent->
bus->number,
1698 parent->
devfn, translation);
1701 parent = parent->
bus->self;
1703 if (pci_is_pcie(tmp))
1704 return domain_context_mapping_one(domain,
1709 return domain_context_mapping_one(domain,
1716 static int domain_context_mapped(
struct pci_dev *pdev)
1727 ret = device_context_mapped(iommu, pdev->
bus->number, pdev->
devfn);
1735 parent = pdev->
bus->self;
1736 while (parent != tmp) {
1737 ret = device_context_mapped(iommu, parent->
bus->number,
1741 parent = parent->
bus->self;
1743 if (pci_is_pcie(tmp))
1744 return device_context_mapped(iommu, tmp->
subordinate->number,
1747 return device_context_mapped(iommu, tmp->
bus->number,
1752 static inline unsigned long aligned_nrpages(
unsigned long host_addr,
1760 static inline int hardware_largepage_caps(
struct dmar_domain *domain,
1761 unsigned long iov_pfn,
1762 unsigned long phy_pfn,
1763 unsigned long pages)
1766 unsigned long pfnmerge;
1774 pfnmerge = iov_pfn | phy_pfn;
1787 static int __domain_mapping(
struct dmar_domain *domain,
unsigned long iov_pfn,
1789 unsigned long nr_pages,
int prot)
1794 unsigned long sg_res;
1795 unsigned int largepage_lvl = 0;
1796 unsigned long lvl_pages = 0;
1808 sg_res = nr_pages + 1;
1812 while (nr_pages > 0) {
1818 sg->dma_length = sg->
length;
1824 largepage_lvl = hardware_largepage_caps(domain, iov_pfn, phys_pfn, sg_res);
1826 first_pte = pte = pfn_to_dma_pte(domain, iov_pfn, largepage_lvl);
1830 if (largepage_lvl > 1)
1841 static int dumps = 5;
1842 printk(
KERN_CRIT "ERROR: DMA PTE for vPFN 0x%lx already set (to %llx not %llx)\n",
1843 iov_pfn, tmp, (
unsigned long long)pteval);
1851 lvl_pages = lvl_to_nr_pages(largepage_lvl);
1853 BUG_ON(nr_pages < lvl_pages);
1854 BUG_ON(sg_res < lvl_pages);
1856 nr_pages -= lvl_pages;
1857 iov_pfn += lvl_pages;
1858 phys_pfn += lvl_pages;
1860 sg_res -= lvl_pages;
1874 if (!nr_pages || first_pte_in_page(pte) ||
1875 (largepage_lvl > 1 && sg_res < lvl_pages)) {
1876 domain_flush_cache(domain, first_pte,
1877 (
void *)pte - (
void *)first_pte);
1881 if (!sg_res && nr_pages)
1887 static inline int domain_sg_mapping(
struct dmar_domain *domain,
unsigned long iov_pfn,
1891 return __domain_mapping(domain, iov_pfn, sg, 0, nr_pages, prot);
1894 static inline int domain_pfn_mapping(
struct dmar_domain *domain,
unsigned long iov_pfn,
1895 unsigned long phys_pfn,
unsigned long nr_pages,
1898 return __domain_mapping(domain, iov_pfn,
NULL, phys_pfn, nr_pages, prot);
1901 static void iommu_detach_dev(
struct intel_iommu *iommu,
u8 bus,
u8 devfn)
1906 clear_context_table(iommu, bus, devfn);
1907 iommu->flush.flush_context(iommu, 0, 0, 0,
1918 info->
dev->dev.archdata.iommu =
NULL;
1921 static void domain_remove_dev_info(
struct dmar_domain *domain)
1924 unsigned long flags;
1928 while (!list_empty(&domain->
devices)) {
1931 unlink_domain_info(info);
1932 spin_unlock_irqrestore(&device_domain_lock, flags);
1934 iommu_disable_dev_iotlb(info);
1936 iommu_detach_dev(iommu, info->
bus, info->
devfn);
1937 free_devinfo_mem(info);
1941 spin_unlock_irqrestore(&device_domain_lock, flags);
1949 find_domain(
struct pci_dev *pdev)
1954 info = pdev->
dev.archdata.iommu;
1965 struct dmar_drhd_unit *drhd;
1968 unsigned long flags;
1969 int bus = 0, devfn = 0;
1973 domain = find_domain(pdev);
1981 if (pci_is_pcie(dev_tmp)) {
1985 bus = dev_tmp->
bus->number;
1986 devfn = dev_tmp->
devfn;
1990 if (info->
segment == segment &&
1991 info->
bus == bus && info->
devfn == devfn) {
1996 spin_unlock_irqrestore(&device_domain_lock, flags);
2004 domain = alloc_domain();
2013 free_domain_mem(domain);
2016 iommu = drhd->iommu;
2018 ret = iommu_attach_domain(domain, iommu);
2020 free_domain_mem(domain);
2024 if (domain_init(domain, gaw)) {
2025 domain_exit(domain);
2031 info = alloc_devinfo_mem();
2033 domain_exit(domain);
2048 if (tmp->
segment == segment &&
2049 tmp->
bus == bus && tmp->
devfn == devfn) {
2055 spin_unlock_irqrestore(&device_domain_lock, flags);
2056 free_devinfo_mem(info);
2057 domain_exit(domain);
2061 list_add(&info->
global, &device_domain_list);
2062 spin_unlock_irqrestore(&device_domain_lock, flags);
2067 info = alloc_devinfo_mem();
2071 info->
bus = pdev->
bus->number;
2077 found = find_domain(pdev);
2078 if (found !=
NULL) {
2079 spin_unlock_irqrestore(&device_domain_lock, flags);
2080 if (found != domain) {
2081 domain_exit(domain);
2084 free_devinfo_mem(info);
2088 list_add(&info->
global, &device_domain_list);
2089 pdev->
dev.archdata.iommu =
info;
2090 spin_unlock_irqrestore(&device_domain_lock, flags);
2094 return find_domain(pdev);
2097 static int iommu_identity_mapping;
2098 #define IDENTMAP_ALL 1
2099 #define IDENTMAP_GFX 2
2100 #define IDENTMAP_AZALIA 4
2102 static int iommu_domain_identity_map(
struct dmar_domain *domain,
2103 unsigned long long start,
2104 unsigned long long end)
2110 dma_to_mm_pfn(last_vpfn))) {
2115 pr_debug(
"Mapping reserved region %llx-%llx for domain %d\n",
2116 start, end, domain->
id);
2121 dma_pte_clear_range(domain, first_vpfn, last_vpfn);
2123 return domain_pfn_mapping(domain, first_vpfn, first_vpfn,
2124 last_vpfn - first_vpfn + 1,
2128 static int iommu_prepare_identity_map(
struct pci_dev *pdev,
2129 unsigned long long start,
2130 unsigned long long end)
2143 if (domain == si_domain && hw_pass_through) {
2144 printk(
"Ignoring identity map for HW passthrough device %s [0x%Lx - 0x%Lx]\n",
2145 pci_name(pdev), start, end);
2150 "IOMMU: Setting identity map for device %s [0x%Lx - 0x%Lx]\n",
2151 pci_name(pdev), start, end);
2154 WARN(1,
"Your BIOS is broken; RMRR ends before it starts!\n"
2155 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2163 if (end >> agaw_to_width(domain->
agaw)) {
2164 WARN(1,
"Your BIOS is broken; RMRR exceeds permitted address width (%d bits)\n"
2165 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
2166 agaw_to_width(domain->
agaw),
2174 ret = iommu_domain_identity_map(domain, start, end);
2186 domain_exit(domain);
2190 static inline int iommu_prepare_rmrr_dev(
struct dmar_rmrr_unit *rmrr,
2195 return iommu_prepare_identity_map(pdev, rmrr->base_address,
2199 #ifdef CONFIG_INTEL_IOMMU_FLOPPY_WA
2200 static inline void iommu_prepare_isa(
void)
2210 ret = iommu_prepare_identity_map(pdev, 0, 16*1024*1024 - 1);
2214 "floppy might not work\n");
2218 static inline void iommu_prepare_isa(
void)
2224 static int md_domain_init(
struct dmar_domain *domain,
int guest_width);
2226 static int __init si_domain_init(
int hw)
2228 struct dmar_drhd_unit *drhd;
2232 si_domain = alloc_domain();
2236 pr_debug(
"Identity mapping domain is domain %d\n", si_domain->
id);
2238 for_each_active_iommu(iommu, drhd) {
2239 ret = iommu_attach_domain(si_domain, iommu);
2241 domain_exit(si_domain);
2247 domain_exit(si_domain);
2257 unsigned long start_pfn, end_pfn;
2260 for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn,
NULL) {
2261 ret = iommu_domain_identity_map(si_domain,
2271 static void domain_remove_one_dev_info(
struct dmar_domain *domain,
2273 static int identity_mapping(
struct pci_dev *pdev)
2277 if (
likely(!iommu_identity_mapping))
2280 info = pdev->
dev.archdata.iommu;
2282 return (info->
domain == si_domain);
2287 static int domain_add_dev_info(
struct dmar_domain *domain,
2292 unsigned long flags;
2295 info = alloc_devinfo_mem();
2300 info->
bus = pdev->
bus->number;
2307 list_add(&info->
global, &device_domain_list);
2308 pdev->
dev.archdata.iommu =
info;
2309 spin_unlock_irqrestore(&device_domain_lock, flags);
2311 ret = domain_context_mapping(domain, pdev, translation);
2314 unlink_domain_info(info);
2315 spin_unlock_irqrestore(&device_domain_lock, flags);
2316 free_devinfo_mem(info);
2323 static int iommu_should_identity_map(
struct pci_dev *pdev,
int startup)
2351 if (!pci_is_pcie(pdev)) {
2352 if (!pci_is_root_bus(pdev->
bus))
2371 if (pdev->
dev.coherent_dma_mask &&
2372 pdev->
dev.coherent_dma_mask < dma_mask)
2373 dma_mask = pdev->
dev.coherent_dma_mask;
2381 static int __init iommu_prepare_static_identity_mapping(
int hw)
2386 ret = si_domain_init(hw);
2391 if (iommu_should_identity_map(pdev, 1)) {
2392 ret = domain_add_dev_info(si_domain, pdev,
2401 pr_info(
"IOMMU: %s identity mapping for device %s\n",
2402 hw ?
"hardware" :
"software", pci_name(pdev));
2409 static int __init init_dmars(
void)
2411 struct dmar_drhd_unit *drhd;
2412 struct dmar_rmrr_unit *rmrr;
2423 for_each_drhd_unit(drhd) {
2437 g_iommus = kcalloc(g_num_of_iommus,
sizeof(
struct intel_iommu *),
2445 deferred_flush = kzalloc(g_num_of_iommus *
2447 if (!deferred_flush) {
2452 for_each_drhd_unit(drhd) {
2456 iommu = drhd->iommu;
2457 g_iommus[iommu->
seq_id] = iommu;
2459 ret = iommu_init_domains(iommu);
2468 ret = iommu_alloc_root_entry(iommu);
2474 hw_pass_through = 0;
2480 for_each_drhd_unit(drhd) {
2484 iommu = drhd->iommu;
2505 for_each_drhd_unit(drhd) {
2509 iommu = drhd->iommu;
2516 iommu->flush.flush_context = __iommu_flush_context;
2517 iommu->flush.flush_iotlb = __iommu_flush_iotlb;
2521 (
unsigned long long)drhd->reg_base_addr);
2528 (
unsigned long long)drhd->reg_base_addr);
2532 if (iommu_pass_through)
2535 #ifdef CONFIG_INTEL_IOMMU_BROKEN_GFX_WA
2539 check_tylersburg_isoch();
2546 if (iommu_identity_mapping) {
2547 ret = iommu_prepare_static_identity_mapping(hw_pass_through);
2568 for_each_rmrr_units(rmrr) {
2569 for (i = 0; i < rmrr->devices_cnt; i++) {
2570 pdev = rmrr->devices[
i];
2577 ret = iommu_prepare_rmrr_dev(rmrr, pdev);
2580 "IOMMU: mapping reserved region failed\n");
2584 iommu_prepare_isa();
2593 for_each_drhd_unit(drhd) {
2594 if (drhd->ignored) {
2600 iommu_disable_protect_mem_regions(drhd->iommu);
2603 iommu = drhd->iommu;
2605 iommu_flush_write_buffer(iommu);
2611 iommu_set_root_entry(iommu);
2616 ret = iommu_enable_translation(iommu);
2620 iommu_disable_protect_mem_regions(iommu);
2625 for_each_drhd_unit(drhd) {
2628 iommu = drhd->iommu;
2636 static struct iova *intel_alloc_iova(
struct device *
dev,
2641 struct iova *iova =
NULL;
2660 nrpages, pci_name(pdev));
2672 domain = get_domain_for_dev(pdev,
2676 "Allocating domain for %s failed", pci_name(pdev));
2681 if (
unlikely(!domain_context_mapped(pdev))) {
2682 ret = domain_context_mapping(domain, pdev,
2686 "Domain context map for %s failed",
2700 info = dev->
dev.archdata.iommu;
2704 return __get_valid_domain_for_dev(dev);
2707 static int iommu_dummy(
struct pci_dev *pdev)
2713 static int iommu_no_mapping(
struct device *dev)
2722 if (iommu_dummy(pdev))
2725 if (!iommu_identity_mapping)
2728 found = identity_mapping(pdev);
2730 if (iommu_should_identity_map(pdev, 0))
2737 domain_remove_one_dev_info(si_domain, pdev);
2747 if (iommu_should_identity_map(pdev, 0)) {
2749 ret = domain_add_dev_info(si_domain, pdev,
2765 size_t size,
int dir,
u64 dma_mask)
2774 unsigned long paddr_pfn = paddr >>
PAGE_SHIFT;
2778 if (iommu_no_mapping(hwdev))
2781 domain = get_valid_domain_for_dev(pdev);
2785 iommu = domain_get_iommu(domain);
2786 size = aligned_nrpages(paddr, size);
2788 iova = intel_alloc_iova(hwdev, domain, dma_to_mm_pfn(size), dma_mask);
2807 ret = domain_pfn_mapping(domain, mm_to_dma_pfn(iova->
pfn_lo),
2808 mm_to_dma_pfn(paddr_pfn), size, prot);
2814 iommu_flush_iotlb_psi(iommu, domain->
id, mm_to_dma_pfn(iova->
pfn_lo), size, 1);
2816 iommu_flush_write_buffer(iommu);
2825 printk(
KERN_ERR"Device %s request: %zx@%llx dir %d --- failed\n",
2826 pci_name(pdev), size, (
unsigned long long)paddr, dir);
2831 unsigned long offset,
size_t size,
2835 return __intel_map_single(dev,
page_to_phys(page) + offset, size,
2839 static void flush_unmaps(
void)
2846 for (i = 0; i < g_num_of_iommus; i++) {
2851 if (!deferred_flush[i].
next)
2856 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
2858 for (j = 0; j < deferred_flush[
i].
next; j++) {
2860 struct iova *iova = deferred_flush[
i].
iova[
j];
2865 iommu_flush_iotlb_psi(iommu, domain->
id,
2869 iommu_flush_dev_iotlb(deferred_flush[i].domain[j],
2874 deferred_flush[
i].
next = 0;
2880 static void flush_unmaps_timeout(
unsigned long data)
2882 unsigned long flags;
2886 spin_unlock_irqrestore(&async_umap_flush_lock, flags);
2889 static void add_unmap(
struct dmar_domain *dom,
struct iova *iova)
2891 unsigned long flags;
2899 iommu = domain_get_iommu(dom);
2900 iommu_id = iommu->
seq_id;
2902 next = deferred_flush[iommu_id].
next;
2904 deferred_flush[iommu_id].
iova[
next] = iova;
2905 deferred_flush[iommu_id].
next++;
2912 spin_unlock_irqrestore(&async_umap_flush_lock, flags);
2921 unsigned long start_pfn, last_pfn;
2925 if (iommu_no_mapping(dev))
2928 domain = find_domain(pdev);
2931 iommu = domain_get_iommu(domain);
2934 if (
WARN_ONCE(!iova,
"Driver unmaps unmatched page at PFN %llx\n",
2935 (
unsigned long long)dev_addr))
2938 start_pfn = mm_to_dma_pfn(iova->
pfn_lo);
2939 last_pfn = mm_to_dma_pfn(iova->
pfn_hi + 1) - 1;
2941 pr_debug(
"Device %s unmapping: pfn %lx-%lx\n",
2942 pci_name(pdev), start_pfn, last_pfn);
2945 dma_pte_clear_range(domain, start_pfn, last_pfn);
2948 dma_pte_free_pagetable(domain, start_pfn, last_pfn);
2950 if (intel_iommu_strict) {
2951 iommu_flush_iotlb_psi(iommu, domain->
id, start_pfn,
2952 last_pfn - start_pfn + 1, 0);
2956 add_unmap(domain, iova);
2964 static void *intel_alloc_coherent(
struct device *hwdev,
size_t size,
2974 if (!iommu_no_mapping(hwdev))
2988 *dma_handle = __intel_map_single(hwdev,
virt_to_bus(vaddr), size,
2997 static void intel_free_coherent(
struct device *hwdev,
size_t size,
void *vaddr,
3015 unsigned long start_pfn, last_pfn;
3019 if (iommu_no_mapping(hwdev))
3022 domain = find_domain(pdev);
3025 iommu = domain_get_iommu(domain);
3028 if (
WARN_ONCE(!iova,
"Driver unmaps unmatched sglist at PFN %llx\n",
3032 start_pfn = mm_to_dma_pfn(iova->
pfn_lo);
3033 last_pfn = mm_to_dma_pfn(iova->
pfn_hi + 1) - 1;
3036 dma_pte_clear_range(domain, start_pfn, last_pfn);
3039 dma_pte_free_pagetable(domain, start_pfn, last_pfn);
3041 if (intel_iommu_strict) {
3042 iommu_flush_iotlb_psi(iommu, domain->
id, start_pfn,
3043 last_pfn - start_pfn + 1, 0);
3047 add_unmap(domain, iova);
3055 static int intel_nontranslate_map_sg(
struct device *hddev,
3064 sg->dma_length = sg->
length;
3069 static int intel_map_sg(
struct device *hwdev,
struct scatterlist *sglist,
int nelems,
3077 struct iova *iova =
NULL;
3080 unsigned long start_vpfn;
3084 if (iommu_no_mapping(hwdev))
3085 return intel_nontranslate_map_sg(hwdev, sglist, nelems, dir);
3087 domain = get_valid_domain_for_dev(pdev);
3091 iommu = domain_get_iommu(domain);
3094 size += aligned_nrpages(sg->offset, sg->
length);
3096 iova = intel_alloc_iova(hwdev, domain, dma_to_mm_pfn(size),
3099 sglist->dma_length = 0;
3113 start_vpfn = mm_to_dma_pfn(iova->
pfn_lo);
3115 ret = domain_sg_mapping(domain, start_vpfn, sglist, size, prot);
3118 dma_pte_clear_range(domain, start_vpfn,
3119 start_vpfn + size - 1);
3121 dma_pte_free_pagetable(domain, start_vpfn,
3122 start_vpfn + size - 1);
3130 iommu_flush_iotlb_psi(iommu, domain->
id, start_vpfn, size, 1);
3132 iommu_flush_write_buffer(iommu);
3143 .alloc = intel_alloc_coherent,
3144 .free = intel_free_coherent,
3145 .map_sg = intel_map_sg,
3146 .unmap_sg = intel_unmap_sg,
3147 .map_page = intel_map_page,
3148 .unmap_page = intel_unmap_page,
3149 .mapping_error = intel_mapping_error,
3152 static inline int iommu_domain_cache_init(
void)
3162 if (!iommu_domain_cache) {
3170 static inline int iommu_devinfo_cache_init(
void)
3179 if (!iommu_devinfo_cache) {
3187 static inline int iommu_iova_cache_init(
void)
3192 sizeof(
struct iova),
3196 if (!iommu_iova_cache) {
3204 static int __init iommu_init_mempool(
void)
3207 ret = iommu_iova_cache_init();
3211 ret = iommu_domain_cache_init();
3215 ret = iommu_devinfo_cache_init();
3226 static void __init iommu_exit_mempool(
void)
3234 static void quirk_ioat_snb_local_iommu(
struct pci_dev *pdev)
3236 struct dmar_drhd_unit *drhd;
3245 rc = pci_bus_read_config_dword(pdev->
bus,
PCI_DEVFN(0, 0), 0xb0, &vtbar);
3248 dev_info(&pdev->
dev,
"failed to run vt-d quirk\n");
3251 vtbar &= 0xffff0000;
3257 "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"))
3262 static void __init init_no_remapping_devices(
void)
3264 struct dmar_drhd_unit *drhd;
3266 for_each_drhd_unit(drhd) {
3267 if (!drhd->include_all) {
3269 for (i = 0; i < drhd->devices_cnt; i++)
3270 if (drhd->devices[i] !=
NULL)
3273 if (i == drhd->devices_cnt)
3278 for_each_drhd_unit(drhd) {
3280 if (drhd->ignored || drhd->include_all)
3283 for (i = 0; i < drhd->devices_cnt; i++)
3284 if (drhd->devices[i] &&
3288 if (i < drhd->devices_cnt)
3294 intel_iommu_gfx_mapped = 1;
3297 for (i = 0; i < drhd->devices_cnt; i++) {
3298 if (!drhd->devices[i])
3306 #ifdef CONFIG_SUSPEND
3307 static int init_iommu_hw(
void)
3309 struct dmar_drhd_unit *drhd;
3312 for_each_active_iommu(iommu, drhd)
3317 if (drhd->ignored) {
3323 iommu_disable_protect_mem_regions(iommu);
3327 iommu_flush_write_buffer(iommu);
3329 iommu_set_root_entry(iommu);
3331 iommu->flush.flush_context(iommu, 0, 0, 0,
3333 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
3335 if (iommu_enable_translation(iommu))
3337 iommu_disable_protect_mem_regions(iommu);
3343 static void iommu_flush_all(
void)
3345 struct dmar_drhd_unit *drhd;
3348 for_each_active_iommu(iommu, drhd) {
3349 iommu->flush.flush_context(iommu, 0, 0, 0,
3351 iommu->flush.flush_iotlb(iommu, 0, 0, 0,
3356 static int iommu_suspend(
void)
3358 struct dmar_drhd_unit *drhd;
3362 for_each_active_iommu(iommu, drhd) {
3371 for_each_active_iommu(iommu, drhd) {
3372 iommu_disable_translation(iommu);
3390 for_each_active_iommu(iommu, drhd)
3396 static
void iommu_resume(
void)
3398 struct dmar_drhd_unit *drhd;
3402 if (init_iommu_hw()) {
3404 panic(
"tboot: IOMMU setup failed, DMAR can not resume!\n");
3406 WARN(1,
"IOMMU setup failed, DMAR can not resume!\n");
3410 for_each_active_iommu(iommu, drhd) {
3426 for_each_active_iommu(iommu, drhd)
3427 kfree(iommu->iommu_state);
3432 .suspend = iommu_suspend,
3435 static void __init init_iommu_pm_ops(
void)
3441 static inline void init_iommu_pm_ops(
void) {}
3446 static void __init dmar_register_rmrr_unit(
struct dmar_rmrr_unit *rmrr)
3448 list_add(&rmrr->list, &dmar_rmrr_units);
3455 struct dmar_rmrr_unit *rmrru;
3461 rmrru->hdr = header;
3466 dmar_register_rmrr_unit(rmrru);
3471 rmrr_parse_dev(
struct dmar_rmrr_unit *rmrru)
3478 ((
void *)rmrr) + rmrr->
header.length,
3479 &rmrru->devices_cnt, &rmrru->devices, rmrr->
segment);
3481 if (ret || (rmrru->devices_cnt == 0)) {
3493 struct dmar_atsr_unit *atsru;
3501 atsru->include_all = atsr->
flags & 0x1;
3503 list_add(&atsru->list, &dmar_atsr_units);
3508 static int __init atsr_parse_dev(
struct dmar_atsr_unit *atsru)
3513 if (atsru->include_all)
3518 (
void *)atsr + atsr->
header.length,
3519 &atsru->devices_cnt, &atsru->devices,
3521 if (rc || !atsru->devices_cnt) {
3534 struct dmar_atsr_unit *atsru;
3536 dev = pci_physfn(dev);
3547 for (bus = dev->
bus; bus; bus = bus->
parent) {
3550 if (!bridge || !pci_is_pcie(bridge) ||
3555 for (i = 0; i < atsru->devices_cnt; i++)
3556 if (atsru->devices[i] == bridge)
3562 if (atsru->include_all)
3570 struct dmar_rmrr_unit *rmrr, *rmrr_n;
3571 struct dmar_atsr_unit *atsr, *atsr_n;
3575 ret = rmrr_parse_dev(rmrr);
3581 ret = atsr_parse_dev(atsr);
3602 if (iommu_no_mapping(dev))
3605 domain = find_domain(pdev);
3610 domain_remove_one_dev_info(domain, pdev);
3615 domain_exit(domain);
3622 .notifier_call = device_notifier,
3634 panic(
"tboot: Failed to initialize DMAR table\n");
3640 panic(
"tboot: Failed to initialize DMAR device scope\n");
3647 if (iommu_init_mempool()) {
3649 panic(
"tboot: Failed to initialize iommu memory\n");
3653 if (list_empty(&dmar_rmrr_units))
3656 if (list_empty(&dmar_atsr_units))
3659 if (dmar_init_reserved_ranges()) {
3661 panic(
"tboot: Failed to reserve iommu ranges\n");
3665 init_no_remapping_devices();
3670 panic(
"tboot: Failed to initialize DMARs\n");
3673 iommu_exit_mempool();
3677 "PCI-DMA: Intel(R) Virtualization Technology for Directed I/O\n");
3680 #ifdef CONFIG_SWIOTLB
3685 init_iommu_pm_ops();
3691 intel_iommu_enabled = 1;
3696 static void iommu_detach_dependent_devices(
struct intel_iommu *iommu,
3701 if (!iommu || !pdev)
3708 parent = pdev->
bus->self;
3709 while (parent != tmp) {
3710 iommu_detach_dev(iommu, parent->
bus->number,
3712 parent = parent->
bus->self;
3714 if (pci_is_pcie(tmp))
3715 iommu_detach_dev(iommu,
3718 iommu_detach_dev(iommu, tmp->
bus->number,
3723 static void domain_remove_one_dev_info(
struct dmar_domain *domain,
3728 unsigned long flags;
3741 info->
bus == pdev->
bus->number &&
3743 unlink_domain_info(info);
3744 spin_unlock_irqrestore(&device_domain_lock, flags);
3746 iommu_disable_dev_iotlb(info);
3747 iommu_detach_dev(iommu, info->
bus, info->
devfn);
3748 iommu_detach_dependent_devices(iommu, pdev);
3749 free_devinfo_mem(info);
3763 if (iommu == device_to_iommu(info->
segment, info->
bus,
3768 spin_unlock_irqrestore(&device_domain_lock, flags);
3771 unsigned long tmp_flags;
3775 domain_update_iommu_cap(domain);
3776 spin_unlock_irqrestore(&domain->
iommu_lock, tmp_flags);
3782 iommu->domains[domain->
id] =
NULL;
3783 spin_unlock_irqrestore(&iommu->lock, tmp_flags);
3788 static void vm_domain_remove_all_dev_info(
struct dmar_domain *domain)
3795 while (!list_empty(&domain->
devices)) {
3798 unlink_domain_info(info);
3799 spin_unlock_irqrestore(&device_domain_lock, flags1);
3801 iommu_disable_dev_iotlb(info);
3803 iommu_detach_dev(iommu, info->
bus, info->
devfn);
3804 iommu_detach_dependent_devices(iommu, info->
dev);
3811 domain->iommu_bmp)) {
3813 domain_update_iommu_cap(domain);
3815 spin_unlock_irqrestore(&domain->
iommu_lock, flags2);
3817 free_devinfo_mem(info);
3820 spin_unlock_irqrestore(&device_domain_lock, flags1);
3824 static unsigned long vm_domid;
3826 static struct dmar_domain *iommu_alloc_vm_domain(
void)
3830 domain = alloc_domain_mem();
3834 domain->
id = vm_domid++;
3836 memset(domain->iommu_bmp, 0,
sizeof(domain->iommu_bmp));
3842 static int md_domain_init(
struct dmar_domain *domain,
int guest_width)
3849 domain_reserve_special_ranges(domain);
3852 domain->
gaw = guest_width;
3853 adjust_width = guestwidth_to_adjustwidth(guest_width);
3854 domain->
agaw = width_to_agaw(adjust_width);
3856 INIT_LIST_HEAD(&domain->
devices);
3866 domain->
pgd = (
struct dma_pte *)alloc_pgtable_page(domain->
nid);
3873 static void iommu_free_vm_domain(
struct dmar_domain *domain)
3875 unsigned long flags;
3876 struct dmar_drhd_unit *drhd;
3879 unsigned long ndomains;
3881 for_each_drhd_unit(drhd) {
3884 iommu = drhd->iommu;
3888 if (iommu->domains[i] == domain) {
3891 iommu->domains[
i] =
NULL;
3892 spin_unlock_irqrestore(&iommu->lock, flags);
3899 static void vm_domain_exit(
struct dmar_domain *domain)
3905 vm_domain_remove_all_dev_info(domain);
3915 iommu_free_vm_domain(domain);
3916 free_domain_mem(domain);
3919 static int intel_iommu_domain_init(
struct iommu_domain *domain)
3923 dmar_domain = iommu_alloc_vm_domain();
3926 "intel_iommu_domain_init: dmar_domain == NULL\n");
3931 "intel_iommu_domain_init() failed\n");
3932 vm_domain_exit(dmar_domain);
3935 domain_update_iommu_cap(dmar_domain);
3936 domain->
priv = dmar_domain;
3938 domain->
geometry.aperture_start = 0;
3940 domain->
geometry.force_aperture =
true;
3945 static void intel_iommu_domain_destroy(
struct iommu_domain *domain)
3947 struct dmar_domain *dmar_domain = domain->
priv;
3950 vm_domain_exit(dmar_domain);
3953 static int intel_iommu_attach_device(
struct iommu_domain *domain,
3956 struct dmar_domain *dmar_domain = domain->
priv;
3962 if (
unlikely(domain_context_mapped(pdev))) {
3963 struct dmar_domain *old_domain;
3965 old_domain = find_domain(pdev);
3969 domain_remove_one_dev_info(old_domain, pdev);
3971 domain_remove_dev_info(old_domain);
3981 addr_width = agaw_to_width(iommu->
agaw);
3985 if (dmar_domain->
max_addr > (1
LL << addr_width)) {
3987 "sufficient for the mapped address (%llx)\n",
3988 __func__, addr_width, dmar_domain->
max_addr);
3991 dmar_domain->
gaw = addr_width;
3996 while (iommu->
agaw < dmar_domain->
agaw) {
3999 pte = dmar_domain->
pgd;
4000 if (dma_pte_present(pte)) {
4003 free_pgtable_page(pte);
4005 dmar_domain->
agaw--;
4011 static void intel_iommu_detach_device(
struct iommu_domain *domain,
4014 struct dmar_domain *dmar_domain = domain->
priv;
4017 domain_remove_one_dev_info(dmar_domain, pdev);
4020 static int intel_iommu_map(
struct iommu_domain *domain,
4022 size_t size,
int iommu_prot)
4024 struct dmar_domain *dmar_domain = domain->
priv;
4036 max_addr = iova +
size;
4037 if (dmar_domain->
max_addr < max_addr) {
4042 if (end < max_addr) {
4044 "sufficient for the mapped address (%llx)\n",
4045 __func__, dmar_domain->
gaw, max_addr);
4052 size = aligned_nrpages(hpa, size);
4058 static size_t intel_iommu_unmap(
struct iommu_domain *domain,
4059 unsigned long iova,
size_t size)
4061 struct dmar_domain *dmar_domain = domain->
priv;
4067 if (dmar_domain->
max_addr == iova + size)
4076 struct dmar_domain *dmar_domain = domain->
priv;
4082 phys = dma_pte_addr(pte);
4087 static int intel_iommu_domain_has_cap(
struct iommu_domain *domain,
4090 struct dmar_domain *dmar_domain = domain->
priv;
4106 #define REQ_ACS_FLAGS (PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF)
4108 static int intel_iommu_add_device(
struct device *dev)
4121 if (pci_is_pcie(bridge))
4139 swap_pci_ref(&dma_pdev,
4149 while (!pci_is_root_bus(dma_pdev->
bus)) {
4152 while (!bus->
self) {
4153 if (!pci_is_root_bus(bus))
4171 return PTR_ERR(group);
4180 static void intel_iommu_remove_device(
struct device *dev)
4185 static struct iommu_ops intel_iommu_ops = {
4186 .domain_init = intel_iommu_domain_init,
4187 .domain_destroy = intel_iommu_domain_destroy,
4188 .attach_dev = intel_iommu_attach_device,
4189 .detach_dev = intel_iommu_detach_device,
4190 .map = intel_iommu_map,
4191 .unmap = intel_iommu_unmap,
4192 .iova_to_phys = intel_iommu_iova_to_phys,
4193 .domain_has_cap = intel_iommu_domain_has_cap,
4194 .add_device = intel_iommu_add_device,
4195 .remove_device = intel_iommu_remove_device,
4210 printk(
KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n");
4218 #define GGC_MEMORY_SIZE_MASK (0xf << 8)
4219 #define GGC_MEMORY_SIZE_NONE (0x0 << 8)
4220 #define GGC_MEMORY_SIZE_1M (0x1 << 8)
4221 #define GGC_MEMORY_SIZE_2M (0x3 << 8)
4222 #define GGC_MEMORY_VT_ENABLED (0x8 << 8)
4223 #define GGC_MEMORY_SIZE_2M_VT (0x9 << 8)
4224 #define GGC_MEMORY_SIZE_3M_VT (0xa << 8)
4225 #define GGC_MEMORY_SIZE_4M_VT (0xb << 8)
4231 if (pci_read_config_word(dev,
GGC, &ggc))
4235 printk(
KERN_INFO "DMAR: BIOS has allocated no shadow GTT; disabling IOMMU for graphics\n");
4237 }
else if (dmar_map_gfx) {
4239 printk(
KERN_INFO "DMAR: Disabling batched IOTLB flush on Ironlake\n");
4240 intel_iommu_strict = 1;
4255 static void __init check_tylersburg_isoch(
void)
4273 if (pci_read_config_dword(pdev, 0x188, &vtisochctrl)) {
4281 if (vtisochctrl & 1)
4285 vtisochctrl &= 0x1c;
4288 if (vtisochctrl == 0x10)
4293 WARN(1,
"Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.\n"
4294 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
4302 printk(
KERN_WARNING "DMAR: Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n",