Merge tag 'arm-soc/for-6.18/devicetree-arm64' of https://github.com/Broadcom/stblinux into soc/dt

This pull request contains Broadcom ARM64-based SoCs Device Tree updates
for 6.18, please pull the following:

- Krzysztof fixes a DTC warning for the ARM GIC in bcm2712.dtsi

- Ivan adds the pin controller node(s), an additional GPIO controller,
  the second SDHCI controller node for SDIO Wi-Fi, and the UARTA for
  Bluetooth to the BCM2712 DTS (Raspberry Pi 5)

- Stanimir adds the Ethernet DT node and enables it for the RP1 sister
  chip

- Andrea deletes a number of redundant PCIe DT node enablement, updates
  a comment to describe the relationship between bcm2712 and RP1 and
  finally enables the USB controllers with RP1

* tag 'arm-soc/for-6.18/devicetree-arm64' of https://github.com/Broadcom/stblinux:
  arm64: dts: broadcom: Enable USB devicetree entries for Rpi5
  arm64: dts: broadcom: rp1: Add USB nodes
  arm64: dts: broadcom: amend the comment about the role of BCM2712 board DTS
  arm64: dts: broadcom: delete redundant pcie enablement nodes
  arm64: dts: broadcom: Enable RP1 ethernet for Raspberry Pi 5
  arm64: dts: rp1: Add ethernet DT node
  dt-bindings: mmc: Add support for capabilities to Broadcom SDHCI controller
  arm64: dts: broadcom: bcm2712: Add UARTA controller node
  arm64: dts: broadcom: bcm2712: Add second SDHCI controller node
  arm64: dts: broadcom: bcm2712: Add one more GPIO node
  arm64: dts: broadcom: bcm2712: Add pin controller nodes
  arm64: dts: broadcom: bcm2712: Add default GIC address cells

