/* * Copyright (c) 2021 Yonatan Schachter * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include #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 = ; 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 = ; }; }; 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_I2C1>; 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>; };