xref: /freebsd/sys/contrib/device-tree/Bindings/phy/nvidia,tegra124-xusb-padctl.txt (revision cfd6422a5217410fbd66f7a7a8a64d9d85e61229)
1Device tree binding for NVIDIA Tegra XUSB pad controller
2========================================================
3
4The Tegra XUSB pad controller manages a set of I/O lanes (with differential
5signals) which connect directly to pins/pads on the SoC package. Each lane
6is controlled by a HW block referred to as a "pad" in the Tegra hardware
7documentation. Each such "pad" may control either one or multiple lanes,
8and thus contains any logic common to all its lanes. Each lane can be
9separately configured and powered up.
10
11Some of the lanes are high-speed lanes, which can be used for PCIe, SATA or
12super-speed USB. Other lanes are for various types of low-speed, full-speed
13or high-speed USB (such as UTMI, ULPI and HSIC). The XUSB pad controller
14contains a software-configurable mux that sits between the I/O controller
15ports (e.g. PCIe) and the lanes.
16
17In addition to per-lane configuration, USB 3.0 ports may require additional
18settings on a per-board basis.
19
20Pads will be represented as children of the top-level XUSB pad controller
21device tree node. Each lane exposed by the pad will be represented by its
22own subnode and can be referenced by users of the lane using the standard
23PHY bindings, as described by the phy-bindings.txt file in this directory.
24
25The Tegra hardware documentation refers to the connection between the XUSB
26pad controller and the XUSB controller as "ports". This is confusing since
27"port" is typically used to denote the physical USB receptacle. The device
28tree binding in this document uses the term "port" to refer to the logical
29abstraction of the signals that are routed to a USB receptacle (i.e. a PHY
30for the USB signal, the VBUS power supply, the USB 2.0 companion port for
31USB 3.0 receptacles, ...).
32
33Required properties:
34--------------------
35- compatible: Must be:
36  - Tegra124: "nvidia,tegra124-xusb-padctl"
37  - Tegra132: "nvidia,tegra132-xusb-padctl", "nvidia,tegra124-xusb-padctl"
38  - Tegra210: "nvidia,tegra210-xusb-padctl"
39  - Tegra186: "nvidia,tegra186-xusb-padctl"
40  - Tegra194: "nvidia,tegra194-xusb-padctl"
41- reg: Physical base address and length of the controller's registers.
42- resets: Must contain an entry for each entry in reset-names.
43- reset-names: Must include the following entries:
44  - "padctl"
45
46For Tegra124:
47- avdd-pll-utmip-supply: UTMI PLL power supply. Must supply 1.8 V.
48- avdd-pll-erefe-supply: PLLE reference PLL power supply. Must supply 1.05 V.
49- avdd-pex-pll-supply: PCIe/USB3 PLL power supply. Must supply 1.05 V.
50- hvdd-pex-pll-e-supply: High-voltage PLLE power supply. Must supply 3.3 V.
51
52For Tegra210:
53- avdd-pll-utmip-supply: UTMI PLL power supply. Must supply 1.8 V.
54- avdd-pll-uerefe-supply: PLLE reference PLL power supply. Must supply 1.05 V.
55- dvdd-pex-pll-supply: PCIe/USB3 PLL power supply. Must supply 1.05 V.
56- hvdd-pex-pll-e-supply: High-voltage PLLE power supply. Must supply 1.8 V.
57
58For Tegra186:
59- avdd-pll-erefeut-supply: UPHY brick and reference clock as well as UTMI PHY
60  power supply. Must supply 1.8 V.
61- avdd-usb-supply: USB I/Os, VBUS, ID, REXT, D+/D- power supply. Must supply
62  3.3 V.
63- vclamp-usb-supply: Bias rail for USB pad. Must supply 1.8 V.
64- vddio-hsic-supply: HSIC PHY power supply. Must supply 1.2 V.
65
66For Tegra194:
67- avdd-usb-supply: USB I/Os, VBUS, ID, REXT, D+/D- power supply. Must supply
68  3.3 V.
69- vclamp-usb-supply: Bias rail for USB pad. Must supply 1.8 V.
70
71Pad nodes:
72==========
73
74A required child node named "pads" contains a list of subnodes, one for each
75of the pads exposed by the XUSB pad controller. Each pad may need additional
76resources that can be referenced in its pad node.
77
78The "status" property is used to enable or disable the use of a pad. If set
79to "disabled", the pad will not be used on the given board. In order to use
80the pad and any of its lanes, this property must be set to "okay".
81
82For Tegra124 and Tegra132, the following pads exist: usb2, ulpi, hsic, pcie
83and sata. No extra resources are required for operation of these pads.
84
85For Tegra210, the following pads exist: usb2, hsic, pcie and sata. Below is
86a description of the properties of each pad.
87
88UTMI pad:
89---------
90
91Required properties:
92- clocks: Must contain an entry for each entry in clock-names.
93- clock-names: Must contain the following entries:
94  - "trk": phandle and specifier referring to the USB2 tracking clock
95
96HSIC pad:
97---------
98
99Required properties:
100- clocks: Must contain an entry for each entry in clock-names.
101- clock-names: Must contain the following entries:
102  - "trk": phandle and specifier referring to the HSIC tracking clock
103
104PCIe pad:
105---------
106
107Required properties:
108- clocks: Must contain an entry for each entry in clock-names.
109- clock-names: Must contain the following entries:
110  - "pll": phandle and specifier referring to the PLLE
111- resets: Must contain an entry for each entry in reset-names.
112- reset-names: Must contain the following entries:
113  - "phy": reset for the PCIe UPHY block
114
115SATA pad:
116---------
117
118Required properties:
119- resets: Must contain an entry for each entry in reset-names.
120- reset-names: Must contain the following entries:
121  - "phy": reset for the SATA UPHY block
122
123
124PHY nodes:
125==========
126
127Each pad node has a child named "lanes" that contains one or more children of
128its own, each representing one of the lanes controlled by the pad.
129
130Required properties:
131--------------------
132- status: Defines the operation status of the PHY. Valid values are:
133  - "disabled": the PHY is disabled
134  - "okay": the PHY is enabled
135- #phy-cells: Should be 0. Since each lane represents a single PHY, there is
136  no need for an additional specifier.
137- nvidia,function: The output function of the PHY. See below for a list of
138  valid functions per SoC generation.
139
140For Tegra124 and Tegra132, the list of valid PHY nodes is given below:
141- usb2: usb2-0, usb2-1, usb2-2
142  - functions: "snps", "xusb", "uart"
143- ulpi: ulpi-0
144  - functions: "snps", "xusb"
145- hsic: hsic-0, hsic-1
146  - functions: "snps", "xusb"
147- pcie: pcie-0, pcie-1, pcie-2, pcie-3, pcie-4
148  - functions: "pcie", "usb3-ss"
149- sata: sata-0
150  - functions: "usb3-ss", "sata"
151
152For Tegra210, the list of valid PHY nodes is given below:
153- usb2: usb2-0, usb2-1, usb2-2, usb2-3
154  - functions: "snps", "xusb", "uart"
155- hsic: hsic-0, hsic-1
156  - functions: "snps", "xusb"
157- pcie: pcie-0, pcie-1, pcie-2, pcie-3, pcie-4, pcie-5, pcie-6
158  - functions: "pcie-x1", "usb3-ss", "pcie-x4"
159- sata: sata-0
160  - functions: "usb3-ss", "sata"
161
162For Tegra194, the list of valid PHY nodes is given below:
163- usb2: usb2-0, usb2-1, usb2-2, usb2-3
164  - functions: "xusb"
165- usb3: usb3-0, usb3-1, usb3-2, usb3-3
166  - functions: "xusb"
167
168Port nodes:
169===========
170
171A required child node named "ports" contains a list of all the ports exposed
172by the XUSB pad controller. Per-port configuration is only required for USB.
173
174USB2 ports:
175-----------
176
177Required properties:
178- status: Defines the operation status of the port. Valid values are:
179  - "disabled": the port is disabled
180  - "okay": the port is enabled
181- mode: A string that determines the mode in which to run the port. Valid
182  values are:
183  - "host": for USB host mode
184  - "device": for USB device mode
185  - "otg": for USB OTG mode
186
187Required properties for OTG/Peripheral capable USB2 ports:
188- usb-role-switch: Boolean property to indicate that the port support OTG or
189  peripheral mode. If present, the port supports switching between USB host
190  and peripheral roles. Connector should be added as subnode.
191  See usb/usb-conn-gpio.txt.
192
193Optional properties:
194- nvidia,internal: A boolean property whose presence determines that a port
195  is internal. In the absence of this property the port is considered to be
196  external.
197- vbus-supply: phandle to a regulator supplying the VBUS voltage.
198
199ULPI ports:
200-----------
201
202Optional properties:
203- status: Defines the operation status of the port. Valid values are:
204  - "disabled": the port is disabled
205  - "okay": the port is enabled
206- nvidia,internal: A boolean property whose presence determines that a port
207  is internal. In the absence of this property the port is considered to be
208  external.
209- vbus-supply: phandle to a regulator supplying the VBUS voltage.
210
211HSIC ports:
212-----------
213
214Required properties:
215- status: Defines the operation status of the port. Valid values are:
216  - "disabled": the port is disabled
217  - "okay": the port is enabled
218
219Optional properties:
220- vbus-supply: phandle to a regulator supplying the VBUS voltage.
221
222Super-speed USB ports:
223----------------------
224
225Required properties:
226- status: Defines the operation status of the port. Valid values are:
227  - "disabled": the port is disabled
228  - "okay": the port is enabled
229- nvidia,usb2-companion: A single cell that specifies the physical port number
230  to map this super-speed USB port to. The range of valid port numbers varies
231  with the SoC generation:
232  - 0-2: for Tegra124 and Tegra132
233  - 0-3: for Tegra210
234
235Optional properties:
236- nvidia,internal: A boolean property whose presence determines that a port
237  is internal. In the absence of this property the port is considered to be
238  external.
239
240- maximum-speed: Only for Tegra194. A string property that specifies maximum
241  supported speed of a usb3 port. Valid values are:
242  - "super-speed-plus": default, the usb3 port supports USB 3.1 Gen 2 speed.
243  - "super-speed": the usb3 port supports USB 3.1 Gen 1 speed only.
244
245For Tegra124 and Tegra132, the XUSB pad controller exposes the following
246ports:
247- 3x USB2: usb2-0, usb2-1, usb2-2
248- 1x ULPI: ulpi-0
249- 2x HSIC: hsic-0, hsic-1
250- 2x super-speed USB: usb3-0, usb3-1
251
252For Tegra210, the XUSB pad controller exposes the following ports:
253- 4x USB2: usb2-0, usb2-1, usb2-2, usb2-3
254- 2x HSIC: hsic-0, hsic-1
255- 4x super-speed USB: usb3-0, usb3-1, usb3-2, usb3-3
256
257For Tegra194, the XUSB pad controller exposes the following ports:
258- 4x USB2: usb2-0, usb2-1, usb2-2, usb2-3
259- 4x super-speed USB: usb3-0, usb3-1, usb3-2, usb3-3
260
261Examples:
262=========
263
264Tegra124 and Tegra132:
265----------------------
266
267SoC include:
268
269	padctl@7009f000 {
270		/* for Tegra124 */
271		compatible = "nvidia,tegra124-xusb-padctl";
272		/* for Tegra132 */
273		compatible = "nvidia,tegra132-xusb-padctl",
274			     "nvidia,tegra124-xusb-padctl";
275		reg = <0x0 0x7009f000 0x0 0x1000>;
276		resets = <&tegra_car 142>;
277		reset-names = "padctl";
278
279		pads {
280			usb2 {
281				status = "disabled";
282
283				lanes {
284					usb2-0 {
285						status = "disabled";
286						#phy-cells = <0>;
287					};
288
289					usb2-1 {
290						status = "disabled";
291						#phy-cells = <0>;
292					};
293
294					usb2-2 {
295						status = "disabled";
296						#phy-cells = <0>;
297					};
298				};
299			};
300
301			ulpi {
302				status = "disabled";
303
304				lanes {
305					ulpi-0 {
306						status = "disabled";
307						#phy-cells = <0>;
308					};
309				};
310			};
311
312			hsic {
313				status = "disabled";
314
315				lanes {
316					hsic-0 {
317						status = "disabled";
318						#phy-cells = <0>;
319					};
320
321					hsic-1 {
322						status = "disabled";
323						#phy-cells = <0>;
324					};
325				};
326			};
327
328			pcie {
329				status = "disabled";
330
331				lanes {
332					pcie-0 {
333						status = "disabled";
334						#phy-cells = <0>;
335					};
336
337					pcie-1 {
338						status = "disabled";
339						#phy-cells = <0>;
340					};
341
342					pcie-2 {
343						status = "disabled";
344						#phy-cells = <0>;
345					};
346
347					pcie-3 {
348						status = "disabled";
349						#phy-cells = <0>;
350					};
351
352					pcie-4 {
353						status = "disabled";
354						#phy-cells = <0>;
355					};
356				};
357			};
358
359			sata {
360				status = "disabled";
361
362				lanes {
363					sata-0 {
364						status = "disabled";
365						#phy-cells = <0>;
366					};
367				};
368			};
369		};
370
371		ports {
372			usb2-0 {
373				status = "disabled";
374			};
375
376			usb2-1 {
377				status = "disabled";
378			};
379
380			usb2-2 {
381				status = "disabled";
382			};
383
384			ulpi-0 {
385				status = "disabled";
386			};
387
388			hsic-0 {
389				status = "disabled";
390			};
391
392			hsic-1 {
393				status = "disabled";
394			};
395
396			usb3-0 {
397				status = "disabled";
398			};
399
400			usb3-1 {
401				status = "disabled";
402			};
403		};
404	};
405
406Board file:
407
408	padctl@7009f000 {
409		status = "okay";
410
411		pads {
412			usb2 {
413				status = "okay";
414
415				lanes {
416					usb2-0 {
417						nvidia,function = "xusb";
418						status = "okay";
419					};
420
421					usb2-1 {
422						nvidia,function = "xusb";
423						status = "okay";
424					};
425
426					usb2-2 {
427						nvidia,function = "xusb";
428						status = "okay";
429					};
430				};
431			};
432
433			pcie {
434				status = "okay";
435
436				lanes {
437					pcie-0 {
438						nvidia,function = "usb3-ss";
439						status = "okay";
440					};
441
442					pcie-2 {
443						nvidia,function = "pcie";
444						status = "okay";
445					};
446
447					pcie-4 {
448						nvidia,function = "pcie";
449						status = "okay";
450					};
451				};
452			};
453
454			sata {
455				status = "okay";
456
457				lanes {
458					sata-0 {
459						nvidia,function = "sata";
460						status = "okay";
461					};
462				};
463			};
464		};
465
466		ports {
467			/* Micro A/B */
468			usb2-0 {
469				status = "okay";
470				mode = "otg";
471			};
472
473			/* Mini PCIe */
474			usb2-1 {
475				status = "okay";
476				mode = "host";
477			};
478
479			/* USB3 */
480			usb2-2 {
481				status = "okay";
482				mode = "host";
483
484				vbus-supply = <&vdd_usb3_vbus>;
485			};
486
487			usb3-0 {
488				nvidia,port = <2>;
489				status = "okay";
490			};
491		};
492	};
493
494Tegra210:
495---------
496
497SoC include:
498
499	padctl@7009f000 {
500		compatible = "nvidia,tegra210-xusb-padctl";
501		reg = <0x0 0x7009f000 0x0 0x1000>;
502		resets = <&tegra_car 142>;
503		reset-names = "padctl";
504
505		status = "disabled";
506
507		pads {
508			usb2 {
509				clocks = <&tegra_car TEGRA210_CLK_USB2_TRK>;
510				clock-names = "trk";
511				status = "disabled";
512
513				lanes {
514					usb2-0 {
515						status = "disabled";
516						#phy-cells = <0>;
517					};
518
519					usb2-1 {
520						status = "disabled";
521						#phy-cells = <0>;
522					};
523
524					usb2-2 {
525						status = "disabled";
526						#phy-cells = <0>;
527					};
528
529					usb2-3 {
530						status = "disabled";
531						#phy-cells = <0>;
532					};
533				};
534			};
535
536			hsic {
537				clocks = <&tegra_car TEGRA210_CLK_HSIC_TRK>;
538				clock-names = "trk";
539				status = "disabled";
540
541				lanes {
542					hsic-0 {
543						status = "disabled";
544						#phy-cells = <0>;
545					};
546
547					hsic-1 {
548						status = "disabled";
549						#phy-cells = <0>;
550					};
551				};
552			};
553
554			pcie {
555				clocks = <&tegra_car TEGRA210_CLK_PLL_E>;
556				clock-names = "pll";
557				resets = <&tegra_car 205>;
558				reset-names = "phy";
559				status = "disabled";
560
561				lanes {
562					pcie-0 {
563						status = "disabled";
564						#phy-cells = <0>;
565					};
566
567					pcie-1 {
568						status = "disabled";
569						#phy-cells = <0>;
570					};
571
572					pcie-2 {
573						status = "disabled";
574						#phy-cells = <0>;
575					};
576
577					pcie-3 {
578						status = "disabled";
579						#phy-cells = <0>;
580					};
581
582					pcie-4 {
583						status = "disabled";
584						#phy-cells = <0>;
585					};
586
587					pcie-5 {
588						status = "disabled";
589						#phy-cells = <0>;
590					};
591
592					pcie-6 {
593						status = "disabled";
594						#phy-cells = <0>;
595					};
596				};
597			};
598
599			sata {
600				clocks = <&tegra_car TEGRA210_CLK_PLL_E>;
601				clock-names = "pll";
602				resets = <&tegra_car 204>;
603				reset-names = "phy";
604				status = "disabled";
605
606				lanes {
607					sata-0 {
608						status = "disabled";
609						#phy-cells = <0>;
610					};
611				};
612			};
613		};
614
615		ports {
616			usb2-0 {
617				status = "disabled";
618			};
619
620			usb2-1 {
621				status = "disabled";
622			};
623
624			usb2-2 {
625				status = "disabled";
626			};
627
628			usb2-3 {
629				status = "disabled";
630			};
631
632			hsic-0 {
633				status = "disabled";
634			};
635
636			hsic-1 {
637				status = "disabled";
638			};
639
640			usb3-0 {
641				status = "disabled";
642			};
643
644			usb3-1 {
645				status = "disabled";
646			};
647
648			usb3-2 {
649				status = "disabled";
650			};
651
652			usb3-3 {
653				status = "disabled";
654			};
655		};
656	};
657
658Board file:
659
660	padctl@7009f000 {
661		status = "okay";
662
663		pads {
664			usb2 {
665				status = "okay";
666
667				lanes {
668					usb2-0 {
669						nvidia,function = "xusb";
670						status = "okay";
671					};
672
673					usb2-1 {
674						nvidia,function = "xusb";
675						status = "okay";
676					};
677
678					usb2-2 {
679						nvidia,function = "xusb";
680						status = "okay";
681					};
682
683					usb2-3 {
684						nvidia,function = "xusb";
685						status = "okay";
686					};
687				};
688			};
689
690			pcie {
691				status = "okay";
692
693				lanes {
694					pcie-0 {
695						nvidia,function = "pcie-x1";
696						status = "okay";
697					};
698
699					pcie-1 {
700						nvidia,function = "pcie-x4";
701						status = "okay";
702					};
703
704					pcie-2 {
705						nvidia,function = "pcie-x4";
706						status = "okay";
707					};
708
709					pcie-3 {
710						nvidia,function = "pcie-x4";
711						status = "okay";
712					};
713
714					pcie-4 {
715						nvidia,function = "pcie-x4";
716						status = "okay";
717					};
718
719					pcie-5 {
720						nvidia,function = "usb3-ss";
721						status = "okay";
722					};
723
724					pcie-6 {
725						nvidia,function = "usb3-ss";
726						status = "okay";
727					};
728				};
729			};
730
731			sata {
732				status = "okay";
733
734				lanes {
735					sata-0 {
736						nvidia,function = "sata";
737						status = "okay";
738					};
739				};
740			};
741		};
742
743		ports {
744			usb2-0 {
745				status = "okay";
746				mode = "otg";
747			};
748
749			usb2-1 {
750				status = "okay";
751				vbus-supply = <&vdd_5v0_rtl>;
752				mode = "host";
753			};
754
755			usb2-2 {
756				status = "okay";
757				vbus-supply = <&vdd_usb_vbus>;
758				mode = "host";
759			};
760
761			usb2-3 {
762				status = "okay";
763				mode = "host";
764			};
765
766			usb3-0 {
767				status = "okay";
768				nvidia,lanes = "pcie-6";
769				nvidia,port = <1>;
770			};
771
772			usb3-1 {
773				status = "okay";
774				nvidia,lanes = "pcie-5";
775				nvidia,port = <2>;
776			};
777		};
778	};
779