Link: https://lore.kernel.org/r/20250910171910.666401-3-florian.fainelli@broadcom.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann
2025-09-15 15:15:15 +02:00
5 changed files with 271 additions and 5 deletions
@@ -61,7 +61,7 @@ properties:
description: Specifies that controller should use auto CMD12
allOf:
- $ref: mmc-controller.yaml#
- $ref: sdhci-common.yaml#
- if:
properties:
clock-names:
@@ -2,6 +2,7 @@
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "bcm2712.dtsi"
/ {
@@ -29,6 +30,20 @@
reg = <0 0 0 0x28000000>;
};
gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&pwr_button_default>;
status = "okay";
power_button: power-button {
label = "pwr_button";
linux,code = <KEY_POWER>;
gpios = <&gio 20 GPIO_ACTIVE_LOW>;
debounce-interval = <50>;
};
};
sd_io_1v8_reg: sd-io-1v8-reg {
compatible = "regulator-gpio";
regulator-name = "vdd-sd-io";
@@ -51,6 +66,90 @@
enable-active-high;
gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
};
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_default>;
pinctrl-names = "default";
gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
startup-delay-us = <150000>;
enable-active-high;
};
};
&pinctrl {
bt_shutdown_default: bt-shutdown-default-state {
function = "gpio";
pins = "gpio29";
};
emmc_sd_default: emmc-sd-default-state {
pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3";
bias-pull-up;
};
pwr_button_default: pwr-button-default-state {
function = "gpio";
pins = "gpio20";
bias-pull-up;
};
sdio2_30_default: sdio2-30-default-state {
clk-pins {
function = "sd2";
pins = "gpio30";
bias-disable;
};
cmd-pins {
function = "sd2";
pins = "gpio31";
bias-pull-up;
};
dat-pins {
function = "sd2";
pins = "gpio32", "gpio33", "gpio34", "gpio35";
bias-pull-up;
};
};
uarta_24_default: uarta-24-default-state {
rts-pins {
function = "uart0";
pins = "gpio24";
bias-disable;
};
cts-pins {
function = "uart0";
pins = "gpio25";
bias-pull-up;
};
txd-pins {
function = "uart0";
pins = "gpio26";
bias-disable;
};
rxd-pins {
function = "uart0";
pins = "gpio27";
bias-pull-up;
};
};
wl_on_default: wl-on-default-state {
function = "gpio";
pins = "gpio28";
};
};
&pinctrl_aon {
emmc_aon_cd_default: emmc-aon-cd-default-state {
function = "sd_card_g";
pins = "aon_gpio5";
bias-pull-up;
};
};
/* The Debug UART, on Rpi5 it's on JST-SH 1.0mm 3-pin connector
@@ -62,12 +161,32 @@
/* SDIO1 is used to drive the SD card */
&sdio1 {
pinctrl-0 = <&emmc_sd_default>, <&emmc_aon_cd_default>;
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>;
};
&sdio2 {
pinctrl-0 = <&sdio2_30_default>;
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";
};
};
&soc {
@@ -97,6 +216,20 @@
};
};
/* uarta communicates with the BT module */
&uarta {
uart-has-rtscts;
pinctrl-0 = <&uarta_24_default &bt_shutdown_default>;
pinctrl-names = "default";
status = "okay";
bluetooth: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
};
};
&hvs {
clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
clock-names = "core", "disp";
@@ -4,8 +4,14 @@
* the RP1 driver to load the RP1 dtb overlay at runtime, while
* bcm2712-rpi-5-b.dts (this file) is the fully defined one (i.e. it
* already contains RP1 node, so no overlay is loaded nor needed).
* This file is not intended to be modified, nodes should be added
* to the included bcm2712-rpi-5-b-ovl-rp1.dts.
* This file is intended to host the override nodes for the RP1 peripherals,
* e.g. to declare the phy of the ethernet interface or the custom pin setup
* for several RP1 peripherals.
* This in turn is due to the fact that there's no current generic
* infrastructure to reference nodes (i.e. the nodes in rp1-common.dtsi) that
* are not yet defined in the DT since they are loaded at runtime via overlay.
* All other nodes that do not have anything to do with RP1 should be added
* to the included bcm2712-rpi-5-b-ovl-rp1.dts instead.
*/
/dts-v1/;
@@ -16,10 +22,37 @@
#include "rp1-nexus.dtsi"
};
&pcie1 {
&rp1_eth {
status = "okay";
phy-mode = "rgmii-id";
phy-handle = <&phy1>;
mdio {
reg = <0x1>;
reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
reset-delay-us = <5000>;
#address-cells = <1>;
#size-cells = <0>;
phy1: ethernet-phy@1 {
reg = <0x1>;
};
};
};
&rp1_gpio {
usb_vbus_default_state: usb-vbus-default-state {
function = "vbus1";
groups = "vbus1";
};
};
&rp1_usb0 {
pinctrl-0 = <&usb_vbus_default_state>;
pinctrl-names = "default";
status = "okay";
};
&pcie2 {
&rp1_usb1 {
status = "okay";
};
+56
View File
@@ -38,6 +38,13 @@
clock-frequency = <200000000>;
clock-output-names = "emmc2-clock";
};
clk_sw_baud: clk-sw-baud {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <96000000>;
clock-output-names = "sw-baud";
};
};
cpus: cpus {
@@ -243,6 +250,39 @@
status = "disabled";
};
pinctrl: pinctrl@7d504100 {
compatible = "brcm,bcm2712c0-pinctrl";
reg = <0x7d504100 0x30>;
};
gio: gpio@7d508500 {
compatible = "brcm,bcm7445-gpio", "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>;
};
uarta: serial@7d50c000 {
compatible = "brcm,bcm7271-uart";
reg = <0x7d50c000 0x20>;
reg-names = "uart";
clocks = <&clk_sw_baud>;
clock-names = "sw_baud";
interrupts = <GIC_SPI 276 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "uart";
status = "disabled";
};
pinctrl_aon: pinctrl@7d510700 {
compatible = "brcm,bcm2712c0-aon-pinctrl";
reg = <0x7d510700 0x20>;
};
interrupt-controller@7d517000 {
compatible = "brcm,bcm7271-l2-intc";
reg = <0x7d517000 0x10>;
@@ -263,6 +303,21 @@
*/
};
sdio2: mmc@1100000 {
compatible = "brcm,bcm2712-sdhci",
"brcm,sdhci-brcmstb";
reg = <0x01100000 0x260>,
<0x01100400 0x200>;
reg-names = "host", "cfg";
interrupts = <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk_emmc2>;
clock-names = "sw_sdio";
sdhci-caps-mask = <0x0000C000 0x0>;
sdhci-caps = <0x0 0x0>;
mmc-ddr-3_3v;
status = "disabled";
};
gicv2: interrupt-controller@7fff9000 {
compatible = "arm,gic-400";
reg = <0x7fff9000 0x1000>,
@@ -270,6 +325,7 @@
<0x7fffc000 0x2000>,
<0x7fffe000 0x2000>;
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <3>;
};
@@ -39,4 +39,48 @@ pci_ep_bus: pci-ep-bus@1 {
<1 IRQ_TYPE_LEVEL_HIGH>,
<2 IRQ_TYPE_LEVEL_HIGH>;
};
rp1_eth: ethernet@40100000 {
compatible = "raspberrypi,rp1-gem";
reg = <0x00 0x40100000 0x0 0x4000>;
interrupts = <6 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rp1_clocks RP1_CLK_SYS>,
<&rp1_clocks RP1_CLK_SYS>,
<&rp1_clocks RP1_CLK_ETH>,
<&rp1_clocks RP1_CLK_ETH_TSU>;
clock-names = "pclk", "hclk", "tx_clk", "tsu_clk";
local-mac-address = [00 00 00 00 00 00];
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
rp1_usb0: usb@40200000 {
compatible = "snps,dwc3";
reg = <0x00 0x40200000 0x0 0x100000>;
interrupts = <31 IRQ_TYPE_EDGE_RISING>;
dr_mode = "host";
usb3-lpm-capable;
snps,dis_rxdet_inp3_quirk;
snps,parkmode-disable-hs-quirk;
snps,parkmode-disable-ss-quirk;
snps,tx-max-burst = /bits/ 8 <8>;
snps,tx-thr-num-pkt = /bits/ 8 <2>;
status = "disabled";
};
rp1_usb1: usb@40300000 {
compatible = "snps,dwc3";
reg = <0x00 0x40300000 0x0 0x100000>;
interrupts = <36 IRQ_TYPE_EDGE_RISING>;
dr_mode = "host";
usb3-lpm-capable;
snps,dis_rxdet_inp3_quirk;
snps,parkmode-disable-hs-quirk;
snps,parkmode-disable-ss-quirk;
snps,tx-max-burst = /bits/ 8 <8>;
snps,tx-thr-num-pkt = /bits/ 8 <2>;
status = "disabled";
};
};