| # IOMMU_API always gets selected by whoever wants it. | 
 | config IOMMU_API | 
 | 	bool | 
 |  | 
 | menuconfig IOMMU_SUPPORT | 
 | 	bool "IOMMU Hardware Support" | 
 | 	default y | 
 | 	---help--- | 
 | 	  Say Y here if you want to compile device drivers for IO Memory | 
 | 	  Management Units into the kernel. These devices usually allow to | 
 | 	  remap DMA requests and/or remap interrupts from other devices on the | 
 | 	  system. | 
 |  | 
 | if IOMMU_SUPPORT | 
 |  | 
 | config OF_IOMMU | 
 |        def_bool y | 
 |        depends on OF | 
 |  | 
 | config FSL_PAMU | 
 | 	bool "Freescale IOMMU support" | 
 | 	depends on PPC_E500MC | 
 | 	select IOMMU_API | 
 | 	select GENERIC_ALLOCATOR | 
 | 	help | 
 | 	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms. | 
 | 	  PAMU can authorize memory access, remap the memory address, and remap I/O | 
 | 	  transaction types. | 
 |  | 
 | # MSM IOMMU support | 
 | config MSM_IOMMU | 
 | 	bool "MSM IOMMU Support" | 
 | 	depends on ARCH_MSM8X60 || ARCH_MSM8960 | 
 | 	select IOMMU_API | 
 | 	help | 
 | 	  Support for the IOMMUs found on certain Qualcomm SOCs. | 
 | 	  These IOMMUs allow virtualization of the address space used by most | 
 | 	  cores within the multimedia subsystem. | 
 |  | 
 | 	  If unsure, say N here. | 
 |  | 
 | config IOMMU_PGTABLES_L2 | 
 | 	def_bool y | 
 | 	depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n | 
 |  | 
 | # AMD IOMMU support | 
 | config AMD_IOMMU | 
 | 	bool "AMD IOMMU support" | 
 | 	select SWIOTLB | 
 | 	select PCI_MSI | 
 | 	select PCI_ATS | 
 | 	select PCI_PRI | 
 | 	select PCI_PASID | 
 | 	select IOMMU_API | 
 | 	depends on X86_64 && PCI && ACPI | 
 | 	---help--- | 
 | 	  With this option you can enable support for AMD IOMMU hardware in | 
 | 	  your system. An IOMMU is a hardware component which provides | 
 | 	  remapping of DMA memory accesses from devices. With an AMD IOMMU you | 
 | 	  can isolate the DMA memory of different devices and protect the | 
 | 	  system from misbehaving device drivers or hardware. | 
 |  | 
 | 	  You can find out if your system has an AMD IOMMU if you look into | 
 | 	  your BIOS for an option to enable it or if you have an IVRS ACPI | 
 | 	  table. | 
 |  | 
 | config AMD_IOMMU_STATS | 
 | 	bool "Export AMD IOMMU statistics to debugfs" | 
 | 	depends on AMD_IOMMU | 
 | 	select DEBUG_FS | 
 | 	---help--- | 
 | 	  This option enables code in the AMD IOMMU driver to collect various | 
 | 	  statistics about whats happening in the driver and exports that | 
 | 	  information to userspace via debugfs. | 
 | 	  If unsure, say N. | 
 |  | 
 | config AMD_IOMMU_V2 | 
 | 	tristate "AMD IOMMU Version 2 driver" | 
 | 	depends on AMD_IOMMU | 
 | 	select MMU_NOTIFIER | 
 | 	---help--- | 
 | 	  This option enables support for the AMD IOMMUv2 features of the IOMMU | 
 | 	  hardware. Select this option if you want to use devices that support | 
 | 	  the PCI PRI and PASID interface. | 
 |  | 
 | # Intel IOMMU support | 
 | config DMAR_TABLE | 
 | 	bool | 
 |  | 
 | config INTEL_IOMMU | 
 | 	bool "Support for Intel IOMMU using DMA Remapping Devices" | 
 | 	depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC) | 
 | 	select IOMMU_API | 
 | 	select DMAR_TABLE | 
 | 	help | 
 | 	  DMA remapping (DMAR) devices support enables independent address | 
 | 	  translations for Direct Memory Access (DMA) from devices. | 
 | 	  These DMA remapping devices are reported via ACPI tables | 
 | 	  and include PCI device scope covered by these DMA | 
 | 	  remapping devices. | 
 |  | 
 | config INTEL_IOMMU_DEFAULT_ON | 
 | 	def_bool y | 
 | 	prompt "Enable Intel DMA Remapping Devices by default" | 
 | 	depends on INTEL_IOMMU | 
 | 	help | 
 | 	  Selecting this option will enable a DMAR device at boot time if | 
 | 	  one is found. If this option is not selected, DMAR support can | 
 | 	  be enabled by passing intel_iommu=on to the kernel. | 
 |  | 
 | config INTEL_IOMMU_BROKEN_GFX_WA | 
 | 	bool "Workaround broken graphics drivers (going away soon)" | 
 | 	depends on INTEL_IOMMU && BROKEN && X86 | 
 | 	---help--- | 
 | 	  Current Graphics drivers tend to use physical address | 
 | 	  for DMA and avoid using DMA APIs. Setting this config | 
 | 	  option permits the IOMMU driver to set a unity map for | 
 | 	  all the OS-visible memory. Hence the driver can continue | 
 | 	  to use physical addresses for DMA, at least until this | 
 | 	  option is removed in the 2.6.32 kernel. | 
 |  | 
 | config INTEL_IOMMU_FLOPPY_WA | 
 | 	def_bool y | 
 | 	depends on INTEL_IOMMU && X86 | 
 | 	---help--- | 
 | 	  Floppy disk drivers are known to bypass DMA API calls | 
 | 	  thereby failing to work when IOMMU is enabled. This | 
 | 	  workaround will setup a 1:1 mapping for the first | 
 | 	  16MiB to make floppy (an ISA device) work. | 
 |  | 
 | config IRQ_REMAP | 
 | 	bool "Support for Interrupt Remapping" | 
 | 	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI | 
 | 	select DMAR_TABLE | 
 | 	---help--- | 
 | 	  Supports Interrupt remapping for IO-APIC and MSI devices. | 
 | 	  To use x2apic mode in the CPU's which support x2APIC enhancements or | 
 | 	  to support platforms with CPU's having > 8 bit APIC ID, say Y. | 
 |  | 
 | # OMAP IOMMU support | 
 | config OMAP_IOMMU | 
 | 	bool "OMAP IOMMU Support" | 
 | 	depends on ARCH_OMAP2PLUS | 
 | 	select IOMMU_API | 
 |  | 
 | config OMAP_IOMMU_DEBUG | 
 |        tristate "Export OMAP IOMMU internals in DebugFS" | 
 |        depends on OMAP_IOMMU && DEBUG_FS | 
 |        help | 
 |          Select this to see extensive information about | 
 |          the internal state of OMAP IOMMU in debugfs. | 
 |  | 
 |          Say N unless you know you need this. | 
 |  | 
 | config TEGRA_IOMMU_GART | 
 | 	bool "Tegra GART IOMMU Support" | 
 | 	depends on ARCH_TEGRA_2x_SOC | 
 | 	select IOMMU_API | 
 | 	help | 
 | 	  Enables support for remapping discontiguous physical memory | 
 | 	  shared with the operating system into contiguous I/O virtual | 
 | 	  space through the GART (Graphics Address Relocation Table) | 
 | 	  hardware included on Tegra SoCs. | 
 |  | 
 | config TEGRA_IOMMU_SMMU | 
 | 	bool "NVIDIA Tegra SMMU Support" | 
 | 	depends on ARCH_TEGRA | 
 | 	depends on TEGRA_AHB | 
 | 	depends on TEGRA_MC | 
 | 	select IOMMU_API | 
 | 	help | 
 | 	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra | 
 | 	  SoCs (Tegra30 up to Tegra124). | 
 |  | 
 | config EXYNOS_IOMMU | 
 | 	bool "Exynos IOMMU Support" | 
 | 	depends on ARCH_EXYNOS | 
 | 	select IOMMU_API | 
 | 	select ARM_DMA_USE_IOMMU | 
 | 	help | 
 | 	  Support for the IOMMU (System MMU) of Samsung Exynos application | 
 | 	  processor family. This enables H/W multimedia accelerators to see | 
 | 	  non-linear physical memory chunks as linear memory in their | 
 | 	  address space. | 
 |  | 
 | 	  If unsure, say N here. | 
 |  | 
 | config EXYNOS_IOMMU_DEBUG | 
 | 	bool "Debugging log for Exynos IOMMU" | 
 | 	depends on EXYNOS_IOMMU | 
 | 	help | 
 | 	  Select this to see the detailed log message that shows what | 
 | 	  happens in the IOMMU driver. | 
 |  | 
 | 	  Say N unless you need kernel log message for IOMMU debugging. | 
 |  | 
 | config SHMOBILE_IPMMU | 
 | 	bool | 
 |  | 
 | config SHMOBILE_IPMMU_TLB | 
 | 	bool | 
 |  | 
 | config SHMOBILE_IOMMU | 
 | 	bool "IOMMU for Renesas IPMMU/IPMMUI" | 
 | 	default n | 
 | 	depends on ARM | 
 | 	depends on ARCH_SHMOBILE || COMPILE_TEST | 
 | 	select IOMMU_API | 
 | 	select ARM_DMA_USE_IOMMU | 
 | 	select SHMOBILE_IPMMU | 
 | 	select SHMOBILE_IPMMU_TLB | 
 | 	help | 
 | 	  Support for Renesas IPMMU/IPMMUI. This option enables | 
 | 	  remapping of DMA memory accesses from all of the IP blocks | 
 | 	  on the ICB. | 
 |  | 
 | 	  Warning: Drivers (including userspace drivers of UIO | 
 | 	  devices) of the IP blocks on the ICB *must* use addresses | 
 | 	  allocated from the IPMMU (iova) for DMA with this option | 
 | 	  enabled. | 
 |  | 
 | 	  If unsure, say N. | 
 |  | 
 | choice | 
 | 	prompt "IPMMU/IPMMUI address space size" | 
 | 	default SHMOBILE_IOMMU_ADDRSIZE_2048MB | 
 | 	depends on SHMOBILE_IOMMU | 
 | 	help | 
 | 	  This option sets IPMMU/IPMMUI address space size by | 
 | 	  adjusting the 1st level page table size. The page table size | 
 | 	  is calculated as follows: | 
 |  | 
 | 	      page table size = number of page table entries * 4 bytes | 
 | 	      number of page table entries = address space size / 1 MiB | 
 |  | 
 | 	  For example, when the address space size is 2048 MiB, the | 
 | 	  1st level page table size is 8192 bytes. | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_2048MB | 
 | 		bool "2 GiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_1024MB | 
 | 		bool "1 GiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_512MB | 
 | 		bool "512 MiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_256MB | 
 | 		bool "256 MiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_128MB | 
 | 		bool "128 MiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_64MB | 
 | 		bool "64 MiB" | 
 |  | 
 | 	config SHMOBILE_IOMMU_ADDRSIZE_32MB | 
 | 		bool "32 MiB" | 
 |  | 
 | endchoice | 
 |  | 
 | config SHMOBILE_IOMMU_L1SIZE | 
 | 	int | 
 | 	default 8192 if SHMOBILE_IOMMU_ADDRSIZE_2048MB | 
 | 	default 4096 if SHMOBILE_IOMMU_ADDRSIZE_1024MB | 
 | 	default 2048 if SHMOBILE_IOMMU_ADDRSIZE_512MB | 
 | 	default 1024 if SHMOBILE_IOMMU_ADDRSIZE_256MB | 
 | 	default 512 if SHMOBILE_IOMMU_ADDRSIZE_128MB | 
 | 	default 256 if SHMOBILE_IOMMU_ADDRSIZE_64MB | 
 | 	default 128 if SHMOBILE_IOMMU_ADDRSIZE_32MB | 
 |  | 
 | config IPMMU_VMSA | 
 | 	bool "Renesas VMSA-compatible IPMMU" | 
 | 	depends on ARM_LPAE | 
 | 	depends on ARCH_SHMOBILE || COMPILE_TEST | 
 | 	select IOMMU_API | 
 | 	select ARM_DMA_USE_IOMMU | 
 | 	help | 
 | 	  Support for the Renesas VMSA-compatible IPMMU Renesas found in the | 
 | 	  R-Mobile APE6 and R-Car H2/M2 SoCs. | 
 |  | 
 | 	  If unsure, say N. | 
 |  | 
 | config SPAPR_TCE_IOMMU | 
 | 	bool "sPAPR TCE IOMMU Support" | 
 | 	depends on PPC_POWERNV || PPC_PSERIES | 
 | 	select IOMMU_API | 
 | 	help | 
 | 	  Enables bits of IOMMU API required by VFIO. The iommu_ops | 
 | 	  is not implemented as it is not necessary for VFIO. | 
 |  | 
 | config ARM_SMMU | 
 | 	bool "ARM Ltd. System MMU (SMMU) Support" | 
 | 	depends on ARM64 || (ARM_LPAE && OF) | 
 | 	select IOMMU_API | 
 | 	select ARM_DMA_USE_IOMMU if ARM | 
 | 	help | 
 | 	  Support for implementations of the ARM System MMU architecture | 
 | 	  versions 1 and 2. The driver supports both v7l and v8l table | 
 | 	  formats with 4k and 64k page sizes. | 
 |  | 
 | 	  Say Y here if your SoC includes an IOMMU device implementing | 
 | 	  the ARM SMMU architecture. | 
 |  | 
 | endif # IOMMU_SUPPORT |