1/* 2 * Copyright (c) 2021 Yonatan Schachter 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7#include <arm/armv6-m.dtsi> 8#include <zephyr/dt-bindings/adc/adc.h> 9#include <zephyr/dt-bindings/gpio/gpio.h> 10#include <zephyr/dt-bindings/clock/rpi_pico_rp2040_clock.h> 11#include <zephyr/dt-bindings/i2c/i2c.h> 12#include <zephyr/dt-bindings/regulator/rpi_pico.h> 13#include <zephyr/dt-bindings/reset/rp2040_reset.h> 14#include <mem.h> 15 16#include <arm/raspberrypi/rpi_pico/override.dtsi> 17/* 18 * This value can be overridden at the board level or in an application specific 19 * override.dtsi file. 20 */ 21 22#ifndef RPI_PICO_DEFAULT_IRQ_PRIORITY 23#define RPI_PICO_DEFAULT_IRQ_PRIORITY 3 24#endif 25 26/ { 27 aliases { 28 die-temp0 = &die_temp; 29 }; 30 31 cpus { 32 #address-cells = <1>; 33 #size-cells = <0>; 34 35 cpu0: cpu@0 { 36 compatible = "arm,cortex-m0+"; 37 reg = <0>; 38 }; 39 40 cpu1: cpu@1 { 41 compatible = "arm,cortex-m0+"; 42 reg = <1>; 43 }; 44 }; 45 46 clocks { 47 clk_gpout0: clk-gpout0 { 48 compatible = "raspberrypi,pico-clock"; 49 clocks = <&pll_sys>; 50 clock-names = "pll_sys"; 51 clock-frequency = <125000000>; 52 #clock-cells = <0>; 53 #address-cells = <0>; 54 }; 55 56 clk_gpout1: clk-gpout1 { 57 compatible = "raspberrypi,pico-clock"; 58 clocks = <&pll_sys>; 59 clock-names = "pll_sys"; 60 clock-frequency = <125000000>; 61 #clock-cells = <0>; 62 }; 63 64 clk_gpout2: clk-gpout2 { 65 compatible = "raspberrypi,pico-clock"; 66 clocks = <&pll_sys>; 67 clock-names = "pll_sys"; 68 clock-frequency = <125000000>; 69 #clock-cells = <0>; 70 }; 71 72 clk_gpout3: clk-gpout3 { 73 compatible = "raspberrypi,pico-clock"; 74 clocks = <&pll_sys>; 75 clock-names = "pll_sys"; 76 clock-frequency = <125000000>; 77 #clock-cells = <0>; 78 }; 79 80 clk_ref: clk-ref { 81 compatible = "raspberrypi,pico-clock"; 82 clocks = <&xosc>; 83 clock-names = "xosc"; 84 clock-frequency = <12000000>; 85 #clock-cells = <0>; 86 }; 87 88 clk_sys: clk-sys { 89 compatible = "raspberrypi,pico-clock"; 90 clocks = <&pll_sys>; 91 clock-names = "pll_sys"; 92 clock-frequency = <125000000>; 93 #clock-cells = <0>; 94 }; 95 96 clk_usb: clk-usb { 97 compatible = "raspberrypi,pico-clock"; 98 clocks = <&pll_usb>; 99 clock-names = "pll_usb"; 100 clock-frequency = <48000000>; 101 #clock-cells = <0>; 102 }; 103 104 clk_adc: clk-adc { 105 compatible = "raspberrypi,pico-clock"; 106 clocks = <&pll_usb>; 107 clock-names = "pll_usb"; 108 clock-frequency = <48000000>; 109 #clock-cells = <0>; 110 }; 111 112 clk_rtc: clk-rtc { 113 compatible = "raspberrypi,pico-clock"; 114 clocks = <&pll_usb>; 115 clock-names = "pll_usb"; 116 clock-frequency = <46875>; 117 #clock-cells = <0>; 118 }; 119 120 clk_peri: clk-peri { 121 compatible = "raspberrypi,pico-clock"; 122 clocks = <&clk_sys>; 123 clock-names = "clk_sys"; 124 clock-frequency = <125000000>; 125 #clock-cells = <0>; 126 }; 127 128 pll_sys: pll-sys { 129 compatible = "raspberrypi,pico-pll"; 130 clocks = <&xosc>; 131 clock-names = "xosc"; 132 clock-div= <1>; 133 fb-div= <125>; 134 post-div1 = <6>; 135 post-div2 = <2>; 136 #clock-cells = <0>; 137 }; 138 139 pll_usb: pll-usb { 140 compatible = "raspberrypi,pico-pll"; 141 clocks = <&xosc>; 142 clock-names = "xosc"; 143 clock-div= <1>; 144 fb-div = <100>; 145 post-div1 = <5>; 146 post-div2 = <5>; 147 #clock-cells = <0>; 148 }; 149 150 rosc: rosc { 151 compatible = "raspberrypi,pico-rosc"; 152 clock-frequency = <6500000>; 153 range = <RPI_PICO_ROSC_RANGE_RESET>; 154 stage-drive-strength = <0>, <0>, <0>, <0>, <0>, <0>, <0>, <0>; 155 clock-div = <16>; 156 phase = <0>; 157 #clock-cells = <0>; 158 }; 159 160 rosc_ph: rosc-ph { 161 compatible = "raspberrypi,pico-clock"; 162 clock-frequency = <6500000>; 163 clocks = <&rosc>; 164 clock-names = "rosc"; 165 #clock-cells = <0>; 166 }; 167 168 xosc: xosc { 169 compatible = "raspberrypi,pico-xosc"; 170 clock-frequency = <12000000>; 171 #clock-cells = <0>; 172 }; 173 174 gpin0: gpin0 { 175 compatible = "raspberrypi,pico-clock"; 176 status = "disabled"; 177 clock-frequency = <0>; 178 #clock-cells = <0>; 179 }; 180 181 gpin1: gpin1 { 182 compatible = "raspberrypi,pico-clock"; 183 status = "disabled"; 184 clock-frequency = <0>; 185 #clock-cells = <0>; 186 }; 187 }; 188 189 soc { 190 compatible = "raspberrypi,rp2040", "simple-bus"; 191 192 sram0: memory@20000000 { 193 compatible = "mmio-sram"; 194 reg = <0x20000000 DT_SIZE_K(264)>; 195 }; 196 197 ssi: flash-controller@18000000 { 198 compatible = "raspberrypi,pico-flash-controller"; 199 reg = <0x18000000 0xfc>; 200 201 #address-cells = <1>; 202 #size-cells = <1>; 203 204 flash0: flash@10000000 { 205 compatible = "soc-nv-flash"; 206 write-block-size = <1>; 207 erase-block-size = <DT_SIZE_K(4)>; 208 }; 209 }; 210 211 reset: reset-controller@4000c000 { 212 compatible = "raspberrypi,pico-reset"; 213 reg = <0x4000c000 DT_SIZE_K(4)>; 214 reg-width = <4>; 215 active-low = <0>; 216 #reset-cells = <1>; 217 }; 218 219 clocks: clock-controller@40008000 { 220 compatible = "raspberrypi,pico-clock-controller"; 221 reg = <0x40008000 DT_SIZE_K(4) 222 0x40024000 DT_SIZE_K(4) 223 0x40028000 DT_SIZE_K(4) 224 0x4002c000 DT_SIZE_K(4) 225 0x40060000 DT_SIZE_K(4)>; 226 reg-names = "clocks", "xosc", "pll_sys", "pll_usb", "rosc"; 227 #clock-cells = <1>; 228 status = "okay"; 229 clocks = <&clk_gpout0>, <&clk_gpout1>, <&clk_gpout2>, <&clk_gpout3>, 230 <&clk_ref>, <&clk_sys>, <&clk_peri>, 231 <&clk_usb>, <&clk_adc>, <&clk_rtc>, 232 <&pll_sys>, <&pll_usb>, <&xosc>, <&rosc>, <&rosc_ph>, 233 <&gpin0>, <&gpin1>; 234 clock-names = "clk_gpout0", "clk_gpout1", "clk_gpout2", "clk_gpout3", 235 "clk_ref", "clk_sys", "clk_peri", 236 "clk_usb", "clk_adc", "clk_rtc", 237 "pll_sys", "pll_usb", "xosc", "rosc", "rosc_ph", 238 "gpin0", "gpin1"; 239 }; 240 241 gpio0_map: gpio@40014000 { 242 compatible = "raspberrypi,pico-gpio"; 243 reg = <0x40014000 DT_SIZE_K(4)>; 244 interrupts = <13 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 245 246 gpio-map-mask = <0xffffffe0 0xffffffc0>; 247 gpio-map-pass-thru = <0x1f 0x3f>; 248 gpio-map = <0x0 0x0 &gpio0 0x0 0x0>; 249 250 #gpio-cells = <2>; 251 #address-cells = <1>; 252 #size-cells = <0>; 253 254 gpio0: gpio-port@0 { 255 compatible = "raspberrypi,pico-gpio-port"; 256 reg = <0x0>; 257 status = "disabled"; 258 gpio-controller; 259 #gpio-cells = <2>; 260 ngpios = <30>; 261 }; 262 }; 263 264 uart0: uart@40034000 { 265 compatible = "raspberrypi,pico-uart", "arm,pl011"; 266 reg = <0x40034000 DT_SIZE_K(4)>; 267 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 268 resets = <&reset RPI_PICO_RESETS_RESET_UART0>; 269 interrupts = <20 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 270 interrupt-names = "uart0"; 271 status = "disabled"; 272 }; 273 274 uart1: uart@40038000 { 275 compatible = "raspberrypi,pico-uart", "arm,pl011"; 276 reg = <0x40038000 DT_SIZE_K(4)>; 277 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 278 resets = <&reset RPI_PICO_RESETS_RESET_UART1>; 279 interrupts = <21 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 280 interrupt-names = "uart1"; 281 status = "disabled"; 282 }; 283 284 spi0: spi@4003c000 { 285 compatible = "raspberrypi,pico-spi", "arm,pl022"; 286 #address-cells = <1>; 287 #size-cells = <0>; 288 reg = <0x4003c000 DT_SIZE_K(4)>; 289 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 290 resets = <&reset RPI_PICO_RESETS_RESET_SPI0>; 291 interrupts = <18 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 292 interrupt-names = "spi0"; 293 status = "disabled"; 294 }; 295 296 spi1: spi@40040000 { 297 compatible = "raspberrypi,pico-spi", "arm,pl022"; 298 #address-cells = <1>; 299 #size-cells = <0>; 300 reg = <0x40040000 DT_SIZE_K(4)>; 301 resets = <&reset RPI_PICO_RESETS_RESET_SPI1>; 302 clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; 303 interrupts = <19 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 304 interrupt-names = "spi1"; 305 status = "disabled"; 306 }; 307 308 adc: adc@4004c000 { 309 compatible = "raspberrypi,pico-adc"; 310 reg = <0x4004c000 DT_SIZE_K(4)>; 311 resets = <&reset RPI_PICO_RESETS_RESET_ADC>; 312 clocks = <&clocks RPI_PICO_CLKID_CLK_ADC>; 313 interrupts = <22 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 314 interrupt-names = "adc0"; 315 status = "disabled"; 316 #io-channel-cells = <1>; 317 }; 318 319 i2c0: i2c@40044000 { 320 compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; 321 #address-cells = <1>; 322 #size-cells = <0>; 323 reg = <0x40044000 DT_SIZE_K(4)>; 324 resets = <&reset RPI_PICO_RESETS_RESET_I2C0>; 325 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 326 interrupts = <23 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 327 interrupt-names = "i2c0"; 328 status = "disabled"; 329 }; 330 331 i2c1: i2c@40048000 { 332 compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; 333 #address-cells = <1>; 334 #size-cells = <0>; 335 reg = <0x40048000 DT_SIZE_K(4)>; 336 resets = <&reset RPI_PICO_RESETS_RESET_I2C1>; 337 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 338 interrupts = <24 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 339 interrupt-names = "i2c1"; 340 status = "disabled"; 341 }; 342 343 wdt0: watchdog@40058000 { 344 compatible = "raspberrypi,pico-watchdog"; 345 reg = <0x40058000 DT_SIZE_K(4)>; 346 clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; 347 status = "disabled"; 348 }; 349 350 usbd: usbd@50110000 { 351 compatible = "raspberrypi,pico-usbd"; 352 reg = <0x50110000 0x10000>; 353 resets = <&reset RPI_PICO_RESETS_RESET_USBCTRL>; 354 clocks = <&clocks RPI_PICO_CLKID_CLK_USB>; 355 interrupts = <5 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 356 interrupt-names = "usbctrl"; 357 num-bidir-endpoints = <16>; 358 status = "disabled"; 359 }; 360 361 pwm: pwm@40050000 { 362 compatible = "raspberrypi,pico-pwm"; 363 reg = <0x40050000 DT_SIZE_K(4)>; 364 resets = <&reset RPI_PICO_RESETS_RESET_PWM>; 365 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 366 interrupts = <4 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 367 interrupt-names = "PWM_IRQ_WRAP"; 368 status = "disabled"; 369 #pwm-cells = <3>; 370 }; 371 372 timer: timer@40054000 { 373 compatible = "raspberrypi,pico-timer"; 374 reg = <0x40054000 DT_SIZE_K(4)>; 375 resets = <&reset RPI_PICO_RESETS_RESET_TIMER>; 376 clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; 377 interrupts = <0 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 378 <1 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 379 <2 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 380 <3 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 381 interrupt-names = "TIMER_IRQ_0", 382 "TIMER_IRQ_1", 383 "TIMER_IRQ_2", 384 "TIMER_IRQ_3"; 385 status = "disabled"; 386 }; 387 388 dma: dma@50000000 { 389 compatible = "raspberrypi,pico-dma"; 390 reg = <0x50000000 DT_SIZE_K(64)>; 391 resets = <&reset RPI_PICO_RESETS_RESET_DMA>; 392 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 393 interrupts = <11 RPI_PICO_DEFAULT_IRQ_PRIORITY>, 394 <12 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 395 interrupt-names = "dma0", "dma1"; 396 dma-channels = <12>; 397 status = "disabled"; 398 #dma-cells = <3>; 399 }; 400 401 vreg: vreg@40064000 { 402 compatible = "raspberrypi,core-supply-regulator"; 403 reg = <0x40064000 1>; 404 status = "okay"; 405 raspberrypi,brown-out-detection; 406 raspberrypi,brown-out-threshold = <860000>; 407 }; 408 409 pio0: pio@50200000 { 410 compatible = "raspberrypi,pico-pio"; 411 reg = <0x50200000 DT_SIZE_K(4)>; 412 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 413 resets = <&reset RPI_PICO_RESETS_RESET_PIO0>; 414 status = "disabled"; 415 }; 416 417 pio1: pio@50300000 { 418 compatible = "raspberrypi,pico-pio"; 419 reg = <0x50300000 DT_SIZE_K(4)>; 420 clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; 421 resets = <&reset RPI_PICO_RESETS_RESET_PIO1>; 422 status = "disabled"; 423 }; 424 425 rtc: rtc@4005c000 { 426 compatible = "raspberrypi,pico-rtc"; 427 reg = <0x4005c000 DT_SIZE_K(4)>; 428 interrupts = <25 RPI_PICO_DEFAULT_IRQ_PRIORITY>; 429 interrupt-names = "rtc"; 430 resets = <&reset RPI_PICO_RESETS_RESET_RTC>; 431 alarms-count = <1>; 432 status = "disabled"; 433 }; 434 }; 435 436 pinctrl: pin-controller { 437 compatible = "raspberrypi,pico-pinctrl"; 438 }; 439 440 die_temp: dietemp { 441 compatible = "raspberrypi,pico-temp"; 442 io-channels = <&adc 4>; 443 status = "disabled"; 444 }; 445}; 446 447&nvic { 448 arm,num-irq-priority-bits = <2>; 449}; 450