1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/tegra/nvidia,tegra186-display.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra186 (and later) Display Hub
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jon Hunter <jonathanh@nvidia.com>
12
13properties:
14  $nodename:
15    pattern: "^display-hub@[0-9a-f]+$"
16
17  compatible:
18    enum:
19      - nvidia,tegra186-display
20      - nvidia,tegra194-display
21
22  '#address-cells':
23    const: 1
24
25  '#size-cells':
26    const: 1
27
28  reg:
29    maxItems: 1
30
31  interrupts:
32    maxItems: 1
33
34  clocks:
35    minItems: 2
36    maxItems: 3
37
38  clock-names:
39    minItems: 2
40    maxItems: 3
41
42  resets:
43    items:
44      - description: display hub reset
45      - description: window group 0 reset
46      - description: window group 1 reset
47      - description: window group 2 reset
48      - description: window group 3 reset
49      - description: window group 4 reset
50      - description: window group 5 reset
51
52  reset-names:
53    items:
54      - const: misc
55      - const: wgrp0
56      - const: wgrp1
57      - const: wgrp2
58      - const: wgrp3
59      - const: wgrp4
60      - const: wgrp5
61
62  power-domains:
63    maxItems: 1
64
65  ranges:
66    maxItems: 1
67
68patternProperties:
69  "^display@[0-9a-f]+$":
70    type: object
71
72allOf:
73  - if:
74      properties:
75        compatible:
76          contains:
77            const: nvidia,tegra186-display
78    then:
79      properties:
80        clocks:
81          items:
82            - description: display core clock
83            - description: display stream compression clock
84            - description: display hub clock
85
86        clock-names:
87          items:
88            - const: disp
89            - const: dsc
90            - const: hub
91    else:
92      properties:
93        clocks:
94          items:
95            - description: display core clock
96            - description: display hub clock
97
98        clock-names:
99          items:
100            - const: disp
101            - const: hub
102
103additionalProperties: false
104
105required:
106  - compatible
107  - reg
108  - clocks
109  - clock-names
110  - resets
111  - reset-names
112  - power-domains
113  - "#address-cells"
114  - "#size-cells"
115  - ranges
116
117examples:
118  - |
119    #include <dt-bindings/clock/tegra186-clock.h>
120    #include <dt-bindings/interrupt-controller/arm-gic.h>
121    #include <dt-bindings/memory/tegra186-mc.h>
122    #include <dt-bindings/power/tegra186-powergate.h>
123    #include <dt-bindings/reset/tegra186-reset.h>
124
125    display-hub@15200000 {
126        compatible = "nvidia,tegra186-display";
127        reg = <0x15200000 0x00040000>;
128        resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_MISC>,
129                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP0>,
130                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP1>,
131                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP2>,
132                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP3>,
133                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP4>,
134                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP5>;
135        reset-names = "misc", "wgrp0", "wgrp1", "wgrp2",
136                      "wgrp3", "wgrp4", "wgrp5";
137        clocks = <&bpmp TEGRA186_CLK_NVDISPLAY_DISP>,
138                 <&bpmp TEGRA186_CLK_NVDISPLAY_DSC>,
139                 <&bpmp TEGRA186_CLK_NVDISPLAYHUB>;
140        clock-names = "disp", "dsc", "hub";
141        status = "disabled";
142
143        power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISP>;
144
145        #address-cells = <1>;
146        #size-cells = <1>;
147
148        ranges = <0x15200000 0x15200000 0x40000>;
149
150        display@15200000 {
151            compatible = "nvidia,tegra186-dc";
152            reg = <0x15200000 0x10000>;
153            interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
154            clocks = <&bpmp TEGRA186_CLK_NVDISPLAY_P0>;
155            clock-names = "dc";
156            resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_HEAD0>;
157            reset-names = "dc";
158
159            power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISP>;
160            interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
161                            <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
162            interconnect-names = "dma-mem", "read-1";
163            iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
164
165            nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
166            nvidia,head = <0>;
167        };
168
169        display@15210000 {
170            compatible = "nvidia,tegra186-dc";
171            reg = <0x15210000 0x10000>;
172            interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
173            clocks = <&bpmp TEGRA186_CLK_NVDISPLAY_P1>;
174            clock-names = "dc";
175            resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_HEAD1>;
176            reset-names = "dc";
177
178            power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISPB>;
179            interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
180                            <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
181            interconnect-names = "dma-mem", "read-1";
182            iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
183
184            nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
185            nvidia,head = <1>;
186        };
187
188        display@15220000 {
189            compatible = "nvidia,tegra186-dc";
190            reg = <0x15220000 0x10000>;
191            interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
192            clocks = <&bpmp TEGRA186_CLK_NVDISPLAY_P2>;
193            clock-names = "dc";
194            resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_HEAD2>;
195            reset-names = "dc";
196
197            power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISPC>;
198            interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
199                            <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
200            interconnect-names = "dma-mem", "read-1";
201            iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
202
203            nvidia,outputs = <&sor0 &sor1>;
204            nvidia,head = <2>;
205        };
206    };
207
208  - |
209    #include <dt-bindings/clock/tegra194-clock.h>
210    #include <dt-bindings/interrupt-controller/arm-gic.h>
211    #include <dt-bindings/memory/tegra194-mc.h>
212    #include <dt-bindings/power/tegra194-powergate.h>
213    #include <dt-bindings/reset/tegra194-reset.h>
214
215    display-hub@15200000 {
216        compatible = "nvidia,tegra194-display";
217        reg = <0x15200000 0x00040000>;
218        resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_MISC>,
219                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP0>,
220                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP1>,
221                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP2>,
222                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP3>,
223                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP4>,
224                 <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP5>;
225        reset-names = "misc", "wgrp0", "wgrp1", "wgrp2",
226                      "wgrp3", "wgrp4", "wgrp5";
227        clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_DISP>,
228                 <&bpmp TEGRA194_CLK_NVDISPLAYHUB>;
229        clock-names = "disp", "hub";
230        status = "disabled";
231
232        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
233
234        #address-cells = <1>;
235        #size-cells = <1>;
236
237        ranges = <0x15200000 0x15200000 0x40000>;
238
239        display@15200000 {
240            compatible = "nvidia,tegra194-dc";
241            reg = <0x15200000 0x10000>;
242            interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
243            clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P0>;
244            clock-names = "dc";
245            resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD0>;
246            reset-names = "dc";
247
248            power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
249            interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
250                            <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
251            interconnect-names = "dma-mem", "read-1";
252
253            nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
254            nvidia,head = <0>;
255        };
256
257        display@15210000 {
258            compatible = "nvidia,tegra194-dc";
259            reg = <0x15210000 0x10000>;
260            interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
261            clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P1>;
262            clock-names = "dc";
263            resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD1>;
264            reset-names = "dc";
265
266            power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPB>;
267            interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
268                            <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
269            interconnect-names = "dma-mem", "read-1";
270
271            nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
272            nvidia,head = <1>;
273        };
274
275        display@15220000 {
276            compatible = "nvidia,tegra194-dc";
277            reg = <0x15220000 0x10000>;
278            interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
279            clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P2>;
280            clock-names = "dc";
281            resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD2>;
282            reset-names = "dc";
283
284            power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
285            interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
286                            <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
287            interconnect-names = "dma-mem", "read-1";
288
289            nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
290            nvidia,head = <2>;
291        };
292
293        display@15230000 {
294            compatible = "nvidia,tegra194-dc";
295            reg = <0x15230000 0x10000>;
296            interrupts = <GIC_SPI 242 IRQ_TYPE_LEVEL_HIGH>;
297            clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P3>;
298            clock-names = "dc";
299            resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD3>;
300            reset-names = "dc";
301
302            power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
303            interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
304                            <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
305            interconnect-names = "dma-mem", "read-1";
306
307            nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
308            nvidia,head = <3>;
309        };
310    };
311