← Documents Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

Imagination Technologies Pistachio Pin Controllers

Pistachio GPIO·interrupt·pinmux·pinconf 복합 controller binding입니다.

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

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

1. 요약·해설

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

요약과 해설

img,pistachio-pinctrl.txt:1-217

GPIO bank 규칙, pinconf 속성, 99개 pin/function 표와 UART0 예제를 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 Imagination Technologies Pistachio SoC pin controllers
2 ======================================================
3
4 The pin controllers on Pistachio are a combined GPIO controller, (GPIO)
5 interrupt controller, and pinmux + pinconf device. The system ("east") pin
6 controller on Pistachio has 99 pins, 90 of which are MFIOs which can be
7 configured as GPIOs. The 90 GPIOs are divided into 6 banks of up to 16 GPIOs
8 each. The GPIO banks are represented as sub-nodes of the pad controller node.
9
10 Please refer to pinctrl-bindings.txt, ../gpio/gpio.txt, and
11 ../interrupt-controller/interrupts.txt for generic information regarding
12 pin controller, GPIO, and interrupt bindings.
13
14 Required properties for pin controller node:
15 --------------------------------------------
16 - compatible: "img,pistachio-system-pinctrl".
17 - reg: Address range of the pinctrl registers.
18
19 Required properties for GPIO bank sub-nodes:
20 --------------------------------------------
21 - interrupts: Interrupt line for the GPIO bank.
22 - gpio-controller: Indicates the device is a GPIO controller.
23 - #gpio-cells: Must be two. The first cell is the GPIO pin number and the
24 second cell indicates the polarity. See <dt-bindings/gpio/gpio.h> for
25 a list of possible values.
26 - interrupt-controller: Indicates the device is an interrupt controller.
27 - #interrupt-cells: Must be two. The first cell is the GPIO pin number and
28 the second cell encodes the interrupt flags. See
29 <dt-bindings/interrupt-controller/irq.h> for a list of valid flags.
30
31 Note that the N GPIO bank sub-nodes *must* be named gpio0, gpio1, ... gpioN-1.
32
33 Required properties for pin configuration sub-nodes:
34 ----------------------------------------------------
35 - pins: List of pins to which the configuration applies. See below for a
36 list of possible pins.
37
38 Optional properties for pin configuration sub-nodes:
39 ----------------------------------------------------
40 - function: Mux function for the specified pins. This is not applicable for
41 non-MFIO pins. See below for a list of valid functions for each pin.
42 - bias-high-impedance: Enable high-impedance mode.
43 - bias-pull-up: Enable weak pull-up.
44 - bias-pull-down: Enable weak pull-down.
45 - bias-bus-hold: Enable bus-keeper mode.
46 - drive-strength: Drive strength in mA. Supported values: 2, 4, 8, 12.
47 - input-schmitt-enable: Enable Schmitt trigger.
48 - input-schmitt-disable: Disable Schmitt trigger.
49 - slew-rate: Slew rate control. 0 for slow, 1 for fast.
50
51 Pin Functions
52 --- ---------
53 mfio0 spim1
54 mfio1 spim1, spim0, uart1
55 mfio2 spim1, spim0, uart1
56 mfio3 spim1
57 mfio4 spim1
58 mfio5 spim1
59 mfio6 spim1
60 mfio7 spim1
61 mfio8 spim0
62 mfio9 spim0
63 mfio10 spim0
64 mfio11 spis
65 mfio12 spis
66 mfio13 spis
67 mfio14 spis
68 mfio15 sdhost, mips_trace_clk, mips_trace_data
69 mfio16 sdhost, mips_trace_dint, mips_trace_data
70 mfio17 sdhost, mips_trace_trigout, mips_trace_data
71 mfio18 sdhost, mips_trace_trigin, mips_trace_data
72 mfio19 sdhost, mips_trace_dm, mips_trace_data
73 mfio20 sdhost, mips_trace_probe_n, mips_trace_data
74 mfio21 sdhost, mips_trace_data
75 mfio22 sdhost, mips_trace_data
76 mfio23 sdhost
77 mfio24 sdhost
78 mfio25 sdhost
79 mfio26 sdhost
80 mfio27 sdhost
81 mfio28 i2c0, spim0
82 mfio29 i2c0, spim0
83 mfio30 i2c1, spim0
84 mfio31 i2c1, spim1
85 mfio32 i2c2
86 mfio33 i2c2
87 mfio34 i2c3
88 mfio35 i2c3
89 mfio36 i2s_out, audio_clk_in
90 mfio37 i2s_out, debug_raw_cca_ind
91 mfio38 i2s_out, debug_ed_sec20_cca_ind
92 mfio39 i2s_out, debug_ed_sec40_cca_ind
93 mfio40 i2s_out, debug_agc_done_0
94 mfio41 i2s_out, debug_agc_done_1
95 mfio42 i2s_out, debug_ed_cca_ind
96 mfio43 i2s_out, debug_s2l_done
97 mfio44 i2s_out
98 mfio45 i2s_dac_clk, audio_sync
99 mfio46 audio_trigger
100 mfio47 i2s_in
101 mfio48 i2s_in
102 mfio49 i2s_in
103 mfio50 i2s_in
104 mfio51 i2s_in
105 mfio52 i2s_in
106 mfio53 i2s_in
107 mfio54 i2s_in, spdif_in
108 mfio55 uart0, spim0, spim1
109 mfio56 uart0, spim0, spim1
110 mfio57 uart0, spim0, spim1
111 mfio58 uart0, spim1
112 mfio59 uart1
113 mfio60 uart1
114 mfio61 spdif_out
115 mfio62 spdif_in
116 mfio63 eth, mips_trace_clk, mips_trace_data
117 mfio64 eth, mips_trace_dint, mips_trace_data
118 mfio65 eth, mips_trace_trigout, mips_trace_data
119 mfio66 eth, mips_trace_trigin, mips_trace_data
120 mfio67 eth, mips_trace_dm, mips_trace_data
121 mfio68 eth, mips_trace_probe_n, mips_trace_data
122 mfio69 eth, mips_trace_data
123 mfio70 eth, mips_trace_data
124 mfio71 eth
125 mfio72 ir
126 mfio73 pwmpdm, mips_trace_clk, sram_debug
127 mfio74 pwmpdm, mips_trace_dint, sram_debug
128 mfio75 pwmpdm, mips_trace_trigout, rom_debug
129 mfio76 pwmpdm, mips_trace_trigin, rom_debug
130 mfio77 mdc_debug, mips_trace_dm, rpu_debug
131 mfio78 mdc_debug, mips_trace_probe_n, rpu_debug
132 mfio79 ddr_debug, mips_trace_data, mips_debug
133 mfio80 ddr_debug, mips_trace_data, mips_debug
134 mfio81 dreq0, mips_trace_data, eth_debug
135 mfio82 dreq1, mips_trace_data, eth_debug
136 mfio83 mips_pll_lock, mips_trace_data, usb_debug
137 mfio84 audio_pll_lock, mips_trace_data, usb_debug
138 mfio85 rpu_v_pll_lock, mips_trace_data, sdhost_debug
139 mfio86 rpu_l_pll_lock, mips_trace_data, sdhost_debug
140 mfio87 sys_pll_lock, dreq2, socif_debug
141 mfio88 wifi_pll_lock, dreq3, socif_debug
142 mfio89 bt_pll_lock, dreq4, dreq5
143 tck
144 trstn
145 tdi
146 tms
147 tdo
148 jtag_comply
149 safe_mode
150 por_disable
151 resetn
152
153 Example:
154 --------
155 pinctrl@18101c00 {
156 compatible = "img,pistachio-system-pinctrl";
157 reg = <0x18101C00 0x400>;
158
159 gpio0: gpio0 {
160 interrupts = <GIC_SHARED 71 IRQ_TYPE_LEVEL_HIGH>;
161
162 gpio-controller;
163 #gpio-cells = <2>;
164
165 interrupt-controller;
166 #interrupt-cells = <2>;
167 };
168
169 ...
170
171 gpio5: gpio5 {
172 interrupts = <GIC_SHARED 76 IRQ_TYPE_LEVEL_HIGH>;
173
174 gpio-controller;
175 #gpio-cells = <2>;
176
177 interrupt-controller;
178 #interrupt-cells = <2>;
179 };
180
181 ...
182
183 uart0_xfer: uart0-xfer {
184 uart0-rxd {
185 pins = "mfio55";
186 function = "uart0";
187 };
188 uart0-txd {
189 pins = "mfio56";
190 function = "uart0";
191 };
192 };
193
194 uart0_rts_cts: uart0-rts-cts {
195 uart0-rts {
196 pins = "mfio57";
197 function = "uart0";
198 };
199 uart0-cts {
200 pins = "mfio58";
201 function = "uart0";
202 };
203 };
204 };
205
206 uart@... {
207 ...
208 pinctrl-names = "default";
209 pinctrl-0 = <&uart0_xfer>, <&uart0_rts_cts>;
210 ...
211 };
212
213 usb_vbus: fixed-regulator {
214 ...
215 gpio = <&gpio5 6 GPIO_ACTIVE_HIGH>;
216 ...
217 };
218

