요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Imagination Technologies Pistachio SoC pin controllers
======================================================
The pin controllers on Pistachio are a combined GPIO controller, (GPIO)
interrupt controller, and pinmux + pinconf device. The system ("east") pin
controller on Pistachio has 99 pins, 90 of which are MFIOs which can be
configured as GPIOs. The 90 GPIOs are divided into 6 banks of up to 16 GPIOs
each. The GPIO banks are represented as sub-nodes of the pad controller node.
Please refer to pinctrl-bindings.txt, ../gpio/gpio.txt, and
../interrupt-controller/interrupts.txt for generic information regarding
pin controller, GPIO, and interrupt bindings.
Required properties for pin controller node:
--------------------------------------------
- compatible: "img,pistachio-system-pinctrl".
- reg: Address range of the pinctrl registers.
Required properties for GPIO bank sub-nodes:
--------------------------------------------
- interrupts: Interrupt line for the GPIO bank.
- gpio-controller: Indicates the device is a GPIO controller.
- #gpio-cells: Must be two. The first cell is the GPIO pin number and the
second cell indicates the polarity. See <dt-bindings/gpio/gpio.h> for
a list of possible values.
- interrupt-controller: Indicates the device is an interrupt controller.
- #interrupt-cells: Must be two. The first cell is the GPIO pin number and
the second cell encodes the interrupt flags. See
<dt-bindings/interrupt-controller/irq.h> for a list of valid flags.
Note that the N GPIO bank sub-nodes *must* be named gpio0, gpio1, ... gpioN-1.
Required properties for pin configuration sub-nodes:
----------------------------------------------------
- pins: List of pins to which the configuration applies. See below for a
list of possible pins.
Optional properties for pin configuration sub-nodes:
----------------------------------------------------
- function: Mux function for the specified pins. This is not applicable for
non-MFIO pins. See below for a list of valid functions for each pin.
- bias-high-impedance: Enable high-impedance mode.
- bias-pull-up: Enable weak pull-up.
- bias-pull-down: Enable weak pull-down.
- bias-bus-hold: Enable bus-keeper mode.
- drive-strength: Drive strength in mA. Supported values: 2, 4, 8, 12.
- input-schmitt-enable: Enable Schmitt trigger.
- input-schmitt-disable: Disable Schmitt trigger.
- slew-rate: Slew rate control. 0 for slow, 1 for fast.
Pin Functions
--- ---------
mfio0 spim1
mfio1 spim1, spim0, uart1
mfio2 spim1, spim0, uart1
mfio3 spim1
mfio4 spim1
mfio5 spim1
mfio6 spim1
mfio7 spim1
mfio8 spim0
mfio9 spim0
mfio10 spim0
mfio11 spis
mfio12 spis
mfio13 spis
mfio14 spis
mfio15 sdhost, mips_trace_clk, mips_trace_data
mfio16 sdhost, mips_trace_dint, mips_trace_data
mfio17 sdhost, mips_trace_trigout, mips_trace_data
mfio18 sdhost, mips_trace_trigin, mips_trace_data
mfio19 sdhost, mips_trace_dm, mips_trace_data
mfio20 sdhost, mips_trace_probe_n, mips_trace_data
mfio21 sdhost, mips_trace_data
mfio22 sdhost, mips_trace_data
mfio23 sdhost
mfio24 sdhost
mfio25 sdhost
mfio26 sdhost
mfio27 sdhost
mfio28 i2c0, spim0
mfio29 i2c0, spim0
mfio30 i2c1, spim0
mfio31 i2c1, spim1
mfio32 i2c2
mfio33 i2c2
mfio34 i2c3
mfio35 i2c3
mfio36 i2s_out, audio_clk_in
mfio37 i2s_out, debug_raw_cca_ind
mfio38 i2s_out, debug_ed_sec20_cca_ind
mfio39 i2s_out, debug_ed_sec40_cca_ind
mfio40 i2s_out, debug_agc_done_0
mfio41 i2s_out, debug_agc_done_1
mfio42 i2s_out, debug_ed_cca_ind
mfio43 i2s_out, debug_s2l_done
mfio44 i2s_out
mfio45 i2s_dac_clk, audio_sync
mfio46 audio_trigger
mfio47 i2s_in
mfio48 i2s_in
mfio49 i2s_in
mfio50 i2s_in
mfio51 i2s_in
mfio52 i2s_in
mfio53 i2s_in
mfio54 i2s_in, spdif_in
mfio55 uart0, spim0, spim1
mfio56 uart0, spim0, spim1
mfio57 uart0, spim0, spim1
mfio58 uart0, spim1
mfio59 uart1
mfio60 uart1
mfio61 spdif_out
mfio62 spdif_in
mfio63 eth, mips_trace_clk, mips_trace_data
mfio64 eth, mips_trace_dint, mips_trace_data
mfio65 eth, mips_trace_trigout, mips_trace_data
mfio66 eth, mips_trace_trigin, mips_trace_data
mfio67 eth, mips_trace_dm, mips_trace_data
mfio68 eth, mips_trace_probe_n, mips_trace_data
mfio69 eth, mips_trace_data
mfio70 eth, mips_trace_data
mfio71 eth
mfio72 ir
mfio73 pwmpdm, mips_trace_clk, sram_debug
mfio74 pwmpdm, mips_trace_dint, sram_debug
mfio75 pwmpdm, mips_trace_trigout, rom_debug
mfio76 pwmpdm, mips_trace_trigin, rom_debug
mfio77 mdc_debug, mips_trace_dm, rpu_debug
mfio78 mdc_debug, mips_trace_probe_n, rpu_debug
mfio79 ddr_debug, mips_trace_data, mips_debug
mfio80 ddr_debug, mips_trace_data, mips_debug
mfio81 dreq0, mips_trace_data, eth_debug
mfio82 dreq1, mips_trace_data, eth_debug
mfio83 mips_pll_lock, mips_trace_data, usb_debug
mfio84 audio_pll_lock, mips_trace_data, usb_debug
mfio85 rpu_v_pll_lock, mips_trace_data, sdhost_debug
mfio86 rpu_l_pll_lock, mips_trace_data, sdhost_debug
mfio87 sys_pll_lock, dreq2, socif_debug
mfio88 wifi_pll_lock, dreq3, socif_debug
mfio89 bt_pll_lock, dreq4, dreq5
tck
trstn
tdi
tms
tdo
jtag_comply
safe_mode
por_disable
resetn
Example:
--------
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>;
...
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Pistachio 복합 pin controller
1-12Pistachio의 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-31Pin 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-50Pin 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-152MFIO0부터 MFIO89까지의 mux function과 JTAG·reset 관련 고정 pin을 원문 순서로 정리한 전체 표입니다. Function이 비어 있는 행은 문서에 별도 mux function이 열거되지 않은 pin입니다.
| Pin | Functions |
|---|---|
| mfio0 | spim1 |
| mfio1 | spim1, spim0, uart1 |
| mfio2 | spim1, spim0, uart1 |
| mfio3 | spim1 |
| mfio4 | spim1 |
| mfio5 | spim1 |
| mfio6 | spim1 |
| mfio7 | spim1 |
| mfio8 | spim0 |
| mfio9 | spim0 |
| mfio10 | spim0 |
| mfio11 | spis |
| mfio12 | spis |
| mfio13 | spis |
| mfio14 | spis |
| mfio15 | sdhost, mips_trace_clk, mips_trace_data |
| mfio16 | sdhost, mips_trace_dint, mips_trace_data |
| mfio17 | sdhost, mips_trace_trigout, mips_trace_data |
| mfio18 | sdhost, mips_trace_trigin, mips_trace_data |
| mfio19 | sdhost, mips_trace_dm, mips_trace_data |
| mfio20 | sdhost, mips_trace_probe_n, mips_trace_data |
| mfio21 | sdhost, mips_trace_data |
| mfio22 | sdhost, mips_trace_data |
| mfio23 | sdhost |
| mfio24 | sdhost |
| mfio25 | sdhost |
| mfio26 | sdhost |
| mfio27 | sdhost |
| mfio28 | i2c0, spim0 |
| mfio29 | i2c0, spim0 |
| mfio30 | i2c1, spim0 |
| mfio31 | i2c1, spim1 |
| mfio32 | i2c2 |
| mfio33 | i2c2 |
| mfio34 | i2c3 |
| mfio35 | i2c3 |
| mfio36 | i2s_out, audio_clk_in |
| mfio37 | i2s_out, debug_raw_cca_ind |
| mfio38 | i2s_out, debug_ed_sec20_cca_ind |
| mfio39 | i2s_out, debug_ed_sec40_cca_ind |
| mfio40 | i2s_out, debug_agc_done_0 |
| mfio41 | i2s_out, debug_agc_done_1 |
| mfio42 | i2s_out, debug_ed_cca_ind |
| mfio43 | i2s_out, debug_s2l_done |
| mfio44 | i2s_out |
| mfio45 | i2s_dac_clk, audio_sync |
| mfio46 | audio_trigger |
| mfio47 | i2s_in |
| mfio48 | i2s_in |
| mfio49 | i2s_in |
| mfio50 | i2s_in |
| mfio51 | i2s_in |
| mfio52 | i2s_in |
| mfio53 | i2s_in |
| mfio54 | i2s_in, spdif_in |
| mfio55 | uart0, spim0, spim1 |
| mfio56 | uart0, spim0, spim1 |
| mfio57 | uart0, spim0, spim1 |
| mfio58 | uart0, spim1 |
| mfio59 | uart1 |
| mfio60 | uart1 |
| mfio61 | spdif_out |
| mfio62 | spdif_in |
| mfio63 | eth, mips_trace_clk, mips_trace_data |
| mfio64 | eth, mips_trace_dint, mips_trace_data |
| mfio65 | eth, mips_trace_trigout, mips_trace_data |
| mfio66 | eth, mips_trace_trigin, mips_trace_data |
| mfio67 | eth, mips_trace_dm, mips_trace_data |
| mfio68 | eth, mips_trace_probe_n, mips_trace_data |
| mfio69 | eth, mips_trace_data |
| mfio70 | eth, mips_trace_data |
| mfio71 | eth |
| mfio72 | ir |
| mfio73 | pwmpdm, mips_trace_clk, sram_debug |
| mfio74 | pwmpdm, mips_trace_dint, sram_debug |
| mfio75 | pwmpdm, mips_trace_trigout, rom_debug |
| mfio76 | pwmpdm, mips_trace_trigin, rom_debug |
| mfio77 | mdc_debug, mips_trace_dm, rpu_debug |
| mfio78 | mdc_debug, mips_trace_probe_n, rpu_debug |
| mfio79 | ddr_debug, mips_trace_data, mips_debug |
| mfio80 | ddr_debug, mips_trace_data, mips_debug |
| mfio81 | dreq0, mips_trace_data, eth_debug |
| mfio82 | dreq1, mips_trace_data, eth_debug |
| mfio83 | mips_pll_lock, mips_trace_data, usb_debug |
| mfio84 | audio_pll_lock, mips_trace_data, usb_debug |
| mfio85 | rpu_v_pll_lock, mips_trace_data, sdhost_debug |
| mfio86 | rpu_l_pll_lock, mips_trace_data, sdhost_debug |
| mfio87 | sys_pll_lock, dreq2, socif_debug |
| mfio88 | wifi_pll_lock, dreq3, socif_debug |
| mfio89 | bt_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>;
...
};
요약과 해설
img,pistachio-pinctrl.txt:1-217GPIO bank 규칙, pinconf 속성, 99개 pin/function 표와 UART0 예제를 설명합니다.