← Documents Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

NVIDIA Tegra124 XUSB Pad Controller

Deprecated Tegra XUSB padctl binding의 lane mux, PHY, IDDQ 설정입니다.

Source pathDocumentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

nvidia,tegra124-xusb-padctl.txt:1-135

새 PHY binding으로 대체된 이유와 lane group별 function·tristate IDDQ 동작을 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 Device tree binding for NVIDIA Tegra XUSB pad controller
2 ========================================================
3
4 NOTE: It turns out that this binding isn't an accurate description of the XUSB
5 pad controller. While the description is good enough for the functional subset
6 required for PCIe and SATA, it lacks the flexibility to represent the features
7 needed for USB. For the new binding, see ../phy/nvidia,tegra-xusb-padctl.txt.
8 The binding described in this file is deprecated and should not be used.
9
10 The Tegra XUSB pad controller manages a set of lanes, each of which can be
11 assigned to one out of a set of different pads. Some of these pads have an
12 associated PHY that must be powered up before the pad can be used.
13
14 This document defines the device-specific binding for the XUSB pad controller.
15
16 Refer to pinctrl-bindings.txt in this directory for generic information about
17 pin controller device tree bindings and ../phy/phy-bindings.txt for details on
18 how to describe and reference PHYs in device trees.
19
20 Required properties:
21 --------------------
22 - compatible: For Tegra124, must contain "nvidia,tegra124-xusb-padctl".
23 Otherwise, must contain '"nvidia,<chip>-xusb-padctl",
24 "nvidia-tegra124-xusb-padctl"', where <chip> is tegra132 or tegra210.
25 - reg: Physical base address and length of the controller's registers.
26 - resets: Must contain an entry for each entry in reset-names.
27 See ../reset/reset.txt for details.
28 - reset-names: Must include the following entries:
29 - padctl
30 - #phy-cells: Should be 1. The specifier is the index of the PHY to reference.
31 See <dt-bindings/pinctrl/pinctrl-tegra-xusb.h> for the list of valid values.
32
33 Lane muxing:
34 ------------
35
36 Child nodes contain the pinmux configurations following the conventions from
37 the pinctrl-bindings.txt document. Typically a single, static configuration is
38 given and applied at boot time.
39
40 Each subnode describes groups of lanes along with parameters and pads that
41 they should be assigned to. The name of these subnodes is not important. All
42 subnodes should be parsed solely based on their content.
43
44 Each subnode only applies the parameters that are explicitly listed. In other
45 words, if a subnode that lists a function but no pin configuration parameters
46 implies no information about any pin configuration parameters. Similarly, a
47 subnode that describes only an IDDQ parameter implies no information about
48 what function the pins are assigned to. For this reason even seemingly boolean
49 values are actually tristates in this binding: unspecified, off or on.
50 Unspecified is represented as an absent property, and off/on are represented
51 as integer values 0 and 1.
52
53 Required properties:
54 - nvidia,lanes: An array of strings. Each string is the name of a lane.
55
56 Optional properties:
57 - nvidia,function: A string that is the name of the function (pad) that the
58 pin or group should be assigned to. Valid values for function names are
59 listed below.
60 - nvidia,iddq: Enables IDDQ mode of the lane. (0: no, 1: yes)
61
62 Note that not all of these properties are valid for all lanes. Lanes can be
63 divided into three groups:
64
65 - otg-0, otg-1, otg-2:
66
67 Valid functions for this group are: "snps", "xusb", "uart", "rsvd".
68
69 The nvidia,iddq property does not apply to this group.
70
71 - ulpi-0, hsic-0, hsic-1:
72
73 Valid functions for this group are: "snps", "xusb".
74
75 The nvidia,iddq property does not apply to this group.
76
77 - pcie-0, pcie-1, pcie-2, pcie-3, pcie-4, sata-0:
78
79 Valid functions for this group are: "pcie", "usb3", "sata", "rsvd".
80
81
82 Example:
83 ========
84
85 SoC file extract:
86 -----------------
87
88 padctl@7009f000 {
89 compatible = "nvidia,tegra124-xusb-padctl";
90 reg = <0x0 0x7009f000 0x0 0x1000>;
91 resets = <&tegra_car 142>;
92 reset-names = "padctl";
93
94 #phy-cells = <1>;
95 };
96
97 Board file extract:
98 -------------------
99
100 pcie-controller@1003000 {
101 ...
102
103 phys = <&padctl 0>;
104 phy-names = "pcie";
105
106 ...
107 };
108
109 ...
110
111 padctl: padctl@7009f000 {
112 pinctrl-0 = <&padctl_default>;
113 pinctrl-names = "default";
114
115 padctl_default: pinmux {
116 usb3 {
117 nvidia,lanes = "pcie-0", "pcie-1";
118 nvidia,function = "usb3";
119 nvidia,iddq = <0>;
120 };
121
122 pcie {
123 nvidia,lanes = "pcie-2", "pcie-3",
124 "pcie-4";
125 nvidia,function = "pcie";
126 nvidia,iddq = <0>;
127 };
128
129 sata {
130 nvidia,lanes = "sata-0";
131 nvidia,function = "sata";
132 nvidia,iddq = <0>;
133 };
134 };
135 };
136

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Deprecated XUSB pad controller binding