3. 한국어 전문 번역

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

Pistachio 복합 pin controller

1-12

Pistachio의 pin controller는 GPIO controller, GPIO interrupt controller, pinmux와 pinconf device를 결합한 장치입니다.

Pistachio의 system 또는 east pin controller에는 pin 99개가 있고, 그중 MFIO 90개를 GPIO로 구성할 수 있습니다. GPIO 90개는 각각 최대 16개 GPIO를 갖는 bank 6개로 나뉘며, 각 bank는 pad controller 노드의 하위 노드로 표현합니다.

공통 pin controller, GPIO, interrupt binding은 각각 `pinctrl-bindings.txt`, `../gpio/gpio.txt`, `../interrupt-controller/interrupts.txt`를 참조합니다.

Controller와 GPIO bank 필수 속성

13-31

Pin controller 노드의 필수 `compatible` 값은 `img,pistachio-system-pinctrl`이며 `reg`에는 pinctrl register 주소 범위를 지정합니다.

GPIO bank 하위 노드의 `interrupts`는 bank의 interrupt line을 지정합니다. `gpio-controller`와 `interrupt-controller`는 각각 GPIO controller와 interrupt controller임을 표시합니다.

`#gpio-cells`는 2여야 합니다. 첫 cell은 GPIO pin 번호이고 둘째 cell은 polarity이며 가능한 값은 `dt-bindings/gpio/gpio.h`를 따릅니다. `#interrupt-cells`도 2여야 하며 첫 cell은 GPIO pin 번호, 둘째 cell은 interrupt flag이고 유효한 값은 `dt-bindings/interrupt-controller/irq.h`를 따릅니다.

