1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1. はじめに

Zephyr の深淵へようこそ。
本記事は、Zephyr の最大の鬼門と思われる Devicetree を覗き込む内容の、其の弐の記事となります。

まだ序章に触れていない方は、まずはそちらから読み進める事を推奨します。

今回も其の壱と同じ環境で話を進めます。

board Zephyr 環境 ビルド対象のアプリ
rpi_pico ~/zephyrproject zephyr/sample/basic/minimal

2. 序章の振り返り

本記事では、序章や其の壱で紹介した下記テーブルのうち、*.yaml について解説していきます。

ファイル名 概要
*.dts Devicetree source. これにベースに下記ファイルが連結されていく
*.dtsi dts から include して定義を追加できるようにしたファイル
*.overlay dts の定義を上書きで変更を加えるためのファイル
*.yaml dts / overlay 内で利用する左辺値(プロパティ名)の定義
*.h dts / overlay 内で利用する右辺値(プロパティ値)の定義
zephyr.dts ビルド時に上記ファイル群が結合され、最終的な dts として生成

*.dtsi は、名前の通り dtsdtsi から include されるファイルで、dts に直接的に構成するファイルになります。
一方で *.yaml は間接的に dts / dtsi の中で用いられるデータ構造を定義するファイルになります。

3. zephyr.dts の確認

3.1. zephyr.dts の生成

其の壱と同じく、まずはビルドして最終的な zephyr.dts を生成しておきます。

zephyr/sample/basic/minimal を rpi_pico 向けにビルド
cd ~/zephyrproject/zephyr/sample/basic/minimal
$ west build -b rpi_pico .
                         :
[143/143] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
      BOOT_FLASH:         256 B        256 B    100.00%
           FLASH:       15508 B    2096896 B      0.74%
             RAM:        3968 B       264 KB      1.47%
        IDT_LIST:          0 GB        32 KB      0.00%
Generating files from /home/taka/zephyrproject/zephyr/build/zephyr/zephyr.elf for board: rpi_pico
Converted to uf2, output size: 31744, start address: 0x10000000
Wrote 31744 bytes to zephyr.uf2

生成が成功すると build/zephyr/zephyr.dts に吐き出されます。

生成された zephyr.dts の中身
/dts-v1/;

