1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/usb/nvidia,tegra-xudc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra XUSB device mode controller (XUDC)
8
9description:
10  The Tegra XUDC controller supports both USB 2.0 HighSpeed/FullSpeed and
11  USB 3.0 SuperSpeed protocols.
12
13maintainers:
14  - Nagarjuna Kristam <nkristam@nvidia.com>
15  - JC Kuo <jckuo@nvidia.com>
16  - Thierry Reding <treding@nvidia.com>
17
18properties:
19  compatible:
20    items:
21      - enum:
22          - nvidia,tegra210-xudc # For Tegra210
23          - nvidia,tegra186-xudc # For Tegra186
24          - nvidia,tegra194-xudc # For Tegra194
25          - nvidia,tegra234-xudc # For Tegra234
26
27  reg:
28    minItems: 2
29    items:
30      - description: XUSB device controller registers
31      - description: XUSB device PCI Config registers
32      - description: XUSB device registers.
33
34  reg-names:
35    minItems: 2
36    items:
37      - const: base
38      - const: fpci
39      - const: ipfs
40
41  interrupts:
42    maxItems: 1
43    description: Must contain the XUSB device interrupt.
44
45  clocks:
46    minItems: 4
47    items:
48      - description: Clock to enable core XUSB dev clock.
49      - description: Clock to enable XUSB super speed clock.
50      - description: Clock to enable XUSB super speed dev clock.
51      - description: Clock to enable XUSB high speed dev clock.
52      - description: Clock to enable XUSB full speed dev clock.
53
54  clock-names:
55    minItems: 4
56    items:
57      - const: dev
58      - const: ss
59      - const: ss_src
60      - const: fs_src
61      - const: hs_src
62
63  interconnects:
64    items:
65      - description: memory read client
66      - description: memory write client
67
68  interconnect-names:
69    items:
70      - const: dma-mem # read
71      - const: write
72
73  iommus:
74    maxItems: 1
75
76  power-domains:
77    items:
78      - description: XUSBB(device) power-domain
79      - description: XUSBA(superspeed) power-domain
80
81  power-domain-names:
82    items:
83      - const: dev
84      - const: ss
85
86  nvidia,xusb-padctl:
87    $ref: /schemas/types.yaml#/definitions/phandle
88    description:
89      phandle to the XUSB pad controller that is used to configure the USB pads
90      used by the XUDC controller.
91
92  phys:
93    minItems: 1
94    maxItems: 2
95    description:
96      Must contain an entry for each entry in phy-names.
97      See ../phy/phy-bindings.txt for details.
98
99  phy-names:
100    minItems: 1
101    items:
102      - const: usb2-0
103      - const: usb3-0
104
105  avddio-usb-supply:
106    description: PCIe/USB3 analog logic power supply. Must supply 1.05 V.
107
108  hvdd-usb-supply:
109    description: USB controller power supply. Must supply 3.3 V.
110
111  dma-coherent: true
112
113required:
114  - compatible
115  - reg
116  - reg-names
117  - interrupts
118  - clocks
119  - clock-names
120  - power-domains
121  - power-domain-names
122  - nvidia,xusb-padctl
123  - phys
124  - phy-names
125
126allOf:
127  - if:
128      properties:
129        compatible:
130          contains:
131            enum:
132              - nvidia,tegra210-xudc
133    then:
134      properties:
135        reg:
136          minItems: 3
137        reg-names:
138          minItems: 3
139        clocks:
140          minItems: 5
141        clock-names:
142          minItems: 5
143      required:
144        - avddio-usb-supply
145        - hvdd-usb-supply
146
147  - if:
148      properties:
149        compatible:
150          contains:
151            enum:
152              - nvidia,tegra186-xudc
153              - nvidia,tegra194-xudc
154              - nvidia,tegra234-xudc
155    then:
156      properties:
157        reg:
158          maxItems: 2
159        reg-names:
160          maxItems: 2
161        clocks:
162          maxItems: 4
163        clock-names:
164          maxItems: 4
165
166  - if:
167      properties:
168        compatible:
169          contains:
170            enum:
171              - nvidia,tegra194-xudc
172              - nvidia,tegra234-xudc
173    then:
174      required:
175        - dma-coherent
176
177additionalProperties: false
178
179examples:
180  - |
181    #include <dt-bindings/clock/tegra210-car.h>
182    #include <dt-bindings/gpio/tegra-gpio.h>
183    #include <dt-bindings/interrupt-controller/arm-gic.h>
184
185    usb@700d0000 {
186        compatible = "nvidia,tegra210-xudc";
187        reg = <0x700d0000 0x8000>,
188              <0x700d8000 0x1000>,
189              <0x700d9000 0x1000>;
190        reg-names = "base", "fpci", "ipfs";
191
192        interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
193
194        clocks = <&tegra_car TEGRA210_CLK_XUSB_DEV>,
195                 <&tegra_car TEGRA210_CLK_XUSB_SS>,
196                 <&tegra_car TEGRA210_CLK_XUSB_SSP_SRC>,
197                 <&tegra_car TEGRA210_CLK_XUSB_FS_SRC>,
198                 <&tegra_car TEGRA210_CLK_XUSB_HS_SRC>;
199        clock-names = "dev", "ss", "ss_src", "fs_src", "hs_src";
200
201        power-domains = <&pd_xusbdev>, <&pd_xusbss>;
202        power-domain-names = "dev", "ss";
203
204        nvidia,xusb-padctl = <&padctl>;
205
206        phys = <&micro_b>;
207        phy-names = "usb2-0";
208
209        avddio-usb-supply = <&vdd_pex_1v05>;
210        hvdd-usb-supply = <&vdd_3v3_sys>;
211    };
212