7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zynq Ultrascale+ MPSoC の pinctrl のグループとピン番号の対応

Last updated at Posted at 2018-10-19

はじめに

最近の Linux Kernel には pinctrl というデバイスドライバが追加されています。これは SoC 等の I/O pin の機能を Linux から自由に設定できるためのデバイスドライバです。

Zynq Ultrascale+ MPSoC (以下 ZynqMP) でも、Xilinx が提供している Linux Kernel の v2018.2 版から device tree に設定を記述することにより pinctrl による I/O pin の設定が可能になりました。

この記事では、ZynqMP で pinctrl を設定する際のグループ(後述)とピン番号の対応を説明します。

Zynq Ultrascale+ MPSoC の pinctrl のグループとピン番号の対応表

いきなりですが、以下の URL にグループ(後述)と I/O pin のピン番号の対応表を示します。

この対応表は markdown 形式です。しかし Qiita でこの対応表を表示しようとすると、グループ名が1文字毎に折り返されてしまってとてもとても見辛くなります。しかたがないので github の gist の方に上げてましたので、そちらの方で見てください。

pinctrl の基本的な設定方法

pinctrl の group とは

pinctrl では、幾つかの I/O pin をまとめてグループにすることが出来ます。例えば UART は TxD と RxD の2つの I/O pin を使うので、これらを UART0 というグループにまとめる等のように使います。
グループ名やグループがどの I/O pin を使うかは Linux Kernel の pinctrl デバイスドライバ等に定義されています。

pinctrl の function とは

SoC は UART や USB 等の機能を持っており、これらの機能を使う際に I/O pin を使います。pinctrl は I/O pin に SoC のどの機能(function)を割り当てるかを設定することが出来ます。
機能の名前は Linux Kernel の pinctrl デバイスドライバ等に定義されています。

function と group/pin の対応付け

device tree で function と group を対応付けるには、mux ノード内で groups プロパティにグループ名を、function プロパティに機能名を記述します。

	pinctrl0: pinctrl@ff180000 {
		compatible = "xlnx,zynqmp-pinctrl";

		pinctrl_uart1_default: uart1-default {
			mux {
				groups = "uart0_4_grp";
				function = "uart0";
			};

			conf {
				groups = "uart0_4_grp";
				slew-rate = <SLEW_RATE_SLOW>;
				io-standard = <IO_STANDARD_LVCMOS18>;
			};

			conf-rx {
				pins = "MIO18";
				bias-high-impedance;
			};

			conf-tx {
				pins = "MIO19";
				bias-disable;
				schmitt-cmos = <PIN_INPUT_TYPE_CMOS>;
			};
		};
	};

余談: ZynqMP がサポートしているグループとピン番号の配置を調べてみた話

device tree を自分で記述する際は、ZynqMP がどのようなグループ名を持っていて、そのグループがどの I/O pin を使うかを知る必要があります。ここでは、これらの情報をどのように得たかを説明します。

Linux Kernel 編

まずは、Linux Kernel のソースコードを調べてみましょう。ここで見ている Linux Kernel は、Xilinx が提供している Linux Kernel の v2018.2 版です。次のようにしてダウンロードしました。

shell$ git clone --depth 1 -b xilinx-v2018.2 https://github.com/Xilinx/linux-xlnx.git linux-xlnx-v2018.2-zynqmp-fpga

Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.txt

Linux Kernel のソースコードに Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.txt というドキュメントがあります。ここに ZynqMP がサポートしているグループ名があります。以下に引用します。

Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.txt より抜粋(ちょっと長いので折り畳み)

