| 1 | = Hardware & Software Requirements = |
| 2 | * Hardware IODMA enabled in BIOS and in the kernel. Linux SWIOTLB does not guarantee 4K aligned addresses which are required by the current hardware. |
| 3 | * In BIOS, Intel VT-d or AMD-Vi (AMD IOMMU) virtualization technologies have to be enabled. |
| 4 | * The Linux support of Intel VT-d is enabled with "intel_iommu=on" kernel parameter (alternative is to build kernel with CONFIG_INTEL_IOMMU_DEFAULT_ON). |
| 5 | * To check if hardware IOMMU is used run {{{dmesg | grep -e IOMMU -e DMAR -e PCI-DMA}}} |
| 6 | * Following output indicates enabled hardware IOMMU ('''good''') |
| 7 | {{{ |
| 8 | [ 0.000000] Intel-IOMMU: enabled |
| 9 | [ 0.124951] dmar: IOMMU 0: reg_base_addr fbffc000 ver 1:0 cap d2078c106f0466 ecap f020df |
| 10 | [ 0.125044] IOAPIC id 0 under DRHD base 0xfbffc000 IOMMU 0 |
| 11 | [ 0.125045] IOAPIC id 2 under DRHD base 0xfbffc000 IOMMU 0 |
| 12 | [ 0.836366] IOMMU 0 0xfbffc000: using Queued invalidation |
| 13 | [ 0.836370] IOMMU: Setting RMRR: |
| 14 | [ 0.836377] IOMMU: Setting identity map for device 0000:00:1d.0 [0x7ccd2000 - 0x7ccf6fff] |
| 15 | [ 0.836387] IOMMU: Setting identity map for device 0000:00:1a.0 [0x7ccd2000 - 0x7ccf6fff] |
| 16 | [ 0.836390] IOMMU: Prepare 0-16MiB unity mapping for LPC |
| 17 | [ 0.836394] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff] |
| 18 | [ 0.836400] PCI-DMA: Intel(R) Virtualization Technology for Directed I/O |
| 19 | }}} |
| 20 | * And the following output will be produced if software SWIOTLB is actually used ('''bad''') |
| 21 | {{{ |
| 22 | [ 1.169614] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) |
| 23 | [ 1.169618] Placing 64MB software IO TLB between ffff8800bb766000 - ffff8800bf766000 |
| 24 | [ 1.169620] software IO TLB at phys 0xbb766000 - 0xbf766000 |
| 25 | }}} |
| 26 | |