Message ID | 8dd6997394a01317747ca11b4779f586752b4947.1716899600.git.andrea.porta@suse.com |
---|---|
State | New |
Headers | show |
Series | Add minimal boot support for Raspberry Pi 5 | expand |
On 5/28/24 06:32, Andrea della Porta wrote: > The BCM2712 SoC family can be found on Raspberry Pi 5. > Add minimal SoC and board (Rpi5 specific) dts file to be able to > boot from SD card and use console on debug UART. > > Signed-off-by: Andrea della Porta <andrea.porta@suse.com> > --- [snip] > diff --git a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi > new file mode 100644 > index 000000000000..71b0fa6c9594 > --- /dev/null > +++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi > @@ -0,0 +1,292 @@ > +// SPDX-License-Identifier: (GPL-2.0 OR MIT) > +#include <dt-bindings/interrupt-controller/arm-gic.h> > + > +/ { > + compatible = "brcm,bcm2712"; > + > + #address-cells = <2>; > + #size-cells = <2>; > + > + interrupt-parent = <&gicv2>; > + > + axi: axi@1000000000 { > + compatible = "simple-bus"; > + #address-cells = <2>; > + #size-cells = <2>; > + ranges = <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>; That property does not look correct, you want to define an aperture that starts at 0x10_0000_0000 into the CPU's address space, and then have sub-node(s) whose "reg" property is to be encoded using #address-cells = <1> and #size-cells = <1> because that's enough to represent that address space. > + > + sdio1: mmc@1000fff000 { > + compatible = "brcm,bcm2712-sdhci", > + "brcm,sdhci-brcmstb"; > + reg = <0x10 0x00fff000 0x0 0x260>, > + <0x10 0x00fff400 0x0 0x200>; That "reg" property should not be including the 0x10_0000_0000 offset at all, and we should just have: reg = <0xfff000 0x260>, <0xfff400 0x200>; > + reg-names = "host", "cfg"; > + interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&clk_emmc2>; > + clock-names = "sw_sdio"; > + mmc-ddr-3_3v; > + }; > + > + gicv2: interrupt-controller@107fff9000 { > + 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>; Likewise, this is supposed to be: reg = <0x7fff9000 0x1000>, <0x7fffa000 0x2000>, <0x7fffc000 0x2000>, <0x7fffe000 0x2000>; [snip] > + > + soc: soc@107c000000 { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + ranges = <0x7c000000 0x10 0x7c000000 0x04000000>; That spans the previously defined axi node above (goes up to 0x10_8000_0000), once we make the necessary "ranges" adjustments to the axi node as indicated before. I thought that based upon our conversation in v3, this was all going to be a single "soc" node? > + /* 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>; > + }; > + > + mailbox: mailbox@7c013880 { > + compatible = "brcm,bcm2835-mbox"; > + reg = <0x7c013880 0x40>; > + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; > + #mbox-cells = <0>; > + }; > + > + local_intc: local-intc@7cd00000 { > + compatible = "brcm,bcm2836-l1-intc"; > + reg = <0x7cd00000 0x100>; > + }; > + > + uart10: 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"; > + }; > + > + interrupt-controller@7d517000 { > + compatible = "brcm,bcm7271-l2-intc"; > + reg = <0x7d517000 0x10>; > + interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-controller; > + #interrupt-cells = <1>; > + }; > + > + gio_aon: gpio@7d517c00 { > + compatible = "brcm,bcm7445-gpio", "brcm,brcmstb-gpio"; > + reg = <0x7d517c00 0x40>; > + gpio-controller; > + #gpio-cells = <2>; > + // Don't use GIO_AON as an interrupt controller because it will > + // clash with the firmware monitoring the PMIC interrupt via the VPU. OK, so the comment is intended to explain why there is no 'interrupt-controller' property specified when one might expect to find one, and it has nothing to do with the "brcm,gpio-bank-widths" property, because that one is correct and does indicate the number of pins that need to be managed per bank. Some clarification is warranted here IMHO.
Hi Andrea, i think the following subject would be better: arm64: dts: broadcom: Add minimal support for Raspberry Pi 5 because you also add the board file here. Am 28.05.24 um 15:32 schrieb Andrea della Porta: > The BCM2712 SoC family can be found on Raspberry Pi 5. > Add minimal SoC and board (Rpi5 specific) dts file to be able to > boot from SD card and use console on debug UART. > > Signed-off-by: Andrea della Porta <andrea.porta@suse.com> > --- > arch/arm64/boot/dts/broadcom/Makefile | 1 + > .../boot/dts/broadcom/bcm2712-rpi-5-b.dts | 64 ++++ > arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 292 ++++++++++++++++++ > 3 files changed, 357 insertions(+) > create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts > create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712.dtsi > > diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile > index 8b4591ddd27c..92565e9781ad 100644 > --- a/arch/arm64/boot/dts/broadcom/Makefile > +++ b/arch/arm64/boot/dts/broadcom/Makefile > @@ -6,6 +6,7 @@ DTC_FLAGS := -@ > dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \ > bcm2711-rpi-4-b.dtb \ > bcm2711-rpi-cm4-io.dtb \ > + bcm2712-rpi-5-b.dtb \ > bcm2837-rpi-3-a-plus.dtb \ > bcm2837-rpi-3-b.dtb \ > bcm2837-rpi-3-b-plus.dtb \ > diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts > new file mode 100644 > index 000000000000..2bdbb6780242 > --- /dev/null > +++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts > @@ -0,0 +1,64 @@ > +// SPDX-License-Identifier: (GPL-2.0 OR MIT) > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include "bcm2712.dtsi" > + > +/ { > + compatible = "raspberrypi,5-model-b", "brcm,bcm2712"; > + model = "Raspberry Pi 5"; > + > + aliases { > + serial10 = &uart10; > + }; > + > + chosen: chosen { > + stdout-path = "serial10:115200n8"; > + }; > + > + /* Will be filled by the bootloader */ > + memory@0 { > + device_type = "memory"; > + reg = <0 0 0 0x28000000>; > + }; > + > + 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 1>, > + <3300000 0>; > + }; > + > + 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>; > + }; > +}; > + > +/* The Debug UART, on Rpi5 it's on JST-SH 1.0mm 3-pin connector > + * labeled "UART", i.e. the interface with the system console. > + */ > +&uart10 { > + status = "okay"; > +}; > + > +/* SDIO1 is used to drive the SD card */ > +&sdio1 { > + vqmmc-supply = <&sd_io_1v8_reg>; > + vmmc-supply = <&sd_vcc_reg>; > + bus-width = <4>; > + sd-uhs-sdr50; > + sd-uhs-ddr50; > + sd-uhs-sdr104; > +}; > diff --git a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi > new file mode 100644 > index 000000000000..71b0fa6c9594 > --- /dev/null > +++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi > @@ -0,0 +1,292 @@ > +// SPDX-License-Identifier: (GPL-2.0 OR MIT) > +#include <dt-bindings/interrupt-controller/arm-gic.h> > + > +/ { > + compatible = "brcm,bcm2712"; > + > + #address-cells = <2>; > + #size-cells = <2>; > + > + interrupt-parent = <&gicv2>; > + > + axi: axi@1000000000 { > + compatible = "simple-bus"; > + #address-cells = <2>; > + #size-cells = <2>; > + ranges = <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>; > + > + sdio1: mmc@1000fff000 { > + compatible = "brcm,bcm2712-sdhci", > + "brcm,sdhci-brcmstb"; > + reg = <0x10 0x00fff000 0x0 0x260>, > + <0x10 0x00fff400 0x0 0x200>; > + reg-names = "host", "cfg"; > + interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&clk_emmc2>; > + clock-names = "sw_sdio"; > + mmc-ddr-3_3v; > + }; > + > + gicv2: interrupt-controller@107fff9000 { > + 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>; Please move compatible and reg before the other properties (DTS coding style) > + }; > + }; > + > + 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_vpu: clk-vpu { > + #clock-cells = <0>; > + compatible = "fixed-clock"; > + clock-frequency = <750000000>; > + clock-output-names = "vpu-clock"; > + }; Is the VPU clock really fixed or is it just a workaround for minimal boot support? Except of this, LGTM
Hi Stefan, On 08:11 Thu 30 May , Stefan Wahren wrote: [cut...] > > + 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_vpu: clk-vpu { > > + #clock-cells = <0>; > > + compatible = "fixed-clock"; > > + clock-frequency = <750000000>; > > + clock-output-names = "vpu-clock"; > > + }; > Is the VPU clock really fixed or is it just a workaround for minimal > boot support? Unfortunately I don't have enough insight on this due to lack of documentation. I had to take it by faith from downstream dts. Many thanks, Andrea
diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile index 8b4591ddd27c..92565e9781ad 100644 --- a/arch/arm64/boot/dts/broadcom/Makefile +++ b/arch/arm64/boot/dts/broadcom/Makefile @@ -6,6 +6,7 @@ DTC_FLAGS := -@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \ bcm2711-rpi-4-b.dtb \ bcm2711-rpi-cm4-io.dtb \ + bcm2712-rpi-5-b.dtb \ bcm2837-rpi-3-a-plus.dtb \ bcm2837-rpi-3-b.dtb \ bcm2837-rpi-3-b-plus.dtb \ diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts new file mode 100644 index 000000000000..2bdbb6780242 --- /dev/null +++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include "bcm2712.dtsi" + +/ { + compatible = "raspberrypi,5-model-b", "brcm,bcm2712"; + model = "Raspberry Pi 5"; + + aliases { + serial10 = &uart10; + }; + + chosen: chosen { + stdout-path = "serial10:115200n8"; + }; + + /* Will be filled by the bootloader */ + memory@0 { + device_type = "memory"; + reg = <0 0 0 0x28000000>; + }; + + 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 1>, + <3300000 0>; + }; + + 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>; + }; +}; + +/* The Debug UART, on Rpi5 it's on JST-SH 1.0mm 3-pin connector + * labeled "UART", i.e. the interface with the system console. + */ +&uart10 { + status = "okay"; +}; + +/* SDIO1 is used to drive the SD card */ +&sdio1 { + vqmmc-supply = <&sd_io_1v8_reg>; + vmmc-supply = <&sd_vcc_reg>; + bus-width = <4>; + sd-uhs-sdr50; + sd-uhs-ddr50; + sd-uhs-sdr104; +}; diff --git a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi new file mode 100644 index 000000000000..71b0fa6c9594 --- /dev/null +++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi @@ -0,0 +1,292 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +#include <dt-bindings/interrupt-controller/arm-gic.h> + +/ { + compatible = "brcm,bcm2712"; + + #address-cells = <2>; + #size-cells = <2>; + + interrupt-parent = <&gicv2>; + + axi: axi@1000000000 { + compatible = "simple-bus"; + #address-cells = <2>; + #size-cells = <2>; + ranges = <0x10 0x00000000 0x10 0x00000000 0x01 0x00000000>; + + sdio1: mmc@1000fff000 { + compatible = "brcm,bcm2712-sdhci", + "brcm,sdhci-brcmstb"; + reg = <0x10 0x00fff000 0x0 0x260>, + <0x10 0x00fff400 0x0 0x200>; + reg-names = "host", "cfg"; + interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_emmc2>; + clock-names = "sw_sdio"; + mmc-ddr-3_3v; + }; + + gicv2: interrupt-controller@107fff9000 { + 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>; + }; + }; + + 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_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"; + }; + }; + + cpus: cpus { + #address-cells = <1>; + #size-cells = <0>; + + /* Source for L1 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 + * Source for L2 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 + */ + 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>; + + 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>; + }; + }; + + 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>; + + 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>; + }; + }; + + 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>; + + 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>; + }; + }; + + 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>; + + 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>; + cache-unified; + }; + }; + + psci { + method = "smc"; + compatible = "arm,psci-1.0", "arm,psci-0.2"; + }; + + rmem: reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + atf@0 { + reg = <0x0 0x0 0x0 0x80000>; + no-map; + }; + + cma: linux,cma { + compatible = "shared-dma-pool"; + size = <0x0 0x4000000>; /* 64MB */ + reusable; + linux,cma-default; + alloc-ranges = <0x0 0x00000000 0x0 0x40000000>; + }; + }; + + soc: soc@107c000000 { + 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>; + }; + + mailbox: mailbox@7c013880 { + compatible = "brcm,bcm2835-mbox"; + reg = <0x7c013880 0x40>; + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; + #mbox-cells = <0>; + }; + + local_intc: local-intc@7cd00000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x7cd00000 0x100>; + }; + + uart10: 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"; + }; + + interrupt-controller@7d517000 { + compatible = "brcm,bcm7271-l2-intc"; + reg = <0x7d517000 0x10>; + interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>; + interrupt-controller; + #interrupt-cells = <1>; + }; + + gio_aon: gpio@7d517c00 { + compatible = "brcm,bcm7445-gpio", "brcm,brcmstb-gpio"; + reg = <0x7d517c00 0x40>; + gpio-controller; + #gpio-cells = <2>; + // Don't use GIO_AON as an interrupt controller because it will + // clash with the firmware monitoring the PMIC interrupt via the VPU. + brcm,gpio-bank-widths = <17 6>; + }; + }; + + 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)>, + <GIC_PPI 12 (GIC_CPU_MASK_SIMPLE(4) | + IRQ_TYPE_LEVEL_LOW)>; + }; +};
The BCM2712 SoC family can be found on Raspberry Pi 5. Add minimal SoC and board (Rpi5 specific) dts file to be able to boot from SD card and use console on debug UART. Signed-off-by: Andrea della Porta <andrea.porta@suse.com> --- arch/arm64/boot/dts/broadcom/Makefile | 1 + .../boot/dts/broadcom/bcm2712-rpi-5-b.dts | 64 ++++ arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 292 ++++++++++++++++++ 3 files changed, 357 insertions(+) create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts create mode 100644 arch/arm64/boot/dts/broadcom/bcm2712.dtsi