blob: d61585c96e319ef309f087b69111e82d77b7cb5b [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/phy/nvidia,tegra20-usb-phy.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra USB PHY
8
9maintainers:
10 - Dmitry Osipenko <digetx@gmail.com>
11 - Jon Hunter <jonathanh@nvidia.com>
12 - Thierry Reding <thierry.reding@gmail.com>
13
14properties:
15 compatible:
16 oneOf:
17 - items:
18 - enum:
19 - nvidia,tegra124-usb-phy
20 - nvidia,tegra114-usb-phy
21 - enum:
22 - nvidia,tegra30-usb-phy
23 - items:
24 - enum:
25 - nvidia,tegra30-usb-phy
26 - nvidia,tegra20-usb-phy
27
28 reg:
29 minItems: 1
30 maxItems: 2
31 description: |
32 PHY0 and PHY2 share power and ground, PHY0 contains shared registers.
33 PHY0 and PHY2 must specify two register sets, where the first set is
34 PHY own registers and the second set is the PHY0 registers.
35
36 clocks:
37 anyOf:
38 - items:
39 - description: Registers clock
40 - description: Main PHY clock
41
42 - items:
43 - description: Registers clock
44 - description: Main PHY clock
45 - description: ULPI PHY clock
46
47 - items:
48 - description: Registers clock
49 - description: Main PHY clock
50 - description: UTMI pads control registers clock
51
52 - items:
53 - description: Registers clock
54 - description: Main PHY clock
55 - description: UTMI timeout clock
56 - description: UTMI pads control registers clock
57
58 clock-names:
59 oneOf:
60 - items:
61 - const: reg
62 - const: pll_u
63
64 - items:
65 - const: reg
66 - const: pll_u
67 - const: ulpi-link
68
69 - items:
70 - const: reg
71 - const: pll_u
72 - const: utmi-pads
73
74 - items:
75 - const: reg
76 - const: pll_u
77 - const: timer
78 - const: utmi-pads
79
80 interrupts:
81 maxItems: 1
82
83 resets:
84 oneOf:
85 - maxItems: 1
86 description: PHY reset
87
88 - items:
89 - description: PHY reset
90 - description: UTMI pads reset
91
92 reset-names:
93 oneOf:
94 - const: usb
95
96 - items:
97 - const: usb
98 - const: utmi-pads
99
100 "#phy-cells":
101 const: 0
102
103 phy_type:
104 $ref: /schemas/types.yaml#/definitions/string
105 enum: [utmi, ulpi, hsic]
106
107 dr_mode:
108 $ref: /schemas/types.yaml#/definitions/string
109 enum: [host, peripheral, otg]
110 default: host
111
112 vbus-supply:
113 description: Regulator controlling USB VBUS.
114
115 nvidia,has-legacy-mode:
116 description: |
117 Indicates whether this controller can operate in legacy mode
118 (as APX 2500 / 2600). In legacy mode some registers are accessed
119 through the APB_MISC base address instead of the USB controller.
120 type: boolean
121
122 nvidia,is-wired:
123 description: |
124 Indicates whether we can do certain kind of power optimizations for
125 the devices that are always connected. e.g. modem.
126 type: boolean
127
128 nvidia,has-utmi-pad-registers:
129 description: |
130 Indicates whether this controller contains the UTMI pad control
131 registers common to all USB controllers.
132 type: boolean
133
134 nvidia,hssync-start-delay:
135 $ref: /schemas/types.yaml#/definitions/uint32
136 minimum: 0
137 maximum: 31
138 description: |
139 Number of 480 MHz clock cycles to wait before start of sync launches
140 RxActive.
141
142 nvidia,elastic-limit:
143 $ref: /schemas/types.yaml#/definitions/uint32
144 minimum: 0
145 maximum: 31
146 description: Variable FIFO Depth of elastic input store.
147
148 nvidia,idle-wait-delay:
149 $ref: /schemas/types.yaml#/definitions/uint32
150 minimum: 0
151 maximum: 31
152 description: |
153 Number of 480 MHz clock cycles of idle to wait before declare IDLE.
154
155 nvidia,term-range-adj:
156 $ref: /schemas/types.yaml#/definitions/uint32
157 minimum: 0
158 maximum: 15
159 description: Range adjustment on terminations.
160
161 nvidia,xcvr-setup:
162 $ref: /schemas/types.yaml#/definitions/uint32
163 minimum: 0
164 maximum: 127
165 description: Input of XCVR cell, HS driver output control.
166
167 nvidia,xcvr-setup-use-fuses:
168 description: Indicates that the value is read from the on-chip fuses.
169 type: boolean
170
171 nvidia,xcvr-lsfslew:
172 $ref: /schemas/types.yaml#/definitions/uint32
173 minimum: 0
174 maximum: 3
175 description: LS falling slew rate control.
176
177 nvidia,xcvr-lsrslew:
178 $ref: /schemas/types.yaml#/definitions/uint32
179 minimum: 0
180 maximum: 3
181 description: LS rising slew rate control.
182
183 nvidia,xcvr-hsslew:
184 $ref: /schemas/types.yaml#/definitions/uint32
185 minimum: 0
186 maximum: 511
187 description: HS slew rate control.
188
189 nvidia,hssquelch-level:
190 $ref: /schemas/types.yaml#/definitions/uint32
191 minimum: 0
192 maximum: 3
193 description: HS squelch detector level.
194
195 nvidia,hsdiscon-level:
196 $ref: /schemas/types.yaml#/definitions/uint32
197 minimum: 0
198 maximum: 7
199 description: HS disconnect detector level.
200
201 nvidia,phy-reset-gpio:
202 maxItems: 1
203 description: GPIO used to reset the PHY.
204
205 nvidia,pmc:
206 $ref: /schemas/types.yaml#/definitions/phandle-array
207 items:
208 - items:
209 - description: Phandle to Power Management controller.
210 - description: USB controller ID.
211 description:
212 Phandle to Power Management controller.
213
214required:
215 - compatible
216 - reg
217 - clocks
218 - clock-names
219 - resets
220 - reset-names
221 - "#phy-cells"
222 - phy_type
223
224additionalProperties: false
225
226allOf:
227 - if:
228 properties:
229 phy_type:
230 const: utmi
231
232 then:
233 properties:
234 reg:
235 minItems: 2
236 maxItems: 2
237
238 resets:
239 maxItems: 2
240
241 reset-names:
242 maxItems: 2
243
244 required:
245 - nvidia,hssync-start-delay
246 - nvidia,elastic-limit
247 - nvidia,idle-wait-delay
248 - nvidia,term-range-adj
249 - nvidia,xcvr-lsfslew
250 - nvidia,xcvr-lsrslew
251
252 anyOf:
253 - required: ["nvidia,xcvr-setup"]
254 - required: ["nvidia,xcvr-setup-use-fuses"]
255
256 if:
257 properties:
258 compatible:
259 contains:
260 const: nvidia,tegra30-usb-phy
261
262 then:
263 properties:
264 clocks:
265 maxItems: 3
266
267 clock-names:
268 items:
269 - const: reg
270 - const: pll_u
271 - const: utmi-pads
272
273 required:
274 - nvidia,xcvr-hsslew
275 - nvidia,hssquelch-level
276 - nvidia,hsdiscon-level
277
278 else:
279 properties:
280 clocks:
281 maxItems: 4
282
283 clock-names:
284 items:
285 - const: reg
286 - const: pll_u
287 - const: timer
288 - const: utmi-pads
289
290 - if:
291 properties:
292 phy_type:
293 const: ulpi
294
295 then:
296 properties:
297 reg:
298 minItems: 1
299 maxItems: 1
300
301 clocks:
302 minItems: 2
303 maxItems: 3
304
305 clock-names:
306 minItems: 2
307 maxItems: 3
308
309 oneOf:
310 - items:
311 - const: reg
312 - const: pll_u
313
314 - items:
315 - const: reg
316 - const: pll_u
317 - const: ulpi-link
318
319 resets:
320 minItems: 1
321 maxItems: 2
322
323 reset-names:
324 minItems: 1
325 maxItems: 2
326
327examples:
328 - |
329 #include <dt-bindings/clock/tegra124-car.h>
330
331 usb-phy@7d008000 {
332 compatible = "nvidia,tegra124-usb-phy", "nvidia,tegra30-usb-phy";
333 reg = <0x7d008000 0x4000>,
334 <0x7d000000 0x4000>;
335 interrupts = <0 97 4>;
336 phy_type = "utmi";
337 clocks = <&tegra_car TEGRA124_CLK_USB3>,
338 <&tegra_car TEGRA124_CLK_PLL_U>,
339 <&tegra_car TEGRA124_CLK_USBD>;
340 clock-names = "reg", "pll_u", "utmi-pads";
341 resets = <&tegra_car 59>, <&tegra_car 22>;
342 reset-names = "usb", "utmi-pads";
343 #phy-cells = <0>;
344 nvidia,hssync-start-delay = <0>;
345 nvidia,idle-wait-delay = <17>;
346 nvidia,elastic-limit = <16>;
347 nvidia,term-range-adj = <6>;
348 nvidia,xcvr-setup = <9>;
349 nvidia,xcvr-lsfslew = <0>;
350 nvidia,xcvr-lsrslew = <3>;
351 nvidia,hssquelch-level = <2>;
352 nvidia,hsdiscon-level = <5>;
353 nvidia,xcvr-hsslew = <12>;
354 nvidia,pmc = <&tegra_pmc 2>;
355 };
356
357 - |
358 #include <dt-bindings/clock/tegra20-car.h>
359
360 usb-phy@c5004000 {
361 compatible = "nvidia,tegra20-usb-phy";
362 reg = <0xc5004000 0x4000>;
363 interrupts = <0 21 4>;
364 phy_type = "ulpi";
365 clocks = <&tegra_car TEGRA20_CLK_USB2>,
366 <&tegra_car TEGRA20_CLK_PLL_U>,
367 <&tegra_car TEGRA20_CLK_CDEV2>;
368 clock-names = "reg", "pll_u", "ulpi-link";
369 resets = <&tegra_car 58>, <&tegra_car 22>;
370 reset-names = "usb", "utmi-pads";
371 #phy-cells = <0>;
372 nvidia,pmc = <&tegra_pmc 1>;
373 };