Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / pci / intel-iommu.c
blobe079a5237c9424e7064e1c0892377f2d9b78536b
1 /*
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
11 * more details.
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) Ashok Raj <ashok.raj@intel.com>
18 * Copyright (C) Shaohua Li <shaohua.li@intel.com>
19 * Copyright (C) Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
22 #include <linux/init.h>
23 #include <linux/bitmap.h>
24 #include <linux/slab.h>
25 #include <linux/irq.h>
26 #include <linux/interrupt.h>
27 #include <linux/sysdev.h>
28 #include <linux/spinlock.h>
29 #include <linux/pci.h>
30 #include <linux/dmar.h>
31 #include <linux/dma-mapping.h>
32 #include <linux/mempool.h>
33 #include "iova.h"
34 #include "intel-iommu.h"
35 #include <asm/proto.h> /* force_iommu in this header in x86-64*/
36 #include <asm/cacheflush.h>
37 #include <asm/gart.h>
38 #include "pci.h"
40 #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
41 #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
43 #define IOAPIC_RANGE_START (0xfee00000)
44 #define IOAPIC_RANGE_END (0xfeefffff)
45 #define IOVA_START_ADDR (0x1000)
47 #define DEFAULT_DOMAIN_ADDRESS_WIDTH 48
49 #define DMAR_OPERATION_TIMEOUT (HZ*60) /* 1m */
51 #define DOMAIN_MAX_ADDR(gaw) ((((u64)1) << gaw) - 1)
53 static void domain_remove_dev_info(struct dmar_domain *domain);
55 static int dmar_disabled;
56 static int __initdata dmar_map_gfx = 1;
57 static int dmar_forcedac;
59 #define DUMMY_DEVICE_DOMAIN_INFO ((struct device_domain_info *)(-1))
60 static DEFINE_SPINLOCK(device_domain_lock);
61 static LIST_HEAD(device_domain_list);
63 static int __init intel_iommu_setup(char *str)
65 if (!str)
66 return -EINVAL;
67 while (*str) {
68 if (!strncmp(str, "off", 3)) {
69 dmar_disabled = 1;
70 printk(KERN_INFO"Intel-IOMMU: disabled\n");
71 } else if (!strncmp(str, "igfx_off", 8)) {
72 dmar_map_gfx = 0;
73 printk(KERN_INFO
74 "Intel-IOMMU: disable GFX device mapping\n");
75 } else if (!strncmp(str, "forcedac", 8)) {
76 printk (KERN_INFO
77 "Intel-IOMMU: Forcing DAC for PCI devices\n");
78 dmar_forcedac = 1;
81 str += strcspn(str, ",");
82 while (*str == ',')
83 str++;
85 return 0;
87 __setup("intel_iommu=", intel_iommu_setup);
89 static struct kmem_cache *iommu_domain_cache;
90 static struct kmem_cache *iommu_devinfo_cache;
91 static struct kmem_cache *iommu_iova_cache;
93 static inline void *iommu_kmem_cache_alloc(struct kmem_cache *cachep)
95 unsigned int flags;
96 void *vaddr;
98 /* trying to avoid low memory issues */
99 flags = current->flags & PF_MEMALLOC;
100 current->flags |= PF_MEMALLOC;
101 vaddr = kmem_cache_alloc(cachep, GFP_ATOMIC);
102 current->flags &= (~PF_MEMALLOC | flags);
103 return vaddr;
107 static inline void *alloc_pgtable_page(void)
109 unsigned int flags;
110 void *vaddr;
112 /* trying to avoid low memory issues */
113 flags = current->flags & PF_MEMALLOC;
114 current->flags |= PF_MEMALLOC;
115 vaddr = (void *)get_zeroed_page(GFP_ATOMIC);
116 current->flags &= (~PF_MEMALLOC | flags);
117 return vaddr;
120 static inline void free_pgtable_page(void *vaddr)
122 free_page((unsigned long)vaddr);
125 static inline void *alloc_domain_mem(void)
127 return iommu_kmem_cache_alloc(iommu_domain_cache);
130 static inline void free_domain_mem(void *vaddr)
132 kmem_cache_free(iommu_domain_cache, vaddr);
135 static inline void * alloc_devinfo_mem(void)
137 return iommu_kmem_cache_alloc(iommu_devinfo_cache);
140 static inline void free_devinfo_mem(void *vaddr)
142 kmem_cache_free(iommu_devinfo_cache, vaddr);
145 struct iova *alloc_iova_mem(void)
147 return iommu_kmem_cache_alloc(iommu_iova_cache);
150 void free_iova_mem(struct iova *iova)
152 kmem_cache_free(iommu_iova_cache, iova);
155 static inline void __iommu_flush_cache(
156 struct intel_iommu *iommu, void *addr, int size)
158 if (!ecap_coherent(iommu->ecap))
159 clflush_cache_range(addr, size);
162 /* Gets context entry for a given bus and devfn */
163 static struct context_entry * device_to_context_entry(struct intel_iommu *iommu,
164 u8 bus, u8 devfn)
166 struct root_entry *root;
167 struct context_entry *context;
168 unsigned long phy_addr;
169 unsigned long flags;
171 spin_lock_irqsave(&iommu->lock, flags);
172 root = &iommu->root_entry[bus];
173 context = get_context_addr_from_root(root);
174 if (!context) {
175 context = (struct context_entry *)alloc_pgtable_page();
176 if (!context) {
177 spin_unlock_irqrestore(&iommu->lock, flags);
178 return NULL;
180 __iommu_flush_cache(iommu, (void *)context, PAGE_SIZE_4K);
181 phy_addr = virt_to_phys((void *)context);
182 set_root_value(root, phy_addr);
183 set_root_present(root);
184 __iommu_flush_cache(iommu, root, sizeof(*root));
186 spin_unlock_irqrestore(&iommu->lock, flags);
187 return &context[devfn];
190 static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn)
192 struct root_entry *root;
193 struct context_entry *context;
194 int ret;
195 unsigned long flags;
197 spin_lock_irqsave(&iommu->lock, flags);
198 root = &iommu->root_entry[bus];
199 context = get_context_addr_from_root(root);
200 if (!context) {
201 ret = 0;
202 goto out;
204 ret = context_present(context[devfn]);
205 out:
206 spin_unlock_irqrestore(&iommu->lock, flags);
207 return ret;
210 static void clear_context_table(struct intel_iommu *iommu, u8 bus, u8 devfn)
212 struct root_entry *root;
213 struct context_entry *context;
214 unsigned long flags;
216 spin_lock_irqsave(&iommu->lock, flags);
217 root = &iommu->root_entry[bus];
218 context = get_context_addr_from_root(root);
219 if (context) {
220 context_clear_entry(context[devfn]);
221 __iommu_flush_cache(iommu, &context[devfn], \
222 sizeof(*context));
224 spin_unlock_irqrestore(&iommu->lock, flags);
227 static void free_context_table(struct intel_iommu *iommu)
229 struct root_entry *root;
230 int i;
231 unsigned long flags;
232 struct context_entry *context;
234 spin_lock_irqsave(&iommu->lock, flags);
235 if (!iommu->root_entry) {
236 goto out;
238 for (i = 0; i < ROOT_ENTRY_NR; i++) {
239 root = &iommu->root_entry[i];
240 context = get_context_addr_from_root(root);
241 if (context)
242 free_pgtable_page(context);
244 free_pgtable_page(iommu->root_entry);
245 iommu->root_entry = NULL;
246 out:
247 spin_unlock_irqrestore(&iommu->lock, flags);
250 /* page table handling */
251 #define LEVEL_STRIDE (9)
252 #define LEVEL_MASK (((u64)1 << LEVEL_STRIDE) - 1)
254 static inline int agaw_to_level(int agaw)
256 return agaw + 2;
259 static inline int agaw_to_width(int agaw)
261 return 30 + agaw * LEVEL_STRIDE;
265 static inline int width_to_agaw(int width)
267 return (width - 30) / LEVEL_STRIDE;
270 static inline unsigned int level_to_offset_bits(int level)
272 return (12 + (level - 1) * LEVEL_STRIDE);
275 static inline int address_level_offset(u64 addr, int level)
277 return ((addr >> level_to_offset_bits(level)) & LEVEL_MASK);
280 static inline u64 level_mask(int level)
282 return ((u64)-1 << level_to_offset_bits(level));
285 static inline u64 level_size(int level)
287 return ((u64)1 << level_to_offset_bits(level));
290 static inline u64 align_to_level(u64 addr, int level)
292 return ((addr + level_size(level) - 1) & level_mask(level));
295 static struct dma_pte * addr_to_dma_pte(struct dmar_domain *domain, u64 addr)
297 int addr_width = agaw_to_width(domain->agaw);
298 struct dma_pte *parent, *pte = NULL;
299 int level = agaw_to_level(domain->agaw);
300 int offset;
301 unsigned long flags;
303 BUG_ON(!domain->pgd);
305 addr &= (((u64)1) << addr_width) - 1;
306 parent = domain->pgd;
308 spin_lock_irqsave(&domain->mapping_lock, flags);
309 while (level > 0) {
310 void *tmp_page;
312 offset = address_level_offset(addr, level);
313 pte = &parent[offset];
314 if (level == 1)
315 break;
317 if (!dma_pte_present(*pte)) {
318 tmp_page = alloc_pgtable_page();
320 if (!tmp_page) {
321 spin_unlock_irqrestore(&domain->mapping_lock,
322 flags);
323 return NULL;
325 __iommu_flush_cache(domain->iommu, tmp_page,
326 PAGE_SIZE_4K);
327 dma_set_pte_addr(*pte, virt_to_phys(tmp_page));
329 * high level table always sets r/w, last level page
330 * table control read/write
332 dma_set_pte_readable(*pte);
333 dma_set_pte_writable(*pte);
334 __iommu_flush_cache(domain->iommu, pte, sizeof(*pte));
336 parent = phys_to_virt(dma_pte_addr(*pte));
337 level--;
340 spin_unlock_irqrestore(&domain->mapping_lock, flags);
341 return pte;
344 /* return address's pte at specific level */
345 static struct dma_pte *dma_addr_level_pte(struct dmar_domain *domain, u64 addr,
346 int level)
348 struct dma_pte *parent, *pte = NULL;
349 int total = agaw_to_level(domain->agaw);
350 int offset;
352 parent = domain->pgd;
353 while (level <= total) {
354 offset = address_level_offset(addr, total);
355 pte = &parent[offset];
356 if (level == total)
357 return pte;
359 if (!dma_pte_present(*pte))
360 break;
361 parent = phys_to_virt(dma_pte_addr(*pte));
362 total--;
364 return NULL;
367 /* clear one page's page table */
368 static void dma_pte_clear_one(struct dmar_domain *domain, u64 addr)
370 struct dma_pte *pte = NULL;
372 /* get last level pte */
373 pte = dma_addr_level_pte(domain, addr, 1);
375 if (pte) {
376 dma_clear_pte(*pte);
377 __iommu_flush_cache(domain->iommu, pte, sizeof(*pte));
381 /* clear last level pte, a tlb flush should be followed */
382 static void dma_pte_clear_range(struct dmar_domain *domain, u64 start, u64 end)
384 int addr_width = agaw_to_width(domain->agaw);
386 start &= (((u64)1) << addr_width) - 1;
387 end &= (((u64)1) << addr_width) - 1;
388 /* in case it's partial page */
389 start = PAGE_ALIGN_4K(start);
390 end &= PAGE_MASK_4K;
392 /* we don't need lock here, nobody else touches the iova range */
393 while (start < end) {
394 dma_pte_clear_one(domain, start);
395 start += PAGE_SIZE_4K;
399 /* free page table pages. last level pte should already be cleared */
400 static void dma_pte_free_pagetable(struct dmar_domain *domain,
401 u64 start, u64 end)
403 int addr_width = agaw_to_width(domain->agaw);
404 struct dma_pte *pte;
405 int total = agaw_to_level(domain->agaw);
406 int level;
407 u64 tmp;
409 start &= (((u64)1) << addr_width) - 1;
410 end &= (((u64)1) << addr_width) - 1;
412 /* we don't need lock here, nobody else touches the iova range */
413 level = 2;
414 while (level <= total) {
415 tmp = align_to_level(start, level);
416 if (tmp >= end || (tmp + level_size(level) > end))
417 return;
419 while (tmp < end) {
420 pte = dma_addr_level_pte(domain, tmp, level);
421 if (pte) {
422 free_pgtable_page(
423 phys_to_virt(dma_pte_addr(*pte)));
424 dma_clear_pte(*pte);
425 __iommu_flush_cache(domain->iommu,
426 pte, sizeof(*pte));
428 tmp += level_size(level);
430 level++;
432 /* free pgd */
433 if (start == 0 && end >= ((((u64)1) << addr_width) - 1)) {
434 free_pgtable_page(domain->pgd);
435 domain->pgd = NULL;
439 /* iommu handling */
440 static int iommu_alloc_root_entry(struct intel_iommu *iommu)
442 struct root_entry *root;
443 unsigned long flags;
445 root = (struct root_entry *)alloc_pgtable_page();
446 if (!root)
447 return -ENOMEM;
449 __iommu_flush_cache(iommu, root, PAGE_SIZE_4K);
451 spin_lock_irqsave(&iommu->lock, flags);
452 iommu->root_entry = root;
453 spin_unlock_irqrestore(&iommu->lock, flags);
455 return 0;
458 #define IOMMU_WAIT_OP(iommu, offset, op, cond, sts) \
460 unsigned long start_time = jiffies;\
461 while (1) {\
462 sts = op (iommu->reg + offset);\
463 if (cond)\
464 break;\
465 if (time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT))\
466 panic("DMAR hardware is malfunctioning\n");\
467 cpu_relax();\
471 static void iommu_set_root_entry(struct intel_iommu *iommu)
473 void *addr;
474 u32 cmd, sts;
475 unsigned long flag;
477 addr = iommu->root_entry;
479 spin_lock_irqsave(&iommu->register_lock, flag);
480 dmar_writeq(iommu->reg + DMAR_RTADDR_REG, virt_to_phys(addr));
482 cmd = iommu->gcmd | DMA_GCMD_SRTP;
483 writel(cmd, iommu->reg + DMAR_GCMD_REG);
485 /* Make sure hardware complete it */
486 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
487 readl, (sts & DMA_GSTS_RTPS), sts);
489 spin_unlock_irqrestore(&iommu->register_lock, flag);
492 static void iommu_flush_write_buffer(struct intel_iommu *iommu)
494 u32 val;
495 unsigned long flag;
497 if (!cap_rwbf(iommu->cap))
498 return;
499 val = iommu->gcmd | DMA_GCMD_WBF;
501 spin_lock_irqsave(&iommu->register_lock, flag);
502 writel(val, iommu->reg + DMAR_GCMD_REG);
504 /* Make sure hardware complete it */
505 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
506 readl, (!(val & DMA_GSTS_WBFS)), val);
508 spin_unlock_irqrestore(&iommu->register_lock, flag);
511 /* return value determine if we need a write buffer flush */
512 static int __iommu_flush_context(struct intel_iommu *iommu,
513 u16 did, u16 source_id, u8 function_mask, u64 type,
514 int non_present_entry_flush)
516 u64 val = 0;
517 unsigned long flag;
520 * In the non-present entry flush case, if hardware doesn't cache
521 * non-present entry we do nothing and if hardware cache non-present
522 * entry, we flush entries of domain 0 (the domain id is used to cache
523 * any non-present entries)
525 if (non_present_entry_flush) {
526 if (!cap_caching_mode(iommu->cap))
527 return 1;
528 else
529 did = 0;
532 switch (type) {
533 case DMA_CCMD_GLOBAL_INVL:
534 val = DMA_CCMD_GLOBAL_INVL;
535 break;
536 case DMA_CCMD_DOMAIN_INVL:
537 val = DMA_CCMD_DOMAIN_INVL|DMA_CCMD_DID(did);
538 break;
539 case DMA_CCMD_DEVICE_INVL:
540 val = DMA_CCMD_DEVICE_INVL|DMA_CCMD_DID(did)
541 | DMA_CCMD_SID(source_id) | DMA_CCMD_FM(function_mask);
542 break;
543 default:
544 BUG();
546 val |= DMA_CCMD_ICC;
548 spin_lock_irqsave(&iommu->register_lock, flag);
549 dmar_writeq(iommu->reg + DMAR_CCMD_REG, val);
551 /* Make sure hardware complete it */
552 IOMMU_WAIT_OP(iommu, DMAR_CCMD_REG,
553 dmar_readq, (!(val & DMA_CCMD_ICC)), val);
555 spin_unlock_irqrestore(&iommu->register_lock, flag);
557 /* flush context entry will implictly flush write buffer */
558 return 0;
561 static int inline iommu_flush_context_global(struct intel_iommu *iommu,
562 int non_present_entry_flush)
564 return __iommu_flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL,
565 non_present_entry_flush);
568 static int inline iommu_flush_context_domain(struct intel_iommu *iommu, u16 did,
569 int non_present_entry_flush)
571 return __iommu_flush_context(iommu, did, 0, 0, DMA_CCMD_DOMAIN_INVL,
572 non_present_entry_flush);
575 static int inline iommu_flush_context_device(struct intel_iommu *iommu,
576 u16 did, u16 source_id, u8 function_mask, int non_present_entry_flush)
578 return __iommu_flush_context(iommu, did, source_id, function_mask,
579 DMA_CCMD_DEVICE_INVL, non_present_entry_flush);
582 /* return value determine if we need a write buffer flush */
583 static int __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did,
584 u64 addr, unsigned int size_order, u64 type,
585 int non_present_entry_flush)
587 int tlb_offset = ecap_iotlb_offset(iommu->ecap);
588 u64 val = 0, val_iva = 0;
589 unsigned long flag;
592 * In the non-present entry flush case, if hardware doesn't cache
593 * non-present entry we do nothing and if hardware cache non-present
594 * entry, we flush entries of domain 0 (the domain id is used to cache
595 * any non-present entries)
597 if (non_present_entry_flush) {
598 if (!cap_caching_mode(iommu->cap))
599 return 1;
600 else
601 did = 0;
604 switch (type) {
605 case DMA_TLB_GLOBAL_FLUSH:
606 /* global flush doesn't need set IVA_REG */
607 val = DMA_TLB_GLOBAL_FLUSH|DMA_TLB_IVT;
608 break;
609 case DMA_TLB_DSI_FLUSH:
610 val = DMA_TLB_DSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
611 break;
612 case DMA_TLB_PSI_FLUSH:
613 val = DMA_TLB_PSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
614 /* Note: always flush non-leaf currently */
615 val_iva = size_order | addr;
616 break;
617 default:
618 BUG();
620 /* Note: set drain read/write */
621 #if 0
623 * This is probably to be super secure.. Looks like we can
624 * ignore it without any impact.
626 if (cap_read_drain(iommu->cap))
627 val |= DMA_TLB_READ_DRAIN;
628 #endif
629 if (cap_write_drain(iommu->cap))
630 val |= DMA_TLB_WRITE_DRAIN;
632 spin_lock_irqsave(&iommu->register_lock, flag);
633 /* Note: Only uses first TLB reg currently */
634 if (val_iva)
635 dmar_writeq(iommu->reg + tlb_offset, val_iva);
636 dmar_writeq(iommu->reg + tlb_offset + 8, val);
638 /* Make sure hardware complete it */
639 IOMMU_WAIT_OP(iommu, tlb_offset + 8,
640 dmar_readq, (!(val & DMA_TLB_IVT)), val);
642 spin_unlock_irqrestore(&iommu->register_lock, flag);
644 /* check IOTLB invalidation granularity */
645 if (DMA_TLB_IAIG(val) == 0)
646 printk(KERN_ERR"IOMMU: flush IOTLB failed\n");
647 if (DMA_TLB_IAIG(val) != DMA_TLB_IIRG(type))
648 pr_debug("IOMMU: tlb flush request %Lx, actual %Lx\n",
649 DMA_TLB_IIRG(type), DMA_TLB_IAIG(val));
650 /* flush context entry will implictly flush write buffer */
651 return 0;
654 static int inline iommu_flush_iotlb_global(struct intel_iommu *iommu,
655 int non_present_entry_flush)
657 return __iommu_flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH,
658 non_present_entry_flush);
661 static int inline iommu_flush_iotlb_dsi(struct intel_iommu *iommu, u16 did,
662 int non_present_entry_flush)
664 return __iommu_flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH,
665 non_present_entry_flush);
668 static int iommu_flush_iotlb_psi(struct intel_iommu *iommu, u16 did,
669 u64 addr, unsigned int pages, int non_present_entry_flush)
671 unsigned int mask;
673 BUG_ON(addr & (~PAGE_MASK_4K));
674 BUG_ON(pages == 0);
676 /* Fallback to domain selective flush if no PSI support */
677 if (!cap_pgsel_inv(iommu->cap))
678 return iommu_flush_iotlb_dsi(iommu, did,
679 non_present_entry_flush);
682 * PSI requires page size to be 2 ^ x, and the base address is naturally
683 * aligned to the size
685 mask = ilog2(__roundup_pow_of_two(pages));
686 /* Fallback to domain selective flush if size is too big */
687 if (mask > cap_max_amask_val(iommu->cap))
688 return iommu_flush_iotlb_dsi(iommu, did,
689 non_present_entry_flush);
691 return __iommu_flush_iotlb(iommu, did, addr, mask,
692 DMA_TLB_PSI_FLUSH, non_present_entry_flush);
695 static int iommu_enable_translation(struct intel_iommu *iommu)
697 u32 sts;
698 unsigned long flags;
700 spin_lock_irqsave(&iommu->register_lock, flags);
701 writel(iommu->gcmd|DMA_GCMD_TE, iommu->reg + DMAR_GCMD_REG);
703 /* Make sure hardware complete it */
704 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
705 readl, (sts & DMA_GSTS_TES), sts);
707 iommu->gcmd |= DMA_GCMD_TE;
708 spin_unlock_irqrestore(&iommu->register_lock, flags);
709 return 0;
712 static int iommu_disable_translation(struct intel_iommu *iommu)
714 u32 sts;
715 unsigned long flag;
717 spin_lock_irqsave(&iommu->register_lock, flag);
718 iommu->gcmd &= ~DMA_GCMD_TE;
719 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
721 /* Make sure hardware complete it */
722 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
723 readl, (!(sts & DMA_GSTS_TES)), sts);
725 spin_unlock_irqrestore(&iommu->register_lock, flag);
726 return 0;
729 /* iommu interrupt handling. Most stuff are MSI-like. */
731 static char *fault_reason_strings[] =
733 "Software",
734 "Present bit in root entry is clear",
735 "Present bit in context entry is clear",
736 "Invalid context entry",
737 "Access beyond MGAW",
738 "PTE Write access is not set",
739 "PTE Read access is not set",
740 "Next page table ptr is invalid",
741 "Root table address invalid",
742 "Context table ptr is invalid",
743 "non-zero reserved fields in RTP",
744 "non-zero reserved fields in CTP",
745 "non-zero reserved fields in PTE",
746 "Unknown"
748 #define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings) - 1
750 char *dmar_get_fault_reason(u8 fault_reason)
752 if (fault_reason >= MAX_FAULT_REASON_IDX)
753 return fault_reason_strings[MAX_FAULT_REASON_IDX - 1];
754 else
755 return fault_reason_strings[fault_reason];
758 void dmar_msi_unmask(unsigned int irq)
760 struct intel_iommu *iommu = get_irq_data(irq);
761 unsigned long flag;
763 /* unmask it */
764 spin_lock_irqsave(&iommu->register_lock, flag);
765 writel(0, iommu->reg + DMAR_FECTL_REG);
766 /* Read a reg to force flush the post write */
767 readl(iommu->reg + DMAR_FECTL_REG);
768 spin_unlock_irqrestore(&iommu->register_lock, flag);
771 void dmar_msi_mask(unsigned int irq)
773 unsigned long flag;
774 struct intel_iommu *iommu = get_irq_data(irq);
776 /* mask it */
777 spin_lock_irqsave(&iommu->register_lock, flag);
778 writel(DMA_FECTL_IM, iommu->reg + DMAR_FECTL_REG);
779 /* Read a reg to force flush the post write */
780 readl(iommu->reg + DMAR_FECTL_REG);
781 spin_unlock_irqrestore(&iommu->register_lock, flag);
784 void dmar_msi_write(int irq, struct msi_msg *msg)
786 struct intel_iommu *iommu = get_irq_data(irq);
787 unsigned long flag;
789 spin_lock_irqsave(&iommu->register_lock, flag);
790 writel(msg->data, iommu->reg + DMAR_FEDATA_REG);
791 writel(msg->address_lo, iommu->reg + DMAR_FEADDR_REG);
792 writel(msg->address_hi, iommu->reg + DMAR_FEUADDR_REG);
793 spin_unlock_irqrestore(&iommu->register_lock, flag);
796 void dmar_msi_read(int irq, struct msi_msg *msg)
798 struct intel_iommu *iommu = get_irq_data(irq);
799 unsigned long flag;
801 spin_lock_irqsave(&iommu->register_lock, flag);
802 msg->data = readl(iommu->reg + DMAR_FEDATA_REG);
803 msg->address_lo = readl(iommu->reg + DMAR_FEADDR_REG);
804 msg->address_hi = readl(iommu->reg + DMAR_FEUADDR_REG);
805 spin_unlock_irqrestore(&iommu->register_lock, flag);
808 static int iommu_page_fault_do_one(struct intel_iommu *iommu, int type,
809 u8 fault_reason, u16 source_id, u64 addr)
811 char *reason;
813 reason = dmar_get_fault_reason(fault_reason);
815 printk(KERN_ERR
816 "DMAR:[%s] Request device [%02x:%02x.%d] "
817 "fault addr %llx \n"
818 "DMAR:[fault reason %02d] %s\n",
819 (type ? "DMA Read" : "DMA Write"),
820 (source_id >> 8), PCI_SLOT(source_id & 0xFF),
821 PCI_FUNC(source_id & 0xFF), addr, fault_reason, reason);
822 return 0;
825 #define PRIMARY_FAULT_REG_LEN (16)
826 static irqreturn_t iommu_page_fault(int irq, void *dev_id)
828 struct intel_iommu *iommu = dev_id;
829 int reg, fault_index;
830 u32 fault_status;
831 unsigned long flag;
833 spin_lock_irqsave(&iommu->register_lock, flag);
834 fault_status = readl(iommu->reg + DMAR_FSTS_REG);
836 /* TBD: ignore advanced fault log currently */
837 if (!(fault_status & DMA_FSTS_PPF))
838 goto clear_overflow;
840 fault_index = dma_fsts_fault_record_index(fault_status);
841 reg = cap_fault_reg_offset(iommu->cap);
842 while (1) {
843 u8 fault_reason;
844 u16 source_id;
845 u64 guest_addr;
846 int type;
847 u32 data;
849 /* highest 32 bits */
850 data = readl(iommu->reg + reg +
851 fault_index * PRIMARY_FAULT_REG_LEN + 12);
852 if (!(data & DMA_FRCD_F))
853 break;
855 fault_reason = dma_frcd_fault_reason(data);
856 type = dma_frcd_type(data);
858 data = readl(iommu->reg + reg +
859 fault_index * PRIMARY_FAULT_REG_LEN + 8);
860 source_id = dma_frcd_source_id(data);
862 guest_addr = dmar_readq(iommu->reg + reg +
863 fault_index * PRIMARY_FAULT_REG_LEN);
864 guest_addr = dma_frcd_page_addr(guest_addr);
865 /* clear the fault */
866 writel(DMA_FRCD_F, iommu->reg + reg +
867 fault_index * PRIMARY_FAULT_REG_LEN + 12);
869 spin_unlock_irqrestore(&iommu->register_lock, flag);
871 iommu_page_fault_do_one(iommu, type, fault_reason,
872 source_id, guest_addr);
874 fault_index++;
875 if (fault_index > cap_num_fault_regs(iommu->cap))
876 fault_index = 0;
877 spin_lock_irqsave(&iommu->register_lock, flag);
879 clear_overflow:
880 /* clear primary fault overflow */
881 fault_status = readl(iommu->reg + DMAR_FSTS_REG);
882 if (fault_status & DMA_FSTS_PFO)
883 writel(DMA_FSTS_PFO, iommu->reg + DMAR_FSTS_REG);
885 spin_unlock_irqrestore(&iommu->register_lock, flag);
886 return IRQ_HANDLED;
889 int dmar_set_interrupt(struct intel_iommu *iommu)
891 int irq, ret;
893 irq = create_irq();
894 if (!irq) {
895 printk(KERN_ERR "IOMMU: no free vectors\n");
896 return -EINVAL;
899 set_irq_data(irq, iommu);
900 iommu->irq = irq;
902 ret = arch_setup_dmar_msi(irq);
903 if (ret) {
904 set_irq_data(irq, NULL);
905 iommu->irq = 0;
906 destroy_irq(irq);
907 return 0;
910 /* Force fault register is cleared */
911 iommu_page_fault(irq, iommu);
913 ret = request_irq(irq, iommu_page_fault, 0, iommu->name, iommu);
914 if (ret)
915 printk(KERN_ERR "IOMMU: can't request irq\n");
916 return ret;
919 static int iommu_init_domains(struct intel_iommu *iommu)
921 unsigned long ndomains;
922 unsigned long nlongs;
924 ndomains = cap_ndoms(iommu->cap);
925 pr_debug("Number of Domains supportd <%ld>\n", ndomains);
926 nlongs = BITS_TO_LONGS(ndomains);
928 /* TBD: there might be 64K domains,
929 * consider other allocation for future chip
931 iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), GFP_KERNEL);
932 if (!iommu->domain_ids) {
933 printk(KERN_ERR "Allocating domain id array failed\n");
934 return -ENOMEM;
936 iommu->domains = kcalloc(ndomains, sizeof(struct dmar_domain *),
937 GFP_KERNEL);
938 if (!iommu->domains) {
939 printk(KERN_ERR "Allocating domain array failed\n");
940 kfree(iommu->domain_ids);
941 return -ENOMEM;
945 * if Caching mode is set, then invalid translations are tagged
946 * with domainid 0. Hence we need to pre-allocate it.
948 if (cap_caching_mode(iommu->cap))
949 set_bit(0, iommu->domain_ids);
950 return 0;
953 static struct intel_iommu *alloc_iommu(struct dmar_drhd_unit *drhd)
955 struct intel_iommu *iommu;
956 int ret;
957 int map_size;
958 u32 ver;
960 iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
961 if (!iommu)
962 return NULL;
963 iommu->reg = ioremap(drhd->reg_base_addr, PAGE_SIZE_4K);
964 if (!iommu->reg) {
965 printk(KERN_ERR "IOMMU: can't map the region\n");
966 goto error;
968 iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
969 iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
971 /* the registers might be more than one page */
972 map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
973 cap_max_fault_reg_offset(iommu->cap));
974 map_size = PAGE_ALIGN_4K(map_size);
975 if (map_size > PAGE_SIZE_4K) {
976 iounmap(iommu->reg);
977 iommu->reg = ioremap(drhd->reg_base_addr, map_size);
978 if (!iommu->reg) {
979 printk(KERN_ERR "IOMMU: can't map the region\n");
980 goto error;
984 ver = readl(iommu->reg + DMAR_VER_REG);
985 pr_debug("IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
986 drhd->reg_base_addr, DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
987 iommu->cap, iommu->ecap);
988 ret = iommu_init_domains(iommu);
989 if (ret)
990 goto error_unmap;
991 spin_lock_init(&iommu->lock);
992 spin_lock_init(&iommu->register_lock);
994 drhd->iommu = iommu;
995 return iommu;
996 error_unmap:
997 iounmap(iommu->reg);
998 error:
999 kfree(iommu);
1000 return NULL;
1003 static void domain_exit(struct dmar_domain *domain);
1004 static void free_iommu(struct intel_iommu *iommu)
1006 struct dmar_domain *domain;
1007 int i;
1009 if (!iommu)
1010 return;
1012 i = find_first_bit(iommu->domain_ids, cap_ndoms(iommu->cap));
1013 for (; i < cap_ndoms(iommu->cap); ) {
1014 domain = iommu->domains[i];
1015 clear_bit(i, iommu->domain_ids);
1016 domain_exit(domain);
1017 i = find_next_bit(iommu->domain_ids,
1018 cap_ndoms(iommu->cap), i+1);
1021 if (iommu->gcmd & DMA_GCMD_TE)
1022 iommu_disable_translation(iommu);
1024 if (iommu->irq) {
1025 set_irq_data(iommu->irq, NULL);
1026 /* This will mask the irq */
1027 free_irq(iommu->irq, iommu);
1028 destroy_irq(iommu->irq);
1031 kfree(iommu->domains);
1032 kfree(iommu->domain_ids);
1034 /* free context mapping */
1035 free_context_table(iommu);
1037 if (iommu->reg)
1038 iounmap(iommu->reg);
1039 kfree(iommu);
1042 static struct dmar_domain * iommu_alloc_domain(struct intel_iommu *iommu)
1044 unsigned long num;
1045 unsigned long ndomains;
1046 struct dmar_domain *domain;
1047 unsigned long flags;
1049 domain = alloc_domain_mem();
1050 if (!domain)
1051 return NULL;
1053 ndomains = cap_ndoms(iommu->cap);
1055 spin_lock_irqsave(&iommu->lock, flags);
1056 num = find_first_zero_bit(iommu->domain_ids, ndomains);
1057 if (num >= ndomains) {
1058 spin_unlock_irqrestore(&iommu->lock, flags);
1059 free_domain_mem(domain);
1060 printk(KERN_ERR "IOMMU: no free domain ids\n");
1061 return NULL;
1064 set_bit(num, iommu->domain_ids);
1065 domain->id = num;
1066 domain->iommu = iommu;
1067 iommu->domains[num] = domain;
1068 spin_unlock_irqrestore(&iommu->lock, flags);
1070 return domain;
1073 static void iommu_free_domain(struct dmar_domain *domain)
1075 unsigned long flags;
1077 spin_lock_irqsave(&domain->iommu->lock, flags);
1078 clear_bit(domain->id, domain->iommu->domain_ids);
1079 spin_unlock_irqrestore(&domain->iommu->lock, flags);
1082 static struct iova_domain reserved_iova_list;
1084 static void dmar_init_reserved_ranges(void)
1086 struct pci_dev *pdev = NULL;
1087 struct iova *iova;
1088 int i;
1089 u64 addr, size;
1091 init_iova_domain(&reserved_iova_list);
1093 /* IOAPIC ranges shouldn't be accessed by DMA */
1094 iova = reserve_iova(&reserved_iova_list, IOVA_PFN(IOAPIC_RANGE_START),
1095 IOVA_PFN(IOAPIC_RANGE_END));
1096 if (!iova)
1097 printk(KERN_ERR "Reserve IOAPIC range failed\n");
1099 /* Reserve all PCI MMIO to avoid peer-to-peer access */
1100 for_each_pci_dev(pdev) {
1101 struct resource *r;
1103 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
1104 r = &pdev->resource[i];
1105 if (!r->flags || !(r->flags & IORESOURCE_MEM))
1106 continue;
1107 addr = r->start;
1108 addr &= PAGE_MASK_4K;
1109 size = r->end - addr;
1110 size = PAGE_ALIGN_4K(size);
1111 iova = reserve_iova(&reserved_iova_list, IOVA_PFN(addr),
1112 IOVA_PFN(size + addr) - 1);
1113 if (!iova)
1114 printk(KERN_ERR "Reserve iova failed\n");
1120 static void domain_reserve_special_ranges(struct dmar_domain *domain)
1122 copy_reserved_iova(&reserved_iova_list, &domain->iovad);
1125 static inline int guestwidth_to_adjustwidth(int gaw)
1127 int agaw;
1128 int r = (gaw - 12) % 9;
1130 if (r == 0)
1131 agaw = gaw;
1132 else
1133 agaw = gaw + 9 - r;
1134 if (agaw > 64)
1135 agaw = 64;
1136 return agaw;
1139 static int domain_init(struct dmar_domain *domain, int guest_width)
1141 struct intel_iommu *iommu;
1142 int adjust_width, agaw;
1143 unsigned long sagaw;
1145 init_iova_domain(&domain->iovad);
1146 spin_lock_init(&domain->mapping_lock);
1148 domain_reserve_special_ranges(domain);
1150 /* calculate AGAW */
1151 iommu = domain->iommu;
1152 if (guest_width > cap_mgaw(iommu->cap))
1153 guest_width = cap_mgaw(iommu->cap);
1154 domain->gaw = guest_width;
1155 adjust_width = guestwidth_to_adjustwidth(guest_width);
1156 agaw = width_to_agaw(adjust_width);
1157 sagaw = cap_sagaw(iommu->cap);
1158 if (!test_bit(agaw, &sagaw)) {
1159 /* hardware doesn't support it, choose a bigger one */
1160 pr_debug("IOMMU: hardware doesn't support agaw %d\n", agaw);
1161 agaw = find_next_bit(&sagaw, 5, agaw);
1162 if (agaw >= 5)
1163 return -ENODEV;
1165 domain->agaw = agaw;
1166 INIT_LIST_HEAD(&domain->devices);
1168 /* always allocate the top pgd */
1169 domain->pgd = (struct dma_pte *)alloc_pgtable_page();
1170 if (!domain->pgd)
1171 return -ENOMEM;
1172 __iommu_flush_cache(iommu, domain->pgd, PAGE_SIZE_4K);
1173 return 0;
1176 static void domain_exit(struct dmar_domain *domain)
1178 u64 end;
1180 /* Domain 0 is reserved, so dont process it */
1181 if (!domain)
1182 return;
1184 domain_remove_dev_info(domain);
1185 /* destroy iovas */
1186 put_iova_domain(&domain->iovad);
1187 end = DOMAIN_MAX_ADDR(domain->gaw);
1188 end = end & (~PAGE_MASK_4K);
1190 /* clear ptes */
1191 dma_pte_clear_range(domain, 0, end);
1193 /* free page tables */
1194 dma_pte_free_pagetable(domain, 0, end);
1196 iommu_free_domain(domain);
1197 free_domain_mem(domain);
1200 static int domain_context_mapping_one(struct dmar_domain *domain,
1201 u8 bus, u8 devfn)
1203 struct context_entry *context;
1204 struct intel_iommu *iommu = domain->iommu;
1205 unsigned long flags;
1207 pr_debug("Set context mapping for %02x:%02x.%d\n",
1208 bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
1209 BUG_ON(!domain->pgd);
1210 context = device_to_context_entry(iommu, bus, devfn);
1211 if (!context)
1212 return -ENOMEM;
1213 spin_lock_irqsave(&iommu->lock, flags);
1214 if (context_present(*context)) {
1215 spin_unlock_irqrestore(&iommu->lock, flags);
1216 return 0;
1219 context_set_domain_id(*context, domain->id);
1220 context_set_address_width(*context, domain->agaw);
1221 context_set_address_root(*context, virt_to_phys(domain->pgd));
1222 context_set_translation_type(*context, CONTEXT_TT_MULTI_LEVEL);
1223 context_set_fault_enable(*context);
1224 context_set_present(*context);
1225 __iommu_flush_cache(iommu, context, sizeof(*context));
1227 /* it's a non-present to present mapping */
1228 if (iommu_flush_context_device(iommu, domain->id,
1229 (((u16)bus) << 8) | devfn, DMA_CCMD_MASK_NOBIT, 1))
1230 iommu_flush_write_buffer(iommu);
1231 else
1232 iommu_flush_iotlb_dsi(iommu, 0, 0);
1233 spin_unlock_irqrestore(&iommu->lock, flags);
1234 return 0;
1237 static int
1238 domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev)
1240 int ret;
1241 struct pci_dev *tmp, *parent;
1243 ret = domain_context_mapping_one(domain, pdev->bus->number,
1244 pdev->devfn);
1245 if (ret)
1246 return ret;
1248 /* dependent device mapping */
1249 tmp = pci_find_upstream_pcie_bridge(pdev);
1250 if (!tmp)
1251 return 0;
1252 /* Secondary interface's bus number and devfn 0 */
1253 parent = pdev->bus->self;
1254 while (parent != tmp) {
1255 ret = domain_context_mapping_one(domain, parent->bus->number,
1256 parent->devfn);
1257 if (ret)
1258 return ret;
1259 parent = parent->bus->self;
1261 if (tmp->is_pcie) /* this is a PCIE-to-PCI bridge */
1262 return domain_context_mapping_one(domain,
1263 tmp->subordinate->number, 0);
1264 else /* this is a legacy PCI bridge */
1265 return domain_context_mapping_one(domain,
1266 tmp->bus->number, tmp->devfn);
1269 static int domain_context_mapped(struct dmar_domain *domain,
1270 struct pci_dev *pdev)
1272 int ret;
1273 struct pci_dev *tmp, *parent;
1275 ret = device_context_mapped(domain->iommu,
1276 pdev->bus->number, pdev->devfn);
1277 if (!ret)
1278 return ret;
1279 /* dependent device mapping */
1280 tmp = pci_find_upstream_pcie_bridge(pdev);
1281 if (!tmp)
1282 return ret;
1283 /* Secondary interface's bus number and devfn 0 */
1284 parent = pdev->bus->self;
1285 while (parent != tmp) {
1286 ret = device_context_mapped(domain->iommu, parent->bus->number,
1287 parent->devfn);
1288 if (!ret)
1289 return ret;
1290 parent = parent->bus->self;
1292 if (tmp->is_pcie)
1293 return device_context_mapped(domain->iommu,
1294 tmp->subordinate->number, 0);
1295 else
1296 return device_context_mapped(domain->iommu,
1297 tmp->bus->number, tmp->devfn);
1300 static int
1301 domain_page_mapping(struct dmar_domain *domain, dma_addr_t iova,
1302 u64 hpa, size_t size, int prot)
1304 u64 start_pfn, end_pfn;
1305 struct dma_pte *pte;
1306 int index;
1308 if ((prot & (DMA_PTE_READ|DMA_PTE_WRITE)) == 0)
1309 return -EINVAL;
1310 iova &= PAGE_MASK_4K;
1311 start_pfn = ((u64)hpa) >> PAGE_SHIFT_4K;
1312 end_pfn = (PAGE_ALIGN_4K(((u64)hpa) + size)) >> PAGE_SHIFT_4K;
1313 index = 0;
1314 while (start_pfn < end_pfn) {
1315 pte = addr_to_dma_pte(domain, iova + PAGE_SIZE_4K * index);
1316 if (!pte)
1317 return -ENOMEM;
1318 /* We don't need lock here, nobody else
1319 * touches the iova range
1321 BUG_ON(dma_pte_addr(*pte));
1322 dma_set_pte_addr(*pte, start_pfn << PAGE_SHIFT_4K);
1323 dma_set_pte_prot(*pte, prot);
1324 __iommu_flush_cache(domain->iommu, pte, sizeof(*pte));
1325 start_pfn++;
1326 index++;
1328 return 0;
1331 static void detach_domain_for_dev(struct dmar_domain *domain, u8 bus, u8 devfn)
1333 clear_context_table(domain->iommu, bus, devfn);
1334 iommu_flush_context_global(domain->iommu, 0);
1335 iommu_flush_iotlb_global(domain->iommu, 0);
1338 static void domain_remove_dev_info(struct dmar_domain *domain)
1340 struct device_domain_info *info;
1341 unsigned long flags;
1343 spin_lock_irqsave(&device_domain_lock, flags);
1344 while (!list_empty(&domain->devices)) {
1345 info = list_entry(domain->devices.next,
1346 struct device_domain_info, link);
1347 list_del(&info->link);
1348 list_del(&info->global);
1349 if (info->dev)
1350 info->dev->dev.archdata.iommu = NULL;
1351 spin_unlock_irqrestore(&device_domain_lock, flags);
1353 detach_domain_for_dev(info->domain, info->bus, info->devfn);
1354 free_devinfo_mem(info);
1356 spin_lock_irqsave(&device_domain_lock, flags);
1358 spin_unlock_irqrestore(&device_domain_lock, flags);
1362 * find_domain
1363 * Note: we use struct pci_dev->dev.archdata.iommu stores the info
1365 struct dmar_domain *
1366 find_domain(struct pci_dev *pdev)
1368 struct device_domain_info *info;
1370 /* No lock here, assumes no domain exit in normal case */
1371 info = pdev->dev.archdata.iommu;
1372 if (info)
1373 return info->domain;
1374 return NULL;
1377 static int dmar_pci_device_match(struct pci_dev *devices[], int cnt,
1378 struct pci_dev *dev)
1380 int index;
1382 while (dev) {
1383 for (index = 0; index < cnt; index ++)
1384 if (dev == devices[index])
1385 return 1;
1387 /* Check our parent */
1388 dev = dev->bus->self;
1391 return 0;
1394 static struct dmar_drhd_unit *
1395 dmar_find_matched_drhd_unit(struct pci_dev *dev)
1397 struct dmar_drhd_unit *drhd = NULL;
1399 list_for_each_entry(drhd, &dmar_drhd_units, list) {
1400 if (drhd->include_all || dmar_pci_device_match(drhd->devices,
1401 drhd->devices_cnt, dev))
1402 return drhd;
1405 return NULL;
1408 /* domain is initialized */
1409 static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
1411 struct dmar_domain *domain, *found = NULL;
1412 struct intel_iommu *iommu;
1413 struct dmar_drhd_unit *drhd;
1414 struct device_domain_info *info, *tmp;
1415 struct pci_dev *dev_tmp;
1416 unsigned long flags;
1417 int bus = 0, devfn = 0;
1419 domain = find_domain(pdev);
1420 if (domain)
1421 return domain;
1423 dev_tmp = pci_find_upstream_pcie_bridge(pdev);
1424 if (dev_tmp) {
1425 if (dev_tmp->is_pcie) {
1426 bus = dev_tmp->subordinate->number;
1427 devfn = 0;
1428 } else {
1429 bus = dev_tmp->bus->number;
1430 devfn = dev_tmp->devfn;
1432 spin_lock_irqsave(&device_domain_lock, flags);
1433 list_for_each_entry(info, &device_domain_list, global) {
1434 if (info->bus == bus && info->devfn == devfn) {
1435 found = info->domain;
1436 break;
1439 spin_unlock_irqrestore(&device_domain_lock, flags);
1440 /* pcie-pci bridge already has a domain, uses it */
1441 if (found) {
1442 domain = found;
1443 goto found_domain;
1447 /* Allocate new domain for the device */
1448 drhd = dmar_find_matched_drhd_unit(pdev);
1449 if (!drhd) {
1450 printk(KERN_ERR "IOMMU: can't find DMAR for device %s\n",
1451 pci_name(pdev));
1452 return NULL;
1454 iommu = drhd->iommu;
1456 domain = iommu_alloc_domain(iommu);
1457 if (!domain)
1458 goto error;
1460 if (domain_init(domain, gaw)) {
1461 domain_exit(domain);
1462 goto error;
1465 /* register pcie-to-pci device */
1466 if (dev_tmp) {
1467 info = alloc_devinfo_mem();
1468 if (!info) {
1469 domain_exit(domain);
1470 goto error;
1472 info->bus = bus;
1473 info->devfn = devfn;
1474 info->dev = NULL;
1475 info->domain = domain;
1476 /* This domain is shared by devices under p2p bridge */
1477 domain->flags |= DOMAIN_FLAG_MULTIPLE_DEVICES;
1479 /* pcie-to-pci bridge already has a domain, uses it */
1480 found = NULL;
1481 spin_lock_irqsave(&device_domain_lock, flags);
1482 list_for_each_entry(tmp, &device_domain_list, global) {
1483 if (tmp->bus == bus && tmp->devfn == devfn) {
1484 found = tmp->domain;
1485 break;
1488 if (found) {
1489 free_devinfo_mem(info);
1490 domain_exit(domain);
1491 domain = found;
1492 } else {
1493 list_add(&info->link, &domain->devices);
1494 list_add(&info->global, &device_domain_list);
1496 spin_unlock_irqrestore(&device_domain_lock, flags);
1499 found_domain:
1500 info = alloc_devinfo_mem();
1501 if (!info)
1502 goto error;
1503 info->bus = pdev->bus->number;
1504 info->devfn = pdev->devfn;
1505 info->dev = pdev;
1506 info->domain = domain;
1507 spin_lock_irqsave(&device_domain_lock, flags);
1508 /* somebody is fast */
1509 found = find_domain(pdev);
1510 if (found != NULL) {
1511 spin_unlock_irqrestore(&device_domain_lock, flags);
1512 if (found != domain) {
1513 domain_exit(domain);
1514 domain = found;
1516 free_devinfo_mem(info);
1517 return domain;
1519 list_add(&info->link, &domain->devices);
1520 list_add(&info->global, &device_domain_list);
1521 pdev->dev.archdata.iommu = info;
1522 spin_unlock_irqrestore(&device_domain_lock, flags);
1523 return domain;
1524 error:
1525 /* recheck it here, maybe others set it */
1526 return find_domain(pdev);
1529 static int iommu_prepare_identity_map(struct pci_dev *pdev, u64 start, u64 end)
1531 struct dmar_domain *domain;
1532 unsigned long size;
1533 u64 base;
1534 int ret;
1536 printk(KERN_INFO
1537 "IOMMU: Setting identity map for device %s [0x%Lx - 0x%Lx]\n",
1538 pci_name(pdev), start, end);
1539 /* page table init */
1540 domain = get_domain_for_dev(pdev, DEFAULT_DOMAIN_ADDRESS_WIDTH);
1541 if (!domain)
1542 return -ENOMEM;
1544 /* The address might not be aligned */
1545 base = start & PAGE_MASK_4K;
1546 size = end - base;
1547 size = PAGE_ALIGN_4K(size);
1548 if (!reserve_iova(&domain->iovad, IOVA_PFN(base),
1549 IOVA_PFN(base + size) - 1)) {
1550 printk(KERN_ERR "IOMMU: reserve iova failed\n");
1551 ret = -ENOMEM;
1552 goto error;
1555 pr_debug("Mapping reserved region %lx@%llx for %s\n",
1556 size, base, pci_name(pdev));
1558 * RMRR range might have overlap with physical memory range,
1559 * clear it first
1561 dma_pte_clear_range(domain, base, base + size);
1563 ret = domain_page_mapping(domain, base, base, size,
1564 DMA_PTE_READ|DMA_PTE_WRITE);
1565 if (ret)
1566 goto error;
1568 /* context entry init */
1569 ret = domain_context_mapping(domain, pdev);
1570 if (!ret)
1571 return 0;
1572 error:
1573 domain_exit(domain);
1574 return ret;
1578 static inline int iommu_prepare_rmrr_dev(struct dmar_rmrr_unit *rmrr,
1579 struct pci_dev *pdev)
1581 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
1582 return 0;
1583 return iommu_prepare_identity_map(pdev, rmrr->base_address,
1584 rmrr->end_address + 1);
1587 #ifdef CONFIG_DMAR_GFX_WA
1588 extern int arch_get_ram_range(int slot, u64 *addr, u64 *size);
1589 static void __init iommu_prepare_gfx_mapping(void)
1591 struct pci_dev *pdev = NULL;
1592 u64 base, size;
1593 int slot;
1594 int ret;
1596 for_each_pci_dev(pdev) {
1597 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO ||
1598 !IS_GFX_DEVICE(pdev))
1599 continue;
1600 printk(KERN_INFO "IOMMU: gfx device %s 1-1 mapping\n",
1601 pci_name(pdev));
1602 slot = arch_get_ram_range(0, &base, &size);
1603 while (slot >= 0) {
1604 ret = iommu_prepare_identity_map(pdev,
1605 base, base + size);
1606 if (ret)
1607 goto error;
1608 slot = arch_get_ram_range(slot, &base, &size);
1610 continue;
1611 error:
1612 printk(KERN_ERR "IOMMU: mapping reserved region failed\n");
1615 #endif
1617 #ifdef CONFIG_DMAR_FLOPPY_WA
1618 static inline void iommu_prepare_isa(void)
1620 struct pci_dev *pdev;
1621 int ret;
1623 pdev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
1624 if (!pdev)
1625 return;
1627 printk(KERN_INFO "IOMMU: Prepare 0-16M unity mapping for LPC\n");
1628 ret = iommu_prepare_identity_map(pdev, 0, 16*1024*1024);
1630 if (ret)
1631 printk("IOMMU: Failed to create 0-64M identity map, "
1632 "floppy might not work\n");
1635 #else
1636 static inline void iommu_prepare_isa(void)
1638 return;
1640 #endif /* !CONFIG_DMAR_FLPY_WA */
1642 int __init init_dmars(void)
1644 struct dmar_drhd_unit *drhd;
1645 struct dmar_rmrr_unit *rmrr;
1646 struct pci_dev *pdev;
1647 struct intel_iommu *iommu;
1648 int ret, unit = 0;
1651 * for each drhd
1652 * allocate root
1653 * initialize and program root entry to not present
1654 * endfor
1656 for_each_drhd_unit(drhd) {
1657 if (drhd->ignored)
1658 continue;
1659 iommu = alloc_iommu(drhd);
1660 if (!iommu) {
1661 ret = -ENOMEM;
1662 goto error;
1666 * TBD:
1667 * we could share the same root & context tables
1668 * amoung all IOMMU's. Need to Split it later.
1670 ret = iommu_alloc_root_entry(iommu);
1671 if (ret) {
1672 printk(KERN_ERR "IOMMU: allocate root entry failed\n");
1673 goto error;
1678 * For each rmrr
1679 * for each dev attached to rmrr
1680 * do
1681 * locate drhd for dev, alloc domain for dev
1682 * allocate free domain
1683 * allocate page table entries for rmrr
1684 * if context not allocated for bus
1685 * allocate and init context
1686 * set present in root table for this bus
1687 * init context with domain, translation etc
1688 * endfor
1689 * endfor
1691 for_each_rmrr_units(rmrr) {
1692 int i;
1693 for (i = 0; i < rmrr->devices_cnt; i++) {
1694 pdev = rmrr->devices[i];
1695 /* some BIOS lists non-exist devices in DMAR table */
1696 if (!pdev)
1697 continue;
1698 ret = iommu_prepare_rmrr_dev(rmrr, pdev);
1699 if (ret)
1700 printk(KERN_ERR
1701 "IOMMU: mapping reserved region failed\n");
1705 iommu_prepare_gfx_mapping();
1707 iommu_prepare_isa();
1710 * for each drhd
1711 * enable fault log
1712 * global invalidate context cache
1713 * global invalidate iotlb
1714 * enable translation
1716 for_each_drhd_unit(drhd) {
1717 if (drhd->ignored)
1718 continue;
1719 iommu = drhd->iommu;
1720 sprintf (iommu->name, "dmar%d", unit++);
1722 iommu_flush_write_buffer(iommu);
1724 ret = dmar_set_interrupt(iommu);
1725 if (ret)
1726 goto error;
1728 iommu_set_root_entry(iommu);
1730 iommu_flush_context_global(iommu, 0);
1731 iommu_flush_iotlb_global(iommu, 0);
1733 ret = iommu_enable_translation(iommu);
1734 if (ret)
1735 goto error;
1738 return 0;
1739 error:
1740 for_each_drhd_unit(drhd) {
1741 if (drhd->ignored)
1742 continue;
1743 iommu = drhd->iommu;
1744 free_iommu(iommu);
1746 return ret;
1749 static inline u64 aligned_size(u64 host_addr, size_t size)
1751 u64 addr;
1752 addr = (host_addr & (~PAGE_MASK_4K)) + size;
1753 return PAGE_ALIGN_4K(addr);
1756 struct iova *
1757 iommu_alloc_iova(struct dmar_domain *domain, size_t size, u64 end)
1759 struct iova *piova;
1761 /* Make sure it's in range */
1762 end = min_t(u64, DOMAIN_MAX_ADDR(domain->gaw), end);
1763 if (!size || (IOVA_START_ADDR + size > end))
1764 return NULL;
1766 piova = alloc_iova(&domain->iovad,
1767 size >> PAGE_SHIFT_4K, IOVA_PFN(end), 1);
1768 return piova;
1771 static struct iova *
1772 __intel_alloc_iova(struct device *dev, struct dmar_domain *domain,
1773 size_t size)
1775 struct pci_dev *pdev = to_pci_dev(dev);
1776 struct iova *iova = NULL;
1778 if ((pdev->dma_mask <= DMA_32BIT_MASK) || (dmar_forcedac)) {
1779 iova = iommu_alloc_iova(domain, size, pdev->dma_mask);
1780 } else {
1782 * First try to allocate an io virtual address in
1783 * DMA_32BIT_MASK and if that fails then try allocating
1784 * from higer range
1786 iova = iommu_alloc_iova(domain, size, DMA_32BIT_MASK);
1787 if (!iova)
1788 iova = iommu_alloc_iova(domain, size, pdev->dma_mask);
1791 if (!iova) {
1792 printk(KERN_ERR"Allocating iova for %s failed", pci_name(pdev));
1793 return NULL;
1796 return iova;
1799 static struct dmar_domain *
1800 get_valid_domain_for_dev(struct pci_dev *pdev)
1802 struct dmar_domain *domain;
1803 int ret;
1805 domain = get_domain_for_dev(pdev,
1806 DEFAULT_DOMAIN_ADDRESS_WIDTH);
1807 if (!domain) {
1808 printk(KERN_ERR
1809 "Allocating domain for %s failed", pci_name(pdev));
1810 return NULL;
1813 /* make sure context mapping is ok */
1814 if (unlikely(!domain_context_mapped(domain, pdev))) {
1815 ret = domain_context_mapping(domain, pdev);
1816 if (ret) {
1817 printk(KERN_ERR
1818 "Domain context map for %s failed",
1819 pci_name(pdev));
1820 return NULL;
1824 return domain;
1827 static dma_addr_t intel_map_single(struct device *hwdev, void *addr,
1828 size_t size, int dir)
1830 struct pci_dev *pdev = to_pci_dev(hwdev);
1831 int ret;
1832 struct dmar_domain *domain;
1833 unsigned long start_addr;
1834 struct iova *iova;
1835 int prot = 0;
1837 BUG_ON(dir == DMA_NONE);
1838 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
1839 return virt_to_bus(addr);
1841 domain = get_valid_domain_for_dev(pdev);
1842 if (!domain)
1843 return 0;
1845 addr = (void *)virt_to_phys(addr);
1846 size = aligned_size((u64)addr, size);
1848 iova = __intel_alloc_iova(hwdev, domain, size);
1849 if (!iova)
1850 goto error;
1852 start_addr = iova->pfn_lo << PAGE_SHIFT_4K;
1855 * Check if DMAR supports zero-length reads on write only
1856 * mappings..
1858 if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL || \
1859 !cap_zlr(domain->iommu->cap))
1860 prot |= DMA_PTE_READ;
1861 if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)
1862 prot |= DMA_PTE_WRITE;
1864 * addr - (addr + size) might be partial page, we should map the whole
1865 * page. Note: if two part of one page are separately mapped, we
1866 * might have two guest_addr mapping to the same host addr, but this
1867 * is not a big problem
1869 ret = domain_page_mapping(domain, start_addr,
1870 ((u64)addr) & PAGE_MASK_4K, size, prot);
1871 if (ret)
1872 goto error;
1874 pr_debug("Device %s request: %lx@%llx mapping: %lx@%llx, dir %d\n",
1875 pci_name(pdev), size, (u64)addr,
1876 size, (u64)start_addr, dir);
1878 /* it's a non-present to present mapping */
1879 ret = iommu_flush_iotlb_psi(domain->iommu, domain->id,
1880 start_addr, size >> PAGE_SHIFT_4K, 1);
1881 if (ret)
1882 iommu_flush_write_buffer(domain->iommu);
1884 return (start_addr + ((u64)addr & (~PAGE_MASK_4K)));
1886 error:
1887 if (iova)
1888 __free_iova(&domain->iovad, iova);
1889 printk(KERN_ERR"Device %s request: %lx@%llx dir %d --- failed\n",
1890 pci_name(pdev), size, (u64)addr, dir);
1891 return 0;
1894 static void intel_unmap_single(struct device *dev, dma_addr_t dev_addr,
1895 size_t size, int dir)
1897 struct pci_dev *pdev = to_pci_dev(dev);
1898 struct dmar_domain *domain;
1899 unsigned long start_addr;
1900 struct iova *iova;
1902 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
1903 return;
1904 domain = find_domain(pdev);
1905 BUG_ON(!domain);
1907 iova = find_iova(&domain->iovad, IOVA_PFN(dev_addr));
1908 if (!iova)
1909 return;
1911 start_addr = iova->pfn_lo << PAGE_SHIFT_4K;
1912 size = aligned_size((u64)dev_addr, size);
1914 pr_debug("Device %s unmapping: %lx@%llx\n",
1915 pci_name(pdev), size, (u64)start_addr);
1917 /* clear the whole page */
1918 dma_pte_clear_range(domain, start_addr, start_addr + size);
1919 /* free page tables */
1920 dma_pte_free_pagetable(domain, start_addr, start_addr + size);
1922 if (iommu_flush_iotlb_psi(domain->iommu, domain->id, start_addr,
1923 size >> PAGE_SHIFT_4K, 0))
1924 iommu_flush_write_buffer(domain->iommu);
1926 /* free iova */
1927 __free_iova(&domain->iovad, iova);
1930 static void * intel_alloc_coherent(struct device *hwdev, size_t size,
1931 dma_addr_t *dma_handle, gfp_t flags)
1933 void *vaddr;
1934 int order;
1936 size = PAGE_ALIGN_4K(size);
1937 order = get_order(size);
1938 flags &= ~(GFP_DMA | GFP_DMA32);
1940 vaddr = (void *)__get_free_pages(flags, order);
1941 if (!vaddr)
1942 return NULL;
1943 memset(vaddr, 0, size);
1945 *dma_handle = intel_map_single(hwdev, vaddr, size, DMA_BIDIRECTIONAL);
1946 if (*dma_handle)
1947 return vaddr;
1948 free_pages((unsigned long)vaddr, order);
1949 return NULL;
1952 static void intel_free_coherent(struct device *hwdev, size_t size,
1953 void *vaddr, dma_addr_t dma_handle)
1955 int order;
1957 size = PAGE_ALIGN_4K(size);
1958 order = get_order(size);
1960 intel_unmap_single(hwdev, dma_handle, size, DMA_BIDIRECTIONAL);
1961 free_pages((unsigned long)vaddr, order);
1964 #define SG_ENT_VIRT_ADDRESS(sg) (sg_virt((sg)))
1965 static void intel_unmap_sg(struct device *hwdev, struct scatterlist *sglist,
1966 int nelems, int dir)
1968 int i;
1969 struct pci_dev *pdev = to_pci_dev(hwdev);
1970 struct dmar_domain *domain;
1971 unsigned long start_addr;
1972 struct iova *iova;
1973 size_t size = 0;
1974 void *addr;
1975 struct scatterlist *sg;
1977 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
1978 return;
1980 domain = find_domain(pdev);
1982 iova = find_iova(&domain->iovad, IOVA_PFN(sglist[0].dma_address));
1983 if (!iova)
1984 return;
1985 for_each_sg(sglist, sg, nelems, i) {
1986 addr = SG_ENT_VIRT_ADDRESS(sg);
1987 size += aligned_size((u64)addr, sg->length);
1990 start_addr = iova->pfn_lo << PAGE_SHIFT_4K;
1992 /* clear the whole page */
1993 dma_pte_clear_range(domain, start_addr, start_addr + size);
1994 /* free page tables */
1995 dma_pte_free_pagetable(domain, start_addr, start_addr + size);
1997 if (iommu_flush_iotlb_psi(domain->iommu, domain->id, start_addr,
1998 size >> PAGE_SHIFT_4K, 0))
1999 iommu_flush_write_buffer(domain->iommu);
2001 /* free iova */
2002 __free_iova(&domain->iovad, iova);
2005 static int intel_nontranslate_map_sg(struct device *hddev,
2006 struct scatterlist *sglist, int nelems, int dir)
2008 int i;
2009 struct scatterlist *sg;
2011 for_each_sg(sglist, sg, nelems, i) {
2012 BUG_ON(!sg_page(sg));
2013 sg->dma_address = virt_to_bus(SG_ENT_VIRT_ADDRESS(sg));
2014 sg->dma_length = sg->length;
2016 return nelems;
2019 static int intel_map_sg(struct device *hwdev, struct scatterlist *sglist,
2020 int nelems, int dir)
2022 void *addr;
2023 int i;
2024 struct pci_dev *pdev = to_pci_dev(hwdev);
2025 struct dmar_domain *domain;
2026 size_t size = 0;
2027 int prot = 0;
2028 size_t offset = 0;
2029 struct iova *iova = NULL;
2030 int ret;
2031 struct scatterlist *sg;
2032 unsigned long start_addr;
2034 BUG_ON(dir == DMA_NONE);
2035 if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
2036 return intel_nontranslate_map_sg(hwdev, sglist, nelems, dir);
2038 domain = get_valid_domain_for_dev(pdev);
2039 if (!domain)
2040 return 0;
2042 for_each_sg(sglist, sg, nelems, i) {
2043 addr = SG_ENT_VIRT_ADDRESS(sg);
2044 addr = (void *)virt_to_phys(addr);
2045 size += aligned_size((u64)addr, sg->length);
2048 iova = __intel_alloc_iova(hwdev, domain, size);
2049 if (!iova) {
2050 sglist->dma_length = 0;
2051 return 0;
2055 * Check if DMAR supports zero-length reads on write only
2056 * mappings..
2058 if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL || \
2059 !cap_zlr(domain->iommu->cap))
2060 prot |= DMA_PTE_READ;
2061 if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)
2062 prot |= DMA_PTE_WRITE;
2064 start_addr = iova->pfn_lo << PAGE_SHIFT_4K;
2065 offset = 0;
2066 for_each_sg(sglist, sg, nelems, i) {
2067 addr = SG_ENT_VIRT_ADDRESS(sg);
2068 addr = (void *)virt_to_phys(addr);
2069 size = aligned_size((u64)addr, sg->length);
2070 ret = domain_page_mapping(domain, start_addr + offset,
2071 ((u64)addr) & PAGE_MASK_4K,
2072 size, prot);
2073 if (ret) {
2074 /* clear the page */
2075 dma_pte_clear_range(domain, start_addr,
2076 start_addr + offset);
2077 /* free page tables */
2078 dma_pte_free_pagetable(domain, start_addr,
2079 start_addr + offset);
2080 /* free iova */
2081 __free_iova(&domain->iovad, iova);
2082 return 0;
2084 sg->dma_address = start_addr + offset +
2085 ((u64)addr & (~PAGE_MASK_4K));
2086 sg->dma_length = sg->length;
2087 offset += size;
2090 /* it's a non-present to present mapping */
2091 if (iommu_flush_iotlb_psi(domain->iommu, domain->id,
2092 start_addr, offset >> PAGE_SHIFT_4K, 1))
2093 iommu_flush_write_buffer(domain->iommu);
2094 return nelems;
2097 static struct dma_mapping_ops intel_dma_ops = {
2098 .alloc_coherent = intel_alloc_coherent,
2099 .free_coherent = intel_free_coherent,
2100 .map_single = intel_map_single,
2101 .unmap_single = intel_unmap_single,
2102 .map_sg = intel_map_sg,
2103 .unmap_sg = intel_unmap_sg,
2106 static inline int iommu_domain_cache_init(void)
2108 int ret = 0;
2110 iommu_domain_cache = kmem_cache_create("iommu_domain",
2111 sizeof(struct dmar_domain),
2113 SLAB_HWCACHE_ALIGN,
2115 NULL);
2116 if (!iommu_domain_cache) {
2117 printk(KERN_ERR "Couldn't create iommu_domain cache\n");
2118 ret = -ENOMEM;
2121 return ret;
2124 static inline int iommu_devinfo_cache_init(void)
2126 int ret = 0;
2128 iommu_devinfo_cache = kmem_cache_create("iommu_devinfo",
2129 sizeof(struct device_domain_info),
2131 SLAB_HWCACHE_ALIGN,
2133 NULL);
2134 if (!iommu_devinfo_cache) {
2135 printk(KERN_ERR "Couldn't create devinfo cache\n");
2136 ret = -ENOMEM;
2139 return ret;
2142 static inline int iommu_iova_cache_init(void)
2144 int ret = 0;
2146 iommu_iova_cache = kmem_cache_create("iommu_iova",
2147 sizeof(struct iova),
2149 SLAB_HWCACHE_ALIGN,
2151 NULL);
2152 if (!iommu_iova_cache) {
2153 printk(KERN_ERR "Couldn't create iova cache\n");
2154 ret = -ENOMEM;
2157 return ret;
2160 static int __init iommu_init_mempool(void)
2162 int ret;
2163 ret = iommu_iova_cache_init();
2164 if (ret)
2165 return ret;
2167 ret = iommu_domain_cache_init();
2168 if (ret)
2169 goto domain_error;
2171 ret = iommu_devinfo_cache_init();
2172 if (!ret)
2173 return ret;
2175 kmem_cache_destroy(iommu_domain_cache);
2176 domain_error:
2177 kmem_cache_destroy(iommu_iova_cache);
2179 return -ENOMEM;
2182 static void __init iommu_exit_mempool(void)
2184 kmem_cache_destroy(iommu_devinfo_cache);
2185 kmem_cache_destroy(iommu_domain_cache);
2186 kmem_cache_destroy(iommu_iova_cache);
2190 void __init detect_intel_iommu(void)
2192 if (swiotlb || no_iommu || iommu_detected || dmar_disabled)
2193 return;
2194 if (early_dmar_detect()) {
2195 iommu_detected = 1;
2199 static void __init init_no_remapping_devices(void)
2201 struct dmar_drhd_unit *drhd;
2203 for_each_drhd_unit(drhd) {
2204 if (!drhd->include_all) {
2205 int i;
2206 for (i = 0; i < drhd->devices_cnt; i++)
2207 if (drhd->devices[i] != NULL)
2208 break;
2209 /* ignore DMAR unit if no pci devices exist */
2210 if (i == drhd->devices_cnt)
2211 drhd->ignored = 1;
2215 if (dmar_map_gfx)
2216 return;
2218 for_each_drhd_unit(drhd) {
2219 int i;
2220 if (drhd->ignored || drhd->include_all)
2221 continue;
2223 for (i = 0; i < drhd->devices_cnt; i++)
2224 if (drhd->devices[i] &&
2225 !IS_GFX_DEVICE(drhd->devices[i]))
2226 break;
2228 if (i < drhd->devices_cnt)
2229 continue;
2231 /* bypass IOMMU if it is just for gfx devices */
2232 drhd->ignored = 1;
2233 for (i = 0; i < drhd->devices_cnt; i++) {
2234 if (!drhd->devices[i])
2235 continue;
2236 drhd->devices[i]->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO;
2241 int __init intel_iommu_init(void)
2243 int ret = 0;
2245 if (no_iommu || swiotlb || dmar_disabled)
2246 return -ENODEV;
2248 if (dmar_table_init())
2249 return -ENODEV;
2251 iommu_init_mempool();
2252 dmar_init_reserved_ranges();
2254 init_no_remapping_devices();
2256 ret = init_dmars();
2257 if (ret) {
2258 printk(KERN_ERR "IOMMU: dmar init failed\n");
2259 put_iova_domain(&reserved_iova_list);
2260 iommu_exit_mempool();
2261 return ret;
2263 printk(KERN_INFO
2264 "PCI-DMA: Intel(R) Virtualization Technology for Directed I/O\n");
2266 force_iommu = 1;
2267 dma_ops = &intel_dma_ops;
2268 return 0;