ARM: dts: Add CM5 DTS support
authorPhil Elwell <phil@raspberrypi.com>
Fri, 26 Jan 2024 16:27:28 +0000 (16:27 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:38 +0000 (11:35 +0000)
The CM5 is a platform that will appear in multiple boards, each of
which may have different connectivity. Split the CM5 DTS into a common
cm5.dtsi and board-specific dts files, where the CM5 DTS file (the one
loaded by the firmware by default) is an alias for the CM5IO DTS file.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts [new file with mode: 0644]
arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts [new file with mode: 0644]
arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/broadcom/Makefile
arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts [new file with mode: 0644]
arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts [new file with mode: 0644]

diff --git a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
new file mode 100644 (file)
index 0000000..ffbfa3e
--- /dev/null
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include "bcm2712-rpi-cm5.dtsi"
+
+i2c_csi_dsi: &i2c_csi_dsi0 { }; // An alias for compatibility
+
+// 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";
+       };
+};
diff --git a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
new file mode 100644 (file)
index 0000000..15a28d7
--- /dev/null
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include "bcm2712-rpi-cm5.dtsi"
+
+i2c_csi_dsi: &i2c_csi_dsi0 { }; // An alias for compatibility
+
+/ {
+       __overrides__ {
+               i2c_csi_dsi = <&i2c_csi_dsi>, "status";
+       };
+};
diff --git a/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi
new file mode 100644 (file)
index 0000000..16ef244
--- /dev/null
@@ -0,0 +1,859 @@
+// 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-model", "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_dsi0 { }; // 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>, <&emmc_aon_cd_pins>;
+       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;
+       broken-cd;
+       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_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 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1";
+               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
+               "-", // 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";
+       };
+};
+
+&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;
+               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;
+
+               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";
+       };
+};
index 273ee18..6dd8659 100644 (file)
@@ -22,6 +22,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-cm4.dtb
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-cm4s.dtb
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2712-rpi-5-b.dtb
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2712d0-rpi-5-b.dtb
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2712-rpi-cm5-cm5io.dtb
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2712-rpi-cm5-cm4io.dtb
 
 subdir-y       += bcmbca
 subdir-y       += northstar2
diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
new file mode 100644 (file)
index 0000000..3815e40
--- /dev/null
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "arm/broadcom/bcm2712-rpi-cm5-cm4io.dts"
diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
new file mode 100644 (file)
index 0000000..e2215a3
--- /dev/null
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "arm/broadcom/bcm2712-rpi-cm5-cm5io.dts"