Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1# SPDX-License-Identifier: GPL-2.0-only
2# ARM IOMMU support
3config ARM_SMMU
4 tristate "ARM Ltd. System MMU (SMMU) Support"
5 depends on ARM64 || ARM || COMPILE_TEST
6 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
7 select IOMMU_API
8 select IOMMU_IO_PGTABLE_LPAE
9 select ARM_DMA_USE_IOMMU if ARM
10 help
11 Support for implementations of the ARM System MMU architecture
12 versions 1 and 2.
13
14 Say Y here if your SoC includes an IOMMU device implementing
15 the ARM SMMU architecture.
16
17if ARM_SMMU
18config ARM_SMMU_LEGACY_DT_BINDINGS
19 bool "Support the legacy \"mmu-masters\" devicetree bindings"
20 depends on ARM_SMMU=y && OF
21 help
22 Support for the badly designed and deprecated "mmu-masters"
23 devicetree bindings. This allows some DMA masters to attach
24 to the SMMU but does not provide any support via the DMA API.
25 If you're lucky, you might be able to get VFIO up and running.
26
27 If you say Y here then you'll make me very sad. Instead, say N
28 and move your firmware to the utopian future that was 2016.
29
30config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
31 bool "Disable unmatched stream bypass by default" if EXPERT
32 default y
33 help
34 If your firmware is broken and fails to describe StreamIDs which
35 Linux should know about in order to manage the SMMU correctly and
36 securely, and you don't want to boot with the 'arm-smmu.disable_bypass=0'
37 command line parameter, then as a last resort you can turn it off
38 by default here. But don't. This option may be removed at any time.
39
40 Note that 'arm-smmu.disable_bypass=1' will still take precedence.
41
42config ARM_SMMU_MMU_500_CPRE_ERRATA
43 bool "Enable errata workaround for CPRE in SMMU reset path"
44 default y
45 help
46 Say Y here (by default) to apply workaround to disable
47 MMU-500's next-page prefetcher for sake of 4 known errata.
48
49 Say N here only when it is sure that any errata related to
50 prefetch enablement are not applicable on the platform.
51 Refer silicon-errata.rst for info on errata IDs.
52
53config ARM_SMMU_QCOM
54 def_tristate y
55 depends on ARCH_QCOM
56 select QCOM_SCM
57 help
58 When running on a Qualcomm platform that has the custom variant
59 of the ARM SMMU, this needs to be built into the SMMU driver.
60
61config ARM_SMMU_QCOM_DEBUG
62 bool "ARM SMMU QCOM implementation defined debug support"
63 depends on ARM_SMMU_QCOM=y
64 help
65 Support for implementation specific debug features in ARM SMMU
66 hardware found in QTI platforms. This include support for
67 the Translation Buffer Units (TBU) that can be used to obtain
68 additional information when debugging memory management issues
69 like context faults.
70
71 Say Y here to enable debug for issues such as context faults
72 or TLB sync timeouts which requires implementation defined
73 register dumps.
74endif
75
76config ARM_SMMU_V3
77 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
78 depends on ARM64
79 select IOMMU_API
80 select IOMMU_IO_PGTABLE_LPAE
81 select GENERIC_MSI_IRQ
82 select IOMMUFD_DRIVER if IOMMUFD
83 help
84 Support for implementations of the ARM System MMU architecture
85 version 3 providing translation support to a PCIe root complex.
86
87 Say Y here if your system includes an IOMMU device implementing
88 the ARM SMMUv3 architecture.
89
90if ARM_SMMU_V3
91config ARM_SMMU_V3_SVA
92 bool "Shared Virtual Addressing support for the ARM SMMUv3"
93 select IOMMU_SVA
94 select IOMMU_IOPF
95 select MMU_NOTIFIER
96 help
97 Support for sharing process address spaces with devices using the
98 SMMUv3.
99
100 Say Y here if your system supports SVA extensions such as PCIe PASID
101 and PRI.
102
103config ARM_SMMU_V3_IOMMUFD
104 bool "Enable IOMMUFD features for ARM SMMUv3 (EXPERIMENTAL)"
105 depends on IOMMUFD
106 help
107 Support for IOMMUFD features intended to support virtual machines
108 with accelerated virtual IOMMUs.
109
110 Say Y here if you are doing development and testing on this feature.
111
112config ARM_SMMU_V3_KUNIT_TEST
113 tristate "KUnit tests for arm-smmu-v3 driver" if !KUNIT_ALL_TESTS
114 depends on KUNIT
115 depends on ARM_SMMU_V3_SVA
116 default KUNIT_ALL_TESTS
117 help
118 Enable this option to unit-test arm-smmu-v3 driver functions.
119
120 If unsure, say N.
121
122config TEGRA241_CMDQV
123 bool "NVIDIA Tegra241 CMDQ-V extension support for ARM SMMUv3"
124 help
125 Support for NVIDIA CMDQ-Virtualization extension for ARM SMMUv3. The
126 CMDQ-V extension is similar to v3.3 ECMDQ for multi command queues
127 support, except with virtualization capabilities.
128
129 Say Y here if your system is NVIDIA Tegra241 (Grace) or it has the same
130 CMDQ-V extension.
131endif
132
133config QCOM_IOMMU
134 # Note: iommu drivers cannot (yet?) be built as modules
135 bool "Qualcomm IOMMU Support"
136 depends on ARCH_QCOM || COMPILE_TEST
137 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
138 select QCOM_SCM
139 select IOMMU_API
140 select IOMMU_IO_PGTABLE_LPAE
141 select ARM_DMA_USE_IOMMU
142 help
143 Support for IOMMU on certain Qualcomm SoCs.