1/* 2 * Copyright (c) 2024 Andrew Featherstone 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7#include <zephyr/dt-bindings/adc/adc.h> 8#include <zephyr/dt-bindings/gpio/gpio.h> 9#include <zephyr/dt-bindings/clock/rpi_pico_rp2350_clock.h> 10#include <zephyr/dt-bindings/i2c/i2c.h> 11#include <zephyr/dt-bindings/regulator/rpi_pico.h> 12#include <zephyr/dt-bindings/reset/rp2350_reset.h> 13#include <mem.h> 14 15#ifndef RPI_PICO_DEFAULT_IRQ_PRIORITY 16#define RPI_PICO_DEFAULT_IRQ_PRIORITY 7 17#endif 18 19/ { 20 aliases { 21 die-temp0 = &die_temp; 22 }; 23 24 cpus { 25 #address-cells = <1>; 26 #size-cells = <0>; 27 28 /* There are two CPU sockets in the RP2350-series SoCs. 29 * Represent the sockets in the device tree as these two 30 * partially-defined CPU instances. Use a separate DTSI file to 31 * define what kind of CPU cores they are. 32 */ 33 cpu0: cpu@0 { 34 reg = <0>; 35 }; 36 37 cpu1: cpu@1 { 38 reg = <1>; 39 }; 40 }; 41 42 clocks { 43 clk_gpout0: clk-gpout0 { 44 compatible = "raspberrypi,pico-clock"; 45 clocks = <&pll_sys>; 46 clock-names = "pll_sys"; 47 clock-frequency = <150000000>; 48 #clock-cells = <0>; 49 #address-cells = <0>; 50 }; 51 52 clk_gpout1: clk-gpout1 { 53 compatible = "raspberrypi,pico-clock"; 54 clocks = <&pll_sys>; 55 clock-names = "pll_sys"; 56 clock-frequency = <150000000>; 57 #clock-cells = <0>; 58 }; 59 60 clk_gpout2: clk-gpout2 { 61 compatible = "raspberrypi,pico-clock"; 62 clocks = <&pll_sys>; 63 clock-names = "pll_sys"; 64 clock-frequency = <150000000>; 65 #clock-cells = <0>; 66 }; 67 68 clk_gpout3: clk-gpout3 { 69 compatible = "raspberrypi,pico-clock"; 70 clocks = <&pll_sys>; 71 clock-names = "pll_sys"; 72 clock-frequency = <150000000>; 73 #clock-cells = <0>; 74 }; 75 76 clk_hstx: clk-hstx { 77 compatible = "raspberrypi,pico-clock"; 78 clocks = <&pll_sys>; 79 clock-names = "pll_sys"; 80 clock-frequency = <150000000>; 81 #clock-cells = <0>; 82 }; 83 84 clk_ref: clk-ref { 85 compatible = "raspberrypi,pico-clock"; 86 clocks = <&xosc>; 87 clock-names = "xosc"; 88 clock-frequency = <12000000>; 89 #clock-cells = <0>; 90 }; 91 92 clk_sys: clk-sys { 93 compatible = "raspberrypi,pico-clock"; 94 clocks = <&pll_sys>; 95 clock-names = "pll_sys"; 96 clock-frequency = <150000000>; 97 #clock-cells = <0>; 98 }; 99 100 clk_usb: clk-usb { 101 compatible = "raspberrypi,pico-clock"; 102 clocks = <&pll_usb>; 103 clock-names = "pll_usb"; 104 clock-frequency = <48000000>; 105 #clock-cells = <0>; 106 }; 107 108 clk_adc: clk-adc { 109 compatible = "raspberrypi,pico-clock"; 110 clocks = <&pll_usb>; 111 clock-names = "pll_usb"; 112 clock-frequency = <48000000>; 113 #clock-cells = <0>; 114 }; 115 116 clk_peri: clk-peri { 117 compatible = "raspberrypi,pico-clock"; 118 clocks = <&clk_sys>; 119 clock-names = "clk_sys"; 120 clock-frequency = <150000000>; 121 #clock-cells = <0>; 122 }; 123 124 pll_sys: pll-sys { 125 compatible = "raspberrypi,pico-pll"; 126 clocks = <&xosc>; 127 clock-names = "xosc"; 128 clock-div= <1>; 129 fb-div= <125>; 130 post-div1 = <5>; 131 post-div2 = <2>; 132 #clock-cells = <0>; 133 }; 134 135 pll_usb: pll-usb { 136 compatible = "raspberrypi,pico-pll"; 137 clocks = <&xosc>; 138 clock-names = "xosc"; 139 clock-div= <1>; 140 fb-div = <100>; 141 post-div1 = <5>; 142 post-div2 = <5>; 143 #clock-cells = <0>; 144 }; 145 146 rosc: rosc { 147 compatible = "raspberrypi,pico-rosc"; 148 clock-frequency = <6500000>; 149 range = <RPI_PICO_ROSC_RANGE_RESET>; 150 stage-drive-strength = <0>, <0>, <0>, <0>, <0>, <0>, <0>, <0>; 151 clock-div = <16>; 152 phase = <0>; 153 #clock-cells = <0>; 154 }; 155 156 rosc_ph: rosc-ph { 157 compatible = "raspberrypi,pico-clock"; 158 clock-frequency = <6500000>; 159 clocks = <&rosc>; 160 clock-names = "rosc"; 161 #clock-cells = <0>; 162 }; 163 164 xosc: xosc { 165 compatible = "raspberrypi,pico-xosc"; 166 clock-frequency = <12000000>; 167 #clock-cells = <0>; 168 }; 169 170 gpin0: gpin0 { 171 compatible = "raspberrypi,pico-clock"; 172 status = "disabled"; 173 clock-frequency = <0>; 174 #clock-cells = <0>; 175 }; 176 177 gpin1: gpin1 { 178 compatible = "raspberrypi,pico-clock"; 179 status = "disabled"; 180 clock-frequency = <0>; 181 #clock-cells = <0>; 182 }; 183 }; 184 185 soc { 186 compatible = "raspberrypi,rp2350", "simple-bus"; 187 188 sram0: memory@20000000 { 189 compatible = "mmio-sram"; 190 reg = <0x20000000 DT_SIZE_K(520)>; 191 }; 192 193 qmi: flash-controller@400d0000 { 194 compatible = "raspberrypi,pico-flash-controller"; 195 reg = <0x400d0000 0xfc>; 196 197 #address-cells = <1>; 198 #size-cells = <1>; 199 200 flash0: flash@10000000 { 201 compatible = "soc-nv-flash"; 202 write-block-size = <1>; 203 erase-block-size = <DT_SIZE_K(4)>; 204 }; 205 status = "disabled"; 206 }; 207 208 reset: reset-controller@40020000 { 209 compatible = "raspberrypi,pico-reset"; 210 reg = <0x40020000 DT_SIZE_K(4)>; 211 reg-width = <4>; 212 active-low = <0>; 213 #reset-cells = <1>; 214 }; 215 216 clocks: clock-controller@40010000 { 217 compatible = "raspberrypi,pico-clock-controller"; 218 reg = <0x40010000 DT_SIZE_K(4) 219 0x40048000 DT_SIZE_K(4) 220 0x40050000 DT_SIZE_K(4) 221 0x40058000 DT_SIZE_K(4) 222 0x400e8000 DT_SIZE_K(4)>; 223 reg-names = "clocks", "xosc", "pll_sys", "pll_usb", "rosc"; 224 #clock-cells = <1>; 225 status = "okay"; 226 clocks = <&clk_gpout0>, <&clk_gpout1>, <&clk_gpout2>, <&clk_gpout3>, 227 <&clk_hstx>, <&clk_ref>, <&clk_sys>, <&clk_peri>, 228 <&clk_usb>, <&clk_adc>, 229 <&pll_sys>, <&pll_usb>, <&xosc>, <&rosc>, <&rosc_ph>, 230 <&gpin0>, <&gpin1>; 231 clock-names = "clk_gpout0", "clk_gpout1", "clk_gpout2", "clk_gpout3", 232 "clk_hstx", "clk_ref", "clk_sys", "clk_peri", 233 "clk_usb", "clk_adc", 234 "pll_sys", "pll_usb", "xosc", "rosc", "rosc_ph", 235 "gpin0", "gpin1"; 236 }; 237 238 gpio0_map: gpio@40028000 { 239 compatible = "raspberrypi,pico-gpio"; 240 reg = <0x40028000 DT_SIZE_K(4)>; 241 interrupts = <21 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 242 243 gpio-map-mask = <0xffffffe0 0xffffffc0>; 244 gpio-map-pass-thru = <0x1f 0x3f>; 245 gpio-map = <0x00 0x0 &gpio0 0x0 0x0 246 0x20 0x0 &gpio0_hi 0x0 0x0>; 247 #gpio-cells = <2>; 248 #address-cells = <1>; 249 #size-cells = <0>; 250 251 gpio0: gpio-port@0 { 252 compatible = "raspberrypi,pico-gpio-port"; 253 reg = <0x0>; 254 status = "disabled"; 255 gpio-controller; 256 #gpio-cells = <2>; 257 ngpios = <32>; 258 }; 259 260 gpio0_hi: gpio-port@1 { 261 compatible = "raspberrypi,pico-gpio-port"; 262 reg = <0x1>; 263 status = "disabled"; 264 gpio-controller; 265 #gpio-cells = <2>; 266 ngpios = <32>; 267 }; 268 }; 269 270 uart0: uart@40070000 { 271 compatible = "raspberrypi,pico-uart", "arm,pl011"; 272 reg = <0x40070000 DT_SIZE_K(4)>; 273 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 274 resets = <&reset RPI_PICO_RESETS_RESET_UART0>; 275 interrupts = <33 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 276 interrupt-names = "uart0"; 277 status = "disabled"; 278 }; 279 280 uart1: uart@40078000 { 281 compatible = "raspberrypi,pico-uart", "arm,pl011"; 282 reg = <0x40078000 DT_SIZE_K(4)>; 283 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 284 resets = <&reset RPI_PICO_RESETS_RESET_UART1>; 285 interrupts = <34 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 286 interrupt-names = "uart1"; 287 status = "disabled"; 288 }; 289 290 spi0: spi@40080000 { 291 compatible = "raspberrypi,pico-spi", "arm,pl022"; 292 #address-cells = <1>; 293 #size-cells = <0>; 294 reg = <0x40080000 DT_SIZE_K(4)>; 295 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 296 resets = <&reset RPI_PICO_RESETS_RESET_SPI0>; 297 interrupts = <31 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 298 interrupt-names = "spi0"; 299 status = "disabled"; 300 }; 301 302 spi1: spi@40088000 { 303 compatible = "raspberrypi,pico-spi", "arm,pl022"; 304 #address-cells = <1>; 305 #size-cells = <0>; 306 reg = <0x40088000 DT_SIZE_K(4)>; 307 resets = <&reset RPI_PICO_RESETS_RESET_SPI1>; 308 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 309 interrupts = <32 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 310 interrupt-names = "spi1"; 311 status = "disabled"; 312 }; 313 314 i2c0: i2c@40090000 { 315 compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; 316 #address-cells = <1>; 317 #size-cells = <0>; 318 reg = <0x40090000 DT_SIZE_K(4)>; 319 resets = <&reset RPI_PICO_RESETS_RESET_I2C0>; 320 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 321 interrupts = <36 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 322 interrupt-names = "i2c0"; 323 status = "disabled"; 324 }; 325 326 i2c1: i2c@40098000 { 327 compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; 328 #address-cells = <1>; 329 #size-cells = <0>; 330 reg = <0x40098000 DT_SIZE_K(4)>; 331 resets = <&reset RPI_PICO_RESETS_RESET_I2C1>; 332 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 333 interrupts = <37 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 334 interrupt-names = "i2c1"; 335 status = "disabled"; 336 }; 337 338 adc: adc@400a0000 { 339 compatible = "raspberrypi,pico-adc"; 340 reg = <0x400a0000 DT_SIZE_K(4)>; 341 resets = <&reset RPI_PICO_RESETS_RESET_ADC>; 342 clocks = <&clocks RPI_PICO_CLKID_CLK_ADC>; 343 interrupts = <35 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 344 interrupt-names = "adc0"; 345 status = "disabled"; 346 #io-channel-cells = <1>; 347 }; 348 349 pwm: pwm@400a8000 { 350 compatible = "raspberrypi,pico-pwm"; 351 reg = <0x400a8000 DT_SIZE_K(4)>; 352 resets = <&reset RPI_PICO_RESETS_RESET_PWM>; 353 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 354 interrupts = <8 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 355 <9 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 356 interrupt-names = "PWM_IRQ_WRAP_0", 357 "PWM_IRQ_WRAP_1"; 358 status = "disabled"; 359 #pwm-cells = <3>; 360 }; 361 362 timer0: timer@400b0000 { 363 compatible = "raspberrypi,pico-timer"; 364 reg = <0x400b0000 DT_SIZE_K(4)>; 365 resets = <&reset RPI_PICO_RESETS_RESET_TIMER0>; 366 clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; 367 interrupts = <0 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 368 <1 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 369 <2 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 370 <3 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 371 interrupt-names = "TIMER0_IRQ_0", 372 "TIMER0_IRQ_1", 373 "TIMER0_IRQ_2", 374 "TIMER0_IRQ_3"; 375 status = "disabled"; 376 }; 377 378 timer1: timer@400b8000 { 379 compatible = "raspberrypi,pico-timer"; 380 reg = <0x400b8000 DT_SIZE_K(4)>; 381 resets = <&reset RPI_PICO_RESETS_RESET_TIMER1>; 382 clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; 383 interrupts = <4 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 384 <5 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 385 <6 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 386 <7 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 387 interrupt-names = "TIMER1_IRQ_0", 388 "TIMER1_IRQ_1", 389 "TIMER1_IRQ_2", 390 "TIMER1_IRQ_3"; 391 status = "disabled"; 392 }; 393 394 wdt0: watchdog@400d8000 { 395 compatible = "raspberrypi,pico-watchdog"; 396 reg = <0x400d8000 DT_SIZE_K(4)>; 397 clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; 398 status = "disabled"; 399 }; 400 401 dma: dma@50000000 { 402 compatible = "raspberrypi,pico-dma"; 403 reg = <0x50000000 DT_SIZE_K(64)>; 404 resets = <&reset RPI_PICO_RESETS_RESET_DMA>; 405 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 406 interrupts = <10 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 407 <11 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 408 <12 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 409 <13 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 410 interrupt-names = "dma0", "dma1", "dma2", "dma3"; 411 dma-channels = <16>; 412 status = "disabled"; 413 #dma-cells = <3>; 414 }; 415 416 usbd: usbd@50100000 { 417 compatible = "raspberrypi,pico-usbd"; 418 reg = <0x50100000 0x10000>; 419 resets = <&reset RPI_PICO_RESETS_RESET_USBCTRL>; 420 clocks = <&clocks RPI_PICO_CLKID_CLK_USB>; 421 interrupts = <14 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 422 interrupt-names = "usbctrl"; 423 num-bidir-endpoints = <16>; 424 status = "disabled"; 425 }; 426 427 pio0: pio@50200000 { 428 compatible = "raspberrypi,pico-pio"; 429 reg = <0x50200000 DT_SIZE_K(4)>; 430 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 431 resets = <&reset RPI_PICO_RESETS_RESET_PIO0>; 432 status = "disabled"; 433 }; 434 435 pio1: pio@50300000 { 436 compatible = "raspberrypi,pico-pio"; 437 reg = <0x50300000 DT_SIZE_K(4)>; 438 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 439 resets = <&reset RPI_PICO_RESETS_RESET_PIO1>; 440 status = "disabled"; 441 }; 442 443 pio2: pio@50400000 { 444 compatible = "raspberrypi,pico-pio"; 445 reg = <0x50400000 DT_SIZE_K(4)>; 446 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 447 resets = <&reset RPI_PICO_RESETS_RESET_PIO2>; 448 status = "disabled"; 449 }; 450 }; 451 452 pinctrl: pin-controller { 453 compatible = "raspberrypi,pico-pinctrl"; 454 status = "okay"; 455 }; 456 457 die_temp: dietemp { 458 compatible = "raspberrypi,pico-temp"; 459 status = "disabled"; 460 }; 461}; 462