blob: 3563378a01af47fe3593ff8183230bc6c9186f3a [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/tegra/nvidia,tegra20-host1x.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra host1x controller
8
9maintainers:
10 - Thierry Reding <thierry.reding@gmail.com>
11 - Jon Hunter <jonathanh@nvidia.com>
12
13description: The host1x top-level node defines a number of children, each
14 representing one of the host1x client modules defined in this binding.
15
16properties:
17 compatible:
18 oneOf:
19 - enum:
20 - nvidia,tegra20-host1x
21 - nvidia,tegra30-host1x
22 - nvidia,tegra114-host1x
23 - nvidia,tegra124-host1x
24 - nvidia,tegra210-host1x
25 - nvidia,tegra186-host1x
26 - nvidia,tegra194-host1x
27 - nvidia,tegra234-host1x
28
29 - items:
30 - const: nvidia,tegra132-host1x
31 - const: nvidia,tegra124-host1x
32
33 reg:
34 minItems: 1
35 maxItems: 3
36
37 reg-names:
38 minItems: 1
39 maxItems: 3
40
41 interrupts:
42 minItems: 1
43 maxItems: 9
44
45 interrupt-names:
46 minItems: 1
47 maxItems: 9
48
49 '#address-cells':
50 description: The number of cells used to represent physical base addresses
51 in the host1x address space.
52 enum: [1, 2]
53
54 '#size-cells':
55 description: The number of cells used to represent the size of an address
56 range in the host1x address space.
57 enum: [1, 2]
58
59 ranges:
60 maxItems: 1
61
62 clocks:
63 description: Must contain one entry, for the module clock. See
64 ../clocks/clock-bindings.txt for details.
65
66 clock-names:
67 items:
68 - const: host1x
69
70 resets:
71 minItems: 1 # MC reset is optional on Tegra186 and later
72 items:
73 - description: module reset
74 - description: memory client hotflush reset
75
76 reset-names:
77 minItems: 1 # MC reset is optional on Tegra186 and later
78 items:
79 - const: host1x
80 - const: mc
81
82 iommus:
83 maxItems: 1
84
85 interconnects:
86 items:
87 - description: memory read client for host1x
88
89 interconnect-names:
90 items:
91 - const: dma-mem # read
92
93 operating-points-v2: true
94
95 power-domains:
96 items:
97 - description: phandle to the HEG or core power domain
98
99required:
100 - compatible
101 - interrupts
102 - interrupt-names
103 - '#address-cells'
104 - '#size-cells'
105 - ranges
106 - reg
107 - clocks
108 - clock-names
109
110unevaluatedProperties:
111 type: object
112
113allOf:
114 - if:
115 properties:
116 compatible:
117 contains:
118 enum:
119 - nvidia,tegra20-host1x
120 - nvidia,tegra30-host1x
121 - nvidia,tegra114-host1x
122 - nvidia,tegra124-host1x
123 - nvidia,tegra210-host1x
124 then:
125 properties:
126 interrupts:
127 items:
128 - description: host1x syncpoint interrupt
129 - description: host1x general interrupt
130
131 interrupt-names:
132 items:
133 - const: syncpt
134 - const: host1x
135 required:
136 - resets
137 - reset-names
138 - if:
139 properties:
140 compatible:
141 contains:
142 enum:
143 - nvidia,tegra186-host1x
144 - nvidia,tegra194-host1x
145 then:
146 properties:
147 reg-names:
148 items:
149 - const: hypervisor
150 - const: vm
151
152 reg:
153 items:
154 - description: region used by the hypervisor
155 - description: region assigned to the virtual machine
156
157 resets:
158 maxItems: 1
159
160 reset-names:
161 maxItems: 1
162
163 interrupts:
164 items:
165 - description: host1x syncpoint interrupt
166 - description: host1x general interrupt
167
168 interrupt-names:
169 items:
170 - const: syncpt
171 - const: host1x
172
173 iommu-map:
174 description: Specification of stream IDs available for memory context device
175 use. Should be a mapping of IDs 0..n to IOMMU entries corresponding to
176 usable stream IDs.
177
178 required:
179 - reg-names
180 - if:
181 properties:
182 compatible:
183 contains:
184 enum:
Tom Rini762f85b2024-07-20 11:15:10 -0600185 - nvidia,tegra194-host1x
186 then:
187 properties:
188 dma-coherent: true
189 - if:
190 properties:
191 compatible:
192 contains:
193 enum:
Tom Rini53633a82024-02-29 12:33:36 -0500194 - nvidia,tegra234-host1x
195 then:
196 properties:
197 reg-names:
198 items:
199 - const: common
200 - const: hypervisor
201 - const: vm
202
203 reg:
204 items:
205 - description: region used by host1x server
206 - description: region used by the hypervisor
207 - description: region assigned to the virtual machine
208
209 interrupts:
210 items:
211 - description: host1x syncpoint interrupt 0
212 - description: host1x syncpoint interrupt 1
213 - description: host1x syncpoint interrupt 2
214 - description: host1x syncpoint interrupt 3
215 - description: host1x syncpoint interrupt 4
216 - description: host1x syncpoint interrupt 5
217 - description: host1x syncpoint interrupt 6
218 - description: host1x syncpoint interrupt 7
219 - description: host1x general interrupt
220
221 interrupt-names:
222 items:
223 - const: syncpt0
224 - const: syncpt1
225 - const: syncpt2
226 - const: syncpt3
227 - const: syncpt4
228 - const: syncpt5
229 - const: syncpt6
230 - const: syncpt7
231 - const: host1x
232
233 iommu-map:
234 description: Specification of stream IDs available for memory context device
235 use. Should be a mapping of IDs 0..n to IOMMU entries corresponding to
236 usable stream IDs.
237
Tom Rini762f85b2024-07-20 11:15:10 -0600238 dma-coherent: true
239
Tom Rini53633a82024-02-29 12:33:36 -0500240 required:
241 - reg-names
242
243examples:
244 - |
245 #include <dt-bindings/clock/tegra20-car.h>
246 #include <dt-bindings/gpio/tegra-gpio.h>
247 #include <dt-bindings/memory/tegra20-mc.h>
248
249 host1x@50000000 {
250 compatible = "nvidia,tegra20-host1x";
251 reg = <0x50000000 0x00024000>;
252 interrupts = <0 65 0x04>, /* mpcore syncpt */
253 <0 67 0x04>; /* mpcore general */
254 interrupt-names = "syncpt", "host1x";
255 clocks = <&tegra_car TEGRA20_CLK_HOST1X>;
256 clock-names = "host1x";
257 resets = <&tegra_car 28>, <&mc TEGRA20_MC_RESET_HC>;
258 reset-names = "host1x", "mc";
259
260 #address-cells = <1>;
261 #size-cells = <1>;
262
263 ranges = <0x54000000 0x54000000 0x04000000>;
264
265 mpe@54040000 {
266 compatible = "nvidia,tegra20-mpe";
267 reg = <0x54040000 0x00040000>;
268 interrupts = <0 68 0x04>;
269 clocks = <&tegra_car TEGRA20_CLK_MPE>;
270 resets = <&tegra_car 60>;
271 reset-names = "mpe";
272 };
273
274 vi@54080000 {
275 compatible = "nvidia,tegra20-vi";
276 reg = <0x54080000 0x00040000>;
277 interrupts = <0 69 0x04>;
278 clocks = <&tegra_car TEGRA20_CLK_VI>;
279 resets = <&tegra_car 100>;
280 reset-names = "vi";
281 };
282
283 epp@540c0000 {
284 compatible = "nvidia,tegra20-epp";
285 reg = <0x540c0000 0x00040000>;
286 interrupts = <0 70 0x04>;
287 clocks = <&tegra_car TEGRA20_CLK_EPP>;
288 resets = <&tegra_car 19>;
289 reset-names = "epp";
290 };
291
292 isp@54100000 {
293 compatible = "nvidia,tegra20-isp";
294 reg = <0x54100000 0x00040000>;
295 interrupts = <0 71 0x04>;
296 clocks = <&tegra_car TEGRA20_CLK_ISP>;
297 resets = <&tegra_car 23>;
298 reset-names = "isp";
299 };
300
301 gr2d@54140000 {
302 compatible = "nvidia,tegra20-gr2d";
303 reg = <0x54140000 0x00040000>;
304 interrupts = <0 72 0x04>;
305 clocks = <&tegra_car TEGRA20_CLK_GR2D>;
306 resets = <&tegra_car 21>, <&mc TEGRA20_MC_RESET_2D>;
307 reset-names = "2d", "mc";
308 };
309
310 gr3d@54180000 {
311 compatible = "nvidia,tegra20-gr3d";
312 reg = <0x54180000 0x00040000>;
313 clocks = <&tegra_car TEGRA20_CLK_GR3D>;
314 resets = <&tegra_car 24>, <&mc TEGRA20_MC_RESET_3D>;
315 reset-names = "3d", "mc";
316 };
317
318 dc@54200000 {
319 compatible = "nvidia,tegra20-dc";
320 reg = <0x54200000 0x00040000>;
321 interrupts = <0 73 0x04>;
322 clocks = <&tegra_car TEGRA20_CLK_DISP1>;
323 clock-names = "dc";
324 resets = <&tegra_car 27>;
325 reset-names = "dc";
326
327 rgb {
328 };
329 };
330
331 dc@54240000 {
332 compatible = "nvidia,tegra20-dc";
333 reg = <0x54240000 0x00040000>;
334 interrupts = <0 74 0x04>;
335 clocks = <&tegra_car TEGRA20_CLK_DISP2>;
336 clock-names = "dc";
337 resets = <&tegra_car 26>;
338 reset-names = "dc";
339
340 rgb {
341 };
342 };
343
344 hdmi@54280000 {
345 compatible = "nvidia,tegra20-hdmi";
346 reg = <0x54280000 0x00040000>;
347 interrupts = <0 75 0x04>;
348 clocks = <&tegra_car TEGRA20_CLK_HDMI>,
349 <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
350 clock-names = "hdmi", "parent";
351 resets = <&tegra_car 51>;
352 reset-names = "hdmi";
353
354 hdmi-supply = <&vdd_5v0_hdmi>;
355 pll-supply = <&vdd_hdmi_pll>;
356 vdd-supply = <&vdd_3v3_hdmi>;
357
358 nvidia,ddc-i2c-bus = <&hdmi_ddc>;
359 nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>;
360 };
361
362 tvo@542c0000 {
363 compatible = "nvidia,tegra20-tvo";
364 reg = <0x542c0000 0x00040000>;
365 interrupts = <0 76 0x04>;
366 clocks = <&tegra_car TEGRA20_CLK_TVO>;
367 };
368
369 dsi@54300000 {
370 compatible = "nvidia,tegra20-dsi";
371 reg = <0x54300000 0x00040000>;
372 clocks = <&tegra_car TEGRA20_CLK_DSI>,
373 <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
374 clock-names = "dsi", "parent";
375 resets = <&tegra_car 48>;
376 reset-names = "dsi";
377 };
378 };
379
380 - |
381 #include <dt-bindings/clock/tegra210-car.h>
382 #include <dt-bindings/interrupt-controller/arm-gic.h>
383 #include <dt-bindings/memory/tegra210-mc.h>
384
385 host1x@50000000 {
386 compatible = "nvidia,tegra210-host1x";
387 reg = <0x50000000 0x00024000>;
388 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>, /* mpcore syncpt */
389 <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* mpcore general */
390 interrupt-names = "syncpt", "host1x";
391 clocks = <&tegra_car TEGRA210_CLK_HOST1X>;
392 clock-names = "host1x";
393 resets = <&tegra_car 28>;
394 reset-names = "host1x";
395
396 #address-cells = <1>;
397 #size-cells = <1>;
398
399 ranges = <0x54000000 0x54000000 0x01000000>;
400 iommus = <&mc TEGRA_SWGROUP_HC>;
401
402 vi@54080000 {
403 compatible = "nvidia,tegra210-vi";
404 reg = <0x54080000 0x00000700>;
405 interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
406 assigned-clocks = <&tegra_car TEGRA210_CLK_VI>;
407 assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>;
408
409 clocks = <&tegra_car TEGRA210_CLK_VI>;
410 power-domains = <&pd_venc>;
411
412 #address-cells = <1>;
413 #size-cells = <1>;
414
415 ranges = <0x0 0x54080000 0x2000>;
416
417 csi@838 {
418 compatible = "nvidia,tegra210-csi";
419 reg = <0x838 0x1300>;
420 assigned-clocks = <&tegra_car TEGRA210_CLK_CILAB>,
421 <&tegra_car TEGRA210_CLK_CILCD>,
422 <&tegra_car TEGRA210_CLK_CILE>,
423 <&tegra_car TEGRA210_CLK_CSI_TPG>;
424 assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_P>,
425 <&tegra_car TEGRA210_CLK_PLL_P>,
426 <&tegra_car TEGRA210_CLK_PLL_P>;
427 assigned-clock-rates = <102000000>,
428 <102000000>,
429 <102000000>,
430 <972000000>;
431
432 clocks = <&tegra_car TEGRA210_CLK_CSI>,
433 <&tegra_car TEGRA210_CLK_CILAB>,
434 <&tegra_car TEGRA210_CLK_CILCD>,
435 <&tegra_car TEGRA210_CLK_CILE>,
436 <&tegra_car TEGRA210_CLK_CSI_TPG>;
437 clock-names = "csi", "cilab", "cilcd", "cile", "csi_tpg";
438 power-domains = <&pd_sor>;
439 };
440 };
441 };