1-19

이 binding은 XUSB pad controller를 정확히 설명하지 못합니다. PCIe와 SATA에 필요한 기능 부분에는 충분하지만 USB 기능을 표현할 유연성이 없습니다. 새 binding은 `../phy/nvidia,tegra-xusb-padctl.txt`를 참조해야 하며, 이 문서의 binding은 deprecated 상태라 사용하면 안 됩니다.

Tegra XUSB pad controller는 lane 집합을 관리하고 각 lane을 여러 pad 중 하나에 할당합니다. 일부 pad에는 사용 전에 power를 켜야 하는 PHY가 연결됩니다.

이 문서는 XUSB pad controller의 device-specific binding을 정의합니다. 일반 pin controller 정보는 같은 directory의 `pinctrl-bindings.txt`, PHY 기술과 참조 방법은 `../phy/phy-bindings.txt`를 따릅니다.

Controller 필수 속성

20-32

Tegra124의 `compatible`은 `nvidia,tegra124-xusb-padctl`을 포함해야 합니다. 그 밖에는 `<chip>`이 `tegra132` 또는 `tegra210`인 `nvidia,<chip>-xusb-padctl`과 `nvidia-tegra124-xusb-padctl`을 포함해야 합니다.

`reg`는 controller register의 physical base와 길이입니다. `resets`는 `reset-names`의 각 항목에 대응해야 하고, `reset-names`에는 `padctl`이 필요합니다. `#phy-cells`는 1이며 specifier는 참조할 PHY index입니다. 유효한 값은 `<dt-bindings/pinctrl/pinctrl-tegra-xusb.h>`에 있습니다.

Lane mux subnode 의미

33-61

Child node는 `pinctrl-bindings.txt` 규칙에 따라 pinmux 구성을 담으며, 보통 boot 때 적용할 하나의 static configuration을 제공합니다. 각 subnode는 lane group, parameter, 할당할 pad를 설명하고 이름이 아니라 content만으로 해석합니다.

각 subnode는 명시한 parameter만 적용합니다. Function만 지정하면 pin configuration parameter 정보가 없고, IDDQ만 지정하면 pin의 function 할당 정보가 없습니다. 따라서 boolean처럼 보이는 값도 unspecified·off·on의 tristate입니다. Property가 없으면 unspecified, 정수 0과 1은 각각 off와 on입니다.

필수 `nvidia,lanes`는 lane 이름 문자열 배열입니다. 선택적 `nvidia,function`은 pin 또는 group에 할당할 function, 즉 pad 이름이고, `nvidia,iddq`는 lane IDDQ mode를 0 또는 1로 설정합니다.

Lane group별 function과 IDDQ

62-81

Lane은 세 group으로 나뉘며 group마다 유효한 function과 `nvidia,iddq` 적용 여부가 다릅니다.

GroupLanesValid functionsnvidia,iddq
OTGotg-0, otg-1, otg-2snps, xusb, uart, rsvd적용되지 않음
ULPI/HSICulpi-0, hsic-0, hsic-1snps, xusb적용되지 않음
PCIe/SATApcie-0, pcie-1, pcie-2, pcie-3, pcie-4, sata-0pcie, usb3, sata, rsvd사용 가능

SoC file 예제

82-96

Tegra124 pad controller의 register, reset, PHY cell 수를 선언하는 SoC file 발췌입니다.

padctl@7009f000 {
        compatible = "nvidia,tegra124-xusb-padctl";
        reg = <0x0 0x7009f000 0x0 0x1000>;
        resets = <&tegra_car 142>;
        reset-names = "padctl";

        #phy-cells = <1>;
};

Board file 예제

97-135

PCIe controller가 padctl PHY를 참조하고, default pinmux state에서 PCIe lane 0·1을 USB3로, lane 2·3·4를 PCIe로, SATA lane을 SATA로 할당하면서 각 lane의 IDDQ를 끄는 예제입니다.

pcie-controller@1003000 {
        ...

        phys = <&padctl 0>;
        phy-names = "pcie";

        ...
};

...

padctl: padctl@7009f000 {
        pinctrl-0 = <&padctl_default>;
        pinctrl-names = "default";

        padctl_default: pinmux {
                usb3 {
                        nvidia,lanes = "pcie-0", "pcie-1";
                        nvidia,function = "usb3";
                        nvidia,iddq = <0>;
                };

                pcie {
                        nvidia,lanes = "pcie-2", "pcie-3",
                                       "pcie-4";
                        nvidia,function = "pcie";
                        nvidia,iddq = <0>;
                };

                sata {
                        nvidia,lanes = "sata-0";
                        nvidia,function = "sata";
                        nvidia,iddq = <0>;
                };
        };
};