요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Device tree binding for NVIDIA Tegra XUSB pad controller
========================================================
NOTE: It turns out that this binding isn't an accurate description of the XUSB
pad controller. While the description is good enough for the functional subset
required for PCIe and SATA, it lacks the flexibility to represent the features
needed for USB. For the new binding, see ../phy/nvidia,tegra-xusb-padctl.txt.
The binding described in this file is deprecated and should not be used.
The Tegra XUSB pad controller manages a set of lanes, each of which can be
assigned to one out of a set of different pads. Some of these pads have an
associated PHY that must be powered up before the pad can be used.
This document defines the device-specific binding for the XUSB pad controller.
Refer to pinctrl-bindings.txt in this directory for generic information about
pin controller device tree bindings and ../phy/phy-bindings.txt for details on
how to describe and reference PHYs in device trees.
Required properties:
--------------------
- compatible: For Tegra124, must contain "nvidia,tegra124-xusb-padctl".
Otherwise, must contain '"nvidia,<chip>-xusb-padctl",
"nvidia-tegra124-xusb-padctl"', where <chip> is tegra132 or tegra210.
- reg: Physical base address and length of the controller's registers.
- resets: Must contain an entry for each entry in reset-names.
See ../reset/reset.txt for details.
- reset-names: Must include the following entries:
- padctl
- #phy-cells: Should be 1. The specifier is the index of the PHY to reference.
See <dt-bindings/pinctrl/pinctrl-tegra-xusb.h> for the list of valid values.
Lane muxing:
------------
Child nodes contain the pinmux configurations following the conventions from
the pinctrl-bindings.txt document. Typically a single, static configuration is
given and applied at boot time.
Each subnode describes groups of lanes along with parameters and pads that
they should be assigned to. The name of these subnodes is not important. All
subnodes should be parsed solely based on their content.
Each subnode only applies the parameters that are explicitly listed. In other
words, if a subnode that lists a function but no pin configuration parameters
implies no information about any pin configuration parameters. Similarly, a
subnode that describes only an IDDQ parameter implies no information about
what function the pins are assigned to. For this reason even seemingly boolean
values are actually tristates in this binding: unspecified, off or on.
Unspecified is represented as an absent property, and off/on are represented
as integer values 0 and 1.
Required properties:
- nvidia,lanes: An array of strings. Each string is the name of a lane.
Optional properties:
- nvidia,function: A string that is the name of the function (pad) that the
pin or group should be assigned to. Valid values for function names are
listed below.
- nvidia,iddq: Enables IDDQ mode of the lane. (0: no, 1: yes)
Note that not all of these properties are valid for all lanes. Lanes can be
divided into three groups:
- otg-0, otg-1, otg-2:
Valid functions for this group are: "snps", "xusb", "uart", "rsvd".
The nvidia,iddq property does not apply to this group.
- ulpi-0, hsic-0, hsic-1:
Valid functions for this group are: "snps", "xusb".
The nvidia,iddq property does not apply to this group.
- pcie-0, pcie-1, pcie-2, pcie-3, pcie-4, sata-0:
Valid functions for this group are: "pcie", "usb3", "sata", "rsvd".
Example:
========
SoC file extract:
-----------------
padctl@7009f000 {
compatible = "nvidia,tegra124-xusb-padctl";
reg = <0x0 0x7009f000 0x0 0x1000>;
resets = <&tegra_car 142>;
reset-names = "padctl";
#phy-cells = <1>;
};
Board file extract:
-------------------
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>;
};
};
};
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-32Tegra124의 `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-61Child 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-81Lane은 세 group으로 나뉘며 group마다 유효한 function과 `nvidia,iddq` 적용 여부가 다릅니다.
| Group | Lanes | Valid functions | nvidia,iddq |
|---|---|---|---|
| OTG | otg-0, otg-1, otg-2 | snps, xusb, uart, rsvd | 적용되지 않음 |
| ULPI/HSIC | ulpi-0, hsic-0, hsic-1 | snps, xusb | 적용되지 않음 |
| PCIe/SATA | pcie-0, pcie-1, pcie-2, pcie-3, pcie-4, sata-0 | pcie, usb3, sata, rsvd | 사용 가능 |
SoC file 예제
82-96Tegra124 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-135PCIe 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>;
};
};
};
요약과 해설
nvidia,tegra124-xusb-padctl.txt:1-135새 PHY binding으로 대체된 이유와 lane group별 function·tristate IDDQ 동작을 설명합니다.