13d0407baSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
23d0407baSopenharmony_ci# The IOVA library may also be used by non-IOMMU_API users
33d0407baSopenharmony_ciconfig IOMMU_IOVA
43d0407baSopenharmony_ci	tristate
53d0407baSopenharmony_ci
63d0407baSopenharmony_ci# The IOASID library may also be used by non-IOMMU_API users
73d0407baSopenharmony_ciconfig IOASID
83d0407baSopenharmony_ci	tristate
93d0407baSopenharmony_ci
103d0407baSopenharmony_ci# IOMMU_API always gets selected by whoever wants it.
113d0407baSopenharmony_ciconfig IOMMU_API
123d0407baSopenharmony_ci	bool
133d0407baSopenharmony_ci
143d0407baSopenharmony_cimenuconfig IOMMU_SUPPORT
153d0407baSopenharmony_ci	bool "IOMMU Hardware Support"
163d0407baSopenharmony_ci	depends on MMU
173d0407baSopenharmony_ci	default y
183d0407baSopenharmony_ci	help
193d0407baSopenharmony_ci	  Say Y here if you want to compile device drivers for IO Memory
203d0407baSopenharmony_ci	  Management Units into the kernel. These devices usually allow to
213d0407baSopenharmony_ci	  remap DMA requests and/or remap interrupts from other devices on the
223d0407baSopenharmony_ci	  system.
233d0407baSopenharmony_ci
243d0407baSopenharmony_ciif IOMMU_SUPPORT
253d0407baSopenharmony_ci
263d0407baSopenharmony_cimenu "Generic IOMMU Pagetable Support"
273d0407baSopenharmony_ci
283d0407baSopenharmony_ci# Selected by the actual pagetable implementations
293d0407baSopenharmony_ciconfig IOMMU_IO_PGTABLE
303d0407baSopenharmony_ci	bool
313d0407baSopenharmony_ci
323d0407baSopenharmony_ciconfig IOMMU_IO_PGTABLE_LPAE
333d0407baSopenharmony_ci	bool "ARMv7/v8 Long Descriptor Format"
343d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE
353d0407baSopenharmony_ci	depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
363d0407baSopenharmony_ci	help
373d0407baSopenharmony_ci	  Enable support for the ARM long descriptor pagetable format.
383d0407baSopenharmony_ci	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
393d0407baSopenharmony_ci	  sizes at both stage-1 and stage-2, as well as address spaces
403d0407baSopenharmony_ci	  up to 48-bits in size.
413d0407baSopenharmony_ci
423d0407baSopenharmony_ciconfig IOMMU_IO_PGTABLE_LPAE_SELFTEST
433d0407baSopenharmony_ci	bool "LPAE selftests"
443d0407baSopenharmony_ci	depends on IOMMU_IO_PGTABLE_LPAE
453d0407baSopenharmony_ci	help
463d0407baSopenharmony_ci	  Enable self-tests for LPAE page table allocator. This performs
473d0407baSopenharmony_ci	  a series of page-table consistency checks during boot.
483d0407baSopenharmony_ci
493d0407baSopenharmony_ci	  If unsure, say N here.
503d0407baSopenharmony_ci
513d0407baSopenharmony_ciconfig IOMMU_IO_PGTABLE_ARMV7S
523d0407baSopenharmony_ci	bool "ARMv7/v8 Short Descriptor Format"
533d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE
543d0407baSopenharmony_ci	depends on ARM || ARM64 || COMPILE_TEST
553d0407baSopenharmony_ci	help
563d0407baSopenharmony_ci	  Enable support for the ARM Short-descriptor pagetable format.
573d0407baSopenharmony_ci	  This supports 32-bit virtual and physical addresses mapped using
583d0407baSopenharmony_ci	  2-level tables with 4KB pages/1MB sections, and contiguous entries
593d0407baSopenharmony_ci	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.
603d0407baSopenharmony_ci
613d0407baSopenharmony_ciconfig IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
623d0407baSopenharmony_ci	bool "ARMv7s selftests"
633d0407baSopenharmony_ci	depends on IOMMU_IO_PGTABLE_ARMV7S
643d0407baSopenharmony_ci	help
653d0407baSopenharmony_ci	  Enable self-tests for ARMv7s page table allocator. This performs
663d0407baSopenharmony_ci	  a series of page-table consistency checks during boot.
673d0407baSopenharmony_ci
683d0407baSopenharmony_ci	  If unsure, say N here.
693d0407baSopenharmony_ci
703d0407baSopenharmony_ciendmenu
713d0407baSopenharmony_ci
723d0407baSopenharmony_ciconfig IOMMU_DEBUGFS
733d0407baSopenharmony_ci	bool "Export IOMMU internals in DebugFS"
743d0407baSopenharmony_ci	depends on DEBUG_FS
753d0407baSopenharmony_ci	help
763d0407baSopenharmony_ci	  Allows exposure of IOMMU device internals. This option enables
773d0407baSopenharmony_ci	  the use of debugfs by IOMMU drivers as required. Devices can,
783d0407baSopenharmony_ci	  at initialization time, cause the IOMMU code to create a top-level
793d0407baSopenharmony_ci	  debug/iommu directory, and then populate a subdirectory with
803d0407baSopenharmony_ci	  entries as required.
813d0407baSopenharmony_ci
823d0407baSopenharmony_ciconfig IOMMU_DEFAULT_PASSTHROUGH
833d0407baSopenharmony_ci	bool "IOMMU passthrough by default"
843d0407baSopenharmony_ci	depends on IOMMU_API
853d0407baSopenharmony_ci	help
863d0407baSopenharmony_ci	  Enable passthrough by default, removing the need to pass in
873d0407baSopenharmony_ci	  iommu.passthrough=on or iommu=pt through command line. If this
883d0407baSopenharmony_ci	  is enabled, you can still disable with iommu.passthrough=off
893d0407baSopenharmony_ci	  or iommu=nopt depending on the architecture.
903d0407baSopenharmony_ci
913d0407baSopenharmony_ci	  If unsure, say N here.
923d0407baSopenharmony_ci
933d0407baSopenharmony_ciconfig OF_IOMMU
943d0407baSopenharmony_ci	def_bool y
953d0407baSopenharmony_ci	depends on OF && IOMMU_API
963d0407baSopenharmony_ci
973d0407baSopenharmony_ci# IOMMU-agnostic DMA-mapping layer
983d0407baSopenharmony_ciconfig IOMMU_DMA
993d0407baSopenharmony_ci	bool
1003d0407baSopenharmony_ci	select DMA_OPS
1013d0407baSopenharmony_ci	select IOMMU_API
1023d0407baSopenharmony_ci	select IOMMU_IOVA
1033d0407baSopenharmony_ci	select IRQ_MSI_IOMMU
1043d0407baSopenharmony_ci	select NEED_SG_DMA_LENGTH
1053d0407baSopenharmony_ci
1063d0407baSopenharmony_ciconfig FSL_PAMU
1073d0407baSopenharmony_ci	bool "Freescale IOMMU support"
1083d0407baSopenharmony_ci	depends on PCI
1093d0407baSopenharmony_ci	depends on PHYS_64BIT
1103d0407baSopenharmony_ci	depends on PPC_E500MC || (COMPILE_TEST && PPC)
1113d0407baSopenharmony_ci	select IOMMU_API
1123d0407baSopenharmony_ci	select GENERIC_ALLOCATOR
1133d0407baSopenharmony_ci	help
1143d0407baSopenharmony_ci	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
1153d0407baSopenharmony_ci	  PAMU can authorize memory access, remap the memory address, and remap I/O
1163d0407baSopenharmony_ci	  transaction types.
1173d0407baSopenharmony_ci
1183d0407baSopenharmony_ci# MSM IOMMU support
1193d0407baSopenharmony_ciconfig MSM_IOMMU
1203d0407baSopenharmony_ci	bool "MSM IOMMU Support"
1213d0407baSopenharmony_ci	depends on ARM
1223d0407baSopenharmony_ci	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
1233d0407baSopenharmony_ci	select IOMMU_API
1243d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_ARMV7S
1253d0407baSopenharmony_ci	help
1263d0407baSopenharmony_ci	  Support for the IOMMUs found on certain Qualcomm SOCs.
1273d0407baSopenharmony_ci	  These IOMMUs allow virtualization of the address space used by most
1283d0407baSopenharmony_ci	  cores within the multimedia subsystem.
1293d0407baSopenharmony_ci
1303d0407baSopenharmony_ci	  If unsure, say N here.
1313d0407baSopenharmony_ci
1323d0407baSopenharmony_cisource "drivers/iommu/amd/Kconfig"
1333d0407baSopenharmony_cisource "drivers/iommu/intel/Kconfig"
1343d0407baSopenharmony_ci
1353d0407baSopenharmony_ciconfig IRQ_REMAP
1363d0407baSopenharmony_ci	bool "Support for Interrupt Remapping"
1373d0407baSopenharmony_ci	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
1383d0407baSopenharmony_ci	select DMAR_TABLE
1393d0407baSopenharmony_ci	help
1403d0407baSopenharmony_ci	  Supports Interrupt remapping for IO-APIC and MSI devices.
1413d0407baSopenharmony_ci	  To use x2apic mode in the CPU's which support x2APIC enhancements or
1423d0407baSopenharmony_ci	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
1433d0407baSopenharmony_ci
1443d0407baSopenharmony_ci# OMAP IOMMU support
1453d0407baSopenharmony_ciconfig OMAP_IOMMU
1463d0407baSopenharmony_ci	bool "OMAP IOMMU Support"
1473d0407baSopenharmony_ci	depends on ARCH_OMAP2PLUS || COMPILE_TEST
1483d0407baSopenharmony_ci	select IOMMU_API
1493d0407baSopenharmony_ci	help
1503d0407baSopenharmony_ci	  The OMAP3 media platform drivers depend on iommu support,
1513d0407baSopenharmony_ci	  if you need them say Y here.
1523d0407baSopenharmony_ci
1533d0407baSopenharmony_ciconfig OMAP_IOMMU_DEBUG
1543d0407baSopenharmony_ci	bool "Export OMAP IOMMU internals in DebugFS"
1553d0407baSopenharmony_ci	depends on OMAP_IOMMU && DEBUG_FS
1563d0407baSopenharmony_ci	help
1573d0407baSopenharmony_ci	  Select this to see extensive information about
1583d0407baSopenharmony_ci	  the internal state of OMAP IOMMU in debugfs.
1593d0407baSopenharmony_ci
1603d0407baSopenharmony_ci	  Say N unless you know you need this.
1613d0407baSopenharmony_ci
1623d0407baSopenharmony_ciconfig ROCKCHIP_IOMMU
1633d0407baSopenharmony_ci	tristate "Rockchip IOMMU Support"
1643d0407baSopenharmony_ci	depends on ARM || ARM64
1653d0407baSopenharmony_ci	depends on ARCH_ROCKCHIP || COMPILE_TEST
1663d0407baSopenharmony_ci	select IOMMU_API
1673d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
1683d0407baSopenharmony_ci	help
1693d0407baSopenharmony_ci	  Support for IOMMUs found on Rockchip rk32xx SOCs.
1703d0407baSopenharmony_ci	  These IOMMUs allow virtualization of the address space used by most
1713d0407baSopenharmony_ci	  cores within the multimedia subsystem.
1723d0407baSopenharmony_ci	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
1733d0407baSopenharmony_ci	  device.
1743d0407baSopenharmony_ci
1753d0407baSopenharmony_ciconfig SUN50I_IOMMU
1763d0407baSopenharmony_ci	bool "Allwinner H6 IOMMU Support"
1773d0407baSopenharmony_ci	depends on HAS_DMA
1783d0407baSopenharmony_ci	depends on ARCH_SUNXI || COMPILE_TEST
1793d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
1803d0407baSopenharmony_ci	select IOMMU_API
1813d0407baSopenharmony_ci	help
1823d0407baSopenharmony_ci	  Support for the IOMMU introduced in the Allwinner H6 SoCs.
1833d0407baSopenharmony_ci
1843d0407baSopenharmony_ciconfig TEGRA_IOMMU_GART
1853d0407baSopenharmony_ci	bool "Tegra GART IOMMU Support"
1863d0407baSopenharmony_ci	depends on ARCH_TEGRA_2x_SOC
1873d0407baSopenharmony_ci	depends on TEGRA_MC
1883d0407baSopenharmony_ci	select IOMMU_API
1893d0407baSopenharmony_ci	help
1903d0407baSopenharmony_ci	  Enables support for remapping discontiguous physical memory
1913d0407baSopenharmony_ci	  shared with the operating system into contiguous I/O virtual
1923d0407baSopenharmony_ci	  space through the GART (Graphics Address Relocation Table)
1933d0407baSopenharmony_ci	  hardware included on Tegra SoCs.
1943d0407baSopenharmony_ci
1953d0407baSopenharmony_ciconfig TEGRA_IOMMU_SMMU
1963d0407baSopenharmony_ci	bool "NVIDIA Tegra SMMU Support"
1973d0407baSopenharmony_ci	depends on ARCH_TEGRA
1983d0407baSopenharmony_ci	depends on TEGRA_AHB
1993d0407baSopenharmony_ci	depends on TEGRA_MC
2003d0407baSopenharmony_ci	select IOMMU_API
2013d0407baSopenharmony_ci	help
2023d0407baSopenharmony_ci	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
2033d0407baSopenharmony_ci	  SoCs (Tegra30 up to Tegra210).
2043d0407baSopenharmony_ci
2053d0407baSopenharmony_ciconfig EXYNOS_IOMMU
2063d0407baSopenharmony_ci	bool "Exynos IOMMU Support"
2073d0407baSopenharmony_ci	depends on ARCH_EXYNOS || COMPILE_TEST
2083d0407baSopenharmony_ci	depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
2093d0407baSopenharmony_ci	select IOMMU_API
2103d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
2113d0407baSopenharmony_ci	help
2123d0407baSopenharmony_ci	  Support for the IOMMU (System MMU) of Samsung Exynos application
2133d0407baSopenharmony_ci	  processor family. This enables H/W multimedia accelerators to see
2143d0407baSopenharmony_ci	  non-linear physical memory chunks as linear memory in their
2153d0407baSopenharmony_ci	  address space.
2163d0407baSopenharmony_ci
2173d0407baSopenharmony_ci	  If unsure, say N here.
2183d0407baSopenharmony_ci
2193d0407baSopenharmony_ciconfig EXYNOS_IOMMU_DEBUG
2203d0407baSopenharmony_ci	bool "Debugging log for Exynos IOMMU"
2213d0407baSopenharmony_ci	depends on EXYNOS_IOMMU
2223d0407baSopenharmony_ci	help
2233d0407baSopenharmony_ci	  Select this to see the detailed log message that shows what
2243d0407baSopenharmony_ci	  happens in the IOMMU driver.
2253d0407baSopenharmony_ci
2263d0407baSopenharmony_ci	  Say N unless you need kernel log message for IOMMU debugging.
2273d0407baSopenharmony_ci
2283d0407baSopenharmony_ciconfig IPMMU_VMSA
2293d0407baSopenharmony_ci	bool "Renesas VMSA-compatible IPMMU"
2303d0407baSopenharmony_ci	depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
2313d0407baSopenharmony_ci	select IOMMU_API
2323d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
2333d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
2343d0407baSopenharmony_ci	help
2353d0407baSopenharmony_ci	  Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
2363d0407baSopenharmony_ci	  APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
2373d0407baSopenharmony_ci
2383d0407baSopenharmony_ci	  If unsure, say N.
2393d0407baSopenharmony_ci
2403d0407baSopenharmony_ciconfig SPAPR_TCE_IOMMU
2413d0407baSopenharmony_ci	bool "sPAPR TCE IOMMU Support"
2423d0407baSopenharmony_ci	depends on PPC_POWERNV || PPC_PSERIES
2433d0407baSopenharmony_ci	select IOMMU_API
2443d0407baSopenharmony_ci	help
2453d0407baSopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
2463d0407baSopenharmony_ci	  is not implemented as it is not necessary for VFIO.
2473d0407baSopenharmony_ci
2483d0407baSopenharmony_ci# ARM IOMMU support
2493d0407baSopenharmony_ciconfig ARM_SMMU
2503d0407baSopenharmony_ci	tristate "ARM Ltd. System MMU (SMMU) Support"
2513d0407baSopenharmony_ci	depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64)
2523d0407baSopenharmony_ci	select IOMMU_API
2533d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
2543d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU if ARM
2553d0407baSopenharmony_ci	help
2563d0407baSopenharmony_ci	  Support for implementations of the ARM System MMU architecture
2573d0407baSopenharmony_ci	  versions 1 and 2.
2583d0407baSopenharmony_ci
2593d0407baSopenharmony_ci	  Say Y here if your SoC includes an IOMMU device implementing
2603d0407baSopenharmony_ci	  the ARM SMMU architecture.
2613d0407baSopenharmony_ci
2623d0407baSopenharmony_ciconfig ARM_SMMU_LEGACY_DT_BINDINGS
2633d0407baSopenharmony_ci	bool "Support the legacy \"mmu-masters\" devicetree bindings"
2643d0407baSopenharmony_ci	depends on ARM_SMMU=y && OF
2653d0407baSopenharmony_ci	help
2663d0407baSopenharmony_ci	  Support for the badly designed and deprecated "mmu-masters"
2673d0407baSopenharmony_ci	  devicetree bindings. This allows some DMA masters to attach
2683d0407baSopenharmony_ci	  to the SMMU but does not provide any support via the DMA API.
2693d0407baSopenharmony_ci	  If you're lucky, you might be able to get VFIO up and running.
2703d0407baSopenharmony_ci
2713d0407baSopenharmony_ci	  If you say Y here then you'll make me very sad. Instead, say N
2723d0407baSopenharmony_ci	  and move your firmware to the utopian future that was 2016.
2733d0407baSopenharmony_ci
2743d0407baSopenharmony_ciconfig ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
2753d0407baSopenharmony_ci	bool "Default to disabling bypass on ARM SMMU v1 and v2"
2763d0407baSopenharmony_ci	depends on ARM_SMMU
2773d0407baSopenharmony_ci	default y
2783d0407baSopenharmony_ci	help
2793d0407baSopenharmony_ci	  Say Y here to (by default) disable bypass streams such that
2803d0407baSopenharmony_ci	  incoming transactions from devices that are not attached to
2813d0407baSopenharmony_ci	  an iommu domain will report an abort back to the device and
2823d0407baSopenharmony_ci	  will not be allowed to pass through the SMMU.
2833d0407baSopenharmony_ci
2843d0407baSopenharmony_ci	  Any old kernels that existed before this KConfig was
2853d0407baSopenharmony_ci	  introduced would default to _allowing_ bypass (AKA the
2863d0407baSopenharmony_ci	  equivalent of NO for this config).  However the default for
2873d0407baSopenharmony_ci	  this option is YES because the old behavior is insecure.
2883d0407baSopenharmony_ci
2893d0407baSopenharmony_ci	  There are few reasons to allow unmatched stream bypass, and
2903d0407baSopenharmony_ci	  even fewer good ones.  If saying YES here breaks your board
2913d0407baSopenharmony_ci	  you should work on fixing your board.  This KConfig option
2923d0407baSopenharmony_ci	  is expected to be removed in the future and we'll simply
2933d0407baSopenharmony_ci	  hardcode the bypass disable in the code.
2943d0407baSopenharmony_ci
2953d0407baSopenharmony_ci	  NOTE: the kernel command line parameter
2963d0407baSopenharmony_ci	  'arm-smmu.disable_bypass' will continue to override this
2973d0407baSopenharmony_ci	  config.
2983d0407baSopenharmony_ci
2993d0407baSopenharmony_ciconfig ARM_SMMU_V3
3003d0407baSopenharmony_ci	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
3013d0407baSopenharmony_ci	depends on ARM64
3023d0407baSopenharmony_ci	select IOMMU_API
3033d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
3043d0407baSopenharmony_ci	select GENERIC_MSI_IRQ_DOMAIN
3053d0407baSopenharmony_ci	help
3063d0407baSopenharmony_ci	  Support for implementations of the ARM System MMU architecture
3073d0407baSopenharmony_ci	  version 3 providing translation support to a PCIe root complex.
3083d0407baSopenharmony_ci
3093d0407baSopenharmony_ci	  Say Y here if your system includes an IOMMU device implementing
3103d0407baSopenharmony_ci	  the ARM SMMUv3 architecture.
3113d0407baSopenharmony_ci
3123d0407baSopenharmony_ciconfig ARM_SMMU_V3_SVA
3133d0407baSopenharmony_ci	bool "Shared Virtual Addressing support for the ARM SMMUv3"
3143d0407baSopenharmony_ci	depends on ARM_SMMU_V3
3153d0407baSopenharmony_ci	help
3163d0407baSopenharmony_ci	  Support for sharing process address spaces with devices using the
3173d0407baSopenharmony_ci	  SMMUv3.
3183d0407baSopenharmony_ci
3193d0407baSopenharmony_ci	  Say Y here if your system supports SVA extensions such as PCIe PASID
3203d0407baSopenharmony_ci	  and PRI.
3213d0407baSopenharmony_ci
3223d0407baSopenharmony_ciconfig S390_IOMMU
3233d0407baSopenharmony_ci	def_bool y if S390 && PCI
3243d0407baSopenharmony_ci	depends on S390 && PCI
3253d0407baSopenharmony_ci	select IOMMU_API
3263d0407baSopenharmony_ci	help
3273d0407baSopenharmony_ci	  Support for the IOMMU API for s390 PCI devices.
3283d0407baSopenharmony_ci
3293d0407baSopenharmony_ciconfig S390_CCW_IOMMU
3303d0407baSopenharmony_ci	bool "S390 CCW IOMMU Support"
3313d0407baSopenharmony_ci	depends on S390 && CCW || COMPILE_TEST
3323d0407baSopenharmony_ci	select IOMMU_API
3333d0407baSopenharmony_ci	help
3343d0407baSopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
3353d0407baSopenharmony_ci	  is not implemented as it is not necessary for VFIO.
3363d0407baSopenharmony_ci
3373d0407baSopenharmony_ciconfig S390_AP_IOMMU
3383d0407baSopenharmony_ci	bool "S390 AP IOMMU Support"
3393d0407baSopenharmony_ci	depends on S390 && ZCRYPT || COMPILE_TEST
3403d0407baSopenharmony_ci	select IOMMU_API
3413d0407baSopenharmony_ci	help
3423d0407baSopenharmony_ci	  Enables bits of IOMMU API required by VFIO. The iommu_ops
3433d0407baSopenharmony_ci	  is not implemented as it is not necessary for VFIO.
3443d0407baSopenharmony_ci
3453d0407baSopenharmony_ciconfig MTK_IOMMU
3463d0407baSopenharmony_ci	bool "MTK IOMMU Support"
3473d0407baSopenharmony_ci	depends on ARCH_MEDIATEK || COMPILE_TEST
3483d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
3493d0407baSopenharmony_ci	select IOMMU_API
3503d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_ARMV7S
3513d0407baSopenharmony_ci	select MEMORY
3523d0407baSopenharmony_ci	select MTK_SMI
3533d0407baSopenharmony_ci	help
3543d0407baSopenharmony_ci	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
3553d0407baSopenharmony_ci	  Memory Management Unit. This option enables remapping of DMA memory
3563d0407baSopenharmony_ci	  accesses for the multimedia subsystem.
3573d0407baSopenharmony_ci
3583d0407baSopenharmony_ci	  If unsure, say N here.
3593d0407baSopenharmony_ci
3603d0407baSopenharmony_ciconfig MTK_IOMMU_V1
3613d0407baSopenharmony_ci	bool "MTK IOMMU Version 1 (M4U gen1) Support"
3623d0407baSopenharmony_ci	depends on ARM
3633d0407baSopenharmony_ci	depends on ARCH_MEDIATEK || COMPILE_TEST
3643d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
3653d0407baSopenharmony_ci	select IOMMU_API
3663d0407baSopenharmony_ci	select MEMORY
3673d0407baSopenharmony_ci	select MTK_SMI
3683d0407baSopenharmony_ci	help
3693d0407baSopenharmony_ci	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
3703d0407baSopenharmony_ci	  Multimedia Memory Managememt Unit. This option enables remapping of
3713d0407baSopenharmony_ci	  DMA memory accesses for the multimedia subsystem.
3723d0407baSopenharmony_ci
3733d0407baSopenharmony_ci	  if unsure, say N here.
3743d0407baSopenharmony_ci
3753d0407baSopenharmony_ciconfig QCOM_IOMMU
3763d0407baSopenharmony_ci	# Note: iommu drivers cannot (yet?) be built as modules
3773d0407baSopenharmony_ci	bool "Qualcomm IOMMU Support"
3783d0407baSopenharmony_ci	depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
3793d0407baSopenharmony_ci	select IOMMU_API
3803d0407baSopenharmony_ci	select IOMMU_IO_PGTABLE_LPAE
3813d0407baSopenharmony_ci	select ARM_DMA_USE_IOMMU
3823d0407baSopenharmony_ci	help
3833d0407baSopenharmony_ci	  Support for IOMMU on certain Qualcomm SoCs.
3843d0407baSopenharmony_ci
3853d0407baSopenharmony_ciconfig HYPERV_IOMMU
3863d0407baSopenharmony_ci	bool "Hyper-V x2APIC IRQ Handling"
3873d0407baSopenharmony_ci	depends on HYPERV && X86
3883d0407baSopenharmony_ci	select IOMMU_API
3893d0407baSopenharmony_ci	default HYPERV
3903d0407baSopenharmony_ci	help
3913d0407baSopenharmony_ci	  Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
3923d0407baSopenharmony_ci	  guests to run with x2APIC mode enabled.
3933d0407baSopenharmony_ci
3943d0407baSopenharmony_ciconfig VIRTIO_IOMMU
3953d0407baSopenharmony_ci	tristate "Virtio IOMMU driver"
3963d0407baSopenharmony_ci	depends on VIRTIO
3973d0407baSopenharmony_ci	depends on ARM64
3983d0407baSopenharmony_ci	select IOMMU_API
3993d0407baSopenharmony_ci	select INTERVAL_TREE
4003d0407baSopenharmony_ci	help
4013d0407baSopenharmony_ci	  Para-virtualised IOMMU driver with virtio.
4023d0407baSopenharmony_ci
4033d0407baSopenharmony_ci	  Say Y here if you intend to run this kernel as a guest.
4043d0407baSopenharmony_ci
4053d0407baSopenharmony_ciendif # IOMMU_SUPPORT
406