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