| # 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. |
| |
| config IOMMU_IO_PGTABLE_FAST |
| bool "Fast ARMv7/v8 Long Descriptor Format" |
| depends on ARM64_DMA_USE_IOMMU || ARM_DMA_USE_IOMMU |
| help |
| Enable support for a subset of the ARM long descriptor pagetable |
| format. This allocator achieves fast performance by |
| pre-allocating and pre-populating page table memory up front. |
| only supports a 32 bit virtual address space. |
| |
| This implementation is mainly optimized for use cases where the |
| buffers are small (<= 64K) since it only supports 4K page sizes. |
| |
| config IOMMU_IO_PGTABLE_FAST_SELFTEST |
| bool "Fast IO pgtable selftests" |
| depends on IOMMU_IO_PGTABLE_FAST |
| help |
| Enable self-tests for "fast" page table allocator. This performs |
| a series of page-table consistency checks during boot. |
| |
| If unsure, say N here. |
| |
| config IOMMU_IO_PGTABLE_FAST_PROVE_TLB |
| bool "Prove correctness of TLB maintenance in the Fast DMA mapper" |
| depends on IOMMU_IO_PGTABLE_FAST |
| help |
| Enables some debug features that help prove correctness of TLB |
| maintenance routines in the Fast DMA mapper. This option will |
| slow things down considerably, so should only be used in a debug |
| configuration. This relies on the ability to set bits in an |
| invalid page table entry, which is disallowed on some hardware |
| due to errata. If you're running on such a platform then this |
| option can only be used with unit tests. It will break real use |
| cases. |
| |
| 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 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. |
| |
| 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 |
| select IOMMU_IOVA |
| 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_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 |
| select ARM64_DMA_USE_IOMMU if ARM64 |
| 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 |
| 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 QCOM_LAZY_MAPPING |
| bool "Reference counted iommu-mapping support" |
| depends on ION_MSM |
| depends on IOMMU_API |
| help |
| ION buffers may be shared between several software clients. |
| Reference counting the mapping may simplify coordination between |
| these clients, and decrease latency by preventing multiple |
| map/unmaps of the same region. |
| |
| If unsure, say N here. |
| |
| 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. |
| |
| 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 |
| select COMMON_CLK_MT2701_MMSYS |
| select COMMON_CLK_MT2701_IMGSYS |
| select COMMON_CLK_MT2701_VDECSYS |
| 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. |
| |
| menuconfig IOMMU_DEBUG |
| bool "IOMMU Profiling and Debugging" |
| help |
| Makes available some additional IOMMU profiling and debugging |
| options. |
| |
| if IOMMU_DEBUG |
| |
| config IOMMU_DEBUG_TRACKING |
| bool "Track key IOMMU events" |
| select IOMMU_API |
| help |
| Enables additional debug tracking in the IOMMU framework code. |
| Tracking information and tests can be accessed through various |
| debugfs files. |
| |
| Say Y here if you need to debug IOMMU issues and are okay with |
| the performance penalty of the tracking. |
| |
| config IOMMU_TESTS |
| bool "Interactive IOMMU performance/functional tests" |
| select IOMMU_API |
| help |
| Enables a suite of IOMMU unit tests. The tests are runnable |
| through debugfs. Unlike the IOMMU_DEBUG_TRACKING option, the |
| impact of enabling this option to overal system performance |
| should be minimal. |
| |
| endif # IOMMU_DEBUG |
| |
| endif # IOMMU_SUPPORT |