Valid values for groups are:
ethernet0_0_grp, ethernet1_0_grp, ethernet2_0_grp,
ethernet3_0_grp, gemtsu0_0_grp, gemtsu0_1_grp,
gemtsu0_2_grp, mdio0_0_grp, mdio1_0_grp,
mdio1_1_grp, mdio2_0_grp, mdio3_0_grp,
qspi0_0_grp, qspi_ss_0_grp, qspi_fbclk_0_grp,
spi0_0_grp, spi0_ss_0_grp, spi0_ss_1_grp,
spi0_ss_2_grp, spi0_1_grp, spi0_ss_3_grp,
spi0_ss_4_grp, spi0_ss_5_grp, spi0_2_grp,
spi0_ss_6_grp, spi0_ss_7_grp, spi0_ss_8_grp,
spi0_3_grp, spi0_ss_9_grp, spi0_ss_10_grp,
spi0_ss_11_grp, spi0_4_grp, spi0_ss_12_grp,
spi0_ss_13_grp, spi0_ss_14_grp, spi0_5_grp,
spi0_ss_15_grp, spi0_ss_16_grp, spi0_ss_17_grp,
spi1_0_grp, spi1_ss_0_grp, spi1_ss_1_grp,
spi1_ss_2_grp, spi1_1_grp, spi1_ss_3_grp,
spi1_ss_4_grp, spi1_ss_5_grp, spi1_2_grp,
spi1_ss_6_grp, spi1_ss_7_grp, spi1_ss_8_grp,
spi1_3_grp, spi1_ss_9_grp, spi1_ss_10_grp,
spi1_ss_11_grp, spi1_4_grp, spi1_ss_12_grp,
spi1_ss_13_grp, spi1_ss_14_grp, spi1_5_grp,
spi1_ss_15_grp, spi1_ss_16_grp, spi1_ss_17_grp,
sdio0_0_grp, sdio0_1_grp, sdio0_2_grp,
sdio0_3_grp, sdio0_4_grp, sdio0_5_grp,
sdio0_6_grp, sdio0_7_grp, sdio0_8_grp,
sdio0_9_grp, sdio0_10_grp, sdio0_11_grp,
sdio0_12_grp, sdio0_13_grp, sdio0_14_grp,
sdio0_15_grp, sdio0_16_grp, sdio0_17_grp,
sdio0_18_grp, sdio0_19_grp, sdio0_20_grp,
sdio0_21_grp, sdio0_22_grp, sdio0_23_grp,
sdio0_24_grp, sdio0_25_grp, sdio0_26_grp,
sdio0_27_grp, sdio0_28_grp, sdio0_29_grp,
sdio0_30_grp, sdio0_31_grp, sdio0_32_grp,
sdio0_pc_0_grp, sdio0_cd_0_grp, sdio0_wp_0_grp,
sdio0_pc_1_grp, sdio0_cd_1_grp, sdio0_wp_1_grp,
sdio0_pc_2_grp, sdio0_cd_2_grp, sdio0_wp_2_grp,
sdio1_0_grp, sdio1_1_grp, sdio1_2_grp,
sdio1_3_grp, sdio1_4_grp, sdio1_5_grp,
sdio1_6_grp, sdio1_7_grp, sdio1_8_grp,
sdio1_9_grp, sdio1_10_grp, sdio1_11_grp,
sdio1_12_grp, sdio1_13_grp, sdio1_14_grp,
sdio1_15_grp, sdio1_pc_0_grp, sdio1_cd_0_grp,
sdio1_wp_0_grp, sdio1_pc_1_grp, sdio1_cd_1_grp,
sdio1_wp_1_grp, nand0_0_grp, nand0_ce_0_grp,
nand0_rb_0_grp, nand0_dqs_0_grp, nand0_ce_1_grp,
nand0_rb_1_grp, nand0_dqs_1_grp, can0_0_grp,
can0_1_grp, can0_2_grp, can0_3_grp,
can0_4_grp, can0_5_grp, can0_6_grp,
can0_7_grp, can0_8_grp, can0_9_grp,
can0_10_grp, can0_11_grp, can0_12_grp,
can0_13_grp, can0_14_grp, can0_15_grp,
can0_16_grp, can0_17_grp, can0_18_grp,
can1_0_grp, can1_1_grp, can1_2_grp,
can1_3_grp, can1_4_grp, can1_5_grp,
can1_6_grp, can1_7_grp, can1_8_grp,
can1_9_grp, can1_10_grp, can1_11_grp,
can1_12_grp, can1_13_grp, can1_14_grp,
can1_15_grp, can1_16_grp, can1_17_grp,
can1_18_grp, can1_19_grp, uart0_0_grp,
uart0_1_grp, uart0_2_grp, uart0_3_grp,
uart0_4_grp, uart0_5_grp, uart0_6_grp,
uart0_7_grp, uart0_8_grp, uart0_9_grp,
uart0_10_grp, uart0_11_grp, uart0_12_grp,
uart0_13_grp, uart0_14_grp, uart0_15_grp,
uart0_16_grp, uart0_17_grp, uart0_18_grp,
uart1_0_grp, uart1_1_grp, uart1_2_grp,
uart1_3_grp, uart1_4_grp, uart1_5_grp,
uart1_6_grp, uart1_7_grp, uart1_8_grp,
uart1_9_grp, uart1_10_grp, uart1_11_grp,
uart1_12_grp, uart1_13_grp, uart1_14_grp,
uart1_15_grp, uart1_16_grp, uart1_17_grp,
uart1_18_grp, i2c0_0_grp, i2c0_1_grp,
i2c0_2_grp, i2c0_3_grp, i2c0_4_grp,
i2c0_5_grp, i2c0_6_grp, i2c0_7_grp,
i2c0_8_grp, i2c0_9_grp, i2c0_10_grp,
i2c0_11_grp, i2c0_12_grp, i2c0_13_grp,
i2c0_14_grp, i2c0_15_grp, i2c0_16_grp,
i2c0_17_grp, i2c0_18_grp, i2c1_0_grp,
i2c1_1_grp, i2c1_2_grp, i2c1_3_grp,
i2c1_4_grp, i2c1_5_grp, i2c1_6_grp,
i2c1_7_grp, i2c1_8_grp, i2c1_9_grp,
i2c1_10_grp, i2c1_11_grp, i2c1_12_grp,
i2c1_13_grp, i2c1_14_grp, i2c1_15_grp,
i2c1_16_grp, i2c1_17_grp, i2c1_18_grp,
i2c1_19_grp, ttc0_clk_0_grp, ttc0_wav_0_grp,
ttc0_clk_1_grp, ttc0_wav_1_grp, ttc0_clk_2_grp,
ttc0_wav_2_grp, ttc0_clk_3_grp, ttc0_wav_3_grp,
ttc0_clk_4_grp, ttc0_wav_4_grp, ttc0_clk_5_grp,
ttc0_wav_5_grp, ttc0_clk_6_grp, ttc0_wav_6_grp,
ttc0_clk_7_grp, ttc0_wav_7_grp, ttc0_clk_8_grp,
ttc0_wav_8_grp, ttc1_clk_0_grp, ttc1_wav_0_grp,
ttc1_clk_1_grp, ttc1_wav_1_grp, ttc1_clk_2_grp,
ttc1_wav_2_grp, ttc1_clk_3_grp, ttc1_wav_3_grp,
ttc1_clk_4_grp, ttc1_wav_4_grp, ttc1_clk_5_grp,
ttc1_wav_5_grp, ttc1_clk_6_grp, ttc1_wav_6_grp,
ttc1_clk_7_grp, ttc1_wav_7_grp, ttc1_clk_8_grp,
ttc1_wav_8_grp, ttc2_clk_0_grp, ttc2_wav_0_grp,
ttc2_clk_1_grp, ttc2_wav_1_grp, ttc2_clk_2_grp,
ttc2_wav_2_grp, ttc2_clk_3_grp, ttc2_wav_3_grp,
ttc2_clk_4_grp, ttc2_wav_4_grp, ttc2_clk_5_grp,
ttc2_wav_5_grp, ttc2_clk_6_grp, ttc2_wav_6_grp,
ttc2_clk_7_grp, ttc2_wav_7_grp, ttc2_clk_8_grp,
ttc2_wav_8_grp, ttc3_clk_0_grp, ttc3_wav_0_grp,
ttc3_clk_1_grp, ttc3_wav_1_grp, ttc3_clk_2_grp,
ttc3_wav_2_grp, ttc3_clk_3_grp, ttc3_wav_3_grp,
ttc3_clk_4_grp, ttc3_wav_4_grp, ttc3_clk_5_grp,
ttc3_wav_5_grp, ttc3_clk_6_grp, ttc3_wav_6_grp,
ttc3_clk_7_grp, ttc3_wav_7_grp, ttc3_clk_8_grp,
ttc3_wav_8_grp, swdt0_clk_0_grp, swdt0_rst_0_grp,
swdt0_clk_1_grp, swdt0_rst_1_grp, swdt0_clk_2_grp,
swdt0_rst_2_grp, swdt0_clk_3_grp, swdt0_rst_3_grp,
swdt0_clk_4_grp, swdt0_rst_4_grp, swdt0_clk_5_grp,
swdt0_rst_5_grp, swdt0_clk_6_grp, swdt0_rst_6_grp,
swdt0_clk_7_grp, swdt0_rst_7_grp, swdt0_clk_8_grp,
swdt0_rst_8_grp, swdt0_clk_9_grp, swdt0_rst_9_grp,
swdt0_clk_10_grp, swdt0_rst_10_grp, swdt0_clk_11_grp,
swdt0_rst_11_grp, swdt0_clk_12_grp, swdt0_rst_12_grp,
swdt1_clk_0_grp, swdt1_rst_0_grp, swdt1_clk_1_grp,
swdt1_rst_1_grp, swdt1_clk_2_grp, swdt1_rst_2_grp,
swdt1_clk_3_grp, swdt1_rst_3_grp, swdt1_clk_4_grp,
swdt1_rst_4_grp, swdt1_clk_5_grp, swdt1_rst_5_grp,
swdt1_clk_6_grp, swdt1_rst_6_grp, swdt1_clk_7_grp,
swdt1_rst_7_grp, swdt1_clk_8_grp, swdt1_rst_8_grp,
swdt1_clk_9_grp, swdt1_rst_9_grp, swdt1_clk_10_grp,
swdt1_rst_10_grp, swdt1_clk_11_grp, swdt1_rst_11_grp,
swdt1_clk_12_grp, swdt1_rst_12_grp, gpio0_0_grp,
gpio0_1_grp, gpio0_2_grp, gpio0_3_grp,
gpio0_4_grp, gpio0_5_grp, gpio0_6_grp,
gpio0_7_grp, gpio0_8_grp, gpio0_9_grp,
gpio0_10_grp, gpio0_11_grp, gpio0_12_grp,
gpio0_13_grp, gpio0_14_grp, gpio0_15_grp,
gpio0_16_grp, gpio0_17_grp, gpio0_18_grp,
gpio0_19_grp, gpio0_20_grp, gpio0_21_grp,
gpio0_22_grp, gpio0_23_grp, gpio0_24_grp,
gpio0_25_grp, gpio0_26_grp, gpio0_27_grp,
gpio0_28_grp, gpio0_29_grp, gpio0_30_grp,
gpio0_31_grp, gpio0_32_grp, gpio0_33_grp,
gpio0_34_grp, gpio0_35_grp, gpio0_36_grp,
gpio0_37_grp, gpio0_38_grp, gpio0_39_grp,
gpio0_40_grp, gpio0_41_grp, gpio0_42_grp,
gpio0_43_grp, gpio0_44_grp, gpio0_45_grp,
gpio0_46_grp, gpio0_47_grp, gpio0_48_grp,
gpio0_49_grp, gpio0_50_grp, gpio0_51_grp,
gpio0_52_grp, gpio0_53_grp, gpio0_54_grp,
gpio0_55_grp, gpio0_56_grp, gpio0_57_grp,
gpio0_58_grp, gpio0_59_grp, gpio0_60_grp,
gpio0_61_grp, gpio0_62_grp, gpio0_63_grp,
gpio0_64_grp, gpio0_65_grp, gpio0_66_grp,
gpio0_67_grp, gpio0_68_grp, gpio0_69_grp,
gpio0_70_grp, gpio0_71_grp, gpio0_72_grp,
gpio0_73_grp, gpio0_74_grp, gpio0_75_grp,
gpio0_76_grp, gpio0_77_grp, usb0_0_grp,
usb1_0_grp, pmu0_0_grp, pmu0_1_grp,
pmu0_2_grp, pmu0_3_grp, pmu0_4_grp,
pmu0_5_grp, pmu0_6_grp, pmu0_7_grp,
pmu0_8_grp, pmu0_9_grp, pmu0_10_grp,
pmu0_11_grp, pcie0_0_grp, pcie0_1_grp,
pcie0_2_grp, pcie0_3_grp, pcie0_4_grp,
pcie0_5_grp, pcie0_6_grp, pcie0_7_grp,
csu0_0_grp, csu0_1_grp, csu0_2_grp,
csu0_3_grp, csu0_4_grp, csu0_5_grp,
csu0_6_grp, csu0_7_grp, csu0_8_grp,
csu0_9_grp, csu0_10_grp, csu0_11_grp,
dpaux0_0_grp, dpaux0_1_grp, dpaux0_2_grp,
dpaux0_3_grp, pjtag0_0_grp, pjtag0_1_grp,
pjtag0_2_grp, pjtag0_3_grp, pjtag0_4_grp,
pjtag0_5_grp, trace0_0_grp, trace0_clk_0_grp,
trace0_1_grp, trace0_clk_1_grp, trace0_2_grp,
trace0_clk_2_grp, testscan0_0_grp

