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