GPIO bank 하위 노드 N개는 반드시 `gpio0`, `gpio1`, ... `gpioN-1` 형식으로 이름을 붙여야 합니다.

Pin configuration 속성

32-50

Pin configuration 하위 노드의 필수 `pins`는 설정을 적용할 pin 목록입니다.

선택 `function`은 지정한 pin의 mux function이며 MFIO가 아닌 pin에는 적용되지 않습니다. 유효한 pin별 function은 다음 표에 있습니다.

`bias-high-impedance`, `bias-pull-up`, `bias-pull-down`, `bias-bus-hold`는 각각 high-impedance, weak pull-up, weak pull-down, bus-keeper mode를 켭니다.

`drive-strength`는 mA 단위이며 2, 4, 8, 12를 지원합니다. `input-schmitt-enable`과 `input-schmitt-disable`은 Schmitt trigger를 켜거나 끕니다. `slew-rate`는 0이면 slow, 1이면 fast입니다.

Pistachio pin과 function 전체 표

51-152

MFIO0부터 MFIO89까지의 mux function과 JTAG·reset 관련 고정 pin을 원문 순서로 정리한 전체 표입니다. Function이 비어 있는 행은 문서에 별도 mux function이 열거되지 않은 pin입니다.

PinFunctions
mfio0spim1
mfio1spim1, spim0, uart1
mfio2spim1, spim0, uart1
mfio3spim1
mfio4spim1
mfio5spim1
mfio6spim1
mfio7spim1
mfio8spim0
mfio9spim0
mfio10spim0
mfio11spis
mfio12spis
mfio13spis
mfio14spis
mfio15sdhost, mips_trace_clk, mips_trace_data
mfio16sdhost, mips_trace_dint, mips_trace_data
mfio17sdhost, mips_trace_trigout, mips_trace_data
mfio18sdhost, mips_trace_trigin, mips_trace_data
mfio19sdhost, mips_trace_dm, mips_trace_data
mfio20sdhost, mips_trace_probe_n, mips_trace_data
mfio21sdhost, mips_trace_data
mfio22sdhost, mips_trace_data
mfio23sdhost
mfio24sdhost
mfio25sdhost
mfio26sdhost
mfio27sdhost
mfio28i2c0, spim0
mfio29i2c0, spim0
mfio30i2c1, spim0
mfio31i2c1, spim1
mfio32i2c2
mfio33i2c2
mfio34i2c3
mfio35i2c3
mfio36i2s_out, audio_clk_in
mfio37i2s_out, debug_raw_cca_ind
mfio38i2s_out, debug_ed_sec20_cca_ind
mfio39i2s_out, debug_ed_sec40_cca_ind
mfio40i2s_out, debug_agc_done_0
mfio41i2s_out, debug_agc_done_1
mfio42i2s_out, debug_ed_cca_ind
mfio43i2s_out, debug_s2l_done
mfio44i2s_out
mfio45i2s_dac_clk, audio_sync
mfio46audio_trigger
mfio47i2s_in
mfio48i2s_in
mfio49i2s_in
mfio50i2s_in
mfio51i2s_in
mfio52i2s_in
mfio53i2s_in
mfio54i2s_in, spdif_in
mfio55uart0, spim0, spim1
mfio56uart0, spim0, spim1
mfio57uart0, spim0, spim1
mfio58uart0, spim1
mfio59uart1
mfio60uart1
mfio61spdif_out
mfio62spdif_in
mfio63eth, mips_trace_clk, mips_trace_data
mfio64eth, mips_trace_dint, mips_trace_data
mfio65eth, mips_trace_trigout, mips_trace_data
mfio66eth, mips_trace_trigin, mips_trace_data
mfio67eth, mips_trace_dm, mips_trace_data
mfio68eth, mips_trace_probe_n, mips_trace_data
mfio69eth, mips_trace_data
mfio70eth, mips_trace_data
mfio71eth
mfio72ir
mfio73pwmpdm, mips_trace_clk, sram_debug
mfio74pwmpdm, mips_trace_dint, sram_debug
mfio75pwmpdm, mips_trace_trigout, rom_debug
mfio76pwmpdm, mips_trace_trigin, rom_debug
mfio77mdc_debug, mips_trace_dm, rpu_debug
mfio78mdc_debug, mips_trace_probe_n, rpu_debug
mfio79ddr_debug, mips_trace_data, mips_debug
mfio80ddr_debug, mips_trace_data, mips_debug
mfio81dreq0, mips_trace_data, eth_debug
mfio82dreq1, mips_trace_data, eth_debug
mfio83mips_pll_lock, mips_trace_data, usb_debug
mfio84audio_pll_lock, mips_trace_data, usb_debug
mfio85rpu_v_pll_lock, mips_trace_data, sdhost_debug
mfio86rpu_l_pll_lock, mips_trace_data, sdhost_debug
mfio87sys_pll_lock, dreq2, socif_debug
mfio88wifi_pll_lock, dreq3, socif_debug
mfio89bt_pll_lock, dreq4, dreq5
tck
trstn
tdi
tms
tdo
jtag_comply
safe_mode
por_disable
resetn

