mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
iommu: Split out and tidy up Arm Kconfig
There are quite a lot of options for the Arm drivers, still all buried in the top-level Kconfig. For ease of use and consistency with all the other subdirectories, break these out into drivers/arm. For similar clarity and self-consistency, also tweak the ARM_SMMU sub-options to use "if" instead of "depends", to match ARM_SMMU_V3. Lastly also clean up the slightly messy description of ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT as highlighted by Geert - by now we really shouldn't need commentary on v4.x kernel behaviour anyway - and downgrade it to EXPERT as the first step in the 6-year-old threat to remove it entirely. Cc: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Reviewed-by: Pranjal Shrivastava <praan@google.com> Link: https://lore.kernel.org/r/a614ec86ba78c09cd16e348f633f6bb38793391f.1742480488.git.robin.murphy@arm.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
0c8e9c148e
commit
0da188c846
|
|
@ -192,6 +192,7 @@ config MSM_IOMMU
|
|||
If unsure, say N here.
|
||||
|
||||
source "drivers/iommu/amd/Kconfig"
|
||||
source "drivers/iommu/arm/Kconfig"
|
||||
source "drivers/iommu/intel/Kconfig"
|
||||
source "drivers/iommu/iommufd/Kconfig"
|
||||
source "drivers/iommu/riscv/Kconfig"
|
||||
|
|
@ -314,150 +315,6 @@ config APPLE_DART
|
|||
|
||||
Say Y here if you are using an Apple SoC.
|
||||
|
||||
# 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.
|
||||
|
||||
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_MMU_500_CPRE_ERRATA
|
||||
bool "Enable errata workaround for CPRE in SMMU reset path"
|
||||
depends on ARM_SMMU
|
||||
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 ARM_SMMU && 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.
|
||||
|
||||
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 S390_IOMMU
|
||||
def_bool y if S390 && PCI
|
||||
depends on S390 && PCI
|
||||
|
|
@ -494,18 +351,6 @@ config MTK_IOMMU_V1
|
|||
|
||||
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
|
||||
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.
|
||||
|
||||
config HYPERV_IOMMU
|
||||
bool "Hyper-V IRQ Handling"
|
||||
depends on HYPERV && X86
|
||||
|
|
|
|||
144
drivers/iommu/arm/Kconfig
Normal file
144
drivers/iommu/arm/Kconfig
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
# 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.
|
||||
Loading…
Reference in New Issue
Block a user