mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 10:39:04 +00:00
949 lines
22 KiB
Diff
949 lines
22 KiB
Diff
|
From c2ec9eb29f257c1dbc40e9b5e1ba93e62524b3c2 Mon Sep 17 00:00:00 2001
|
||
|
From: Phil Elwell <phil@raspberrypi.com>
|
||
|
Date: Fri, 26 Jan 2024 16:27:28 +0000
|
||
|
Subject: [PATCH 0893/1085] ARM: dts: Add CM5 DTS support
|
||
|
|
||
|
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>
|
||
|
---
|
||
|
.../dts/broadcom/bcm2712-rpi-cm5-cm4io.dts | 22 +
|
||
|
.../dts/broadcom/bcm2712-rpi-cm5-cm5io.dts | 12 +
|
||
|
.../boot/dts/broadcom/bcm2712-rpi-cm5.dtsi | 859 ++++++++++++++++++
|
||
|
arch/arm64/boot/dts/broadcom/Makefile | 2 +
|
||
|
.../dts/broadcom/bcm2712-rpi-cm5-cm4io.dts | 2 +
|
||
|
.../dts/broadcom/bcm2712-rpi-cm5-cm5io.dts | 2 +
|
||
|
6 files changed, 899 insertions(+)
|
||
|
create mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
|
||
|
create mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
|
||
|
create mode 100644 arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi
|
||
|
create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
|
||
|
create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
|
||
|
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
|
||
|
@@ -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";
|
||
|
+ };
|
||
|
+};
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
|
||
|
@@ -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";
|
||
|
+ };
|
||
|
+};
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm/boot/dts/broadcom/bcm2712-rpi-cm5.dtsi
|
||
|
@@ -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";
|
||
|
+ };
|
||
|
+};
|
||
|
--- a/arch/arm64/boot/dts/broadcom/Makefile
|
||
|
+++ b/arch/arm64/boot/dts/broadcom/Makefile
|
||
|
@@ -22,6 +22,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rp
|
||
|
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
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm4io.dts
|
||
|
@@ -0,0 +1,2 @@
|
||
|
+// SPDX-License-Identifier: GPL-2.0
|
||
|
+#include "arm/broadcom/bcm2712-rpi-cm5-cm4io.dts"
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-cm5-cm5io.dts
|
||
|
@@ -0,0 +1,2 @@
|
||
|
+// SPDX-License-Identifier: GPL-2.0
|
||
|
+#include "arm/broadcom/bcm2712-rpi-cm5-cm5io.dts"
|