| # SPDX-License-Identifier: GPL-2.0-only |
| # ARM IOMMU support |
| config ARM_SMMU |
| tristate "ARM Ltd. System MMU (SMMU) Support" |
| depends on ARM64 || ARM || COMPILE_TEST |
| depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE |
| 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. |
| |
| if ARM_SMMU |
| 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 "Disable unmatched stream bypass by default" if EXPERT |
| default y |
| help |
| If your firmware is broken and fails to describe StreamIDs which |
| Linux should know about in order to manage the SMMU correctly and |
| securely, and you don't want to boot with the 'arm-smmu.disable_bypass=0' |
| command line parameter, then as a last resort you can turn it off |
| by default here. But don't. This option may be removed at any time. |
| |
| Note that 'arm-smmu.disable_bypass=1' will still take precedence. |
| |
| config ARM_SMMU_MMU_500_CPRE_ERRATA |
| bool "Enable errata workaround for CPRE in SMMU reset path" |
| default y |
| help |
| Say Y here (by default) to apply workaround to disable |
| MMU-500's next-page prefetcher for sake of 4 known errata. |
| |
| Say N here only when it is sure that any errata related to |
| prefetch enablement are not applicable on the platform. |
| Refer silicon-errata.rst for info on errata IDs. |
| |
| config ARM_SMMU_QCOM |
| def_tristate y |
| depends on ARCH_QCOM |
| select QCOM_SCM |
| help |
| When running on a Qualcomm platform that has the custom variant |
| of the ARM SMMU, this needs to be built into the SMMU driver. |
| |
| config ARM_SMMU_QCOM_DEBUG |
| bool "ARM SMMU QCOM implementation defined debug support" |
| depends on ARM_SMMU_QCOM=y |
| help |
| Support for implementation specific debug features in ARM SMMU |
| hardware found in QTI platforms. This include support for |
| the Translation Buffer Units (TBU) that can be used to obtain |
| additional information when debugging memory management issues |
| like context faults. |
| |
| Say Y here to enable debug for issues such as context faults |
| or TLB sync timeouts which requires implementation defined |
| register dumps. |
| endif |
| |
| 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 |
| select IOMMUFD_DRIVER if IOMMUFD |
| 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. |
| |
| if ARM_SMMU_V3 |
| config ARM_SMMU_V3_SVA |
| bool "Shared Virtual Addressing support for the ARM SMMUv3" |
| select IOMMU_SVA |
| select IOMMU_IOPF |
| select MMU_NOTIFIER |
| 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 ARM_SMMU_V3_IOMMUFD |
| bool "Enable IOMMUFD features for ARM SMMUv3 (EXPERIMENTAL)" |
| depends on IOMMUFD |
| help |
| Support for IOMMUFD features intended to support virtual machines |
| with accelerated virtual IOMMUs. |
| |
| Say Y here if you are doing development and testing on this feature. |
| |
| config ARM_SMMU_V3_KUNIT_TEST |
| tristate "KUnit tests for arm-smmu-v3 driver" if !KUNIT_ALL_TESTS |
| depends on KUNIT |
| depends on ARM_SMMU_V3_SVA |
| default KUNIT_ALL_TESTS |
| help |
| Enable this option to unit-test arm-smmu-v3 driver functions. |
| |
| If unsure, say N. |
| |
| config TEGRA241_CMDQV |
| bool "NVIDIA Tegra241 CMDQ-V extension support for ARM SMMUv3" |
| depends on ACPI |
| help |
| Support for NVIDIA CMDQ-Virtualization extension for ARM SMMUv3. The |
| CMDQ-V extension is similar to v3.3 ECMDQ for multi command queues |
| support, except with virtualization capabilities. |
| |
| Say Y here if your system is NVIDIA Tegra241 (Grace) or it has the same |
| CMDQ-V extension. |
| endif |
| |
| config QCOM_IOMMU |
| # Note: iommu drivers cannot (yet?) be built as modules |
| bool "Qualcomm IOMMU Support" |
| depends on ARCH_QCOM || COMPILE_TEST |
| depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE |
| select QCOM_SCM |
| select IOMMU_API |
| select IOMMU_IO_PGTABLE_LPAE |
| select ARM_DMA_USE_IOMMU |
| help |
| Support for IOMMU on certain Qualcomm SoCs. |