123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- # SPDX-License-Identifier: GPL-2.0-only
- # The IOVA library may also be used by non-IOMMU_API users
- config IOMMU_IOVA
- tristate
- # The IOASID library may also be used by non-IOMMU_API users
- config IOASID
- tristate
- # IOMMU_API always gets selected by whoever wants it.
- config IOMMU_API
- bool
- if IOMMU_IOVA
- config IOMMU_LIMIT_IOVA_ALIGNMENT
- bool "Limit IOVA alignment"
- help
- When the IOVA framework applies IOVA alignment it aligns all
- IOVAs to the smallest PAGE_SIZE order which is greater than or
- equal to the requested IOVA size. This works fine for sizes up
- to several MiB, but for larger sizes it results in address
- space wastage and fragmentation. For example drivers with a 4
- GiB IOVA space might run out of IOVA space when allocating
- buffers great than 64 MiB.
- Enable this option to impose a limit on the alignment of IOVAs.
- If unsure, say N.
- config IOMMU_IOVA_ALIGNMENT
- int "Maximum PAGE_SIZE order of alignment for IOVAs"
- depends on IOMMU_LIMIT_IOVA_ALIGNMENT
- range 4 9
- default 9
- help
- With this parameter you can specify the maximum PAGE_SIZE order for
- IOVAs. Larger IOVAs will be aligned only to this specified order.
- The order is expressed a power of two multiplied by the PAGE_SIZE.
- If unsure, leave the default value "9".
- endif
- 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 ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
- 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 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_DEBUGFS
- bool "Export IOMMU internals in DebugFS"
- depends on DEBUG_FS
- help
- Allows exposure of IOMMU device internals. This option enables
- the use of debugfs by IOMMU drivers as required. Devices can,
- at initialization time, cause the IOMMU code to create a top-level
- debug/iommu directory, and then populate a subdirectory with
- entries as required.
- config IOMMU_DEFAULT_PASSTHROUGH
- bool "IOMMU passthrough by default"
- depends on IOMMU_API
- help
- Enable passthrough by default, removing the need to pass in
- iommu.passthrough=on or iommu=pt through command line. If this
- is enabled, you can still disable with iommu.passthrough=off
- or iommu=nopt depending on the architecture.
- If unsure, say N here.
- config OF_IOMMU
- def_bool y
- depends on OF && IOMMU_API
- # IOMMU-agnostic DMA-mapping layer
- config IOMMU_DMA
- bool
- select DMA_OPS
- select IOMMU_API
- select IOMMU_IOVA
- select IRQ_MSI_IOMMU
- select NEED_SG_DMA_LENGTH
- config FSL_PAMU
- bool "Freescale IOMMU support"
- depends on PCI
- depends on PHYS_64BIT
- depends on PPC_E500MC || (COMPILE_TEST && PPC)
- 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
- select IOMMU_API
- select IOMMU_IO_PGTABLE_ARMV7S
- 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.
- source "drivers/iommu/amd/Kconfig"
- source "drivers/iommu/intel/Kconfig"
- 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 || 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 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 SUN50I_IOMMU
- bool "Allwinner H6 IOMMU Support"
- depends on HAS_DMA
- depends on ARCH_SUNXI || COMPILE_TEST
- select ARM_DMA_USE_IOMMU
- select IOMMU_API
- help
- Support for the IOMMU introduced in the Allwinner H6 SoCs.
- config TEGRA_IOMMU_GART
- bool "Tegra GART IOMMU Support"
- depends on ARCH_TEGRA_2x_SOC
- depends on TEGRA_MC
- 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 || COMPILE_TEST
- depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
- 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 ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
- select IOMMU_API
- select IOMMU_IO_PGTABLE_LPAE
- select ARM_DMA_USE_IOMMU
- help
- Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
- APE6, R-Car Gen{2,3} and RZ/G{1,2} 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
- tristate "ARM Ltd. System MMU (SMMU) Support"
- depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64)
- depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y
- 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_LEGACY_DT_BINDINGS
- bool "Support the legacy \"mmu-masters\" devicetree bindings"
- depends on ARM_SMMU=y && OF
- help
- Support for the badly designed and deprecated "mmu-masters"
- devicetree bindings. This allows some DMA masters to attach
- to the SMMU but does not provide any support via the DMA API.
- If you're lucky, you might be able to get VFIO up and running.
- If you say Y here then you'll make me very sad. Instead, say N
- and move your firmware to the utopian future that was 2016.
- config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
- bool "Default to disabling bypass on ARM SMMU v1 and v2"
- depends on ARM_SMMU
- default y
- help
- Say Y here to (by default) disable bypass streams such that
- incoming transactions from devices that are not attached to
- an iommu domain will report an abort back to the device and
- will not be allowed to pass through the SMMU.
- Any old kernels that existed before this KConfig was
- introduced would default to _allowing_ bypass (AKA the
- equivalent of NO for this config). However the default for
- this option is YES because the old behavior is insecure.
- There are few reasons to allow unmatched stream bypass, and
- even fewer good ones. If saying YES here breaks your board
- you should work on fixing your board. This KConfig option
- is expected to be removed in the future and we'll simply
- hardcode the bypass disable in the code.
- NOTE: the kernel command line parameter
- 'arm-smmu.disable_bypass' will continue to override this
- config.
- config ARM_SMMU_V3
- tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
- depends on ARM64
- 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 ARM_SMMU_V3_SVA
- bool "Shared Virtual Addressing support for the ARM SMMUv3"
- depends on ARM_SMMU_V3
- help
- Support for sharing process address spaces with devices using the
- SMMUv3.
- Say Y here if your system supports SVA extensions such as PCIe PASID
- and PRI.
- 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 S390_CCW_IOMMU
- bool "S390 CCW IOMMU Support"
- depends on S390 && CCW || COMPILE_TEST
- 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 S390_AP_IOMMU
- bool "S390 AP IOMMU Support"
- depends on S390 && ZCRYPT || COMPILE_TEST
- 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 MTK_IOMMU
- bool "MTK IOMMU Support"
- depends on ARCH_MEDIATEK || COMPILE_TEST
- select ARM_DMA_USE_IOMMU
- select IOMMU_API
- 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.
- config MTK_IOMMU_V1
- bool "MTK IOMMU Version 1 (M4U gen1) Support"
- depends on ARM
- depends on ARCH_MEDIATEK || COMPILE_TEST
- select ARM_DMA_USE_IOMMU
- select IOMMU_API
- select MEMORY
- select MTK_SMI
- help
- Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
- Multimedia Memory Managememt Unit. This option enables remapping of
- DMA memory accesses for the multimedia subsystem.
- if unsure, say N here.
- config QCOM_IOMMU
- # Note: iommu drivers cannot (yet?) be built as modules
- bool "Qualcomm IOMMU Support"
- depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
- depends on QCOM_SCM=y
- select IOMMU_API
- select IOMMU_IO_PGTABLE_LPAE
- select ARM_DMA_USE_IOMMU
- help
- Support for IOMMU on certain Qualcomm SoCs.
- config HYPERV_IOMMU
- bool "Hyper-V x2APIC IRQ Handling"
- depends on HYPERV && X86
- select IOMMU_API
- default HYPERV
- help
- Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
- guests to run with x2APIC mode enabled.
- config VIRTIO_IOMMU
- tristate "Virtio IOMMU driver"
- depends on VIRTIO
- depends on ARM64
- select IOMMU_API
- select INTERVAL_TREE
- help
- Para-virtualised IOMMU driver with virtio.
- Say Y here if you intend to run this kernel as a guest.
- endif # IOMMU_SUPPORT
|