1*fe8b45aaSThierry Reding# SPDX-License-Identifier: GPL-2.0-only
2*fe8b45aaSThierry Reding%YAML 1.2
3*fe8b45aaSThierry Reding---
4*fe8b45aaSThierry Reding$id: http://devicetree.org/schemas/display/tegra/nvidia,tegra20-host1x.yaml#
5*fe8b45aaSThierry Reding$schema: http://devicetree.org/meta-schemas/core.yaml#
6*fe8b45aaSThierry Reding
7*fe8b45aaSThierry Redingtitle: NVIDIA Tegra host1x controller
8*fe8b45aaSThierry Reding
9*fe8b45aaSThierry Redingmaintainers:
10*fe8b45aaSThierry Reding  - Thierry Reding <thierry.reding@gmail.com>
11*fe8b45aaSThierry Reding  - Jon Hunter <jonathanh@nvidia.com>
12*fe8b45aaSThierry Reding
13*fe8b45aaSThierry Redingdescription: The host1x top-level node defines a number of children, each
14*fe8b45aaSThierry Reding  representing one of the host1x client modules defined in this binding.
15*fe8b45aaSThierry Reding
16*fe8b45aaSThierry Redingproperties:
17*fe8b45aaSThierry Reding  compatible:
18*fe8b45aaSThierry Reding    oneOf:
19*fe8b45aaSThierry Reding      - enum:
20*fe8b45aaSThierry Reding          - nvidia,tegra20-host1x
21*fe8b45aaSThierry Reding          - nvidia,tegra30-host1x
22*fe8b45aaSThierry Reding          - nvidia,tegra114-host1x
23*fe8b45aaSThierry Reding          - nvidia,tegra124-host1x
24*fe8b45aaSThierry Reding          - nvidia,tegra210-host1x
25*fe8b45aaSThierry Reding          - nvidia,tegra186-host1x
26*fe8b45aaSThierry Reding          - nvidia,tegra194-host1x
27*fe8b45aaSThierry Reding
28*fe8b45aaSThierry Reding      - items:
29*fe8b45aaSThierry Reding          - const: nvidia,tegra132-host1x
30*fe8b45aaSThierry Reding          - const: nvidia,tegra124-host1x
31*fe8b45aaSThierry Reding
32*fe8b45aaSThierry Reding  reg:
33*fe8b45aaSThierry Reding    minItems: 1
34*fe8b45aaSThierry Reding    maxItems: 2
35*fe8b45aaSThierry Reding
36*fe8b45aaSThierry Reding  reg-names:
37*fe8b45aaSThierry Reding    minItems: 1
38*fe8b45aaSThierry Reding    maxItems: 2
39*fe8b45aaSThierry Reding
40*fe8b45aaSThierry Reding  interrupts:
41*fe8b45aaSThierry Reding    items:
42*fe8b45aaSThierry Reding      - description: host1x syncpoint interrupt
43*fe8b45aaSThierry Reding      - description: host1x general interrupt
44*fe8b45aaSThierry Reding    minItems: 1
45*fe8b45aaSThierry Reding
46*fe8b45aaSThierry Reding  interrupt-names:
47*fe8b45aaSThierry Reding    items:
48*fe8b45aaSThierry Reding      - const: syncpt
49*fe8b45aaSThierry Reding      - const: host1x
50*fe8b45aaSThierry Reding    minItems: 1
51*fe8b45aaSThierry Reding
52*fe8b45aaSThierry Reding  '#address-cells':
53*fe8b45aaSThierry Reding    description: The number of cells used to represent physical base addresses
54*fe8b45aaSThierry Reding      in the host1x address space.
55*fe8b45aaSThierry Reding    enum: [1, 2]
56*fe8b45aaSThierry Reding
57*fe8b45aaSThierry Reding  '#size-cells':
58*fe8b45aaSThierry Reding    description: The number of cells used to represent the size of an address
59*fe8b45aaSThierry Reding      range in the host1x address space.
60*fe8b45aaSThierry Reding    enum: [1, 2]
61*fe8b45aaSThierry Reding
62*fe8b45aaSThierry Reding  ranges:
63*fe8b45aaSThierry Reding    maxItems: 1
64*fe8b45aaSThierry Reding
65*fe8b45aaSThierry Reding  clocks:
66*fe8b45aaSThierry Reding    description: Must contain one entry, for the module clock. See
67*fe8b45aaSThierry Reding      ../clocks/clock-bindings.txt for details.
68*fe8b45aaSThierry Reding
69*fe8b45aaSThierry Reding  clock-names:
70*fe8b45aaSThierry Reding    items:
71*fe8b45aaSThierry Reding      - const: host1x
72*fe8b45aaSThierry Reding
73*fe8b45aaSThierry Reding  resets:
74*fe8b45aaSThierry Reding    minItems: 1 # MC reset is optional on Tegra186 and later
75*fe8b45aaSThierry Reding    items:
76*fe8b45aaSThierry Reding      - description: module reset
77*fe8b45aaSThierry Reding      - description: memory client hotflush reset
78*fe8b45aaSThierry Reding
79*fe8b45aaSThierry Reding  reset-names:
80*fe8b45aaSThierry Reding    minItems: 1 # MC reset is optional on Tegra186 and later
81*fe8b45aaSThierry Reding    items:
82*fe8b45aaSThierry Reding      - const: host1x
83*fe8b45aaSThierry Reding      - const: mc
84*fe8b45aaSThierry Reding
85*fe8b45aaSThierry Reding  iommus:
86*fe8b45aaSThierry Reding    maxItems: 1
87*fe8b45aaSThierry Reding
88*fe8b45aaSThierry Reding  interconnects:
89*fe8b45aaSThierry Reding    items:
90*fe8b45aaSThierry Reding      - description: memory read client for host1x
91*fe8b45aaSThierry Reding
92*fe8b45aaSThierry Reding  interconnect-names:
93*fe8b45aaSThierry Reding    items:
94*fe8b45aaSThierry Reding      - const: dma-mem # read
95*fe8b45aaSThierry Reding
96*fe8b45aaSThierry Reding  operating-points-v2:
97*fe8b45aaSThierry Reding    $ref: "/schemas/types.yaml#/definitions/phandle"
98*fe8b45aaSThierry Reding
99*fe8b45aaSThierry Reding  power-domains:
100*fe8b45aaSThierry Reding    items:
101*fe8b45aaSThierry Reding      - description: phandle to the HEG or core power domain
102*fe8b45aaSThierry Reding
103*fe8b45aaSThierry Redingrequired:
104*fe8b45aaSThierry Reding  - compatible
105*fe8b45aaSThierry Reding  - interrupts
106*fe8b45aaSThierry Reding  - interrupt-names
107*fe8b45aaSThierry Reding  - '#address-cells'
108*fe8b45aaSThierry Reding  - '#size-cells'
109*fe8b45aaSThierry Reding  - ranges
110*fe8b45aaSThierry Reding  - reg
111*fe8b45aaSThierry Reding  - clocks
112*fe8b45aaSThierry Reding  - clock-names
113*fe8b45aaSThierry Reding  - resets
114*fe8b45aaSThierry Reding  - reset-names
115*fe8b45aaSThierry Reding
116*fe8b45aaSThierry RedingunevaluatedProperties:
117*fe8b45aaSThierry Reding  type: object
118*fe8b45aaSThierry Reding
119*fe8b45aaSThierry RedingallOf:
120*fe8b45aaSThierry Reding  - if:
121*fe8b45aaSThierry Reding      properties:
122*fe8b45aaSThierry Reding        compatible:
123*fe8b45aaSThierry Reding          contains:
124*fe8b45aaSThierry Reding            enum:
125*fe8b45aaSThierry Reding              - nvidia,tegra186-host1x
126*fe8b45aaSThierry Reding              - nvidia,tegra194-host1x
127*fe8b45aaSThierry Reding    then:
128*fe8b45aaSThierry Reding      properties:
129*fe8b45aaSThierry Reding        reg-names:
130*fe8b45aaSThierry Reding          items:
131*fe8b45aaSThierry Reding            - const: hypervisor
132*fe8b45aaSThierry Reding            - const: vm
133*fe8b45aaSThierry Reding
134*fe8b45aaSThierry Reding        reg:
135*fe8b45aaSThierry Reding          items:
136*fe8b45aaSThierry Reding            - description: physical base address and length of the register
137*fe8b45aaSThierry Reding                region assigned to the VM
138*fe8b45aaSThierry Reding            - description: physical base address and length of the register
139*fe8b45aaSThierry Reding                region used by the hypervisor
140*fe8b45aaSThierry Reding
141*fe8b45aaSThierry Reding        resets:
142*fe8b45aaSThierry Reding          maxItems: 1
143*fe8b45aaSThierry Reding
144*fe8b45aaSThierry Reding        reset-names:
145*fe8b45aaSThierry Reding          maxItems: 1
146*fe8b45aaSThierry Reding
147*fe8b45aaSThierry Reding      required:
148*fe8b45aaSThierry Reding        - reg-names
149*fe8b45aaSThierry Reding
150*fe8b45aaSThierry Redingexamples:
151*fe8b45aaSThierry Reding  - |
152*fe8b45aaSThierry Reding    #include <dt-bindings/clock/tegra20-car.h>
153*fe8b45aaSThierry Reding    #include <dt-bindings/gpio/tegra-gpio.h>
154*fe8b45aaSThierry Reding    #include <dt-bindings/memory/tegra20-mc.h>
155*fe8b45aaSThierry Reding
156*fe8b45aaSThierry Reding    host1x@50000000 {
157*fe8b45aaSThierry Reding        compatible = "nvidia,tegra20-host1x";
158*fe8b45aaSThierry Reding        reg = <0x50000000 0x00024000>;
159*fe8b45aaSThierry Reding        interrupts = <0 65 0x04   /* mpcore syncpt */
160*fe8b45aaSThierry Reding                      0 67 0x04>; /* mpcore general */
161*fe8b45aaSThierry Reding        interrupt-names = "syncpt", "host1x";
162*fe8b45aaSThierry Reding        clocks = <&tegra_car TEGRA20_CLK_HOST1X>;
163*fe8b45aaSThierry Reding        clock-names = "host1x";
164*fe8b45aaSThierry Reding        resets = <&tegra_car 28>, <&mc TEGRA20_MC_RESET_HC>;
165*fe8b45aaSThierry Reding        reset-names = "host1x", "mc";
166*fe8b45aaSThierry Reding
167*fe8b45aaSThierry Reding        #address-cells = <1>;
168*fe8b45aaSThierry Reding        #size-cells = <1>;
169*fe8b45aaSThierry Reding
170*fe8b45aaSThierry Reding        ranges = <0x54000000 0x54000000 0x04000000>;
171*fe8b45aaSThierry Reding
172*fe8b45aaSThierry Reding        mpe@54040000 {
173*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-mpe";
174*fe8b45aaSThierry Reding            reg = <0x54040000 0x00040000>;
175*fe8b45aaSThierry Reding            interrupts = <0 68 0x04>;
176*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_MPE>;
177*fe8b45aaSThierry Reding            resets = <&tegra_car 60>;
178*fe8b45aaSThierry Reding            reset-names = "mpe";
179*fe8b45aaSThierry Reding        };
180*fe8b45aaSThierry Reding
181*fe8b45aaSThierry Reding        vi@54080000 {
182*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-vi";
183*fe8b45aaSThierry Reding            reg = <0x54080000 0x00040000>;
184*fe8b45aaSThierry Reding            interrupts = <0 69 0x04>;
185*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_VI>;
186*fe8b45aaSThierry Reding            resets = <&tegra_car 100>;
187*fe8b45aaSThierry Reding            reset-names = "vi";
188*fe8b45aaSThierry Reding        };
189*fe8b45aaSThierry Reding
190*fe8b45aaSThierry Reding        epp@540c0000 {
191*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-epp";
192*fe8b45aaSThierry Reding            reg = <0x540c0000 0x00040000>;
193*fe8b45aaSThierry Reding            interrupts = <0 70 0x04>;
194*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_EPP>;
195*fe8b45aaSThierry Reding            resets = <&tegra_car 19>;
196*fe8b45aaSThierry Reding            reset-names = "epp";
197*fe8b45aaSThierry Reding        };
198*fe8b45aaSThierry Reding
199*fe8b45aaSThierry Reding        isp@54100000 {
200*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-isp";
201*fe8b45aaSThierry Reding            reg = <0x54100000 0x00040000>;
202*fe8b45aaSThierry Reding            interrupts = <0 71 0x04>;
203*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_ISP>;
204*fe8b45aaSThierry Reding            resets = <&tegra_car 23>;
205*fe8b45aaSThierry Reding            reset-names = "isp";
206*fe8b45aaSThierry Reding        };
207*fe8b45aaSThierry Reding
208*fe8b45aaSThierry Reding        gr2d@54140000 {
209*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-gr2d";
210*fe8b45aaSThierry Reding            reg = <0x54140000 0x00040000>;
211*fe8b45aaSThierry Reding            interrupts = <0 72 0x04>;
212*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_GR2D>;
213*fe8b45aaSThierry Reding            resets = <&tegra_car 21>, <&mc TEGRA20_MC_RESET_2D>;
214*fe8b45aaSThierry Reding            reset-names = "2d", "mc";
215*fe8b45aaSThierry Reding        };
216*fe8b45aaSThierry Reding
217*fe8b45aaSThierry Reding        gr3d@54180000 {
218*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-gr3d";
219*fe8b45aaSThierry Reding            reg = <0x54180000 0x00040000>;
220*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_GR3D>;
221*fe8b45aaSThierry Reding            resets = <&tegra_car 24>, <&mc TEGRA20_MC_RESET_3D>;
222*fe8b45aaSThierry Reding            reset-names = "3d", "mc";
223*fe8b45aaSThierry Reding        };
224*fe8b45aaSThierry Reding
225*fe8b45aaSThierry Reding        dc@54200000 {
226*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-dc";
227*fe8b45aaSThierry Reding            reg = <0x54200000 0x00040000>;
228*fe8b45aaSThierry Reding            interrupts = <0 73 0x04>;
229*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_DISP1>;
230*fe8b45aaSThierry Reding            clock-names = "dc";
231*fe8b45aaSThierry Reding            resets = <&tegra_car 27>;
232*fe8b45aaSThierry Reding            reset-names = "dc";
233*fe8b45aaSThierry Reding
234*fe8b45aaSThierry Reding            rgb {
235*fe8b45aaSThierry Reding            };
236*fe8b45aaSThierry Reding        };
237*fe8b45aaSThierry Reding
238*fe8b45aaSThierry Reding        dc@54240000 {
239*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-dc";
240*fe8b45aaSThierry Reding            reg = <0x54240000 0x00040000>;
241*fe8b45aaSThierry Reding            interrupts = <0 74 0x04>;
242*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_DISP2>;
243*fe8b45aaSThierry Reding            clock-names = "dc";
244*fe8b45aaSThierry Reding            resets = <&tegra_car 26>;
245*fe8b45aaSThierry Reding            reset-names = "dc";
246*fe8b45aaSThierry Reding
247*fe8b45aaSThierry Reding            rgb {
248*fe8b45aaSThierry Reding            };
249*fe8b45aaSThierry Reding        };
250*fe8b45aaSThierry Reding
251*fe8b45aaSThierry Reding        hdmi@54280000 {
252*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-hdmi";
253*fe8b45aaSThierry Reding            reg = <0x54280000 0x00040000>;
254*fe8b45aaSThierry Reding            interrupts = <0 75 0x04>;
255*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_HDMI>,
256*fe8b45aaSThierry Reding                     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
257*fe8b45aaSThierry Reding            clock-names = "hdmi", "parent";
258*fe8b45aaSThierry Reding            resets = <&tegra_car 51>;
259*fe8b45aaSThierry Reding            reset-names = "hdmi";
260*fe8b45aaSThierry Reding
261*fe8b45aaSThierry Reding            hdmi-supply = <&vdd_5v0_hdmi>;
262*fe8b45aaSThierry Reding            pll-supply = <&vdd_hdmi_pll>;
263*fe8b45aaSThierry Reding            vdd-supply = <&vdd_3v3_hdmi>;
264*fe8b45aaSThierry Reding
265*fe8b45aaSThierry Reding            nvidia,ddc-i2c-bus = <&hdmi_ddc>;
266*fe8b45aaSThierry Reding            nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>;
267*fe8b45aaSThierry Reding        };
268*fe8b45aaSThierry Reding
269*fe8b45aaSThierry Reding        tvo@542c0000 {
270*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-tvo";
271*fe8b45aaSThierry Reding            reg = <0x542c0000 0x00040000>;
272*fe8b45aaSThierry Reding            interrupts = <0 76 0x04>;
273*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_TVO>;
274*fe8b45aaSThierry Reding        };
275*fe8b45aaSThierry Reding
276*fe8b45aaSThierry Reding        dsi@54300000 {
277*fe8b45aaSThierry Reding            compatible = "nvidia,tegra20-dsi";
278*fe8b45aaSThierry Reding            reg = <0x54300000 0x00040000>;
279*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA20_CLK_DSI>,
280*fe8b45aaSThierry Reding                     <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
281*fe8b45aaSThierry Reding            clock-names = "dsi", "parent";
282*fe8b45aaSThierry Reding            resets = <&tegra_car 48>;
283*fe8b45aaSThierry Reding            reset-names = "dsi";
284*fe8b45aaSThierry Reding        };
285*fe8b45aaSThierry Reding    };
286*fe8b45aaSThierry Reding
287*fe8b45aaSThierry Reding  - |
288*fe8b45aaSThierry Reding    #include <dt-bindings/clock/tegra210-car.h>
289*fe8b45aaSThierry Reding    #include <dt-bindings/interrupt-controller/arm-gic.h>
290*fe8b45aaSThierry Reding    #include <dt-bindings/memory/tegra210-mc.h>
291*fe8b45aaSThierry Reding
292*fe8b45aaSThierry Reding    host1x@50000000 {
293*fe8b45aaSThierry Reding        compatible = "nvidia,tegra210-host1x";
294*fe8b45aaSThierry Reding        reg = <0x50000000 0x00024000>;
295*fe8b45aaSThierry Reding        interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>, /* mpcore syncpt */
296*fe8b45aaSThierry Reding                     <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* mpcore general */
297*fe8b45aaSThierry Reding        interrupt-names = "syncpt", "host1x";
298*fe8b45aaSThierry Reding        clocks = <&tegra_car TEGRA210_CLK_HOST1X>;
299*fe8b45aaSThierry Reding        clock-names = "host1x";
300*fe8b45aaSThierry Reding        resets = <&tegra_car 28>;
301*fe8b45aaSThierry Reding        reset-names = "host1x";
302*fe8b45aaSThierry Reding
303*fe8b45aaSThierry Reding        #address-cells = <1>;
304*fe8b45aaSThierry Reding        #size-cells = <1>;
305*fe8b45aaSThierry Reding
306*fe8b45aaSThierry Reding        ranges = <0x54000000 0x54000000 0x01000000>;
307*fe8b45aaSThierry Reding        iommus = <&mc TEGRA_SWGROUP_HC>;
308*fe8b45aaSThierry Reding
309*fe8b45aaSThierry Reding        vi@54080000 {
310*fe8b45aaSThierry Reding            compatible = "nvidia,tegra210-vi";
311*fe8b45aaSThierry Reding            reg = <0x54080000 0x00000700>;
312*fe8b45aaSThierry Reding            interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
313*fe8b45aaSThierry Reding            assigned-clocks = <&tegra_car TEGRA210_CLK_VI>;
314*fe8b45aaSThierry Reding            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>;
315*fe8b45aaSThierry Reding
316*fe8b45aaSThierry Reding            clocks = <&tegra_car TEGRA210_CLK_VI>;
317*fe8b45aaSThierry Reding            power-domains = <&pd_venc>;
318*fe8b45aaSThierry Reding
319*fe8b45aaSThierry Reding            #address-cells = <1>;
320*fe8b45aaSThierry Reding            #size-cells = <1>;
321*fe8b45aaSThierry Reding
322*fe8b45aaSThierry Reding            ranges = <0x0 0x54080000 0x2000>;
323*fe8b45aaSThierry Reding
324*fe8b45aaSThierry Reding            csi@838 {
325*fe8b45aaSThierry Reding                compatible = "nvidia,tegra210-csi";
326*fe8b45aaSThierry Reding                reg = <0x838 0x1300>;
327*fe8b45aaSThierry Reding                assigned-clocks = <&tegra_car TEGRA210_CLK_CILAB>,
328*fe8b45aaSThierry Reding                                  <&tegra_car TEGRA210_CLK_CILCD>,
329*fe8b45aaSThierry Reding                                  <&tegra_car TEGRA210_CLK_CILE>,
330*fe8b45aaSThierry Reding                                  <&tegra_car TEGRA210_CLK_CSI_TPG>;
331*fe8b45aaSThierry Reding                assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_P>,
332*fe8b45aaSThierry Reding                                         <&tegra_car TEGRA210_CLK_PLL_P>,
333*fe8b45aaSThierry Reding                                         <&tegra_car TEGRA210_CLK_PLL_P>;
334*fe8b45aaSThierry Reding                assigned-clock-rates = <102000000>,
335*fe8b45aaSThierry Reding                                       <102000000>,
336*fe8b45aaSThierry Reding                                       <102000000>,
337*fe8b45aaSThierry Reding                                       <972000000>;
338*fe8b45aaSThierry Reding
339*fe8b45aaSThierry Reding                clocks = <&tegra_car TEGRA210_CLK_CSI>,
340*fe8b45aaSThierry Reding                         <&tegra_car TEGRA210_CLK_CILAB>,
341*fe8b45aaSThierry Reding                         <&tegra_car TEGRA210_CLK_CILCD>,
342*fe8b45aaSThierry Reding                         <&tegra_car TEGRA210_CLK_CILE>,
343*fe8b45aaSThierry Reding                         <&tegra_car TEGRA210_CLK_CSI_TPG>;
344*fe8b45aaSThierry Reding                clock-names = "csi", "cilab", "cilcd", "cile", "csi_tpg";
345*fe8b45aaSThierry Reding                power-domains = <&pd_sor>;
346*fe8b45aaSThierry Reding            };
347*fe8b45aaSThierry Reding        };
348*fe8b45aaSThierry Reding    };
349