/* node '/' defined in zephyr/dts/common/skeleton.dtsi:9 */
/ {
	#address-cells = < 0x1 >; /* in zephyr/dts/common/skeleton.dtsi:10 */
	#size-cells = < 0x1 >;    /* in zephyr/dts/common/skeleton.dtsi:11 */

	/* node '/chosen' defined in zephyr/dts/common/skeleton.dtsi:12 */
	chosen {
		zephyr,sram = &sram0;                    /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:18 */
		zephyr,flash = &flash0;                  /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:19 */
		zephyr,flash-controller = &ssi;          /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:20 */
		zephyr,console = &uart0;                 /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:21 */
		zephyr,shell-uart = &uart0;              /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:22 */
		zephyr,code-partition = &code_partition; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:23 */
	};

	/* node '/aliases' defined in zephyr/dts/common/skeleton.dtsi:13 */
	aliases {
		die-temp0 = &die_temp; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:28 */
		rtc = &rtc;            /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:27 */
		watchdog0 = &wdt0;     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:28 */
		led0 = &led0;          /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:27 */
		pwm-led0 = &pwm_led0;  /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:28 */
	};

	/* node '/soc' defined in zephyr/dts/arm/armv6-m.dtsi:6 */
	soc {
		#address-cells = < 0x1 >;          /* in zephyr/dts/arm/armv6-m.dtsi:7 */
		#size-cells = < 0x1 >;             /* in zephyr/dts/arm/armv6-m.dtsi:8 */
		interrupt-parent = < &nvic >;      /* in zephyr/dts/arm/armv6-m.dtsi:10 */
		ranges;                            /* in zephyr/dts/arm/armv6-m.dtsi:11 */
		compatible = "raspberrypi,rp2040",
		             "simple-bus";         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:190 */

		/* node '/soc/interrupt-controller@e000e100' defined in zephyr/dts/arm/armv6-m.dtsi:13 */
		nvic: interrupt-controller@e000e100 {
			#address-cells = < 0x1 >;            /* in zephyr/dts/arm/armv6-m.dtsi:14 */
			compatible = "arm,v6m-nvic";         /* in zephyr/dts/arm/armv6-m.dtsi:15 */
			reg = < 0xe000e100 0xc00 >;          /* in zephyr/dts/arm/armv6-m.dtsi:16 */
			interrupt-controller;                /* in zephyr/dts/arm/armv6-m.dtsi:17 */
			#interrupt-cells = < 0x2 >;          /* in zephyr/dts/arm/armv6-m.dtsi:18 */
			arm,num-irq-priority-bits = < 0x2 >; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:448 */
			phandle = < 0x1 >;                   /* in zephyr/dts/arm/armv6-m.dtsi:10 */
		};

		/* node '/soc/timer@e000e010' defined in zephyr/dts/arm/armv6-m.dtsi:21 */
		systick: timer@e000e010 {
			compatible = "arm,armv6m-systick"; /* in zephyr/dts/arm/armv6-m.dtsi:22 */
			reg = < 0xe000e010 0x10 >;         /* in zephyr/dts/arm/armv6-m.dtsi:23 */
		};

		/* node '/soc/memory@20000000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:192 */
		sram0: memory@20000000 {
			compatible = "mmio-sram";     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:193 */
			reg = < 0x20000000 0x42000 >; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:194 */
		};

		/* node '/soc/flash-controller@18000000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:197 */
		ssi: flash-controller@18000000 {
			compatible = "raspberrypi,pico-flash-controller"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:198 */
			reg = < 0x18000000 0xfc >;                        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:199 */
			#address-cells = < 0x1 >;                         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:201 */
			#size-cells = < 0x1 >;                            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:202 */

			/* node '/soc/flash-controller@18000000/flash@10000000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:204 */
			flash0: flash@10000000 {
				compatible = "soc-nv-flash";   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:205 */
				write-block-size = < 0x1 >;    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:206 */
				erase-block-size = < 0x1000 >; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:207 */
				reg = < 0x10000000 0x200000 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:66 */

				/* node '/soc/flash-controller@18000000/flash@10000000/partitions' defined in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:68 */
				partitions {
					compatible = "fixed-partitions"; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:69 */
					#address-cells = < 0x1 >;        /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:70 */
					#size-cells = < 0x1 >;           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:71 */

					/* node '/soc/flash-controller@18000000/flash@10000000/partitions/partition@0' defined in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:74 */
					second_stage_bootloader: partition@0 {
						label = "second_stage_bootloader"; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:75 */
						reg = < 0x0 0x100 >;               /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:76 */
						read-only;                         /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:77 */
					};

					/* node '/soc/flash-controller@18000000/flash@10000000/partitions/partition@100' defined in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:84 */
					code_partition: partition@100 {
						label = "code-partition"; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:85 */
						reg = < 0x100 0x1fff00 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:86 */
						read-only;                /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:87 */
					};
				};
			};
		};

		/* node '/soc/reset-controller@4000c000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:211 */
		reset: reset-controller@4000c000 {
			compatible = "raspberrypi,pico-reset"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:212 */
			reg = < 0x4000c000 0x1000 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:213 */
			reg-width = < 0x4 >;                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:214 */
			active-low = < 0x0 >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:215 */
			#reset-cells = < 0x1 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:216 */
			phandle = < 0x15 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:268 */
		};

		/* node '/soc/clock-controller@40008000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:219 */
		clocks: clock-controller@40008000 {
			compatible = "raspberrypi,pico-clock-controller";                                          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:220 */
			reg = < 0x40008000 0x1000 0x40024000 0x1000 0x40028000 0x1000 0x4002c000 0x1000 0x40060000
			        0x1000 >;                                                                          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:221 */
			reg-names = "clocks",
			            "xosc",
			            "pll_sys",
			            "pll_usb",
			            "rosc";                                                                        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:226 */
			#clock-cells = < 0x1 >;                                                                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:227 */
			status = "okay";                                                                           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:228 */
			clocks = < &clk_gpout0 >,
			         < &clk_gpout1 >,
			         < &clk_gpout2 >,
			         < &clk_gpout3 >,
			         < &clk_ref >,
			         < &clk_sys >,
			         < &clk_peri >,
			         < &clk_usb >,
			         < &clk_adc >,
			         < &clk_rtc >,
			         < &pll_sys >,
			         < &pll_usb >,
			         < &xosc >,
			         < &rosc >,
			         < &rosc_ph >,
			         < &gpin0 >,
			         < &gpin1 >;                                                                       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
			clock-names = "clk_gpout0",
			              "clk_gpout1",
			              "clk_gpout2",
			              "clk_gpout3",
			              "clk_ref",
			              "clk_sys",
			              "clk_peri",
			              "clk_usb",
			              "clk_adc",
			              "clk_rtc",
			              "pll_sys",
			              "pll_usb",
			              "xosc",
			              "rosc",
			              "rosc_ph",
			              "gpin0",
			              "gpin1";                                                                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:234 */
			phandle = < 0x14 >;                                                                        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:267 */
		};

		/* node '/soc/gpio@40014000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:241 */
		gpio0_map: gpio@40014000 {
			compatible = "raspberrypi,pico-gpio";      /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:242 */
			reg = < 0x40014000 0x1000 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:243 */
			interrupts = < 0xd 0x3 >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:244 */
			gpio-map-mask = < 0xffffffe0 0xffffffc0 >; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:246 */
			gpio-map-pass-thru = < 0x1f 0x3f >;        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:247 */
			gpio-map = < 0x0 0x0 &gpio0 0x0 0x0 >;     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:248 */
			#gpio-cells = < 0x2 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:250 */
			#address-cells = < 0x1 >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:251 */
			#size-cells = < 0x0 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:252 */

			/* node '/soc/gpio@40014000/gpio-port@0' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:254 */
			gpio0: gpio-port@0 {
				compatible = "raspberrypi,pico-gpio-port"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:255 */
				reg = < 0x0 >;                             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:256 */
				gpio-controller;                           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:258 */
				#gpio-cells = < 0x2 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:259 */
				ngpios = < 0x1e >;                         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:260 */
				status = "okay";                           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:100 */
				phandle = < 0x13 >;                        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:248 */
			};
		};

		/* node '/soc/uart@40034000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:264 */
		uart0: pico_serial: uart@40034000 {
			compatible = "raspberrypi,pico-uart",
			             "arm,pl011";             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:265 */
			reg = < 0x40034000 0x1000 >;          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:266 */
			clocks = < &clocks 0x6 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:267 */
			resets = < &reset 0x16 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:268 */
			interrupts = < 0x14 0x3 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:269 */
			interrupt-names = "uart0";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:270 */
			current-speed = < 0x1c200 >;          /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:93 */
			status = "okay";                      /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:94 */
			pinctrl-0 = < &uart0_default >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:95 */
			pinctrl-names = "default";            /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:96 */
		};

		/* node '/soc/uart@40038000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:274 */
		uart1: uart@40038000 {
			compatible = "raspberrypi,pico-uart",
			             "arm,pl011";             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:275 */
			reg = < 0x40038000 0x1000 >;          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:276 */
			clocks = < &clocks 0x6 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:277 */
			resets = < &reset 0x17 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:278 */
			interrupts = < 0x15 0x3 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:279 */
			interrupt-names = "uart1";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:280 */
			status = "disabled";                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:281 */
		};

		/* node '/soc/spi@4003c000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:284 */
		spi0: pico_spi: spi@4003c000 {
			compatible = "raspberrypi,pico-spi",
			             "arm,pl022";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:285 */
			#address-cells = < 0x1 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:286 */
			#size-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:287 */
			reg = < 0x4003c000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:288 */
			clocks = < &clocks 0x6 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:289 */
			resets = < &reset 0x10 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:290 */
			interrupts = < 0x12 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:291 */
			interrupt-names = "spi0";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:292 */
			clock-frequency = < 0x7a1200 >;      /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:118 */
			status = "okay";                     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:119 */
			pinctrl-0 = < &spi0_default >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:120 */
			pinctrl-names = "default";           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:121 */
		};

		/* node '/soc/spi@40040000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:296 */
		spi1: spi@40040000 {
			compatible = "raspberrypi,pico-spi",
			             "arm,pl022";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:297 */
			#address-cells = < 0x1 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:298 */
			#size-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:299 */
			reg = < 0x40040000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:300 */
			resets = < &reset 0x11 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:301 */
			clocks = < &clocks 0x6 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:302 */
			interrupts = < 0x13 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:303 */
			interrupt-names = "spi1";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:304 */
			status = "disabled";                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:305 */
		};

		/* node '/soc/adc@4004c000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:308 */
		adc: adc@4004c000 {
			compatible = "raspberrypi,pico-adc"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:309 */
			reg = < 0x4004c000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:310 */
			resets = < &reset 0x0 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:311 */
			clocks = < &clocks 0x8 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:312 */
			interrupts = < 0x16 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:313 */
			interrupt-names = "adc0";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:314 */
			#io-channel-cells = < 0x1 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:316 */
			status = "okay";                     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:138 */
			pinctrl-0 = < &adc_default >;        /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:139 */
			pinctrl-names = "default";           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:140 */
			phandle = < 0x1c >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:442 */
		};

		/* node '/soc/i2c@40044000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:319 */
		i2c0: pico_i2c0: i2c@40044000 {
			compatible = "raspberrypi,pico-i2c",
			             "snps,designware-i2c";  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:320 */
			#address-cells = < 0x1 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:321 */
			#size-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:322 */
			reg = < 0x40044000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:323 */
			resets = < &reset 0x3 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:324 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:325 */
			interrupts = < 0x17 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:326 */
			interrupt-names = "i2c0";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:327 */
			clock-frequency = < 0x186a0 >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:104 */
			status = "okay";                     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:105 */
			pinctrl-0 = < &i2c0_default >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:106 */
			pinctrl-names = "default";           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:107 */
		};

		/* node '/soc/i2c@40048000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:331 */
		i2c1: pico_i2c1: i2c@40048000 {
			compatible = "raspberrypi,pico-i2c",
			             "snps,designware-i2c";  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:332 */
			#address-cells = < 0x1 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:333 */
			#size-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:334 */
			reg = < 0x40048000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:335 */
			resets = < &reset 0x4 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:336 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:337 */
			interrupts = < 0x18 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:338 */
			interrupt-names = "i2c1";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:339 */
			pinctrl-0 = < &i2c1_default >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:111 */
			pinctrl-names = "default";           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:112 */
			status = "disabled";                 /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:113 */
			clock-frequency = < 0x61a80 >;       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:114 */
		};

		/* node '/soc/watchdog@40058000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:343 */
		wdt0: watchdog@40058000 {
			compatible = "raspberrypi,pico-watchdog"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:344 */
			reg = < 0x40058000 0x1000 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:345 */
			clocks = < &clocks 0x4 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:346 */
			status = "okay";                          /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:129 */
		};

		/* node '/soc/usbd@50110000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:350 */
		usbd: zephyr_udc0: usbd@50110000 {
			compatible = "raspberrypi,pico-usbd"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:351 */
			reg = < 0x50110000 0x10000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:352 */
			resets = < &reset 0x18 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:353 */
			clocks = < &clocks 0x7 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:354 */
			interrupts = < 0x5 0x3 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:355 */
			interrupt-names = "usbctrl";          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:356 */
			num-bidir-endpoints = < 0x10 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:357 */
			status = "okay";                      /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:144 */
		};

		/* node '/soc/pwm@40050000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:361 */
		pwm: pwm@40050000 {
			compatible = "raspberrypi,pico-pwm"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:362 */
			reg = < 0x40050000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:363 */
			resets = < &reset 0xe >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:364 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:365 */
			interrupts = < 0x4 0x3 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:366 */
			interrupt-names = "PWM_IRQ_WRAP";    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:367 */
			status = "disabled";                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:368 */
			#pwm-cells = < 0x3 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:369 */
			pinctrl-0 = < &pwm_ch4b_default >;   /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:148 */
			pinctrl-names = "default";           /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:149 */
			phandle = < 0x1d >;                  /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:21 */
		};

		/* node '/soc/timer@40054000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:372 */
		timer: timer@40054000 {
			compatible = "raspberrypi,pico-timer"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:373 */
			reg = < 0x40054000 0x1000 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:374 */
			resets = < &reset 0x15 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:375 */
			clocks = < &clocks 0x4 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:376 */
			interrupts = < 0x0 0x3 >,
			             < 0x1 0x3 >,
			             < 0x2 0x3 >,
			             < 0x3 0x3 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:377 */
			interrupt-names = "TIMER_IRQ_0",
			                  "TIMER_IRQ_1",
			                  "TIMER_IRQ_2",
			                  "TIMER_IRQ_3";       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:381 */
			status = "okay";                       /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:125 */
		};

		/* node '/soc/dma@50000000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:388 */
		dma: dma@50000000 {
			compatible = "raspberrypi,pico-dma"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:389 */
			reg = < 0x50000000 0x10000 >;        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:390 */
			resets = < &reset 0x2 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:391 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:392 */
			interrupts = < 0xb 0x3 >,
			             < 0xc 0x3 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:393 */
			interrupt-names = "dma0",
			                  "dma1";            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:395 */
			dma-channels = < 0xc >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:396 */
			status = "disabled";                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:397 */
			#dma-cells = < 0x3 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:398 */
		};

		/* node '/soc/vreg@40064000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:401 */
		vreg: vreg@40064000 {
			compatible = "raspberrypi,core-supply-regulator"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:402 */
			reg = < 0x40064000 0x1 >;                         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:403 */
			status = "okay";                                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:404 */
			raspberrypi,brown-out-detection;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:405 */
			raspberrypi,brown-out-threshold = < 0xd1f60 >;    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:406 */
			regulator-always-on;                              /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:153 */
			regulator-allowed-modes = < 0x0 >;                /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:154 */
		};

		/* node '/soc/pio@50200000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:409 */
		pio0: pio@50200000 {
			compatible = "raspberrypi,pico-pio"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:410 */
			reg = < 0x50200000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:411 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:412 */
			resets = < &reset 0xa >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:413 */
			status = "disabled";                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:414 */
		};

		/* node '/soc/pio@50300000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:417 */
		pio1: pio@50300000 {
			compatible = "raspberrypi,pico-pio"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:418 */
			reg = < 0x50300000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:419 */
			clocks = < &clocks 0x5 >;            /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:420 */
			resets = < &reset 0xb >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:421 */
			status = "disabled";                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:422 */
		};

		/* node '/soc/rtc@4005c000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:425 */
		rtc: rtc@4005c000 {
			compatible = "raspberrypi,pico-rtc"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:426 */
			reg = < 0x4005c000 0x1000 >;         /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:427 */
			interrupts = < 0x19 0x3 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:428 */
			interrupt-names = "rtc";             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:429 */
			resets = < &reset 0xf >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:430 */
			alarms-count = < 0x1 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:431 */
			clocks = < &clocks 0x9 >;            /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:133 */
			status = "okay";                     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:134 */
		};
	};

	/* node '/cpus' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:31 */
	cpus {
		#address-cells = < 0x1 >; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:32 */
		#size-cells = < 0x0 >;    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:33 */

		/* node '/cpus/cpu@0' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:35 */
		cpu0: cpu@0 {
			compatible = "arm,cortex-m0+"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:36 */
			reg = < 0x0 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:37 */
		};

		/* node '/cpus/cpu@1' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:40 */
		cpu1: cpu@1 {
			compatible = "arm,cortex-m0+"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:41 */
			reg = < 0x1 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:42 */
		};
	};

	/* node '/clocks' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:46 */
	clocks {

		/* node '/clocks/clk-gpout0' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:47 */
		clk_gpout0: clk-gpout0 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:48 */
			clocks = < &pll_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:49 */
			clock-names = "pll_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:50 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:51 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:52 */
			#address-cells = < 0x0 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:53 */
			phandle = < 0x2 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-gpout1' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:56 */
		clk_gpout1: clk-gpout1 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:57 */
			clocks = < &pll_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:58 */
			clock-names = "pll_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:59 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:60 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:61 */
			phandle = < 0x3 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-gpout2' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:64 */
		clk_gpout2: clk-gpout2 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:65 */
			clocks = < &pll_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:66 */
			clock-names = "pll_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:67 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:68 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:69 */
			phandle = < 0x4 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-gpout3' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:72 */
		clk_gpout3: clk-gpout3 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:73 */
			clocks = < &pll_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:74 */
			clock-names = "pll_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:75 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:76 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:77 */
			phandle = < 0x5 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-ref' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:80 */
		clk_ref: clk-ref {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:81 */
			clocks = < &xosc >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:82 */
			clock-names = "xosc";                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:83 */
			clock-frequency = < 0xb71b00 >;        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:84 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:85 */
			phandle = < 0x6 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-sys' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:88 */
		clk_sys: clk-sys {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:89 */
			clocks = < &pll_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:90 */
			clock-names = "pll_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:91 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:92 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:93 */
			phandle = < 0x7 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-usb' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:96 */
		clk_usb: clk-usb {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:97 */
			clocks = < &pll_usb >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:98 */
			clock-names = "pll_usb";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:99 */
			clock-frequency = < 0x2dc6c00 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:100 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:101 */
			phandle = < 0x9 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-adc' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:104 */
		clk_adc: clk-adc {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:105 */
			clocks = < &pll_usb >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:106 */
			clock-names = "pll_usb";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:107 */
			clock-frequency = < 0x2dc6c00 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:108 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:109 */
			phandle = < 0xa >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-rtc' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:112 */
		clk_rtc: clk-rtc {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:113 */
			clocks = < &pll_usb >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:114 */
			clock-names = "pll_usb";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:115 */
			clock-frequency = < 0xb71b >;          /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:116 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:117 */
			phandle = < 0xb >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/clk-peri' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:120 */
		clk_peri: clk-peri {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:121 */
			clocks = < &clk_sys >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:122 */
			clock-names = "clk_sys";               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:123 */
			clock-frequency = < 0x7735940 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:124 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:125 */
			phandle = < 0x8 >;                     /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/pll-sys' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:128 */
		pll_sys: pll-sys {
			compatible = "raspberrypi,pico-pll"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:129 */
			clocks = < &xosc >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:130 */
			clock-names = "xosc";                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:131 */
			clock-div = < 0x1 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:132 */
			fb-div = < 0x7d >;                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:133 */
			post-div1 = < 0x6 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:134 */
			post-div2 = < 0x2 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:135 */
			#clock-cells = < 0x0 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:136 */
			phandle = < 0xc >;                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/pll-usb' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:139 */
		pll_usb: pll-usb {
			compatible = "raspberrypi,pico-pll"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:140 */
			clocks = < &xosc >;                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:141 */
			clock-names = "xosc";                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:142 */
			clock-div = < 0x1 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:143 */
			fb-div = < 0x64 >;                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:144 */
			post-div1 = < 0x5 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:145 */
			post-div2 = < 0x5 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:146 */
			#clock-cells = < 0x0 >;              /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:147 */
			phandle = < 0xd >;                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/rosc' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:150 */
		rosc: rosc {
			compatible = "raspberrypi,pico-rosc"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:151 */
			clock-frequency = < 0x632ea0 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:152 */
			range = < 0xaa0 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:153 */
			stage-drive-strength = < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >,
			                       < 0x0 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:154 */
			clock-div = < 0x10 >;                 /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:155 */
			phase = < 0x0 >;                      /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:156 */
			#clock-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:157 */
			phandle = < 0xf >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/rosc-ph' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:160 */
		rosc_ph: rosc-ph {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:161 */
			clock-frequency = < 0x632ea0 >;        /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:162 */
			clocks = < &rosc >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:163 */
			clock-names = "rosc";                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:164 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:165 */
			phandle = < 0x10 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/xosc' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:168 */
		xosc: xosc {
			compatible = "raspberrypi,pico-xosc"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:169 */
			clock-frequency = < 0xb71b00 >;       /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:170 */
			#clock-cells = < 0x0 >;               /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:171 */
			phandle = < 0xe >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/gpin0' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:174 */
		gpin0: gpin0 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:175 */
			status = "disabled";                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:176 */
			clock-frequency = < 0x0 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:177 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:178 */
			phandle = < 0x11 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};

		/* node '/clocks/gpin1' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:181 */
		gpin1: gpin1 {
			compatible = "raspberrypi,pico-clock"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:182 */
			status = "disabled";                   /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:183 */
			clock-frequency = < 0x0 >;             /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:184 */
			#clock-cells = < 0x0 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:185 */
			phandle = < 0x12 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:229 */
		};
	};

	/* node '/pin-controller' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:436 */
	pinctrl: pin-controller {
		compatible = "raspberrypi,pico-pinctrl"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:437 */

		/* node '/pin-controller/uart0_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:8 */
		uart0_default: uart0_default {
			phandle = < 0x16 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:95 */

			/* node '/pin-controller/uart0_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:9 */
			group1 {
				pinmux = < 0x2 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:10 */
			};

			/* node '/pin-controller/uart0_default/group2' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:12 */
			group2 {
				pinmux = < 0x22 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:13 */
				input-enable;      /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:14 */
			};
		};

		/* node '/pin-controller/i2c0_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:18 */
		i2c0_default: i2c0_default {
			phandle = < 0x19 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:106 */

			/* node '/pin-controller/i2c0_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:19 */
			group1 {
				pinmux = < 0x83 >,
				         < 0xa3 >;    /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:20 */
				input-enable;         /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:21 */
				input-schmitt-enable; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:22 */
			};
		};

		/* node '/pin-controller/i2c1_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:26 */
		i2c1_default: i2c1_default {
			phandle = < 0x1a >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:111 */

			/* node '/pin-controller/i2c1_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:27 */
			group1 {
				pinmux = < 0xc3 >,
				         < 0xe3 >;    /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:28 */
				input-enable;         /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:29 */
				input-schmitt-enable; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:30 */
			};
		};

		/* node '/pin-controller/spi0_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:34 */
		spi0_default: spi0_default {
			phandle = < 0x17 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:120 */

			/* node '/pin-controller/spi0_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:35 */
			group1 {
				pinmux = < 0x221 >,
				         < 0x241 >,
				         < 0x261 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:36 */
			};

			/* node '/pin-controller/spi0_default/group2' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:38 */
			group2 {
				pinmux = < 0x201 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:39 */
				input-enable;       /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:40 */
			};
		};

		/* node '/pin-controller/pwm_ch4b_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:44 */
		pwm_ch4b_default: pwm_ch4b_default {
			phandle = < 0x1b >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:148 */

			/* node '/pin-controller/pwm_ch4b_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:45 */
			group1 {
				pinmux = < 0x324 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:46 */
			};
		};

		/* node '/pin-controller/adc_default' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:50 */
		adc_default: adc_default {
			phandle = < 0x18 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:139 */

			/* node '/pin-controller/adc_default/group1' defined in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:51 */
			group1 {
				pinmux = < 0x34f >,
				         < 0x36f >,
				         < 0x38f >,
				         < 0x3af >; /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:52 */
				input-enable;       /* in zephyr/boards/raspberrypi/common/rpi_pico-pinctrl-common.dtsi:53 */
			};
		};
	};

	/* node '/dietemp' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:440 */
	die_temp: dietemp {
		compatible = "raspberrypi,pico-temp"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:441 */
		io-channels = < &adc 0x4 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:442 */
		status = "disabled";                  /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:443 */
	};

	/* node '/connector' defined in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:31 */
	pico_header: connector {
		compatible = "raspberrypi,pico-header";    /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:32 */
		#gpio-cells = < 0x2 >;                     /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:33 */
		gpio-map-mask = < 0xffffffff 0xffffffc0 >; /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:34 */
		gpio-map-pass-thru = < 0x0 0x3f >;         /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:35 */
		gpio-map = < 0x0 0x0 &gpio0 0x0 0x0 >,
		           < 0x1 0x0 &gpio0 0x1 0x0 >,
		           < 0x2 0x0 &gpio0 0x2 0x0 >,
		           < 0x3 0x0 &gpio0 0x3 0x0 >,
		           < 0x4 0x0 &gpio0 0x4 0x0 >,
		           < 0x5 0x0 &gpio0 0x5 0x0 >,
		           < 0x6 0x0 &gpio0 0x6 0x0 >,
		           < 0x7 0x0 &gpio0 0x7 0x0 >,
		           < 0x8 0x0 &gpio0 0x8 0x0 >,
		           < 0x9 0x0 &gpio0 0x9 0x0 >,
		           < 0xa 0x0 &gpio0 0xa 0x0 >,
		           < 0xb 0x0 &gpio0 0xb 0x0 >,
		           < 0xc 0x0 &gpio0 0xc 0x0 >,
		           < 0xd 0x0 &gpio0 0xd 0x0 >,
		           < 0xe 0x0 &gpio0 0xe 0x0 >,
		           < 0xf 0x0 &gpio0 0xf 0x0 >,
		           < 0x10 0x0 &gpio0 0x10 0x0 >,
		           < 0x11 0x0 &gpio0 0x11 0x0 >,
		           < 0x12 0x0 &gpio0 0x12 0x0 >,
		           < 0x13 0x0 &gpio0 0x13 0x0 >,
		           < 0x14 0x0 &gpio0 0x14 0x0 >,
		           < 0x15 0x0 &gpio0 0x15 0x0 >,
		           < 0x16 0x0 &gpio0 0x16 0x0 >,
		           < 0x1a 0x0 &gpio0 0x1a 0x0 >,
		           < 0x1b 0x0 &gpio0 0x1b 0x0 >,
		           < 0x1c 0x0 &gpio0 0x1c 0x0 >;   /* in zephyr/boards/raspberrypi/rpi_pico/rpi_pico-common.dtsi:36 */
	};

	/* node '/leds' defined in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:9 */
	leds {
		compatible = "gpio-leds"; /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:10 */

		/* node '/leds/led_0' defined in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:11 */
		led0: led_0 {
			gpios = < &gpio0 0x19 0x0 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:12 */
			label = "LED";               /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:13 */
		};
	};

	/* node '/pwm_leds' defined in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:17 */
	pwm_leds {
		compatible = "pwm-leds"; /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:18 */
		status = "disabled";     /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:19 */

		/* node '/pwm_leds/pwm_led_0' defined in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:20 */
		pwm_led0: pwm_led_0 {
			pwms = < &pwm 0x9 0x1312d00 0x0 >; /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:21 */
			label = "PWM_LED";                 /* in zephyr/boards/raspberrypi/common/rpi_pico-led.dtsi:22 */
		};
	};
};

4. 解説対象の node

今回は、この dts に吐き出された中の reset node に焦点を充てて解説を進めていきます。

build/zephyr/zephyr.dts
                /* node '/soc/reset-controller@4000c000' defined in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:211 */
                reset: reset-controller@4000c000 {
                        compatible = "raspberrypi,pico-reset"; /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:212 */
                        reg = < 0x4000c000 0x1000 >;           /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:213 */
                        #reset-cells = < 0x1 >;                /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:214 */
                        phandle = < 0x15 >;                    /* in zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi:266 */
                };

4.1. node を定義する compatible

4.1.1. compatible が参照するファイルの在処

compatible は右辺に文字列を取ります。この文字列は compatible が参照する *.yaml ファイルの在処を示しています。

下記は compatible へ代入されている値と、参照しているファイルパスの一部です。

compatible へ代入されている値 zephyr/dts/bindings 以下のファイルパス
"arm,cortex-m0+"; cpu/arm,cortex-m0+.yaml
"raspberrypi,pico-gpio"; gpio/raspberrypi,pico-gpio.yaml
"raspberrypi,pico-uart", serial/raspberrypi,pico-uart.yaml
"raspberrypi,pico-i2c", i2c/raspberrypi,pico-i2c.yaml
"raspberrypi,pico-spi", spi/raspberrypi,pico-spi.yaml

compatible が参照するファイルは zephyr/dts/bindings 以下に配置されており、参照するファイル名にもそのままカンマを含んだファイル名になっていることが特徴的です。

今回の解説対象である reset nodecompatible には "raspberrypi,pico-reset" とあるので、zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml にそのファイルがある、という事になります。

【参考】pico で参照している compatible のパス群
compatible zephyr/dts/bindings 以下のパス
"arm,cortex-m0+" cpu/arm,cortex-m0+.yaml
"arm,v6m-nvic" interrupt-controller/arm,v6m-nvic.yaml
"arm,armv6m-systick" timer/arm,armv6m-systick.yaml
"arm,pl011" serial/arm,pl011.yaml
"arm,pl022" spi/arm,pl022.yaml
"fixed-partitions" mtd/fixed-partitions.yaml
"gpio-leds" led/gpio-leds.yaml
"mmio-sram" sram/mmio-sram.yaml
"pwm-leds" led/pwm-leds.yaml
"snps,designware-i2c" i2c/snps,designware-i2c.yaml
"soc-nv-flash" mtd/soc-nv-flash.yaml
"raspberrypi,core-supply-regulator" regulator/raspberrypi,core-supply-regulator.yaml
"raspberrypi,pico-adc" adc/raspberrypi,pico-adc.yaml
"raspberrypi,pico-clock" clock/raspberrypi,pico-clock.yaml
"raspberrypi,pico-clock-controller" raspberrypi,pico-clock-controller.yaml
"raspberrypi,pico-dma" dma/raspberrypi,pico-dma.yaml
"raspberrypi,pico-flash-controller" flash_controller/raspberrypi,pico-flash-controller.yaml
"raspberrypi,pico-gpio" gpio/raspberrypi,pico-gpio.yaml
"raspberrypi,pico-gpio-port" gpio/raspberrypi,pico-gpio-port.yaml
"raspberrypi,pico-header" gpio/raspberrypi,pico-header.yaml
"raspberrypi,pico-i2c" i2c/raspberrypi,pico-i2c.yaml
"raspberrypi,pico-pinctrl" pinctrl/raspberrypi,pico-pinctrl.yaml
"raspberrypi,pico-pio" misc/raspberrypi,pico-pio.yaml
"raspberrypi,pico-pwm" pwm/raspberrypi,pico-pwm.yaml
"raspberrypi,pico-reset" reset/raspberrypi,pico-reset.yaml
"raspberrypi,pico-rosc" clock/raspberrypi,pico-rosc.yaml
"raspberrypi,pico-rtc" rtc/raspberrypi,pico-rtc.yaml
"raspberrypi,pico-spi" spi/raspberrypi,pico-spi.yaml
"raspberrypi,pico-temp" sensor/raspberrypi,pico-temp.yaml
"raspberrypi,pico-timer" counter/raspberrypi,pico-timer.yaml
"raspberrypi,pico-uart" serial/raspberrypi,pico-uart.yaml
"raspberrypi,pico-usbd" usb/raspberrypi,pico-usbd.yaml
"raspberrypi,pico-watchdog" watchdog/raspberrypi,pico-watchdog.yaml
"raspberrypi,pico-xosc" clock/raspberrypi,pico-xosc.yaml

4.1.2. compatible の役割

オリジナルの reset node では以下のように記述されています。

zephyr/dts/arm/raspberrypi/rpi_pico/rp2040.dtsi 内の reset node
reset: reset-controller@4000c000 {
        compatible = "raspberrypi,pico-reset";
        reg = <0x4000c000 DT_SIZE_K(4)>;
        reg-width = <4>;
        active-low = <0>;
        #reset-cells = <1>;
}; 

compatible は先述の通り *.yaml ファイルを参照して node を構築します。
そしてこの *.yaml には node の内容が定義されており、node が持つパラメータ変数の名前、型、データの範囲、その変数が必須かどうかの情報を定義しています。
つまり、C言語でいうところの構造体の定義が、Devicetree における node の定義で、それが *.yaml に記述されているわけです。

そのため、Devicetree の node がどんなパラメータを持つかは、この *.yaml を参照すれば把握できるということになります。

4.2. node を構成する yaml の解説

それでは reset node で参照している reset/raspberrypi,pico-reset.yaml の解説を進めていきます。
以下は reset/raspberrypi,pico-reset.yaml の中身です。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
# Copyright (c) 2022 Andrei-Edward Popa
# SPDX-License-Identifier: Apache-2.0

description: Raspberry Pi Pico Reset Controller

compatible: "raspberrypi,pico-reset"

include: [base.yaml, reset-controller.yaml]

properties:
  reg:
    required: true
  reg-width:
    type: int
    description: The width of the reset registers in bytes. Default is 4 bytes.
  active-low:
    type: int
    description: Set if reset is active low. Default is 0, which means active-high.
  "#reset-cells":
    const: 1

reset-cells:
- id

4.3.1. include:

これはよくある include で、記載している対象のファイルをさらに読み込みます。
汎用的に利用される node が定義されている base.yaml や、汎用的な reset controller が定義されている reset-controller.yaml を参照しています。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
include: [base.yaml, reset-controller.yaml]

4.3.2. properties:

データ構造の始まりを示すキーワード。C/C++ の struct {} に相当する。以降に properties 内のパラメータの宣言・定義が続く。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
properties:

4.3.2.1. reg:

properties に含まれるパラメータ名 reg を宣言しつつ、そのルールを定義しています。
required: true はそのまま regreset node に必須のパラメータを示しています。
reg はかなり汎用的に使われるパラメータなため、先述の include で指定されている base.yaml に基本的な定義が記載されています。
ここではこの properties 内固有の設定を追加で定義されています。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
  reg:
    required: true

では、base.yaml で定義されている reg を抜粋して確認してみます。
こちらで type: array と記載されており、reg: は配列として扱われることがわかります。

zephyr/dts/bindings/base/base.yaml 内の reg の定義
  reg:
    type: array
    description: |
      Information used to address the device. The value is specific to
      the device (i.e. is different depending on the compatible
      property).

      The "reg" property is typically a sequence of (address, length) pairs.
      Each pair is called a "register block". Values are
      conventionally written in hex.
      
      For details, see "2.3.6 reg" in Devicetree Specification v0.4.

4.3.2.2. reg-width:

offset の指定。4 byte 刻みがデフォルト値とある。この辺はSoC固有の事情なども絡むため、データシートと照らし合わせて把握する必要があります。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
  reg-width:
    type: int
    description: The width of the reset registers in bytes. Default is 4 bytes.

4.3.2.3. "#reset-cells":

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
  "#reset-cells":
    const: 1

こちらも reg と同様別の yaml ファイルで定義されているパラメータを部分的に上書きして properties に登録されています。

これは汎用的に使われる reset の定義を行っており、例えば uart0 では以下のように、resets に代入される際に、<&reset RPI_PICO_RESETS_RESET_UART0> というフォーマットを定義しています。

                uart0: uart@40034000 {
                        compatible = "raspberrypi,pico-uart", "arm,pl011";
                        reg = <0x40034000 DT_SIZE_K(4)>;
                        clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>;
                        resets = <&reset RPI_PICO_RESETS_RESET_UART0>;
                        interrupts = <20 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
                        interrupt-names = "uart0";
                        status = "disabled";
                };

例えるなら "#reset-cells" は以下のようなマクロ関数を定義していることになります。

#define GEN_RESET_PARAM(_ctrl, _id)         std::make_pair(_ctrl, _id)

では、この "#reset-cells" の定義を具体的に追いかけてみます。
"#reset-cells" は汎用的なreset-controller.yaml ファイルに以下のように定義されています。

zephyr/dts/bindings/reset/reset-controller.yaml 内の "#reset-cells" 定義
  "#reset-cells":
    type: int
    required: true
    description: |
      Number of cells in reset property. There must be a cell
      named "id" to use the reset_dt_spec macros.

内容はそのまま読み取れる通り、パラメータは int 型で、必須パラメータと設定されています。

では、これをベースに、派生先である rpi_pico 側ではどんな定義がされているでしょうか。
raspberrypi,pico-reset.yaml 側の設定を確認してみます。

zephyr/dts/bindings/reset/raspberrypi,pico-reset.yaml
  "#reset-cells":
    const: 1

つまり、上書き・追加した結果、#reset-cells は以下の構造を持つ事がわかります。

結合した設定
  "#reset-cells":
    type: int
    required: true
    const: 1
    description: |
      Number of cells in reset property. There must be a cell
      named "id" to use the reset_dt_spec macros.

つまり、先述の int 型に加え、要素数が1個というルールが追加されているわけです。
これまた C++ 的な表現を行うなら、以下のデータ構造を定義している事になるでしょうか。

std::make_tuple<ResetController*, int> uart0_reset = { &reset_ctrl, RPI_PICO_RESETS_RESET_UART0 };

5. まとめ

其の弐では、Devicetree 内のパラメータを間接的に構成する yaml の役割、在処、書式や追いかけ方について紹介を行いました。
yaml は Devicetree 内の node を定義する役割を持っており、継承・派生、オーバーライトなどの機能を持つことから class の定義に近いと理解できるかと思います。

ここまで理解できれば、Devicetree もある程度自ら編集することも可能になってきたかと思います。ただし、実際に書こうとするとどんなパラメータを代入するか?の右辺値探しに結構困るケースも出てきます。

ということで、次回はこの右辺値について解説を行っていく予定です。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?