# IOMMU_API always gets selected by whoever wants it.
config IOMMU_API
	bool

menuconfig IOMMU_SUPPORT
	bool "IOMMU Hardware Support"
	depends on MMU
	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

menu "Generic IOMMU Pagetable Support"

# Selected by the actual pagetable implementations
config IOMMU_IO_PGTABLE
	bool

config IOMMU_IO_PGTABLE_LPAE
	bool "ARMv7/v8 Long Descriptor Format"
	select IOMMU_IO_PGTABLE
	depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
	help
	  Enable support for the ARM long descriptor pagetable format.
	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
	  sizes at both stage-1 and stage-2, as well as address spaces
	  up to 48-bits in size.

config IOMMU_IO_PGTABLE_LPAE_SELFTEST
	bool "LPAE selftests"
	depends on IOMMU_IO_PGTABLE_LPAE
	help
	  Enable self-tests for LPAE page table allocator. This performs
	  a series of page-table consistency checks during boot.

	  If unsure, say N here.

config IOMMU_IO_PGTABLE_ARMV7S
	bool "ARMv7/v8 Short Descriptor Format"
	select IOMMU_IO_PGTABLE
	depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
	help
	  Enable support for the ARM Short-descriptor pagetable format.
	  This supports 32-bit virtual and physical addresses mapped using
	  2-level tables with 4KB pages/1MB sections, and contiguous entries
	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.

config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
	bool "ARMv7s selftests"
	depends on IOMMU_IO_PGTABLE_ARMV7S
	help
	  Enable self-tests for ARMv7s page table allocator. This performs
	  a series of page-table consistency checks during boot.

	  If unsure, say N here.

endmenu

config IOMMU_IOVA
	tristate

config OF_IOMMU
       def_bool y
       depends on OF && IOMMU_API

# IOMMU-agnostic DMA-mapping layer
config IOMMU_DMA
	bool
	select IOMMU_API
	select IOMMU_IOVA
	select NEED_SG_DMA_LENGTH

config FSL_PAMU
	bool "Freescale IOMMU support"
	depends on PPC32
	depends on PPC_E500MC || COMPILE_TEST
	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 ARM
	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
	depends on BROKEN
	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 IOMMU_IOVA
	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_SVM
	bool "Support for Shared Virtual Memory with Intel IOMMU"
	depends on INTEL_IOMMU && X86
	select PCI_PASID
	select MMU_NOTIFIER
	help
	  Shared Virtual Memory (SVM) provides a facility for devices
	  to access DMA resources through process address space by
	  means of a Process Address Space ID (PASID).

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 ARM && MMU
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	select IOMMU_API
	---help---
	  The OMAP3 media platform drivers depend on iommu support,
	  if you need them say Y here.

config OMAP_IOMMU_DEBUG
	bool "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 ROCKCHIP_IOMMU
	bool "Rockchip IOMMU Support"
	depends on ARM
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	select IOMMU_API
	select ARM_DMA_USE_IOMMU
	help
	  Support for IOMMUs found on Rockchip rk32xx SOCs.
	  These IOMMUs allow virtualization of the address space used by most
	  cores within the multimedia subsystem.
	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
	  device.

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 Tegra210).

config EXYNOS_IOMMU
	bool "Exynos IOMMU Support"
	depends on ARCH_EXYNOS && MMU
	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 IPMMU_VMSA
	bool "Renesas VMSA-compatible IPMMU"
	depends on ARM_LPAE
	depends on ARCH_RENESAS || COMPILE_TEST
	select IOMMU_API
	select IOMMU_IO_PGTABLE_LPAE
	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.

# ARM IOMMU support
config ARM_SMMU
	bool "ARM Ltd. System MMU (SMMU) Support"
	depends on (ARM64 || ARM) && MMU
	select IOMMU_API
	select IOMMU_IO_PGTABLE_LPAE
	select ARM_DMA_USE_IOMMU if ARM
	help
	  Support for implementations of the ARM System MMU architecture
	  versions 1 and 2.

	  Say Y here if your SoC includes an IOMMU device implementing
	  the ARM SMMU architecture.

config ARM_SMMU_V3
	bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
	depends on ARM64 && PCI
	select IOMMU_API
	select IOMMU_IO_PGTABLE_LPAE
	select GENERIC_MSI_IRQ_DOMAIN
	help
	  Support for implementations of the ARM System MMU architecture
	  version 3 providing translation support to a PCIe root complex.

	  Say Y here if your system includes an IOMMU device implementing
	  the ARM SMMUv3 architecture.

config S390_IOMMU
	def_bool y if S390 && PCI
	depends on S390 && PCI
	select IOMMU_API
	help
	  Support for the IOMMU API for s390 PCI devices.

config MTK_IOMMU
	bool "MTK IOMMU Support"
	depends on ARM || ARM64
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select ARM_DMA_USE_IOMMU
	select IOMMU_API
	select IOMMU_DMA
	select IOMMU_IO_PGTABLE_ARMV7S
	select MEMORY
	select MTK_SMI
	help
	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
	  Memory Management Unit. This option enables remapping of DMA memory
	  accesses for the multimedia subsystem.

	  If unsure, say N here.

endif # IOMMU_SUPPORT
