openwrt/target/linux/bcm27xx/patches-6.6/950-1180-arm64-dts-Move-bcm2712-and-rp1-here.patch

9750 lines
242 KiB
Diff
Raw Normal View History

From 10c77e119eaaa2677009dea58cf69a8e5383925b Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.com>
Date: Wed, 17 Jul 2024 17:27:36 +0100
Subject: [PATCH 1180/1215] arm64: dts: Move bcm2712 and rp1 here
It is pointless having the bcm2712 family of dts files and rp1.dtsi
in the arch/arm directory tree, since they then require placeholders
to include them in arch/arm64 where they are built. The files have
no dependencies on other files in the arch/arm tree, so simply move
them here.
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
---
.../arm/boot/dts/broadcom/bcm2712-rpi-5-b.dts | 867 ------------------
.../dts/broadcom/bcm2712-rpi-cm5-cm4io.dts | 20 -
.../dts/broadcom/bcm2712-rpi-cm5-cm5io.dts | 10 -
.../boot/dts/broadcom/bcm2712d0-rpi-5-b.dts | 107 ---
.../boot/dts/broadcom/bcm2712-rpi-5-b.dts | 867 +++++++++++++++++-
.../dts/broadcom/bcm2712-rpi-cm5-cm4io.dts | 20 +-
.../dts/broadcom/bcm2712-rpi-cm5-cm5io.dts | 10 +-
.../boot/dts/broadcom/bcm2712-rpi-cm5.dtsi | 10 +-
.../boot/dts/broadcom/bcm2712-rpi.dtsi | 0
.../boot/dts/broadcom/bcm2712.dtsi | 0
.../boot/dts/broadcom/bcm2712d0-rpi-5-b.dts | 107 ++-
.../{arm => arm64}/boot/dts/broadcom/rp1.dtsi | 0
12 files changed, 1002 insertions(+), 1016 deletions(-)
delete mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-5-b.dts
delete mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
delete mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
delete mode 100644 arch/arm/boot/dts/broadcom/bcm2712d0-rpi-5-b.dts
rename arch/{arm => arm64}/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi (98%)
rename arch/{arm => arm64}/boot/dts/broadcom/bcm2712-rpi.dtsi (100%)
rename arch/{arm => arm64}/boot/dts/broadcom/bcm2712.dtsi (100%)
rename arch/{arm => arm64}/boot/dts/broadcom/rp1.dtsi (100%)
--- a/arch/arm/boot/dts/broadcom/bcm2712-rpi-5-b.dts
+++ /dev/null
@@ -1,867 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/dts-v1/;
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/clock/rp1.h>
-#include <dt-bindings/interrupt-controller/irq.h>
-#include <dt-bindings/mfd/rp1.h>
-#include <dt-bindings/pwm/pwm.h>
-#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
-
-#define i2c0 _i2c0
-#define i2c3 _i2c3
-#define i2c4 _i2c4
-#define i2c5 _i2c5
-#define i2c6 _i2c6
-#define i2c8 _i2c8
-#define i2s _i2s
-#define pwm0 _pwm0
-#define pwm1 _pwm1
-#define spi0 _spi0
-#define spi3 _spi3
-#define spi4 _spi4
-#define spi5 _spi5
-#define spi6 _spi6
-#define uart0 _uart0
-#define uart2 _uart2
-#define uart5 _uart5
-
-#include "bcm2712.dtsi"
-
-#undef i2c0
-#undef i2c3
-#undef i2c4
-#undef i2c5
-#undef i2c6
-#undef i2c8
-#undef i2s
-#undef pwm0
-#undef pwm1
-#undef spi0
-#undef spi3
-#undef spi4
-#undef spi5
-#undef spi6
-#undef uart0
-#undef uart2
-#undef uart3
-#undef uart4
-#undef uart5
-
-/ {
- compatible = "raspberrypi,5-model-b", "brcm,bcm2712";
- model = "Raspberry Pi 5";
-
- /* Will be filled by the bootloader */
- memory@0 {
- device_type = "memory";
- reg = <0 0 0x28000000>;
- };
-
- leds: leds {
- compatible = "gpio-leds";
-
- led_pwr: led-pwr {
- label = "PWR";
- gpios = <&rp1_gpio 44 GPIO_ACTIVE_LOW>;
- default-state = "off";
- linux,default-trigger = "none";
- };
-
- led_act: led-act {
- label = "ACT";
- gpios = <&gio_aon 9 GPIO_ACTIVE_LOW>;
- default-state = "off";
- linux,default-trigger = "mmc0";
- };
- };
-
- 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 = <&gio_aon 3 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;
- gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
- status = "okay";
- };
-
- wl_on_reg: wl_on_reg {
- compatible = "regulator-fixed";
- regulator-name = "wl-on-regulator";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- pinctrl-0 = <&wl_on_pins>;
- pinctrl-names = "default";
-
- gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
-
- startup-delay-us = <150000>;
- enable-active-high;
- };
-
- clocks: clocks {
- };
-
- cam1_clk: cam1_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- cam0_clk: cam0_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- cam0_reg: cam0_reg {
- compatible = "regulator-fixed";
- regulator-name = "cam0_reg";
- enable-active-high;
- status = "okay";
- gpio = <&rp1_gpio 34 0>; // CD0_IO0_MICCLK, to MIPI 0 connector
- };
-
- cam1_reg: cam1_reg {
- compatible = "regulator-fixed";
- regulator-name = "cam1_reg";
- enable-active-high;
- status = "okay";
- gpio = <&rp1_gpio 46 0>; // CD1_IO0_MICCLK, to MIPI 1 connector
- };
-
- cam_dummy_reg: cam_dummy_reg {
- compatible = "regulator-fixed";
- regulator-name = "cam-dummy-reg";
- status = "okay";
- };
-
- dummy: dummy {
- // A target for unwanted overlay fragments
- };
-
-
- // A few extra labels to keep overlays happy
-
- i2c0if: i2c0if {};
- i2c0mux: i2c0mux {};
-};
-
-rp1_target: &pcie2 {
- brcm,enable-mps-rcb;
- brcm,vdm-qos-map = <0xbbaa9888>;
- aspm-no-l0s;
- status = "okay";
-};
-
-&pcie1 {
- brcm,vdm-qos-map = <0x33333333>;
-};
-
-// Add some labels to 2712 device
-
-// The system UART
-uart10: &_uart0 { status = "okay"; };
-
-// The system SPI for the bootloader EEPROM
-spi10: &_spi0 { status = "okay"; };
-
-i2c_rp1boot: &_i2c3 { };
-
-#include "rp1.dtsi"
-
-&rp1 {
- // PCIe address space layout:
- // 00_00000000-00_00xxxxxx = RP1 peripherals
- // 10_00000000-1x_xxxxxxxx = up to 64GB system RAM
-
- // outbound access aimed at PCIe 0_00xxxxxx -> RP1 c0_40xxxxxx
- // This is the RP1 peripheral space
- ranges = <0xc0 0x40000000
- 0x02000000 0x00 0x00000000
- 0x00 0x00400000>;
-
- dma-ranges =
- // inbound RP1 1x_xxxxxxxx -> PCIe 1x_xxxxxxxx
- <0x10 0x00000000
- 0x43000000 0x10 0x00000000
- 0x10 0x00000000>,
-
- // inbound RP1 c0_40xxxxxx -> PCIe 00_00xxxxxx
- // This allows the RP1 DMA controller to address RP1 hardware
- <0xc0 0x40000000
- 0x02000000 0x0 0x00000000
- 0x0 0x00400000>,
-
- // inbound RP1 0x_xxxxxxxx -> PCIe 1x_xxxxxxxx
- <0x00 0x00000000
- 0x02000000 0x10 0x00000000
- 0x10 0x00000000>;
-};
-
-// Expose RP1 nodes as system nodes with labels
-
-&rp1_dma {
- status = "okay";
-};
-
-&rp1_eth {
- status = "okay";
- phy-handle = <&phy1>;
- phy-reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
- phy-reset-duration = <5>;
-
- phy1: ethernet-phy@1 {
- reg = <0x1>;
- brcm,powerdown-enable;
- };
-};
-
-gpio: &rp1_gpio {
- status = "okay";
-};
-
-aux: &dummy {};
-
-&rp1_usb0 {
- pinctrl-0 = <&usb_vbus_pins>;
- pinctrl-names = "default";
- status = "okay";
-};
-
-&rp1_usb1 {
- status = "okay";
-};
-
-#include "bcm2712-rpi.dtsi"
-
-i2c_csi_dsi0: &i2c6 { // Note: This is for MIPI0 connector only
- pinctrl-0 = <&rp1_i2c6_38_39>;
- pinctrl-names = "default";
- clock-frequency = <100000>;
-};
-
-i2c_csi_dsi1: &i2c4 { // Note: This is for MIPI1 connector only
- pinctrl-0 = <&rp1_i2c4_40_41>;
- pinctrl-names = "default";
- clock-frequency = <100000>;
-};
-
-i2c_csi_dsi: &i2c_csi_dsi1 { }; // An alias for compatibility
-
-csi0: &rp1_csi0 { };
-csi1: &rp1_csi1 { };
-dsi0: &rp1_dsi0 { };
-dsi1: &rp1_dsi1 { };
-dpi: &rp1_dpi { };
-vec: &rp1_vec { };
-dpi_gpio0: &rp1_dpi_24bit_gpio0 { };
-dpi_gpio1: &rp1_dpi_24bit_gpio2 { };
-dpi_18bit_cpadhi_gpio0: &rp1_dpi_18bit_cpadhi_gpio0 { };
-dpi_18bit_cpadhi_gpio2: &rp1_dpi_18bit_cpadhi_gpio2 { };
-dpi_18bit_gpio0: &rp1_dpi_18bit_gpio0 { };
-dpi_18bit_gpio2: &rp1_dpi_18bit_gpio2 { };
-dpi_16bit_cpadhi_gpio0: &rp1_dpi_16bit_cpadhi_gpio0 { };
-dpi_16bit_cpadhi_gpio2: &rp1_dpi_16bit_cpadhi_gpio2 { };
-dpi_16bit_gpio0: &rp1_dpi_16bit_gpio0 { };
-dpi_16bit_gpio2: &rp1_dpi_16bit_gpio2 { };
-
-/* Add the IOMMUs for some RP1 bus masters */
-
-&csi0 {
- iommus = <&iommu5>;
-};
-
-&csi1 {
- iommus = <&iommu5>;
-};
-
-&dsi0 {
- iommus = <&iommu5>;
-};
-
-&dsi1 {
- iommus = <&iommu5>;
-};
-
-&dpi {
- iommus = <&iommu5>;
-};
-
-&vec {
- iommus = <&iommu5>;
-};
-
-&ddc0 {
- status = "disabled";
-};
-
-&ddc1 {
- status = "disabled";
-};
-
-&hdmi0 {
- clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
- clock-names = "hdmi", "bvb", "audio", "cec";
- status = "disabled";
-};
-
-&hdmi1 {
- clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
- clock-names = "hdmi", "bvb", "audio", "cec";
- status = "disabled";
-};
-
-&hvs {
- clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
- clock-names = "core", "disp";
-};
-
-&mop {
- status = "disabled";
-};
-
-&moplet {
- status = "disabled";
-};
-
-&pixelvalve0 {
- status = "disabled";
-};
-
-&pixelvalve1 {
- status = "disabled";
-};
-
-&disp_intr {
- status = "disabled";
-};
-
-/* SDIO1 is used to drive the SD card */
-&sdio1 {
- pinctrl-0 = <&emmc_sd_pulls>, <&emmc_aon_cd_pins>;
- pinctrl-names = "default";
- vqmmc-supply = <&sd_io_1v8_reg>;
- vmmc-supply = <&sd_vcc_reg>;
- bus-width = <4>;
- sd-uhs-sdr50;
- sd-uhs-ddr50;
- sd-uhs-sdr104;
- cd-gpios = <&gio_aon 5 GPIO_ACTIVE_LOW>;
- //no-1-8-v;
- status = "okay";
-};
-
-&pinctrl_aon {
- emmc_aon_cd_pins: emmc_aon_cd_pins {
- function = "sd_card_g";
- pins = "aon_gpio5";
- bias-pull-up;
- };
-
- /* Slight hack - only one PWM pin (status LED) is usable */
- aon_pwm_1pin: aon_pwm_1pin {
- function = "aon_pwm";
- pins = "aon_gpio9";
- };
-};
-
-&pinctrl {
- pwr_button_pins: pwr_button_pins {
- function = "gpio";
- pins = "gpio20";
- bias-pull-up;
- };
-
- wl_on_pins: wl_on_pins {
- function = "gpio";
- pins = "gpio28";
- };
-
- bt_shutdown_pins: bt_shutdown_pins {
- function = "gpio";
- pins = "gpio29";
- };
-
- emmc_sd_pulls: emmc_sd_pulls {
- pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3";
- bias-pull-up;
- };
-};
-
-/* uarta communicates with the BT module */
-&uarta {
- uart-has-rtscts;
- auto-flow-control;
- status = "okay";
- clock-frequency = <96000000>;
- pinctrl-0 = <&uarta_24_pins &bt_shutdown_pins>;
- pinctrl-names = "default";
-
- bluetooth: bluetooth {
- compatible = "brcm,bcm43438-bt";
- max-speed = <3000000>;
- shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
- local-bd-address = [ 00 00 00 00 00 00 ];
- };
-};
-
-&i2c_rp1boot {
- clock-frequency = <400000>;
- pinctrl-0 = <&i2c3_m4_agpio0_pins>;
- pinctrl-names = "default";
-};
-
-/ {
- chosen: chosen {
- bootargs = "reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe";
- stdout-path = "serial10:115200n8";
- };
-
- fan: cooling_fan {
- status = "disabled";
- compatible = "pwm-fan";
- #cooling-cells = <2>;
- cooling-min-state = <0>;
- cooling-max-state = <3>;
- cooling-levels = <0 75 125 175 250>;
- pwms = <&rp1_pwm1 3 41566 PWM_POLARITY_INVERTED>;
- rpm-regmap = <&rp1_pwm1>;
- rpm-offset = <0x3c>;
- };
-
- pwr_button {
- compatible = "gpio-keys";
-
- pinctrl-names = "default";
- pinctrl-0 = <&pwr_button_pins>;
- status = "okay";
-
- pwr_key: pwr {
- label = "pwr_button";
- // linux,code = <205>; // KEY_SUSPEND
- linux,code = <116>; // KEY_POWER
- gpios = <&gio 20 GPIO_ACTIVE_LOW>;
- debounce-interval = <50>; // ms
- };
- };
-};
-
-&usb {
- power-domains = <&power RPI_POWER_DOMAIN_USB>;
-};
-
-/* SDIO2 drives the WLAN interface */
-&sdio2 {
- pinctrl-0 = <&sdio2_30_pins>;
- pinctrl-names = "default";
- bus-width = <4>;
- vmmc-supply = <&wl_on_reg>;
- sd-uhs-ddr50;
- non-removable;
- status = "okay";
- #address-cells = <1>;
- #size-cells = <0>;
-
- wifi: wifi@1 {
- reg = <1>;
- compatible = "brcm,bcm4329-fmac";
- local-mac-address = [00 00 00 00 00 00];
- };
-};
-
-&rpivid {
- status = "okay";
-};
-
-&pinctrl {
- spi10_gpio2: spi10_gpio2 {
- function = "vc_spi0";
- pins = "gpio2", "gpio3", "gpio4";
- bias-disable;
- };
-
- spi10_cs_gpio1: spi10_cs_gpio1 {
- function = "gpio";
- pins = "gpio1";
- bias-pull-up;
- };
-};
-
-spi10_pins: &spi10_gpio2 {};
-spi10_cs_pins: &spi10_cs_gpio1 {};
-
-&spi10 {
- pinctrl-names = "default";
- cs-gpios = <&gio 1 1>;
- pinctrl-0 = <&spi10_pins &spi10_cs_pins>;
-
- spidev10: spidev@0 {
- compatible = "spidev";
- reg = <0>; /* CE0 */
- #address-cells = <1>;
- #size-cells = <0>;
- spi-max-frequency = <20000000>;
- status = "okay";
- };
-};
-
-// =============================================
-// Board specific stuff here
-
-&gio_aon {
- // Don't use GIO_AON as an interrupt controller because it will
- // clash with the firmware monitoring the PMIC interrupt via the VPU.
-
- /delete-property/ interrupt-controller;
-};
-
-&main_aon_irq {
- // Don't use the MAIN_AON_IRQ interrupt controller because it will
- // clash with the firmware monitoring the PMIC interrupt via the VPU.
-
- status = "disabled";
-};
-
-&rp1_pwm1 {
- status = "disabled";
- pinctrl-0 = <&rp1_pwm1_gpio45>;
- pinctrl-names = "default";
-};
-
-&thermal_trips {
- cpu_tepid: cpu-tepid {
- temperature = <50000>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_warm: cpu-warm {
- temperature = <60000>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_hot: cpu-hot {
- temperature = <67500>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_vhot: cpu-vhot {
- temperature = <75000>;
- hysteresis = <5000>;
- type = "active";
- };
-};
-
-&cooling_maps {
- tepid {
- trip = <&cpu_tepid>;
- cooling-device = <&fan 1 1>;
- };
-
- warm {
- trip = <&cpu_warm>;
- cooling-device = <&fan 2 2>;
- };
-
- hot {
- trip = <&cpu_hot>;
- cooling-device = <&fan 3 3>;
- };
-
- vhot {
- trip = <&cpu_vhot>;
- cooling-device = <&fan 4 4>;
- };
-
- melt {
- trip = <&cpu_crit>;
- cooling-device = <&fan 4 4>;
- };
-};
-
-&gio {
- // The GPIOs above 35 are not used on Pi 5, so shrink the upper bank
- // to reduce the clutter in gpioinfo/pinctrl
- brcm,gpio-bank-widths = <32 4>;
-
- gpio-line-names =
- "-", // GPIO_000
- "2712_BOOT_CS_N", // GPIO_001
- "2712_BOOT_MISO", // GPIO_002
- "2712_BOOT_MOSI", // GPIO_003
- "2712_BOOT_SCLK", // GPIO_004
- "-", // GPIO_005
- "-", // GPIO_006
- "-", // GPIO_007
- "-", // GPIO_008
- "-", // GPIO_009
- "-", // GPIO_010
- "-", // GPIO_011
- "-", // GPIO_012
- "-", // GPIO_013
- "PCIE_SDA", // GPIO_014
- "PCIE_SCL", // GPIO_015
- "-", // GPIO_016
- "-", // GPIO_017
- "-", // GPIO_018
- "-", // GPIO_019
- "PWR_GPIO", // GPIO_020
- "2712_G21_FS", // GPIO_021
- "-", // GPIO_022
- "-", // GPIO_023
- "BT_RTS", // GPIO_024
- "BT_CTS", // GPIO_025
- "BT_TXD", // GPIO_026
- "BT_RXD", // GPIO_027
- "WL_ON", // GPIO_028
- "BT_ON", // GPIO_029
- "WIFI_SDIO_CLK", // GPIO_030
- "WIFI_SDIO_CMD", // GPIO_031
- "WIFI_SDIO_D0", // GPIO_032
- "WIFI_SDIO_D1", // GPIO_033
- "WIFI_SDIO_D2", // GPIO_034
- "WIFI_SDIO_D3"; // GPIO_035
-};
-
-&gio_aon {
- gpio-line-names =
- "RP1_SDA", // AON_GPIO_00
- "RP1_SCL", // AON_GPIO_01
- "RP1_RUN", // AON_GPIO_02
- "SD_IOVDD_SEL", // AON_GPIO_03
- "SD_PWR_ON", // AON_GPIO_04
- "SD_CDET_N", // AON_GPIO_05
- "SD_FLG_N", // AON_GPIO_06
- "-", // AON_GPIO_07
- "2712_WAKE", // AON_GPIO_08
- "2712_STAT_LED", // AON_GPIO_09
- "-", // AON_GPIO_10
- "-", // AON_GPIO_11
- "PMIC_INT", // AON_GPIO_12
- "UART_TX_FS", // AON_GPIO_13
- "UART_RX_FS", // AON_GPIO_14
- "-", // AON_GPIO_15
- "-", // AON_GPIO_16
-
- // Pad bank0 out to 32 entries
- "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
-
- "HDMI0_SCL", // AON_SGPIO_00
- "HDMI0_SDA", // AON_SGPIO_01
- "HDMI1_SCL", // AON_SGPIO_02
- "HDMI1_SDA", // AON_SGPIO_03
- "PMIC_SCL", // AON_SGPIO_04
- "PMIC_SDA"; // AON_SGPIO_05
-
- rp1_run_hog {
- gpio-hog;
- gpios = <2 GPIO_ACTIVE_HIGH>;
- output-high;
- line-name = "RP1 RUN pin";
- };
-};
-
-&rp1_gpio {
- gpio-line-names =
- "ID_SDA", // GPIO0
- "ID_SCL", // GPIO1
- "GPIO2", // GPIO2
- "GPIO3", // GPIO3
- "GPIO4", // GPIO4
- "GPIO5", // GPIO5
- "GPIO6", // GPIO6
- "GPIO7", // GPIO7
- "GPIO8", // GPIO8
- "GPIO9", // GPIO9
- "GPIO10", // GPIO10
- "GPIO11", // GPIO11
- "GPIO12", // GPIO12
- "GPIO13", // GPIO13
- "GPIO14", // GPIO14
- "GPIO15", // GPIO15
- "GPIO16", // GPIO16
- "GPIO17", // GPIO17
- "GPIO18", // GPIO18
- "GPIO19", // GPIO19
- "GPIO20", // GPIO20
- "GPIO21", // GPIO21
- "GPIO22", // GPIO22
- "GPIO23", // GPIO23
- "GPIO24", // GPIO24
- "GPIO25", // GPIO25
- "GPIO26", // GPIO26
- "GPIO27", // GPIO27
-
- "PCIE_RP1_WAKE", // GPIO28
- "FAN_TACH", // GPIO29
- "HOST_SDA", // GPIO30
- "HOST_SCL", // GPIO31
- "ETH_RST_N", // GPIO32
- "-", // GPIO33
-
- "CD0_IO0_MICCLK", // GPIO34
- "CD0_IO0_MICDAT0", // GPIO35
- "RP1_PCIE_CLKREQ_N", // GPIO36
- "-", // GPIO37
- "CD0_SDA", // GPIO38
- "CD0_SCL", // GPIO39
- "CD1_SDA", // GPIO40
- "CD1_SCL", // GPIO41
- "USB_VBUS_EN", // GPIO42
- "USB_OC_N", // GPIO43
- "RP1_STAT_LED", // GPIO44
- "FAN_PWM", // GPIO45
- "CD1_IO0_MICCLK", // GPIO46
- "2712_WAKE", // GPIO47
- "CD1_IO1_MICDAT1", // GPIO48
- "EN_MAX_USB_CUR", // GPIO49
- "-", // GPIO50
- "-", // GPIO51
- "-", // GPIO52
- "-"; // GPIO53
-
- usb_vbus_pins: usb_vbus_pins {
- function = "vbus1";
- pins = "gpio42", "gpio43";
- };
-};
-
-/ {
- aliases: aliases {
- blconfig = &blconfig;
- blpubkey = &blpubkey;
- bluetooth = &bluetooth;
- console = &uart10;
- ethernet0 = &rp1_eth;
- wifi0 = &wifi;
- fb = &fb;
- mailbox = &mailbox;
- mmc0 = &sdio1;
- uart0 = &uart0;
- uart1 = &uart1;
- uart2 = &uart2;
- uart3 = &uart3;
- uart4 = &uart4;
- uart10 = &uart10;
- serial0 = &uart0;
- serial1 = &uart1;
- serial2 = &uart2;
- serial3 = &uart3;
- serial4 = &uart4;
- serial10 = &uart10;
- i2c = &i2c_arm;
- i2c0 = &i2c0;
- i2c1 = &i2c1;
- i2c2 = &i2c2;
- i2c3 = &i2c3;
- i2c4 = &i2c4;
- i2c5 = &i2c5;
- i2c6 = &i2c6;
- i2c10 = &i2c_rp1boot;
- // Bit-bashed i2c_gpios start at 10
- spi0 = &spi0;
- spi1 = &spi1;
- spi2 = &spi2;
- spi3 = &spi3;
- spi4 = &spi4;
- spi5 = &spi5;
- spi10 = &spi10;
- gpio0 = &gpio;
- gpio1 = &gio;
- gpio2 = &gio_aon;
- gpio3 = &pinctrl;
- gpio4 = &pinctrl_aon;
- usb0 = &rp1_usb0;
- usb1 = &rp1_usb1;
- drm-dsi1 = &dsi0;
- drm-dsi2 = &dsi1;
- };
-
- __overrides__ {
- bdaddr = <&bluetooth>, "local-bd-address[";
- button_debounce = <&pwr_key>, "debounce-interval:0";
- cooling_fan = <&fan>, "status", <&rp1_pwm1>, "status";
- uart0_console = <&uart0>,"status", <&aliases>, "console=",&uart0;
- i2c0 = <&i2c0>, "status";
- i2c1 = <&i2c1>, "status";
- i2c = <&i2c1>, "status";
- i2c_arm = <&i2c_arm>, "status";
- i2c_vc = <&i2c_vc>, "status";
- i2c_csi_dsi = <&i2c_csi_dsi>, "status";
- i2c_csi_dsi0 = <&i2c_csi_dsi0>, "status";
- i2c_csi_dsi1 = <&i2c_csi_dsi1>, "status";
- i2c0_baudrate = <&i2c0>, "clock-frequency:0";
- i2c1_baudrate = <&i2c1>, "clock-frequency:0";
- i2c_baudrate = <&i2c_arm>, "clock-frequency:0";
- i2c_arm_baudrate = <&i2c_arm>, "clock-frequency:0";
- i2c_vc_baudrate = <&i2c_vc>, "clock-frequency:0";
- krnbt = <&bluetooth>, "status";
- nvme = <&pciex1>, "status";
- pciex1 = <&pciex1>, "status";
- pciex1_gen = <&pciex1> , "max-link-speed:0";
- pciex1_no_l0s = <&pciex1>, "aspm-no-l0s?";
- pciex1_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
- pcie_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
- random = <&random>, "status";
- rtc = <&rpi_rtc>, "status";
- rtc_bbat_vchg = <&rpi_rtc>, "trickle-charge-microvolt:0";
- sd_cqe = <&sdio1>, "supports-cqe?";
- spi = <&spi0>, "status";
- suspend = <&pwr_key>, "linux,code:0=205";
- uart0 = <&uart0>, "status";
- wifiaddr = <&wifi>, "local-mac-address[";
-
- act_led_gpio = <&led_act>,"gpios:4",<&led_act>,"gpios:0=",<&gpio>;
- act_led_activelow = <&led_act>,"gpios:8";
- act_led_trigger = <&led_act>, "linux,default-trigger";
- pwr_led_gpio = <&led_pwr>,"gpios:4";
- pwr_led_activelow = <&led_pwr>, "gpios:8";
- pwr_led_trigger = <&led_pwr>, "linux,default-trigger";
- eth_led0 = <&phy1>,"led-modes:0";
- eth_led1 = <&phy1>,"led-modes:4";
- drm_fb0_rp1_dsi0 = <&aliases>, "drm-fb0=",&dsi0;
- drm_fb0_rp1_dsi1 = <&aliases>, "drm-fb0=",&dsi1;
- drm_fb0_rp1_dpi = <&aliases>, "drm-fb0=",&dpi;
- drm_fb0_vc4 = <&aliases>, "drm-fb0=",&vc4;
- drm_fb1_rp1_dsi0 = <&aliases>, "drm-fb1=",&dsi0;
- drm_fb1_rp1_dsi1 = <&aliases>, "drm-fb1=",&dsi1;
- drm_fb1_rp1_dpi = <&aliases>, "drm-fb1=",&dpi;
- drm_fb1_vc4 = <&aliases>, "drm-fb1=",&vc4;
- drm_fb2_rp1_dsi0 = <&aliases>, "drm-fb2=",&dsi0;
- drm_fb2_rp1_dsi1 = <&aliases>, "drm-fb2=",&dsi1;
- drm_fb2_rp1_dpi = <&aliases>, "drm-fb2=",&dpi;
- drm_fb2_vc4 = <&aliases>, "drm-fb2=",&vc4;
-
- fan_temp0 = <&cpu_tepid>,"temperature:0";
- fan_temp1 = <&cpu_warm>,"temperature:0";
- fan_temp2 = <&cpu_hot>,"temperature:0";
- fan_temp3 = <&cpu_vhot>,"temperature:0";
- fan_temp0_hyst = <&cpu_tepid>,"hysteresis:0";
- fan_temp1_hyst = <&cpu_warm>,"hysteresis:0";
- fan_temp2_hyst = <&cpu_hot>,"hysteresis:0";
- fan_temp3_hyst = <&cpu_vhot>,"hysteresis:0";
- fan_temp0_speed = <&fan>, "cooling-levels:4";
- fan_temp1_speed = <&fan>, "cooling-levels:8";
- fan_temp2_speed = <&fan>, "cooling-levels:12";
- fan_temp3_speed = <&fan>, "cooling-levels:16";
- };
-};
--- a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/dts-v1/;
-
-#include "bcm2712-rpi-cm5.dtsi"
-
-// The RP1 USB3 interfaces are not usable on CM4IO
-
-&rp1_usb0 {
- status = "disabled";
-};
-
-&rp1_usb1 {
- status = "disabled";
-};
-
-/ {
- __overrides__ {
- i2c_csi_dsi = <&i2c_csi_dsi>, "status";
- };
-};
--- a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
+++ /dev/null
@@ -1,10 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/dts-v1/;
-
-#include "bcm2712-rpi-cm5.dtsi"
-
-/ {
- __overrides__ {
- i2c_csi_dsi = <&i2c_csi_dsi>, "status";
- };
-};
--- a/arch/arm/boot/dts/broadcom/bcm2712d0-rpi-5-b.dts
+++ /dev/null
@@ -1,107 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "bcm2712-rpi-5-b.dts"
-
-&gio {
- brcm,gpio-bank-widths = <32 4>;
-
- gpio-line-names =
- "", // GPIO_000
- "2712_BOOT_CS_N", // GPIO_001
- "2712_BOOT_MISO", // GPIO_002
- "2712_BOOT_MOSI", // GPIO_003
- "2712_BOOT_SCLK", // GPIO_004
- "", // GPIO_005
- "", // GPIO_006
- "", // GPIO_007
- "", // GPIO_008
- "", // GPIO_009
- "", // GPIO_010
- "", // GPIO_011
- "", // GPIO_012
- "", // GPIO_013
- "PCIE_SDA", // GPIO_014
- "PCIE_SCL", // GPIO_015
- "", // GPIO_016
- "", // GPIO_017
- "-", // GPIO_018
- "-", // GPIO_019
- "PWR_GPIO", // GPIO_020
- "2712_G21_FS", // GPIO_021
- "-", // GPIO_022
- "-", // GPIO_023
- "BT_RTS", // GPIO_024
- "BT_CTS", // GPIO_025
- "BT_TXD", // GPIO_026
- "BT_RXD", // GPIO_027
- "WL_ON", // GPIO_028
- "BT_ON", // GPIO_029
- "WIFI_SDIO_CLK", // GPIO_030
- "WIFI_SDIO_CMD", // GPIO_031
- "WIFI_SDIO_D0", // GPIO_032
- "WIFI_SDIO_D1", // GPIO_033
- "WIFI_SDIO_D2", // GPIO_034
- "WIFI_SDIO_D3"; // GPIO_035
-};
-
-&gio_aon {
- brcm,gpio-bank-widths = <15 6>;
-
- gpio-line-names =
- "RP1_SDA", // AON_GPIO_00
- "RP1_SCL", // AON_GPIO_01
- "RP1_RUN", // AON_GPIO_02
- "SD_IOVDD_SEL", // AON_GPIO_03
- "SD_PWR_ON", // AON_GPIO_04
- "SD_CDET_N", // AON_GPIO_05
- "SD_FLG_N", // AON_GPIO_06
- "", // AON_GPIO_07
- "2712_WAKE", // AON_GPIO_08
- "2712_STAT_LED", // AON_GPIO_09
- "", // AON_GPIO_10
- "", // AON_GPIO_11
- "PMIC_INT", // AON_GPIO_12
- "UART_TX_FS", // AON_GPIO_13
- "UART_RX_FS", // AON_GPIO_14
- "", // AON_GPIO_15
- "", // AON_GPIO_16
-
- // Pad bank0 out to 32 entries
- "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
-
- "HDMI0_SCL", // AON_SGPIO_00
- "HDMI0_SDA", // AON_SGPIO_01
- "HDMI1_SCL", // AON_SGPIO_02
- "HDMI1_SDA", // AON_SGPIO_03
- "PMIC_SCL", // AON_SGPIO_04
- "PMIC_SDA"; // AON_SGPIO_05
-};
-
-&pinctrl {
- compatible = "brcm,bcm2712d0-pinctrl";
- reg = <0x7d504100 0x20>;
-};
-
-&pinctrl_aon {
- compatible = "brcm,bcm2712d0-aon-pinctrl";
- reg = <0x7d510700 0x1c>;
-};
-
-&vc4 {
- compatible = "brcm,bcm2712d0-vc6";
-};
-
-&uart10 {
- interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
-};
-
-&spi10 {
- dmas = <&dma40 3>, <&dma40 4>;
-};
-
-&hdmi0 {
- dmas = <&dma40 (12|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
-};
-
-&hdmi1 {
- dmas = <&dma40 (13|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
-};
--- a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts
@@ -1,2 +1,867 @@
// SPDX-License-Identifier: GPL-2.0
-#include "arm/broadcom/bcm2712-rpi-5-b.dts"
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/rp1.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/mfd/rp1.h>
+#include <dt-bindings/pwm/pwm.h>
+#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
+
+#define i2c0 _i2c0
+#define i2c3 _i2c3
+#define i2c4 _i2c4
+#define i2c5 _i2c5
+#define i2c6 _i2c6
+#define i2c8 _i2c8
+#define i2s _i2s
+#define pwm0 _pwm0
+#define pwm1 _pwm1
+#define spi0 _spi0
+#define spi3 _spi3
+#define spi4 _spi4
+#define spi5 _spi5
+#define spi6 _spi6
+#define uart0 _uart0
+#define uart2 _uart2
+#define uart5 _uart5
+
+#include "bcm2712.dtsi"
+
+#undef i2c0
+#undef i2c3
+#undef i2c4
+#undef i2c5
+#undef i2c6
+#undef i2c8
+#undef i2s
+#undef pwm0
+#undef pwm1
+#undef spi0
+#undef spi3
+#undef spi4
+#undef spi5
+#undef spi6
+#undef uart0
+#undef uart2
+#undef uart3
+#undef uart4
+#undef uart5
+
+/ {
+ compatible = "raspberrypi,5-model-b", "brcm,bcm2712";
+ model = "Raspberry Pi 5";
+
+ /* Will be filled by the bootloader */
+ memory@0 {
+ device_type = "memory";
+ reg = <0 0 0x28000000>;
+ };
+
+ leds: leds {
+ compatible = "gpio-leds";
+
+ led_pwr: led-pwr {
+ label = "PWR";
+ gpios = <&rp1_gpio 44 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ linux,default-trigger = "none";
+ };
+
+ led_act: led-act {
+ label = "ACT";
+ gpios = <&gio_aon 9 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ linux,default-trigger = "mmc0";
+ };
+ };
+
+ 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 = <&gio_aon 3 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;
+ gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+
+ wl_on_reg: wl_on_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "wl-on-regulator";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ pinctrl-0 = <&wl_on_pins>;
+ pinctrl-names = "default";
+
+ gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
+
+ startup-delay-us = <150000>;
+ enable-active-high;
+ };
+
+ clocks: clocks {
+ };
+
+ cam1_clk: cam1_clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ cam0_clk: cam0_clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ cam0_reg: cam0_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "cam0_reg";
+ enable-active-high;
+ status = "okay";
+ gpio = <&rp1_gpio 34 0>; // CD0_IO0_MICCLK, to MIPI 0 connector
+ };
+
+ cam1_reg: cam1_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "cam1_reg";
+ enable-active-high;
+ status = "okay";
+ gpio = <&rp1_gpio 46 0>; // CD1_IO0_MICCLK, to MIPI 1 connector
+ };
+
+ cam_dummy_reg: cam_dummy_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "cam-dummy-reg";
+ status = "okay";
+ };
+
+ dummy: dummy {
+ // A target for unwanted overlay fragments
+ };
+
+
+ // A few extra labels to keep overlays happy
+
+ i2c0if: i2c0if {};
+ i2c0mux: i2c0mux {};
+};
+
+rp1_target: &pcie2 {
+ brcm,enable-mps-rcb;
+ brcm,vdm-qos-map = <0xbbaa9888>;
+ aspm-no-l0s;
+ status = "okay";
+};
+
+&pcie1 {
+ brcm,vdm-qos-map = <0x33333333>;
+};
+
+// Add some labels to 2712 device
+
+// The system UART
+uart10: &_uart0 { status = "okay"; };
+
+// The system SPI for the bootloader EEPROM
+spi10: &_spi0 { status = "okay"; };
+
+i2c_rp1boot: &_i2c3 { };
+
+#include "rp1.dtsi"
+
+&rp1 {
+ // PCIe address space layout:
+ // 00_00000000-00_00xxxxxx = RP1 peripherals
+ // 10_00000000-1x_xxxxxxxx = up to 64GB system RAM
+
+ // outbound access aimed at PCIe 0_00xxxxxx -> RP1 c0_40xxxxxx
+ // This is the RP1 peripheral space
+ ranges = <0xc0 0x40000000
+ 0x02000000 0x00 0x00000000
+ 0x00 0x00400000>;
+
+ dma-ranges =
+ // inbound RP1 1x_xxxxxxxx -> PCIe 1x_xxxxxxxx
+ <0x10 0x00000000
+ 0x43000000 0x10 0x00000000
+ 0x10 0x00000000>,
+
+ // inbound RP1 c0_40xxxxxx -> PCIe 00_00xxxxxx
+ // This allows the RP1 DMA controller to address RP1 hardware
+ <0xc0 0x40000000
+ 0x02000000 0x0 0x00000000
+ 0x0 0x00400000>,
+
+ // inbound RP1 0x_xxxxxxxx -> PCIe 1x_xxxxxxxx
+ <0x00 0x00000000
+ 0x02000000 0x10 0x00000000
+ 0x10 0x00000000>;
+};
+
+// Expose RP1 nodes as system nodes with labels
+
+&rp1_dma {
+ status = "okay";
+};
+
+&rp1_eth {
+ status = "okay";
+ phy-handle = <&phy1>;
+ phy-reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
+ phy-reset-duration = <5>;
+
+ phy1: ethernet-phy@1 {
+ reg = <0x1>;
+ brcm,powerdown-enable;
+ };
+};
+
+gpio: &rp1_gpio {
+ status = "okay";
+};
+
+aux: &dummy {};
+
+&rp1_usb0 {
+ pinctrl-0 = <&usb_vbus_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&rp1_usb1 {
+ status = "okay";
+};
+
+#include "bcm2712-rpi.dtsi"
+
+i2c_csi_dsi0: &i2c6 { // Note: This is for MIPI0 connector only
+ pinctrl-0 = <&rp1_i2c6_38_39>;
+ pinctrl-names = "default";
+ clock-frequency = <100000>;
+};
+
+i2c_csi_dsi1: &i2c4 { // Note: This is for MIPI1 connector only
+ pinctrl-0 = <&rp1_i2c4_40_41>;
+ pinctrl-names = "default";
+ clock-frequency = <100000>;
+};
+
+i2c_csi_dsi: &i2c_csi_dsi1 { }; // An alias for compatibility
+
+csi0: &rp1_csi0 { };
+csi1: &rp1_csi1 { };
+dsi0: &rp1_dsi0 { };
+dsi1: &rp1_dsi1 { };
+dpi: &rp1_dpi { };
+vec: &rp1_vec { };
+dpi_gpio0: &rp1_dpi_24bit_gpio0 { };
+dpi_gpio1: &rp1_dpi_24bit_gpio2 { };
+dpi_18bit_cpadhi_gpio0: &rp1_dpi_18bit_cpadhi_gpio0 { };
+dpi_18bit_cpadhi_gpio2: &rp1_dpi_18bit_cpadhi_gpio2 { };
+dpi_18bit_gpio0: &rp1_dpi_18bit_gpio0 { };
+dpi_18bit_gpio2: &rp1_dpi_18bit_gpio2 { };
+dpi_16bit_cpadhi_gpio0: &rp1_dpi_16bit_cpadhi_gpio0 { };
+dpi_16bit_cpadhi_gpio2: &rp1_dpi_16bit_cpadhi_gpio2 { };
+dpi_16bit_gpio0: &rp1_dpi_16bit_gpio0 { };
+dpi_16bit_gpio2: &rp1_dpi_16bit_gpio2 { };
+
+/* Add the IOMMUs for some RP1 bus masters */
+
+&csi0 {
+ iommus = <&iommu5>;
+};
+
+&csi1 {
+ iommus = <&iommu5>;
+};
+
+&dsi0 {
+ iommus = <&iommu5>;
+};
+
+&dsi1 {
+ iommus = <&iommu5>;
+};
+
+&dpi {
+ iommus = <&iommu5>;
+};
+
+&vec {
+ iommus = <&iommu5>;
+};
+
+&ddc0 {
+ status = "disabled";
+};
+
+&ddc1 {
+ status = "disabled";
+};
+
+&hdmi0 {
+ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
+ clock-names = "hdmi", "bvb", "audio", "cec";
+ status = "disabled";
+};
+
+&hdmi1 {
+ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
+ clock-names = "hdmi", "bvb", "audio", "cec";
+ status = "disabled";
+};
+
+&hvs {
+ clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
+ clock-names = "core", "disp";
+};
+
+&mop {
+ status = "disabled";
+};
+
+&moplet {
+ status = "disabled";
+};
+
+&pixelvalve0 {
+ status = "disabled";
+};
+
+&pixelvalve1 {
+ status = "disabled";
+};
+
+&disp_intr {
+ status = "disabled";
+};
+
+/* SDIO1 is used to drive the SD card */
+&sdio1 {
+ pinctrl-0 = <&emmc_sd_pulls>, <&emmc_aon_cd_pins>;
+ pinctrl-names = "default";
+ vqmmc-supply = <&sd_io_1v8_reg>;
+ vmmc-supply = <&sd_vcc_reg>;
+ bus-width = <4>;
+ sd-uhs-sdr50;
+ sd-uhs-ddr50;
+ sd-uhs-sdr104;
+ cd-gpios = <&gio_aon 5 GPIO_ACTIVE_LOW>;
+ //no-1-8-v;
+ status = "okay";
+};
+
+&pinctrl_aon {
+ emmc_aon_cd_pins: emmc_aon_cd_pins {
+ function = "sd_card_g";
+ pins = "aon_gpio5";
+ bias-pull-up;
+ };
+
+ /* Slight hack - only one PWM pin (status LED) is usable */
+ aon_pwm_1pin: aon_pwm_1pin {
+ function = "aon_pwm";
+ pins = "aon_gpio9";
+ };
+};
+
+&pinctrl {
+ pwr_button_pins: pwr_button_pins {
+ function = "gpio";
+ pins = "gpio20";
+ bias-pull-up;
+ };
+
+ wl_on_pins: wl_on_pins {
+ function = "gpio";
+ pins = "gpio28";
+ };
+
+ bt_shutdown_pins: bt_shutdown_pins {
+ function = "gpio";
+ pins = "gpio29";
+ };
+
+ emmc_sd_pulls: emmc_sd_pulls {
+ pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3";
+ bias-pull-up;
+ };
+};
+
+/* uarta communicates with the BT module */
+&uarta {
+ uart-has-rtscts;
+ auto-flow-control;
+ status = "okay";
+ clock-frequency = <96000000>;
+ pinctrl-0 = <&uarta_24_pins &bt_shutdown_pins>;
+ pinctrl-names = "default";
+
+ bluetooth: bluetooth {
+ compatible = "brcm,bcm43438-bt";
+ max-speed = <3000000>;
+ shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
+ local-bd-address = [ 00 00 00 00 00 00 ];
+ };
+};
+
+&i2c_rp1boot {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&i2c3_m4_agpio0_pins>;
+ pinctrl-names = "default";
+};
+
+/ {
+ chosen: chosen {
+ bootargs = "reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe";
+ stdout-path = "serial10:115200n8";
+ };
+
+ fan: cooling_fan {
+ status = "disabled";
+ compatible = "pwm-fan";
+ #cooling-cells = <2>;
+ cooling-min-state = <0>;
+ cooling-max-state = <3>;
+ cooling-levels = <0 75 125 175 250>;
+ pwms = <&rp1_pwm1 3 41566 PWM_POLARITY_INVERTED>;
+ rpm-regmap = <&rp1_pwm1>;
+ rpm-offset = <0x3c>;
+ };
+
+ pwr_button {
+ compatible = "gpio-keys";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwr_button_pins>;
+ status = "okay";
+
+ pwr_key: pwr {
+ label = "pwr_button";
+ // linux,code = <205>; // KEY_SUSPEND
+ linux,code = <116>; // KEY_POWER
+ gpios = <&gio 20 GPIO_ACTIVE_LOW>;
+ debounce-interval = <50>; // ms
+ };
+ };
+};
+
+&usb {
+ power-domains = <&power RPI_POWER_DOMAIN_USB>;
+};
+
+/* SDIO2 drives the WLAN interface */
+&sdio2 {
+ pinctrl-0 = <&sdio2_30_pins>;
+ pinctrl-names = "default";
+ bus-width = <4>;
+ vmmc-supply = <&wl_on_reg>;
+ sd-uhs-ddr50;
+ non-removable;
+ status = "okay";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ wifi: wifi@1 {
+ reg = <1>;
+ compatible = "brcm,bcm4329-fmac";
+ local-mac-address = [00 00 00 00 00 00];
+ };
+};
+
+&rpivid {
+ status = "okay";
+};
+
+&pinctrl {
+ spi10_gpio2: spi10_gpio2 {
+ function = "vc_spi0";
+ pins = "gpio2", "gpio3", "gpio4";
+ bias-disable;
+ };
+
+ spi10_cs_gpio1: spi10_cs_gpio1 {
+ function = "gpio";
+ pins = "gpio1";
+ bias-pull-up;
+ };
+};
+
+spi10_pins: &spi10_gpio2 {};
+spi10_cs_pins: &spi10_cs_gpio1 {};
+
+&spi10 {
+ pinctrl-names = "default";
+ cs-gpios = <&gio 1 1>;
+ pinctrl-0 = <&spi10_pins &spi10_cs_pins>;
+
+ spidev10: spidev@0 {
+ compatible = "spidev";
+ reg = <0>; /* CE0 */
+ #address-cells = <1>;
+ #size-cells = <0>;
+ spi-max-frequency = <20000000>;
+ status = "okay";
+ };
+};
+
+// =============================================
+// Board specific stuff here
+
+&gio_aon {
+ // Don't use GIO_AON as an interrupt controller because it will
+ // clash with the firmware monitoring the PMIC interrupt via the VPU.
+
+ /delete-property/ interrupt-controller;
+};
+
+&main_aon_irq {
+ // Don't use the MAIN_AON_IRQ interrupt controller because it will
+ // clash with the firmware monitoring the PMIC interrupt via the VPU.
+
+ status = "disabled";
+};
+
+&rp1_pwm1 {
+ status = "disabled";
+ pinctrl-0 = <&rp1_pwm1_gpio45>;
+ pinctrl-names = "default";
+};
+
+&thermal_trips {
+ cpu_tepid: cpu-tepid {
+ temperature = <50000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_warm: cpu-warm {
+ temperature = <60000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_hot: cpu-hot {
+ temperature = <67500>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_vhot: cpu-vhot {
+ temperature = <75000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+};
+
+&cooling_maps {
+ tepid {
+ trip = <&cpu_tepid>;
+ cooling-device = <&fan 1 1>;
+ };
+
+ warm {
+ trip = <&cpu_warm>;
+ cooling-device = <&fan 2 2>;
+ };
+
+ hot {
+ trip = <&cpu_hot>;
+ cooling-device = <&fan 3 3>;
+ };
+
+ vhot {
+ trip = <&cpu_vhot>;
+ cooling-device = <&fan 4 4>;
+ };
+
+ melt {
+ trip = <&cpu_crit>;
+ cooling-device = <&fan 4 4>;
+ };
+};
+
+&gio {
+ // The GPIOs above 35 are not used on Pi 5, so shrink the upper bank
+ // to reduce the clutter in gpioinfo/pinctrl
+ brcm,gpio-bank-widths = <32 4>;
+
+ gpio-line-names =
+ "-", // GPIO_000
+ "2712_BOOT_CS_N", // GPIO_001
+ "2712_BOOT_MISO", // GPIO_002
+ "2712_BOOT_MOSI", // GPIO_003
+ "2712_BOOT_SCLK", // GPIO_004
+ "-", // GPIO_005
+ "-", // GPIO_006
+ "-", // GPIO_007
+ "-", // GPIO_008
+ "-", // GPIO_009
+ "-", // GPIO_010
+ "-", // GPIO_011
+ "-", // GPIO_012
+ "-", // GPIO_013
+ "PCIE_SDA", // GPIO_014
+ "PCIE_SCL", // GPIO_015
+ "-", // GPIO_016
+ "-", // GPIO_017
+ "-", // GPIO_018
+ "-", // GPIO_019
+ "PWR_GPIO", // GPIO_020
+ "2712_G21_FS", // GPIO_021
+ "-", // GPIO_022
+ "-", // GPIO_023
+ "BT_RTS", // GPIO_024
+ "BT_CTS", // GPIO_025
+ "BT_TXD", // GPIO_026
+ "BT_RXD", // GPIO_027
+ "WL_ON", // GPIO_028
+ "BT_ON", // GPIO_029
+ "WIFI_SDIO_CLK", // GPIO_030
+ "WIFI_SDIO_CMD", // GPIO_031
+ "WIFI_SDIO_D0", // GPIO_032
+ "WIFI_SDIO_D1", // GPIO_033
+ "WIFI_SDIO_D2", // GPIO_034
+ "WIFI_SDIO_D3"; // GPIO_035
+};
+
+&gio_aon {
+ gpio-line-names =
+ "RP1_SDA", // AON_GPIO_00
+ "RP1_SCL", // AON_GPIO_01
+ "RP1_RUN", // AON_GPIO_02
+ "SD_IOVDD_SEL", // AON_GPIO_03
+ "SD_PWR_ON", // AON_GPIO_04
+ "SD_CDET_N", // AON_GPIO_05
+ "SD_FLG_N", // AON_GPIO_06
+ "-", // AON_GPIO_07
+ "2712_WAKE", // AON_GPIO_08
+ "2712_STAT_LED", // AON_GPIO_09
+ "-", // AON_GPIO_10
+ "-", // AON_GPIO_11
+ "PMIC_INT", // AON_GPIO_12
+ "UART_TX_FS", // AON_GPIO_13
+ "UART_RX_FS", // AON_GPIO_14
+ "-", // AON_GPIO_15
+ "-", // AON_GPIO_16
+
+ // Pad bank0 out to 32 entries
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+
+ "HDMI0_SCL", // AON_SGPIO_00
+ "HDMI0_SDA", // AON_SGPIO_01
+ "HDMI1_SCL", // AON_SGPIO_02
+ "HDMI1_SDA", // AON_SGPIO_03
+ "PMIC_SCL", // AON_SGPIO_04
+ "PMIC_SDA"; // AON_SGPIO_05
+
+ rp1_run_hog {
+ gpio-hog;
+ gpios = <2 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "RP1 RUN pin";
+ };
+};
+
+&rp1_gpio {
+ gpio-line-names =
+ "ID_SDA", // GPIO0
+ "ID_SCL", // GPIO1
+ "GPIO2", // GPIO2
+ "GPIO3", // GPIO3
+ "GPIO4", // GPIO4
+ "GPIO5", // GPIO5
+ "GPIO6", // GPIO6
+ "GPIO7", // GPIO7
+ "GPIO8", // GPIO8
+ "GPIO9", // GPIO9
+ "GPIO10", // GPIO10
+ "GPIO11", // GPIO11
+ "GPIO12", // GPIO12
+ "GPIO13", // GPIO13
+ "GPIO14", // GPIO14
+ "GPIO15", // GPIO15
+ "GPIO16", // GPIO16
+ "GPIO17", // GPIO17
+ "GPIO18", // GPIO18
+ "GPIO19", // GPIO19
+ "GPIO20", // GPIO20
+ "GPIO21", // GPIO21
+ "GPIO22", // GPIO22
+ "GPIO23", // GPIO23
+ "GPIO24", // GPIO24
+ "GPIO25", // GPIO25
+ "GPIO26", // GPIO26
+ "GPIO27", // GPIO27
+
+ "PCIE_RP1_WAKE", // GPIO28
+ "FAN_TACH", // GPIO29
+ "HOST_SDA", // GPIO30
+ "HOST_SCL", // GPIO31
+ "ETH_RST_N", // GPIO32
+ "-", // GPIO33
+
+ "CD0_IO0_MICCLK", // GPIO34
+ "CD0_IO0_MICDAT0", // GPIO35
+ "RP1_PCIE_CLKREQ_N", // GPIO36
+ "-", // GPIO37
+ "CD0_SDA", // GPIO38
+ "CD0_SCL", // GPIO39
+ "CD1_SDA", // GPIO40
+ "CD1_SCL", // GPIO41
+ "USB_VBUS_EN", // GPIO42
+ "USB_OC_N", // GPIO43
+ "RP1_STAT_LED", // GPIO44
+ "FAN_PWM", // GPIO45
+ "CD1_IO0_MICCLK", // GPIO46
+ "2712_WAKE", // GPIO47
+ "CD1_IO1_MICDAT1", // GPIO48
+ "EN_MAX_USB_CUR", // GPIO49
+ "-", // GPIO50
+ "-", // GPIO51
+ "-", // GPIO52
+ "-"; // GPIO53
+
+ usb_vbus_pins: usb_vbus_pins {
+ function = "vbus1";
+ pins = "gpio42", "gpio43";
+ };
+};
+
+/ {
+ aliases: aliases {
+ blconfig = &blconfig;
+ blpubkey = &blpubkey;
+ bluetooth = &bluetooth;
+ console = &uart10;
+ ethernet0 = &rp1_eth;
+ wifi0 = &wifi;
+ fb = &fb;
+ mailbox = &mailbox;
+ mmc0 = &sdio1;
+ uart0 = &uart0;
+ uart1 = &uart1;
+ uart2 = &uart2;
+ uart3 = &uart3;
+ uart4 = &uart4;
+ uart10 = &uart10;
+ serial0 = &uart0;
+ serial1 = &uart1;
+ serial2 = &uart2;
+ serial3 = &uart3;
+ serial4 = &uart4;
+ serial10 = &uart10;
+ i2c = &i2c_arm;
+ i2c0 = &i2c0;
+ i2c1 = &i2c1;
+ i2c2 = &i2c2;
+ i2c3 = &i2c3;
+ i2c4 = &i2c4;
+ i2c5 = &i2c5;
+ i2c6 = &i2c6;
+ i2c10 = &i2c_rp1boot;
+ // Bit-bashed i2c_gpios start at 10
+ spi0 = &spi0;
+ spi1 = &spi1;
+ spi2 = &spi2;
+ spi3 = &spi3;
+ spi4 = &spi4;
+ spi5 = &spi5;
+ spi10 = &spi10;
+ gpio0 = &gpio;
+ gpio1 = &gio;
+ gpio2 = &gio_aon;
+ gpio3 = &pinctrl;
+ gpio4 = &pinctrl_aon;
+ usb0 = &rp1_usb0;
+ usb1 = &rp1_usb1;
+ drm-dsi1 = &dsi0;
+ drm-dsi2 = &dsi1;
+ };
+
+ __overrides__ {
+ bdaddr = <&bluetooth>, "local-bd-address[";
+ button_debounce = <&pwr_key>, "debounce-interval:0";
+ cooling_fan = <&fan>, "status", <&rp1_pwm1>, "status";
+ uart0_console = <&uart0>,"status", <&aliases>, "console=",&uart0;
+ i2c0 = <&i2c0>, "status";
+ i2c1 = <&i2c1>, "status";
+ i2c = <&i2c1>, "status";
+ i2c_arm = <&i2c_arm>, "status";
+ i2c_vc = <&i2c_vc>, "status";
+ i2c_csi_dsi = <&i2c_csi_dsi>, "status";
+ i2c_csi_dsi0 = <&i2c_csi_dsi0>, "status";
+ i2c_csi_dsi1 = <&i2c_csi_dsi1>, "status";
+ i2c0_baudrate = <&i2c0>, "clock-frequency:0";
+ i2c1_baudrate = <&i2c1>, "clock-frequency:0";
+ i2c_baudrate = <&i2c_arm>, "clock-frequency:0";
+ i2c_arm_baudrate = <&i2c_arm>, "clock-frequency:0";
+ i2c_vc_baudrate = <&i2c_vc>, "clock-frequency:0";
+ krnbt = <&bluetooth>, "status";
+ nvme = <&pciex1>, "status";
+ pciex1 = <&pciex1>, "status";
+ pciex1_gen = <&pciex1> , "max-link-speed:0";
+ pciex1_no_l0s = <&pciex1>, "aspm-no-l0s?";
+ pciex1_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
+ pcie_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
+ random = <&random>, "status";
+ rtc = <&rpi_rtc>, "status";
+ rtc_bbat_vchg = <&rpi_rtc>, "trickle-charge-microvolt:0";
+ sd_cqe = <&sdio1>, "supports-cqe?";
+ spi = <&spi0>, "status";
+ suspend = <&pwr_key>, "linux,code:0=205";
+ uart0 = <&uart0>, "status";
+ wifiaddr = <&wifi>, "local-mac-address[";
+
+ act_led_gpio = <&led_act>,"gpios:4",<&led_act>,"gpios:0=",<&gpio>;
+ act_led_activelow = <&led_act>,"gpios:8";
+ act_led_trigger = <&led_act>, "linux,default-trigger";
+ pwr_led_gpio = <&led_pwr>,"gpios:4";
+ pwr_led_activelow = <&led_pwr>, "gpios:8";
+ pwr_led_trigger = <&led_pwr>, "linux,default-trigger";
+ eth_led0 = <&phy1>,"led-modes:0";
+ eth_led1 = <&phy1>,"led-modes:4";
+ drm_fb0_rp1_dsi0 = <&aliases>, "drm-fb0=",&dsi0;
+ drm_fb0_rp1_dsi1 = <&aliases>, "drm-fb0=",&dsi1;
+ drm_fb0_rp1_dpi = <&aliases>, "drm-fb0=",&dpi;
+ drm_fb0_vc4 = <&aliases>, "drm-fb0=",&vc4;
+ drm_fb1_rp1_dsi0 = <&aliases>, "drm-fb1=",&dsi0;
+ drm_fb1_rp1_dsi1 = <&aliases>, "drm-fb1=",&dsi1;
+ drm_fb1_rp1_dpi = <&aliases>, "drm-fb1=",&dpi;
+ drm_fb1_vc4 = <&aliases>, "drm-fb1=",&vc4;
+ drm_fb2_rp1_dsi0 = <&aliases>, "drm-fb2=",&dsi0;
+ drm_fb2_rp1_dsi1 = <&aliases>, "drm-fb2=",&dsi1;
+ drm_fb2_rp1_dpi = <&aliases>, "drm-fb2=",&dpi;
+ drm_fb2_vc4 = <&aliases>, "drm-fb2=",&vc4;
+
+ fan_temp0 = <&cpu_tepid>,"temperature:0";
+ fan_temp1 = <&cpu_warm>,"temperature:0";
+ fan_temp2 = <&cpu_hot>,"temperature:0";
+ fan_temp3 = <&cpu_vhot>,"temperature:0";
+ fan_temp0_hyst = <&cpu_tepid>,"hysteresis:0";
+ fan_temp1_hyst = <&cpu_warm>,"hysteresis:0";
+ fan_temp2_hyst = <&cpu_hot>,"hysteresis:0";
+ fan_temp3_hyst = <&cpu_vhot>,"hysteresis:0";
+ fan_temp0_speed = <&fan>, "cooling-levels:4";
+ fan_temp1_speed = <&fan>, "cooling-levels:8";
+ fan_temp2_speed = <&fan>, "cooling-levels:12";
+ fan_temp3_speed = <&fan>, "cooling-levels:16";
+ };
+};
--- a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
@@ -1,2 +1,20 @@
// SPDX-License-Identifier: GPL-2.0
-#include "arm/broadcom/bcm2712-rpi-cm5-cm4io.dts"
+/dts-v1/;
+
+#include "bcm2712-rpi-cm5.dtsi"
+
+// The RP1 USB3 interfaces are not usable on CM4IO
+
+&rp1_usb0 {
+ status = "disabled";
+};
+
+&rp1_usb1 {
+ status = "disabled";
+};
+
+/ {
+ __overrides__ {
+ i2c_csi_dsi = <&i2c_csi_dsi>, "status";
+ };
+};
--- a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
@@ -1,2 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
-#include "arm/broadcom/bcm2712-rpi-cm5-cm5io.dts"
+/dts-v1/;
+
+#include "bcm2712-rpi-cm5.dtsi"
+
+/ {
+ __overrides__ {
+ i2c_csi_dsi = <&i2c_csi_dsi>, "status";
+ };
+};
--- a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi
+++ /dev/null
@@ -1,890 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/clock/rp1.h>
-#include <dt-bindings/interrupt-controller/irq.h>
-#include <dt-bindings/mfd/rp1.h>
-#include <dt-bindings/pwm/pwm.h>
-#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
-
-#define i2c0 _i2c0
-#define i2c3 _i2c3
-#define i2c4 _i2c4
-#define i2c5 _i2c5
-#define i2c6 _i2c6
-#define i2c8 _i2c8
-#define i2s _i2s
-#define pwm0 _pwm0
-#define pwm1 _pwm1
-#define spi0 _spi0
-#define spi3 _spi3
-#define spi4 _spi4
-#define spi5 _spi5
-#define spi6 _spi6
-#define uart0 _uart0
-#define uart2 _uart2
-#define uart5 _uart5
-
-#include "bcm2712.dtsi"
-
-#undef i2c0
-#undef i2c3
-#undef i2c4
-#undef i2c5
-#undef i2c6
-#undef i2c8
-#undef i2s
-#undef pwm0
-#undef pwm1
-#undef spi0
-#undef spi3
-#undef spi4
-#undef spi5
-#undef spi6
-#undef uart0
-#undef uart2
-#undef uart3
-#undef uart4
-#undef uart5
-
-/ {
- compatible = "raspberrypi,5-compute-module", "brcm,bcm2712";
- model = "Raspberry Pi Compute Module 5";
-
- /* Will be filled by the bootloader */
- memory@0 {
- device_type = "memory";
- reg = <0 0 0x28000000>;
- };
-
- leds: leds {
- compatible = "gpio-leds";
-
- led_pwr: led-pwr {
- label = "PWR";
- gpios = <&rp1_gpio 44 GPIO_ACTIVE_LOW>;
- default-state = "off";
- linux,default-trigger = "none";
- };
-
- led_act: led-act {
- label = "ACT";
- gpios = <&gio_aon 9 GPIO_ACTIVE_LOW>;
- default-state = "off";
- linux,default-trigger = "mmc0";
- };
- };
-
- 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 = <&gio_aon 3 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;
- gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
- status = "okay";
- };
-
- wl_on_reg: wl_on_reg {
- compatible = "regulator-fixed";
- regulator-name = "wl-on-regulator";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- pinctrl-0 = <&wl_on_pins>;
- pinctrl-names = "default";
-
- gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
-
- startup-delay-us = <150000>;
- enable-active-high;
- };
-
- clocks: clocks {
- };
-
- cam1_clk: cam1_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- cam0_clk: cam0_clk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- cam0_reg: cam0_reg {
- compatible = "regulator-fixed";
- regulator-name = "cam0_reg";
- enable-active-high;
- status = "okay";
- gpio = <&rp1_gpio 34 0>; // CD0_IO0_MICCLK, to CAM_GPIO on connector
- };
-
- cam_dummy_reg: cam_dummy_reg {
- compatible = "regulator-fixed";
- regulator-name = "cam-dummy-reg";
- status = "okay";
- };
-
- dummy: dummy {
- // A target for unwanted overlay fragments
- };
-
-
- // A few extra labels to keep overlays happy
-
- i2c0if: i2c0if {};
- i2c0mux: i2c0mux {};
-};
-
-rp1_target: &pcie2 {
- brcm,enable-mps-rcb;
- brcm,vdm-qos-map = <0xbbaa9888>;
- aspm-no-l0s;
- status = "okay";
-};
-
-// Add some labels to 2712 device
-
-// The system UART
-uart10: &_uart0 { status = "okay"; };
-
-// The system SPI for the bootloader EEPROM
-spi10: &_spi0 { status = "okay"; };
-
-i2c_rp1boot: &_i2c3 { };
-
-#include "rp1.dtsi"
-
-&rp1 {
- // PCIe address space layout:
- // 00_00000000-00_00xxxxxx = RP1 peripherals
- // 10_00000000-1x_xxxxxxxx = up to 64GB system RAM
-
- // outbound access aimed at PCIe 0_00xxxxxx -> RP1 c0_40xxxxxx
- // This is the RP1 peripheral space
- ranges = <0xc0 0x40000000
- 0x02000000 0x00 0x00000000
- 0x00 0x00400000>;
-
- dma-ranges =
- // inbound RP1 1x_xxxxxxxx -> PCIe 1x_xxxxxxxx
- <0x10 0x00000000
- 0x43000000 0x10 0x00000000
- 0x10 0x00000000>,
-
- // inbound RP1 c0_40xxxxxx -> PCIe 00_00xxxxxx
- // This allows the RP1 DMA controller to address RP1 hardware
- <0xc0 0x40000000
- 0x02000000 0x0 0x00000000
- 0x0 0x00400000>,
-
- // inbound RP1 0x_xxxxxxxx -> PCIe 1x_xxxxxxxx
- <0x00 0x00000000
- 0x02000000 0x10 0x00000000
- 0x10 0x00000000>;
-};
-
-// Expose RP1 nodes as system nodes with labels
-
-&rp1_dma {
- status = "okay";
-};
-
-&rp1_eth {
- status = "okay";
- phy-handle = <&phy1>;
- phy-reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
- phy-reset-duration = <5>;
-
- phy1: ethernet-phy@1 {
- reg = <0x1>;
- brcm,powerdown-enable;
- interrupt-parent = <&gpio>;
- interrupts = <37 IRQ_TYPE_LEVEL_LOW>;
- };
-};
-
-gpio: &rp1_gpio {
- status = "okay";
-};
-
-aux: &dummy {};
-
-&rp1_usb0 {
- pinctrl-0 = <&usb_vbus_pins>;
- pinctrl-names = "default";
- status = "okay";
-};
-
-&rp1_usb1 {
- status = "okay";
-};
-
-#include "bcm2712-rpi.dtsi"
-
-i2c_csi_dsi0: &i2c6 { // Note: This is for MIPI0 connector only
- pinctrl-0 = <&rp1_i2c6_38_39>;
- pinctrl-names = "default";
- clock-frequency = <100000>;
-};
-
-i2c_csi_dsi1: &i2c0 { // Note: This is for MIPI1 connector
-};
-
-i2c_csi_dsi: &i2c_csi_dsi1 { }; // An alias for compatibility
-
-cam1_reg: &cam0_reg { // Shares CAM_GPIO with cam0_reg
-};
-
-csi0: &rp1_csi0 { };
-csi1: &rp1_csi1 { };
-dsi0: &rp1_dsi0 { };
-dsi1: &rp1_dsi1 { };
-dpi: &rp1_dpi { };
-vec: &rp1_vec { };
-dpi_gpio0: &rp1_dpi_24bit_gpio0 { };
-dpi_gpio1: &rp1_dpi_24bit_gpio2 { };
-dpi_18bit_cpadhi_gpio0: &rp1_dpi_18bit_cpadhi_gpio0 { };
-dpi_18bit_cpadhi_gpio2: &rp1_dpi_18bit_cpadhi_gpio2 { };
-dpi_18bit_gpio0: &rp1_dpi_18bit_gpio0 { };
-dpi_18bit_gpio2: &rp1_dpi_18bit_gpio2 { };
-dpi_16bit_cpadhi_gpio0: &rp1_dpi_16bit_cpadhi_gpio0 { };
-dpi_16bit_cpadhi_gpio2: &rp1_dpi_16bit_cpadhi_gpio2 { };
-dpi_16bit_gpio0: &rp1_dpi_16bit_gpio0 { };
-dpi_16bit_gpio2: &rp1_dpi_16bit_gpio2 { };
-
-/* Add the IOMMUs for some RP1 bus masters */
-
-&csi0 {
- iommus = <&iommu5>;
-};
-
-&csi1 {
- iommus = <&iommu5>;
-};
-
-&dsi0 {
- iommus = <&iommu5>;
-};
-
-&dsi1 {
- iommus = <&iommu5>;
-};
-
-&dpi {
- iommus = <&iommu5>;
-};
-
-&vec {
- iommus = <&iommu5>;
-};
-
-&ddc0 {
- status = "disabled";
-};
-
-&ddc1 {
- status = "disabled";
-};
-
-&hdmi0 {
- clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
- clock-names = "hdmi", "bvb", "audio", "cec";
- status = "disabled";
-};
-
-&hdmi1 {
- clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
- clock-names = "hdmi", "bvb", "audio", "cec";
- status = "disabled";
-};
-
-&hvs {
- clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
- clock-names = "core", "disp";
-};
-
-&mop {
- status = "disabled";
-};
-
-&moplet {
- status = "disabled";
-};
-
-&pixelvalve0 {
- status = "disabled";
-};
-
-&pixelvalve1 {
- status = "disabled";
-};
-
-&disp_intr {
- status = "disabled";
-};
-
-/* SDIO1 is used to drive the eMMC/SD card */
-&sdio1 {
- pinctrl-0 = <&emmc_cmddat_pulls>, <&emmc_ds_pull>;
- pinctrl-names = "default";
- vqmmc-supply = <&sd_io_1v8_reg>;
- vmmc-supply = <&sd_vcc_reg>;
- bus-width = <8>;
- sd-uhs-sdr50;
- sd-uhs-ddr50;
- sd-uhs-sdr104;
- mmc-hs200-1_8v;
- mmc-hs400-1_8v;
- mmc-hs400-enhanced-strobe;
- broken-cd;
- supports-cqe;
- status = "okay";
-};
-
-&pinctrl_aon {
- ant_pins: ant_pins {
- function = "gpio";
- pins = "aon_gpio5", "aon_gpio6";
- };
-
- /* Slight hack - only one PWM pin (status LED) is usable */
- aon_pwm_1pin: aon_pwm_1pin {
- function = "aon_pwm";
- pins = "aon_gpio9";
- };
-};
-
-&pinctrl {
- pwr_button_pins: pwr_button_pins {
- function = "gpio";
- pins = "gpio20";
- bias-pull-up;
- };
-
- wl_on_pins: wl_on_pins {
- function = "gpio";
- pins = "gpio28";
- };
-
- bt_shutdown_pins: bt_shutdown_pins {
- function = "gpio";
- pins = "gpio29";
- };
-
- emmc_ds_pull: emmc_ds_pull {
- pins = "emmc_ds";
- bias-pull-down;
- };
-
- emmc_cmddat_pulls: emmc_cmddat_pulls {
- pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3",
- "emmc_dat4", "emmc_dat5", "emmc_dat6", "emmc_dat7";
- bias-pull-up;
- };
-};
-
-/* uarta communicates with the BT module */
-&uarta {
- uart-has-rtscts;
- auto-flow-control;
- status = "okay";
- clock-frequency = <96000000>;
- pinctrl-0 = <&uarta_24_pins &bt_shutdown_pins>;
- pinctrl-names = "default";
-
- bluetooth: bluetooth {
- compatible = "brcm,bcm43438-bt";
- max-speed = <3000000>;
- shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
- local-bd-address = [ 00 00 00 00 00 00 ];
- };
-};
-
-&i2c_rp1boot {
- clock-frequency = <400000>;
- pinctrl-0 = <&i2c3_m4_agpio0_pins>;
- pinctrl-names = "default";
-};
-
-/ {
- chosen: chosen {
- bootargs = "reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe";
- stdout-path = "serial10:115200n8";
- };
-
- fan: cooling_fan {
- status = "disabled";
- compatible = "pwm-fan";
- #cooling-cells = <2>;
- cooling-min-state = <0>;
- cooling-max-state = <3>;
- cooling-levels = <0 75 125 175 250>;
- pwms = <&rp1_pwm1 3 41566 PWM_POLARITY_INVERTED>;
- rpm-regmap = <&rp1_pwm1>;
- rpm-offset = <0x3c>;
- };
-
- pwr_button {
- compatible = "gpio-keys";
-
- pinctrl-names = "default";
- pinctrl-0 = <&pwr_button_pins>;
- status = "okay";
-
- pwr_key: pwr {
- label = "pwr_button";
- // linux,code = <205>; // KEY_SUSPEND
- linux,code = <116>; // KEY_POWER
- gpios = <&gio 20 GPIO_ACTIVE_LOW>;
- debounce-interval = <50>; // ms
- };
- };
-};
-
-&usb {
- power-domains = <&power RPI_POWER_DOMAIN_USB>;
-};
-
-/* SDIO2 drives the WLAN interface */
-&sdio2 {
- pinctrl-0 = <&sdio2_30_pins>, <&ant_pins>;
- pinctrl-names = "default";
- bus-width = <4>;
- vmmc-supply = <&wl_on_reg>;
- sd-uhs-ddr50;
- non-removable;
- status = "okay";
- #address-cells = <1>;
- #size-cells = <0>;
-
- wifi: wifi@1 {
- reg = <1>;
- compatible = "brcm,bcm4329-fmac";
- local-mac-address = [00 00 00 00 00 00];
- };
-};
-
-&rpivid {
- status = "okay";
-};
-
-&pinctrl {
- spi10_gpio2: spi10_gpio2 {
- function = "vc_spi0";
- pins = "gpio2", "gpio3", "gpio4";
- bias-disable;
- };
-
- spi10_cs_gpio1: spi10_cs_gpio1 {
- function = "gpio";
- pins = "gpio1";
- bias-pull-up;
- };
-};
-
-spi10_pins: &spi10_gpio2 {};
-spi10_cs_pins: &spi10_cs_gpio1 {};
-
-&spi10 {
- pinctrl-names = "default";
- cs-gpios = <&gio 1 1>;
- pinctrl-0 = <&spi10_pins &spi10_cs_pins>;
-
- spidev10: spidev@0 {
- compatible = "spidev";
- reg = <0>; /* CE0 */
- #address-cells = <1>;
- #size-cells = <0>;
- spi-max-frequency = <20000000>;
- status = "okay";
- };
-};
-
-// =============================================
-// Board specific stuff here
-
-&gio_aon {
- // Don't use GIO_AON as an interrupt controller because it will
- // clash with the firmware monitoring the PMIC interrupt via the VPU.
-
- /delete-property/ interrupt-controller;
-};
-
-&main_aon_irq {
- // Don't use the MAIN_AON_IRQ interrupt controller because it will
- // clash with the firmware monitoring the PMIC interrupt via the VPU.
-
- status = "disabled";
-};
-
-&rp1_pwm1 {
- status = "disabled";
- pinctrl-0 = <&rp1_pwm1_gpio45>;
- pinctrl-names = "default";
-};
-
-&thermal_trips {
- cpu_tepid: cpu-tepid {
- temperature = <50000>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_warm: cpu-warm {
- temperature = <60000>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_hot: cpu-hot {
- temperature = <67500>;
- hysteresis = <5000>;
- type = "active";
- };
-
- cpu_vhot: cpu-vhot {
- temperature = <75000>;
- hysteresis = <5000>;
- type = "active";
- };
-};
-
-&cooling_maps {
- tepid {
- trip = <&cpu_tepid>;
- cooling-device = <&fan 1 1>;
- };
-
- warm {
- trip = <&cpu_warm>;
- cooling-device = <&fan 2 2>;
- };
-
- hot {
- trip = <&cpu_hot>;
- cooling-device = <&fan 3 3>;
- };
-
- vhot {
- trip = <&cpu_vhot>;
- cooling-device = <&fan 4 4>;
- };
-
- melt {
- trip = <&cpu_crit>;
- cooling-device = <&fan 4 4>;
- };
-};
-
-&gio {
- // The GPIOs above 35 are not used on Pi 5, so shrink the upper bank
- // to reduce the clutter in gpioinfo/pinctrl
- brcm,gpio-bank-widths = <32 4>;
-
- gpio-line-names =
- "-", // GPIO_000
- "2712_BOOT_CS_N", // GPIO_001
- "2712_BOOT_MISO", // GPIO_002
- "2712_BOOT_MOSI", // GPIO_003
- "2712_BOOT_SCLK", // GPIO_004
- "-", // GPIO_005
- "-", // GPIO_006
- "-", // GPIO_007
- "-", // GPIO_008
- "-", // GPIO_009
- "-", // GPIO_010
- "-", // GPIO_011
- "-", // GPIO_012
- "-", // GPIO_013
- "-", // GPIO_014
- "-", // GPIO_015
- "-", // GPIO_016
- "-", // GPIO_017
- "-", // GPIO_018
- "-", // GPIO_019
- "PWR_GPIO", // GPIO_020
- "2712_G21_FS", // GPIO_021
- "-", // GPIO_022
- "-", // GPIO_023
- "BT_RTS", // GPIO_024
- "BT_CTS", // GPIO_025
- "BT_TXD", // GPIO_026
- "BT_RXD", // GPIO_027
- "WL_ON", // GPIO_028
- "BT_ON", // GPIO_029
- "WIFI_SDIO_CLK", // GPIO_030
- "WIFI_SDIO_CMD", // GPIO_031
- "WIFI_SDIO_D0", // GPIO_032
- "WIFI_SDIO_D1", // GPIO_033
- "WIFI_SDIO_D2", // GPIO_034
- "WIFI_SDIO_D3"; // GPIO_035
-};
-
-&gio_aon {
- gpio-line-names =
- "RP1_SDA", // AON_GPIO_00
- "RP1_SCL", // AON_GPIO_01
- "RP1_RUN", // AON_GPIO_02
- "SD_IOVDD_SEL", // AON_GPIO_03
- "SD_PWR_ON", // AON_GPIO_04
- "ANT1", // AON_GPIO_05
- "ANT2", // AON_GPIO_06
- "-", // AON_GPIO_07
- "2712_WAKE", // AON_GPIO_08
- "2712_STAT_LED", // AON_GPIO_09
- "-", // AON_GPIO_10
- "-", // AON_GPIO_11
- "PMIC_INT", // AON_GPIO_12
- "UART_TX_FS", // AON_GPIO_13
- "UART_RX_FS", // AON_GPIO_14
- "-", // AON_GPIO_15
- "-", // AON_GPIO_16
-
- // Pad bank0 out to 32 entries
- "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
-
- "HDMI0_SCL", // AON_SGPIO_00
- "HDMI0_SDA", // AON_SGPIO_01
- "HDMI1_SCL", // AON_SGPIO_02
- "HDMI1_SDA", // AON_SGPIO_03
- "PMIC_SCL", // AON_SGPIO_04
- "PMIC_SDA"; // AON_SGPIO_05
-
- rp1_run_hog {
- gpio-hog;
- gpios = <2 GPIO_ACTIVE_HIGH>;
- output-high;
- line-name = "RP1 RUN pin";
- };
-
- ant1: ant1-hog {
- gpio-hog;
- gpios = <5 GPIO_ACTIVE_HIGH>;
- /* internal antenna enabled */
- output-high;
- line-name = "ant1";
- };
-
- ant2: ant2-hog {
- gpio-hog;
- gpios = <6 GPIO_ACTIVE_HIGH>;
- /* external antenna disabled */
- output-low;
- line-name = "ant2";
- };
-};
-
-&rp1_gpio {
- gpio-line-names =
- "ID_SDA", // GPIO0
- "ID_SCL", // GPIO1
- "GPIO2", // GPIO2
- "GPIO3", // GPIO3
- "GPIO4", // GPIO4
- "GPIO5", // GPIO5
- "GPIO6", // GPIO6
- "GPIO7", // GPIO7
- "GPIO8", // GPIO8
- "GPIO9", // GPIO9
- "GPIO10", // GPIO10
- "GPIO11", // GPIO11
- "GPIO12", // GPIO12
- "GPIO13", // GPIO13
- "GPIO14", // GPIO14
- "GPIO15", // GPIO15
- "GPIO16", // GPIO16
- "GPIO17", // GPIO17
- "GPIO18", // GPIO18
- "GPIO19", // GPIO19
- "GPIO20", // GPIO20
- "GPIO21", // GPIO21
- "GPIO22", // GPIO22
- "GPIO23", // GPIO23
- "GPIO24", // GPIO24
- "GPIO25", // GPIO25
- "GPIO26", // GPIO26
- "GPIO27", // GPIO27
-
- "PCIE_PWR_EN", // GPIO28
- "FAN_TACH", // GPIO29
- "HOST_SDA", // GPIO30
- "HOST_SCL", // GPIO31
- "ETH_RST_N", // GPIO32
- "PCIE_DET_WAKE", // GPIO33
-
- "CD0_IO0_MICCLK", // GPIO34
- "CD0_IO0_MICDAT0", // GPIO35
- "RP1_PCIE_CLKREQ_N", // GPIO36
- "ETH_IRQ_N", // GPIO37
- "SDA0", // GPIO38
- "SCL0", // GPIO39
- "-", // GPIO40
- "-", // GPIO41
- "USB_VBUS_EN", // GPIO42
- "USB_OC_N", // GPIO43
- "RP1_STAT_LED", // GPIO44
- "FAN_PWM", // GPIO45
- "-", // GPIO46
- "2712_WAKE", // GPIO47
- "-", // GPIO48
- "-", // GPIO49
- "-", // GPIO50
- "-", // GPIO51
- "-", // GPIO52
- "-"; // GPIO53
-
- usb_vbus_pins: usb_vbus_pins {
- function = "vbus1";
- pins = "gpio42", "gpio43";
- };
-};
-
-/ {
- aliases: aliases {
- blconfig = &blconfig;
- blpubkey = &blpubkey;
- bluetooth = &bluetooth;
- console = &uart10;
- ethernet0 = &rp1_eth;
- wifi0 = &wifi;
- fb = &fb;
- mailbox = &mailbox;
- mmc0 = &sdio1;
- uart0 = &uart0;
- uart1 = &uart1;
- uart2 = &uart2;
- uart3 = &uart3;
- uart4 = &uart4;
- uart10 = &uart10;
- serial0 = &uart0;
- serial1 = &uart1;
- serial2 = &uart2;
- serial3 = &uart3;
- serial4 = &uart4;
- serial10 = &uart10;
- i2c = &i2c_arm;
- i2c0 = &i2c0;
- i2c1 = &i2c1;
- i2c2 = &i2c2;
- i2c3 = &i2c3;
- i2c4 = &i2c4;
- i2c5 = &i2c5;
- i2c6 = &i2c6;
- i2c10 = &i2c_rp1boot;
- // Bit-bashed i2c_gpios start at 10
- spi0 = &spi0;
- spi1 = &spi1;
- spi2 = &spi2;
- spi3 = &spi3;
- spi4 = &spi4;
- spi5 = &spi5;
- spi10 = &spi10;
- gpio0 = &gpio;
- gpio1 = &gio;
- gpio2 = &gio_aon;
- gpio3 = &pinctrl;
- gpio4 = &pinctrl_aon;
- usb0 = &rp1_usb0;
- usb1 = &rp1_usb1;
- drm-dsi1 = &dsi0;
- drm-dsi2 = &dsi1;
- };
-
- __overrides__ {
- bdaddr = <&bluetooth>, "local-bd-address[";
- button_debounce = <&pwr_key>, "debounce-interval:0";
- cooling_fan = <&fan>, "status", <&rp1_pwm1>, "status";
- uart0_console = <&uart0>,"status", <&aliases>, "console=",&uart0;
- i2c0 = <&i2c0>, "status";
- i2c1 = <&i2c1>, "status";
- i2c = <&i2c1>, "status";
- i2c_arm = <&i2c_arm>, "status";
- i2c_vc = <&i2c_vc>, "status";
- i2c_csi_dsi = <&i2c_csi_dsi>, "status";
- i2c_csi_dsi0 = <&i2c_csi_dsi0>, "status";
- i2c_csi_dsi1 = <&i2c_csi_dsi1>, "status";
- i2c0_baudrate = <&i2c0>, "clock-frequency:0";
- i2c1_baudrate = <&i2c1>, "clock-frequency:0";
- i2c_baudrate = <&i2c_arm>, "clock-frequency:0";
- i2c_arm_baudrate = <&i2c_arm>, "clock-frequency:0";
- i2c_vc_baudrate = <&i2c_vc>, "clock-frequency:0";
- krnbt = <&bluetooth>, "status";
- nvme = <&pciex1>, "status";
- pciex1 = <&pciex1>, "status";
- pciex1_gen = <&pciex1> , "max-link-speed:0";
- pciex1_no_l0s = <&pciex1>, "aspm-no-l0s?";
- pciex1_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
- pcie_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
- random = <&random>, "status";
- rtc = <&rpi_rtc>, "status";
- rtc_bbat_vchg = <&rpi_rtc>, "trickle-charge-microvolt:0";
- spi = <&spi0>, "status";
- suspend = <&pwr_key>, "linux,code:0=205";
- uart0 = <&uart0>, "status";
- wifiaddr = <&wifi>, "local-mac-address[";
-
- act_led_activelow = <&led_act>, "active-low?";
- act_led_trigger = <&led_act>, "linux,default-trigger";
- pwr_led_activelow = <&led_pwr>, "gpios:8";
- pwr_led_trigger = <&led_pwr>, "linux,default-trigger";
- eth_led0 = <&phy1>,"led-modes:0";
- eth_led1 = <&phy1>,"led-modes:4";
- drm_fb0_rp1_dsi0 = <&aliases>, "drm-fb0=",&dsi0;
- drm_fb0_rp1_dsi1 = <&aliases>, "drm-fb0=",&dsi1;
- drm_fb0_rp1_dpi = <&aliases>, "drm-fb0=",&dpi;
- drm_fb0_vc4 = <&aliases>, "drm-fb0=",&vc4;
- drm_fb1_rp1_dsi0 = <&aliases>, "drm-fb1=",&dsi0;
- drm_fb1_rp1_dsi1 = <&aliases>, "drm-fb1=",&dsi1;
- drm_fb1_rp1_dpi = <&aliases>, "drm-fb1=",&dpi;
- drm_fb1_vc4 = <&aliases>, "drm-fb1=",&vc4;
- drm_fb2_rp1_dsi0 = <&aliases>, "drm-fb2=",&dsi0;
- drm_fb2_rp1_dsi1 = <&aliases>, "drm-fb2=",&dsi1;
- drm_fb2_rp1_dpi = <&aliases>, "drm-fb2=",&dpi;
- drm_fb2_vc4 = <&aliases>, "drm-fb2=",&vc4;
-
- ant1 = <&ant1>,"output-high?=on",
- <&ant1>, "output-low?=off",
- <&ant2>, "output-high?=off",
- <&ant2>, "output-low?=on";
- ant2 = <&ant1>,"output-high?=off",
- <&ant1>, "output-low?=on",
- <&ant2>, "output-high?=on",
- <&ant2>, "output-low?=off";
- noant = <&ant1>,"output-high?=off",
- <&ant1>, "output-low?=on",
- <&ant2>, "output-high?=off",
- <&ant2>, "output-low?=on";
-
- fan_temp0 = <&cpu_tepid>,"temperature:0";
- fan_temp1 = <&cpu_warm>,"temperature:0";
- fan_temp2 = <&cpu_hot>,"temperature:0";
- fan_temp3 = <&cpu_vhot>,"temperature:0";
- fan_temp0_hyst = <&cpu_tepid>,"hysteresis:0";
- fan_temp1_hyst = <&cpu_warm>,"hysteresis:0";
- fan_temp2_hyst = <&cpu_hot>,"hysteresis:0";
- fan_temp3_hyst = <&cpu_vhot>,"hysteresis:0";
- fan_temp0_speed = <&fan>, "cooling-levels:4";
- fan_temp1_speed = <&fan>, "cooling-levels:8";
- fan_temp2_speed = <&fan>, "cooling-levels:12";
- fan_temp3_speed = <&fan>, "cooling-levels:16";
- };
-};
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi
@@ -0,0 +1,884 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/rp1.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/mfd/rp1.h>
+#include <dt-bindings/pwm/pwm.h>
+#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
+
+#define i2c0 _i2c0
+#define i2c3 _i2c3
+#define i2c4 _i2c4
+#define i2c5 _i2c5
+#define i2c6 _i2c6
+#define i2c8 _i2c8
+#define i2s _i2s
+#define pwm0 _pwm0
+#define pwm1 _pwm1
+#define spi0 _spi0
+#define spi3 _spi3
+#define spi4 _spi4
+#define spi5 _spi5
+#define spi6 _spi6
+#define uart0 _uart0
+#define uart2 _uart2
+#define uart5 _uart5
+
+#include "bcm2712.dtsi"
+
+#undef i2c0
+#undef i2c3
+#undef i2c4
+#undef i2c5
+#undef i2c6
+#undef i2c8
+#undef i2s
+#undef pwm0
+#undef pwm1
+#undef spi0
+#undef spi3
+#undef spi4
+#undef spi5
+#undef spi6
+#undef uart0
+#undef uart2
+#undef uart3
+#undef uart4
+#undef uart5
+
+/ {
+ compatible = "raspberrypi,5-compute-module", "brcm,bcm2712";
+ model = "Raspberry Pi Compute Module 5";
+
+ /* Will be filled by the bootloader */
+ memory@0 {
+ device_type = "memory";
+ reg = <0 0 0x28000000>;
+ };
+
+ leds: leds {
+ compatible = "gpio-leds";
+
+ led_pwr: led-pwr {
+ label = "PWR";
+ gpios = <&rp1_gpio 44 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ linux,default-trigger = "none";
+ };
+
+ led_act: led-act {
+ label = "ACT";
+ gpios = <&gio_aon 9 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ linux,default-trigger = "mmc0";
+ };
+ };
+
+ sd_io_1v8_reg: sd_io_1v8_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "vdd-sd-io";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ };
+
+ 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;
+ gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+
+ wl_on_reg: wl_on_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "wl-on-regulator";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ pinctrl-0 = <&wl_on_pins>;
+ pinctrl-names = "default";
+
+ gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
+
+ startup-delay-us = <150000>;
+ enable-active-high;
+ };
+
+ clocks: clocks {
+ };
+
+ cam1_clk: cam1_clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ cam0_clk: cam0_clk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ cam0_reg: cam0_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "cam0_reg";
+ enable-active-high;
+ status = "okay";
+ gpio = <&rp1_gpio 34 0>; // CD0_IO0_MICCLK, to CAM_GPIO on connector
+ };
+
+ cam_dummy_reg: cam_dummy_reg {
+ compatible = "regulator-fixed";
+ regulator-name = "cam-dummy-reg";
+ status = "okay";
+ };
+
+ dummy: dummy {
+ // A target for unwanted overlay fragments
+ };
+
+
+ // A few extra labels to keep overlays happy
+
+ i2c0if: i2c0if {};
+ i2c0mux: i2c0mux {};
+};
+
+rp1_target: &pcie2 {
+ brcm,enable-mps-rcb;
+ brcm,vdm-qos-map = <0xbbaa9888>;
+ aspm-no-l0s;
+ status = "okay";
+};
+
+// Add some labels to 2712 device
+
+// The system UART
+uart10: &_uart0 { status = "okay"; };
+
+// The system SPI for the bootloader EEPROM
+spi10: &_spi0 { status = "okay"; };
+
+i2c_rp1boot: &_i2c3 { };
+
+#include "rp1.dtsi"
+
+&rp1 {
+ // PCIe address space layout:
+ // 00_00000000-00_00xxxxxx = RP1 peripherals
+ // 10_00000000-1x_xxxxxxxx = up to 64GB system RAM
+
+ // outbound access aimed at PCIe 0_00xxxxxx -> RP1 c0_40xxxxxx
+ // This is the RP1 peripheral space
+ ranges = <0xc0 0x40000000
+ 0x02000000 0x00 0x00000000
+ 0x00 0x00400000>;
+
+ dma-ranges =
+ // inbound RP1 1x_xxxxxxxx -> PCIe 1x_xxxxxxxx
+ <0x10 0x00000000
+ 0x43000000 0x10 0x00000000
+ 0x10 0x00000000>,
+
+ // inbound RP1 c0_40xxxxxx -> PCIe 00_00xxxxxx
+ // This allows the RP1 DMA controller to address RP1 hardware
+ <0xc0 0x40000000
+ 0x02000000 0x0 0x00000000
+ 0x0 0x00400000>,
+
+ // inbound RP1 0x_xxxxxxxx -> PCIe 1x_xxxxxxxx
+ <0x00 0x00000000
+ 0x02000000 0x10 0x00000000
+ 0x10 0x00000000>;
+};
+
+// Expose RP1 nodes as system nodes with labels
+
+&rp1_dma {
+ status = "okay";
+};
+
+&rp1_eth {
+ status = "okay";
+ phy-handle = <&phy1>;
+ phy-reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
+ phy-reset-duration = <5>;
+
+ phy1: ethernet-phy@1 {
+ reg = <0x1>;
+ brcm,powerdown-enable;
+ interrupt-parent = <&gpio>;
+ interrupts = <37 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
+
+gpio: &rp1_gpio {
+ status = "okay";
+};
+
+aux: &dummy {};
+
+&rp1_usb0 {
+ pinctrl-0 = <&usb_vbus_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&rp1_usb1 {
+ status = "okay";
+};
+
+#include "bcm2712-rpi.dtsi"
+
+i2c_csi_dsi0: &i2c6 { // Note: This is for MIPI0 connector only
+ pinctrl-0 = <&rp1_i2c6_38_39>;
+ pinctrl-names = "default";
+ clock-frequency = <100000>;
+};
+
+i2c_csi_dsi1: &i2c0 { // Note: This is for MIPI1 connector
+};
+
+i2c_csi_dsi: &i2c_csi_dsi1 { }; // An alias for compatibility
+
+cam1_reg: &cam0_reg { // Shares CAM_GPIO with cam0_reg
+};
+
+csi0: &rp1_csi0 { };
+csi1: &rp1_csi1 { };
+dsi0: &rp1_dsi0 { };
+dsi1: &rp1_dsi1 { };
+dpi: &rp1_dpi { };
+vec: &rp1_vec { };
+dpi_gpio0: &rp1_dpi_24bit_gpio0 { };
+dpi_gpio1: &rp1_dpi_24bit_gpio2 { };
+dpi_18bit_cpadhi_gpio0: &rp1_dpi_18bit_cpadhi_gpio0 { };
+dpi_18bit_cpadhi_gpio2: &rp1_dpi_18bit_cpadhi_gpio2 { };
+dpi_18bit_gpio0: &rp1_dpi_18bit_gpio0 { };
+dpi_18bit_gpio2: &rp1_dpi_18bit_gpio2 { };
+dpi_16bit_cpadhi_gpio0: &rp1_dpi_16bit_cpadhi_gpio0 { };
+dpi_16bit_cpadhi_gpio2: &rp1_dpi_16bit_cpadhi_gpio2 { };
+dpi_16bit_gpio0: &rp1_dpi_16bit_gpio0 { };
+dpi_16bit_gpio2: &rp1_dpi_16bit_gpio2 { };
+
+/* Add the IOMMUs for some RP1 bus masters */
+
+&csi0 {
+ iommus = <&iommu5>;
+};
+
+&csi1 {
+ iommus = <&iommu5>;
+};
+
+&dsi0 {
+ iommus = <&iommu5>;
+};
+
+&dsi1 {
+ iommus = <&iommu5>;
+};
+
+&dpi {
+ iommus = <&iommu5>;
+};
+
+&vec {
+ iommus = <&iommu5>;
+};
+
+&ddc0 {
+ status = "disabled";
+};
+
+&ddc1 {
+ status = "disabled";
+};
+
+&hdmi0 {
+ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
+ clock-names = "hdmi", "bvb", "audio", "cec";
+ status = "disabled";
+};
+
+&hdmi1 {
+ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
+ clock-names = "hdmi", "bvb", "audio", "cec";
+ status = "disabled";
+};
+
+&hvs {
+ clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
+ clock-names = "core", "disp";
+};
+
+&mop {
+ status = "disabled";
+};
+
+&moplet {
+ status = "disabled";
+};
+
+&pixelvalve0 {
+ status = "disabled";
+};
+
+&pixelvalve1 {
+ status = "disabled";
+};
+
+&disp_intr {
+ status = "disabled";
+};
+
+/* SDIO1 is used to drive the eMMC/SD card */
+&sdio1 {
+ pinctrl-0 = <&emmc_cmddat_pulls>, <&emmc_ds_pull>;
+ pinctrl-names = "default";
+ vqmmc-supply = <&sd_io_1v8_reg>;
+ vmmc-supply = <&sd_vcc_reg>;
+ bus-width = <8>;
+ sd-uhs-sdr50;
+ sd-uhs-ddr50;
+ sd-uhs-sdr104;
+ mmc-hs200-1_8v;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ broken-cd;
+ supports-cqe;
+ status = "okay";
+};
+
+&pinctrl_aon {
+ ant_pins: ant_pins {
+ function = "gpio";
+ pins = "aon_gpio5", "aon_gpio6";
+ };
+
+ /* Slight hack - only one PWM pin (status LED) is usable */
+ aon_pwm_1pin: aon_pwm_1pin {
+ function = "aon_pwm";
+ pins = "aon_gpio9";
+ };
+};
+
+&pinctrl {
+ pwr_button_pins: pwr_button_pins {
+ function = "gpio";
+ pins = "gpio20";
+ bias-pull-up;
+ };
+
+ wl_on_pins: wl_on_pins {
+ function = "gpio";
+ pins = "gpio28";
+ };
+
+ bt_shutdown_pins: bt_shutdown_pins {
+ function = "gpio";
+ pins = "gpio29";
+ };
+
+ emmc_ds_pull: emmc_ds_pull {
+ pins = "emmc_ds";
+ bias-pull-down;
+ };
+
+ emmc_cmddat_pulls: emmc_cmddat_pulls {
+ pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3",
+ "emmc_dat4", "emmc_dat5", "emmc_dat6", "emmc_dat7";
+ bias-pull-up;
+ };
+};
+
+/* uarta communicates with the BT module */
+&uarta {
+ uart-has-rtscts;
+ auto-flow-control;
+ status = "okay";
+ clock-frequency = <96000000>;
+ pinctrl-0 = <&uarta_24_pins &bt_shutdown_pins>;
+ pinctrl-names = "default";
+
+ bluetooth: bluetooth {
+ compatible = "brcm,bcm43438-bt";
+ max-speed = <3000000>;
+ shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
+ local-bd-address = [ 00 00 00 00 00 00 ];
+ };
+};
+
+&i2c_rp1boot {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&i2c3_m4_agpio0_pins>;
+ pinctrl-names = "default";
+};
+
+/ {
+ chosen: chosen {
+ bootargs = "reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe";
+ stdout-path = "serial10:115200n8";
+ };
+
+ fan: cooling_fan {
+ status = "disabled";
+ compatible = "pwm-fan";
+ #cooling-cells = <2>;
+ cooling-min-state = <0>;
+ cooling-max-state = <3>;
+ cooling-levels = <0 75 125 175 250>;
+ pwms = <&rp1_pwm1 3 41566 PWM_POLARITY_INVERTED>;
+ rpm-regmap = <&rp1_pwm1>;
+ rpm-offset = <0x3c>;
+ };
+
+ pwr_button {
+ compatible = "gpio-keys";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwr_button_pins>;
+ status = "okay";
+
+ pwr_key: pwr {
+ label = "pwr_button";
+ // linux,code = <205>; // KEY_SUSPEND
+ linux,code = <116>; // KEY_POWER
+ gpios = <&gio 20 GPIO_ACTIVE_LOW>;
+ debounce-interval = <50>; // ms
+ };
+ };
+};
+
+&usb {
+ power-domains = <&power RPI_POWER_DOMAIN_USB>;
+};
+
+/* SDIO2 drives the WLAN interface */
+&sdio2 {
+ pinctrl-0 = <&sdio2_30_pins>, <&ant_pins>;
+ pinctrl-names = "default";
+ bus-width = <4>;
+ vmmc-supply = <&wl_on_reg>;
+ sd-uhs-ddr50;
+ non-removable;
+ status = "okay";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ wifi: wifi@1 {
+ reg = <1>;
+ compatible = "brcm,bcm4329-fmac";
+ local-mac-address = [00 00 00 00 00 00];
+ };
+};
+
+&rpivid {
+ status = "okay";
+};
+
+&pinctrl {
+ spi10_gpio2: spi10_gpio2 {
+ function = "vc_spi0";
+ pins = "gpio2", "gpio3", "gpio4";
+ bias-disable;
+ };
+
+ spi10_cs_gpio1: spi10_cs_gpio1 {
+ function = "gpio";
+ pins = "gpio1";
+ bias-pull-up;
+ };
+};
+
+spi10_pins: &spi10_gpio2 {};
+spi10_cs_pins: &spi10_cs_gpio1 {};
+
+&spi10 {
+ pinctrl-names = "default";
+ cs-gpios = <&gio 1 1>;
+ pinctrl-0 = <&spi10_pins &spi10_cs_pins>;
+
+ spidev10: spidev@0 {
+ compatible = "spidev";
+ reg = <0>; /* CE0 */
+ #address-cells = <1>;
+ #size-cells = <0>;
+ spi-max-frequency = <20000000>;
+ status = "okay";
+ };
+};
+
+// =============================================
+// Board specific stuff here
+
+&gio_aon {
+ // Don't use GIO_AON as an interrupt controller because it will
+ // clash with the firmware monitoring the PMIC interrupt via the VPU.
+
+ /delete-property/ interrupt-controller;
+};
+
+&main_aon_irq {
+ // Don't use the MAIN_AON_IRQ interrupt controller because it will
+ // clash with the firmware monitoring the PMIC interrupt via the VPU.
+
+ status = "disabled";
+};
+
+&rp1_pwm1 {
+ status = "disabled";
+ pinctrl-0 = <&rp1_pwm1_gpio45>;
+ pinctrl-names = "default";
+};
+
+&thermal_trips {
+ cpu_tepid: cpu-tepid {
+ temperature = <50000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_warm: cpu-warm {
+ temperature = <60000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_hot: cpu-hot {
+ temperature = <67500>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+
+ cpu_vhot: cpu-vhot {
+ temperature = <75000>;
+ hysteresis = <5000>;
+ type = "active";
+ };
+};
+
+&cooling_maps {
+ tepid {
+ trip = <&cpu_tepid>;
+ cooling-device = <&fan 1 1>;
+ };
+
+ warm {
+ trip = <&cpu_warm>;
+ cooling-device = <&fan 2 2>;
+ };
+
+ hot {
+ trip = <&cpu_hot>;
+ cooling-device = <&fan 3 3>;
+ };
+
+ vhot {
+ trip = <&cpu_vhot>;
+ cooling-device = <&fan 4 4>;
+ };
+
+ melt {
+ trip = <&cpu_crit>;
+ cooling-device = <&fan 4 4>;
+ };
+};
+
+&gio {
+ // The GPIOs above 35 are not used on Pi 5, so shrink the upper bank
+ // to reduce the clutter in gpioinfo/pinctrl
+ brcm,gpio-bank-widths = <32 4>;
+
+ gpio-line-names =
+ "-", // GPIO_000
+ "2712_BOOT_CS_N", // GPIO_001
+ "2712_BOOT_MISO", // GPIO_002
+ "2712_BOOT_MOSI", // GPIO_003
+ "2712_BOOT_SCLK", // GPIO_004
+ "-", // GPIO_005
+ "-", // GPIO_006
+ "-", // GPIO_007
+ "-", // GPIO_008
+ "-", // GPIO_009
+ "-", // GPIO_010
+ "-", // GPIO_011
+ "-", // GPIO_012
+ "-", // GPIO_013
+ "-", // GPIO_014
+ "-", // GPIO_015
+ "-", // GPIO_016
+ "-", // GPIO_017
+ "-", // GPIO_018
+ "-", // GPIO_019
+ "PWR_GPIO", // GPIO_020
+ "2712_G21_FS", // GPIO_021
+ "-", // GPIO_022
+ "-", // GPIO_023
+ "BT_RTS", // GPIO_024
+ "BT_CTS", // GPIO_025
+ "BT_TXD", // GPIO_026
+ "BT_RXD", // GPIO_027
+ "WL_ON", // GPIO_028
+ "BT_ON", // GPIO_029
+ "WIFI_SDIO_CLK", // GPIO_030
+ "WIFI_SDIO_CMD", // GPIO_031
+ "WIFI_SDIO_D0", // GPIO_032
+ "WIFI_SDIO_D1", // GPIO_033
+ "WIFI_SDIO_D2", // GPIO_034
+ "WIFI_SDIO_D3"; // GPIO_035
+};
+
+&gio_aon {
+ gpio-line-names =
+ "RP1_SDA", // AON_GPIO_00
+ "RP1_SCL", // AON_GPIO_01
+ "RP1_RUN", // AON_GPIO_02
+ "SD_IOVDD_SEL", // AON_GPIO_03
+ "SD_PWR_ON", // AON_GPIO_04
+ "ANT1", // AON_GPIO_05
+ "ANT2", // AON_GPIO_06
+ "-", // AON_GPIO_07
+ "2712_WAKE", // AON_GPIO_08
+ "2712_STAT_LED", // AON_GPIO_09
+ "-", // AON_GPIO_10
+ "-", // AON_GPIO_11
+ "PMIC_INT", // AON_GPIO_12
+ "UART_TX_FS", // AON_GPIO_13
+ "UART_RX_FS", // AON_GPIO_14
+ "-", // AON_GPIO_15
+ "-", // AON_GPIO_16
+
+ // Pad bank0 out to 32 entries
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+
+ "HDMI0_SCL", // AON_SGPIO_00
+ "HDMI0_SDA", // AON_SGPIO_01
+ "HDMI1_SCL", // AON_SGPIO_02
+ "HDMI1_SDA", // AON_SGPIO_03
+ "PMIC_SCL", // AON_SGPIO_04
+ "PMIC_SDA"; // AON_SGPIO_05
+
+ rp1_run_hog {
+ gpio-hog;
+ gpios = <2 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "RP1 RUN pin";
+ };
+
+ ant1: ant1-hog {
+ gpio-hog;
+ gpios = <5 GPIO_ACTIVE_HIGH>;
+ /* internal antenna enabled */
+ output-high;
+ line-name = "ant1";
+ };
+
+ ant2: ant2-hog {
+ gpio-hog;
+ gpios = <6 GPIO_ACTIVE_HIGH>;
+ /* external antenna disabled */
+ output-low;
+ line-name = "ant2";
+ };
+};
+
+&rp1_gpio {
+ gpio-line-names =
+ "ID_SDA", // GPIO0
+ "ID_SCL", // GPIO1
+ "GPIO2", // GPIO2
+ "GPIO3", // GPIO3
+ "GPIO4", // GPIO4
+ "GPIO5", // GPIO5
+ "GPIO6", // GPIO6
+ "GPIO7", // GPIO7
+ "GPIO8", // GPIO8
+ "GPIO9", // GPIO9
+ "GPIO10", // GPIO10
+ "GPIO11", // GPIO11
+ "GPIO12", // GPIO12
+ "GPIO13", // GPIO13
+ "GPIO14", // GPIO14
+ "GPIO15", // GPIO15
+ "GPIO16", // GPIO16
+ "GPIO17", // GPIO17
+ "GPIO18", // GPIO18
+ "GPIO19", // GPIO19
+ "GPIO20", // GPIO20
+ "GPIO21", // GPIO21
+ "GPIO22", // GPIO22
+ "GPIO23", // GPIO23
+ "GPIO24", // GPIO24
+ "GPIO25", // GPIO25
+ "GPIO26", // GPIO26
+ "GPIO27", // GPIO27
+
+ "PCIE_PWR_EN", // GPIO28
+ "FAN_TACH", // GPIO29
+ "HOST_SDA", // GPIO30
+ "HOST_SCL", // GPIO31
+ "ETH_RST_N", // GPIO32
+ "PCIE_DET_WAKE", // GPIO33
+
+ "CD0_IO0_MICCLK", // GPIO34
+ "CD0_IO0_MICDAT0", // GPIO35
+ "RP1_PCIE_CLKREQ_N", // GPIO36
+ "ETH_IRQ_N", // GPIO37
+ "SDA0", // GPIO38
+ "SCL0", // GPIO39
+ "-", // GPIO40
+ "-", // GPIO41
+ "USB_VBUS_EN", // GPIO42
+ "USB_OC_N", // GPIO43
+ "RP1_STAT_LED", // GPIO44
+ "FAN_PWM", // GPIO45
+ "-", // GPIO46
+ "2712_WAKE", // GPIO47
+ "-", // GPIO48
+ "-", // GPIO49
+ "-", // GPIO50
+ "-", // GPIO51
+ "-", // GPIO52
+ "-"; // GPIO53
+
+ usb_vbus_pins: usb_vbus_pins {
+ function = "vbus1";
+ pins = "gpio42", "gpio43";
+ };
+};
+
+/ {
+ aliases: aliases {
+ blconfig = &blconfig;
+ blpubkey = &blpubkey;
+ bluetooth = &bluetooth;
+ console = &uart10;
+ ethernet0 = &rp1_eth;
+ wifi0 = &wifi;
+ fb = &fb;
+ mailbox = &mailbox;
+ mmc0 = &sdio1;
+ uart0 = &uart0;
+ uart1 = &uart1;
+ uart2 = &uart2;
+ uart3 = &uart3;
+ uart4 = &uart4;
+ uart10 = &uart10;
+ serial0 = &uart0;
+ serial1 = &uart1;
+ serial2 = &uart2;
+ serial3 = &uart3;
+ serial4 = &uart4;
+ serial10 = &uart10;
+ i2c = &i2c_arm;
+ i2c0 = &i2c0;
+ i2c1 = &i2c1;
+ i2c2 = &i2c2;
+ i2c3 = &i2c3;
+ i2c4 = &i2c4;
+ i2c5 = &i2c5;
+ i2c6 = &i2c6;
+ i2c10 = &i2c_rp1boot;
+ // Bit-bashed i2c_gpios start at 10
+ spi0 = &spi0;
+ spi1 = &spi1;
+ spi2 = &spi2;
+ spi3 = &spi3;
+ spi4 = &spi4;
+ spi5 = &spi5;
+ spi10 = &spi10;
+ gpio0 = &gpio;
+ gpio1 = &gio;
+ gpio2 = &gio_aon;
+ gpio3 = &pinctrl;
+ gpio4 = &pinctrl_aon;
+ usb0 = &rp1_usb0;
+ usb1 = &rp1_usb1;
+ drm-dsi1 = &dsi0;
+ drm-dsi2 = &dsi1;
+ };
+
+ __overrides__ {
+ bdaddr = <&bluetooth>, "local-bd-address[";
+ button_debounce = <&pwr_key>, "debounce-interval:0";
+ cooling_fan = <&fan>, "status", <&rp1_pwm1>, "status";
+ uart0_console = <&uart0>,"status", <&aliases>, "console=",&uart0;
+ i2c0 = <&i2c0>, "status";
+ i2c1 = <&i2c1>, "status";
+ i2c = <&i2c1>, "status";
+ i2c_arm = <&i2c_arm>, "status";
+ i2c_vc = <&i2c_vc>, "status";
+ i2c_csi_dsi = <&i2c_csi_dsi>, "status";
+ i2c_csi_dsi0 = <&i2c_csi_dsi0>, "status";
+ i2c_csi_dsi1 = <&i2c_csi_dsi1>, "status";
+ i2c0_baudrate = <&i2c0>, "clock-frequency:0";
+ i2c1_baudrate = <&i2c1>, "clock-frequency:0";
+ i2c_baudrate = <&i2c_arm>, "clock-frequency:0";
+ i2c_arm_baudrate = <&i2c_arm>, "clock-frequency:0";
+ i2c_vc_baudrate = <&i2c_vc>, "clock-frequency:0";
+ krnbt = <&bluetooth>, "status";
+ nvme = <&pciex1>, "status";
+ pciex1 = <&pciex1>, "status";
+ pciex1_gen = <&pciex1> , "max-link-speed:0";
+ pciex1_no_l0s = <&pciex1>, "aspm-no-l0s?";
+ pciex1_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
+ pcie_tperst_clk_ms = <&pciex1>, "brcm,tperst-clk-ms:0";
+ random = <&random>, "status";
+ rtc = <&rpi_rtc>, "status";
+ rtc_bbat_vchg = <&rpi_rtc>, "trickle-charge-microvolt:0";
+ spi = <&spi0>, "status";
+ suspend = <&pwr_key>, "linux,code:0=205";
+ uart0 = <&uart0>, "status";
+ wifiaddr = <&wifi>, "local-mac-address[";
+
+ act_led_activelow = <&led_act>, "active-low?";
+ act_led_trigger = <&led_act>, "linux,default-trigger";
+ pwr_led_activelow = <&led_pwr>, "gpios:8";
+ pwr_led_trigger = <&led_pwr>, "linux,default-trigger";
+ eth_led0 = <&phy1>,"led-modes:0";
+ eth_led1 = <&phy1>,"led-modes:4";
+ drm_fb0_rp1_dsi0 = <&aliases>, "drm-fb0=",&dsi0;
+ drm_fb0_rp1_dsi1 = <&aliases>, "drm-fb0=",&dsi1;
+ drm_fb0_rp1_dpi = <&aliases>, "drm-fb0=",&dpi;
+ drm_fb0_vc4 = <&aliases>, "drm-fb0=",&vc4;
+ drm_fb1_rp1_dsi0 = <&aliases>, "drm-fb1=",&dsi0;
+ drm_fb1_rp1_dsi1 = <&aliases>, "drm-fb1=",&dsi1;
+ drm_fb1_rp1_dpi = <&aliases>, "drm-fb1=",&dpi;
+ drm_fb1_vc4 = <&aliases>, "drm-fb1=",&vc4;
+ drm_fb2_rp1_dsi0 = <&aliases>, "drm-fb2=",&dsi0;
+ drm_fb2_rp1_dsi1 = <&aliases>, "drm-fb2=",&dsi1;
+ drm_fb2_rp1_dpi = <&aliases>, "drm-fb2=",&dpi;
+ drm_fb2_vc4 = <&aliases>, "drm-fb2=",&vc4;
+
+ ant1 = <&ant1>,"output-high?=on",
+ <&ant1>, "output-low?=off",
+ <&ant2>, "output-high?=off",
+ <&ant2>, "output-low?=on";
+ ant2 = <&ant1>,"output-high?=off",
+ <&ant1>, "output-low?=on",
+ <&ant2>, "output-high?=on",
+ <&ant2>, "output-low?=off";
+ noant = <&ant1>,"output-high?=off",
+ <&ant1>, "output-low?=on",
+ <&ant2>, "output-high?=off",
+ <&ant2>, "output-low?=on";
+
+ fan_temp0 = <&cpu_tepid>,"temperature:0";
+ fan_temp1 = <&cpu_warm>,"temperature:0";
+ fan_temp2 = <&cpu_hot>,"temperature:0";
+ fan_temp3 = <&cpu_vhot>,"temperature:0";
+ fan_temp0_hyst = <&cpu_tepid>,"hysteresis:0";
+ fan_temp1_hyst = <&cpu_warm>,"hysteresis:0";
+ fan_temp2_hyst = <&cpu_hot>,"hysteresis:0";
+ fan_temp3_hyst = <&cpu_vhot>,"hysteresis:0";
+ fan_temp0_speed = <&fan>, "cooling-levels:4";
+ fan_temp1_speed = <&fan>, "cooling-levels:8";
+ fan_temp2_speed = <&fan>, "cooling-levels:12";
+ fan_temp3_speed = <&fan>, "cooling-levels:16";
+ };
+};
--- a/arch/arm64/boot/dts/broadcom/bcm2712d0-rpi-5-b.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm2712d0-rpi-5-b.dts
@@ -1,2 +1,107 @@
// SPDX-License-Identifier: GPL-2.0
-#include "../../../../arm/boot/dts/broadcom/bcm2712d0-rpi-5-b.dts"
+#include "bcm2712-rpi-5-b.dts"
+
+&gio {
+ brcm,gpio-bank-widths = <32 4>;
+
+ gpio-line-names =
+ "", // GPIO_000
+ "2712_BOOT_CS_N", // GPIO_001
+ "2712_BOOT_MISO", // GPIO_002
+ "2712_BOOT_MOSI", // GPIO_003
+ "2712_BOOT_SCLK", // GPIO_004
+ "", // GPIO_005
+ "", // GPIO_006
+ "", // GPIO_007
+ "", // GPIO_008
+ "", // GPIO_009
+ "", // GPIO_010
+ "", // GPIO_011
+ "", // GPIO_012
+ "", // GPIO_013
+ "PCIE_SDA", // GPIO_014
+ "PCIE_SCL", // GPIO_015
+ "", // GPIO_016
+ "", // GPIO_017
+ "-", // GPIO_018
+ "-", // GPIO_019
+ "PWR_GPIO", // GPIO_020
+ "2712_G21_FS", // GPIO_021
+ "-", // GPIO_022
+ "-", // GPIO_023
+ "BT_RTS", // GPIO_024
+ "BT_CTS", // GPIO_025
+ "BT_TXD", // GPIO_026
+ "BT_RXD", // GPIO_027
+ "WL_ON", // GPIO_028
+ "BT_ON", // GPIO_029
+ "WIFI_SDIO_CLK", // GPIO_030
+ "WIFI_SDIO_CMD", // GPIO_031
+ "WIFI_SDIO_D0", // GPIO_032
+ "WIFI_SDIO_D1", // GPIO_033
+ "WIFI_SDIO_D2", // GPIO_034
+ "WIFI_SDIO_D3"; // GPIO_035
+};
+
+&gio_aon {
+ brcm,gpio-bank-widths = <15 6>;
+
+ gpio-line-names =
+ "RP1_SDA", // AON_GPIO_00
+ "RP1_SCL", // AON_GPIO_01
+ "RP1_RUN", // AON_GPIO_02
+ "SD_IOVDD_SEL", // AON_GPIO_03
+ "SD_PWR_ON", // AON_GPIO_04
+ "SD_CDET_N", // AON_GPIO_05
+ "SD_FLG_N", // AON_GPIO_06
+ "", // AON_GPIO_07
+ "2712_WAKE", // AON_GPIO_08
+ "2712_STAT_LED", // AON_GPIO_09
+ "", // AON_GPIO_10
+ "", // AON_GPIO_11
+ "PMIC_INT", // AON_GPIO_12
+ "UART_TX_FS", // AON_GPIO_13
+ "UART_RX_FS", // AON_GPIO_14
+ "", // AON_GPIO_15
+ "", // AON_GPIO_16
+
+ // Pad bank0 out to 32 entries
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+
+ "HDMI0_SCL", // AON_SGPIO_00
+ "HDMI0_SDA", // AON_SGPIO_01
+ "HDMI1_SCL", // AON_SGPIO_02
+ "HDMI1_SDA", // AON_SGPIO_03
+ "PMIC_SCL", // AON_SGPIO_04
+ "PMIC_SDA"; // AON_SGPIO_05
+};
+
+&pinctrl {
+ compatible = "brcm,bcm2712d0-pinctrl";
+ reg = <0x7d504100 0x20>;
+};
+
+&pinctrl_aon {
+ compatible = "brcm,bcm2712d0-aon-pinctrl";
+ reg = <0x7d510700 0x1c>;
+};
+
+&vc4 {
+ compatible = "brcm,bcm2712d0-vc6";
+};
+
+&uart10 {
+ interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+};
+
+&spi10 {
+ dmas = <&dma40 3>, <&dma40 4>;
+};
+
+&hdmi0 {
+ dmas = <&dma40 (12|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
+};
+
+&hdmi1 {
+ dmas = <&dma40 (13|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
+};
--- a/arch/arm/boot/dts/broadcom/bcm2712-rpi.dtsi
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <dt-bindings/power/raspberrypi-power.h>
-
-&soc {
- firmware: firmware {
- compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
- #address-cells = <1>;
- #size-cells = <1>;
-
- mboxes = <&mailbox>;
- dma-ranges;
-
- firmware_clocks: clocks {
- compatible = "raspberrypi,firmware-clocks";
- #clock-cells = <1>;
- };
-
- reset: reset {
- compatible = "raspberrypi,firmware-reset";
- #reset-cells = <1>;
- };
-
- vcio: vcio {
- compatible = "raspberrypi,vcio";
- };
- };
-
- power: power {
- compatible = "raspberrypi,bcm2835-power";
- firmware = <&firmware>;
- #power-domain-cells = <1>;
- };
-
- fb: fb {
- compatible = "brcm,bcm2708-fb";
- firmware = <&firmware>;
- status = "okay";
- };
-
- rpi_rtc: rpi_rtc {
- compatible = "raspberrypi,rpi-rtc";
- firmware = <&firmware>;
- status = "okay";
- trickle-charge-microvolt = <0>;
- };
-
- nvmem {
- compatible = "simple-bus";
- #address-cells = <1>;
- #size-cells = <1>;
-
- nvmem_otp: nvmem_otp {
- compatible = "raspberrypi,rpi-otp";
- firmware = <&firmware>;
- reg = <0 192>;
- status = "okay";
- };
-
- nvmem_cust: nvmem_cust {
- compatible = "raspberrypi,rpi-otp";
- firmware = <&firmware>;
- reg = <1 8>;
- status = "okay";
- };
-
- nvmem_mac: nvmem_mac {
- compatible = "raspberrypi,rpi-otp";
- firmware = <&firmware>;
- reg = <2 6>;
- status = "okay";
- };
-
- nvmem_priv: nvmem_priv {
- compatible = "raspberrypi,rpi-otp";
- firmware = <&firmware>;
- reg = <3 16>;
- status = "okay";
- };
- };
-
- /* Define these notional regulators for use by overlays, etc. */
- vdd_3v3_reg: fixedregulator_3v3 {
- compatible = "regulator-fixed";
- regulator-always-on;
- regulator-max-microvolt = <3300000>;
- regulator-min-microvolt = <3300000>;
- regulator-name = "3v3";
- };
-
- vdd_5v0_reg: fixedregulator_5v0 {
- compatible = "regulator-fixed";
- regulator-always-on;
- regulator-max-microvolt = <5000000>;
- regulator-min-microvolt = <5000000>;
- regulator-name = "5v0";
- };
-};
-
-/ {
- __overrides__ {
- arm_freq;
- axiperf = <&axiperf>,"status";
-
- nvmem_cust_rw = <&nvmem_cust>,"rw?";
- nvmem_priv_rw = <&nvmem_priv>,"rw?";
- nvmem_mac_rw = <&nvmem_mac>,"rw?";
- strict_gpiod = <&chosen>, "bootargs=pinctrl_rp1.persist_gpio_outputs=n";
-
- cam0_reg = <&cam0_reg>,"status";
- cam0_reg_gpio = <&cam0_reg>,"gpio:4",
- <&cam0_reg>,"gpio:0=", <&gpio>;
- cam1_reg = <&cam1_reg>,"status";
- cam1_reg_gpio = <&cam1_reg>,"gpio:4",
- <&cam1_reg>,"gpio:0=", <&gpio>;
-
- };
-};
-
-pciex1: &pcie1 { };
-pciex4: &pcie2 { };
-
-&dma32 {
- /* The VPU firmware uses DMA channel 11 for VCHIQ */
- brcm,dma-channel-mask = <0x03f>;
-};
-
-&dma40 {
- /* The VPU firmware DMA channel 11 for VCHIQ */
- brcm,dma-channel-mask = <0x07c0>;
-};
-
-&hdmi0 {
- dmas = <&dma40 (10|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
-};
-
-&hdmi1 {
- dmas = <&dma40 (17|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
-};
-
-&spi10 {
- dmas = <&dma40 6>, <&dma40 7>;
- dma-names = "tx", "rx";
-};
-
-&usb {
- power-domains = <&power RPI_POWER_DOMAIN_USB>;
-};
-
-&rmem {
- /*
- * RPi5'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";
- };
- /*
- * RPi5 will copy the binary public key blob (if present) from the bootloader
- * into memory for use by the OS.
- */
- blpubkey: nvram@1 {
- compatible = "raspberrypi,bootloader-public-key", "nvmem-rmem";
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x0 0x0 0x0>;
- no-map;
- status = "disabled";
- };
-};
-
-&rp1_adc {
- status = "okay";
-};
-
-/* Add some gpiomem nodes to make the devices accessible to userspace.
- * /dev/gpiomem<n> should expose the registers for the interface with DT alias
- * gpio<n>.
- */
-
-&rp1 {
- gpiomem@d0000 {
- /* Export IO_BANKs, RIO_BANKs and PADS_BANKs to userspace */
- compatible = "raspberrypi,gpiomem";
- reg = <0xc0 0x400d0000 0x0 0x30000>;
- chardev-name = "gpiomem0";
- };
-};
-
-&soc {
- gpiomem@7d508500 {
- compatible = "raspberrypi,gpiomem";
- reg = <0x7d508500 0x40>;
- chardev-name = "gpiomem1";
- };
-
- gpiomem@7d517c00 {
- compatible = "raspberrypi,gpiomem";
- reg = <0x7d517c00 0x40>;
- chardev-name = "gpiomem2";
- };
-
- gpiomem@7d504100 {
- compatible = "raspberrypi,gpiomem";
- reg = <0x7d504100 0x20>;
- chardev-name = "gpiomem3";
- };
-
- gpiomem@7d510700 {
- compatible = "raspberrypi,gpiomem";
- reg = <0x7d510700 0x20>;
- chardev-name = "gpiomem4";
- };
-
- sound: sound {
- status = "disabled";
- };
-};
-
-i2c0: &rp1_i2c0 { };
-i2c1: &rp1_i2c1 { };
-i2c2: &rp1_i2c2 { };
-i2c3: &rp1_i2c3 { };
-i2c4: &rp1_i2c4 { };
-i2c5: &rp1_i2c5 { };
-i2c6: &rp1_i2c6 { };
-i2s: &rp1_i2s0 { };
-i2s_clk_producer: &rp1_i2s0 { };
-i2s_clk_consumer: &rp1_i2s1 { };
-pwm0: &rp1_pwm0 { };
-pwm1: &rp1_pwm1 { };
-pwm: &pwm0 { };
-spi0: &rp1_spi0 { };
-spi1: &rp1_spi1 { };
-spi2: &rp1_spi2 { };
-spi3: &rp1_spi3 { };
-spi4: &rp1_spi4 { };
-spi5: &rp1_spi5 { };
-
-uart0_pins: &rp1_uart0_14_15 {};
-uart0_ctsrts_pins: &rp1_uart0_ctsrts_16_17 {};
-uart0: &rp1_uart0 {
- pinctrl-0 = <&uart0_pins>;
-};
-
-uart1_pins: &rp1_uart1_0_1 {};
-uart1_ctsrts_pins: &rp1_uart1_ctsrts_2_3 {};
-uart1: &rp1_uart1 { };
-
-uart2_pins: &rp1_uart2_4_5 {};
-uart2_ctsrts_pins: &rp1_uart2_ctsrts_6_7 {};
-uart2: &rp1_uart2 { };
-
-uart3_pins: &rp1_uart3_8_9 {};
-uart3_ctsrts_pins: &rp1_uart3_ctsrts_10_11 {};
-uart3: &rp1_uart3 { };
-
-uart4_pins: &rp1_uart4_12_13 {};
-uart4_ctsrts_pins: &rp1_uart4_ctsrts_14_15 {};
-uart4: &rp1_uart4 { };
-
-i2c0_pins: &rp1_i2c0_0_1 {};
-i2c_vc: &i2c0 { // This is pins 27,28 on the header (not MIPI)
- pinctrl-0 = <&i2c0_pins>;
- pinctrl-names = "default";
- clock-frequency = <100000>;
-};
-
-i2c1_pins: &rp1_i2c1_2_3 {};
-i2c_arm: &i2c1 {
- pinctrl-names = "default";
- pinctrl-0 = <&i2c1_pins>;
- clock-frequency = <100000>;
-};
-
-i2c2_pins: &rp1_i2c2_4_5 {};
-&i2c2 {
- pinctrl-names = "default";
- pinctrl-0 = <&i2c2_pins>;
-};
-
-i2c3_pins: &rp1_i2c3_6_7 {};
-&i2c3 {
- pinctrl-names = "default";
- pinctrl-0 = <&i2c3_pins>;
-};
-
-&i2s_clk_producer {
- pinctrl-names = "default";
- pinctrl-0 = <&rp1_i2s0_18_21>;
-};
-
-&i2s_clk_consumer {
- pinctrl-names = "default";
- pinctrl-0 = <&rp1_i2s1_18_21>;
-};
-
-spi0_pins: &rp1_spi0_gpio9 {};
-spi0_cs_pins: &rp1_spi0_cs_gpio7 {};
-
-&spi0 {
- pinctrl-names = "default";
- pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
- cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
-
- spidev0: spidev@0 {
- compatible = "spidev";
- reg = <0>; /* CE0 */
- #address-cells = <1>;
- #size-cells = <0>;
- spi-max-frequency = <125000000>;
- };
-
- spidev1: spidev@1 {
- compatible = "spidev";
- reg = <1>; /* CE1 */
- #address-cells = <1>;
- #size-cells = <0>;
- spi-max-frequency = <125000000>;
- };
-};
-
-spi2_pins: &rp1_spi2_gpio1 {};
-&spi2 {
- pinctrl-names = "default";
- pinctrl-0 = <&spi2_pins>;
-};
-
-spi3_pins: &rp1_spi3_gpio5 {};
-&spi3 {
- pinctrl-names = "default";
- pinctrl-0 = <&spi3_pins>;
-};
-
-spi4_pins: &rp1_spi4_gpio9 {};
-&spi4 {
- pinctrl-names = "default";
- pinctrl-0 = <&spi4_pins>;
-};
-
-spi5_pins: &rp1_spi5_gpio13 {};
-&spi5 {
- pinctrl-names = "default";
- pinctrl-0 = <&spi5_pins>;
-};
--- a/arch/arm/boot/dts/broadcom/bcm2712.dtsi
+++ /dev/null
@@ -1,1302 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <dt-bindings/interrupt-controller/arm-gic.h>
-#include <dt-bindings/soc/bcm2835-pm.h>
-#include <dt-bindings/phy/phy.h>
-
-/ {
- compatible = "brcm,bcm2712", "brcm,bcm2711";
- model = "BCM2712";
-
- #address-cells = <2>;
- #size-cells = <1>;
-
- interrupt-parent = <&gicv2>;
-
- rmem: reserved-memory {
- #address-cells = <2>;
- #size-cells = <1>;
- ranges;
-
- atf@0 {
- reg = <0x0 0x0 0x80000>;
- no-map;
- };
-
- cma: linux,cma {
- compatible = "shared-dma-pool";
- size = <0x4000000>; /* 64MB */
- reusable;
- linux,cma-default;
-
- /*
- * arm64 reserves the CMA by default somewhere in
- * ZONE_DMA32, that's not good enough for the BCM2711
- * as some devices can only address the lower 1G of
- * memory (ZONE_DMA).
- */
- alloc-ranges = <0x0 0x00000000 0x40000000>;
- };
- };
-
- thermal-zones {
- cpu_thermal: cpu-thermal {
- polling-delay-passive = <2000>;
- polling-delay = <1000>;
- coefficients = <(-550) 450000>;
- thermal-sensors = <&thermal>;
-
- thermal_trips: trips {
- cpu_crit: cpu-crit {
- temperature = <110000>;
- hysteresis = <0>;
- type = "critical";
- };
- };
-
- cooling_maps: cooling-maps {
- };
- };
- };
-
- clk_27MHz: clk-27M {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <27000000>;
- clock-output-names = "27MHz-clock";
- };
-
- clk_108MHz: clk-108M {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <108000000>;
- clock-output-names = "108MHz-clock";
- };
-
- hvs: hvs@107c580000 {
- compatible = "brcm,bcm2712-hvs";
- reg = <0x10 0x7c580000 0x1a000>;
- interrupt-parent = <&disp_intr>;
- interrupts = <2>, <9>, <16>;
- interrupt-names = "ch0-eof", "ch1-eof", "ch2-eof";
- //iommus = <&iommu4>;
- status = "disabled";
- };
-
- soc: soc {
- compatible = "simple-bus";
- #address-cells = <1>;
- #size-cells = <1>;
-
- ranges = <0x7c000000 0x10 0x7c000000 0x04000000>;
- /* Emulate a contiguous 30-bit address range for DMA */
- dma-ranges = <0xc0000000 0x00 0x00000000 0x40000000>,
- <0x7c000000 0x10 0x7c000000 0x04000000>;
-
- system_timer: timer@7c003000 {
- compatible = "brcm,bcm2835-system-timer";
- reg = <0x7c003000 0x1000>;
- interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
- clock-frequency = <1000000>;
- };
-
- firmwarekms: firmwarekms@7d503000 {
- compatible = "raspberrypi,rpi-firmware-kms-2712";
- /* SUN_L2 interrupt reg */
- reg = <0x7d503000 0x18>;
- interrupt-parent = <&cpu_l2_irq>;
- interrupts = <19>;
- brcm,firmware = <&firmware>;
- status = "disabled";
- };
-
- axiperf: axiperf {
- compatible = "brcm,bcm2712-axiperf";
- reg = <0x7c012800 0x100>,
- <0x7e000000 0x100>;
- firmware = <&firmware>;
- status = "disabled";
- };
-
- mailbox: mailbox@7c013880 {
- compatible = "brcm,bcm2835-mbox";
- reg = <0x7c013880 0x40>;
- interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
- #mbox-cells = <0>;
- };
-
- pixelvalve0: pixelvalve@7c410000 {
- compatible = "brcm,bcm2712-pixelvalve0";
- reg = <0x7c410000 0x100>;
- interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
- status = "disabled";
- };
-
- pixelvalve1: pixelvalve@7c411000 {
- compatible = "brcm,bcm2712-pixelvalve1";
- reg = <0x7c411000 0x100>;
- interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
- status = "disabled";
- };
-
- mop: mop@7c500000 {
- compatible = "brcm,bcm2712-mop";
- reg = <0x7c500000 0x28>;
- interrupt-parent = <&disp_intr>;
- interrupts = <1>;
- status = "disabled";
- };
-
- moplet: moplet@7c501000 {
- compatible = "brcm,bcm2712-moplet";
- reg = <0x7c501000 0x20>;
- interrupt-parent = <&disp_intr>;
- interrupts = <0>;
- status = "disabled";
- };
-
- disp_intr: interrupt-controller@7c502000 {
- compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
- reg = <0x7c502000 0x30>;
- interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- status = "disabled";
- };
-
- dvp: clock@7c700000 {
- compatible = "brcm,brcm2711-dvp";
- reg = <0x7c700000 0x10>;
- clocks = <&clk_108MHz>;
- #clock-cells = <1>;
- #reset-cells = <1>;
- };
-
- /*
- * This node is the provider for the enable-method for
- * bringing up secondary cores.
- */
- local_intc: local_intc@7cd00000 {
- compatible = "brcm,bcm2836-l1-intc";
- reg = <0x7cd00000 0x100>;
- };
-
- uart0: serial@7d001000 {
- compatible = "arm,pl011", "arm,primecell";
- reg = <0x7d001000 0x200>;
- interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_uart>,
- <&clk_vpu>;
- clock-names = "uartclk", "apb_pclk";
- arm,primecell-periphid = <0x00241011>;
- status = "disabled";
- };
-
- uart2: serial@7d001400 {
- compatible = "arm,pl011", "arm,primecell";
- reg = <0x7d001400 0x200>;
- interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_uart>,
- <&clk_vpu>;
- clock-names = "uartclk", "apb_pclk";
- arm,primecell-periphid = <0x00241011>;
- status = "disabled";
- };
-
- uart5: serial@7d001a00 {
- compatible = "arm,pl011", "arm,primecell";
- reg = <0x7d001a00 0x200>;
- interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_uart>,
- <&clk_vpu>;
- clock-names = "uartclk", "apb_pclk";
- arm,primecell-periphid = <0x00241011>;
- status = "disabled";
- };
-
- sdhost: mmc@7d002000 {
- compatible = "brcm,bcm2835-sdhost";
- reg = <0x7d002000 0x100>;
- //interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- status = "disabled";
- };
-
- i2s: i2s@7d003000 {
- compatible = "brcm,bcm2835-i2s";
- reg = <0x7d003000 0x24>;
- //clocks = <&cprman BCM2835_CLOCK_PCM>;
- status = "disabled";
- };
-
- spi0: spi@7d004000 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7d004000 0x200>;
- interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- num-cs = <1>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- spi3: spi@7d004600 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7d004600 0x0200>;
- interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- spi4: spi@7d004800 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7d004800 0x0200>;
- interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- spi5: spi@7d004a00 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7d004a00 0x0200>;
- interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- spi6: spi@7d004c00 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7d004c00 0x0200>;
- interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c0: i2c@7d005000 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005000 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c3: i2c@7d005600 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005600 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c4: i2c@7d005800 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005800 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c5: i2c@7d005a00 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005a00 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c6: i2c@7d005c00 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005c00 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- i2c8: i2c@7d005e00 {
- compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
- reg = <0x7d005e00 0x20>;
- interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_vpu>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- pwm0: pwm@7d00c000 {
- compatible = "brcm,bcm2835-pwm";
- reg = <0x7d00c000 0x28>;
- assigned-clock-rates = <50000000>;
- #pwm-cells = <3>;
- status = "disabled";
- };
-
- pwm1: pwm@7d00c800 {
- compatible = "brcm,bcm2835-pwm";
- reg = <0x7d00c800 0x28>;
- assigned-clock-rates = <50000000>;
- #pwm-cells = <3>;
- status = "disabled";
- };
-
- pm: watchdog@7d200000 {
- compatible = "brcm,bcm2712-pm";
- reg = <0x7d200000 0x308>;
- reg-names = "pm";
- #power-domain-cells = <1>;
- #reset-cells = <1>;
- //clocks = <&cprman BCM2835_CLOCK_V3D>,
- // <&cprman BCM2835_CLOCK_PERI_IMAGE>,
- // <&cprman BCM2835_CLOCK_H264>,
- // <&cprman BCM2835_CLOCK_ISP>;
- clock-names = "v3d", "peri_image", "h264", "isp";
- system-power-controller;
- };
-
- cprman: cprman@7d202000 {
- compatible = "brcm,bcm2711-cprman";
- reg = <0x7d202000 0x2000>;
- #clock-cells = <1>;
-
- /* CPRMAN derives almost everything from the
- * platform's oscillator. However, the DSI
- * pixel clocks come from the DSI analog PHY.
- */
- clocks = <&clk_osc>;
- status = "disabled";
- };
-
- random: rng@7d208000 {
- compatible = "brcm,bcm2711-rng200";
- reg = <0x7d208000 0x28>;
- status = "okay";
- };
-
- cpu_l2_irq: intc@7d503000 {
- compatible = "brcm,l2-intc";
- reg = <0x7d503000 0x18>;
- interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- };
-
- pinctrl: pinctrl@7d504100 {
- compatible = "brcm,bcm2712-pinctrl";
- reg = <0x7d504100 0x30>;
-
- uarta_24_pins: uarta_24_pins {
- pin_rts {
- function = "uart0";
- pins = "gpio24";
- bias-disable;
- };
- pin_cts {
- function = "uart0";
- pins = "gpio25";
- bias-pull-up;
- };
- pin_txd {
- function = "uart0";
- pins = "gpio26";
- bias-disable;
- };
- pin_rxd {
- function = "uart0";
- pins = "gpio27";
- bias-pull-up;
- };
- };
-
- sdio2_30_pins: sdio2_30_pins {
- pin_clk {
- function = "sd2";
- pins = "gpio30";
- bias-disable;
- };
- pin_cmd {
- function = "sd2";
- pins = "gpio31";
- bias-pull-up;
- };
- pins_dat {
- function = "sd2";
- pins = "gpio32", "gpio33", "gpio34", "gpio35";
- bias-pull-up;
- };
- };
- };
-
- ddc0: i2c@7d508200 {
- compatible = "brcm,brcmstb-i2c";
- reg = <0x7d508200 0x58>;
- interrupt-parent = <&bsc_irq>;
- interrupts = <1>;
- clock-frequency = <97500>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- ddc1: i2c@7d508280 {
- compatible = "brcm,brcmstb-i2c";
- reg = <0x7d508280 0x58>;
- interrupt-parent = <&bsc_irq>;
- interrupts = <2>;
- clock-frequency = <97500>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- bscd: i2c@7d508300 {
- compatible = "brcm,brcmstb-i2c";
- reg = <0x7d508300 0x58>;
- interrupt-parent = <&bsc_irq>;
- interrupts = <0>;
- clock-frequency = <200000>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- bsc_irq: intc@7d508380 {
- compatible = "brcm,bcm7271-l2-intc";
- reg = <0x7d508380 0x10>;
- interrupts = <GIC_SPI 242 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- };
-
- main_irq: intc@7d508400 {
- compatible = "brcm,bcm7271-l2-intc";
- reg = <0x7d508400 0x10>;
- interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- };
-
- gio: gpio@7d508500 {
- compatible = "brcm,brcmstb-gpio";
- reg = <0x7d508500 0x40>;
- interrupt-parent = <&main_irq>;
- interrupts = <0>;
- gpio-controller;
- #gpio-cells = <2>;
- interrupt-controller;
- #interrupt-cells = <2>;
- brcm,gpio-bank-widths = <32 22>;
- brcm,gpio-direct;
- };
-
- uarta: serial@7d50c000 {
- compatible = "brcm,bcm7271-uart";
- reg = <0x7d50c000 0x20>;
- reg-names = "uart";
- reg-shift = <2>;
- reg-io-width = <4>;
- interrupts = <GIC_SPI 276 IRQ_TYPE_LEVEL_HIGH>;
- skip-init;
- status = "disabled";
- };
-
- uartb: serial@7d50d000 {
- compatible = "brcm,bcm7271-uart";
- reg = <0x7d50d000 0x20>;
- reg-names = "uart";
- reg-shift = <2>;
- reg-io-width = <4>;
- interrupts = <GIC_SPI 277 IRQ_TYPE_LEVEL_HIGH>;
- skip-init;
- status = "disabled";
- };
-
- aon_intr: interrupt-controller@7d510600 {
- compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
- reg = <0x7d510600 0x30>;
- interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- status = "disabled";
- };
-
- pinctrl_aon: pinctrl@7d510700 {
- compatible = "brcm,bcm2712-aon-pinctrl";
- reg = <0x7d510700 0x20>;
-
- i2c3_m4_agpio0_pins: i2c3_m4_agpio0_pins {
- function = "vc_i2c3";
- pins = "aon_gpio0", "aon_gpio1";
- bias-pull-up;
- };
-
- bsc_m1_agpio13_pins: bsc_m1_agpio13_pins {
- function = "bsc_m1";
- pins = "aon_gpio13", "aon_gpio14";
- bias-pull-up;
- };
-
- bsc_pmu_sgpio4_pins: bsc_pmu_sgpio4_pins {
- function = "avs_pmu_bsc";
- pins = "aon_sgpio4", "aon_sgpio5";
- };
-
- bsc_m2_sgpio4_pins: bsc_m2_sgpio4_pins {
- function = "bsc_m2";
- pins = "aon_sgpio4", "aon_sgpio5";
- };
-
- pwm_aon_agpio1_pins: pwm_aon_agpio1_pins {
- function = "aon_pwm";
- pins = "aon_gpio1", "aon_gpio2";
- };
-
- pwm_aon_agpio4_pins: pwm_aon_agpio4_pins {
- function = "vc_pwm0";
- pins = "aon_gpio4", "aon_gpio5";
- };
-
- pwm_aon_agpio7_pins: pwm_aon_agpio7_pins {
- function = "aon_pwm";
- pins = "aon_gpio7", "aon_gpio9";
- };
- };
-
- intc@7d517000 {
- compatible = "brcm,bcm7271-l2-intc";
- reg = <0x7d517000 0x10>;
- interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- status = "disabled";
- };
-
- bscc: i2c@7d517a00 {
- compatible = "brcm,brcmstb-i2c";
- reg = <0x7d517a00 0x58>;
- interrupt-parent = <&bsc_aon_irq>;
- interrupts = <0>;
- clock-frequency = <200000>;
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- pwm_aon: pwm@7d517a80 {
- compatible = "brcm,bcm7038-pwm";
- reg = <0x7d517a80 0x28>;
- #pwm-cells = <3>;
- clocks = <&clk_27MHz>;
- };
-
- main_aon_irq: intc@7d517ac0 {
- compatible = "brcm,bcm7271-l2-intc";
- reg = <0x7d517ac0 0x10>;
- interrupts = <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- };
-
- bsc_aon_irq: intc@7d517b00 {
- compatible = "brcm,bcm7271-l2-intc";
- reg = <0x7d517b00 0x10>;
- interrupts = <GIC_SPI 243 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-controller;
- #interrupt-cells = <1>;
- };
-
- gio_aon: gpio@7d517c00 {
- compatible = "brcm,brcmstb-gpio";
- reg = <0x7d517c00 0x40>;
- interrupt-parent = <&main_aon_irq>;
- interrupts = <0>;
- gpio-controller;
- #gpio-cells = <2>;
- interrupt-controller;
- #interrupt-cells = <2>;
- brcm,gpio-bank-widths = <17 6>;
- brcm,gpio-direct;
- };
-
- avs_monitor: avs-monitor@7d542000 {
- compatible = "brcm,bcm2711-avs-monitor",
- "syscon", "simple-mfd";
- reg = <0x7d542000 0xf00>;
- status = "okay";
-
- thermal: thermal {
- compatible = "brcm,bcm2711-thermal";
- #thermal-sensor-cells = <0>;
- };
- };
-
- bsc_pmu: i2c@7d544000 {
- compatible = "brcm,brcmstb-i2c";
- reg = <0x7d544000 0x58>;
- interrupt-parent = <&bsc_aon_irq>;
- interrupts = <1>;
- clock-frequency = <200000>;
- status = "disabled";
- };
-
- hdmi0: hdmi@7ef00700 {
- compatible = "brcm,bcm2712-hdmi0";
- reg = <0x7c701400 0x300>,
- <0x7c701000 0x200>,
- <0x7c701d00 0x300>,
- <0x7c702000 0x80>,
- <0x7c703800 0x200>,
- <0x7c704000 0x800>,
- <0x7c700100 0x80>,
- <0x7d510800 0x100>,
- <0x7c720000 0x100>;
- reg-names = "hdmi",
- "dvp",
- "phy",
- "rm",
- "packet",
- "metadata",
- "csc",
- "cec",
- "hd";
- resets = <&dvp 1>;
- interrupt-parent = <&aon_intr>;
- interrupts = <1>, <2>, <3>,
- <7>, <8>;
- interrupt-names = "cec-tx", "cec-rx", "cec-low",
- "hpd-connected", "hpd-removed";
- ddc = <&ddc0>;
- dmas = <&dma32 10>;
- dma-names = "audio-rx";
- status = "disabled";
- };
-
- hdmi1: hdmi@7ef05700 {
- compatible = "brcm,bcm2712-hdmi1";
- reg = <0x7c706400 0x300>,
- <0x7c706000 0x200>,
- <0x7c706d00 0x300>,
- <0x7c707000 0x80>,
- <0x7c708800 0x200>,
- <0x7c709000 0x800>,
- <0x7c700180 0x80>,
- <0x7d511000 0x100>,
- <0x7c720000 0x100>;
- reg-names = "hdmi",
- "dvp",
- "phy",
- "rm",
- "packet",
- "metadata",
- "csc",
- "cec",
- "hd";
- ddc = <&ddc1>;
- resets = <&dvp 2>;
- interrupt-parent = <&aon_intr>;
- interrupts = <11>, <12>, <13>,
- <14>, <15>;
- interrupt-names = "cec-tx", "cec-rx", "cec-low",
- "hpd-connected", "hpd-removed";
- dmas = <&dma32 17>;
- dma-names = "audio-rx";
- status = "disabled";
- };
- };
-
- arm-pmu {
- compatible = "arm,cortex-a76-pmu";
- interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
- };
-
- timer {
- compatible = "arm,armv8-timer";
- interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_LOW)>,
- <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_LOW)>,
- <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_LOW)>,
- <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_LOW)>;
- /* This only applies to the ARMv7 stub */
- arm,cpu-registers-not-fw-configured;
- };
-
- cpus: cpus {
- #address-cells = <1>;
- #size-cells = <0>;
- enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
-
- /* Source for d/i cache-line-size, cache-sets, cache-size
- * https://developer.arm.com/documentation/100798/0401
- * /L1-memory-system/About-the-L1-memory-system?lang=en
- */
- cpu0: cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a76";
- reg = <0x000>;
- enable-method = "psci";
- d-cache-size = <0x10000>;
- d-cache-line-size = <64>;
- d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- i-cache-size = <0x10000>;
- i-cache-line-size = <64>;
- i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- next-level-cache = <&l2_cache_l0>;
- };
-
- cpu1: cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a76";
- reg = <0x100>;
- enable-method = "psci";
- d-cache-size = <0x10000>;
- d-cache-line-size = <64>;
- d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- i-cache-size = <0x10000>;
- i-cache-line-size = <64>;
- i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- next-level-cache = <&l2_cache_l1>;
- };
-
- cpu2: cpu@2 {
- device_type = "cpu";
- compatible = "arm,cortex-a76";
- reg = <0x200>;
- enable-method = "psci";
- d-cache-size = <0x10000>;
- d-cache-line-size = <64>;
- d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- i-cache-size = <0x10000>;
- i-cache-line-size = <64>;
- i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- next-level-cache = <&l2_cache_l2>;
- };
-
- cpu3: cpu@3 {
- device_type = "cpu";
- compatible = "arm,cortex-a76";
- reg = <0x300>;
- enable-method = "psci";
- d-cache-size = <0x10000>;
- d-cache-line-size = <64>;
- d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- i-cache-size = <0x10000>;
- i-cache-line-size = <64>;
- i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
- next-level-cache = <&l2_cache_l3>;
- };
-
- /* Source for cache-line-size and cache-sets:
- * https://developer.arm.com/documentation/100798/0401
- * /L2-memory-system/About-the-L2-memory-system?lang=en
- * and for cache-size:
- * https://www.raspberrypi.com/documentation/computers
- * /processors.html#bcm2712
- */
- l2_cache_l0: l2-cache-l0 {
- compatible = "cache";
- cache-size = <0x80000>;
- cache-line-size = <128>;
- cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
- cache-level = <2>;
- cache-unified;
- next-level-cache = <&l3_cache>;
- };
-
- l2_cache_l1: l2-cache-l1 {
- compatible = "cache";
- cache-size = <0x80000>;
- cache-line-size = <128>;
- cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
- cache-level = <2>;
- cache-unified;
- next-level-cache = <&l3_cache>;
- };
-
- l2_cache_l2: l2-cache-l2 {
- compatible = "cache";
- cache-size = <0x80000>;
- cache-line-size = <128>;
- cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
- cache-level = <2>;
- cache-unified;
- next-level-cache = <&l3_cache>;
- };
-
- l2_cache_l3: l2-cache-l3 {
- compatible = "cache";
- cache-size = <0x80000>;
- cache-line-size = <128>;
- cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
- cache-level = <2>;
- cache-unified;
- next-level-cache = <&l3_cache>;
- };
-
- /* Source for cache-line-size and cache-sets:
- * https://developer.arm.com/documentation/100453/0401/L3-cache?lang=en
- * Source for cache-size:
- * https://www.raspberrypi.com/documentation/computers/processors.html#bcm2712
- */
- l3_cache: l3-cache {
- compatible = "cache";
- cache-size = <0x200000>;
- cache-line-size = <64>;
- cache-sets = <2048>; // 2MiB(size)/64(line-size)=32768ways/16-way set
- cache-level = <3>;
- };
- };
-
- psci {
- method = "smc";
- compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
- cpu_on = <0xc4000003>;
- cpu_suspend = <0xc4000001>;
- cpu_off = <0x84000002>;
- };
-
- axi: axi {
- compatible = "simple-bus";
- #address-cells = <2>;
- #size-cells = <2>;
-
- ranges = <0x00 0x00000000 0x00 0x00000000 0x10 0x00000000>,
- <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>,
- <0x14 0x00000000 0x14 0x00000000 0x04 0x00000000>,
- <0x18 0x00000000 0x18 0x00000000 0x04 0x00000000>,
- <0x1c 0x00000000 0x1c 0x00000000 0x04 0x00000000>;
-
- dma-ranges = <0x00 0x00000000 0x00 0x00000000 0x10 0x00000000>,
- <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>,
- <0x14 0x00000000 0x14 0x00000000 0x04 0x00000000>,
- <0x18 0x00000000 0x18 0x00000000 0x04 0x00000000>,
- <0x1c 0x00000000 0x1c 0x00000000 0x04 0x00000000>;
-
- vc4: gpu {
- compatible = "brcm,bcm2712-vc6";
- };
-
- iommu2: iommu@5100 {
- /* IOMMU2 for PISP-BE, HEVC; and (unused) H264 accelerators */
- compatible = "brcm,bcm2712-iommu";
- reg = <0x10 0x5100 0x0 0x80>;
- cache = <&iommuc>;
- #iommu-cells = <0>;
- };
-
- iommu4: iommu@5200 {
- /* IOMMU4 for HVS, MPL/TXP; and (unused) Unicam, PISP-FE, MiniBVN */
- compatible = "brcm,bcm2712-iommu";
- reg = <0x10 0x5200 0x0 0x80>;
- cache = <&iommuc>;
- #iommu-cells = <0>;
- #interconnect-cells = <0>;
- };
-
- iommu5: iommu@5280 {
- /* IOMMU5 for PCIe2 (RP1); and (unused) BSTM */
- compatible = "brcm,bcm2712-iommu";
- reg = <0x10 0x5280 0x0 0x80>;
- cache = <&iommuc>;
- #iommu-cells = <0>;
- dma-iova-offset = <0x10 0x00000000>; // HACK for RP1 masters over PCIe
- };
-
- iommuc: iommuc@5b00 {
- compatible = "brcm,bcm2712-iommuc";
- reg = <0x10 0x5b00 0x0 0x80>;
- };
-
- dma32: dma@10000 {
- compatible = "brcm,bcm2712-dma";
- reg = <0x10 0x00010000 0 0x600>;
- interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "dma0",
- "dma1",
- "dma2",
- "dma3",
- "dma4",
- "dma5";
- #dma-cells = <1>;
- brcm,dma-channel-mask = <0x0035>;
- };
-
- dma40: dma@10600 {
- compatible = "brcm,bcm2712-dma";
- reg = <0x10 0x00010600 0 0x600>;
- interrupts =
- <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>, /* dma4 6 */
- <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>, /* dma4 7 */
- <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>, /* dma4 8 */
- <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>, /* dma4 9 */
- <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>, /* dma4 10 */
- <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>; /* dma4 11 */
- interrupt-names = "dma6",
- "dma7",
- "dma8",
- "dma9",
- "dma10",
- "dma11";
- #dma-cells = <1>;
- brcm,dma-channel-mask = <0x0fc0>;
- };
-
- // Single-lane Gen3 PCIe
- // Outbound window at 0x14_000000-0x17_ffffff
- pcie0: pcie@100000 {
- compatible = "brcm,bcm2712-pcie";
- reg = <0x10 0x00100000 0x0 0x9310>;
- device_type = "pci";
- max-link-speed = <2>;
- #address-cells = <3>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- /*
- * Unused interrupts:
- * 208: AER
- * 215: NMI
- * 216: PME
- */
- interrupt-parent = <&gicv2>;
- interrupts = <GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "pcie", "msi";
- interrupt-map-mask = <0x0 0x0 0x0 0x7>;
- interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 209
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 2 &gicv2 GIC_SPI 210
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 3 &gicv2 GIC_SPI 211
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 4 &gicv2 GIC_SPI 212
- IRQ_TYPE_LEVEL_HIGH>;
- resets = <&bcm_reset 5>, <&bcm_reset 42>, <&pcie_rescal>;
- reset-names = "swinit", "bridge", "rescal";
- msi-controller;
- msi-parent = <&pcie0>;
-
- ranges = <0x02000000 0x00 0x00000000
- 0x17 0x00000000
- 0x0 0xfffffffc>,
- <0x43000000 0x04 0x00000000
- 0x14 0x00000000
- 0x3 0x00000000>;
-
- dma-ranges = <0x43000000 0x10 0x00000000
- 0x00 0x00000000
- 0x10 0x00000000>;
-
- status = "disabled";
- };
-
- // Single-lane Gen3 PCIe
- // Outbound window at 0x18_000000-0x1b_ffffff
- pcie1: pcie@110000 {
- compatible = "brcm,bcm2712-pcie";
- reg = <0x10 0x00110000 0x0 0x9310>;
- device_type = "pci";
- max-link-speed = <2>;
- #address-cells = <3>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- /*
- * Unused interrupts:
- * 218: AER
- * 225: NMI
- * 226: PME
- */
- interrupt-parent = <&gicv2>;
- interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "pcie", "msi";
- interrupt-map-mask = <0x0 0x0 0x0 0x7>;
- interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 219
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 2 &gicv2 GIC_SPI 220
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 3 &gicv2 GIC_SPI 221
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 4 &gicv2 GIC_SPI 222
- IRQ_TYPE_LEVEL_HIGH>;
- resets = <&bcm_reset 7>, <&bcm_reset 43>, <&pcie_rescal>;
- reset-names = "swinit", "bridge", "rescal";
- msi-controller;
- msi-parent = <&mip1>;
-
- ranges = <0x02000000 0x00 0x00000000
- 0x1b 0x00000000
- 0x00 0xfffffffc>,
- <0x43000000 0x04 0x00000000
- 0x18 0x00000000
- 0x03 0x00000000>;
-
- dma-ranges = <0x03000000 0x10 0x00000000
- 0x00 0x00000000
- 0x10 0x00000000>;
-
- status = "disabled";
- };
-
- pcie_rescal: reset-controller@119500 {
- compatible = "brcm,bcm7216-pcie-sata-rescal";
- reg = <0x10 0x00119500 0x0 0x10>;
- #reset-cells = <0>;
- };
-
- // Quad-lane Gen3 PCIe
- // Outbound window at 0x1c_000000-0x1f_ffffff
- pcie2: pcie@120000 {
- compatible = "brcm,bcm2712-pcie";
- reg = <0x10 0x00120000 0x0 0x9310>;
- device_type = "pci";
- max-link-speed = <2>;
- #address-cells = <3>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- /*
- * Unused interrupts:
- * 228: AER
- * 235: NMI
- * 236: PME
- */
- interrupt-parent = <&gicv2>;
- interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "pcie", "msi";
- interrupt-map-mask = <0x0 0x0 0x0 0x7>;
- interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 229
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 2 &gicv2 GIC_SPI 230
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 3 &gicv2 GIC_SPI 231
- IRQ_TYPE_LEVEL_HIGH>,
- <0 0 0 4 &gicv2 GIC_SPI 232
- IRQ_TYPE_LEVEL_HIGH>;
- resets = <&bcm_reset 32>, <&bcm_reset 44>, <&pcie_rescal>;
- reset-names = "swinit", "bridge", "rescal";
- msi-controller;
- msi-parent = <&mip0>;
-
- // ~4GB, 32-bit, not-prefetchable at PCIe 00_00000000
- ranges = <0x02000000 0x00 0x00000000
- 0x1f 0x00000000
- 0x0 0xfffffffc>,
- // 12GB, 64-bit, prefetchable at PCIe 04_00000000
- <0x43000000 0x04 0x00000000
- 0x1c 0x00000000
- 0x03 0x00000000>;
-
- // 64GB system RAM space at PCIe 10_00000000
- dma-ranges = <0x02000000 0x00 0x00000000
- 0x1f 0x00000000
- 0x00 0x00400000>,
- <0x43000000 0x10 0x00000000
- 0x00 0x00000000
- 0x10 0x00000000>;
-
- status = "disabled";
- };
-
- mip0: msi-controller@130000 {
- compatible = "brcm,bcm2712-mip-intc";
- reg = <0x10 0x00130000 0x0 0xc0>;
- msi-controller;
- interrupt-controller;
- #interrupt-cells = <2>;
- brcm,msi-base-spi = <128>;
- brcm,msi-num-spis = <64>;
- brcm,msi-offset = <0>;
- brcm,msi-pci-addr = <0xff 0xfffff000>;
- };
-
- mip1: msi-controller@131000 {
- compatible = "brcm,bcm2712-mip-intc";
- reg = <0x10 0x00131000 0x0 0xc0>;
- msi-controller;
- interrupt-controller;
- #interrupt-cells = <2>;
- brcm,msi-base-spi = <247>;
- /* Actually 20 total, but the others are
- * both sparse and non-consecutive */
- brcm,msi-num-spis = <8>;
- brcm,msi-offset = <8>;
- brcm,msi-pci-addr = <0xff 0xffffe000>;
- };
-
- syscon_piarbctl: syscon@400018 {
- compatible = "brcm,syscon-piarbctl", "syscon", "simple-mfd";
- reg = <0x10 0x00400018 0x0 0x18>;
- };
-
- usb: usb@480000 {
- compatible = "brcm,bcm2835-usb";
- reg = <0x10 0x00480000 0x0 0x10000>;
- interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&clk_usb>;
- clock-names = "otg";
- phys = <&usbphy>;
- phy-names = "usb2-phy";
- status = "disabled";
- };
-
- rpivid: codec@800000 {
- compatible = "raspberrypi,rpivid-vid-decoder";
- reg = <0x10 0x00800000 0x0 0x10000>, /* HEVC */
- <0x10 0x00840000 0x0 0x1000>; /* INTC */
- reg-names = "hevc",
- "intc";
-
- interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&firmware_clocks 11>;
- clock-names = "hevc";
- iommus = <&iommu2>;
- status = "disabled";
- };
-
- sdio1: mmc@fff000 {
- compatible = "brcm,bcm2712-sdhci";
- reg = <0x10 0x00fff000 0x0 0x260>,
- <0x10 0x00fff400 0x0 0x200>,
- <0x10 0x015040b0 0x0 0x4>, // Bus isolation control
- <0x10 0x015200f0 0x0 0x24>; // LCPLL control misc0-8
- reg-names = "host", "cfg", "busisol", "lcpll";
- interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_emmc2>;
- sdhci-caps-mask = <0x0000C000 0x0>;
- sdhci-caps = <0x0 0x0>;
- mmc-ddr-3_3v;
- };
-
- sdio2: mmc@1100000 {
- compatible = "brcm,bcm2712-sdhci";
- reg = <0x10 0x01100000 0x0 0x260>,
- <0x10 0x01100400 0x0 0x200>;
- reg-names = "host", "cfg";
- interrupts = <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&clk_emmc2>;
- sdhci-caps-mask = <0x0000C000 0x0>;
- sdhci-caps = <0x0 0x0>;
- supports-cqe;
- mmc-ddr-3_3v;
- status = "disabled";
- };
-
- bcm_reset: reset-controller@1504318 {
- compatible = "brcm,brcmstb-reset";
- reg = <0x10 0x01504318 0x0 0x30>;
- #reset-cells = <1>;
- };
-
- v3d: v3d@2000000 {
- compatible = "brcm,2712-v3d";
- reg = <0x10 0x02000000 0x0 0x4000>,
- <0x10 0x02008000 0x0 0x6000>;
- reg-names = "hub", "core0";
-
- power-domains = <&pm BCM2835_POWER_DOMAIN_GRAFX_V3D>;
- resets = <&pm BCM2835_RESET_V3D>;
- clocks = <&firmware_clocks 5>;
- clocks-names = "v3d";
- interrupts = <GIC_SPI 250 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 249 IRQ_TYPE_LEVEL_HIGH>;
- status = "disabled";
- };
-
- gicv2: interrupt-controller@7fff9000 {
- interrupt-controller;
- #interrupt-cells = <3>;
- compatible = "arm,gic-400";
- reg = <0x10 0x7fff9000 0x0 0x1000>,
- <0x10 0x7fffa000 0x0 0x2000>,
- <0x10 0x7fffc000 0x0 0x2000>,
- <0x10 0x7fffe000 0x0 0x2000>;
- interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_HIGH)>;
- };
-
- pisp_be: pisp_be@880000 {
- compatible = "raspberrypi,pispbe";
- reg = <0x10 0x00880000 0x0 0x4000>;
- interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&firmware_clocks 7>;
- clocks-names = "isp_be";
- status = "okay";
- iommus = <&iommu2>;
- };
- };
-
- clocks {
- /* The oscillator is the root of the clock tree. */
- clk_osc: clk-osc {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "osc";
- clock-frequency = <54000000>;
- };
-
- clk_usb: clk-usb {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "otg";
- clock-frequency = <480000000>;
- };
-
- clk_vpu: clk_vpu {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <750000000>;
- clock-output-names = "vpu-clock";
- };
-
- clk_uart: clk_uart {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <9216000>;
- clock-output-names = "uart-clock";
- };
-
- clk_emmc2: clk_emmc2 {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <200000000>;
- clock-output-names = "emmc2-clock";
- };
- };
-
- usbphy: phy {
- compatible = "usb-nop-xceiv";
- #phy-cells = <0>;
- };
-};
--- a/arch/arm/boot/dts/broadcom/rp1.dtsi
+++ /dev/null
@@ -1,1287 +0,0 @@
-#include <dt-bindings/clock/rp1.h>
-#include <dt-bindings/interrupt-controller/irq.h>
-#include <dt-bindings/mfd/rp1.h>
-
-&rp1_target {
- rp1: rp1 {
- compatible = "simple-bus";
- #address-cells = <2>;
- #size-cells = <2>;
- #interrupt-cells = <2>;
- interrupt-controller;
- interrupt-parent = <&rp1>;
-
- // ranges and dma-ranges must be provided by the includer
-
- rp1_clocks: clocks@18000 {
- compatible = "raspberrypi,rp1-clocks";
- #clock-cells = <1>;
- reg = <0xc0 0x40018000 0x0 0x10038>;
- clocks = <&clk_xosc>;
-
- assigned-clocks = <&rp1_clocks RP1_PLL_SYS_CORE>,
- <&rp1_clocks RP1_PLL_AUDIO_CORE>,
- // RP1_PLL_VIDEO_CORE and dividers are now managed by VEC,DPI drivers
- <&rp1_clocks RP1_PLL_SYS>,
- <&rp1_clocks RP1_PLL_SYS_SEC>,
- <&rp1_clocks RP1_PLL_AUDIO>,
- <&rp1_clocks RP1_PLL_AUDIO_SEC>,
- <&rp1_clocks RP1_CLK_SYS>,
- <&rp1_clocks RP1_PLL_SYS_PRI_PH>,
- // RP1_CLK_SLOW_SYS is used for the frequency counter (FC0)
- <&rp1_clocks RP1_CLK_SLOW_SYS>,
- <&rp1_clocks RP1_CLK_SDIO_TIMER>,
- <&rp1_clocks RP1_CLK_SDIO_ALT_SRC>,
- <&rp1_clocks RP1_CLK_ETH_TSU>;
-
- assigned-clock-rates = <1000000000>, // RP1_PLL_SYS_CORE
- <1536000000>, // RP1_PLL_AUDIO_CORE
- <200000000>, // RP1_PLL_SYS
- <125000000>, // RP1_PLL_SYS_SEC
- <61440000>, // RP1_PLL_AUDIO
- <192000000>, // RP1_PLL_AUDIO_SEC
- <200000000>, // RP1_CLK_SYS
- <100000000>, // RP1_PLL_SYS_PRI_PH
- // Must match the XOSC frequency
- <50000000>, // RP1_CLK_SLOW_SYS
- <1000000>, // RP1_CLK_SDIO_TIMER
- <200000000>, // RP1_CLK_SDIO_ALT_SRC
- <50000000>; // RP1_CLK_ETH_TSU
- };
-
- rp1_uart0: serial@30000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x40030000 0x0 0x100>;
- interrupts = <RP1_INT_UART0 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- dmas = <&rp1_dma RP1_DMA_UART0_TX>,
- <&rp1_dma RP1_DMA_UART0_RX>;
- dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_uart1: serial@34000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x40034000 0x0 0x100>;
- interrupts = <RP1_INT_UART1 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- // dmas = <&rp1_dma RP1_DMA_UART1_TX>,
- // <&rp1_dma RP1_DMA_UART1_RX>;
- // dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_uart2: serial@38000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x40038000 0x0 0x100>;
- interrupts = <RP1_INT_UART2 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- // dmas = <&rp1_dma RP1_DMA_UART2_TX>,
- // <&rp1_dma RP1_DMA_UART2_RX>;
- // dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_uart3: serial@3c000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x4003c000 0x0 0x100>;
- interrupts = <RP1_INT_UART3 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- // dmas = <&rp1_dma RP1_DMA_UART3_TX>,
- // <&rp1_dma RP1_DMA_UART3_RX>;
- // dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_uart4: serial@40000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x40040000 0x0 0x100>;
- interrupts = <RP1_INT_UART4 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- // dmas = <&rp1_dma RP1_DMA_UART4_TX>,
- // <&rp1_dma RP1_DMA_UART4_RX>;
- // dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_uart5: serial@44000 {
- compatible = "arm,pl011-axi";
- reg = <0xc0 0x40044000 0x0 0x100>;
- interrupts = <RP1_INT_UART5 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
- clock-names = "uartclk", "apb_pclk";
- // dmas = <&rp1_dma RP1_DMA_UART5_TX>,
- // <&rp1_dma RP1_DMA_UART5_RX>;
- // dma-names = "tx", "rx";
- pinctrl-names = "default";
- arm,primecell-periphid = <0x00541011>;
- uart-has-rtscts;
- cts-event-workaround;
- skip-init;
- status = "disabled";
- };
-
- rp1_spi8: spi@4c000 {
- reg = <0xc0 0x4004c000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI8 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI8_TX>,
- <&rp1_dma RP1_DMA_SPI8_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_spi0: spi@50000 {
- reg = <0xc0 0x40050000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI0 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI0_TX>,
- <&rp1_dma RP1_DMA_SPI0_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_spi1: spi@54000 {
- reg = <0xc0 0x40054000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI1 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI1_TX>,
- <&rp1_dma RP1_DMA_SPI1_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_spi2: spi@58000 {
- reg = <0xc0 0x40058000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI2 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI2_TX>,
- <&rp1_dma RP1_DMA_SPI2_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_spi3: spi@5c000 {
- reg = <0xc0 0x4005c000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI3 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI3_TX>,
- <&rp1_dma RP1_DMA_SPI3_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- // SPI4 is a target/slave interface
- rp1_spi4: spi@60000 {
- reg = <0xc0 0x40060000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI4 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <0>;
- #size-cells = <0>;
- num-cs = <1>;
- spi-slave;
- dmas = <&rp1_dma RP1_DMA_SPI4_TX>,
- <&rp1_dma RP1_DMA_SPI4_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
-
- slave {
- compatible = "spidev";
- spi-max-frequency = <1000000>;
- };
- };
-
- rp1_spi5: spi@64000 {
- reg = <0xc0 0x40064000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI5 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI5_TX>,
- <&rp1_dma RP1_DMA_SPI5_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_spi6: spi@68000 {
- reg = <0xc0 0x40068000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI6 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <1>;
- #size-cells = <0>;
- num-cs = <2>;
- dmas = <&rp1_dma RP1_DMA_SPI6_TX>,
- <&rp1_dma RP1_DMA_SPI6_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- // SPI7 is a target/slave interface
- rp1_spi7: spi@6c000 {
- reg = <0xc0 0x4006c000 0x0 0x130>;
- compatible = "snps,dw-apb-ssi";
- interrupts = <RP1_INT_SPI7 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- clock-names = "ssi_clk";
- #address-cells = <0>;
- #size-cells = <0>;
- num-cs = <1>;
- spi-slave;
- dmas = <&rp1_dma RP1_DMA_SPI7_TX>,
- <&rp1_dma RP1_DMA_SPI7_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
-
- slave {
- compatible = "spidev";
- spi-max-frequency = <1000000>;
- };
- };
-
- rp1_i2c0: i2c@70000 {
- reg = <0xc0 0x40070000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C0 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c1: i2c@74000 {
- reg = <0xc0 0x40074000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C1 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c2: i2c@78000 {
- reg = <0xc0 0x40078000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C2 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c3: i2c@7c000 {
- reg = <0xc0 0x4007c000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C3 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c4: i2c@80000 {
- reg = <0xc0 0x40080000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C4 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c5: i2c@84000 {
- reg = <0xc0 0x40084000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C5 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_i2c6: i2c@88000 {
- reg = <0xc0 0x40088000 0x0 0x1000>;
- compatible = "snps,designware-i2c";
- interrupts = <RP1_INT_I2C6 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS>;
- i2c-scl-rising-time-ns = <65>;
- i2c-scl-falling-time-ns = <100>;
- status = "disabled";
- };
-
- rp1_pwm0: pwm@98000 {
- compatible = "raspberrypi,rp1-pwm";
- reg = <0xc0 0x40098000 0x0 0x100>;
- #pwm-cells = <3>;
- clocks = <&rp1_clocks RP1_CLK_PWM0>;
- assigned-clocks = <&rp1_clocks RP1_CLK_PWM0>;
- assigned-clock-rates = <50000000>;
- status = "disabled";
- };
-
- rp1_pwm1: pwm@9c000 {
- compatible = "raspberrypi,rp1-pwm";
- reg = <0xc0 0x4009c000 0x0 0x100>;
- #pwm-cells = <3>;
- clocks = <&rp1_clocks RP1_CLK_PWM1>;
- assigned-clocks = <&rp1_clocks RP1_CLK_PWM1>;
- assigned-clock-rates = <50000000>;
- status = "disabled";
- };
-
- rp1_i2s0: i2s@a0000 {
- reg = <0xc0 0x400a0000 0x0 0x1000>;
- compatible = "snps,designware-i2s";
- // Providing an interrupt disables DMA
- // interrupts = <RP1_INT_I2S0 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_I2S>;
- clock-names = "i2sclk";
- #sound-dai-cells = <0>;
- dmas = <&rp1_dma RP1_DMA_I2S0_TX>,<&rp1_dma RP1_DMA_I2S0_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_i2s1: i2s@a4000 {
- reg = <0xc0 0x400a4000 0x0 0x1000>;
- compatible = "snps,designware-i2s";
- // Providing an interrupt disables DMA
- // interrupts = <RP1_INT_I2S1 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_I2S>;
- clock-names = "i2sclk";
- #sound-dai-cells = <0>;
- dmas = <&rp1_dma RP1_DMA_I2S1_TX>,<&rp1_dma RP1_DMA_I2S1_RX>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
-
- rp1_i2s2: i2s@a8000 {
- reg = <0xc0 0x400a8000 0x0 0x1000>;
- compatible = "snps,designware-i2s";
- // Providing an interrupt disables DMA
- // interrupts = <RP1_INT_I2S2 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_I2S>;
- status = "disabled";
- };
-
- rp1_sdio_clk0: sdio_clk0@b0004 {
- compatible = "raspberrypi,rp1-sdio-clk";
- reg = <0xc0 0x400b0004 0x0 0x1c>;
- clocks = <&sdio_src &sdhci_core>;
- clock-names = "src", "base";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- rp1_sdio_clk1: sdio_clk1@b4004 {
- compatible = "raspberrypi,rp1-sdio-clk";
- reg = <0xc0 0x400b4004 0x0 0x1c>;
- clocks = <&sdio_src &sdhci_core>;
- clock-names = "src", "base";
- #clock-cells = <0>;
- status = "disabled";
- };
-
- rp1_adc: adc@c8000 {
- compatible = "raspberrypi,rp1-adc";
- reg = <0xc0 0x400c8000 0x0 0x4000>;
- clocks = <&rp1_clocks RP1_CLK_ADC>;
- clock-names = "adcclk";
- #clock-cells = <0>;
- vref-supply = <&rp1_vdd_3v3>;
- status = "disabled";
- };
-
- rp1_gpio: gpio@d0000 {
- reg = <0xc0 0x400d0000 0x0 0xc000>,
- <0xc0 0x400e0000 0x0 0xc000>,
- <0xc0 0x400f0000 0x0 0xc000>;
- compatible = "raspberrypi,rp1-gpio";
- interrupts = <RP1_INT_IO_BANK0 IRQ_TYPE_LEVEL_HIGH>,
- <RP1_INT_IO_BANK1 IRQ_TYPE_LEVEL_HIGH>,
- <RP1_INT_IO_BANK2 IRQ_TYPE_LEVEL_HIGH>;
- gpio-controller;
- #gpio-cells = <2>;
- interrupt-controller;
- #interrupt-cells = <2>;
- gpio-ranges = <&rp1_gpio 0 0 54>;
-
- rp1_uart0_14_15: rp1_uart0_14_15 {
- pin_txd {
- function = "uart0";
- pins = "gpio14";
- bias-disable;
- };
- pin_rxd {
- function = "uart0";
- pins = "gpio15";
- bias-pull-up;
- };
- };
- rp1_uart0_ctsrts_16_17: rp1_uart0_ctsrts_16_17 {
- pin_cts {
- function = "uart0";
- pins = "gpio16";
- bias-pull-up;
- };
- pin_rts {
- function = "uart0";
- pins = "gpio17";
- bias-disable;
- };
- };
- rp1_uart1_0_1: rp1_uart1_0_1 {
- pin_txd {
- function = "uart1";
- pins = "gpio0";
- bias-disable;
- };
- pin_rxd {
- function = "uart1";
- pins = "gpio1";
- bias-pull-up;
- };
- };
- rp1_uart1_ctsrts_2_3: rp1_uart1_ctsrts_2_3 {
- pin_cts {
- function = "uart1";
- pins = "gpio2";
- bias-pull-up;
- };
- pin_rts {
- function = "uart1";
- pins = "gpio3";
- bias-disable;
- };
- };
- rp1_uart2_4_5: rp1_uart2_4_5 {
- pin_txd {
- function = "uart2";
- pins = "gpio4";
- bias-disable;
- };
- pin_rxd {
- function = "uart2";
- pins = "gpio5";
- bias-pull-up;
- };
- };
- rp1_uart2_ctsrts_6_7: rp1_uart2_ctsrts_6_7 {
- pin_cts {
- function = "uart2";
- pins = "gpio6";
- bias-pull-up;
- };
- pin_rts {
- function = "uart2";
- pins = "gpio7";
- bias-disable;
- };
- };
- rp1_uart3_8_9: rp1_uart3_8_9 {
- pin_txd {
- function = "uart3";
- pins = "gpio8";
- bias-disable;
- };
- pin_rxd {
- function = "uart3";
- pins = "gpio9";
- bias-pull-up;
- };
- };
- rp1_uart3_ctsrts_10_11: rp1_uart3_ctsrts_10_11 {
- pin_cts {
- function = "uart3";
- pins = "gpio10";
- bias-pull-up;
- };
- pin_rts {
- function = "uart3";
- pins = "gpio11";
- bias-disable;
- };
- };
- rp1_uart4_12_13: rp1_uart4_12_13 {
- pin_txd {
- function = "uart4";
- pins = "gpio12";
- bias-disable;
- };
- pin_rxd {
- function = "uart4";
- pins = "gpio13";
- bias-pull-up;
- };
- };
- rp1_uart4_ctsrts_14_15: rp1_uart4_ctsrts_14_15 {
- pin_cts {
- function = "uart4";
- pins = "gpio14";
- bias-pull-up;
- };
- pin_rts {
- function = "uart4";
- pins = "gpio15";
- bias-disable;
- };
- };
-
- rp1_sdio0_22_27: rp1_sdio0_22_27 {
- pin_clk {
- function = "sd0";
- pins = "gpio22";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- pin_cmd {
- function = "sd0";
- pins = "gpio23";
- bias-pull-up;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- pins_dat {
- function = "sd0";
- pins = "gpio24", "gpio25", "gpio26", "gpio27";
- bias-pull-up;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- };
-
- rp1_sdio1_28_33: rp1_sdio1_28_33 {
- pin_clk {
- function = "sd1";
- pins = "gpio28";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- pin_cmd {
- function = "sd1";
- pins = "gpio29";
- bias-pull-up;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- pins_dat {
- function = "sd1";
- pins = "gpio30", "gpio31", "gpio32", "gpio33";
- bias-pull-up;
- drive-strength = <12>;
- slew-rate = <1>;
- };
- };
-
- rp1_i2s0_18_21: rp1_i2s0_18_21 {
- function = "i2s0";
- pins = "gpio18", "gpio19", "gpio20", "gpio21";
- bias-disable;
- };
-
- rp1_i2s1_18_21: rp1_i2s1_18_21 {
- function = "i2s1";
- pins = "gpio18", "gpio19", "gpio20", "gpio21";
- bias-disable;
- };
-
- rp1_i2c4_34_35: rp1_i2c4_34_35 {
- function = "i2c4";
- pins = "gpio34", "gpio35";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c6_38_39: rp1_i2c6_38_39 {
- function = "i2c6";
- pins = "gpio38", "gpio39";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c4_40_41: rp1_i2c4_40_41 {
- function = "i2c4";
- pins = "gpio40", "gpio41";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c5_44_45: rp1_i2c5_44_45 {
- function = "i2c5";
- pins = "gpio44", "gpio45";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c0_0_1: rp1_i2c0_0_1 {
- function = "i2c0";
- pins = "gpio0", "gpio1";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c0_8_9: rp1_i2c0_8_9 {
- function = "i2c0";
- pins = "gpio8", "gpio9";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c1_2_3: rp1_i2c1_2_3 {
- function = "i2c1";
- pins = "gpio2", "gpio3";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c1_10_11: rp1_i2c1_10_11 {
- function = "i2c1";
- pins = "gpio10", "gpio11";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c2_4_5: rp1_i2c2_4_5 {
- function = "i2c2";
- pins = "gpio4", "gpio5";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c2_12_13: rp1_i2c2_12_13 {
- function = "i2c2";
- pins = "gpio12", "gpio13";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c3_6_7: rp1_i2c3_6_7 {
- function = "i2c3";
- pins = "gpio6", "gpio7";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c3_14_15: rp1_i2c3_14_15 {
- function = "i2c3";
- pins = "gpio14", "gpio15";
- drive-strength = <12>;
- bias-pull-up;
- };
- rp1_i2c3_22_23: rp1_i2c3_22_23 {
- function = "i2c3";
- pins = "gpio22", "gpio23";
- drive-strength = <12>;
- bias-pull-up;
- };
-
- // DPI mappings with HSYNC,VSYNC but without PIXCLK,DE
- rp1_dpi_16bit_gpio2: rp1_dpi_16bit_gpio2 { /* Mode 2, not fully supported by RP1 */
- function = "dpi";
- pins = "gpio2", "gpio3", "gpio4", "gpio5",
- "gpio6", "gpio7", "gpio8", "gpio9",
- "gpio10", "gpio11", "gpio12", "gpio13",
- "gpio14", "gpio15", "gpio16", "gpio17",
- "gpio18", "gpio19";
- bias-disable;
- };
- rp1_dpi_16bit_cpadhi_gpio2: rp1_dpi_16bit_cpadhi_gpio2 { /* Mode 3 */
- function = "dpi";
- pins = "gpio2", "gpio3", "gpio4", "gpio5",
- "gpio6", "gpio7", "gpio8",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio20", "gpio21", "gpio22", "gpio23",
- "gpio24";
- bias-disable;
- };
- rp1_dpi_16bit_pad666_gpio2: rp1_dpi_16bit_pad666_gpio2 { /* Mode 4 */
- function = "dpi";
- pins = "gpio2", "gpio3",
- "gpio5", "gpio6", "gpio7", "gpio8",
- "gpio9",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio21", "gpio22", "gpio23", "gpio24",
- "gpio25";
- bias-disable;
- };
- rp1_dpi_18bit_gpio2: rp1_dpi_18bit_gpio2 { /* Mode 5, not fully supported by RP1 */
- function = "dpi";
- pins = "gpio2", "gpio3", "gpio4", "gpio5",
- "gpio6", "gpio7", "gpio8", "gpio9",
- "gpio10", "gpio11", "gpio12", "gpio13",
- "gpio14", "gpio15", "gpio16", "gpio17",
- "gpio18", "gpio19", "gpio20", "gpio21";
- bias-disable;
- };
- rp1_dpi_18bit_cpadhi_gpio2: rp1_dpi_18bit_cpadhi_gpio2 { /* Mode 6 */
- function = "dpi";
- pins = "gpio2", "gpio3", "gpio4", "gpio5",
- "gpio6", "gpio7", "gpio8", "gpio9",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio20", "gpio21", "gpio22", "gpio23",
- "gpio24", "gpio25";
- bias-disable;
- };
- rp1_dpi_24bit_gpio2: rp1_dpi_24bit_gpio2 { /* Mode 7 */
- function = "dpi";
- pins = "gpio2", "gpio3", "gpio4", "gpio5",
- "gpio6", "gpio7", "gpio8", "gpio9",
- "gpio10", "gpio11", "gpio12", "gpio13",
- "gpio14", "gpio15", "gpio16", "gpio17",
- "gpio18", "gpio19", "gpio20", "gpio21",
- "gpio22", "gpio23", "gpio24", "gpio25",
- "gpio26", "gpio27";
- bias-disable;
- };
- rp1_dpi_hvsync: rp1_dpi_hvsync { /* Sync only, for use with int VDAC */
- function = "dpi";
- pins = "gpio2", "gpio3";
- bias-disable;
- };
-
- // More DPI mappings, including PIXCLK,DE on GPIOs 0,1
- rp1_dpi_16bit_gpio0: rp1_dpi_16bit_gpio0 { /* Mode 2, not fully supported by RP1 */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio4", "gpio5", "gpio6", "gpio7",
- "gpio8", "gpio9", "gpio10", "gpio11",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17", "gpio18", "gpio19";
- bias-disable;
- };
- rp1_dpi_16bit_cpadhi_gpio0: rp1_dpi_16bit_cpadhi_gpio0 { /* Mode 3 */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio4", "gpio5", "gpio6", "gpio7",
- "gpio8",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio20", "gpio21", "gpio22", "gpio23",
- "gpio24";
- bias-disable;
- };
- rp1_dpi_16bit_pad666_gpio0: rp1_dpi_16bit_pad666_gpio0 { /* Mode 4 */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio5", "gpio6", "gpio7", "gpio8",
- "gpio9",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio21", "gpio22", "gpio23", "gpio24",
- "gpio25";
- bias-disable;
- };
- rp1_dpi_18bit_gpio0: rp1_dpi_18bit_gpio0 { /* Mode 5, not fully supported by RP1 */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio4", "gpio5", "gpio6", "gpio7",
- "gpio8", "gpio9", "gpio10", "gpio11",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17", "gpio18", "gpio19",
- "gpio20", "gpio21";
- bias-disable;
- };
- rp1_dpi_18bit_cpadhi_gpio0: rp1_dpi_18bit_cpadhi_gpio0 { /* Mode 6 */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio4", "gpio5", "gpio6", "gpio7",
- "gpio8", "gpio9",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17",
- "gpio20", "gpio21", "gpio22", "gpio23",
- "gpio24", "gpio25";
- bias-disable;
- };
- rp1_dpi_24bit_gpio0: rp1_dpi_24bit_gpio0 { /* Mode 7 -- All GPIOs used! */
- function = "dpi";
- pins = "gpio0", "gpio1", "gpio2", "gpio3",
- "gpio4", "gpio5", "gpio6", "gpio7",
- "gpio8", "gpio9", "gpio10", "gpio11",
- "gpio12", "gpio13", "gpio14", "gpio15",
- "gpio16", "gpio17", "gpio18", "gpio19",
- "gpio20", "gpio21", "gpio22", "gpio23",
- "gpio24", "gpio25", "gpio26", "gpio27";
- bias-disable;
- };
-
- rp1_gpclksrc0_gpio4: rp1_gpclksrc0_gpio4 {
- function = "gpclk0";
- pins = "gpio4";
- bias-disable;
- };
-
- rp1_gpclksrc0_gpio20: rp1_gpclksrc0_gpio20 {
- function = "gpclk0";
- pins = "gpio20";
- bias-disable;
- };
-
- rp1_gpclksrc1_gpio5: rp1_gpclksrc1_gpio5 {
- function = "gpclk1";
- pins = "gpio5";
- bias-disable;
- };
-
- rp1_gpclksrc1_gpio18: rp1_gpclksrc1_gpio18 {
- function = "gpclk1";
- pins = "gpio18";
- bias-disable;
- };
-
- rp1_gpclksrc1_gpio21: rp1_gpclksrc1_gpio21 {
- function = "gpclk1";
- pins = "gpio21";
- bias-disable;
- };
-
- rp1_pwm1_gpio45: rp1_pwm1_gpio45 {
- function = "pwm1";
- pins = "gpio45";
- bias-pull-down;
- };
-
- rp1_spi0_gpio9: rp1_spi0_gpio9 {
- function = "spi0";
- pins = "gpio9", "gpio10", "gpio11";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi0_cs_gpio7: rp1_spi0_cs_gpio7 {
- function = "spi0";
- pins = "gpio7", "gpio8";
- bias-pull-up;
- };
-
- rp1_spi1_gpio19: rp1_spi1_gpio19 {
- function = "spi1";
- pins = "gpio19", "gpio20", "gpio21";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi2_gpio1: rp1_spi2_gpio1 {
- function = "spi2";
- pins = "gpio1", "gpio2", "gpio3";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi3_gpio5: rp1_spi3_gpio5 {
- function = "spi3";
- pins = "gpio5", "gpio6", "gpio7";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi4_gpio9: rp1_spi4_gpio9 {
- function = "spi4";
- pins = "gpio9", "gpio10", "gpio11";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi5_gpio13: rp1_spi5_gpio13 {
- function = "spi5";
- pins = "gpio13", "gpio14", "gpio15";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi8_gpio49: rp1_spi8_gpio49 {
- function = "spi8";
- pins = "gpio49", "gpio50", "gpio51";
- bias-disable;
- drive-strength = <12>;
- slew-rate = <1>;
- };
-
- rp1_spi8_cs_gpio52: rp1_spi8_cs_gpio52 {
- function = "spi0";
- pins = "gpio52", "gpio53";
- bias-pull-up;
- };
- };
-
- rp1_eth: ethernet@100000 {
- reg = <0xc0 0x40100000 0x0 0x4000>;
- compatible = "cdns,macb";
- #address-cells = <1>;
- #size-cells = <0>;
- interrupts = <RP1_INT_ETH IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&macb_pclk &macb_hclk &rp1_clocks RP1_CLK_ETH_TSU>;
- clock-names = "pclk", "hclk", "tsu_clk";
- phy-mode = "rgmii-id";
- cdns,aw2w-max-pipe = /bits/ 8 <8>;
- cdns,ar2r-max-pipe = /bits/ 8 <8>;
- cdns,use-aw2b-fill;
- local-mac-address = [00 00 00 00 00 00];
- status = "disabled";
- };
-
- rp1_csi0: csi@110000 {
- compatible = "raspberrypi,rp1-cfe";
- reg = <0xc0 0x40110000 0x0 0x100>, // CSI2 DMA address
- <0xc0 0x40114000 0x0 0x100>, // PHY/CSI Host address
- <0xc0 0x40120000 0x0 0x100>, // MIPI CFG address
- <0xc0 0x40124000 0x0 0x1000>; // PiSP FE address
-
- // interrupts must match rp1_pisp_fe setup
- interrupts = <RP1_INT_MIPI0 IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
- assigned-clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
- assigned-clock-rates = <25000000>;
-
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- rp1_csi1: csi@128000 {
- compatible = "raspberrypi,rp1-cfe";
- reg = <0xc0 0x40128000 0x0 0x100>, // CSI2 DMA address
- <0xc0 0x4012c000 0x0 0x100>, // PHY/CSI Host address
- <0xc0 0x40138000 0x0 0x100>, // MIPI CFG address
- <0xc0 0x4013c000 0x0 0x1000>; // PiSP FE address
-
- // interrupts must match rp1_pisp_fe setup
- interrupts = <RP1_INT_MIPI1 IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
- assigned-clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
- assigned-clock-rates = <25000000>;
-
- #address-cells = <1>;
- #size-cells = <0>;
- status = "disabled";
- };
-
- rp1_mmc0: mmc@180000 {
- reg = <0xc0 0x40180000 0x0 0x100>;
- compatible = "raspberrypi,rp1-dwcmshc";
- interrupts = <RP1_INT_SDIO0 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS &sdhci_core
- &rp1_clocks RP1_CLK_SDIO_TIMER
- &rp1_sdio_clk0>;
- clock-names = "bus", "core", "timeout", "sdio";
- /* Bank 0 VDDIO is fixed */
- no-1-8-v;
- bus-width = <4>;
- vmmc-supply = <&rp1_vdd_3v3>;
- broken-cd;
- status = "disabled";
- };
-
- rp1_mmc1: mmc@184000 {
- reg = <0xc0 0x40184000 0x0 0x100>;
- compatible = "raspberrypi,rp1-dwcmshc";
- interrupts = <RP1_INT_SDIO1 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&rp1_clocks RP1_CLK_SYS &sdhci_core
- &rp1_clocks RP1_CLK_SDIO_TIMER
- &rp1_sdio_clk1>;
- clock-names = "bus", "core", "timeout", "sdio";
- bus-width = <4>;
- vmmc-supply = <&rp1_vdd_3v3>;
- /* Nerf SDR speeds */
- sdhci-caps-mask = <0x3 0x0>;
- broken-cd;
- status = "disabled";
- };
-
- rp1_dma: dma@188000 {
- reg = <0xc0 0x40188000 0x0 0x1000>;
- compatible = "snps,axi-dma-1.01a";
- interrupts = <RP1_INT_DMA IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&sdhci_core &rp1_clocks RP1_CLK_SYS>;
- clock-names = "core-clk", "cfgr-clk";
-
- #dma-cells = <1>;
- dma-channels = <8>;
- snps,dma-masters = <1>;
- snps,dma-targets = <64>;
- snps,data-width = <4>; // (8 << 4) == 128 bits
- snps,block-size = <0x40000 0x40000 0x40000 0x40000 0x40000 0x40000 0x40000 0x40000>;
- snps,priority = <0 1 2 3 4 5 6 7>;
- snps,axi-max-burst-len = <8>;
- status = "disabled";
- };
-
- rp1_usb0: usb@200000 {
- reg = <0xc0 0x40200000 0x0 0x100000>;
- compatible = "snps,dwc3";
- dr_mode = "host";
- usb3-lpm-capable;
- snps,axi-pipe-limit = /bits/ 8 <8>;
- snps,dis_rxdet_inp3_quirk;
- snps,parkmode-disable-ss-quirk;
- snps,parkmode-disable-hs-quirk;
- snps,parkmode-disable-fsls-quirk;
- snps,tx-max-burst = /bits/ 8 <8>;
- snps,tx-thr-num-pkt = /bits/ 8 <2>;
- interrupts = <RP1_INT_USBHOST0_0 IRQ_TYPE_EDGE_RISING>;
- status = "disabled";
- };
-
- rp1_usb1: usb@300000 {
- reg = <0xc0 0x40300000 0x0 0x100000>;
- compatible = "snps,dwc3";
- dr_mode = "host";
- usb3-lpm-capable;
- snps,axi-pipe-limit = /bits/ 8 <8>;
- snps,dis_rxdet_inp3_quirk;
- snps,parkmode-disable-ss-quirk;
- snps,parkmode-disable-hs-quirk;
- snps,parkmode-disable-fsls-quirk;
- snps,tx-max-burst = /bits/ 8 <8>;
- snps,tx-thr-num-pkt = /bits/ 8 <2>;
- interrupts = <RP1_INT_USBHOST1_0 IRQ_TYPE_EDGE_RISING>;
- status = "disabled";
- };
-
- rp1_dsi0: dsi@110000 {
- compatible = "raspberrypi,rp1dsi";
- status = "disabled";
- reg = <0xc0 0x40118000 0x0 0x1000>, // MIPI0 DSI DMA (ArgonDPI)
- <0xc0 0x4011c000 0x0 0x1000>, // MIPI0 DSI Host (SNPS)
- <0xc0 0x40120000 0x0 0x1000>; // MIPI0 CFG
-
- interrupts = <RP1_INT_MIPI0 IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>,
- <&rp1_clocks RP1_CLK_MIPI0_DPI>,
- <&rp1_clocks RP1_CLK_MIPI0_DSI_BYTECLOCK>,
- <&clk_xosc>, // hardwired to DSI "refclk"
- <&rp1_clocks RP1_PLL_SYS>; // alternate parent for divide
- clock-names = "cfgclk", "dpiclk", "byteclk", "refclk", "pllsys";
-
- assigned-clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
- assigned-clock-rates = <25000000>;
- };
-
- rp1_dsi1: dsi@128000 {
- compatible = "raspberrypi,rp1dsi";
- status = "disabled";
- reg = <0xc0 0x40130000 0x0 0x1000>, // MIPI1 DSI DMA (ArgonDPI)
- <0xc0 0x40134000 0x0 0x1000>, // MIPI1 DSI Host (SNPS)
- <0xc0 0x40138000 0x0 0x1000>; // MIPI1 CFG
-
- interrupts = <RP1_INT_MIPI1 IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>,
- <&rp1_clocks RP1_CLK_MIPI1_DPI>,
- <&rp1_clocks RP1_CLK_MIPI1_DSI_BYTECLOCK>,
- <&clk_xosc>, // hardwired to DSI "refclk"
- <&rp1_clocks RP1_PLL_SYS>; // alternate parent for divide
- clock-names = "cfgclk", "dpiclk", "byteclk", "refclk", "pllsys";
-
- assigned-clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
- assigned-clock-rates = <25000000>;
- };
-
- /* VEC and DPI both need to control PLL_VIDEO and cannot work together; */
- /* config.txt should enable one or other using dtparam=vec or an overlay. */
- rp1_vec: vec@144000 {
- compatible = "raspberrypi,rp1vec";
- status = "disabled";
- reg = <0xc0 0x40144000 0x0 0x1000>, // VIDEO_OUT_VEC
- <0xc0 0x40140000 0x0 0x1000>; // VIDEO_OUT_CFG
-
- interrupts = <RP1_INT_VIDEO_OUT IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_VEC>;
-
- assigned-clocks = <&rp1_clocks RP1_PLL_VIDEO_CORE>,
- <&rp1_clocks RP1_PLL_VIDEO_SEC>,
- <&rp1_clocks RP1_CLK_VEC>;
- assigned-clock-rates = <1188000000>,
- <108000000>,
- <108000000>;
- assigned-clock-parents = <0>,
- <&rp1_clocks RP1_PLL_VIDEO_CORE>,
- <&rp1_clocks RP1_PLL_VIDEO_SEC>;
- };
-
- rp1_dpi: dpi@148000 {
- compatible = "raspberrypi,rp1dpi";
- status = "disabled";
- reg = <0xc0 0x40148000 0x0 0x1000>, // VIDEO_OUT DPI
- <0xc0 0x40140000 0x0 0x1000>; // VIDEO_OUT_CFG
-
- interrupts = <RP1_INT_VIDEO_OUT IRQ_TYPE_LEVEL_HIGH>;
-
- clocks = <&rp1_clocks RP1_CLK_DPI>, // DPI pixel clock
- <&rp1_clocks RP1_PLL_VIDEO>, // PLL primary divider, and
- <&rp1_clocks RP1_PLL_VIDEO_CORE>; // VCO, which we also control
- clock-names = "dpiclk", "plldiv", "pllcore";
-
- assigned-clocks = <&rp1_clocks RP1_CLK_DPI>;
- assigned-clock-parents = <&rp1_clocks RP1_PLL_VIDEO>;
- };
- };
-};
-
-&clocks {
- clk_xosc: clk_xosc {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "xosc";
- clock-frequency = <50000000>;
- };
- macb_pclk: macb_pclk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "pclk";
- clock-frequency = <200000000>;
- };
- macb_hclk: macb_hclk {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "hclk";
- clock-frequency = <200000000>;
- };
- sdio_src: sdio_src {
- // 400 MHz on FPGA. PLL sys VCO on asic
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "src";
- clock-frequency = <1000000000>;
- };
- sdhci_core: sdhci_core {
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-output-names = "core";
- clock-frequency = <50000000>;
- };
- /* GPIO derived clock sources. Each GPIO with a GPCLK function
- * can drive its output from the respective GPCLK
- * generator, and provide a clock source to other internal
- * dividers. Add dummy sources here so that they can be overridden
- * with overlays.
- */
- clksrc_gp0: clksrc_gp0 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- #clock-cells = <0>;
- clock-div = <1>;
- clock-mult = <1>;
- clocks = <&rp1_clocks RP1_CLK_GP0>;
- clock-output-names = "clksrc_gp0";
- };
- clksrc_gp1: clksrc_gp1 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- #clock-cells = <0>;
- clock-div = <1>;
- clock-mult = <1>;
- clocks = <&rp1_clocks RP1_CLK_GP1>;
- clock-output-names = "clksrc_gp1";
- };
- clksrc_gp2: clksrc_gp2 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- clock-div = <1>;
- clock-mult = <1>;
- #clock-cells = <0>;
- clocks = <&rp1_clocks RP1_CLK_GP2>;
- clock-output-names = "clksrc_gp2";
- };
- clksrc_gp3: clksrc_gp3 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- clock-div = <1>;
- clock-mult = <1>;
- #clock-cells = <0>;
- clocks = <&rp1_clocks RP1_CLK_GP3>;
- clock-output-names = "clksrc_gp3";
- };
- clksrc_gp4: clksrc_gp4 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- #clock-cells = <0>;
- clock-div = <1>;
- clock-mult = <1>;
- clocks = <&rp1_clocks RP1_CLK_GP4>;
- clock-output-names = "clksrc_gp4";
- };
- clksrc_gp5: clksrc_gp5 {
- status = "disabled";
- compatible = "fixed-factor-clock";
- #clock-cells = <0>;
- clock-div = <1>;
- clock-mult = <1>;
- clocks = <&rp1_clocks RP1_CLK_GP5>;
- clock-output-names = "clksrc_gp5";
- };
-};
-
-/ {
- rp1_vdd_3v3: rp1_vdd_3v3 {
- compatible = "regulator-fixed";
- regulator-name = "vdd-3v3";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- };
-};
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi.dtsi
@@ -0,0 +1,351 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/power/raspberrypi-power.h>
+
+&soc {
+ firmware: firmware {
+ compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ mboxes = <&mailbox>;
+ dma-ranges;
+
+ firmware_clocks: clocks {
+ compatible = "raspberrypi,firmware-clocks";
+ #clock-cells = <1>;
+ };
+
+ reset: reset {
+ compatible = "raspberrypi,firmware-reset";
+ #reset-cells = <1>;
+ };
+
+ vcio: vcio {
+ compatible = "raspberrypi,vcio";
+ };
+ };
+
+ power: power {
+ compatible = "raspberrypi,bcm2835-power";
+ firmware = <&firmware>;
+ #power-domain-cells = <1>;
+ };
+
+ fb: fb {
+ compatible = "brcm,bcm2708-fb";
+ firmware = <&firmware>;
+ status = "okay";
+ };
+
+ rpi_rtc: rpi_rtc {
+ compatible = "raspberrypi,rpi-rtc";
+ firmware = <&firmware>;
+ status = "okay";
+ trickle-charge-microvolt = <0>;
+ };
+
+ nvmem {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ nvmem_otp: nvmem_otp {
+ compatible = "raspberrypi,rpi-otp";
+ firmware = <&firmware>;
+ reg = <0 192>;
+ status = "okay";
+ };
+
+ nvmem_cust: nvmem_cust {
+ compatible = "raspberrypi,rpi-otp";
+ firmware = <&firmware>;
+ reg = <1 8>;
+ status = "okay";
+ };
+
+ nvmem_mac: nvmem_mac {
+ compatible = "raspberrypi,rpi-otp";
+ firmware = <&firmware>;
+ reg = <2 6>;
+ status = "okay";
+ };
+
+ nvmem_priv: nvmem_priv {
+ compatible = "raspberrypi,rpi-otp";
+ firmware = <&firmware>;
+ reg = <3 16>;
+ status = "okay";
+ };
+ };
+
+ /* Define these notional regulators for use by overlays, etc. */
+ vdd_3v3_reg: fixedregulator_3v3 {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "3v3";
+ };
+
+ vdd_5v0_reg: fixedregulator_5v0 {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microvolt = <5000000>;
+ regulator-name = "5v0";
+ };
+};
+
+/ {
+ __overrides__ {
+ arm_freq;
+ axiperf = <&axiperf>,"status";
+
+ nvmem_cust_rw = <&nvmem_cust>,"rw?";
+ nvmem_priv_rw = <&nvmem_priv>,"rw?";
+ nvmem_mac_rw = <&nvmem_mac>,"rw?";
+ strict_gpiod = <&chosen>, "bootargs=pinctrl_rp1.persist_gpio_outputs=n";
+
+ cam0_reg = <&cam0_reg>,"status";
+ cam0_reg_gpio = <&cam0_reg>,"gpio:4",
+ <&cam0_reg>,"gpio:0=", <&gpio>;
+ cam1_reg = <&cam1_reg>,"status";
+ cam1_reg_gpio = <&cam1_reg>,"gpio:4",
+ <&cam1_reg>,"gpio:0=", <&gpio>;
+
+ };
+};
+
+pciex1: &pcie1 { };
+pciex4: &pcie2 { };
+
+&dma32 {
+ /* The VPU firmware uses DMA channel 11 for VCHIQ */
+ brcm,dma-channel-mask = <0x03f>;
+};
+
+&dma40 {
+ /* The VPU firmware DMA channel 11 for VCHIQ */
+ brcm,dma-channel-mask = <0x07c0>;
+};
+
+&hdmi0 {
+ dmas = <&dma40 (10|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
+};
+
+&hdmi1 {
+ dmas = <&dma40 (17|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
+};
+
+&spi10 {
+ dmas = <&dma40 6>, <&dma40 7>;
+ dma-names = "tx", "rx";
+};
+
+&usb {
+ power-domains = <&power RPI_POWER_DOMAIN_USB>;
+};
+
+&rmem {
+ /*
+ * RPi5'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";
+ };
+ /*
+ * RPi5 will copy the binary public key blob (if present) from the bootloader
+ * into memory for use by the OS.
+ */
+ blpubkey: nvram@1 {
+ compatible = "raspberrypi,bootloader-public-key", "nvmem-rmem";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x0 0x0 0x0>;
+ no-map;
+ status = "disabled";
+ };
+};
+
+&rp1_adc {
+ status = "okay";
+};
+
+/* Add some gpiomem nodes to make the devices accessible to userspace.
+ * /dev/gpiomem<n> should expose the registers for the interface with DT alias
+ * gpio<n>.
+ */
+
+&rp1 {
+ gpiomem@d0000 {
+ /* Export IO_BANKs, RIO_BANKs and PADS_BANKs to userspace */
+ compatible = "raspberrypi,gpiomem";
+ reg = <0xc0 0x400d0000 0x0 0x30000>;
+ chardev-name = "gpiomem0";
+ };
+};
+
+&soc {
+ gpiomem@7d508500 {
+ compatible = "raspberrypi,gpiomem";
+ reg = <0x7d508500 0x40>;
+ chardev-name = "gpiomem1";
+ };
+
+ gpiomem@7d517c00 {
+ compatible = "raspberrypi,gpiomem";
+ reg = <0x7d517c00 0x40>;
+ chardev-name = "gpiomem2";
+ };
+
+ gpiomem@7d504100 {
+ compatible = "raspberrypi,gpiomem";
+ reg = <0x7d504100 0x20>;
+ chardev-name = "gpiomem3";
+ };
+
+ gpiomem@7d510700 {
+ compatible = "raspberrypi,gpiomem";
+ reg = <0x7d510700 0x20>;
+ chardev-name = "gpiomem4";
+ };
+
+ sound: sound {
+ status = "disabled";
+ };
+};
+
+i2c0: &rp1_i2c0 { };
+i2c1: &rp1_i2c1 { };
+i2c2: &rp1_i2c2 { };
+i2c3: &rp1_i2c3 { };
+i2c4: &rp1_i2c4 { };
+i2c5: &rp1_i2c5 { };
+i2c6: &rp1_i2c6 { };
+i2s: &rp1_i2s0 { };
+i2s_clk_producer: &rp1_i2s0 { };
+i2s_clk_consumer: &rp1_i2s1 { };
+pwm0: &rp1_pwm0 { };
+pwm1: &rp1_pwm1 { };
+pwm: &pwm0 { };
+spi0: &rp1_spi0 { };
+spi1: &rp1_spi1 { };
+spi2: &rp1_spi2 { };
+spi3: &rp1_spi3 { };
+spi4: &rp1_spi4 { };
+spi5: &rp1_spi5 { };
+
+uart0_pins: &rp1_uart0_14_15 {};
+uart0_ctsrts_pins: &rp1_uart0_ctsrts_16_17 {};
+uart0: &rp1_uart0 {
+ pinctrl-0 = <&uart0_pins>;
+};
+
+uart1_pins: &rp1_uart1_0_1 {};
+uart1_ctsrts_pins: &rp1_uart1_ctsrts_2_3 {};
+uart1: &rp1_uart1 { };
+
+uart2_pins: &rp1_uart2_4_5 {};
+uart2_ctsrts_pins: &rp1_uart2_ctsrts_6_7 {};
+uart2: &rp1_uart2 { };
+
+uart3_pins: &rp1_uart3_8_9 {};
+uart3_ctsrts_pins: &rp1_uart3_ctsrts_10_11 {};
+uart3: &rp1_uart3 { };
+
+uart4_pins: &rp1_uart4_12_13 {};
+uart4_ctsrts_pins: &rp1_uart4_ctsrts_14_15 {};
+uart4: &rp1_uart4 { };
+
+i2c0_pins: &rp1_i2c0_0_1 {};
+i2c_vc: &i2c0 { // This is pins 27,28 on the header (not MIPI)
+ pinctrl-0 = <&i2c0_pins>;
+ pinctrl-names = "default";
+ clock-frequency = <100000>;
+};
+
+i2c1_pins: &rp1_i2c1_2_3 {};
+i2c_arm: &i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c1_pins>;
+ clock-frequency = <100000>;
+};
+
+i2c2_pins: &rp1_i2c2_4_5 {};
+&i2c2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c2_pins>;
+};
+
+i2c3_pins: &rp1_i2c3_6_7 {};
+&i2c3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c3_pins>;
+};
+
+&i2s_clk_producer {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rp1_i2s0_18_21>;
+};
+
+&i2s_clk_consumer {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rp1_i2s1_18_21>;
+};
+
+spi0_pins: &rp1_spi0_gpio9 {};
+spi0_cs_pins: &rp1_spi0_cs_gpio7 {};
+
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
+ cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
+
+ spidev0: spidev@0 {
+ compatible = "spidev";
+ reg = <0>; /* CE0 */
+ #address-cells = <1>;
+ #size-cells = <0>;
+ spi-max-frequency = <125000000>;
+ };
+
+ spidev1: spidev@1 {
+ compatible = "spidev";
+ reg = <1>; /* CE1 */
+ #address-cells = <1>;
+ #size-cells = <0>;
+ spi-max-frequency = <125000000>;
+ };
+};
+
+spi2_pins: &rp1_spi2_gpio1 {};
+&spi2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi2_pins>;
+};
+
+spi3_pins: &rp1_spi3_gpio5 {};
+&spi3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi3_pins>;
+};
+
+spi4_pins: &rp1_spi4_gpio9 {};
+&spi4 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi4_pins>;
+};
+
+spi5_pins: &rp1_spi5_gpio13 {};
+&spi5 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi5_pins>;
+};
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
@@ -0,0 +1,1302 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/soc/bcm2835-pm.h>
+#include <dt-bindings/phy/phy.h>
+
+/ {
+ compatible = "brcm,bcm2712", "brcm,bcm2711";
+ model = "BCM2712";
+
+ #address-cells = <2>;
+ #size-cells = <1>;
+
+ interrupt-parent = <&gicv2>;
+
+ rmem: reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <1>;
+ ranges;
+
+ atf@0 {
+ reg = <0x0 0x0 0x80000>;
+ no-map;
+ };
+
+ cma: linux,cma {
+ compatible = "shared-dma-pool";
+ size = <0x4000000>; /* 64MB */
+ reusable;
+ linux,cma-default;
+
+ /*
+ * arm64 reserves the CMA by default somewhere in
+ * ZONE_DMA32, that's not good enough for the BCM2711
+ * as some devices can only address the lower 1G of
+ * memory (ZONE_DMA).
+ */
+ alloc-ranges = <0x0 0x00000000 0x40000000>;
+ };
+ };
+
+ thermal-zones {
+ cpu_thermal: cpu-thermal {
+ polling-delay-passive = <2000>;
+ polling-delay = <1000>;
+ coefficients = <(-550) 450000>;
+ thermal-sensors = <&thermal>;
+
+ thermal_trips: trips {
+ cpu_crit: cpu-crit {
+ temperature = <110000>;
+ hysteresis = <0>;
+ type = "critical";
+ };
+ };
+
+ cooling_maps: cooling-maps {
+ };
+ };
+ };
+
+ clk_27MHz: clk-27M {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <27000000>;
+ clock-output-names = "27MHz-clock";
+ };
+
+ clk_108MHz: clk-108M {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <108000000>;
+ clock-output-names = "108MHz-clock";
+ };
+
+ hvs: hvs@107c580000 {
+ compatible = "brcm,bcm2712-hvs";
+ reg = <0x10 0x7c580000 0x1a000>;
+ interrupt-parent = <&disp_intr>;
+ interrupts = <2>, <9>, <16>;
+ interrupt-names = "ch0-eof", "ch1-eof", "ch2-eof";
+ //iommus = <&iommu4>;
+ status = "disabled";
+ };
+
+ soc: soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ ranges = <0x7c000000 0x10 0x7c000000 0x04000000>;
+ /* Emulate a contiguous 30-bit address range for DMA */
+ dma-ranges = <0xc0000000 0x00 0x00000000 0x40000000>,
+ <0x7c000000 0x10 0x7c000000 0x04000000>;
+
+ system_timer: timer@7c003000 {
+ compatible = "brcm,bcm2835-system-timer";
+ reg = <0x7c003000 0x1000>;
+ interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
+ clock-frequency = <1000000>;
+ };
+
+ firmwarekms: firmwarekms@7d503000 {
+ compatible = "raspberrypi,rpi-firmware-kms-2712";
+ /* SUN_L2 interrupt reg */
+ reg = <0x7d503000 0x18>;
+ interrupt-parent = <&cpu_l2_irq>;
+ interrupts = <19>;
+ brcm,firmware = <&firmware>;
+ status = "disabled";
+ };
+
+ axiperf: axiperf {
+ compatible = "brcm,bcm2712-axiperf";
+ reg = <0x7c012800 0x100>,
+ <0x7e000000 0x100>;
+ firmware = <&firmware>;
+ status = "disabled";
+ };
+
+ mailbox: mailbox@7c013880 {
+ compatible = "brcm,bcm2835-mbox";
+ reg = <0x7c013880 0x40>;
+ interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
+ #mbox-cells = <0>;
+ };
+
+ pixelvalve0: pixelvalve@7c410000 {
+ compatible = "brcm,bcm2712-pixelvalve0";
+ reg = <0x7c410000 0x100>;
+ interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ };
+
+ pixelvalve1: pixelvalve@7c411000 {
+ compatible = "brcm,bcm2712-pixelvalve1";
+ reg = <0x7c411000 0x100>;
+ interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ };
+
+ mop: mop@7c500000 {
+ compatible = "brcm,bcm2712-mop";
+ reg = <0x7c500000 0x28>;
+ interrupt-parent = <&disp_intr>;
+ interrupts = <1>;
+ status = "disabled";
+ };
+
+ moplet: moplet@7c501000 {
+ compatible = "brcm,bcm2712-moplet";
+ reg = <0x7c501000 0x20>;
+ interrupt-parent = <&disp_intr>;
+ interrupts = <0>;
+ status = "disabled";
+ };
+
+ disp_intr: interrupt-controller@7c502000 {
+ compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
+ reg = <0x7c502000 0x30>;
+ interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ status = "disabled";
+ };
+
+ dvp: clock@7c700000 {
+ compatible = "brcm,brcm2711-dvp";
+ reg = <0x7c700000 0x10>;
+ clocks = <&clk_108MHz>;
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ };
+
+ /*
+ * This node is the provider for the enable-method for
+ * bringing up secondary cores.
+ */
+ local_intc: local_intc@7cd00000 {
+ compatible = "brcm,bcm2836-l1-intc";
+ reg = <0x7cd00000 0x100>;
+ };
+
+ uart0: serial@7d001000 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x7d001000 0x200>;
+ interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_uart>,
+ <&clk_vpu>;
+ clock-names = "uartclk", "apb_pclk";
+ arm,primecell-periphid = <0x00241011>;
+ status = "disabled";
+ };
+
+ uart2: serial@7d001400 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x7d001400 0x200>;
+ interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_uart>,
+ <&clk_vpu>;
+ clock-names = "uartclk", "apb_pclk";
+ arm,primecell-periphid = <0x00241011>;
+ status = "disabled";
+ };
+
+ uart5: serial@7d001a00 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x7d001a00 0x200>;
+ interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_uart>,
+ <&clk_vpu>;
+ clock-names = "uartclk", "apb_pclk";
+ arm,primecell-periphid = <0x00241011>;
+ status = "disabled";
+ };
+
+ sdhost: mmc@7d002000 {
+ compatible = "brcm,bcm2835-sdhost";
+ reg = <0x7d002000 0x100>;
+ //interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ status = "disabled";
+ };
+
+ i2s: i2s@7d003000 {
+ compatible = "brcm,bcm2835-i2s";
+ reg = <0x7d003000 0x24>;
+ //clocks = <&cprman BCM2835_CLOCK_PCM>;
+ status = "disabled";
+ };
+
+ spi0: spi@7d004000 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7d004000 0x200>;
+ interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ num-cs = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi3: spi@7d004600 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7d004600 0x0200>;
+ interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi4: spi@7d004800 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7d004800 0x0200>;
+ interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi5: spi@7d004a00 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7d004a00 0x0200>;
+ interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ spi6: spi@7d004c00 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7d004c00 0x0200>;
+ interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c0: i2c@7d005000 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005000 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c3: i2c@7d005600 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005600 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c4: i2c@7d005800 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005800 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c5: i2c@7d005a00 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005a00 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c6: i2c@7d005c00 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005c00 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c8: i2c@7d005e00 {
+ compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
+ reg = <0x7d005e00 0x20>;
+ interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_vpu>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ pwm0: pwm@7d00c000 {
+ compatible = "brcm,bcm2835-pwm";
+ reg = <0x7d00c000 0x28>;
+ assigned-clock-rates = <50000000>;
+ #pwm-cells = <3>;
+ status = "disabled";
+ };
+
+ pwm1: pwm@7d00c800 {
+ compatible = "brcm,bcm2835-pwm";
+ reg = <0x7d00c800 0x28>;
+ assigned-clock-rates = <50000000>;
+ #pwm-cells = <3>;
+ status = "disabled";
+ };
+
+ pm: watchdog@7d200000 {
+ compatible = "brcm,bcm2712-pm";
+ reg = <0x7d200000 0x308>;
+ reg-names = "pm";
+ #power-domain-cells = <1>;
+ #reset-cells = <1>;
+ //clocks = <&cprman BCM2835_CLOCK_V3D>,
+ // <&cprman BCM2835_CLOCK_PERI_IMAGE>,
+ // <&cprman BCM2835_CLOCK_H264>,
+ // <&cprman BCM2835_CLOCK_ISP>;
+ clock-names = "v3d", "peri_image", "h264", "isp";
+ system-power-controller;
+ };
+
+ cprman: cprman@7d202000 {
+ compatible = "brcm,bcm2711-cprman";
+ reg = <0x7d202000 0x2000>;
+ #clock-cells = <1>;
+
+ /* CPRMAN derives almost everything from the
+ * platform's oscillator. However, the DSI
+ * pixel clocks come from the DSI analog PHY.
+ */
+ clocks = <&clk_osc>;
+ status = "disabled";
+ };
+
+ random: rng@7d208000 {
+ compatible = "brcm,bcm2711-rng200";
+ reg = <0x7d208000 0x28>;
+ status = "okay";
+ };
+
+ cpu_l2_irq: intc@7d503000 {
+ compatible = "brcm,l2-intc";
+ reg = <0x7d503000 0x18>;
+ interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ pinctrl: pinctrl@7d504100 {
+ compatible = "brcm,bcm2712-pinctrl";
+ reg = <0x7d504100 0x30>;
+
+ uarta_24_pins: uarta_24_pins {
+ pin_rts {
+ function = "uart0";
+ pins = "gpio24";
+ bias-disable;
+ };
+ pin_cts {
+ function = "uart0";
+ pins = "gpio25";
+ bias-pull-up;
+ };
+ pin_txd {
+ function = "uart0";
+ pins = "gpio26";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart0";
+ pins = "gpio27";
+ bias-pull-up;
+ };
+ };
+
+ sdio2_30_pins: sdio2_30_pins {
+ pin_clk {
+ function = "sd2";
+ pins = "gpio30";
+ bias-disable;
+ };
+ pin_cmd {
+ function = "sd2";
+ pins = "gpio31";
+ bias-pull-up;
+ };
+ pins_dat {
+ function = "sd2";
+ pins = "gpio32", "gpio33", "gpio34", "gpio35";
+ bias-pull-up;
+ };
+ };
+ };
+
+ ddc0: i2c@7d508200 {
+ compatible = "brcm,brcmstb-i2c";
+ reg = <0x7d508200 0x58>;
+ interrupt-parent = <&bsc_irq>;
+ interrupts = <1>;
+ clock-frequency = <97500>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ ddc1: i2c@7d508280 {
+ compatible = "brcm,brcmstb-i2c";
+ reg = <0x7d508280 0x58>;
+ interrupt-parent = <&bsc_irq>;
+ interrupts = <2>;
+ clock-frequency = <97500>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ bscd: i2c@7d508300 {
+ compatible = "brcm,brcmstb-i2c";
+ reg = <0x7d508300 0x58>;
+ interrupt-parent = <&bsc_irq>;
+ interrupts = <0>;
+ clock-frequency = <200000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ bsc_irq: intc@7d508380 {
+ compatible = "brcm,bcm7271-l2-intc";
+ reg = <0x7d508380 0x10>;
+ interrupts = <GIC_SPI 242 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ main_irq: intc@7d508400 {
+ compatible = "brcm,bcm7271-l2-intc";
+ reg = <0x7d508400 0x10>;
+ interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ gio: gpio@7d508500 {
+ compatible = "brcm,brcmstb-gpio";
+ reg = <0x7d508500 0x40>;
+ interrupt-parent = <&main_irq>;
+ interrupts = <0>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ brcm,gpio-bank-widths = <32 22>;
+ brcm,gpio-direct;
+ };
+
+ uarta: serial@7d50c000 {
+ compatible = "brcm,bcm7271-uart";
+ reg = <0x7d50c000 0x20>;
+ reg-names = "uart";
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ interrupts = <GIC_SPI 276 IRQ_TYPE_LEVEL_HIGH>;
+ skip-init;
+ status = "disabled";
+ };
+
+ uartb: serial@7d50d000 {
+ compatible = "brcm,bcm7271-uart";
+ reg = <0x7d50d000 0x20>;
+ reg-names = "uart";
+ reg-shift = <2>;
+ reg-io-width = <4>;
+ interrupts = <GIC_SPI 277 IRQ_TYPE_LEVEL_HIGH>;
+ skip-init;
+ status = "disabled";
+ };
+
+ aon_intr: interrupt-controller@7d510600 {
+ compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
+ reg = <0x7d510600 0x30>;
+ interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ status = "disabled";
+ };
+
+ pinctrl_aon: pinctrl@7d510700 {
+ compatible = "brcm,bcm2712-aon-pinctrl";
+ reg = <0x7d510700 0x20>;
+
+ i2c3_m4_agpio0_pins: i2c3_m4_agpio0_pins {
+ function = "vc_i2c3";
+ pins = "aon_gpio0", "aon_gpio1";
+ bias-pull-up;
+ };
+
+ bsc_m1_agpio13_pins: bsc_m1_agpio13_pins {
+ function = "bsc_m1";
+ pins = "aon_gpio13", "aon_gpio14";
+ bias-pull-up;
+ };
+
+ bsc_pmu_sgpio4_pins: bsc_pmu_sgpio4_pins {
+ function = "avs_pmu_bsc";
+ pins = "aon_sgpio4", "aon_sgpio5";
+ };
+
+ bsc_m2_sgpio4_pins: bsc_m2_sgpio4_pins {
+ function = "bsc_m2";
+ pins = "aon_sgpio4", "aon_sgpio5";
+ };
+
+ pwm_aon_agpio1_pins: pwm_aon_agpio1_pins {
+ function = "aon_pwm";
+ pins = "aon_gpio1", "aon_gpio2";
+ };
+
+ pwm_aon_agpio4_pins: pwm_aon_agpio4_pins {
+ function = "vc_pwm0";
+ pins = "aon_gpio4", "aon_gpio5";
+ };
+
+ pwm_aon_agpio7_pins: pwm_aon_agpio7_pins {
+ function = "aon_pwm";
+ pins = "aon_gpio7", "aon_gpio9";
+ };
+ };
+
+ intc@7d517000 {
+ compatible = "brcm,bcm7271-l2-intc";
+ reg = <0x7d517000 0x10>;
+ interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ status = "disabled";
+ };
+
+ bscc: i2c@7d517a00 {
+ compatible = "brcm,brcmstb-i2c";
+ reg = <0x7d517a00 0x58>;
+ interrupt-parent = <&bsc_aon_irq>;
+ interrupts = <0>;
+ clock-frequency = <200000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ pwm_aon: pwm@7d517a80 {
+ compatible = "brcm,bcm7038-pwm";
+ reg = <0x7d517a80 0x28>;
+ #pwm-cells = <3>;
+ clocks = <&clk_27MHz>;
+ };
+
+ main_aon_irq: intc@7d517ac0 {
+ compatible = "brcm,bcm7271-l2-intc";
+ reg = <0x7d517ac0 0x10>;
+ interrupts = <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ bsc_aon_irq: intc@7d517b00 {
+ compatible = "brcm,bcm7271-l2-intc";
+ reg = <0x7d517b00 0x10>;
+ interrupts = <GIC_SPI 243 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ gio_aon: gpio@7d517c00 {
+ compatible = "brcm,brcmstb-gpio";
+ reg = <0x7d517c00 0x40>;
+ interrupt-parent = <&main_aon_irq>;
+ interrupts = <0>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ brcm,gpio-bank-widths = <17 6>;
+ brcm,gpio-direct;
+ };
+
+ avs_monitor: avs-monitor@7d542000 {
+ compatible = "brcm,bcm2711-avs-monitor",
+ "syscon", "simple-mfd";
+ reg = <0x7d542000 0xf00>;
+ status = "okay";
+
+ thermal: thermal {
+ compatible = "brcm,bcm2711-thermal";
+ #thermal-sensor-cells = <0>;
+ };
+ };
+
+ bsc_pmu: i2c@7d544000 {
+ compatible = "brcm,brcmstb-i2c";
+ reg = <0x7d544000 0x58>;
+ interrupt-parent = <&bsc_aon_irq>;
+ interrupts = <1>;
+ clock-frequency = <200000>;
+ status = "disabled";
+ };
+
+ hdmi0: hdmi@7ef00700 {
+ compatible = "brcm,bcm2712-hdmi0";
+ reg = <0x7c701400 0x300>,
+ <0x7c701000 0x200>,
+ <0x7c701d00 0x300>,
+ <0x7c702000 0x80>,
+ <0x7c703800 0x200>,
+ <0x7c704000 0x800>,
+ <0x7c700100 0x80>,
+ <0x7d510800 0x100>,
+ <0x7c720000 0x100>;
+ reg-names = "hdmi",
+ "dvp",
+ "phy",
+ "rm",
+ "packet",
+ "metadata",
+ "csc",
+ "cec",
+ "hd";
+ resets = <&dvp 1>;
+ interrupt-parent = <&aon_intr>;
+ interrupts = <1>, <2>, <3>,
+ <7>, <8>;
+ interrupt-names = "cec-tx", "cec-rx", "cec-low",
+ "hpd-connected", "hpd-removed";
+ ddc = <&ddc0>;
+ dmas = <&dma32 10>;
+ dma-names = "audio-rx";
+ status = "disabled";
+ };
+
+ hdmi1: hdmi@7ef05700 {
+ compatible = "brcm,bcm2712-hdmi1";
+ reg = <0x7c706400 0x300>,
+ <0x7c706000 0x200>,
+ <0x7c706d00 0x300>,
+ <0x7c707000 0x80>,
+ <0x7c708800 0x200>,
+ <0x7c709000 0x800>,
+ <0x7c700180 0x80>,
+ <0x7d511000 0x100>,
+ <0x7c720000 0x100>;
+ reg-names = "hdmi",
+ "dvp",
+ "phy",
+ "rm",
+ "packet",
+ "metadata",
+ "csc",
+ "cec",
+ "hd";
+ ddc = <&ddc1>;
+ resets = <&dvp 2>;
+ interrupt-parent = <&aon_intr>;
+ interrupts = <11>, <12>, <13>,
+ <14>, <15>;
+ interrupt-names = "cec-tx", "cec-rx", "cec-low",
+ "hpd-connected", "hpd-removed";
+ dmas = <&dma32 17>;
+ dma-names = "audio-rx";
+ status = "disabled";
+ };
+ };
+
+ arm-pmu {
+ compatible = "arm,cortex-a76-pmu";
+ interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+ };
+
+ timer {
+ compatible = "arm,armv8-timer";
+ interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) |
+ IRQ_TYPE_LEVEL_LOW)>,
+ <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) |
+ IRQ_TYPE_LEVEL_LOW)>,
+ <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) |
+ IRQ_TYPE_LEVEL_LOW)>,
+ <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
+ IRQ_TYPE_LEVEL_LOW)>;
+ /* This only applies to the ARMv7 stub */
+ arm,cpu-registers-not-fw-configured;
+ };
+
+ cpus: cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
+
+ /* Source for d/i cache-line-size, cache-sets, cache-size
+ * https://developer.arm.com/documentation/100798/0401
+ * /L1-memory-system/About-the-L1-memory-system?lang=en
+ */
+ cpu0: cpu@0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a76";
+ reg = <0x000>;
+ enable-method = "psci";
+ d-cache-size = <0x10000>;
+ d-cache-line-size = <64>;
+ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ i-cache-size = <0x10000>;
+ i-cache-line-size = <64>;
+ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ next-level-cache = <&l2_cache_l0>;
+ };
+
+ cpu1: cpu@1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a76";
+ reg = <0x100>;
+ enable-method = "psci";
+ d-cache-size = <0x10000>;
+ d-cache-line-size = <64>;
+ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ i-cache-size = <0x10000>;
+ i-cache-line-size = <64>;
+ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ next-level-cache = <&l2_cache_l1>;
+ };
+
+ cpu2: cpu@2 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a76";
+ reg = <0x200>;
+ enable-method = "psci";
+ d-cache-size = <0x10000>;
+ d-cache-line-size = <64>;
+ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ i-cache-size = <0x10000>;
+ i-cache-line-size = <64>;
+ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ next-level-cache = <&l2_cache_l2>;
+ };
+
+ cpu3: cpu@3 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a76";
+ reg = <0x300>;
+ enable-method = "psci";
+ d-cache-size = <0x10000>;
+ d-cache-line-size = <64>;
+ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ i-cache-size = <0x10000>;
+ i-cache-line-size = <64>;
+ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set
+ next-level-cache = <&l2_cache_l3>;
+ };
+
+ /* Source for cache-line-size and cache-sets:
+ * https://developer.arm.com/documentation/100798/0401
+ * /L2-memory-system/About-the-L2-memory-system?lang=en
+ * and for cache-size:
+ * https://www.raspberrypi.com/documentation/computers
+ * /processors.html#bcm2712
+ */
+ l2_cache_l0: l2-cache-l0 {
+ compatible = "cache";
+ cache-size = <0x80000>;
+ cache-line-size = <128>;
+ cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
+ cache-level = <2>;
+ cache-unified;
+ next-level-cache = <&l3_cache>;
+ };
+
+ l2_cache_l1: l2-cache-l1 {
+ compatible = "cache";
+ cache-size = <0x80000>;
+ cache-line-size = <128>;
+ cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
+ cache-level = <2>;
+ cache-unified;
+ next-level-cache = <&l3_cache>;
+ };
+
+ l2_cache_l2: l2-cache-l2 {
+ compatible = "cache";
+ cache-size = <0x80000>;
+ cache-line-size = <128>;
+ cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
+ cache-level = <2>;
+ cache-unified;
+ next-level-cache = <&l3_cache>;
+ };
+
+ l2_cache_l3: l2-cache-l3 {
+ compatible = "cache";
+ cache-size = <0x80000>;
+ cache-line-size = <128>;
+ cache-sets = <1024>; // 512KiB(size)/64(line-size)=8192ways/8-way set
+ cache-level = <2>;
+ cache-unified;
+ next-level-cache = <&l3_cache>;
+ };
+
+ /* Source for cache-line-size and cache-sets:
+ * https://developer.arm.com/documentation/100453/0401/L3-cache?lang=en
+ * Source for cache-size:
+ * https://www.raspberrypi.com/documentation/computers/processors.html#bcm2712
+ */
+ l3_cache: l3-cache {
+ compatible = "cache";
+ cache-size = <0x200000>;
+ cache-line-size = <64>;
+ cache-sets = <2048>; // 2MiB(size)/64(line-size)=32768ways/16-way set
+ cache-level = <3>;
+ };
+ };
+
+ psci {
+ method = "smc";
+ compatible = "arm,psci-1.0", "arm,psci-0.2", "arm,psci";
+ cpu_on = <0xc4000003>;
+ cpu_suspend = <0xc4000001>;
+ cpu_off = <0x84000002>;
+ };
+
+ axi: axi {
+ compatible = "simple-bus";
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ ranges = <0x00 0x00000000 0x00 0x00000000 0x10 0x00000000>,
+ <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>,
+ <0x14 0x00000000 0x14 0x00000000 0x04 0x00000000>,
+ <0x18 0x00000000 0x18 0x00000000 0x04 0x00000000>,
+ <0x1c 0x00000000 0x1c 0x00000000 0x04 0x00000000>;
+
+ dma-ranges = <0x00 0x00000000 0x00 0x00000000 0x10 0x00000000>,
+ <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>,
+ <0x14 0x00000000 0x14 0x00000000 0x04 0x00000000>,
+ <0x18 0x00000000 0x18 0x00000000 0x04 0x00000000>,
+ <0x1c 0x00000000 0x1c 0x00000000 0x04 0x00000000>;
+
+ vc4: gpu {
+ compatible = "brcm,bcm2712-vc6";
+ };
+
+ iommu2: iommu@5100 {
+ /* IOMMU2 for PISP-BE, HEVC; and (unused) H264 accelerators */
+ compatible = "brcm,bcm2712-iommu";
+ reg = <0x10 0x5100 0x0 0x80>;
+ cache = <&iommuc>;
+ #iommu-cells = <0>;
+ };
+
+ iommu4: iommu@5200 {
+ /* IOMMU4 for HVS, MPL/TXP; and (unused) Unicam, PISP-FE, MiniBVN */
+ compatible = "brcm,bcm2712-iommu";
+ reg = <0x10 0x5200 0x0 0x80>;
+ cache = <&iommuc>;
+ #iommu-cells = <0>;
+ #interconnect-cells = <0>;
+ };
+
+ iommu5: iommu@5280 {
+ /* IOMMU5 for PCIe2 (RP1); and (unused) BSTM */
+ compatible = "brcm,bcm2712-iommu";
+ reg = <0x10 0x5280 0x0 0x80>;
+ cache = <&iommuc>;
+ #iommu-cells = <0>;
+ dma-iova-offset = <0x10 0x00000000>; // HACK for RP1 masters over PCIe
+ };
+
+ iommuc: iommuc@5b00 {
+ compatible = "brcm,bcm2712-iommuc";
+ reg = <0x10 0x5b00 0x0 0x80>;
+ };
+
+ dma32: dma@10000 {
+ compatible = "brcm,bcm2712-dma";
+ reg = <0x10 0x00010000 0 0x600>;
+ interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "dma0",
+ "dma1",
+ "dma2",
+ "dma3",
+ "dma4",
+ "dma5";
+ #dma-cells = <1>;
+ brcm,dma-channel-mask = <0x0035>;
+ };
+
+ dma40: dma@10600 {
+ compatible = "brcm,bcm2712-dma";
+ reg = <0x10 0x00010600 0 0x600>;
+ interrupts =
+ <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>, /* dma4 6 */
+ <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>, /* dma4 7 */
+ <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>, /* dma4 8 */
+ <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>, /* dma4 9 */
+ <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>, /* dma4 10 */
+ <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>; /* dma4 11 */
+ interrupt-names = "dma6",
+ "dma7",
+ "dma8",
+ "dma9",
+ "dma10",
+ "dma11";
+ #dma-cells = <1>;
+ brcm,dma-channel-mask = <0x0fc0>;
+ };
+
+ // Single-lane Gen3 PCIe
+ // Outbound window at 0x14_000000-0x17_ffffff
+ pcie0: pcie@100000 {
+ compatible = "brcm,bcm2712-pcie";
+ reg = <0x10 0x00100000 0x0 0x9310>;
+ device_type = "pci";
+ max-link-speed = <2>;
+ #address-cells = <3>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ /*
+ * Unused interrupts:
+ * 208: AER
+ * 215: NMI
+ * 216: PME
+ */
+ interrupt-parent = <&gicv2>;
+ interrupts = <GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "pcie", "msi";
+ interrupt-map-mask = <0x0 0x0 0x0 0x7>;
+ interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 209
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &gicv2 GIC_SPI 210
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &gicv2 GIC_SPI 211
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &gicv2 GIC_SPI 212
+ IRQ_TYPE_LEVEL_HIGH>;
+ resets = <&bcm_reset 5>, <&bcm_reset 42>, <&pcie_rescal>;
+ reset-names = "swinit", "bridge", "rescal";
+ msi-controller;
+ msi-parent = <&pcie0>;
+
+ ranges = <0x02000000 0x00 0x00000000
+ 0x17 0x00000000
+ 0x0 0xfffffffc>,
+ <0x43000000 0x04 0x00000000
+ 0x14 0x00000000
+ 0x3 0x00000000>;
+
+ dma-ranges = <0x43000000 0x10 0x00000000
+ 0x00 0x00000000
+ 0x10 0x00000000>;
+
+ status = "disabled";
+ };
+
+ // Single-lane Gen3 PCIe
+ // Outbound window at 0x18_000000-0x1b_ffffff
+ pcie1: pcie@110000 {
+ compatible = "brcm,bcm2712-pcie";
+ reg = <0x10 0x00110000 0x0 0x9310>;
+ device_type = "pci";
+ max-link-speed = <2>;
+ #address-cells = <3>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ /*
+ * Unused interrupts:
+ * 218: AER
+ * 225: NMI
+ * 226: PME
+ */
+ interrupt-parent = <&gicv2>;
+ interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "pcie", "msi";
+ interrupt-map-mask = <0x0 0x0 0x0 0x7>;
+ interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 219
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &gicv2 GIC_SPI 220
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &gicv2 GIC_SPI 221
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &gicv2 GIC_SPI 222
+ IRQ_TYPE_LEVEL_HIGH>;
+ resets = <&bcm_reset 7>, <&bcm_reset 43>, <&pcie_rescal>;
+ reset-names = "swinit", "bridge", "rescal";
+ msi-controller;
+ msi-parent = <&mip1>;
+
+ ranges = <0x02000000 0x00 0x00000000
+ 0x1b 0x00000000
+ 0x00 0xfffffffc>,
+ <0x43000000 0x04 0x00000000
+ 0x18 0x00000000
+ 0x03 0x00000000>;
+
+ dma-ranges = <0x03000000 0x10 0x00000000
+ 0x00 0x00000000
+ 0x10 0x00000000>;
+
+ status = "disabled";
+ };
+
+ pcie_rescal: reset-controller@119500 {
+ compatible = "brcm,bcm7216-pcie-sata-rescal";
+ reg = <0x10 0x00119500 0x0 0x10>;
+ #reset-cells = <0>;
+ };
+
+ // Quad-lane Gen3 PCIe
+ // Outbound window at 0x1c_000000-0x1f_ffffff
+ pcie2: pcie@120000 {
+ compatible = "brcm,bcm2712-pcie";
+ reg = <0x10 0x00120000 0x0 0x9310>;
+ device_type = "pci";
+ max-link-speed = <2>;
+ #address-cells = <3>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ /*
+ * Unused interrupts:
+ * 228: AER
+ * 235: NMI
+ * 236: PME
+ */
+ interrupt-parent = <&gicv2>;
+ interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "pcie", "msi";
+ interrupt-map-mask = <0x0 0x0 0x0 0x7>;
+ interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 229
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 2 &gicv2 GIC_SPI 230
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 3 &gicv2 GIC_SPI 231
+ IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 0 4 &gicv2 GIC_SPI 232
+ IRQ_TYPE_LEVEL_HIGH>;
+ resets = <&bcm_reset 32>, <&bcm_reset 44>, <&pcie_rescal>;
+ reset-names = "swinit", "bridge", "rescal";
+ msi-controller;
+ msi-parent = <&mip0>;
+
+ // ~4GB, 32-bit, not-prefetchable at PCIe 00_00000000
+ ranges = <0x02000000 0x00 0x00000000
+ 0x1f 0x00000000
+ 0x0 0xfffffffc>,
+ // 12GB, 64-bit, prefetchable at PCIe 04_00000000
+ <0x43000000 0x04 0x00000000
+ 0x1c 0x00000000
+ 0x03 0x00000000>;
+
+ // 64GB system RAM space at PCIe 10_00000000
+ dma-ranges = <0x02000000 0x00 0x00000000
+ 0x1f 0x00000000
+ 0x00 0x00400000>,
+ <0x43000000 0x10 0x00000000
+ 0x00 0x00000000
+ 0x10 0x00000000>;
+
+ status = "disabled";
+ };
+
+ mip0: msi-controller@130000 {
+ compatible = "brcm,bcm2712-mip-intc";
+ reg = <0x10 0x00130000 0x0 0xc0>;
+ msi-controller;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ brcm,msi-base-spi = <128>;
+ brcm,msi-num-spis = <64>;
+ brcm,msi-offset = <0>;
+ brcm,msi-pci-addr = <0xff 0xfffff000>;
+ };
+
+ mip1: msi-controller@131000 {
+ compatible = "brcm,bcm2712-mip-intc";
+ reg = <0x10 0x00131000 0x0 0xc0>;
+ msi-controller;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ brcm,msi-base-spi = <247>;
+ /* Actually 20 total, but the others are
+ * both sparse and non-consecutive */
+ brcm,msi-num-spis = <8>;
+ brcm,msi-offset = <8>;
+ brcm,msi-pci-addr = <0xff 0xffffe000>;
+ };
+
+ syscon_piarbctl: syscon@400018 {
+ compatible = "brcm,syscon-piarbctl", "syscon", "simple-mfd";
+ reg = <0x10 0x00400018 0x0 0x18>;
+ };
+
+ usb: usb@480000 {
+ compatible = "brcm,bcm2835-usb";
+ reg = <0x10 0x00480000 0x0 0x10000>;
+ interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clocks = <&clk_usb>;
+ clock-names = "otg";
+ phys = <&usbphy>;
+ phy-names = "usb2-phy";
+ status = "disabled";
+ };
+
+ rpivid: codec@800000 {
+ compatible = "raspberrypi,rpivid-vid-decoder";
+ reg = <0x10 0x00800000 0x0 0x10000>, /* HEVC */
+ <0x10 0x00840000 0x0 0x1000>; /* INTC */
+ reg-names = "hevc",
+ "intc";
+
+ interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&firmware_clocks 11>;
+ clock-names = "hevc";
+ iommus = <&iommu2>;
+ status = "disabled";
+ };
+
+ sdio1: mmc@fff000 {
+ compatible = "brcm,bcm2712-sdhci";
+ reg = <0x10 0x00fff000 0x0 0x260>,
+ <0x10 0x00fff400 0x0 0x200>,
+ <0x10 0x015040b0 0x0 0x4>, // Bus isolation control
+ <0x10 0x015200f0 0x0 0x24>; // LCPLL control misc0-8
+ reg-names = "host", "cfg", "busisol", "lcpll";
+ interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_emmc2>;
+ sdhci-caps-mask = <0x0000C000 0x0>;
+ sdhci-caps = <0x0 0x0>;
+ mmc-ddr-3_3v;
+ };
+
+ sdio2: mmc@1100000 {
+ compatible = "brcm,bcm2712-sdhci";
+ reg = <0x10 0x01100000 0x0 0x260>,
+ <0x10 0x01100400 0x0 0x200>;
+ reg-names = "host", "cfg";
+ interrupts = <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk_emmc2>;
+ sdhci-caps-mask = <0x0000C000 0x0>;
+ sdhci-caps = <0x0 0x0>;
+ supports-cqe;
+ mmc-ddr-3_3v;
+ status = "disabled";
+ };
+
+ bcm_reset: reset-controller@1504318 {
+ compatible = "brcm,brcmstb-reset";
+ reg = <0x10 0x01504318 0x0 0x30>;
+ #reset-cells = <1>;
+ };
+
+ v3d: v3d@2000000 {
+ compatible = "brcm,2712-v3d";
+ reg = <0x10 0x02000000 0x0 0x4000>,
+ <0x10 0x02008000 0x0 0x6000>;
+ reg-names = "hub", "core0";
+
+ power-domains = <&pm BCM2835_POWER_DOMAIN_GRAFX_V3D>;
+ resets = <&pm BCM2835_RESET_V3D>;
+ clocks = <&firmware_clocks 5>;
+ clocks-names = "v3d";
+ interrupts = <GIC_SPI 250 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 249 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ };
+
+ gicv2: interrupt-controller@7fff9000 {
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ compatible = "arm,gic-400";
+ reg = <0x10 0x7fff9000 0x0 0x1000>,
+ <0x10 0x7fffa000 0x0 0x2000>,
+ <0x10 0x7fffc000 0x0 0x2000>,
+ <0x10 0x7fffe000 0x0 0x2000>;
+ interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
+ IRQ_TYPE_LEVEL_HIGH)>;
+ };
+
+ pisp_be: pisp_be@880000 {
+ compatible = "raspberrypi,pispbe";
+ reg = <0x10 0x00880000 0x0 0x4000>;
+ interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&firmware_clocks 7>;
+ clocks-names = "isp_be";
+ status = "okay";
+ iommus = <&iommu2>;
+ };
+ };
+
+ clocks {
+ /* The oscillator is the root of the clock tree. */
+ clk_osc: clk-osc {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "osc";
+ clock-frequency = <54000000>;
+ };
+
+ clk_usb: clk-usb {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "otg";
+ clock-frequency = <480000000>;
+ };
+
+ clk_vpu: clk_vpu {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <750000000>;
+ clock-output-names = "vpu-clock";
+ };
+
+ clk_uart: clk_uart {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <9216000>;
+ clock-output-names = "uart-clock";
+ };
+
+ clk_emmc2: clk_emmc2 {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ clock-frequency = <200000000>;
+ clock-output-names = "emmc2-clock";
+ };
+ };
+
+ usbphy: phy {
+ compatible = "usb-nop-xceiv";
+ #phy-cells = <0>;
+ };
+};
--- /dev/null
+++ b/arch/arm64/boot/dts/broadcom/rp1.dtsi
@@ -0,0 +1,1287 @@
+#include <dt-bindings/clock/rp1.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/mfd/rp1.h>
+
+&rp1_target {
+ rp1: rp1 {
+ compatible = "simple-bus";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ #interrupt-cells = <2>;
+ interrupt-controller;
+ interrupt-parent = <&rp1>;
+
+ // ranges and dma-ranges must be provided by the includer
+
+ rp1_clocks: clocks@18000 {
+ compatible = "raspberrypi,rp1-clocks";
+ #clock-cells = <1>;
+ reg = <0xc0 0x40018000 0x0 0x10038>;
+ clocks = <&clk_xosc>;
+
+ assigned-clocks = <&rp1_clocks RP1_PLL_SYS_CORE>,
+ <&rp1_clocks RP1_PLL_AUDIO_CORE>,
+ // RP1_PLL_VIDEO_CORE and dividers are now managed by VEC,DPI drivers
+ <&rp1_clocks RP1_PLL_SYS>,
+ <&rp1_clocks RP1_PLL_SYS_SEC>,
+ <&rp1_clocks RP1_PLL_AUDIO>,
+ <&rp1_clocks RP1_PLL_AUDIO_SEC>,
+ <&rp1_clocks RP1_CLK_SYS>,
+ <&rp1_clocks RP1_PLL_SYS_PRI_PH>,
+ // RP1_CLK_SLOW_SYS is used for the frequency counter (FC0)
+ <&rp1_clocks RP1_CLK_SLOW_SYS>,
+ <&rp1_clocks RP1_CLK_SDIO_TIMER>,
+ <&rp1_clocks RP1_CLK_SDIO_ALT_SRC>,
+ <&rp1_clocks RP1_CLK_ETH_TSU>;
+
+ assigned-clock-rates = <1000000000>, // RP1_PLL_SYS_CORE
+ <1536000000>, // RP1_PLL_AUDIO_CORE
+ <200000000>, // RP1_PLL_SYS
+ <125000000>, // RP1_PLL_SYS_SEC
+ <61440000>, // RP1_PLL_AUDIO
+ <192000000>, // RP1_PLL_AUDIO_SEC
+ <200000000>, // RP1_CLK_SYS
+ <100000000>, // RP1_PLL_SYS_PRI_PH
+ // Must match the XOSC frequency
+ <50000000>, // RP1_CLK_SLOW_SYS
+ <1000000>, // RP1_CLK_SDIO_TIMER
+ <200000000>, // RP1_CLK_SDIO_ALT_SRC
+ <50000000>; // RP1_CLK_ETH_TSU
+ };
+
+ rp1_uart0: serial@30000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x40030000 0x0 0x100>;
+ interrupts = <RP1_INT_UART0 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ dmas = <&rp1_dma RP1_DMA_UART0_TX>,
+ <&rp1_dma RP1_DMA_UART0_RX>;
+ dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_uart1: serial@34000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x40034000 0x0 0x100>;
+ interrupts = <RP1_INT_UART1 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ // dmas = <&rp1_dma RP1_DMA_UART1_TX>,
+ // <&rp1_dma RP1_DMA_UART1_RX>;
+ // dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_uart2: serial@38000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x40038000 0x0 0x100>;
+ interrupts = <RP1_INT_UART2 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ // dmas = <&rp1_dma RP1_DMA_UART2_TX>,
+ // <&rp1_dma RP1_DMA_UART2_RX>;
+ // dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_uart3: serial@3c000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x4003c000 0x0 0x100>;
+ interrupts = <RP1_INT_UART3 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ // dmas = <&rp1_dma RP1_DMA_UART3_TX>,
+ // <&rp1_dma RP1_DMA_UART3_RX>;
+ // dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_uart4: serial@40000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x40040000 0x0 0x100>;
+ interrupts = <RP1_INT_UART4 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ // dmas = <&rp1_dma RP1_DMA_UART4_TX>,
+ // <&rp1_dma RP1_DMA_UART4_RX>;
+ // dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_uart5: serial@44000 {
+ compatible = "arm,pl011-axi";
+ reg = <0xc0 0x40044000 0x0 0x100>;
+ interrupts = <RP1_INT_UART5 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_UART &rp1_clocks RP1_PLL_SYS_PRI_PH>;
+ clock-names = "uartclk", "apb_pclk";
+ // dmas = <&rp1_dma RP1_DMA_UART5_TX>,
+ // <&rp1_dma RP1_DMA_UART5_RX>;
+ // dma-names = "tx", "rx";
+ pinctrl-names = "default";
+ arm,primecell-periphid = <0x00541011>;
+ uart-has-rtscts;
+ cts-event-workaround;
+ skip-init;
+ status = "disabled";
+ };
+
+ rp1_spi8: spi@4c000 {
+ reg = <0xc0 0x4004c000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI8 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI8_TX>,
+ <&rp1_dma RP1_DMA_SPI8_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_spi0: spi@50000 {
+ reg = <0xc0 0x40050000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI0 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI0_TX>,
+ <&rp1_dma RP1_DMA_SPI0_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_spi1: spi@54000 {
+ reg = <0xc0 0x40054000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI1 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI1_TX>,
+ <&rp1_dma RP1_DMA_SPI1_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_spi2: spi@58000 {
+ reg = <0xc0 0x40058000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI2 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI2_TX>,
+ <&rp1_dma RP1_DMA_SPI2_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_spi3: spi@5c000 {
+ reg = <0xc0 0x4005c000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI3 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI3_TX>,
+ <&rp1_dma RP1_DMA_SPI3_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ // SPI4 is a target/slave interface
+ rp1_spi4: spi@60000 {
+ reg = <0xc0 0x40060000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI4 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <0>;
+ #size-cells = <0>;
+ num-cs = <1>;
+ spi-slave;
+ dmas = <&rp1_dma RP1_DMA_SPI4_TX>,
+ <&rp1_dma RP1_DMA_SPI4_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+
+ slave {
+ compatible = "spidev";
+ spi-max-frequency = <1000000>;
+ };
+ };
+
+ rp1_spi5: spi@64000 {
+ reg = <0xc0 0x40064000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI5 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI5_TX>,
+ <&rp1_dma RP1_DMA_SPI5_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_spi6: spi@68000 {
+ reg = <0xc0 0x40068000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI6 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ num-cs = <2>;
+ dmas = <&rp1_dma RP1_DMA_SPI6_TX>,
+ <&rp1_dma RP1_DMA_SPI6_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ // SPI7 is a target/slave interface
+ rp1_spi7: spi@6c000 {
+ reg = <0xc0 0x4006c000 0x0 0x130>;
+ compatible = "snps,dw-apb-ssi";
+ interrupts = <RP1_INT_SPI7 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ clock-names = "ssi_clk";
+ #address-cells = <0>;
+ #size-cells = <0>;
+ num-cs = <1>;
+ spi-slave;
+ dmas = <&rp1_dma RP1_DMA_SPI7_TX>,
+ <&rp1_dma RP1_DMA_SPI7_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+
+ slave {
+ compatible = "spidev";
+ spi-max-frequency = <1000000>;
+ };
+ };
+
+ rp1_i2c0: i2c@70000 {
+ reg = <0xc0 0x40070000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C0 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c1: i2c@74000 {
+ reg = <0xc0 0x40074000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C1 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c2: i2c@78000 {
+ reg = <0xc0 0x40078000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C2 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c3: i2c@7c000 {
+ reg = <0xc0 0x4007c000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C3 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c4: i2c@80000 {
+ reg = <0xc0 0x40080000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C4 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c5: i2c@84000 {
+ reg = <0xc0 0x40084000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C5 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_i2c6: i2c@88000 {
+ reg = <0xc0 0x40088000 0x0 0x1000>;
+ compatible = "snps,designware-i2c";
+ interrupts = <RP1_INT_I2C6 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS>;
+ i2c-scl-rising-time-ns = <65>;
+ i2c-scl-falling-time-ns = <100>;
+ status = "disabled";
+ };
+
+ rp1_pwm0: pwm@98000 {
+ compatible = "raspberrypi,rp1-pwm";
+ reg = <0xc0 0x40098000 0x0 0x100>;
+ #pwm-cells = <3>;
+ clocks = <&rp1_clocks RP1_CLK_PWM0>;
+ assigned-clocks = <&rp1_clocks RP1_CLK_PWM0>;
+ assigned-clock-rates = <50000000>;
+ status = "disabled";
+ };
+
+ rp1_pwm1: pwm@9c000 {
+ compatible = "raspberrypi,rp1-pwm";
+ reg = <0xc0 0x4009c000 0x0 0x100>;
+ #pwm-cells = <3>;
+ clocks = <&rp1_clocks RP1_CLK_PWM1>;
+ assigned-clocks = <&rp1_clocks RP1_CLK_PWM1>;
+ assigned-clock-rates = <50000000>;
+ status = "disabled";
+ };
+
+ rp1_i2s0: i2s@a0000 {
+ reg = <0xc0 0x400a0000 0x0 0x1000>;
+ compatible = "snps,designware-i2s";
+ // Providing an interrupt disables DMA
+ // interrupts = <RP1_INT_I2S0 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_I2S>;
+ clock-names = "i2sclk";
+ #sound-dai-cells = <0>;
+ dmas = <&rp1_dma RP1_DMA_I2S0_TX>,<&rp1_dma RP1_DMA_I2S0_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_i2s1: i2s@a4000 {
+ reg = <0xc0 0x400a4000 0x0 0x1000>;
+ compatible = "snps,designware-i2s";
+ // Providing an interrupt disables DMA
+ // interrupts = <RP1_INT_I2S1 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_I2S>;
+ clock-names = "i2sclk";
+ #sound-dai-cells = <0>;
+ dmas = <&rp1_dma RP1_DMA_I2S1_TX>,<&rp1_dma RP1_DMA_I2S1_RX>;
+ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+ rp1_i2s2: i2s@a8000 {
+ reg = <0xc0 0x400a8000 0x0 0x1000>;
+ compatible = "snps,designware-i2s";
+ // Providing an interrupt disables DMA
+ // interrupts = <RP1_INT_I2S2 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_I2S>;
+ status = "disabled";
+ };
+
+ rp1_sdio_clk0: sdio_clk0@b0004 {
+ compatible = "raspberrypi,rp1-sdio-clk";
+ reg = <0xc0 0x400b0004 0x0 0x1c>;
+ clocks = <&sdio_src &sdhci_core>;
+ clock-names = "src", "base";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ rp1_sdio_clk1: sdio_clk1@b4004 {
+ compatible = "raspberrypi,rp1-sdio-clk";
+ reg = <0xc0 0x400b4004 0x0 0x1c>;
+ clocks = <&sdio_src &sdhci_core>;
+ clock-names = "src", "base";
+ #clock-cells = <0>;
+ status = "disabled";
+ };
+
+ rp1_adc: adc@c8000 {
+ compatible = "raspberrypi,rp1-adc";
+ reg = <0xc0 0x400c8000 0x0 0x4000>;
+ clocks = <&rp1_clocks RP1_CLK_ADC>;
+ clock-names = "adcclk";
+ #clock-cells = <0>;
+ vref-supply = <&rp1_vdd_3v3>;
+ status = "disabled";
+ };
+
+ rp1_gpio: gpio@d0000 {
+ reg = <0xc0 0x400d0000 0x0 0xc000>,
+ <0xc0 0x400e0000 0x0 0xc000>,
+ <0xc0 0x400f0000 0x0 0xc000>;
+ compatible = "raspberrypi,rp1-gpio";
+ interrupts = <RP1_INT_IO_BANK0 IRQ_TYPE_LEVEL_HIGH>,
+ <RP1_INT_IO_BANK1 IRQ_TYPE_LEVEL_HIGH>,
+ <RP1_INT_IO_BANK2 IRQ_TYPE_LEVEL_HIGH>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ gpio-ranges = <&rp1_gpio 0 0 54>;
+
+ rp1_uart0_14_15: rp1_uart0_14_15 {
+ pin_txd {
+ function = "uart0";
+ pins = "gpio14";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart0";
+ pins = "gpio15";
+ bias-pull-up;
+ };
+ };
+ rp1_uart0_ctsrts_16_17: rp1_uart0_ctsrts_16_17 {
+ pin_cts {
+ function = "uart0";
+ pins = "gpio16";
+ bias-pull-up;
+ };
+ pin_rts {
+ function = "uart0";
+ pins = "gpio17";
+ bias-disable;
+ };
+ };
+ rp1_uart1_0_1: rp1_uart1_0_1 {
+ pin_txd {
+ function = "uart1";
+ pins = "gpio0";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart1";
+ pins = "gpio1";
+ bias-pull-up;
+ };
+ };
+ rp1_uart1_ctsrts_2_3: rp1_uart1_ctsrts_2_3 {
+ pin_cts {
+ function = "uart1";
+ pins = "gpio2";
+ bias-pull-up;
+ };
+ pin_rts {
+ function = "uart1";
+ pins = "gpio3";
+ bias-disable;
+ };
+ };
+ rp1_uart2_4_5: rp1_uart2_4_5 {
+ pin_txd {
+ function = "uart2";
+ pins = "gpio4";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart2";
+ pins = "gpio5";
+ bias-pull-up;
+ };
+ };
+ rp1_uart2_ctsrts_6_7: rp1_uart2_ctsrts_6_7 {
+ pin_cts {
+ function = "uart2";
+ pins = "gpio6";
+ bias-pull-up;
+ };
+ pin_rts {
+ function = "uart2";
+ pins = "gpio7";
+ bias-disable;
+ };
+ };
+ rp1_uart3_8_9: rp1_uart3_8_9 {
+ pin_txd {
+ function = "uart3";
+ pins = "gpio8";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart3";
+ pins = "gpio9";
+ bias-pull-up;
+ };
+ };
+ rp1_uart3_ctsrts_10_11: rp1_uart3_ctsrts_10_11 {
+ pin_cts {
+ function = "uart3";
+ pins = "gpio10";
+ bias-pull-up;
+ };
+ pin_rts {
+ function = "uart3";
+ pins = "gpio11";
+ bias-disable;
+ };
+ };
+ rp1_uart4_12_13: rp1_uart4_12_13 {
+ pin_txd {
+ function = "uart4";
+ pins = "gpio12";
+ bias-disable;
+ };
+ pin_rxd {
+ function = "uart4";
+ pins = "gpio13";
+ bias-pull-up;
+ };
+ };
+ rp1_uart4_ctsrts_14_15: rp1_uart4_ctsrts_14_15 {
+ pin_cts {
+ function = "uart4";
+ pins = "gpio14";
+ bias-pull-up;
+ };
+ pin_rts {
+ function = "uart4";
+ pins = "gpio15";
+ bias-disable;
+ };
+ };
+
+ rp1_sdio0_22_27: rp1_sdio0_22_27 {
+ pin_clk {
+ function = "sd0";
+ pins = "gpio22";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ pin_cmd {
+ function = "sd0";
+ pins = "gpio23";
+ bias-pull-up;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ pins_dat {
+ function = "sd0";
+ pins = "gpio24", "gpio25", "gpio26", "gpio27";
+ bias-pull-up;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ };
+
+ rp1_sdio1_28_33: rp1_sdio1_28_33 {
+ pin_clk {
+ function = "sd1";
+ pins = "gpio28";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ pin_cmd {
+ function = "sd1";
+ pins = "gpio29";
+ bias-pull-up;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ pins_dat {
+ function = "sd1";
+ pins = "gpio30", "gpio31", "gpio32", "gpio33";
+ bias-pull-up;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+ };
+
+ rp1_i2s0_18_21: rp1_i2s0_18_21 {
+ function = "i2s0";
+ pins = "gpio18", "gpio19", "gpio20", "gpio21";
+ bias-disable;
+ };
+
+ rp1_i2s1_18_21: rp1_i2s1_18_21 {
+ function = "i2s1";
+ pins = "gpio18", "gpio19", "gpio20", "gpio21";
+ bias-disable;
+ };
+
+ rp1_i2c4_34_35: rp1_i2c4_34_35 {
+ function = "i2c4";
+ pins = "gpio34", "gpio35";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c6_38_39: rp1_i2c6_38_39 {
+ function = "i2c6";
+ pins = "gpio38", "gpio39";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c4_40_41: rp1_i2c4_40_41 {
+ function = "i2c4";
+ pins = "gpio40", "gpio41";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c5_44_45: rp1_i2c5_44_45 {
+ function = "i2c5";
+ pins = "gpio44", "gpio45";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c0_0_1: rp1_i2c0_0_1 {
+ function = "i2c0";
+ pins = "gpio0", "gpio1";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c0_8_9: rp1_i2c0_8_9 {
+ function = "i2c0";
+ pins = "gpio8", "gpio9";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c1_2_3: rp1_i2c1_2_3 {
+ function = "i2c1";
+ pins = "gpio2", "gpio3";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c1_10_11: rp1_i2c1_10_11 {
+ function = "i2c1";
+ pins = "gpio10", "gpio11";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c2_4_5: rp1_i2c2_4_5 {
+ function = "i2c2";
+ pins = "gpio4", "gpio5";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c2_12_13: rp1_i2c2_12_13 {
+ function = "i2c2";
+ pins = "gpio12", "gpio13";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c3_6_7: rp1_i2c3_6_7 {
+ function = "i2c3";
+ pins = "gpio6", "gpio7";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c3_14_15: rp1_i2c3_14_15 {
+ function = "i2c3";
+ pins = "gpio14", "gpio15";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+ rp1_i2c3_22_23: rp1_i2c3_22_23 {
+ function = "i2c3";
+ pins = "gpio22", "gpio23";
+ drive-strength = <12>;
+ bias-pull-up;
+ };
+
+ // DPI mappings with HSYNC,VSYNC but without PIXCLK,DE
+ rp1_dpi_16bit_gpio2: rp1_dpi_16bit_gpio2 { /* Mode 2, not fully supported by RP1 */
+ function = "dpi";
+ pins = "gpio2", "gpio3", "gpio4", "gpio5",
+ "gpio6", "gpio7", "gpio8", "gpio9",
+ "gpio10", "gpio11", "gpio12", "gpio13",
+ "gpio14", "gpio15", "gpio16", "gpio17",
+ "gpio18", "gpio19";
+ bias-disable;
+ };
+ rp1_dpi_16bit_cpadhi_gpio2: rp1_dpi_16bit_cpadhi_gpio2 { /* Mode 3 */
+ function = "dpi";
+ pins = "gpio2", "gpio3", "gpio4", "gpio5",
+ "gpio6", "gpio7", "gpio8",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio20", "gpio21", "gpio22", "gpio23",
+ "gpio24";
+ bias-disable;
+ };
+ rp1_dpi_16bit_pad666_gpio2: rp1_dpi_16bit_pad666_gpio2 { /* Mode 4 */
+ function = "dpi";
+ pins = "gpio2", "gpio3",
+ "gpio5", "gpio6", "gpio7", "gpio8",
+ "gpio9",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio21", "gpio22", "gpio23", "gpio24",
+ "gpio25";
+ bias-disable;
+ };
+ rp1_dpi_18bit_gpio2: rp1_dpi_18bit_gpio2 { /* Mode 5, not fully supported by RP1 */
+ function = "dpi";
+ pins = "gpio2", "gpio3", "gpio4", "gpio5",
+ "gpio6", "gpio7", "gpio8", "gpio9",
+ "gpio10", "gpio11", "gpio12", "gpio13",
+ "gpio14", "gpio15", "gpio16", "gpio17",
+ "gpio18", "gpio19", "gpio20", "gpio21";
+ bias-disable;
+ };
+ rp1_dpi_18bit_cpadhi_gpio2: rp1_dpi_18bit_cpadhi_gpio2 { /* Mode 6 */
+ function = "dpi";
+ pins = "gpio2", "gpio3", "gpio4", "gpio5",
+ "gpio6", "gpio7", "gpio8", "gpio9",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio20", "gpio21", "gpio22", "gpio23",
+ "gpio24", "gpio25";
+ bias-disable;
+ };
+ rp1_dpi_24bit_gpio2: rp1_dpi_24bit_gpio2 { /* Mode 7 */
+ function = "dpi";
+ pins = "gpio2", "gpio3", "gpio4", "gpio5",
+ "gpio6", "gpio7", "gpio8", "gpio9",
+ "gpio10", "gpio11", "gpio12", "gpio13",
+ "gpio14", "gpio15", "gpio16", "gpio17",
+ "gpio18", "gpio19", "gpio20", "gpio21",
+ "gpio22", "gpio23", "gpio24", "gpio25",
+ "gpio26", "gpio27";
+ bias-disable;
+ };
+ rp1_dpi_hvsync: rp1_dpi_hvsync { /* Sync only, for use with int VDAC */
+ function = "dpi";
+ pins = "gpio2", "gpio3";
+ bias-disable;
+ };
+
+ // More DPI mappings, including PIXCLK,DE on GPIOs 0,1
+ rp1_dpi_16bit_gpio0: rp1_dpi_16bit_gpio0 { /* Mode 2, not fully supported by RP1 */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio4", "gpio5", "gpio6", "gpio7",
+ "gpio8", "gpio9", "gpio10", "gpio11",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17", "gpio18", "gpio19";
+ bias-disable;
+ };
+ rp1_dpi_16bit_cpadhi_gpio0: rp1_dpi_16bit_cpadhi_gpio0 { /* Mode 3 */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio4", "gpio5", "gpio6", "gpio7",
+ "gpio8",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio20", "gpio21", "gpio22", "gpio23",
+ "gpio24";
+ bias-disable;
+ };
+ rp1_dpi_16bit_pad666_gpio0: rp1_dpi_16bit_pad666_gpio0 { /* Mode 4 */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio5", "gpio6", "gpio7", "gpio8",
+ "gpio9",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio21", "gpio22", "gpio23", "gpio24",
+ "gpio25";
+ bias-disable;
+ };
+ rp1_dpi_18bit_gpio0: rp1_dpi_18bit_gpio0 { /* Mode 5, not fully supported by RP1 */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio4", "gpio5", "gpio6", "gpio7",
+ "gpio8", "gpio9", "gpio10", "gpio11",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17", "gpio18", "gpio19",
+ "gpio20", "gpio21";
+ bias-disable;
+ };
+ rp1_dpi_18bit_cpadhi_gpio0: rp1_dpi_18bit_cpadhi_gpio0 { /* Mode 6 */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio4", "gpio5", "gpio6", "gpio7",
+ "gpio8", "gpio9",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17",
+ "gpio20", "gpio21", "gpio22", "gpio23",
+ "gpio24", "gpio25";
+ bias-disable;
+ };
+ rp1_dpi_24bit_gpio0: rp1_dpi_24bit_gpio0 { /* Mode 7 -- All GPIOs used! */
+ function = "dpi";
+ pins = "gpio0", "gpio1", "gpio2", "gpio3",
+ "gpio4", "gpio5", "gpio6", "gpio7",
+ "gpio8", "gpio9", "gpio10", "gpio11",
+ "gpio12", "gpio13", "gpio14", "gpio15",
+ "gpio16", "gpio17", "gpio18", "gpio19",
+ "gpio20", "gpio21", "gpio22", "gpio23",
+ "gpio24", "gpio25", "gpio26", "gpio27";
+ bias-disable;
+ };
+
+ rp1_gpclksrc0_gpio4: rp1_gpclksrc0_gpio4 {
+ function = "gpclk0";
+ pins = "gpio4";
+ bias-disable;
+ };
+
+ rp1_gpclksrc0_gpio20: rp1_gpclksrc0_gpio20 {
+ function = "gpclk0";
+ pins = "gpio20";
+ bias-disable;
+ };
+
+ rp1_gpclksrc1_gpio5: rp1_gpclksrc1_gpio5 {
+ function = "gpclk1";
+ pins = "gpio5";
+ bias-disable;
+ };
+
+ rp1_gpclksrc1_gpio18: rp1_gpclksrc1_gpio18 {
+ function = "gpclk1";
+ pins = "gpio18";
+ bias-disable;
+ };
+
+ rp1_gpclksrc1_gpio21: rp1_gpclksrc1_gpio21 {
+ function = "gpclk1";
+ pins = "gpio21";
+ bias-disable;
+ };
+
+ rp1_pwm1_gpio45: rp1_pwm1_gpio45 {
+ function = "pwm1";
+ pins = "gpio45";
+ bias-pull-down;
+ };
+
+ rp1_spi0_gpio9: rp1_spi0_gpio9 {
+ function = "spi0";
+ pins = "gpio9", "gpio10", "gpio11";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi0_cs_gpio7: rp1_spi0_cs_gpio7 {
+ function = "spi0";
+ pins = "gpio7", "gpio8";
+ bias-pull-up;
+ };
+
+ rp1_spi1_gpio19: rp1_spi1_gpio19 {
+ function = "spi1";
+ pins = "gpio19", "gpio20", "gpio21";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi2_gpio1: rp1_spi2_gpio1 {
+ function = "spi2";
+ pins = "gpio1", "gpio2", "gpio3";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi3_gpio5: rp1_spi3_gpio5 {
+ function = "spi3";
+ pins = "gpio5", "gpio6", "gpio7";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi4_gpio9: rp1_spi4_gpio9 {
+ function = "spi4";
+ pins = "gpio9", "gpio10", "gpio11";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi5_gpio13: rp1_spi5_gpio13 {
+ function = "spi5";
+ pins = "gpio13", "gpio14", "gpio15";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi8_gpio49: rp1_spi8_gpio49 {
+ function = "spi8";
+ pins = "gpio49", "gpio50", "gpio51";
+ bias-disable;
+ drive-strength = <12>;
+ slew-rate = <1>;
+ };
+
+ rp1_spi8_cs_gpio52: rp1_spi8_cs_gpio52 {
+ function = "spi0";
+ pins = "gpio52", "gpio53";
+ bias-pull-up;
+ };
+ };
+
+ rp1_eth: ethernet@100000 {
+ reg = <0xc0 0x40100000 0x0 0x4000>;
+ compatible = "cdns,macb";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <RP1_INT_ETH IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&macb_pclk &macb_hclk &rp1_clocks RP1_CLK_ETH_TSU>;
+ clock-names = "pclk", "hclk", "tsu_clk";
+ phy-mode = "rgmii-id";
+ cdns,aw2w-max-pipe = /bits/ 8 <8>;
+ cdns,ar2r-max-pipe = /bits/ 8 <8>;
+ cdns,use-aw2b-fill;
+ local-mac-address = [00 00 00 00 00 00];
+ status = "disabled";
+ };
+
+ rp1_csi0: csi@110000 {
+ compatible = "raspberrypi,rp1-cfe";
+ reg = <0xc0 0x40110000 0x0 0x100>, // CSI2 DMA address
+ <0xc0 0x40114000 0x0 0x100>, // PHY/CSI Host address
+ <0xc0 0x40120000 0x0 0x100>, // MIPI CFG address
+ <0xc0 0x40124000 0x0 0x1000>; // PiSP FE address
+
+ // interrupts must match rp1_pisp_fe setup
+ interrupts = <RP1_INT_MIPI0 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
+ assigned-clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
+ assigned-clock-rates = <25000000>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ rp1_csi1: csi@128000 {
+ compatible = "raspberrypi,rp1-cfe";
+ reg = <0xc0 0x40128000 0x0 0x100>, // CSI2 DMA address
+ <0xc0 0x4012c000 0x0 0x100>, // PHY/CSI Host address
+ <0xc0 0x40138000 0x0 0x100>, // MIPI CFG address
+ <0xc0 0x4013c000 0x0 0x1000>; // PiSP FE address
+
+ // interrupts must match rp1_pisp_fe setup
+ interrupts = <RP1_INT_MIPI1 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
+ assigned-clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
+ assigned-clock-rates = <25000000>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ rp1_mmc0: mmc@180000 {
+ reg = <0xc0 0x40180000 0x0 0x100>;
+ compatible = "raspberrypi,rp1-dwcmshc";
+ interrupts = <RP1_INT_SDIO0 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS &sdhci_core
+ &rp1_clocks RP1_CLK_SDIO_TIMER
+ &rp1_sdio_clk0>;
+ clock-names = "bus", "core", "timeout", "sdio";
+ /* Bank 0 VDDIO is fixed */
+ no-1-8-v;
+ bus-width = <4>;
+ vmmc-supply = <&rp1_vdd_3v3>;
+ broken-cd;
+ status = "disabled";
+ };
+
+ rp1_mmc1: mmc@184000 {
+ reg = <0xc0 0x40184000 0x0 0x100>;
+ compatible = "raspberrypi,rp1-dwcmshc";
+ interrupts = <RP1_INT_SDIO1 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&rp1_clocks RP1_CLK_SYS &sdhci_core
+ &rp1_clocks RP1_CLK_SDIO_TIMER
+ &rp1_sdio_clk1>;
+ clock-names = "bus", "core", "timeout", "sdio";
+ bus-width = <4>;
+ vmmc-supply = <&rp1_vdd_3v3>;
+ /* Nerf SDR speeds */
+ sdhci-caps-mask = <0x3 0x0>;
+ broken-cd;
+ status = "disabled";
+ };
+
+ rp1_dma: dma@188000 {
+ reg = <0xc0 0x40188000 0x0 0x1000>;
+ compatible = "snps,axi-dma-1.01a";
+ interrupts = <RP1_INT_DMA IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&sdhci_core &rp1_clocks RP1_CLK_SYS>;
+ clock-names = "core-clk", "cfgr-clk";
+
+ #dma-cells = <1>;
+ dma-channels = <8>;
+ snps,dma-masters = <1>;
+ snps,dma-targets = <64>;
+ snps,data-width = <4>; // (8 << 4) == 128 bits
+ snps,block-size = <0x40000 0x40000 0x40000 0x40000 0x40000 0x40000 0x40000 0x40000>;
+ snps,priority = <0 1 2 3 4 5 6 7>;
+ snps,axi-max-burst-len = <8>;
+ status = "disabled";
+ };
+
+ rp1_usb0: usb@200000 {
+ reg = <0xc0 0x40200000 0x0 0x100000>;
+ compatible = "snps,dwc3";
+ dr_mode = "host";
+ usb3-lpm-capable;
+ snps,axi-pipe-limit = /bits/ 8 <8>;
+ snps,dis_rxdet_inp3_quirk;
+ snps,parkmode-disable-ss-quirk;
+ snps,parkmode-disable-hs-quirk;
+ snps,parkmode-disable-fsls-quirk;
+ snps,tx-max-burst = /bits/ 8 <8>;
+ snps,tx-thr-num-pkt = /bits/ 8 <2>;
+ interrupts = <RP1_INT_USBHOST0_0 IRQ_TYPE_EDGE_RISING>;
+ status = "disabled";
+ };
+
+ rp1_usb1: usb@300000 {
+ reg = <0xc0 0x40300000 0x0 0x100000>;
+ compatible = "snps,dwc3";
+ dr_mode = "host";
+ usb3-lpm-capable;
+ snps,axi-pipe-limit = /bits/ 8 <8>;
+ snps,dis_rxdet_inp3_quirk;
+ snps,parkmode-disable-ss-quirk;
+ snps,parkmode-disable-hs-quirk;
+ snps,parkmode-disable-fsls-quirk;
+ snps,tx-max-burst = /bits/ 8 <8>;
+ snps,tx-thr-num-pkt = /bits/ 8 <2>;
+ interrupts = <RP1_INT_USBHOST1_0 IRQ_TYPE_EDGE_RISING>;
+ status = "disabled";
+ };
+
+ rp1_dsi0: dsi@110000 {
+ compatible = "raspberrypi,rp1dsi";
+ status = "disabled";
+ reg = <0xc0 0x40118000 0x0 0x1000>, // MIPI0 DSI DMA (ArgonDPI)
+ <0xc0 0x4011c000 0x0 0x1000>, // MIPI0 DSI Host (SNPS)
+ <0xc0 0x40120000 0x0 0x1000>; // MIPI0 CFG
+
+ interrupts = <RP1_INT_MIPI0 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>,
+ <&rp1_clocks RP1_CLK_MIPI0_DPI>,
+ <&rp1_clocks RP1_CLK_MIPI0_DSI_BYTECLOCK>,
+ <&clk_xosc>, // hardwired to DSI "refclk"
+ <&rp1_clocks RP1_PLL_SYS>; // alternate parent for divide
+ clock-names = "cfgclk", "dpiclk", "byteclk", "refclk", "pllsys";
+
+ assigned-clocks = <&rp1_clocks RP1_CLK_MIPI0_CFG>;
+ assigned-clock-rates = <25000000>;
+ };
+
+ rp1_dsi1: dsi@128000 {
+ compatible = "raspberrypi,rp1dsi";
+ status = "disabled";
+ reg = <0xc0 0x40130000 0x0 0x1000>, // MIPI1 DSI DMA (ArgonDPI)
+ <0xc0 0x40134000 0x0 0x1000>, // MIPI1 DSI Host (SNPS)
+ <0xc0 0x40138000 0x0 0x1000>; // MIPI1 CFG
+
+ interrupts = <RP1_INT_MIPI1 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>,
+ <&rp1_clocks RP1_CLK_MIPI1_DPI>,
+ <&rp1_clocks RP1_CLK_MIPI1_DSI_BYTECLOCK>,
+ <&clk_xosc>, // hardwired to DSI "refclk"
+ <&rp1_clocks RP1_PLL_SYS>; // alternate parent for divide
+ clock-names = "cfgclk", "dpiclk", "byteclk", "refclk", "pllsys";
+
+ assigned-clocks = <&rp1_clocks RP1_CLK_MIPI1_CFG>;
+ assigned-clock-rates = <25000000>;
+ };
+
+ /* VEC and DPI both need to control PLL_VIDEO and cannot work together; */
+ /* config.txt should enable one or other using dtparam=vec or an overlay. */
+ rp1_vec: vec@144000 {
+ compatible = "raspberrypi,rp1vec";
+ status = "disabled";
+ reg = <0xc0 0x40144000 0x0 0x1000>, // VIDEO_OUT_VEC
+ <0xc0 0x40140000 0x0 0x1000>; // VIDEO_OUT_CFG
+
+ interrupts = <RP1_INT_VIDEO_OUT IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_VEC>;
+
+ assigned-clocks = <&rp1_clocks RP1_PLL_VIDEO_CORE>,
+ <&rp1_clocks RP1_PLL_VIDEO_SEC>,
+ <&rp1_clocks RP1_CLK_VEC>;
+ assigned-clock-rates = <1188000000>,
+ <108000000>,
+ <108000000>;
+ assigned-clock-parents = <0>,
+ <&rp1_clocks RP1_PLL_VIDEO_CORE>,
+ <&rp1_clocks RP1_PLL_VIDEO_SEC>;
+ };
+
+ rp1_dpi: dpi@148000 {
+ compatible = "raspberrypi,rp1dpi";
+ status = "disabled";
+ reg = <0xc0 0x40148000 0x0 0x1000>, // VIDEO_OUT DPI
+ <0xc0 0x40140000 0x0 0x1000>; // VIDEO_OUT_CFG
+
+ interrupts = <RP1_INT_VIDEO_OUT IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&rp1_clocks RP1_CLK_DPI>, // DPI pixel clock
+ <&rp1_clocks RP1_PLL_VIDEO>, // PLL primary divider, and
+ <&rp1_clocks RP1_PLL_VIDEO_CORE>; // VCO, which we also control
+ clock-names = "dpiclk", "plldiv", "pllcore";
+
+ assigned-clocks = <&rp1_clocks RP1_CLK_DPI>;
+ assigned-clock-parents = <&rp1_clocks RP1_PLL_VIDEO>;
+ };
+ };
+};
+
+&clocks {
+ clk_xosc: clk_xosc {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "xosc";
+ clock-frequency = <50000000>;
+ };
+ macb_pclk: macb_pclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "pclk";
+ clock-frequency = <200000000>;
+ };
+ macb_hclk: macb_hclk {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "hclk";
+ clock-frequency = <200000000>;
+ };
+ sdio_src: sdio_src {
+ // 400 MHz on FPGA. PLL sys VCO on asic
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "src";
+ clock-frequency = <1000000000>;
+ };
+ sdhci_core: sdhci_core {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "core";
+ clock-frequency = <50000000>;
+ };
+ /* GPIO derived clock sources. Each GPIO with a GPCLK function
+ * can drive its output from the respective GPCLK
+ * generator, and provide a clock source to other internal
+ * dividers. Add dummy sources here so that they can be overridden
+ * with overlays.
+ */
+ clksrc_gp0: clksrc_gp0 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ #clock-cells = <0>;
+ clock-div = <1>;
+ clock-mult = <1>;
+ clocks = <&rp1_clocks RP1_CLK_GP0>;
+ clock-output-names = "clksrc_gp0";
+ };
+ clksrc_gp1: clksrc_gp1 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ #clock-cells = <0>;
+ clock-div = <1>;
+ clock-mult = <1>;
+ clocks = <&rp1_clocks RP1_CLK_GP1>;
+ clock-output-names = "clksrc_gp1";
+ };
+ clksrc_gp2: clksrc_gp2 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ clock-div = <1>;
+ clock-mult = <1>;
+ #clock-cells = <0>;
+ clocks = <&rp1_clocks RP1_CLK_GP2>;
+ clock-output-names = "clksrc_gp2";
+ };
+ clksrc_gp3: clksrc_gp3 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ clock-div = <1>;
+ clock-mult = <1>;
+ #clock-cells = <0>;
+ clocks = <&rp1_clocks RP1_CLK_GP3>;
+ clock-output-names = "clksrc_gp3";
+ };
+ clksrc_gp4: clksrc_gp4 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ #clock-cells = <0>;
+ clock-div = <1>;
+ clock-mult = <1>;
+ clocks = <&rp1_clocks RP1_CLK_GP4>;
+ clock-output-names = "clksrc_gp4";
+ };
+ clksrc_gp5: clksrc_gp5 {
+ status = "disabled";
+ compatible = "fixed-factor-clock";
+ #clock-cells = <0>;
+ clock-div = <1>;
+ clock-mult = <1>;
+ clocks = <&rp1_clocks RP1_CLK_GP5>;
+ clock-output-names = "clksrc_gp5";
+ };
+};
+
+/ {
+ rp1_vdd_3v3: rp1_vdd_3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vdd-3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
+};