^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # The IOVA library may also be used by non-IOMMU_API users
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) config IOMMU_IOVA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) tristate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) # The IOASID library may also be used by non-IOMMU_API users
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) config IOASID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) tristate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) # IOMMU_API always gets selected by whoever wants it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) config IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) bool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) if IOMMU_IOVA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) config IOMMU_LIMIT_IOVA_ALIGNMENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) bool "Limit IOVA alignment"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) When the IOVA framework applies IOVA alignment it aligns all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) IOVAs to the smallest PAGE_SIZE order which is greater than or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) equal to the requested IOVA size. This works fine for sizes up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) to several MiB, but for larger sizes it results in address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) space wastage and fragmentation. For example drivers with a 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) GiB IOVA space might run out of IOVA space when allocating
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) buffers great than 64 MiB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) Enable this option to impose a limit on the alignment of IOVAs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) If unsure, say N.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) config IOMMU_IOVA_ALIGNMENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) int "Maximum PAGE_SIZE order of alignment for IOVAs"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) depends on IOMMU_LIMIT_IOVA_ALIGNMENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) range 4 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) default 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) With this parameter you can specify the maximum PAGE_SIZE order for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) IOVAs. Larger IOVAs will be aligned only to this specified order.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) The order is expressed a power of two multiplied by the PAGE_SIZE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) If unsure, leave the default value "9".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) menuconfig IOMMU_SUPPORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) bool "IOMMU Hardware Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) depends on MMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) default y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) Say Y here if you want to compile device drivers for IO Memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) Management Units into the kernel. These devices usually allow to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) remap DMA requests and/or remap interrupts from other devices on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) system.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) if IOMMU_SUPPORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) menu "Generic IOMMU Pagetable Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) # Selected by the actual pagetable implementations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) config IOMMU_IO_PGTABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) bool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) config IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) bool "ARMv7/v8 Long Descriptor Format"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) select IOMMU_IO_PGTABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) Enable support for the ARM long descriptor pagetable format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) sizes at both stage-1 and stage-2, as well as address spaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) up to 48-bits in size.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) config IOMMU_IO_PGTABLE_LPAE_SELFTEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) bool "LPAE selftests"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) depends on IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) Enable self-tests for LPAE page table allocator. This performs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) a series of page-table consistency checks during boot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) config IOMMU_IO_PGTABLE_ARMV7S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) bool "ARMv7/v8 Short Descriptor Format"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) select IOMMU_IO_PGTABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) depends on ARM || ARM64 || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) Enable support for the ARM Short-descriptor pagetable format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) This supports 32-bit virtual and physical addresses mapped using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 2-level tables with 4KB pages/1MB sections, and contiguous entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) for 64KB pages/16MB supersections if indicated by the IOMMU driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) bool "ARMv7s selftests"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) depends on IOMMU_IO_PGTABLE_ARMV7S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) Enable self-tests for ARMv7s page table allocator. This performs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) a series of page-table consistency checks during boot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) endmenu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) config IOMMU_DEBUGFS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) bool "Export IOMMU internals in DebugFS"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) depends on DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) Allows exposure of IOMMU device internals. This option enables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) the use of debugfs by IOMMU drivers as required. Devices can,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) at initialization time, cause the IOMMU code to create a top-level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) debug/iommu directory, and then populate a subdirectory with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) entries as required.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) config IOMMU_DEFAULT_PASSTHROUGH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) bool "IOMMU passthrough by default"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) depends on IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) Enable passthrough by default, removing the need to pass in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) iommu.passthrough=on or iommu=pt through command line. If this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) is enabled, you can still disable with iommu.passthrough=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) or iommu=nopt depending on the architecture.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) config OF_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) def_bool y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) depends on OF && IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) # IOMMU-agnostic DMA-mapping layer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) config IOMMU_DMA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) bool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) select DMA_OPS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) select IOMMU_IOVA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) select IRQ_MSI_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) select NEED_SG_DMA_LENGTH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) config FSL_PAMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) bool "Freescale IOMMU support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) depends on PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) depends on PHYS_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) depends on PPC_E500MC || (COMPILE_TEST && PPC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) select GENERIC_ALLOCATOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) PAMU can authorize memory access, remap the memory address, and remap I/O
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) transaction types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) # MSM IOMMU support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) config MSM_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) bool "MSM IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) depends on ARM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) select IOMMU_IO_PGTABLE_ARMV7S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) Support for the IOMMUs found on certain Qualcomm SOCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) These IOMMUs allow virtualization of the address space used by most
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) cores within the multimedia subsystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) source "drivers/iommu/amd/Kconfig"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) source "drivers/iommu/intel/Kconfig"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) config IRQ_REMAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) bool "Support for Interrupt Remapping"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) select DMAR_TABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) Supports Interrupt remapping for IO-APIC and MSI devices.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) To use x2apic mode in the CPU's which support x2APIC enhancements or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) to support platforms with CPU's having > 8 bit APIC ID, say Y.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) # OMAP IOMMU support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) config OMAP_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) bool "OMAP IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) depends on ARCH_OMAP2PLUS || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) The OMAP3 media platform drivers depend on iommu support,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) if you need them say Y here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) config OMAP_IOMMU_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) bool "Export OMAP IOMMU internals in DebugFS"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) depends on OMAP_IOMMU && DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) Select this to see extensive information about
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) the internal state of OMAP IOMMU in debugfs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) Say N unless you know you need this.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) config ROCKCHIP_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) tristate "Rockchip IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) depends on ARM || ARM64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) depends on ARCH_ROCKCHIP || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) Support for IOMMUs found on Rockchip rk32xx SOCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) These IOMMUs allow virtualization of the address space used by most
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) cores within the multimedia subsystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) Say Y here if you are using a Rockchip SoC that includes an IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) config SUN50I_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) bool "Allwinner H6 IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) depends on HAS_DMA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) depends on ARCH_SUNXI || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) Support for the IOMMU introduced in the Allwinner H6 SoCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) config TEGRA_IOMMU_GART
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) bool "Tegra GART IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) depends on ARCH_TEGRA_2x_SOC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) depends on TEGRA_MC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) Enables support for remapping discontiguous physical memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) shared with the operating system into contiguous I/O virtual
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) space through the GART (Graphics Address Relocation Table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) hardware included on Tegra SoCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) config TEGRA_IOMMU_SMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) bool "NVIDIA Tegra SMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) depends on ARCH_TEGRA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) depends on TEGRA_AHB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) depends on TEGRA_MC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) SoCs (Tegra30 up to Tegra210).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) config EXYNOS_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) bool "Exynos IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) depends on ARCH_EXYNOS || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) Support for the IOMMU (System MMU) of Samsung Exynos application
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) processor family. This enables H/W multimedia accelerators to see
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) non-linear physical memory chunks as linear memory in their
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) address space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) config EXYNOS_IOMMU_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) bool "Debugging log for Exynos IOMMU"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) depends on EXYNOS_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) Select this to see the detailed log message that shows what
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) happens in the IOMMU driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) Say N unless you need kernel log message for IOMMU debugging.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) config IPMMU_VMSA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) bool "Renesas VMSA-compatible IPMMU"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) select IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) If unsure, say N.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) config SPAPR_TCE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) bool "sPAPR TCE IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) depends on PPC_POWERNV || PPC_PSERIES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) Enables bits of IOMMU API required by VFIO. The iommu_ops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) is not implemented as it is not necessary for VFIO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) # ARM IOMMU support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) config ARM_SMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) tristate "ARM Ltd. System MMU (SMMU) Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) select IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) select ARM_DMA_USE_IOMMU if ARM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) Support for implementations of the ARM System MMU architecture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) versions 1 and 2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) Say Y here if your SoC includes an IOMMU device implementing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) the ARM SMMU architecture.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) config ARM_SMMU_LEGACY_DT_BINDINGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) bool "Support the legacy \"mmu-masters\" devicetree bindings"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) depends on ARM_SMMU=y && OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) Support for the badly designed and deprecated "mmu-masters"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) devicetree bindings. This allows some DMA masters to attach
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) to the SMMU but does not provide any support via the DMA API.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) If you're lucky, you might be able to get VFIO up and running.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) If you say Y here then you'll make me very sad. Instead, say N
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) and move your firmware to the utopian future that was 2016.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) bool "Default to disabling bypass on ARM SMMU v1 and v2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) depends on ARM_SMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) default y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) Say Y here to (by default) disable bypass streams such that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) incoming transactions from devices that are not attached to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) an iommu domain will report an abort back to the device and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) will not be allowed to pass through the SMMU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) Any old kernels that existed before this KConfig was
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) introduced would default to _allowing_ bypass (AKA the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) equivalent of NO for this config). However the default for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) this option is YES because the old behavior is insecure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) There are few reasons to allow unmatched stream bypass, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) even fewer good ones. If saying YES here breaks your board
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) you should work on fixing your board. This KConfig option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) is expected to be removed in the future and we'll simply
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) hardcode the bypass disable in the code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) NOTE: the kernel command line parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 'arm-smmu.disable_bypass' will continue to override this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) config.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) config ARM_SMMU_V3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) depends on ARM64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) select IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) select GENERIC_MSI_IRQ_DOMAIN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) Support for implementations of the ARM System MMU architecture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) version 3 providing translation support to a PCIe root complex.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) Say Y here if your system includes an IOMMU device implementing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) the ARM SMMUv3 architecture.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) config ARM_SMMU_V3_SVA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) bool "Shared Virtual Addressing support for the ARM SMMUv3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) depends on ARM_SMMU_V3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) Support for sharing process address spaces with devices using the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) SMMUv3.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) Say Y here if your system supports SVA extensions such as PCIe PASID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) and PRI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) config S390_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) def_bool y if S390 && PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) depends on S390 && PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) Support for the IOMMU API for s390 PCI devices.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) config S390_CCW_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) bool "S390 CCW IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) depends on S390 && CCW || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) Enables bits of IOMMU API required by VFIO. The iommu_ops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) is not implemented as it is not necessary for VFIO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) config S390_AP_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) bool "S390 AP IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) depends on S390 && ZCRYPT || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) Enables bits of IOMMU API required by VFIO. The iommu_ops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) is not implemented as it is not necessary for VFIO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) config MTK_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) bool "MTK IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) depends on ARCH_MEDIATEK || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) select IOMMU_IO_PGTABLE_ARMV7S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) select MEMORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) select MTK_SMI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) Memory Management Unit. This option enables remapping of DMA memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) accesses for the multimedia subsystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) If unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) config MTK_IOMMU_V1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) bool "MTK IOMMU Version 1 (M4U gen1) Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) depends on ARM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) depends on ARCH_MEDIATEK || COMPILE_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) select MEMORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) select MTK_SMI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) Multimedia Memory Managememt Unit. This option enables remapping of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) DMA memory accesses for the multimedia subsystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) if unsure, say N here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) config QCOM_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) # Note: iommu drivers cannot (yet?) be built as modules
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) bool "Qualcomm IOMMU Support"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) depends on QCOM_SCM=y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) select IOMMU_IO_PGTABLE_LPAE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) select ARM_DMA_USE_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) Support for IOMMU on certain Qualcomm SoCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) config HYPERV_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) bool "Hyper-V x2APIC IRQ Handling"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) depends on HYPERV && X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) default HYPERV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) guests to run with x2APIC mode enabled.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) config VIRTIO_IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) tristate "Virtio IOMMU driver"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) depends on VIRTIO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) depends on ARM64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) select IOMMU_API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) select INTERVAL_TREE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) help
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) Para-virtualised IOMMU driver with virtio.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) Say Y here if you intend to run this kernel as a guest.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) endif # IOMMU_SUPPORT