| // SPDX-License-Identifier: GPL-2.0 |
| /dts-v1/; |
| #include "bcm2711.dtsi" |
| #include "bcm2835-rpi.dtsi" |
| #include "bcm283x-rpi-usb-peripheral.dtsi" |
| |
| #include <dt-bindings/reset/raspberrypi,firmware-reset.h> |
| |
| / { |
| compatible = "raspberrypi,4-model-b", "brcm,bcm2711"; |
| model = "Raspberry Pi 4 Model B"; |
| |
| chosen { |
| /* 8250 auxiliary UART instead of pl011 */ |
| stdout-path = "serial1:115200n8"; |
| }; |
| |
| /* Will be filled by the bootloader */ |
| memory@0 { |
| device_type = "memory"; |
| reg = <0 0 0>; |
| }; |
| |
| aliases { |
| emmc2bus = &emmc2bus; |
| ethernet0 = &genet; |
| pcie0 = &pcie0; |
| blconfig = &blconfig; |
| }; |
| |
| leds { |
| act { |
| gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; |
| }; |
| |
| pwr { |
| label = "PWR"; |
| gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; |
| default-state = "keep"; |
| linux,default-trigger = "default-on"; |
| }; |
| }; |
| |
| wifi_pwrseq: wifi-pwrseq { |
| compatible = "mmc-pwrseq-simple"; |
| reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>; |
| }; |
| |
| sd_io_1v8_reg: sd_io_1v8_reg { |
| compatible = "regulator-gpio"; |
| regulator-name = "vdd-sd-io"; |
| regulator-min-microvolt = <1800000>; |
| regulator-max-microvolt = <3300000>; |
| regulator-boot-on; |
| regulator-always-on; |
| regulator-settling-time-us = <5000>; |
| gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>; |
| states = <1800000 0x1 |
| 3300000 0x0>; |
| status = "okay"; |
| }; |
| |
| sd_vcc_reg: sd_vcc_reg { |
| compatible = "regulator-fixed"; |
| regulator-name = "vcc-sd"; |
| regulator-min-microvolt = <3300000>; |
| regulator-max-microvolt = <3300000>; |
| regulator-boot-on; |
| enable-active-high; |
| gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>; |
| }; |
| }; |
| |
| &ddc0 { |
| status = "okay"; |
| }; |
| |
| &ddc1 { |
| status = "okay"; |
| }; |
| |
| &firmware { |
| firmware_clocks: clocks { |
| compatible = "raspberrypi,firmware-clocks"; |
| #clock-cells = <1>; |
| }; |
| |
| expgpio: gpio { |
| compatible = "raspberrypi,firmware-gpio"; |
| gpio-controller; |
| #gpio-cells = <2>; |
| gpio-line-names = "BT_ON", |
| "WL_ON", |
| "PWR_LED_OFF", |
| "GLOBAL_RESET", |
| "VDD_SD_IO_SEL", |
| "CAM_GPIO", |
| "SD_PWR_ON", |
| ""; |
| status = "okay"; |
| }; |
| |
| reset: reset { |
| compatible = "raspberrypi,firmware-reset"; |
| #reset-cells = <1>; |
| }; |
| }; |
| |
| &gpio { |
| /* |
| * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and |
| * the official GPU firmware DT blob. |
| * |
| * Legend: |
| * "FOO" = GPIO line named "FOO" on the schematic |
| * "FOO_N" = GPIO line named "FOO" on schematic, active low |
| */ |
| gpio-line-names = "ID_SDA", |
| "ID_SCL", |
| "SDA1", |
| "SCL1", |
| "GPIO_GCLK", |
| "GPIO5", |
| "GPIO6", |
| "SPI_CE1_N", |
| "SPI_CE0_N", |
| "SPI_MISO", |
| "SPI_MOSI", |
| "SPI_SCLK", |
| "GPIO12", |
| "GPIO13", |
| /* Serial port */ |
| "TXD1", |
| "RXD1", |
| "GPIO16", |
| "GPIO17", |
| "GPIO18", |
| "GPIO19", |
| "GPIO20", |
| "GPIO21", |
| "GPIO22", |
| "GPIO23", |
| "GPIO24", |
| "GPIO25", |
| "GPIO26", |
| "GPIO27", |
| "RGMII_MDIO", |
| "RGMIO_MDC", |
| /* Used by BT module */ |
| "CTS0", |
| "RTS0", |
| "TXD0", |
| "RXD0", |
| /* Used by Wifi */ |
| "SD1_CLK", |
| "SD1_CMD", |
| "SD1_DATA0", |
| "SD1_DATA1", |
| "SD1_DATA2", |
| "SD1_DATA3", |
| /* Shared with SPI flash */ |
| "PWM0_MISO", |
| "PWM1_MOSI", |
| "STATUS_LED_G_CLK", |
| "SPIFLASH_CE_N", |
| "SDA0", |
| "SCL0", |
| "RGMII_RXCLK", |
| "RGMII_RXCTL", |
| "RGMII_RXD0", |
| "RGMII_RXD1", |
| "RGMII_RXD2", |
| "RGMII_RXD3", |
| "RGMII_TXCLK", |
| "RGMII_TXCTL", |
| "RGMII_TXD0", |
| "RGMII_TXD1", |
| "RGMII_TXD2", |
| "RGMII_TXD3"; |
| }; |
| |
| &hdmi0 { |
| clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>; |
| clock-names = "hdmi", "bvb", "audio", "cec"; |
| wifi-2.4ghz-coexistence; |
| status = "okay"; |
| }; |
| |
| &hdmi1 { |
| clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>; |
| clock-names = "hdmi", "bvb", "audio", "cec"; |
| wifi-2.4ghz-coexistence; |
| status = "okay"; |
| }; |
| |
| &hvs { |
| clocks = <&firmware_clocks 4>; |
| }; |
| |
| &pixelvalve0 { |
| status = "okay"; |
| }; |
| |
| &pixelvalve1 { |
| status = "okay"; |
| }; |
| |
| &pixelvalve2 { |
| status = "okay"; |
| }; |
| |
| &pixelvalve4 { |
| status = "okay"; |
| }; |
| |
| &pwm1 { |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>; |
| status = "okay"; |
| }; |
| |
| &rmem { |
| /* |
| * RPi4's co-processor will copy the board's bootloader configuration |
| * into memory for the OS to consume. It'll also update this node with |
| * its placement information. |
| */ |
| blconfig: nvram@0 { |
| compatible = "raspberrypi,bootloader-config", "nvmem-rmem"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| reg = <0x0 0x0 0x0>; |
| no-map; |
| status = "disabled"; |
| }; |
| }; |
| |
| /* SDHCI is used to control the SDIO for wireless */ |
| &sdhci { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| pinctrl-names = "default"; |
| pinctrl-0 = <&emmc_gpio34>; |
| bus-width = <4>; |
| non-removable; |
| mmc-pwrseq = <&wifi_pwrseq>; |
| status = "okay"; |
| |
| brcmf: wifi@1 { |
| reg = <1>; |
| compatible = "brcm,bcm4329-fmac"; |
| }; |
| }; |
| |
| /* EMMC2 is used to drive the SD card */ |
| &emmc2 { |
| vqmmc-supply = <&sd_io_1v8_reg>; |
| vmmc-supply = <&sd_vcc_reg>; |
| broken-cd; |
| status = "okay"; |
| }; |
| |
| &genet { |
| phy-handle = <&phy1>; |
| phy-mode = "rgmii-rxid"; |
| status = "okay"; |
| }; |
| |
| &genet_mdio { |
| phy1: ethernet-phy@1 { |
| /* No PHY interrupt */ |
| reg = <0x1>; |
| }; |
| }; |
| |
| &pcie0 { |
| pci@1,0 { |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges; |
| |
| reg = <0 0 0 0 0>; |
| |
| usb@1,0 { |
| reg = <0x10000 0 0 0 0>; |
| resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>; |
| }; |
| }; |
| }; |
| |
| /* uart0 communicates with the BT module */ |
| &uart0 { |
| pinctrl-names = "default"; |
| pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>; |
| uart-has-rtscts; |
| status = "okay"; |
| |
| bluetooth { |
| compatible = "brcm,bcm43438-bt"; |
| max-speed = <2000000>; |
| shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; |
| }; |
| }; |
| |
| /* uart1 is mapped to the pin header */ |
| &uart1 { |
| pinctrl-names = "default"; |
| pinctrl-0 = <&uart1_gpio14>; |
| status = "okay"; |
| }; |
| |
| &vchiq { |
| interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; |
| }; |
| |
| &vc4 { |
| status = "okay"; |
| }; |
| |
| &vec { |
| status = "disabled"; |
| }; |