18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci# The IOVA library may also be used by non-IOMMU_API users
38c2ecf20Sopenharmony_ciconfig IOMMU_IOVA
48c2ecf20Sopenharmony_ci	tristate
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci# The IOASID library may also be used by non-IOMMU_API users
78c2ecf20Sopenharmony_ciconfig IOASID
88c2ecf20Sopenharmony_ci	tristate
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci# IOMMU_API always gets selected by whoever wants it.
118c2ecf20Sopenharmony_ciconfig IOMMU_API
128c2ecf20Sopenharmony_ci	bool
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cimenuconfig IOMMU_SUPPORT
158c2ecf20Sopenharmony_ci	bool "IOMMU Hardware Support"
168c2ecf20Sopenharmony_ci	depends on MMU
178c2ecf20Sopenharmony_ci	default y
188c2ecf20Sopenharmony_ci	help
198c2ecf20Sopenharmony_ci	  Say Y here if you want to compile device drivers for IO Memory
208c2ecf20Sopenharmony_ci	  Management Units into the kernel. These devices usually allow to
218c2ecf20Sopenharmony_ci	  remap DMA requests and/or remap interrupts from other devices on the
228c2ecf20Sopenharmony_ci	  system.
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ciif IOMMU_SUPPORT
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cimenu "Generic IOMMU Pagetable Support"
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci# Selected by the actual pagetable implementations
298c2ecf20Sopenharmony_ciconfig IOMMU_IO_PGTABLE
308c2ecf20Sopenharmony_ci	bool
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ciconfig IOMMU_IO_PGTABLE_LPAE
338c2ecf20Sopenharmony_ci	bool "ARMv7/v8 Long Descriptor Format"
348c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE
358c2ecf20Sopenharmony_ci	depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
368c2ecf20Sopenharmony_ci	help
378c2ecf20Sopenharmony_ci	  Enable support for the ARM long descriptor pagetable format.
388c2ecf20Sopenharmony_ci	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
398c2ecf20Sopenharmony_ci	  sizes at both stage-1 and stage-2, as well as address spaces
408c2ecf20Sopenharmony_ci	  up to 48-bits in size.
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciconfig IOMMU_IO_PGTABLE_LPAE_SELFTEST
438c2ecf20Sopenharmony_ci	bool "LPAE selftests"
448c2ecf20Sopenharmony_ci	depends on IOMMU_IO_PGTABLE_LPAE
458c2ecf20Sopenharmony_ci	help
468c2ecf20Sopenharmony_ci	  Enable self-tests for LPAE page table allocator. This performs
478c2ecf20Sopenharmony_ci	  a series of page-table consistency checks during boot.
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci	  If unsure, say N here.
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ciconfig IOMMU_IO_PGTABLE_ARMV7S
528c2ecf20Sopenharmony_ci	bool "ARMv7/v8 Short Descriptor Format"
538c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE
548c2ecf20Sopenharmony_ci	depends on ARM || ARM64 || COMPILE_TEST
558c2ecf20Sopenharmony_ci	help
568c2ecf20Sopenharmony_ci	  Enable support for the ARM Short-descriptor pagetable format.
578c2ecf20Sopenharmony_ci	  This supports 32-bit virtual and physical addresses mapped using
588c2ecf20Sopenharmony_ci	  2-level tables with 4KB pages/1MB sections, and contiguous entries
598c2ecf20Sopenharmony_ci	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciconfig IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
628c2ecf20Sopenharmony_ci	bool "ARMv7s selftests"
638c2ecf20Sopenharmony_ci	depends on IOMMU_IO_PGTABLE_ARMV7S
648c2ecf20Sopenharmony_ci	help
658c2ecf20Sopenharmony_ci	  Enable self-tests for ARMv7s page table allocator. This performs
668c2ecf20Sopenharmony_ci	  a series of page-table consistency checks during boot.
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci	  If unsure, say N here.
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ciendmenu
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ciconfig IOMMU_DEBUGFS
738c2ecf20Sopenharmony_ci	bool "Export IOMMU internals in DebugFS"
748c2ecf20Sopenharmony_ci	depends on DEBUG_FS
758c2ecf20Sopenharmony_ci	help
768c2ecf20Sopenharmony_ci	  Allows exposure of IOMMU device internals. This option enables
778c2ecf20Sopenharmony_ci	  the use of debugfs by IOMMU drivers as required. Devices can,
788c2ecf20Sopenharmony_ci	  at initialization time, cause the IOMMU code to create a top-level
798c2ecf20Sopenharmony_ci	  debug/iommu directory, and then populate a subdirectory with
808c2ecf20Sopenharmony_ci	  entries as required.
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciconfig IOMMU_DEFAULT_PASSTHROUGH
838c2ecf20Sopenharmony_ci	bool "IOMMU passthrough by default"
848c2ecf20Sopenharmony_ci	depends on IOMMU_API
858c2ecf20Sopenharmony_ci	help
868c2ecf20Sopenharmony_ci	  Enable passthrough by default, removing the need to pass in
878c2ecf20Sopenharmony_ci	  iommu.passthrough=on or iommu=pt through command line. If this
888c2ecf20Sopenharmony_ci	  is enabled, you can still disable with iommu.passthrough=off
898c2ecf20Sopenharmony_ci	  or iommu=nopt depending on the architecture.
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci	  If unsure, say N here.
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ciconfig OF_IOMMU
948c2ecf20Sopenharmony_ci	def_bool y
958c2ecf20Sopenharmony_ci	depends on OF && IOMMU_API
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci# IOMMU-agnostic DMA-mapping layer
988c2ecf20Sopenharmony_ciconfig IOMMU_DMA
998c2ecf20Sopenharmony_ci	bool
1008c2ecf20Sopenharmony_ci	select DMA_OPS
1018c2ecf20Sopenharmony_ci	select IOMMU_API
1028c2ecf20Sopenharmony_ci	select IOMMU_IOVA
1038c2ecf20Sopenharmony_ci	select IRQ_MSI_IOMMU
1048c2ecf20Sopenharmony_ci	select NEED_SG_DMA_LENGTH
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ciconfig FSL_PAMU
1078c2ecf20Sopenharmony_ci	bool "Freescale IOMMU support"
1088c2ecf20Sopenharmony_ci	depends on PCI
1098c2ecf20Sopenharmony_ci	depends on PHYS_64BIT
1108c2ecf20Sopenharmony_ci	depends on PPC_E500MC || (COMPILE_TEST && PPC)
1118c2ecf20Sopenharmony_ci	select IOMMU_API
1128c2ecf20Sopenharmony_ci	select GENERIC_ALLOCATOR
1138c2ecf20Sopenharmony_ci	help
1148c2ecf20Sopenharmony_ci	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
1158c2ecf20Sopenharmony_ci	  PAMU can authorize memory access, remap the memory address, and remap I/O
1168c2ecf20Sopenharmony_ci	  transaction types.
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci# MSM IOMMU support
1198c2ecf20Sopenharmony_ciconfig MSM_IOMMU
1208c2ecf20Sopenharmony_ci	bool "MSM IOMMU Support"
1218c2ecf20Sopenharmony_ci	depends on ARM
1228c2ecf20Sopenharmony_ci	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
1238c2ecf20Sopenharmony_ci	select IOMMU_API
1248c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_ARMV7S
1258c2ecf20Sopenharmony_ci	help
1268c2ecf20Sopenharmony_ci	  Support for the IOMMUs found on certain Qualcomm SOCs.
1278c2ecf20Sopenharmony_ci	  These IOMMUs allow virtualization of the address space used by most
1288c2ecf20Sopenharmony_ci	  cores within the multimedia subsystem.
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci	  If unsure, say N here.
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_cisource "drivers/iommu/amd/Kconfig"
1338c2ecf20Sopenharmony_cisource "drivers/iommu/intel/Kconfig"
1348c2ecf20Sopenharmony_cisource "drivers/iommu/loongson/Kconfig"
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ciconfig IRQ_REMAP
1378c2ecf20Sopenharmony_ci	bool "Support for Interrupt Remapping"
1388c2ecf20Sopenharmony_ci	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
1398c2ecf20Sopenharmony_ci	select DMAR_TABLE
1408c2ecf20Sopenharmony_ci	help
1418c2ecf20Sopenharmony_ci	  Supports Interrupt remapping for IO-APIC and MSI devices.
1428c2ecf20Sopenharmony_ci	  To use x2apic mode in the CPU's which support x2APIC enhancements or
1438c2ecf20Sopenharmony_ci	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
1448c2ecf20Sopenharmony_ci
1458c2ecf20Sopenharmony_ci# OMAP IOMMU support
1468c2ecf20Sopenharmony_ciconfig OMAP_IOMMU
1478c2ecf20Sopenharmony_ci	bool "OMAP IOMMU Support"
1488c2ecf20Sopenharmony_ci	depends on ARCH_OMAP2PLUS || COMPILE_TEST
1498c2ecf20Sopenharmony_ci	select IOMMU_API
1508c2ecf20Sopenharmony_ci	help
1518c2ecf20Sopenharmony_ci	  The OMAP3 media platform drivers depend on iommu support,
1528c2ecf20Sopenharmony_ci	  if you need them say Y here.
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ciconfig OMAP_IOMMU_DEBUG
1558c2ecf20Sopenharmony_ci	bool "Export OMAP IOMMU internals in DebugFS"
1568c2ecf20Sopenharmony_ci	depends on OMAP_IOMMU && DEBUG_FS
1578c2ecf20Sopenharmony_ci	help
1588c2ecf20Sopenharmony_ci	  Select this to see extensive information about
1598c2ecf20Sopenharmony_ci	  the internal state of OMAP IOMMU in debugfs.
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ci	  Say N unless you know you need this.
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ciconfig ROCKCHIP_IOMMU
1648c2ecf20Sopenharmony_ci	bool "Rockchip IOMMU Support"
1658c2ecf20Sopenharmony_ci	depends on ARCH_ROCKCHIP || COMPILE_TEST
1668c2ecf20Sopenharmony_ci	select IOMMU_API
1678c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
1688c2ecf20Sopenharmony_ci	help
1698c2ecf20Sopenharmony_ci	  Support for IOMMUs found on Rockchip rk32xx SOCs.
1708c2ecf20Sopenharmony_ci	  These IOMMUs allow virtualization of the address space used by most
1718c2ecf20Sopenharmony_ci	  cores within the multimedia subsystem.
1728c2ecf20Sopenharmony_ci	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
1738c2ecf20Sopenharmony_ci	  device.
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ciconfig SUN50I_IOMMU
1768c2ecf20Sopenharmony_ci	bool "Allwinner H6 IOMMU Support"
1778c2ecf20Sopenharmony_ci	depends on HAS_DMA
1788c2ecf20Sopenharmony_ci	depends on ARCH_SUNXI || COMPILE_TEST
1798c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
1808c2ecf20Sopenharmony_ci	select IOMMU_API
1818c2ecf20Sopenharmony_ci	help
1828c2ecf20Sopenharmony_ci	  Support for the IOMMU introduced in the Allwinner H6 SoCs.
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ciconfig TEGRA_IOMMU_GART
1858c2ecf20Sopenharmony_ci	bool "Tegra GART IOMMU Support"
1868c2ecf20Sopenharmony_ci	depends on ARCH_TEGRA_2x_SOC
1878c2ecf20Sopenharmony_ci	depends on TEGRA_MC
1888c2ecf20Sopenharmony_ci	select IOMMU_API
1898c2ecf20Sopenharmony_ci	help
1908c2ecf20Sopenharmony_ci	  Enables support for remapping discontiguous physical memory
1918c2ecf20Sopenharmony_ci	  shared with the operating system into contiguous I/O virtual
1928c2ecf20Sopenharmony_ci	  space through the GART (Graphics Address Relocation Table)
1938c2ecf20Sopenharmony_ci	  hardware included on Tegra SoCs.
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ciconfig TEGRA_IOMMU_SMMU
1968c2ecf20Sopenharmony_ci	bool "NVIDIA Tegra SMMU Support"
1978c2ecf20Sopenharmony_ci	depends on ARCH_TEGRA
1988c2ecf20Sopenharmony_ci	depends on TEGRA_AHB
1998c2ecf20Sopenharmony_ci	depends on TEGRA_MC
2008c2ecf20Sopenharmony_ci	select IOMMU_API
2018c2ecf20Sopenharmony_ci	help
2028c2ecf20Sopenharmony_ci	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
2038c2ecf20Sopenharmony_ci	  SoCs (Tegra30 up to Tegra210).
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_ciconfig EXYNOS_IOMMU
2068c2ecf20Sopenharmony_ci	bool "Exynos IOMMU Support"
2078c2ecf20Sopenharmony_ci	depends on ARCH_EXYNOS || COMPILE_TEST
2088c2ecf20Sopenharmony_ci	depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
2098c2ecf20Sopenharmony_ci	select IOMMU_API
2108c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
2118c2ecf20Sopenharmony_ci	help
2128c2ecf20Sopenharmony_ci	  Support for the IOMMU (System MMU) of Samsung Exynos application
2138c2ecf20Sopenharmony_ci	  processor family. This enables H/W multimedia accelerators to see
2148c2ecf20Sopenharmony_ci	  non-linear physical memory chunks as linear memory in their
2158c2ecf20Sopenharmony_ci	  address space.
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ci	  If unsure, say N here.
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ciconfig EXYNOS_IOMMU_DEBUG
2208c2ecf20Sopenharmony_ci	bool "Debugging log for Exynos IOMMU"
2218c2ecf20Sopenharmony_ci	depends on EXYNOS_IOMMU
2228c2ecf20Sopenharmony_ci	help
2238c2ecf20Sopenharmony_ci	  Select this to see the detailed log message that shows what
2248c2ecf20Sopenharmony_ci	  happens in the IOMMU driver.
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci	  Say N unless you need kernel log message for IOMMU debugging.
2278c2ecf20Sopenharmony_ci
2288c2ecf20Sopenharmony_ciconfig IPMMU_VMSA
2298c2ecf20Sopenharmony_ci	bool "Renesas VMSA-compatible IPMMU"
2308c2ecf20Sopenharmony_ci	depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
2318c2ecf20Sopenharmony_ci	select IOMMU_API
2328c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
2338c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
2348c2ecf20Sopenharmony_ci	help
2358c2ecf20Sopenharmony_ci	  Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
2368c2ecf20Sopenharmony_ci	  APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ci	  If unsure, say N.
2398c2ecf20Sopenharmony_ci
2408c2ecf20Sopenharmony_ciconfig SPAPR_TCE_IOMMU
2418c2ecf20Sopenharmony_ci	bool "sPAPR TCE IOMMU Support"
2428c2ecf20Sopenharmony_ci	depends on PPC_POWERNV || PPC_PSERIES
2438c2ecf20Sopenharmony_ci	select IOMMU_API
2448c2ecf20Sopenharmony_ci	help
2458c2ecf20Sopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
2468c2ecf20Sopenharmony_ci	  is not implemented as it is not necessary for VFIO.
2478c2ecf20Sopenharmony_ci
2488c2ecf20Sopenharmony_ci# ARM IOMMU support
2498c2ecf20Sopenharmony_ciconfig ARM_SMMU
2508c2ecf20Sopenharmony_ci	tristate "ARM Ltd. System MMU (SMMU) Support"
2518c2ecf20Sopenharmony_ci	depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64)
2528c2ecf20Sopenharmony_ci	select IOMMU_API
2538c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
2548c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU if ARM
2558c2ecf20Sopenharmony_ci	help
2568c2ecf20Sopenharmony_ci	  Support for implementations of the ARM System MMU architecture
2578c2ecf20Sopenharmony_ci	  versions 1 and 2.
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci	  Say Y here if your SoC includes an IOMMU device implementing
2608c2ecf20Sopenharmony_ci	  the ARM SMMU architecture.
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_ciconfig ARM_SMMU_LEGACY_DT_BINDINGS
2638c2ecf20Sopenharmony_ci	bool "Support the legacy \"mmu-masters\" devicetree bindings"
2648c2ecf20Sopenharmony_ci	depends on ARM_SMMU=y && OF
2658c2ecf20Sopenharmony_ci	help
2668c2ecf20Sopenharmony_ci	  Support for the badly designed and deprecated "mmu-masters"
2678c2ecf20Sopenharmony_ci	  devicetree bindings. This allows some DMA masters to attach
2688c2ecf20Sopenharmony_ci	  to the SMMU but does not provide any support via the DMA API.
2698c2ecf20Sopenharmony_ci	  If you're lucky, you might be able to get VFIO up and running.
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ci	  If you say Y here then you'll make me very sad. Instead, say N
2728c2ecf20Sopenharmony_ci	  and move your firmware to the utopian future that was 2016.
2738c2ecf20Sopenharmony_ci
2748c2ecf20Sopenharmony_ciconfig ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
2758c2ecf20Sopenharmony_ci	bool "Default to disabling bypass on ARM SMMU v1 and v2"
2768c2ecf20Sopenharmony_ci	depends on ARM_SMMU
2778c2ecf20Sopenharmony_ci	default y
2788c2ecf20Sopenharmony_ci	help
2798c2ecf20Sopenharmony_ci	  Say Y here to (by default) disable bypass streams such that
2808c2ecf20Sopenharmony_ci	  incoming transactions from devices that are not attached to
2818c2ecf20Sopenharmony_ci	  an iommu domain will report an abort back to the device and
2828c2ecf20Sopenharmony_ci	  will not be allowed to pass through the SMMU.
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci	  Any old kernels that existed before this KConfig was
2858c2ecf20Sopenharmony_ci	  introduced would default to _allowing_ bypass (AKA the
2868c2ecf20Sopenharmony_ci	  equivalent of NO for this config).  However the default for
2878c2ecf20Sopenharmony_ci	  this option is YES because the old behavior is insecure.
2888c2ecf20Sopenharmony_ci
2898c2ecf20Sopenharmony_ci	  There are few reasons to allow unmatched stream bypass, and
2908c2ecf20Sopenharmony_ci	  even fewer good ones.  If saying YES here breaks your board
2918c2ecf20Sopenharmony_ci	  you should work on fixing your board.  This KConfig option
2928c2ecf20Sopenharmony_ci	  is expected to be removed in the future and we'll simply
2938c2ecf20Sopenharmony_ci	  hardcode the bypass disable in the code.
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci	  NOTE: the kernel command line parameter
2968c2ecf20Sopenharmony_ci	  'arm-smmu.disable_bypass' will continue to override this
2978c2ecf20Sopenharmony_ci	  config.
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ciconfig ARM_SMMU_V3
3008c2ecf20Sopenharmony_ci	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
3018c2ecf20Sopenharmony_ci	depends on ARM64
3028c2ecf20Sopenharmony_ci	select IOMMU_API
3038c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
3048c2ecf20Sopenharmony_ci	select GENERIC_MSI_IRQ_DOMAIN
3058c2ecf20Sopenharmony_ci	help
3068c2ecf20Sopenharmony_ci	  Support for implementations of the ARM System MMU architecture
3078c2ecf20Sopenharmony_ci	  version 3 providing translation support to a PCIe root complex.
3088c2ecf20Sopenharmony_ci
3098c2ecf20Sopenharmony_ci	  Say Y here if your system includes an IOMMU device implementing
3108c2ecf20Sopenharmony_ci	  the ARM SMMUv3 architecture.
3118c2ecf20Sopenharmony_ci
3128c2ecf20Sopenharmony_ciconfig ARM_SMMU_V3_SVA
3138c2ecf20Sopenharmony_ci	bool "Shared Virtual Addressing support for the ARM SMMUv3"
3148c2ecf20Sopenharmony_ci	depends on ARM_SMMU_V3
3158c2ecf20Sopenharmony_ci	help
3168c2ecf20Sopenharmony_ci	  Support for sharing process address spaces with devices using the
3178c2ecf20Sopenharmony_ci	  SMMUv3.
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_ci	  Say Y here if your system supports SVA extensions such as PCIe PASID
3208c2ecf20Sopenharmony_ci	  and PRI.
3218c2ecf20Sopenharmony_ci
3228c2ecf20Sopenharmony_ciconfig S390_IOMMU
3238c2ecf20Sopenharmony_ci	def_bool y if S390 && PCI
3248c2ecf20Sopenharmony_ci	depends on S390 && PCI
3258c2ecf20Sopenharmony_ci	select IOMMU_API
3268c2ecf20Sopenharmony_ci	help
3278c2ecf20Sopenharmony_ci	  Support for the IOMMU API for s390 PCI devices.
3288c2ecf20Sopenharmony_ci
3298c2ecf20Sopenharmony_ciconfig S390_CCW_IOMMU
3308c2ecf20Sopenharmony_ci	bool "S390 CCW IOMMU Support"
3318c2ecf20Sopenharmony_ci	depends on S390 && CCW || COMPILE_TEST
3328c2ecf20Sopenharmony_ci	select IOMMU_API
3338c2ecf20Sopenharmony_ci	help
3348c2ecf20Sopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
3358c2ecf20Sopenharmony_ci	  is not implemented as it is not necessary for VFIO.
3368c2ecf20Sopenharmony_ci
3378c2ecf20Sopenharmony_ciconfig S390_AP_IOMMU
3388c2ecf20Sopenharmony_ci	bool "S390 AP IOMMU Support"
3398c2ecf20Sopenharmony_ci	depends on S390 && ZCRYPT || COMPILE_TEST
3408c2ecf20Sopenharmony_ci	select IOMMU_API
3418c2ecf20Sopenharmony_ci	help
3428c2ecf20Sopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
3438c2ecf20Sopenharmony_ci	  is not implemented as it is not necessary for VFIO.
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ciconfig MTK_IOMMU
3468c2ecf20Sopenharmony_ci	bool "MTK IOMMU Support"
3478c2ecf20Sopenharmony_ci	depends on ARCH_MEDIATEK || COMPILE_TEST
3488c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
3498c2ecf20Sopenharmony_ci	select IOMMU_API
3508c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_ARMV7S
3518c2ecf20Sopenharmony_ci	select MEMORY
3528c2ecf20Sopenharmony_ci	select MTK_SMI
3538c2ecf20Sopenharmony_ci	help
3548c2ecf20Sopenharmony_ci	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
3558c2ecf20Sopenharmony_ci	  Memory Management Unit. This option enables remapping of DMA memory
3568c2ecf20Sopenharmony_ci	  accesses for the multimedia subsystem.
3578c2ecf20Sopenharmony_ci
3588c2ecf20Sopenharmony_ci	  If unsure, say N here.
3598c2ecf20Sopenharmony_ci
3608c2ecf20Sopenharmony_ciconfig MTK_IOMMU_V1
3618c2ecf20Sopenharmony_ci	bool "MTK IOMMU Version 1 (M4U gen1) Support"
3628c2ecf20Sopenharmony_ci	depends on ARM
3638c2ecf20Sopenharmony_ci	depends on ARCH_MEDIATEK || COMPILE_TEST
3648c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
3658c2ecf20Sopenharmony_ci	select IOMMU_API
3668c2ecf20Sopenharmony_ci	select MEMORY
3678c2ecf20Sopenharmony_ci	select MTK_SMI
3688c2ecf20Sopenharmony_ci	help
3698c2ecf20Sopenharmony_ci	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
3708c2ecf20Sopenharmony_ci	  Multimedia Memory Managememt Unit. This option enables remapping of
3718c2ecf20Sopenharmony_ci	  DMA memory accesses for the multimedia subsystem.
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci	  if unsure, say N here.
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ciconfig QCOM_IOMMU
3768c2ecf20Sopenharmony_ci	# Note: iommu drivers cannot (yet?) be built as modules
3778c2ecf20Sopenharmony_ci	bool "Qualcomm IOMMU Support"
3788c2ecf20Sopenharmony_ci	depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
3798c2ecf20Sopenharmony_ci	select IOMMU_API
3808c2ecf20Sopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
3818c2ecf20Sopenharmony_ci	select ARM_DMA_USE_IOMMU
3828c2ecf20Sopenharmony_ci	help
3838c2ecf20Sopenharmony_ci	  Support for IOMMU on certain Qualcomm SoCs.
3848c2ecf20Sopenharmony_ci
3858c2ecf20Sopenharmony_ciconfig HYPERV_IOMMU
3868c2ecf20Sopenharmony_ci	bool "Hyper-V x2APIC IRQ Handling"
3878c2ecf20Sopenharmony_ci	depends on HYPERV && X86
3888c2ecf20Sopenharmony_ci	select IOMMU_API
3898c2ecf20Sopenharmony_ci	default HYPERV
3908c2ecf20Sopenharmony_ci	help
3918c2ecf20Sopenharmony_ci	  Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
3928c2ecf20Sopenharmony_ci	  guests to run with x2APIC mode enabled.
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_ciconfig VIRTIO_IOMMU
3958c2ecf20Sopenharmony_ci	tristate "Virtio IOMMU driver"
3968c2ecf20Sopenharmony_ci	depends on VIRTIO
3978c2ecf20Sopenharmony_ci	depends on ARM64
3988c2ecf20Sopenharmony_ci	select IOMMU_API
3998c2ecf20Sopenharmony_ci	select INTERVAL_TREE
4008c2ecf20Sopenharmony_ci	help
4018c2ecf20Sopenharmony_ci	  Para-virtualised IOMMU driver with virtio.
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ci	  Say Y here if you intend to run this kernel as a guest.
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ciendif # IOMMU_SUPPORT
406