| /* |
| * Copyright (c) 2021 Yonatan Schachter |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <arm/armv6-m.dtsi> |
| #include <zephyr/dt-bindings/adc/adc.h> |
| #include <zephyr/dt-bindings/gpio/gpio.h> |
| #include <zephyr/dt-bindings/clock/rpi_pico_clock.h> |
| #include <zephyr/dt-bindings/i2c/i2c.h> |
| #include <zephyr/dt-bindings/regulator/rpi_pico.h> |
| #include <mem.h> |
| |
| #include "rpi_pico_common.dtsi" |
| |
| / { |
| aliases { |
| die-temp0 = &die_temp; |
| }; |
| |
| cpus { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| cpu0: cpu@0 { |
| compatible = "arm,cortex-m0+"; |
| reg = <0>; |
| }; |
| |
| cpu1: cpu@1 { |
| compatible = "arm,cortex-m0+"; |
| reg = <1>; |
| }; |
| }; |
| |
| clocks { |
| clk_gpout0: clk-gpout0 { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_sys>; |
| clock-names = "pll_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| #address-cells = <0>; |
| }; |
| |
| clk_gpout1: clk-gpout1 { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_sys>; |
| clock-names = "pll_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_gpout2: clk-gpout2 { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_sys>; |
| clock-names = "pll_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_gpout3: clk-gpout3 { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_sys>; |
| clock-names = "pll_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_ref: clk-ref { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&xosc>; |
| clock-names = "xosc"; |
| clock-frequency = <12000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_sys: clk-sys { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_sys>; |
| clock-names = "pll_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_usb: clk-usb { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_usb>; |
| clock-names = "pll_usb"; |
| clock-frequency = <48000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_adc: clk-adc { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_usb>; |
| clock-names = "pll_usb"; |
| clock-frequency = <48000000>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_rtc: clk-rtc { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&pll_usb>; |
| clock-names = "pll_usb"; |
| clock-frequency = <46875>; |
| #clock-cells = <0>; |
| }; |
| |
| clk_peri: clk-peri { |
| compatible = "raspberrypi,pico-clock"; |
| clocks = <&clk_sys>; |
| clock-names = "clk_sys"; |
| clock-frequency = <125000000>; |
| #clock-cells = <0>; |
| }; |
| |
| pll_sys: pll-sys { |
| compatible = "raspberrypi,pico-pll"; |
| clocks = <&xosc>; |
| clock-names = "xosc"; |
| clock-div= <1>; |
| fb-div= <125>; |
| post-div1 = <6>; |
| post-div2 = <2>; |
| #clock-cells = <0>; |
| }; |
| |
| pll_usb: pll-usb { |
| compatible = "raspberrypi,pico-pll"; |
| clocks = <&xosc>; |
| clock-names = "xosc"; |
| clock-div= <1>; |
| fb-div = <100>; |
| post-div1 = <5>; |
| post-div2 = <5>; |
| #clock-cells = <0>; |
| }; |
| |
| rosc: rosc { |
| compatible = "raspberrypi,pico-rosc"; |
| clock-frequency = <6500000>; |
| range = <RPI_PICO_ROSC_RANGE_RESET>; |
| stage-drive-strength = <0>, <0>, <0>, <0>, <0>, <0>, <0>, <0>; |
| clock-div = <16>; |
| phase = <0>; |
| #clock-cells = <0>; |
| }; |
| |
| rosc_ph: rosc-ph { |
| compatible = "raspberrypi,pico-clock"; |
| clock-frequency = <6500000>; |
| clocks = <&rosc>; |
| clock-names = "rosc"; |
| #clock-cells = <0>; |
| }; |
| |
| xosc: xosc { |
| compatible = "raspberrypi,pico-clock"; |
| clock-frequency = <12000000>; |
| #clock-cells = <0>; |
| }; |
| |
| gpin0: gpin0 { |
| compatible = "raspberrypi,pico-clock"; |
| status = "disabled"; |
| clock-frequency = <0>; |
| #clock-cells = <0>; |
| }; |
| |
| gpin1: gpin1 { |
| compatible = "raspberrypi,pico-clock"; |
| status = "disabled"; |
| clock-frequency = <0>; |
| #clock-cells = <0>; |
| }; |
| }; |
| |
| soc { |
| compatible = "raspberrypi,rp2040", "simple-bus"; |
| |
| sram0: memory@20000000 { |
| compatible = "mmio-sram"; |
| reg = <0x20000000 DT_SIZE_K(264)>; |
| }; |
| |
| ssi: flash-controller@18000000 { |
| compatible = "raspberrypi,pico-flash-controller"; |
| reg = <0x18000000 0xfc>; |
| |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| flash0: flash@10000000 { |
| compatible = "soc-nv-flash"; |
| write-block-size = <1>; |
| erase-block-size = <DT_SIZE_K(4)>; |
| }; |
| }; |
| |
| reset: reset-controller@4000c000 { |
| compatible = "raspberrypi,pico-reset"; |
| reg = <0x4000c000 DT_SIZE_K(4)>; |
| reg-width = <4>; |
| active-low = <0>; |
| #reset-cells = <1>; |
| }; |
| |
| clocks: clock-controller@40008000 { |
| compatible = "raspberrypi,pico-clock-controller"; |
| reg = <0x40008000 DT_SIZE_K(4) |
| 0x40024000 DT_SIZE_K(4) |
| 0x40028000 DT_SIZE_K(4) |
| 0x4002c000 DT_SIZE_K(4) |
| 0x40060000 DT_SIZE_K(4)>; |
| reg-names = "clocks", "xosc", "pll_sys", "pll_usb", "rosc"; |
| #clock-cells = <1>; |
| status = "okay"; |
| 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>; |
| 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"; |
| }; |
| |
| gpio0: gpio@40014000 { |
| compatible = "raspberrypi,pico-gpio"; |
| reg = <0x40014000 DT_SIZE_K(4)>; |
| interrupts = <13 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| gpio-controller; |
| #gpio-cells = <2>; |
| status = "disabled"; |
| ngpios = <30>; |
| }; |
| |
| uart0: uart@40034000 { |
| compatible = "raspberrypi,pico-uart"; |
| 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"; |
| }; |
| |
| uart1: uart@40038000 { |
| compatible = "raspberrypi,pico-uart"; |
| reg = <0x40038000 DT_SIZE_K(4)>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; |
| resets = <&reset RPI_PICO_RESETS_RESET_UART1>; |
| interrupts = <21 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "uart1"; |
| status = "disabled"; |
| }; |
| |
| spi0: spi@4003c000 { |
| compatible = "raspberrypi,pico-spi", "arm,pl022"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0x4003c000 DT_SIZE_K(4)>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; |
| resets = <&reset RPI_PICO_RESETS_RESET_SPI0>; |
| interrupts = <18 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "spi0"; |
| status = "disabled"; |
| }; |
| |
| spi1: spi@40040000 { |
| compatible = "raspberrypi,pico-spi", "arm,pl022"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0x40040000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_SPI1>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_PERI>; |
| interrupts = <19 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "spi1"; |
| status = "disabled"; |
| }; |
| |
| adc: adc@4004c000 { |
| compatible = "raspberrypi,pico-adc"; |
| reg = <0x4004c000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_ADC>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_ADC>; |
| interrupts = <22 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "adc0"; |
| status = "disabled"; |
| #io-channel-cells = <1>; |
| }; |
| |
| i2c0: i2c@40044000 { |
| compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0x40044000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_I2C0>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| interrupts = <23 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "i2c0"; |
| status = "disabled"; |
| }; |
| |
| i2c1: i2c@40048000 { |
| compatible = "raspberrypi,pico-i2c", "snps,designware-i2c"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0x40048000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_I2C0>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| interrupts = <24 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "i2c1"; |
| status = "disabled"; |
| }; |
| |
| wdt0: watchdog@40058000 { |
| compatible = "raspberrypi,pico-watchdog"; |
| reg = <0x40058000 DT_SIZE_K(4)>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; |
| status = "disabled"; |
| }; |
| |
| usbd: usbd@50100000 { |
| compatible = "raspberrypi,pico-usbd"; |
| reg = <0x50100000 0x10000>; |
| resets = <&reset RPI_PICO_RESETS_RESET_USBCTRL>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_USB>; |
| interrupts = <5 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "usbctrl"; |
| num-bidir-endpoints = <16>; |
| status = "disabled"; |
| }; |
| |
| pwm: pwm@40050000 { |
| compatible = "raspberrypi,pico-pwm"; |
| reg = <0x40050000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_PWM>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| interrupts = <4 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "PWM_IRQ_WRAP"; |
| status = "disabled"; |
| #pwm-cells = <3>; |
| }; |
| |
| timer: timer@40054000 { |
| compatible = "raspberrypi,pico-timer"; |
| reg = <0x40054000 DT_SIZE_K(4)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_TIMER>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_REF>; |
| interrupts = <0 RPI_PICO_DEFAULT_IRQ_PRIORITY>, |
| <1 RPI_PICO_DEFAULT_IRQ_PRIORITY>, |
| <2 RPI_PICO_DEFAULT_IRQ_PRIORITY>, |
| <3 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "TIMER_IRQ_0", |
| "TIMER_IRQ_1", |
| "TIMER_IRQ_2", |
| "TIMER_IRQ_3"; |
| status = "disabled"; |
| }; |
| |
| dma: dma@50000000 { |
| compatible = "raspberrypi,pico-dma"; |
| reg = <0x50000000 DT_SIZE_K(64)>; |
| resets = <&reset RPI_PICO_RESETS_RESET_DMA>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| interrupts = <11 RPI_PICO_DEFAULT_IRQ_PRIORITY>, |
| <12 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "dma0", "dma1"; |
| dma-channels = <12>; |
| status = "disabled"; |
| #dma-cells = <3>; |
| }; |
| |
| vreg: vreg@40064000 { |
| compatible = "raspberrypi,core-supply-regulator"; |
| reg = <0x40064000 1>; |
| status = "okay"; |
| raspberrypi,brown-out-detection; |
| raspberrypi,brown-out-threshold = <860000>; |
| }; |
| |
| pio0: pio@50200000 { |
| compatible = "raspberrypi,pico-pio"; |
| reg = <0x50200000 DT_SIZE_K(4)>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| resets = <&reset RPI_PICO_RESETS_RESET_PIO0>; |
| status = "disabled"; |
| }; |
| |
| pio1: pio@50300000 { |
| compatible = "raspberrypi,pico-pio"; |
| reg = <0x50300000 DT_SIZE_K(4)>; |
| clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>; |
| resets = <&reset RPI_PICO_RESETS_RESET_PIO1>; |
| status = "disabled"; |
| }; |
| |
| rtc: rtc@4005c000 { |
| compatible = "raspberrypi,pico-rtc"; |
| reg = <0x4005c000 DT_SIZE_K(4)>; |
| interrupts = <25 RPI_PICO_DEFAULT_IRQ_PRIORITY>; |
| interrupt-names = "rtc"; |
| resets = <&reset RPI_PICO_RESETS_RESET_RTC>; |
| alarms-count = <1>; |
| status = "disabled"; |
| }; |
| }; |
| |
| pinctrl: pin-controller { |
| compatible = "raspberrypi,pico-pinctrl"; |
| }; |
| |
| die_temp: dietemp { |
| compatible = "raspberrypi,pico-temp"; |
| io-channels = <&adc 4>; |
| status = "disabled"; |
| }; |
| }; |
| |
| &nvic { |
| arm,num-irq-priority-bits = <2>; |
| }; |