とても多いです。しかもグループ名だけが書いてあって、そのグループがどの I/O pin を使うか書いてません。はっきり言って、ほとんど役に立ちません。

drivers/pinctrl/pinctrl-zynqmp.c

資料(Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.txt) がほとんど役に立たなかったので、今度はデバイスドライバのソースコードを直接調べてみましょう。ZynqMP 用の pinctrl のデバイスドライバのソースコードは drivers/pinctrl/pinctrl-zynqmp.c です。

ところが、このソースコードを見てもどこにもそれらしい記述はありません。

実は Xilinx が提供している Linux Kernel の v2018.2 版から、pinctrl や FPGA のロードなどは Linux Kernel が直接行うのではなく、BL31(ARM Trused Firmware Boot Loader Stage 3-1) に依頼するようになっています。drivers/pinctrl/pinctrl-zynqmp.c では、単に BL31 へ要求を丸投げして結果を受けとるためのラッパー関数が定義されているだけです。

BL31(ARM Trused Firmware Boot Loader Stage 3-1) に関しては以下の記事を参照してください。

ARM Trused Firmware 編

次に ARM Trused Firmware のソースコードを調べてみましょう。ここで見ている ARM Trused Firmware は Xilinx が提供している ARM Trused Firmware の v2018.2 です。次のようにしてダウンロードしました。

