← Documents Documentation/devicetree/bindings/pinctrl/ti,iodelay.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

TI DRA7 IODELAY Controller

DRA7 기반 SoC에서 kernel이 pin별 I/O delay를 동적으로 설정하는 binding입니다.

Source pathDocumentation/devicetree/bindings/pinctrl/ti,iodelay.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

ti,iodelay.txt:1-47

Controller cell 계약과 MMC2 3.3V pad의 A/G delay 값을 보존해 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 * Pin configuration for TI IODELAY controller
2
3 TI dra7 based SoCs such as am57xx have a controller for setting the IO delay
4 for each pin. For most part the IO delay values are programmed by the bootloader,
5 but some pins need to be configured dynamically by the kernel such as the
6 MMC pins.
7
8 Required Properties:
9
10 - compatible: Must be "ti,dra7-iodelay"
11 - reg: Base address and length of the memory resource used
12 - #address-cells: Number of address cells
13 - #size-cells: Size of cells
14 - #pinctrl-cells: Number of pinctrl cells, must be 2. See also
15 Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
16
17 Example
18 -------
19
20 In the SoC specific dtsi file:
21
22 dra7_iodelay_core: padconf@4844a000 {
23 compatible = "ti,dra7-iodelay";
24 reg = <0x4844a000 0x0d1c>;
25 #address-cells = <1>;
26 #size-cells = <0>;
27 #pinctrl-cells = <2>;
28 };
29
30 In board-specific file:
31
32 &dra7_iodelay_core {
33 mmc2_iodelay_3v3_conf: mmc2_iodelay_3v3_conf {
34 pinctrl-pin-array = <
35 0x18c A_DELAY_PS(0) G_DELAY_PS(120) /* CFG_GPMC_A19_IN */
36 0x1a4 A_DELAY_PS(265) G_DELAY_PS(360) /* CFG_GPMC_A20_IN */
37 0x1b0 A_DELAY_PS(0) G_DELAY_PS(120) /* CFG_GPMC_A21_IN */
38 0x1bc A_DELAY_PS(0) G_DELAY_PS(120) /* CFG_GPMC_A22_IN */
39 0x1c8 A_DELAY_PS(287) G_DELAY_PS(420) /* CFG_GPMC_A23_IN */
40 0x1d4 A_DELAY_PS(144) G_DELAY_PS(240) /* CFG_GPMC_A24_IN */
41 0x1e0 A_DELAY_PS(0) G_DELAY_PS(0) /* CFG_GPMC_A25_IN */
42 0x1ec A_DELAY_PS(120) G_DELAY_PS(0) /* CFG_GPMC_A26_IN */
43 0x1f8 A_DELAY_PS(120) G_DELAY_PS(180) /* CFG_GPMC_A27_IN */
44 0x360 A_DELAY_PS(0) G_DELAY_PS(0) /* CFG_GPMC_CS1_IN */
45 >;
46 };
47 };
48

3. 한국어 전문 번역

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

DRA7 IODELAY controller

1-16

AM57xx 같은 TI DRA7 기반 SoC에는 각 pin의 I/O delay를 설정하는 controller가 있습니다. 대부분의 I/O delay 값은 bootloader가 program하지만 MMC pin처럼 kernel이 동적으로 구성해야 하는 pin도 있습니다.

필수 `compatible`은 `ti,dra7-iodelay`, `reg`는 memory resource의 base address와 length입니다. `#address-cells`는 address cell 수, `#size-cells`는 size cell 수입니다.

`#pinctrl-cells`는 pinctrl cell 수이며 반드시 2여야 합니다. 공통 계약은 `Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt`도 참조합니다.

SoC별 padconf 예제

17-29

SoC DTSI에서 DRA7 IODELAY core를 `padconf@4844a000`에 선언하고 register range와 address·size·pinctrl cell 수를 지정합니다.

dra7_iodelay_core: padconf@4844a000 {
        compatible = "ti,dra7-iodelay";
        reg = <0x4844a000 0x0d1c>;
        #address-cells = <1>;
        #size-cells = <0>;
        #pinctrl-cells = <2>;
};

MMC2 3.3V delay 예제

30-47

Board file은 MMC2 3.3V configuration에 `pinctrl-pin-array`를 사용합니다. 각 entry는 pad register offset과 `A_DELAY_PS`, `G_DELAY_PS`의 picosecond 값을 담고 GPMC A19~A27 및 CS1 input을 구성합니다.

&dra7_iodelay_core {
        mmc2_iodelay_3v3_conf: mmc2_iodelay_3v3_conf {
                pinctrl-pin-array = <
                0x18c A_DELAY_PS(0) G_DELAY_PS(120)        /* CFG_GPMC_A19_IN */
                0x1a4 A_DELAY_PS(265) G_DELAY_PS(360)        /* CFG_GPMC_A20_IN */
                0x1b0 A_DELAY_PS(0) G_DELAY_PS(120)        /* CFG_GPMC_A21_IN */
                0x1bc A_DELAY_PS(0) G_DELAY_PS(120)        /* CFG_GPMC_A22_IN */
                0x1c8 A_DELAY_PS(287) G_DELAY_PS(420)        /* CFG_GPMC_A23_IN */
                0x1d4 A_DELAY_PS(144) G_DELAY_PS(240)        /* CFG_GPMC_A24_IN */
                0x1e0 A_DELAY_PS(0) G_DELAY_PS(0)        /* CFG_GPMC_A25_IN */
                0x1ec A_DELAY_PS(120) G_DELAY_PS(0)        /* CFG_GPMC_A26_IN */
                0x1f8 A_DELAY_PS(120) G_DELAY_PS(180)        /* CFG_GPMC_A27_IN */
                0x360 A_DELAY_PS(0) G_DELAY_PS(0)        /* CFG_GPMC_CS1_IN */
                >;
        };
};