]> git.ipfire.org Git - thirdparty/kernel/stable.git/blame - Documentation/devicetree/bindings/iommu/arm,smmu.yaml
Merge tag 'kvm-x86-docs-6.7' of https://github.com/kvm-x86/linux into HEAD
[thirdparty/kernel/stable.git] / Documentation / devicetree / bindings / iommu / arm,smmu.yaml
CommitLineData
d27bd6b9
RH
1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/iommu/arm,smmu.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ARM System MMU Architecture Implementation
8
9maintainers:
10 - Will Deacon <will@kernel.org>
11 - Robin Murphy <Robin.Murphy@arm.com>
12
13description: |+
14 ARM SoCs may contain an implementation of the ARM System Memory
15 Management Unit Architecture, which can be used to provide 1 or 2 stages
16 of address translation to bus masters external to the CPU.
17
18 The SMMU may also raise interrupts in response to various fault
19 conditions.
20
21properties:
22 $nodename:
23 pattern: "^iommu@[0-9a-f]*"
24 compatible:
25 oneOf:
26 - description: Qcom SoCs implementing "arm,smmu-v2"
27 items:
28 - enum:
29 - qcom,msm8996-smmu-v2
30 - qcom,msm8998-smmu-v2
dbf88f74 31 - qcom,sdm630-smmu-v2
44984d56 32 - qcom,sm6375-smmu-v2
d27bd6b9
RH
33 - const: qcom,smmu-v2
34
6c84bbd1 35 - description: Qcom SoCs implementing "qcom,smmu-500" and "arm,mmu-500"
d27bd6b9
RH
36 items:
37 - enum:
f1edce3d 38 - qcom,qcm2290-smmu-500
6313f4b5 39 - qcom,qdu1000-smmu-500
0802999c 40 - qcom,sa8775p-smmu-500
f0d83c66 41 - qcom,sc7180-smmu-500
a9aa2bb1 42 - qcom,sc7280-smmu-500
9cde12ba 43 - qcom,sc8180x-smmu-500
38db6b41 44 - qcom,sc8280xp-smmu-500
8d3a9ec6 45 - qcom,sdm670-smmu-500
d27bd6b9 46 - qcom,sdm845-smmu-500
eb9181a3
MS
47 - qcom,sdx55-smmu-500
48 - qcom,sdx65-smmu-500
48989c0b 49 - qcom,sdx75-smmu-500
6c84bbd1 50 - qcom,sm6115-smmu-500
822765f4 51 - qcom,sm6125-smmu-500
6c84bbd1
DB
52 - qcom,sm6350-smmu-500
53 - qcom,sm6375-smmu-500
54 - qcom,sm8150-smmu-500
55 - qcom,sm8250-smmu-500
56 - qcom,sm8350-smmu-500
57 - qcom,sm8450-smmu-500
7f061c19 58 - qcom,sm8550-smmu-500
6c84bbd1
DB
59 - const: qcom,smmu-500
60 - const: arm,mmu-500
61
6c84bbd1
DB
62 - description: Qcom SoCs implementing "arm,mmu-500" (legacy binding)
63 deprecated: true
64 items:
65 # Do not add additional SoC to this list. Instead use two previous lists.
66 - enum:
67 - qcom,qcm2290-smmu-500
68 - qcom,sc7180-smmu-500
69 - qcom,sc7280-smmu-500
70 - qcom,sc8180x-smmu-500
71 - qcom,sc8280xp-smmu-500
72 - qcom,sdm845-smmu-500
728b22a5 73 - qcom,sm6115-smmu-500
e4a40f15 74 - qcom,sm6350-smmu-500
743302d4 75 - qcom,sm6375-smmu-500
7b6b70d8
JM
76 - qcom,sm8150-smmu-500
77 - qcom,sm8250-smmu-500
70b5b6a6 78 - qcom,sm8350-smmu-500
810d8cab 79 - qcom,sm8450-smmu-500
d27bd6b9 80 - const: arm,mmu-500
5c368661
KD
81 - description: Qcom Adreno GPUs implementing "qcom,smmu-500" and "arm,mmu-500"
82 items:
83 - enum:
387a80a7 84 - qcom,sa8775p-smmu-500
5c368661 85 - qcom,sc7280-smmu-500
84b8a7fe 86 - qcom,sc8280xp-smmu-500
3ad65855
KD
87 - qcom,sm6115-smmu-500
88 - qcom,sm6125-smmu-500
5c368661
KD
89 - qcom,sm8150-smmu-500
90 - qcom,sm8250-smmu-500
16d16468 91 - qcom,sm8350-smmu-500
5c368661
KD
92 - const: qcom,adreno-smmu
93 - const: qcom,smmu-500
94 - const: arm,mmu-500
95 - description: Qcom Adreno GPUs implementing "arm,mmu-500" (legacy binding)
96 deprecated: true
dbf88f74 97 items:
5c368661 98 # Do not add additional SoC to this list. Instead use previous list.
dbf88f74
DB
99 - enum:
100 - qcom,sc7280-smmu-500
11321f77 101 - qcom,sm8150-smmu-500
dbf88f74
DB
102 - qcom,sm8250-smmu-500
103 - const: qcom,adreno-smmu
104 - const: arm,mmu-500
a29bbb08
JC
105 - description: Qcom Adreno GPUs implementing "arm,smmu-v2"
106 items:
107 - enum:
dbf88f74 108 - qcom,msm8996-smmu-v2
a29bbb08 109 - qcom,sc7180-smmu-v2
dbf88f74 110 - qcom,sdm630-smmu-v2
a29bbb08 111 - qcom,sdm845-smmu-v2
5a47cb4d 112 - qcom,sm6350-smmu-v2
a29bbb08
JC
113 - const: qcom,adreno-smmu
114 - const: qcom,smmu-v2
3a12e8c0
DB
115 - description: Qcom Adreno GPUs on Google Cheza platform
116 items:
117 - const: qcom,sdm845-smmu-v2
118 - const: qcom,smmu-v2
e85e84d1
TN
119 - description: Marvell SoCs implementing "arm,mmu-500"
120 items:
121 - const: marvell,ap806-smmu-500
122 - const: arm,mmu-500
4287861d
TR
123 - description: NVIDIA SoCs that require memory controller interaction
124 and may program multiple ARM MMU-500s identically with the memory
125 controller interleaving translations between multiple instances
126 for improved performance.
127 items:
3d2deb0c 128 - enum:
bf3ec9de 129 - nvidia,tegra186-smmu
95d5aeab
TR
130 - nvidia,tegra194-smmu
131 - nvidia,tegra234-smmu
3d2deb0c 132 - const: nvidia,smmu-500
d27bd6b9
RH
133 - items:
134 - const: arm,mmu-500
135 - const: arm,smmu-v2
136 - items:
bd0d6960
AP
137 - enum:
138 - arm,mmu-400
139 - arm,mmu-401
d27bd6b9
RH
140 - const: arm,smmu-v1
141 - enum:
142 - arm,smmu-v1
143 - arm,smmu-v2
144 - arm,mmu-400
145 - arm,mmu-401
146 - arm,mmu-500
147 - cavium,smmu-v2
148
149 reg:
3d2deb0c
KR
150 minItems: 1
151 maxItems: 2
d27bd6b9
RH
152
153 '#global-interrupts':
154 description: The number of global interrupts exposed by the device.
3d21a460 155 $ref: /schemas/types.yaml#/definitions/uint32
d27bd6b9
RH
156 minimum: 0
157 maximum: 260 # 2 secure, 2 non-secure, and up to 256 perf counters
158
159 '#iommu-cells':
160 enum: [ 1, 2 ]
161 description: |
162 See Documentation/devicetree/bindings/iommu/iommu.txt for details. With a
163 value of 1, each IOMMU specifier represents a distinct stream ID emitted
164 by that device into the relevant SMMU.
165
166 SMMUs with stream matching support and complex masters may use a value of
167 2, where the second cell of the IOMMU specifier represents an SMR mask to
168 combine with the ID in the first cell. Care must be taken to ensure the
169 set of matched IDs does not result in conflicts.
170
171 interrupts:
172 minItems: 1
173 maxItems: 388 # 260 plus 128 contexts
174 description: |
175 Interrupt list, with the first #global-interrupts entries corresponding to
176 the global interrupts and any following entries corresponding to context
177 interrupts, specified in order of their indexing by the SMMU.
178
179 For SMMUv2 implementations, there must be exactly one interrupt per
180 context bank. In the case of a single, combined interrupt, it must be
181 listed multiple times.
182
183 dma-coherent:
184 description: |
185 Present if page table walks made by the SMMU are cache coherent with the
186 CPU.
187
188 NOTE: this only applies to the SMMU itself, not masters connected
189 upstream of the SMMU.
190
191 calxeda,smmu-secure-config-access:
192 type: boolean
193 description:
194 Enable proper handling of buggy implementations that always use secure
195 access to SMMU configuration registers. In this case non-secure aliases of
196 secure registers have to be used during SMMU configuration.
197
198 stream-match-mask:
199 $ref: /schemas/types.yaml#/definitions/uint32
200 description: |
201 For SMMUs supporting stream matching and using #iommu-cells = <1>,
202 specifies a mask of bits to ignore when matching stream IDs (e.g. this may
203 be programmed into the SMRn.MASK field of every stream match register
204 used). For cases where it is desirable to ignore some portion of every
205 Stream ID (e.g. for certain MMU-500 configurations given globally unique
206 input IDs). This property is not valid for SMMUs using stream indexing, or
207 using stream matching with #iommu-cells = <2>, and may be ignored if
208 present in such cases.
209
210 clock-names:
982295bf
DB
211 minItems: 1
212 maxItems: 7
d27bd6b9
RH
213
214 clocks:
982295bf
DB
215 minItems: 1
216 maxItems: 7
d27bd6b9
RH
217
218 power-domains:
6bc6af37
KD
219 minItems: 1
220 maxItems: 3
d27bd6b9 221
c02bda09
TR
222 nvidia,memory-controller:
223 description: |
224 A phandle to the memory controller on NVIDIA Tegra186 and later SoCs.
225 The memory controller needs to be programmed with a mapping of memory
226 client IDs to ARM SMMU stream IDs.
227
228 If this property is absent, the mapping programmed by early firmware
229 will be used and it is not guaranteed that IOMMU translations will be
230 enabled for any given device.
231 $ref: /schemas/types.yaml#/definitions/phandle
232
d27bd6b9
RH
233required:
234 - compatible
235 - reg
236 - '#global-interrupts'
237 - '#iommu-cells'
238 - interrupts
239
240additionalProperties: false
241
3d2deb0c
KR
242allOf:
243 - if:
244 properties:
245 compatible:
246 contains:
247 enum:
4287861d 248 - nvidia,tegra186-smmu
95d5aeab
TR
249 - nvidia,tegra194-smmu
250 - nvidia,tegra234-smmu
3d2deb0c
KR
251 then:
252 properties:
253 reg:
4287861d 254 minItems: 1
3d2deb0c 255 maxItems: 2
c02bda09
TR
256
257 # The reference to the memory controller is required to ensure that the
258 # memory client to stream ID mapping can be done synchronously with the
259 # IOMMU attachment.
260 required:
261 - nvidia,memory-controller
3d2deb0c
KR
262 else:
263 properties:
264 reg:
265 maxItems: 1
266
982295bf
DB
267 - if:
268 properties:
269 compatible:
270 contains:
271 enum:
272 - qcom,msm8998-smmu-v2
938ba2f2 273 - qcom,sdm630-smmu-v2
b606e2e8
KD
274 then:
275 anyOf:
276 - properties:
277 clock-names:
278 items:
279 - const: bus
280 clocks:
281 items:
282 - description: bus clock required for downstream bus access and for
283 the smmu ptw
284 - properties:
285 clock-names:
286 items:
287 - const: iface
288 - const: mem
289 - const: mem_iface
290 clocks:
291 items:
292 - description: interface clock required to access smmu's registers
293 through the TCU's programming interface.
294 - description: bus clock required for memory access
295 - description: bus clock required for GPU memory access
296 - properties:
297 clock-names:
298 items:
299 - const: iface-mm
300 - const: iface-smmu
301 - const: bus-smmu
302 clocks:
303 items:
304 - description: interface clock required to access mnoc's registers
305 through the TCU's programming interface.
306 - description: interface clock required to access smmu's registers
307 through the TCU's programming interface.
308 - description: bus clock required for the smmu ptw
309
310 - if:
311 properties:
312 compatible:
313 contains:
314 enum:
44984d56 315 - qcom,sm6375-smmu-v2
982295bf
DB
316 then:
317 anyOf:
318 - properties:
319 clock-names:
320 items:
321 - const: bus
322 clocks:
323 items:
324 - description: bus clock required for downstream bus access and for
325 the smmu ptw
326 - properties:
327 clock-names:
328 items:
329 - const: iface
330 - const: mem
331 - const: mem_iface
332 clocks:
333 items:
334 - description: interface clock required to access smmu's registers
335 through the TCU's programming interface.
336 - description: bus clock required for memory access
337 - description: bus clock required for GPU memory access
338 - properties:
339 clock-names:
340 items:
341 - const: iface-mm
342 - const: iface-smmu
343 - const: bus-mm
344 - const: bus-smmu
345 clocks:
346 items:
347 - description: interface clock required to access mnoc's registers
348 through the TCU's programming interface.
349 - description: interface clock required to access smmu's registers
350 through the TCU's programming interface.
351 - description: bus clock required for downstream bus access
352 - description: bus clock required for the smmu ptw
353
354 - if:
355 properties:
356 compatible:
357 contains:
358 enum:
359 - qcom,msm8996-smmu-v2
360 - qcom,sc7180-smmu-v2
361 - qcom,sdm845-smmu-v2
362 then:
363 properties:
364 clock-names:
365 items:
366 - const: bus
367 - const: iface
368
369 clocks:
370 items:
371 - description: bus clock required for downstream bus access and for
372 the smmu ptw
373 - description: interface clock required to access smmu's registers
374 through the TCU's programming interface.
375
376 - if:
377 properties:
378 compatible:
379 contains:
84b8a7fe 380 enum:
387a80a7 381 - qcom,sa8775p-smmu-500
84b8a7fe
BA
382 - qcom,sc7280-smmu-500
383 - qcom,sc8280xp-smmu-500
982295bf
DB
384 then:
385 properties:
386 clock-names:
387 items:
388 - const: gcc_gpu_memnoc_gfx_clk
389 - const: gcc_gpu_snoc_dvm_gfx_clk
390 - const: gpu_cc_ahb_clk
391 - const: gpu_cc_hlos1_vote_gpu_smmu_clk
392 - const: gpu_cc_cx_gmu_clk
393 - const: gpu_cc_hub_cx_int_clk
394 - const: gpu_cc_hub_aon_clk
395
396 clocks:
397 items:
398 - description: GPU memnoc_gfx clock
399 - description: GPU snoc_dvm_gfx clock
400 - description: GPU ahb clock
401 - description: GPU hlos1_vote_GPU smmu clock
402 - description: GPU cx_gmu clock
403 - description: GPU hub_cx_int clock
404 - description: GPU hub_aon clock
405
406 - if:
407 properties:
408 compatible:
409 contains:
410 enum:
5a47cb4d 411 - qcom,sm6350-smmu-v2
982295bf
DB
412 - qcom,sm8150-smmu-500
413 - qcom,sm8250-smmu-500
414 then:
415 properties:
416 clock-names:
417 items:
418 - const: ahb
419 - const: bus
420 - const: iface
421
422 clocks:
423 items:
424 - description: bus clock required for AHB bus access
425 - description: bus clock required for downstream bus access and for
426 the smmu ptw
427 - description: interface clock required to access smmu's registers
428 through the TCU's programming interface.
429
3ad65855
KD
430 - if:
431 properties:
432 compatible:
433 items:
434 - enum:
435 - qcom,sm6115-smmu-500
436 - qcom,sm6125-smmu-500
437 - const: qcom,adreno-smmu
438 - const: qcom,smmu-500
439 - const: arm,mmu-500
440 then:
441 properties:
442 clock-names:
443 items:
444 - const: mem
445 - const: hlos
446 - const: iface
447
448 clocks:
449 items:
450 - description: GPU memory bus clock
451 - description: Voter clock required for HLOS SMMU access
452 - description: Interface clock required for register access
453
d565d60d
KK
454 # Disallow clocks for all other platforms with specific compatibles
455 - if:
456 properties:
457 compatible:
458 contains:
459 enum:
460 - cavium,smmu-v2
461 - marvell,ap806-smmu-500
462 - nvidia,smmu-500
463 - qcom,qcm2290-smmu-500
464 - qcom,qdu1000-smmu-500
465 - qcom,sc7180-smmu-500
466 - qcom,sc8180x-smmu-500
d565d60d
KK
467 - qcom,sdm670-smmu-500
468 - qcom,sdm845-smmu-500
469 - qcom,sdx55-smmu-500
470 - qcom,sdx65-smmu-500
d565d60d
KK
471 - qcom,sm6350-smmu-500
472 - qcom,sm6375-smmu-500
473 - qcom,sm8350-smmu-500
474 - qcom,sm8450-smmu-500
7f061c19 475 - qcom,sm8550-smmu-500
d565d60d
KK
476 then:
477 properties:
478 clock-names: false
479 clocks: false
480
6bc6af37
KD
481 - if:
482 properties:
483 compatible:
484 contains:
485 const: qcom,sm6375-smmu-500
486 then:
487 properties:
488 power-domains:
489 items:
490 - description: SNoC MMU TBU RT GDSC
491 - description: SNoC MMU TBU NRT GDSC
492 - description: SNoC TURING MMU TBU0 GDSC
493
494 required:
495 - power-domains
496 else:
497 properties:
498 power-domains:
499 maxItems: 1
500
d27bd6b9
RH
501examples:
502 - |+
503 /* SMMU with stream matching or stream indexing */
504 smmu1: iommu@ba5e0000 {
505 compatible = "arm,smmu-v1";
506 reg = <0xba5e0000 0x10000>;
507 #global-interrupts = <2>;
508 interrupts = <0 32 4>,
509 <0 33 4>,
510 <0 34 4>, /* This is the first context interrupt */
511 <0 35 4>,
512 <0 36 4>,
513 <0 37 4>;
514 #iommu-cells = <1>;
515 };
516
517 /* device with two stream IDs, 0 and 7 */
518 master1 {
519 iommus = <&smmu1 0>,
520 <&smmu1 7>;
521 };
522
523
524 /* SMMU with stream matching */
525 smmu2: iommu@ba5f0000 {
526 compatible = "arm,smmu-v1";
527 reg = <0xba5f0000 0x10000>;
528 #global-interrupts = <2>;
529 interrupts = <0 38 4>,
530 <0 39 4>,
531 <0 40 4>, /* This is the first context interrupt */
532 <0 41 4>,
533 <0 42 4>,
534 <0 43 4>;
535 #iommu-cells = <2>;
536 };
537
538 /* device with stream IDs 0 and 7 */
539 master2 {
540 iommus = <&smmu2 0 0>,
541 <&smmu2 7 0>;
542 };
543
544 /* device with stream IDs 1, 17, 33 and 49 */
545 master3 {
546 iommus = <&smmu2 1 0x30>;
547 };
548
549
550 /* ARM MMU-500 with 10-bit stream ID input configuration */
551 smmu3: iommu@ba600000 {
552 compatible = "arm,mmu-500", "arm,smmu-v2";
553 reg = <0xba600000 0x10000>;
554 #global-interrupts = <2>;
555 interrupts = <0 44 4>,
556 <0 45 4>,
557 <0 46 4>, /* This is the first context interrupt */
558 <0 47 4>,
559 <0 48 4>,
560 <0 49 4>;
561 #iommu-cells = <1>;
562 /* always ignore appended 5-bit TBU number */
563 stream-match-mask = <0x7c00>;
564 };
565
566 bus {
567 /* bus whose child devices emit one unique 10-bit stream
568 ID each, but may master through multiple SMMU TBUs */
569 iommu-map = <0 &smmu3 0 0x400>;
570
571
572 };
573
574 - |+
575 /* Qcom's arm,smmu-v2 implementation */
576 #include <dt-bindings/interrupt-controller/arm-gic.h>
577 #include <dt-bindings/interrupt-controller/irq.h>
578 smmu4: iommu@d00000 {
579 compatible = "qcom,msm8996-smmu-v2", "qcom,smmu-v2";
580 reg = <0xd00000 0x10000>;
581
582 #global-interrupts = <1>;
583 interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
584 <GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH>,
585 <GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH>;
586 #iommu-cells = <1>;
587 power-domains = <&mmcc 0>;
588
589 clocks = <&mmcc 123>,
590 <&mmcc 124>;
591 clock-names = "bus", "iface";
592 };