1# 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:
185              - nvidia,tegra234-host1x
186    then:
187      properties:
188        reg-names:
189          items:
190            - const: common
191            - const: hypervisor
192            - const: vm
193
194        reg:
195          items:
196            - description: region used by host1x server
197            - description: region used by the hypervisor
198            - description: region assigned to the virtual machine
199
200        interrupts:
201          items:
202            - description: host1x syncpoint interrupt 0
203            - description: host1x syncpoint interrupt 1
204            - description: host1x syncpoint interrupt 2
205            - description: host1x syncpoint interrupt 3
206            - description: host1x syncpoint interrupt 4
207            - description: host1x syncpoint interrupt 5
208            - description: host1x syncpoint interrupt 6
209            - description: host1x syncpoint interrupt 7
210            - description: host1x general interrupt
211
212        interrupt-names:
213          items:
214            - const: syncpt0
215            - const: syncpt1
216            - const: syncpt2
217            - const: syncpt3
218            - const: syncpt4
219            - const: syncpt5
220            - const: syncpt6
221            - const: syncpt7
222            - const: host1x
223
224        iommu-map:
225          description: Specification of stream IDs available for memory context device
226            use. Should be a mapping of IDs 0..n to IOMMU entries corresponding to
227            usable stream IDs.
228
229      required:
230        - reg-names
231
232examples:
233  - |
234    #include <dt-bindings/clock/tegra20-car.h>
235    #include <dt-bindings/gpio/tegra-gpio.h>
236    #include <dt-bindings/memory/tegra20-mc.h>
237
238    host1x@50000000 {
239        compatible = "nvidia,tegra20-host1x";
240        reg = <0x50000000 0x00024000>;
241        interrupts = <0 65 0x04>, /* mpcore syncpt */
242                     <0 67 0x04>; /* mpcore general */
243        interrupt-names = "syncpt", "host1x";
244        clocks = <&tegra_car TEGRA20_CLK_HOST1X>;
245        clock-names = "host1x";
246        resets = <&tegra_car 28>, <&mc TEGRA20_MC_RESET_HC>;
247        reset-names = "host1x", "mc";
248
249        #address-cells = <1>;
250        #size-cells = <1>;
251
252        ranges = <0x54000000 0x54000000 0x04000000>;
253
254        mpe@54040000 {
255            compatible = "nvidia,tegra20-mpe";
256            reg = <0x54040000 0x00040000>;
257            interrupts = <0 68 0x04>;
258            clocks = <&tegra_car TEGRA20_CLK_MPE>;
259            resets = <&tegra_car 60>;
260            reset-names = "mpe";
261        };
262
263        vi@54080000 {
264            compatible = "nvidia,tegra20-vi";
265            reg = <0x54080000 0x00040000>;
266            interrupts = <0 69 0x04>;
267            clocks = <&tegra_car TEGRA20_CLK_VI>;
268            resets = <&tegra_car 100>;
269            reset-names = "vi";
270        };
271
272        epp@540c0000 {
273            compatible = "nvidia,tegra20-epp";
274            reg = <0x540c0000 0x00040000>;
275            interrupts = <0 70 0x04>;
276            clocks = <&tegra_car TEGRA20_CLK_EPP>;
277            resets = <&tegra_car 19>;
278            reset-names = "epp";
279        };
280
281        isp@54100000 {
282            compatible = "nvidia,tegra20-isp";
283            reg = <0x54100000 0x00040000>;
284            interrupts = <0 71 0x04>;
285            clocks = <&tegra_car TEGRA20_CLK_ISP>;
286            resets = <&tegra_car 23>;
287            reset-names = "isp";
288        };
289
290        gr2d@54140000 {
291            compatible = "nvidia,tegra20-gr2d";
292            reg = <0x54140000 0x00040000>;
293            interrupts = <0 72 0x04>;
294            clocks = <&tegra_car TEGRA20_CLK_GR2D>;
295            resets = <&tegra_car 21>, <&mc TEGRA20_MC_RESET_2D>;
296            reset-names = "2d", "mc";
297        };
298
299        gr3d@54180000 {
300            compatible = "nvidia,tegra20-gr3d";
301            reg = <0x54180000 0x00040000>;
302            clocks = <&tegra_car TEGRA20_CLK_GR3D>;
303            resets = <&tegra_car 24>, <&mc TEGRA20_MC_RESET_3D>;
304            reset-names = "3d", "mc";
305        };
306
307        dc@54200000 {
308            compatible = "nvidia,tegra20-dc";
309            reg = <0x54200000 0x00040000>;
310            interrupts = <0 73 0x04>;
311            clocks = <&tegra_car TEGRA20_CLK_DISP1>;
312            clock-names = "dc";
313            resets = <&tegra_car 27>;
314            reset-names = "dc";
315
316            rgb {
317            };
318        };
319
320        dc@54240000 {
321            compatible = "nvidia,tegra20-dc";
322            reg = <0x54240000 0x00040000>;
323            interrupts = <0 74 0x04>;
324            clocks = <&tegra_car TEGRA20_CLK_DISP2>;
325            clock-names = "dc";
326            resets = <&tegra_car 26>;
327            reset-names = "dc";
328
329            rgb {
330            };
331        };
332
333        hdmi@54280000 {
334            compatible = "nvidia,tegra20-hdmi";
335            reg = <0x54280000 0x00040000>;
336            interrupts = <0 75 0x04>;
337            clocks = <&tegra_car TEGRA20_CLK_HDMI>,
338                     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
339            clock-names = "hdmi", "parent";
340            resets = <&tegra_car 51>;
341            reset-names = "hdmi";
342
343            hdmi-supply = <&vdd_5v0_hdmi>;
344            pll-supply = <&vdd_hdmi_pll>;
345            vdd-supply = <&vdd_3v3_hdmi>;
346
347            nvidia,ddc-i2c-bus = <&hdmi_ddc>;
348            nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>;
349        };
350
351        tvo@542c0000 {
352            compatible = "nvidia,tegra20-tvo";
353            reg = <0x542c0000 0x00040000>;
354            interrupts = <0 76 0x04>;
355            clocks = <&tegra_car TEGRA20_CLK_TVO>;
356        };
357
358        dsi@54300000 {
359            compatible = "nvidia,tegra20-dsi";
360            reg = <0x54300000 0x00040000>;
361            clocks = <&tegra_car TEGRA20_CLK_DSI>,
362                     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
363            clock-names = "dsi", "parent";
364            resets = <&tegra_car 48>;
365            reset-names = "dsi";
366        };
367    };
368
369  - |
370    #include <dt-bindings/clock/tegra210-car.h>
371    #include <dt-bindings/interrupt-controller/arm-gic.h>
372    #include <dt-bindings/memory/tegra210-mc.h>
373
374    host1x@50000000 {
375        compatible = "nvidia,tegra210-host1x";
376        reg = <0x50000000 0x00024000>;
377        interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>, /* mpcore syncpt */
378                     <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* mpcore general */
379        interrupt-names = "syncpt", "host1x";
380        clocks = <&tegra_car TEGRA210_CLK_HOST1X>;
381        clock-names = "host1x";
382        resets = <&tegra_car 28>;
383        reset-names = "host1x";
384
385        #address-cells = <1>;
386        #size-cells = <1>;
387
388        ranges = <0x54000000 0x54000000 0x01000000>;
389        iommus = <&mc TEGRA_SWGROUP_HC>;
390
391        vi@54080000 {
392            compatible = "nvidia,tegra210-vi";
393            reg = <0x54080000 0x00000700>;
394            interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
395            assigned-clocks = <&tegra_car TEGRA210_CLK_VI>;
396            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>;
397
398            clocks = <&tegra_car TEGRA210_CLK_VI>;
399            power-domains = <&pd_venc>;
400
401            #address-cells = <1>;
402            #size-cells = <1>;
403
404            ranges = <0x0 0x54080000 0x2000>;
405
406            csi@838 {
407                compatible = "nvidia,tegra210-csi";
408                reg = <0x838 0x1300>;
409                assigned-clocks = <&tegra_car TEGRA210_CLK_CILAB>,
410                                  <&tegra_car TEGRA210_CLK_CILCD>,
411                                  <&tegra_car TEGRA210_CLK_CILE>,
412                                  <&tegra_car TEGRA210_CLK_CSI_TPG>;
413                assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_P>,
414                                         <&tegra_car TEGRA210_CLK_PLL_P>,
415                                         <&tegra_car TEGRA210_CLK_PLL_P>;
416                assigned-clock-rates = <102000000>,
417                                       <102000000>,
418                                       <102000000>,
419                                       <972000000>;
420
421                clocks = <&tegra_car TEGRA210_CLK_CSI>,
422                         <&tegra_car TEGRA210_CLK_CILAB>,
423                         <&tegra_car TEGRA210_CLK_CILCD>,
424                         <&tegra_car TEGRA210_CLK_CILE>,
425                         <&tegra_car TEGRA210_CLK_CSI_TPG>;
426                clock-names = "csi", "cilab", "cilcd", "cile", "csi_tpg";
427                power-domains = <&pd_sor>;
428            };
429        };
430    };
431