Pistachio GPIO와 UART0 예제

153-217

예제는 첫째와 여섯째 GPIO bank를 GPIO 및 interrupt controller로 정의하고 UART0의 Rx·Tx·RTS·CTS를 `mfio55`부터 `mfio58`에 mux합니다.

UART consumer는 두 configuration phandle을 기본 상태로 참조합니다. Fixed regulator는 `gpio5`의 GPIO 6을 active-high VBUS 제어선으로 사용합니다.

pinctrl@18101c00 {
        compatible = "img,pistachio-system-pinctrl";
        reg = <0x18101C00 0x400>;

        gpio0: gpio0 {
                interrupts = <GIC_SHARED 71 IRQ_TYPE_LEVEL_HIGH>;

                gpio-controller;
                #gpio-cells = <2>;

                interrupt-controller;
                #interrupt-cells = <2>;
        };

        ...

        gpio5: gpio5 {
                interrupts = <GIC_SHARED 76 IRQ_TYPE_LEVEL_HIGH>;

                gpio-controller;
                #gpio-cells = <2>;

                interrupt-controller;
                #interrupt-cells = <2>;
        };

        ...

        uart0_xfer: uart0-xfer {
                uart0-rxd {
                        pins = "mfio55";
                        function = "uart0";
                };
                uart0-txd {
                        pins = "mfio56";
                        function = "uart0";
                };
        };

        uart0_rts_cts: uart0-rts-cts {
                uart0-rts {
                          pins = "mfio57";
                          function = "uart0";
                };
                uart0-cts {
                          pins = "mfio58";
                          function = "uart0";
                };
        };
};

uart@... {
        ...
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_xfer>, <&uart0_rts_cts>;
        ...
};

usb_vbus: fixed-regulator {
        ...
        gpio = <&gpio5 6 GPIO_ACTIVE_HIGH>;
        ...
};