vivado% git clone https://github.com/Xilinx/arm-trusted-firmware.git
vivado% cd arm-trusted-firmware
vivado% git checkout xilinx-v2018.2

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h に pinctrl_group_ids という enum が定義されています。これがそのままデバイスツリーで指定する pinctrl のグループに1対1で対応しているようです。

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h より抜粋(ちょっと長いので折り畳み)
plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h
enum pinctrl_group_ids {
	PINCTRL_GRP_ETHERNET0_0,
	PINCTRL_GRP_ETHERNET1_0,
	PINCTRL_GRP_ETHERNET2_0,
	PINCTRL_GRP_ETHERNET3_0,
	PINCTRL_GRP_GEMTSU0_0,
	PINCTRL_GRP_GEMTSU0_1,
	PINCTRL_GRP_GEMTSU0_2,
	PINCTRL_GRP_MDIO0_0,
	PINCTRL_GRP_MDIO1_0,
	PINCTRL_GRP_MDIO1_1,
	PINCTRL_GRP_MDIO2_0,
	PINCTRL_GRP_MDIO3_0,
	PINCTRL_GRP_QSPI0_0,
	PINCTRL_GRP_QSPI_SS,
	PINCTRL_GRP_QSPI_FBCLK,
	PINCTRL_GRP_SPI0_0,
	PINCTRL_GRP_SPI0_0_SS0,
	PINCTRL_GRP_SPI0_0_SS1,
	PINCTRL_GRP_SPI0_0_SS2,
	PINCTRL_GRP_SPI0_1,
	PINCTRL_GRP_SPI0_1_SS0,
	PINCTRL_GRP_SPI0_1_SS1,
	PINCTRL_GRP_SPI0_1_SS2,
	PINCTRL_GRP_SPI0_2,
	PINCTRL_GRP_SPI0_2_SS0,
	PINCTRL_GRP_SPI0_2_SS1,
	PINCTRL_GRP_SPI0_2_SS2,
	PINCTRL_GRP_SPI0_3,
	PINCTRL_GRP_SPI0_3_SS0,
	PINCTRL_GRP_SPI0_3_SS1,
	PINCTRL_GRP_SPI0_3_SS2,
	PINCTRL_GRP_SPI0_4,
	PINCTRL_GRP_SPI0_4_SS0,
	PINCTRL_GRP_SPI0_4_SS1,
	PINCTRL_GRP_SPI0_4_SS2,
	PINCTRL_GRP_SPI0_5,
	PINCTRL_GRP_SPI0_5_SS0,
	PINCTRL_GRP_SPI0_5_SS1,
	PINCTRL_GRP_SPI0_5_SS2,
	PINCTRL_GRP_SPI1_0,
	PINCTRL_GRP_SPI1_0_SS0,
	PINCTRL_GRP_SPI1_0_SS1,
	PINCTRL_GRP_SPI1_0_SS2,
	PINCTRL_GRP_SPI1_1,
	PINCTRL_GRP_SPI1_1_SS0,
	PINCTRL_GRP_SPI1_1_SS1,
	PINCTRL_GRP_SPI1_1_SS2,
	PINCTRL_GRP_SPI1_2,
	PINCTRL_GRP_SPI1_2_SS0,
	PINCTRL_GRP_SPI1_2_SS1,
	PINCTRL_GRP_SPI1_2_SS2,
	PINCTRL_GRP_SPI1_3,
	PINCTRL_GRP_SPI1_3_SS0,
	PINCTRL_GRP_SPI1_3_SS1,
	PINCTRL_GRP_SPI1_3_SS2,
	PINCTRL_GRP_SPI1_4,
	PINCTRL_GRP_SPI1_4_SS0,
	PINCTRL_GRP_SPI1_4_SS1,
	PINCTRL_GRP_SPI1_4_SS2,
	PINCTRL_GRP_SPI1_5,
	PINCTRL_GRP_SPI1_5_SS0,
	PINCTRL_GRP_SPI1_5_SS1,
	PINCTRL_GRP_SPI1_5_SS2,
	PINCTRL_GRP_SDIO0_0,
	PINCTRL_GRP_SDIO0_1,
	PINCTRL_GRP_SDIO0_2,
	PINCTRL_GRP_SDIO0_4BIT_0_0,
	PINCTRL_GRP_SDIO0_4BIT_0_1,
	PINCTRL_GRP_SDIO0_4BIT_1_0,
	PINCTRL_GRP_SDIO0_4BIT_1_1,
	PINCTRL_GRP_SDIO0_4BIT_2_0,
	PINCTRL_GRP_SDIO0_4BIT_2_1,
	PINCTRL_GRP_SDIO0_1BIT_0_0,
	PINCTRL_GRP_SDIO0_1BIT_0_1,
	PINCTRL_GRP_SDIO0_1BIT_0_2,
	PINCTRL_GRP_SDIO0_1BIT_0_3,
	PINCTRL_GRP_SDIO0_1BIT_0_4,
	PINCTRL_GRP_SDIO0_1BIT_0_5,
	PINCTRL_GRP_SDIO0_1BIT_0_6,
	PINCTRL_GRP_SDIO0_1BIT_0_7,
	PINCTRL_GRP_SDIO0_1BIT_1_0,
	PINCTRL_GRP_SDIO0_1BIT_1_1,
	PINCTRL_GRP_SDIO0_1BIT_1_2,
	PINCTRL_GRP_SDIO0_1BIT_1_3,
	PINCTRL_GRP_SDIO0_1BIT_1_4,
	PINCTRL_GRP_SDIO0_1BIT_1_5,
	PINCTRL_GRP_SDIO0_1BIT_1_6,
	PINCTRL_GRP_SDIO0_1BIT_1_7,
	PINCTRL_GRP_SDIO0_1BIT_2_0,
	PINCTRL_GRP_SDIO0_1BIT_2_1,
	PINCTRL_GRP_SDIO0_1BIT_2_2,
	PINCTRL_GRP_SDIO0_1BIT_2_3,
	PINCTRL_GRP_SDIO0_1BIT_2_4,
	PINCTRL_GRP_SDIO0_1BIT_2_5,
	PINCTRL_GRP_SDIO0_1BIT_2_6,
	PINCTRL_GRP_SDIO0_1BIT_2_7,
	PINCTRL_GRP_SDIO0_0_PC,
	PINCTRL_GRP_SDIO0_0_CD,
	PINCTRL_GRP_SDIO0_0_WP,
	PINCTRL_GRP_SDIO0_1_PC,
	PINCTRL_GRP_SDIO0_1_CD,
	PINCTRL_GRP_SDIO0_1_WP,
	PINCTRL_GRP_SDIO0_2_PC,
	PINCTRL_GRP_SDIO0_2_CD,
	PINCTRL_GRP_SDIO0_2_WP,
	PINCTRL_GRP_SDIO1_0,
	PINCTRL_GRP_SDIO1_4BIT_0_0,
	PINCTRL_GRP_SDIO1_4BIT_0_1,
	PINCTRL_GRP_SDIO1_4BIT_1_0,
	PINCTRL_GRP_SDIO1_1BIT_0_0,
	PINCTRL_GRP_SDIO1_1BIT_0_1,
	PINCTRL_GRP_SDIO1_1BIT_0_2,
	PINCTRL_GRP_SDIO1_1BIT_0_3,
	PINCTRL_GRP_SDIO1_1BIT_0_4,
	PINCTRL_GRP_SDIO1_1BIT_0_5,
	PINCTRL_GRP_SDIO1_1BIT_0_6,
	PINCTRL_GRP_SDIO1_1BIT_0_7,
	PINCTRL_GRP_SDIO1_1BIT_1_0,
	PINCTRL_GRP_SDIO1_1BIT_1_1,
	PINCTRL_GRP_SDIO1_1BIT_1_2,
	PINCTRL_GRP_SDIO1_1BIT_1_3,
	PINCTRL_GRP_SDIO1_0_PC,
	PINCTRL_GRP_SDIO1_0_CD,
	PINCTRL_GRP_SDIO1_0_WP,
	PINCTRL_GRP_SDIO1_1_PC,
	PINCTRL_GRP_SDIO1_1_CD,
	PINCTRL_GRP_SDIO1_1_WP,
	PINCTRL_GRP_NAND0_0,
	PINCTRL_GRP_NAND0_0_CE,
	PINCTRL_GRP_NAND0_0_RB,
	PINCTRL_GRP_NAND0_0_DQS,
	PINCTRL_GRP_NAND0_1_CE,
	PINCTRL_GRP_NAND0_1_RB,
	PINCTRL_GRP_NAND0_1_DQS,
	PINCTRL_GRP_CAN0_0,
	PINCTRL_GRP_CAN0_1,
	PINCTRL_GRP_CAN0_2,
	PINCTRL_GRP_CAN0_3,
	PINCTRL_GRP_CAN0_4,
	PINCTRL_GRP_CAN0_5,
	PINCTRL_GRP_CAN0_6,
	PINCTRL_GRP_CAN0_7,
	PINCTRL_GRP_CAN0_8,
	PINCTRL_GRP_CAN0_9,
	PINCTRL_GRP_CAN0_10,
	PINCTRL_GRP_CAN0_11,
	PINCTRL_GRP_CAN0_12,
	PINCTRL_GRP_CAN0_13,
	PINCTRL_GRP_CAN0_14,
	PINCTRL_GRP_CAN0_15,
	PINCTRL_GRP_CAN0_16,
	PINCTRL_GRP_CAN0_17,
	PINCTRL_GRP_CAN0_18,
	PINCTRL_GRP_CAN1_0,
	PINCTRL_GRP_CAN1_1,
	PINCTRL_GRP_CAN1_2,
	PINCTRL_GRP_CAN1_3,
	PINCTRL_GRP_CAN1_4,
	PINCTRL_GRP_CAN1_5,
	PINCTRL_GRP_CAN1_6,
	PINCTRL_GRP_CAN1_7,
	PINCTRL_GRP_CAN1_8,
	PINCTRL_GRP_CAN1_9,
	PINCTRL_GRP_CAN1_10,
	PINCTRL_GRP_CAN1_11,
	PINCTRL_GRP_CAN1_12,
	PINCTRL_GRP_CAN1_13,
	PINCTRL_GRP_CAN1_14,
	PINCTRL_GRP_CAN1_15,
	PINCTRL_GRP_CAN1_16,
	PINCTRL_GRP_CAN1_17,
	PINCTRL_GRP_CAN1_18,
	PINCTRL_GRP_CAN1_19,
	PINCTRL_GRP_UART0_0,
	PINCTRL_GRP_UART0_1,
	PINCTRL_GRP_UART0_2,
	PINCTRL_GRP_UART0_3,
	PINCTRL_GRP_UART0_4,
	PINCTRL_GRP_UART0_5,
	PINCTRL_GRP_UART0_6,
	PINCTRL_GRP_UART0_7,
	PINCTRL_GRP_UART0_8,
	PINCTRL_GRP_UART0_9,
	PINCTRL_GRP_UART0_10,
	PINCTRL_GRP_UART0_11,
	PINCTRL_GRP_UART0_12,
	PINCTRL_GRP_UART0_13,
	PINCTRL_GRP_UART0_14,
	PINCTRL_GRP_UART0_15,
	PINCTRL_GRP_UART0_16,
	PINCTRL_GRP_UART0_17,
	PINCTRL_GRP_UART0_18,
	PINCTRL_GRP_UART1_0,
	PINCTRL_GRP_UART1_1,
	PINCTRL_GRP_UART1_2,
	PINCTRL_GRP_UART1_3,
	PINCTRL_GRP_UART1_4,
	PINCTRL_GRP_UART1_5,
	PINCTRL_GRP_UART1_6,
	PINCTRL_GRP_UART1_7,
	PINCTRL_GRP_UART1_8,
	PINCTRL_GRP_UART1_9,
	PINCTRL_GRP_UART1_10,
	PINCTRL_GRP_UART1_11,
	PINCTRL_GRP_UART1_12,
	PINCTRL_GRP_UART1_13,
	PINCTRL_GRP_UART1_14,
	PINCTRL_GRP_UART1_15,
	PINCTRL_GRP_UART1_16,
	PINCTRL_GRP_UART1_17,
	PINCTRL_GRP_UART1_18,
	PINCTRL_GRP_I2C0_0,
	PINCTRL_GRP_I2C0_1,
	PINCTRL_GRP_I2C0_2,
	PINCTRL_GRP_I2C0_3,
	PINCTRL_GRP_I2C0_4,
	PINCTRL_GRP_I2C0_5,
	PINCTRL_GRP_I2C0_6,
	PINCTRL_GRP_I2C0_7,
	PINCTRL_GRP_I2C0_8,
	PINCTRL_GRP_I2C0_9,
	PINCTRL_GRP_I2C0_10,
	PINCTRL_GRP_I2C0_11,
	PINCTRL_GRP_I2C0_12,
	PINCTRL_GRP_I2C0_13,
	PINCTRL_GRP_I2C0_14,
	PINCTRL_GRP_I2C0_15,
	PINCTRL_GRP_I2C0_16,
	PINCTRL_GRP_I2C0_17,
	PINCTRL_GRP_I2C0_18,
	PINCTRL_GRP_I2C1_0,
	PINCTRL_GRP_I2C1_1,
	PINCTRL_GRP_I2C1_2,
	PINCTRL_GRP_I2C1_3,
	PINCTRL_GRP_I2C1_4,
	PINCTRL_GRP_I2C1_5,
	PINCTRL_GRP_I2C1_6,
	PINCTRL_GRP_I2C1_7,
	PINCTRL_GRP_I2C1_8,
	PINCTRL_GRP_I2C1_9,
	PINCTRL_GRP_I2C1_10,
	PINCTRL_GRP_I2C1_11,
	PINCTRL_GRP_I2C1_12,
	PINCTRL_GRP_I2C1_13,
	PINCTRL_GRP_I2C1_14,
	PINCTRL_GRP_I2C1_15,
	PINCTRL_GRP_I2C1_16,
	PINCTRL_GRP_I2C1_17,
	PINCTRL_GRP_I2C1_18,
	PINCTRL_GRP_I2C1_19,
	PINCTRL_GRP_TTC0_0_CLK,
	PINCTRL_GRP_TTC0_0_WAV,
	PINCTRL_GRP_TTC0_1_CLK,
	PINCTRL_GRP_TTC0_1_WAV,
	PINCTRL_GRP_TTC0_2_CLK,
	PINCTRL_GRP_TTC0_2_WAV,
	PINCTRL_GRP_TTC0_3_CLK,
	PINCTRL_GRP_TTC0_3_WAV,
	PINCTRL_GRP_TTC0_4_CLK,
	PINCTRL_GRP_TTC0_4_WAV,
	PINCTRL_GRP_TTC0_5_CLK,
	PINCTRL_GRP_TTC0_5_WAV,
	PINCTRL_GRP_TTC0_6_CLK,
	PINCTRL_GRP_TTC0_6_WAV,
	PINCTRL_GRP_TTC0_7_CLK,
	PINCTRL_GRP_TTC0_7_WAV,
	PINCTRL_GRP_TTC0_8_CLK,
	PINCTRL_GRP_TTC0_8_WAV,
	PINCTRL_GRP_TTC1_0_CLK,
	PINCTRL_GRP_TTC1_0_WAV,
	PINCTRL_GRP_TTC1_1_CLK,
	PINCTRL_GRP_TTC1_1_WAV,
	PINCTRL_GRP_TTC1_2_CLK,
	PINCTRL_GRP_TTC1_2_WAV,
	PINCTRL_GRP_TTC1_3_CLK,
	PINCTRL_GRP_TTC1_3_WAV,
	PINCTRL_GRP_TTC1_4_CLK,
	PINCTRL_GRP_TTC1_4_WAV,
	PINCTRL_GRP_TTC1_5_CLK,
	PINCTRL_GRP_TTC1_5_WAV,
	PINCTRL_GRP_TTC1_6_CLK,
	PINCTRL_GRP_TTC1_6_WAV,
	PINCTRL_GRP_TTC1_7_CLK,
	PINCTRL_GRP_TTC1_7_WAV,
	PINCTRL_GRP_TTC1_8_CLK,
	PINCTRL_GRP_TTC1_8_WAV,
	PINCTRL_GRP_TTC2_0_CLK,
	PINCTRL_GRP_TTC2_0_WAV,
	PINCTRL_GRP_TTC2_1_CLK,
	PINCTRL_GRP_TTC2_1_WAV,
	PINCTRL_GRP_TTC2_2_CLK,
	PINCTRL_GRP_TTC2_2_WAV,
	PINCTRL_GRP_TTC2_3_CLK,
	PINCTRL_GRP_TTC2_3_WAV,
	PINCTRL_GRP_TTC2_4_CLK,
	PINCTRL_GRP_TTC2_4_WAV,
	PINCTRL_GRP_TTC2_5_CLK,
	PINCTRL_GRP_TTC2_5_WAV,
	PINCTRL_GRP_TTC2_6_CLK,
	PINCTRL_GRP_TTC2_6_WAV,
	PINCTRL_GRP_TTC2_7_CLK,
	PINCTRL_GRP_TTC2_7_WAV,
	PINCTRL_GRP_TTC2_8_CLK,
	PINCTRL_GRP_TTC2_8_WAV,
	PINCTRL_GRP_TTC3_0_CLK,
	PINCTRL_GRP_TTC3_0_WAV,
	PINCTRL_GRP_TTC3_1_CLK,
	PINCTRL_GRP_TTC3_1_WAV,
	PINCTRL_GRP_TTC3_2_CLK,
	PINCTRL_GRP_TTC3_2_WAV,
	PINCTRL_GRP_TTC3_3_CLK,
	PINCTRL_GRP_TTC3_3_WAV,
	PINCTRL_GRP_TTC3_4_CLK,
	PINCTRL_GRP_TTC3_4_WAV,
	PINCTRL_GRP_TTC3_5_CLK,
	PINCTRL_GRP_TTC3_5_WAV,
	PINCTRL_GRP_TTC3_6_CLK,
	PINCTRL_GRP_TTC3_6_WAV,
	PINCTRL_GRP_TTC3_7_CLK,
	PINCTRL_GRP_TTC3_7_WAV,
	PINCTRL_GRP_TTC3_8_CLK,
	PINCTRL_GRP_TTC3_8_WAV,
	PINCTRL_GRP_SWDT0_0_CLK,
	PINCTRL_GRP_SWDT0_0_RST,
	PINCTRL_GRP_SWDT0_1_CLK,
	PINCTRL_GRP_SWDT0_1_RST,
	PINCTRL_GRP_SWDT0_2_CLK,
	PINCTRL_GRP_SWDT0_2_RST,
	PINCTRL_GRP_SWDT0_3_CLK,
	PINCTRL_GRP_SWDT0_3_RST,
	PINCTRL_GRP_SWDT0_4_CLK,
	PINCTRL_GRP_SWDT0_4_RST,
	PINCTRL_GRP_SWDT0_5_CLK,
	PINCTRL_GRP_SWDT0_5_RST,
	PINCTRL_GRP_SWDT0_6_CLK,
	PINCTRL_GRP_SWDT0_6_RST,
	PINCTRL_GRP_SWDT0_7_CLK,
	PINCTRL_GRP_SWDT0_7_RST,
	PINCTRL_GRP_SWDT0_8_CLK,
	PINCTRL_GRP_SWDT0_8_RST,
	PINCTRL_GRP_SWDT0_9_CLK,
	PINCTRL_GRP_SWDT0_9_RST,
	PINCTRL_GRP_SWDT0_10_CLK,
	PINCTRL_GRP_SWDT0_10_RST,
	PINCTRL_GRP_SWDT0_11_CLK,
	PINCTRL_GRP_SWDT0_11_RST,
	PINCTRL_GRP_SWDT0_12_CLK,
	PINCTRL_GRP_SWDT0_12_RST,
	PINCTRL_GRP_SWDT1_0_CLK,
	PINCTRL_GRP_SWDT1_0_RST,
	PINCTRL_GRP_SWDT1_1_CLK,
	PINCTRL_GRP_SWDT1_1_RST,
	PINCTRL_GRP_SWDT1_2_CLK,
	PINCTRL_GRP_SWDT1_2_RST,
	PINCTRL_GRP_SWDT1_3_CLK,
	PINCTRL_GRP_SWDT1_3_RST,
	PINCTRL_GRP_SWDT1_4_CLK,
	PINCTRL_GRP_SWDT1_4_RST,
	PINCTRL_GRP_SWDT1_5_CLK,
	PINCTRL_GRP_SWDT1_5_RST,
	PINCTRL_GRP_SWDT1_6_CLK,
	PINCTRL_GRP_SWDT1_6_RST,
	PINCTRL_GRP_SWDT1_7_CLK,
	PINCTRL_GRP_SWDT1_7_RST,
	PINCTRL_GRP_SWDT1_8_CLK,
	PINCTRL_GRP_SWDT1_8_RST,
	PINCTRL_GRP_SWDT1_9_CLK,
	PINCTRL_GRP_SWDT1_9_RST,
	PINCTRL_GRP_SWDT1_10_CLK,
	PINCTRL_GRP_SWDT1_10_RST,
	PINCTRL_GRP_SWDT1_11_CLK,
	PINCTRL_GRP_SWDT1_11_RST,
	PINCTRL_GRP_SWDT1_12_CLK,
	PINCTRL_GRP_SWDT1_12_RST,
	PINCTRL_GRP_GPIO0_0,
	PINCTRL_GRP_GPIO0_1,
	PINCTRL_GRP_GPIO0_2,
	PINCTRL_GRP_GPIO0_3,
	PINCTRL_GRP_GPIO0_4,
	PINCTRL_GRP_GPIO0_5,
	PINCTRL_GRP_GPIO0_6,
	PINCTRL_GRP_GPIO0_7,
	PINCTRL_GRP_GPIO0_8,
	PINCTRL_GRP_GPIO0_9,
	PINCTRL_GRP_GPIO0_10,
	PINCTRL_GRP_GPIO0_11,
	PINCTRL_GRP_GPIO0_12,
	PINCTRL_GRP_GPIO0_13,
	PINCTRL_GRP_GPIO0_14,
	PINCTRL_GRP_GPIO0_15,
	PINCTRL_GRP_GPIO0_16,
	PINCTRL_GRP_GPIO0_17,
	PINCTRL_GRP_GPIO0_18,
	PINCTRL_GRP_GPIO0_19,
	PINCTRL_GRP_GPIO0_20,
	PINCTRL_GRP_GPIO0_21,
	PINCTRL_GRP_GPIO0_22,
	PINCTRL_GRP_GPIO0_23,
	PINCTRL_GRP_GPIO0_24,
	PINCTRL_GRP_GPIO0_25,
	PINCTRL_GRP_GPIO0_26,
	PINCTRL_GRP_GPIO0_27,
	PINCTRL_GRP_GPIO0_28,
	PINCTRL_GRP_GPIO0_29,
	PINCTRL_GRP_GPIO0_30,
	PINCTRL_GRP_GPIO0_31,
	PINCTRL_GRP_GPIO0_32,
	PINCTRL_GRP_GPIO0_33,
	PINCTRL_GRP_GPIO0_34,
	PINCTRL_GRP_GPIO0_35,
	PINCTRL_GRP_GPIO0_36,
	PINCTRL_GRP_GPIO0_37,
	PINCTRL_GRP_GPIO0_38,
	PINCTRL_GRP_GPIO0_39,
	PINCTRL_GRP_GPIO0_40,
	PINCTRL_GRP_GPIO0_41,
	PINCTRL_GRP_GPIO0_42,
	PINCTRL_GRP_GPIO0_43,
	PINCTRL_GRP_GPIO0_44,
	PINCTRL_GRP_GPIO0_45,
	PINCTRL_GRP_GPIO0_46,
	PINCTRL_GRP_GPIO0_47,
	PINCTRL_GRP_GPIO0_48,
	PINCTRL_GRP_GPIO0_49,
	PINCTRL_GRP_GPIO0_50,
	PINCTRL_GRP_GPIO0_51,
	PINCTRL_GRP_GPIO0_52,
	PINCTRL_GRP_GPIO0_53,
	PINCTRL_GRP_GPIO0_54,
	PINCTRL_GRP_GPIO0_55,
	PINCTRL_GRP_GPIO0_56,
	PINCTRL_GRP_GPIO0_57,
	PINCTRL_GRP_GPIO0_58,
	PINCTRL_GRP_GPIO0_59,
	PINCTRL_GRP_GPIO0_60,
	PINCTRL_GRP_GPIO0_61,
	PINCTRL_GRP_GPIO0_62,
	PINCTRL_GRP_GPIO0_63,
	PINCTRL_GRP_GPIO0_64,
	PINCTRL_GRP_GPIO0_65,
	PINCTRL_GRP_GPIO0_66,
	PINCTRL_GRP_GPIO0_67,
	PINCTRL_GRP_GPIO0_68,
	PINCTRL_GRP_GPIO0_69,
	PINCTRL_GRP_GPIO0_70,
	PINCTRL_GRP_GPIO0_71,
	PINCTRL_GRP_GPIO0_72,
	PINCTRL_GRP_GPIO0_73,
	PINCTRL_GRP_GPIO0_74,
	PINCTRL_GRP_GPIO0_75,
	PINCTRL_GRP_GPIO0_76,
	PINCTRL_GRP_GPIO0_77,
	PINCTRL_GRP_USB0_0,
	PINCTRL_GRP_USB1_0,
	PINCTRL_GRP_PMU0_0,
	PINCTRL_GRP_PMU0_1,
	PINCTRL_GRP_PMU0_2,
	PINCTRL_GRP_PMU0_3,
	PINCTRL_GRP_PMU0_4,
	PINCTRL_GRP_PMU0_5,
	PINCTRL_GRP_PMU0_6,
	PINCTRL_GRP_PMU0_7,
	PINCTRL_GRP_PMU0_8,
	PINCTRL_GRP_PMU0_9,
	PINCTRL_GRP_PMU0_10,
	PINCTRL_GRP_PMU0_11,
	PINCTRL_GRP_PCIE0_0,
	PINCTRL_GRP_PCIE0_1,
	PINCTRL_GRP_PCIE0_2,
	PINCTRL_GRP_PCIE0_3,
	PINCTRL_GRP_PCIE0_4,
	PINCTRL_GRP_PCIE0_5,
	PINCTRL_GRP_PCIE0_6,
	PINCTRL_GRP_PCIE0_7,
	PINCTRL_GRP_CSU0_0,
	PINCTRL_GRP_CSU0_1,
	PINCTRL_GRP_CSU0_2,
	PINCTRL_GRP_CSU0_3,
	PINCTRL_GRP_CSU0_4,
	PINCTRL_GRP_CSU0_5,
	PINCTRL_GRP_CSU0_6,
	PINCTRL_GRP_CSU0_7,
	PINCTRL_GRP_CSU0_8,
	PINCTRL_GRP_CSU0_9,
	PINCTRL_GRP_CSU0_10,
	PINCTRL_GRP_CSU0_11,
	PINCTRL_GRP_DPAUX0_0,
	PINCTRL_GRP_DPAUX0_1,
	PINCTRL_GRP_DPAUX0_2,
	PINCTRL_GRP_DPAUX0_3,
	PINCTRL_GRP_PJTAG0_0,
	PINCTRL_GRP_PJTAG0_1,
	PINCTRL_GRP_PJTAG0_2,
	PINCTRL_GRP_PJTAG0_3,
	PINCTRL_GRP_PJTAG0_4,
	PINCTRL_GRP_PJTAG0_5,
	PINCTRL_GRP_TRACE0_0,
	PINCTRL_GRP_TRACE0_0_CLK,
	PINCTRL_GRP_TRACE0_1,
	PINCTRL_GRP_TRACE0_1_CLK,
	PINCTRL_GRP_TRACE0_2,
	PINCTRL_GRP_TRACE0_2_CLK,
	PINCTRL_GRP_TESTSCAN0_0,
};

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c に zynqmp_pin_groups という配列が定義されています。ここに I/O pin 番号ごとにどのグループに属し得るかが定義されています。

plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c

static struct zynqmp_pin_group zynqmp_pin_groups[MAX_PIN] = {
	[PINCTRL_PIN_0] = {
		.groups = &((uint16_t []) {
			PINCTRL_GRP_QSPI0_0,
			PINCTRL_GRP_RESERVED,
			PINCTRL_GRP_RESERVED,
			PINCTRL_GRP_TESTSCAN0_0,
			PINCTRL_GRP_RESERVED,
			PINCTRL_GRP_GPIO0_0,
			PINCTRL_GRP_CAN1_0,
			PINCTRL_GRP_I2C1_0,
			PINCTRL_GRP_PJTAG0_0,
			PINCTRL_GRP_SPI0_0,
			PINCTRL_GRP_TTC3_0_CLK,
			PINCTRL_GRP_UART1_0,
			PINCTRL_GRP_TRACE0_0_CLK,
			END_OF_GROUPS,
		}),
	},
	:
	(中略)
	:
};

結局、このコードを調べて対応表を作成しました。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?