The BCM21664 and BCM23550 are nearly identical to each other in terms
of register layout. This was verified against a downstream kernel[1] -
Broadcom's kernel has "RDB" directories which includes headers with
the full register maps for the included hardware. Running:
diff --recursive arch/arm/mach-{hawaii,java}/include/mach/rdb
reveals that the differences are minuscule - some things related to
ISP and H264 decoding. Most of the other differences are related to
the different CPUs in the two chipsets - the BCM21664 has 2x Cortex-A9
cores, and the BCM23550 has 4x Cortex-A7 cores.
In mainline, most drivers are also re-used between the two.
To make development for both platforms easier, split out the common
nodes into a separate DTSI, bcm21664-common.dtsi. This only leaves
the device-specific nodes - so, CPU and related things - in the SoC-
specific DTSIs (bcm21664.dtsi and bcm23550.dtsi).
The new DTSI is based off the bcm23550.dtsi, with its split into
busses. Since it's pretty much 99% identical, I kept the licensing
of the original file (BSD 3-clause). The license for the bcm21664.dtsi
file remains GPL 2.0 as it originally was.
make CHECK_DTBS=y on bcm21664-garnet.dtb and bcm23550-sparrow.dtb
seem to pass fine for me (thanks to Stanislav Jakubek for converting
the bindings to YAML format!). It's worth noting though that some
bcm23550 compatibles now go unused, since the bcm21664-common.dtsi
file uses bcm21664 compatibles.
[1] https://github.com/knuxdroid/android_kernel_samsung_baffinlite
Signed-off-by: Artur Weber <[email protected]>
---
Artur Weber (2):
ARM: dts: broadcom: bcm21664: Move chosen node into bcm21664-garnet DTS
ARM: dts: bcm-mobile: Split out nodes used by both BCM21664 and BCM23550
arch/arm/boot/dts/broadcom/bcm21664-common.dtsi | 334 ++++++++++++++++++++++
arch/arm/boot/dts/broadcom/bcm21664-garnet.dts | 4 +
arch/arm/boot/dts/broadcom/bcm21664.dtsi | 326 +---------------------
arch/arm/boot/dts/broadcom/bcm23550.dtsi | 354 +-----------------------
4 files changed, 357 insertions(+), 661 deletions(-)
---
base-commit: a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
change-id: 20240528-bcm21664-common-14064864a4a7
Best regards,
--
Artur Weber <[email protected]>
The serial console settings in the chosen node are device-specific,
not SoC-specific. Move the chosen node out of bcm21664.dtsi and into
the only DTS that uses it, bcm21664-garnet.dts.
Signed-off-by: Artur Weber <[email protected]>
---
arch/arm/boot/dts/broadcom/bcm21664-garnet.dts | 4 ++++
arch/arm/boot/dts/broadcom/bcm21664.dtsi | 4 ----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/boot/dts/broadcom/bcm21664-garnet.dts b/arch/arm/boot/dts/broadcom/bcm21664-garnet.dts
index 8789fae178bf..4f8ddc1b3ab7 100644
--- a/arch/arm/boot/dts/broadcom/bcm21664-garnet.dts
+++ b/arch/arm/boot/dts/broadcom/bcm21664-garnet.dts
@@ -11,6 +11,10 @@ / {
model = "BCM21664 Garnet board";
compatible = "brcm,bcm21664-garnet", "brcm,bcm21664";
+ chosen {
+ bootargs = "console=ttyS0,115200n8";
+ };
+
memory@80000000 {
device_type = "memory";
reg = <0x80000000 0x40000000>; /* 1 GB */
diff --git a/arch/arm/boot/dts/broadcom/bcm21664.dtsi b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
index fa73600e883e..c1ad5123bad4 100644
--- a/arch/arm/boot/dts/broadcom/bcm21664.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
@@ -12,10 +12,6 @@ / {
compatible = "brcm,bcm21664";
interrupt-parent = <&gic>;
- chosen {
- bootargs = "console=ttyS0,115200n8";
- };
-
cpus {
#address-cells = <1>;
#size-cells = <0>;
--
2.45.1
The BCM21664 is nearly identical in terms of register layout to the
BCM23550. Move the shared nodes into a new file, bcm21664-common.dtsi,
and make both bcm21664.dtsi and bcm23550.dtsi include it. This new
common file is based on the former bcm23550.dtsi file, and inherits
its licensing.
Signed-off-by: Artur Weber <[email protected]>
---
As for other uses - the BCM21654 (not in mainline) appears to be fairly
similar in a few ways to the BCM21664 as well; the BCM21855/BCM11531 has
a similar layout of registers, but there are much more differences.
We could potentially further split more nodes into a single common
Broadcom Kona DTSI, then make sub-DTSIs to just change the compatibles,
but that's a task for another patch.
---
.../{bcm23550.dtsi => bcm21664-common.dtsi} | 109 +----
arch/arm/boot/dts/broadcom/bcm21664.dtsi | 388 ++---------------
arch/arm/boot/dts/broadcom/bcm23550.dtsi | 482 +++------------------
3 files changed, 131 insertions(+), 848 deletions(-)
diff --git a/arch/arm/boot/dts/broadcom/bcm23550.dtsi b/arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
similarity index 68%
copy from arch/arm/boot/dts/broadcom/bcm23550.dtsi
copy to arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
index 50ebe93d6bd0..44978a459d32 100644
--- a/arch/arm/boot/dts/broadcom/bcm23550.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
@@ -1,36 +1,13 @@
+// SPDX-License-Identifier: BSD-3-Clause
/*
- * BSD LICENSE
+ * Common device tree for components shared between the BCM21664 and BCM23550
+ * SoCs.
*
- * Copyright(c) 2016 Broadcom. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Broadcom Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * Copyright (C) 2016 Broadcom
*/
-/* BCM23550 and BCM21664 have almost identical clocks */
+/dts-v1/;
+
#include <dt-bindings/clock/bcm21664.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/interrupt-controller/irq.h>
@@ -38,58 +15,16 @@
/ {
#address-cells = <1>;
#size-cells = <1>;
- model = "BCM23550 SoC";
- compatible = "brcm,bcm23550";
- interrupt-parent = <&gic>;
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
-
- cpu0: cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- reg = <0>;
- clock-frequency = <1000000000>;
- };
-
- cpu1: cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <1>;
- clock-frequency = <1000000000>;
- };
-
- cpu2: cpu@2 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <2>;
- clock-frequency = <1000000000>;
- };
-
- cpu3: cpu@3 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <3>;
- clock-frequency = <1000000000>;
- };
- };
/* Hub bus */
- hub@34000000 {
+ hub: hub-bus@34000000 {
compatible = "simple-bus";
ranges = <0 0x34000000 0x102f83ac>;
#address-cells = <1>;
#size-cells = <1>;
smc@4e000 {
- compatible = "brcm,bcm23550-smc", "brcm,kona-smc";
+ compatible = "brcm,bcm21664-smc", "brcm,kona-smc";
reg = <0x0004e000 0x400>; /* 1 KiB in SRAM */
};
@@ -99,7 +34,7 @@ resetmgr: reset-controller@1001f00 {
};
gpio: gpio@1003000 {
- compatible = "brcm,bcm23550-gpio", "brcm,kona-gpio";
+ compatible = "brcm,bcm21664-gpio", "brcm,kona-gpio";
reg = <0x01003000 0x524>;
interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
@@ -120,7 +55,7 @@ timer@1006000 {
};
/* Slaves bus */
- slaves@3e000000 {
+ slaves: slaves-bus@3e000000 {
compatible = "simple-bus";
ranges = <0 0x3e000000 0x0001c070>;
#address-cells = <1>;
@@ -157,7 +92,7 @@ uartb3: serial@2000 {
};
bsc1: i2c@16000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
+ compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
reg = <0x00016000 0x70>;
interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
@@ -167,7 +102,7 @@ bsc1: i2c@16000 {
};
bsc2: i2c@17000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
+ compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
reg = <0x00017000 0x70>;
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
@@ -177,7 +112,7 @@ bsc2: i2c@17000 {
};
bsc3: i2c@18000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
+ compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
reg = <0x00018000 0x70>;
interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
@@ -187,7 +122,7 @@ bsc3: i2c@18000 {
};
bsc4: i2c@1c000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
+ compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
reg = <0x0001c000 0x70>;
interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
@@ -198,7 +133,7 @@ bsc4: i2c@1c000 {
};
/* Apps bus */
- apps@3e300000 {
+ apps: apps-bus@3e300000 {
compatible = "simple-bus";
ranges = <0 0x3e300000 0x01b77000>;
#address-cells = <1>;
@@ -253,20 +188,6 @@ sdio4: mmc@eb0000 {
clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
status = "disabled";
};
-
- cdc: cdc@1b0e000 {
- compatible = "brcm,bcm23550-cdc";
- reg = <0x01b0e000 0x78>;
- };
-
- gic: interrupt-controller@1b21000 {
- compatible = "arm,cortex-a9-gic";
- #interrupt-cells = <3>;
- #address-cells = <0>;
- interrupt-controller;
- reg = <0x01b21000 0x1000>,
- <0x01b22000 0x1000>;
- };
};
clocks {
diff --git a/arch/arm/boot/dts/broadcom/bcm21664.dtsi b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
dissimilarity index 93%
index c1ad5123bad4..a868f09e8930 100644
--- a/arch/arm/boot/dts/broadcom/bcm21664.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
@@ -1,341 +1,47 @@
-// SPDX-License-Identifier: GPL-2.0-only
-// Copyright (C) 2014 Broadcom Corporation
-
-#include <dt-bindings/clock/bcm21664.h>
-#include <dt-bindings/interrupt-controller/arm-gic.h>
-#include <dt-bindings/interrupt-controller/irq.h>
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
- model = "BCM21664 SoC";
- compatible = "brcm,bcm21664";
- interrupt-parent = <&gic>;
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
-
- cpu0: cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a9";
- reg = <0>;
- };
-
- cpu1: cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a9";
- enable-method = "brcm,bcm11351-cpu-method";
- secondary-boot-reg = <0x35004178>;
- reg = <1>;
- };
- };
-
- gic: interrupt-controller@3ff00100 {
- compatible = "arm,cortex-a9-gic";
- #interrupt-cells = <3>;
- #address-cells = <0>;
- interrupt-controller;
- reg = <0x3ff01000 0x1000>,
- <0x3ff00100 0x100>;
- };
-
- smc@3404e000 {
- compatible = "brcm,bcm21664-smc", "brcm,kona-smc";
- reg = <0x3404e000 0x400>; /* 1 KiB in SRAM */
- };
-
- uartb: serial@3e000000 {
- compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
- reg = <0x3e000000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB>;
- interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uartb2: serial@3e001000 {
- compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
- reg = <0x3e001000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB2>;
- interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uartb3: serial@3e002000 {
- compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
- reg = <0x3e002000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB3>;
- interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- L2: cache-controller@3ff20000 {
- compatible = "arm,pl310-cache";
- reg = <0x3ff20000 0x1000>;
- cache-unified;
- cache-level = <2>;
- };
-
- brcm,resetmgr@35001f00 {
- compatible = "brcm,bcm21664-resetmgr";
- reg = <0x35001f00 0x24>;
- };
-
- timer@35006000 {
- compatible = "brcm,kona-timer";
- reg = <0x35006000 0x1c>;
- interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&aon_ccu BCM21664_AON_CCU_HUB_TIMER>;
- };
-
- gpio: gpio@35003000 {
- compatible = "brcm,bcm21664-gpio", "brcm,kona-gpio";
- reg = <0x35003000 0x524>;
- interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
- #gpio-cells = <2>;
- #interrupt-cells = <2>;
- gpio-controller;
- interrupt-controller;
- };
-
- sdio1: mmc@3f180000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x3f180000 0x801c>;
- interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO1>;
- status = "disabled";
- };
-
- sdio2: mmc@3f190000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x3f190000 0x801c>;
- interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO2>;
- status = "disabled";
- };
-
- sdio3: mmc@3f1a0000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x3f1a0000 0x801c>;
- interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO3>;
- status = "disabled";
- };
-
- sdio4: mmc@3f1b0000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x3f1b0000 0x801c>;
- interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
- status = "disabled";
- };
-
- bsc1: i2c@3e016000 {
- compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
- reg = <0x3e016000 0x70>;
- interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC1>;
- status = "disabled";
- };
-
- bsc2: i2c@3e017000 {
- compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
- reg = <0x3e017000 0x70>;
- interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC2>;
- status = "disabled";
- };
-
- bsc3: i2c@3e018000 {
- compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
- reg = <0x3e018000 0x70>;
- interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC3>;
- status = "disabled";
- };
-
- bsc4: i2c@3e01c000 {
- compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
- reg = <0x3e01c000 0x70>;
- interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC4>;
- status = "disabled";
- };
-
- clocks {
- #address-cells = <1>;
- #size-cells = <1>;
- ranges;
-
- /*
- * Fixed clocks are defined before CCUs whose
- * clocks may depend on them.
- */
-
- ref_32k_clk: ref_32k {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <32768>;
- };
-
- bbl_32k_clk: bbl_32k {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <32768>;
- };
-
- ref_13m_clk: ref_13m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <13000000>;
- };
-
- var_13m_clk: var_13m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <13000000>;
- };
-
- dft_19_5m_clk: dft_19_5m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <19500000>;
- };
-
- ref_crystal_clk: ref_crystal {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <26000000>;
- };
-
- ref_52m_clk: ref_52m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- var_52m_clk: var_52m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- usb_otg_ahb_clk: usb_otg_ahb {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- ref_96m_clk: ref_96m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <96000000>;
- };
-
- var_96m_clk: var_96m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <96000000>;
- };
-
- ref_104m_clk: ref_104m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <104000000>;
- };
-
- var_104m_clk: var_104m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <104000000>;
- };
-
- ref_156m_clk: ref_156m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <156000000>;
- };
-
- var_156m_clk: var_156m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <156000000>;
- };
-
- root_ccu: root_ccu@35001000 {
- compatible = "brcm,bcm21664-root-ccu";
- reg = <0x35001000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "frac_1m";
- };
-
- aon_ccu: aon_ccu@35002000 {
- compatible = "brcm,bcm21664-aon-ccu";
- reg = <0x35002000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "hub_timer";
- };
-
- master_ccu: master_ccu@3f001000 {
- compatible = "brcm,bcm21664-master-ccu";
- reg = <0x3f001000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "sdio1",
- "sdio2",
- "sdio3",
- "sdio4",
- "sdio1_sleep",
- "sdio2_sleep",
- "sdio3_sleep",
- "sdio4_sleep";
- };
-
- slave_ccu: slave_ccu@3e011000 {
- compatible = "brcm,bcm21664-slave-ccu";
- reg = <0x3e011000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "uartb",
- "uartb2",
- "uartb3",
- "bsc1",
- "bsc2",
- "bsc3",
- "bsc4";
- };
- };
-
- usbotg: usb@3f120000 {
- compatible = "snps,dwc2";
- reg = <0x3f120000 0x10000>;
- interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&usb_otg_ahb_clk>;
- clock-names = "otg";
- phys = <&usbphy>;
- phy-names = "usb2-phy";
- status = "disabled";
- };
-
- usbphy: usb-phy@3f130000 {
- compatible = "brcm,kona-usb2-phy";
- reg = <0x3f130000 0x28>;
- #phy-cells = <0>;
- status = "disabled";
- };
-};
+// SPDX-License-Identifier: GPL-2.0-only
+// Copyright (C) 2014 Broadcom Corporation
+
+#include "bcm21664-common.dtsi"
+
+/ {
+ model = "BCM21664 SoC";
+ compatible = "brcm,bcm21664";
+ interrupt-parent = <&gic>;
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ reg = <0>;
+ };
+
+ cpu1: cpu@1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ enable-method = "brcm,bcm11351-cpu-method";
+ secondary-boot-reg = <0x35004178>;
+ reg = <1>;
+ };
+ };
+
+ apps: apps-bus@3e300000 {
+ gic: interrupt-controller@1c00100 {
+ compatible = "arm,cortex-a9-gic";
+ #interrupt-cells = <3>;
+ #address-cells = <0>;
+ interrupt-controller;
+ reg = <0x01c01000 0x1000>,
+ <0x01c00100 0x100>;
+ };
+
+ L2: cache-controller@1c20000 {
+ compatible = "arm,pl310-cache";
+ reg = <0x01c20000 0x1000>;
+ cache-unified;
+ cache-level = <2>;
+ };
+ };
+};
diff --git a/arch/arm/boot/dts/broadcom/bcm23550.dtsi b/arch/arm/boot/dts/broadcom/bcm23550.dtsi
dissimilarity index 88%
index 50ebe93d6bd0..bb5ae970816b 100644
--- a/arch/arm/boot/dts/broadcom/bcm23550.dtsi
+++ b/arch/arm/boot/dts/broadcom/bcm23550.dtsi
@@ -1,413 +1,69 @@
-/*
- * BSD LICENSE
- *
- * Copyright(c) 2016 Broadcom. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Broadcom Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* BCM23550 and BCM21664 have almost identical clocks */
-#include <dt-bindings/clock/bcm21664.h>
-#include <dt-bindings/interrupt-controller/arm-gic.h>
-#include <dt-bindings/interrupt-controller/irq.h>
-
-/ {
- #address-cells = <1>;
- #size-cells = <1>;
- model = "BCM23550 SoC";
- compatible = "brcm,bcm23550";
- interrupt-parent = <&gic>;
-
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
-
- cpu0: cpu@0 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- reg = <0>;
- clock-frequency = <1000000000>;
- };
-
- cpu1: cpu@1 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <1>;
- clock-frequency = <1000000000>;
- };
-
- cpu2: cpu@2 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <2>;
- clock-frequency = <1000000000>;
- };
-
- cpu3: cpu@3 {
- device_type = "cpu";
- compatible = "arm,cortex-a7";
- enable-method = "brcm,bcm23550";
- secondary-boot-reg = <0x35004178>;
- reg = <3>;
- clock-frequency = <1000000000>;
- };
- };
-
- /* Hub bus */
- hub@34000000 {
- compatible = "simple-bus";
- ranges = <0 0x34000000 0x102f83ac>;
- #address-cells = <1>;
- #size-cells = <1>;
-
- smc@4e000 {
- compatible = "brcm,bcm23550-smc", "brcm,kona-smc";
- reg = <0x0004e000 0x400>; /* 1 KiB in SRAM */
- };
-
- resetmgr: reset-controller@1001f00 {
- compatible = "brcm,bcm21664-resetmgr";
- reg = <0x01001f00 0x24>;
- };
-
- gpio: gpio@1003000 {
- compatible = "brcm,bcm23550-gpio", "brcm,kona-gpio";
- reg = <0x01003000 0x524>;
- interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
- #gpio-cells = <2>;
- #interrupt-cells = <2>;
- gpio-controller;
- interrupt-controller;
- };
-
- timer@1006000 {
- compatible = "brcm,kona-timer";
- reg = <0x01006000 0x1c>;
- interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&aon_ccu BCM21664_AON_CCU_HUB_TIMER>;
- };
- };
-
- /* Slaves bus */
- slaves@3e000000 {
- compatible = "simple-bus";
- ranges = <0 0x3e000000 0x0001c070>;
- #address-cells = <1>;
- #size-cells = <1>;
-
- uartb: serial@0 {
- compatible = "snps,dw-apb-uart";
- reg = <0x00000000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB>;
- interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uartb2: serial@1000 {
- compatible = "snps,dw-apb-uart";
- reg = <0x00001000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB2>;
- interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- uartb3: serial@2000 {
- compatible = "snps,dw-apb-uart";
- reg = <0x00002000 0x118>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB3>;
- interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
- reg-shift = <2>;
- reg-io-width = <4>;
- status = "disabled";
- };
-
- bsc1: i2c@16000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
- reg = <0x00016000 0x70>;
- interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC1>;
- status = "disabled";
- };
-
- bsc2: i2c@17000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
- reg = <0x00017000 0x70>;
- interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC2>;
- status = "disabled";
- };
-
- bsc3: i2c@18000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
- reg = <0x00018000 0x70>;
- interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC3>;
- status = "disabled";
- };
-
- bsc4: i2c@1c000 {
- compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
- reg = <0x0001c000 0x70>;
- interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
- #address-cells = <1>;
- #size-cells = <0>;
- clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC4>;
- status = "disabled";
- };
- };
-
- /* Apps bus */
- apps@3e300000 {
- compatible = "simple-bus";
- ranges = <0 0x3e300000 0x01b77000>;
- #address-cells = <1>;
- #size-cells = <1>;
-
- usbotg: usb@e20000 {
- compatible = "snps,dwc2";
- reg = <0x00e20000 0x10000>;
- interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&usb_otg_ahb_clk>;
- clock-names = "otg";
- phys = <&usbphy>;
- phy-names = "usb2-phy";
- status = "disabled";
- };
-
- usbphy: usb-phy@e30000 {
- compatible = "brcm,kona-usb2-phy";
- reg = <0x00e30000 0x28>;
- #phy-cells = <0>;
- status = "disabled";
- };
-
- sdio1: mmc@e80000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x00e80000 0x801c>;
- interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO1>;
- status = "disabled";
- };
-
- sdio2: mmc@e90000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x00e90000 0x801c>;
- interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO2>;
- status = "disabled";
- };
-
- sdio3: mmc@ea0000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x00ea0000 0x801c>;
- interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO3>;
- status = "disabled";
- };
-
- sdio4: mmc@eb0000 {
- compatible = "brcm,kona-sdhci";
- reg = <0x00eb0000 0x801c>;
- interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
- status = "disabled";
- };
-
- cdc: cdc@1b0e000 {
- compatible = "brcm,bcm23550-cdc";
- reg = <0x01b0e000 0x78>;
- };
-
- gic: interrupt-controller@1b21000 {
- compatible = "arm,cortex-a9-gic";
- #interrupt-cells = <3>;
- #address-cells = <0>;
- interrupt-controller;
- reg = <0x01b21000 0x1000>,
- <0x01b22000 0x1000>;
- };
- };
-
- clocks {
- #address-cells = <1>;
- #size-cells = <1>;
- ranges;
-
- /*
- * Fixed clocks are defined before CCUs whose
- * clocks may depend on them.
- */
-
- ref_32k_clk: ref_32k {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <32768>;
- };
-
- bbl_32k_clk: bbl_32k {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <32768>;
- };
-
- ref_13m_clk: ref_13m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <13000000>;
- };
-
- var_13m_clk: var_13m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <13000000>;
- };
-
- dft_19_5m_clk: dft_19_5m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <19500000>;
- };
-
- ref_crystal_clk: ref_crystal {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <26000000>;
- };
-
- ref_52m_clk: ref_52m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- var_52m_clk: var_52m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- usb_otg_ahb_clk: usb_otg_ahb {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <52000000>;
- };
-
- ref_96m_clk: ref_96m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <96000000>;
- };
-
- var_96m_clk: var_96m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <96000000>;
- };
-
- ref_104m_clk: ref_104m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <104000000>;
- };
-
- var_104m_clk: var_104m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <104000000>;
- };
-
- ref_156m_clk: ref_156m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <156000000>;
- };
-
- var_156m_clk: var_156m {
- #clock-cells = <0>;
- compatible = "fixed-clock";
- clock-frequency = <156000000>;
- };
-
- root_ccu: root_ccu@35001000 {
- compatible = "brcm,bcm21664-root-ccu";
- reg = <0x35001000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "frac_1m";
- };
-
- aon_ccu: aon_ccu@35002000 {
- compatible = "brcm,bcm21664-aon-ccu";
- reg = <0x35002000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "hub_timer";
- };
-
- slave_ccu: slave_ccu@3e011000 {
- compatible = "brcm,bcm21664-slave-ccu";
- reg = <0x3e011000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "uartb",
- "uartb2",
- "uartb3",
- "bsc1",
- "bsc2",
- "bsc3",
- "bsc4";
- };
-
- master_ccu: master_ccu@3f001000 {
- compatible = "brcm,bcm21664-master-ccu";
- reg = <0x3f001000 0x0f00>;
- #clock-cells = <1>;
- clock-output-names = "sdio1",
- "sdio2",
- "sdio3",
- "sdio4",
- "sdio1_sleep",
- "sdio2_sleep",
- "sdio3_sleep",
- "sdio4_sleep";
- };
- };
-};
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Device tree for the BCM23550 SoC.
+ *
+ * Copyright (C) 2016 Broadcom
+ */
+
+#include "bcm21664-common.dtsi"
+
+/ {
+ model = "BCM23550 SoC";
+ compatible = "brcm,bcm23550";
+ interrupt-parent = <&gic>;
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a7";
+ reg = <0>;
+ clock-frequency = <1000000000>;
+ };
+
+ cpu1: cpu@1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a7";
+ enable-method = "brcm,bcm23550";
+ secondary-boot-reg = <0x35004178>;
+ reg = <1>;
+ clock-frequency = <1000000000>;
+ };
+
+ cpu2: cpu@2 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a7";
+ enable-method = "brcm,bcm23550";
+ secondary-boot-reg = <0x35004178>;
+ reg = <2>;
+ clock-frequency = <1000000000>;
+ };
+
+ cpu3: cpu@3 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a7";
+ enable-method = "brcm,bcm23550";
+ secondary-boot-reg = <0x35004178>;
+ reg = <3>;
+ clock-frequency = <1000000000>;
+ };
+ };
+
+ apps: apps-bus@3e300000 {
+ cdc: cdc@1b0e000 {
+ compatible = "brcm,bcm23550-cdc";
+ reg = <0x01b0e000 0x78>;
+ };
+
+ gic: interrupt-controller@1b21000 {
+ compatible = "arm,cortex-a9-gic";
+ #interrupt-cells = <3>;
+ #address-cells = <0>;
+ interrupt-controller;
+ reg = <0x01b21000 0x1000>,
+ <0x01b22000 0x1000>;
+ };
+ };
+};
--
2.45.1
On 5.06.2024 08:40, Artur Weber wrote:
> The BCM21664 and BCM23550 are nearly identical to each other in terms
> of register layout. This was verified against a downstream kernel[1] -
Let me rephrase this a bit, since upon reading it again it kind of
sounds like this means "subdevices are in the same place". I mean that
literally many of the components are the exact same, 1:1, and the same
drivers with the same configuration will work for both of them. (And
if they turn out to not work, it's as easy as switching the
compatibles/tweaking the SoC-specific DTS.)
If you check the RDB files I linked, they contain the exact layout of
not just the system in general, but each of the individual components
(see for example [1]). These RDB files are called back to multiple times
through the kernel (for example [2]).
Clocks are a notable example of this; if you were to diff the clock
drivers in the kernel I linked in the replied-to message:
diff arch/arm/mach-{hawaii,java}/clock.c
The only differences are some clocks in the KPROC CCU, and the addition
of a MM2 CCU on the BCM23550. (Note that neither of these two CCUs are
supported in mainline at the moment; I have some WIP series to start
adding the KPROC CCU, but it's still an early work-in-progress.)
Most other drivers (sdio, serial, i2c, and so on) have no differences,
as far as I can tell. And they already use the same drivers in mainline.
Best regards
Artur
[1] https://github.com/knuxdroid/android_kernel_samsung_baffinlite/blob/cm-12.1/arch/arm/mach-hawaii/include/mach/rdb/brcm_rdb_kpm_clk_mgr_reg.h
[2] https://github.com/knuxdroid/android_kernel_samsung_baffinlite/blob/cm-12.1/arch/arm/mach-hawaii/clock.c#L4009-L4055
Hi Artur,
kernel test robot noticed the following build warnings:
[auto build test WARNING on a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6]
url: https://github.com/intel-lab-lkp/linux/commits/Artur-Weber/ARM-dts-broadcom-bcm21664-Move-chosen-node-into-bcm21664-garnet-DTS/20240605-144250
base: a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
patch link: https://lore.kernel.org/r/20240605-bcm21664-common-v1-2-6386e9141eb6%40gmail.com
patch subject: [PATCH 2/2] ARM: dts: bcm-mobile: Split out nodes used by both BCM21664 and BCM23550
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240607/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/
dtcheck warnings: (new ones prefixed by >>)
>> arch/arm/boot/dts/broadcom/bcm21664.dtsi:31.37-38.5: Warning (simple_bus_reg): /apps-bus@3e300000/interrupt-controller@1c00100: simple-bus unit address format error, expected "1c01000"
vim +/1c01000 +31 arch/arm/boot/dts/broadcom/bcm21664.dtsi
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 5
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 6 / {
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 7 model = "BCM21664 SoC";
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 8 compatible = "brcm,bcm21664";
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 9 interrupt-parent = <&gic>;
2eba905e860f8a arch/arm/boot/dts/bcm21664.dtsi Markus Mayer 2014-03-06 10
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 11 cpus {
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 12 #address-cells = <1>;
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 13 #size-cells = <0>;
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 14
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 15 cpu0: cpu@0 {
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 16 device_type = "cpu";
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 17 compatible = "arm,cortex-a9";
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 18 reg = <0>;
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 19 };
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 20
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 21 cpu1: cpu@1 {
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 22 device_type = "cpu";
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 23 compatible = "arm,cortex-a9";
f302b57ab0e5ff arch/arm/boot/dts/bcm21664.dtsi Chris Brand 2016-04-28 24 enable-method = "brcm,bcm11351-cpu-method";
84320e1a635fcf arch/arm/boot/dts/bcm21664.dtsi Kapil Hali 2015-12-01 25 secondary-boot-reg = <0x35004178>;
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 26 reg = <1>;
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 27 };
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 28 };
1d3138b75e3af4 arch/arm/boot/dts/bcm21664.dtsi Alex Elder 2014-06-30 29
6a24a6d8543d0b arch/arm/boot/dts/broadcom/bcm21664.dtsi Artur Weber 2024-06-05 30 apps: apps-bus@3e300000 {
6a24a6d8543d0b arch/arm/boot/dts/broadcom/bcm21664.dtsi Artur Weber 2024-06-05 @31 gic: interrupt-controller@1c00100 {
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Artur,
thanks for the patches! Some notes below.
On Wed, Jun 05, 2024 at 08:40:11AM +0200, Artur Weber wrote:
> The BCM21664 and BCM23550 are nearly identical to each other in terms
> of register layout. This was verified against a downstream kernel[1] -
> Broadcom's kernel has "RDB" directories which includes headers with
> the full register maps for the included hardware. Running:
>
> diff --recursive arch/arm/mach-{hawaii,java}/include/mach/rdb
>
> reveals that the differences are minuscule - some things related to
> ISP and H264 decoding. Most of the other differences are related to
> the different CPUs in the two chipsets - the BCM21664 has 2x Cortex-A9
> cores, and the BCM23550 has 4x Cortex-A7 cores.
>
> In mainline, most drivers are also re-used between the two.
>
> To make development for both platforms easier, split out the common
> nodes into a separate DTSI, bcm21664-common.dtsi. This only leaves
> the device-specific nodes - so, CPU and related things - in the SoC-
> specific DTSIs (bcm21664.dtsi and bcm23550.dtsi).
The name "bcm21664-common" makes me think that it's a DTSI for common
properties of multiple BCM21664 *board* DTs, which is obviously not the
case here. IMO something like "bcm21664-bcm23550-common" makes more sense here.
>
> The new DTSI is based off the bcm23550.dtsi, with its split into
> busses. Since it's pretty much 99% identical, I kept the licensing
> of the original file (BSD 3-clause). The license for the bcm21664.dtsi
> file remains GPL 2.0 as it originally was.
>
> make CHECK_DTBS=y on bcm21664-garnet.dtb and bcm23550-sparrow.dtb
> seem to pass fine for me (thanks to Stanislav Jakubek for converting
> the bindings to YAML format!).
:)
> It's worth noting though that some bcm23550 compatibles now go unused,
> since the bcm21664-common.dtsi file uses bcm21664 compatibles.
I don't think this is the way to go. While in these cases the Linux drivers
match only on the generic brcm,kona-* fallback compatible (AFAIK anyway),
the compatibles in DT should still be (SoC-)specific.
I think the common DTSI should omit the compatible values altogether
and instead have the compatible be specified in SoC DTSI. You could keep
a note in the common DTSI saying that the compatible is in SoC DTSI or
something similar.
For example:
- in bcm21664-bcm23550-common.dtsi (or whatever we decide to call it):
gpio: gpio@100300 {
/* compatible is SoC-specific */
reg = <0x100300 0x524>;
...
};
- in bcm21664.dtsi:
&gpio {
compatible = "brcm,bcm21664-gpio", "brcm,kona-gpio";
};
- in bcm23550.dtsi:
&gpio {
compatible = "brcm,bcm23550-gpio", "brcm,kona-gpio";
};
Regards,
Stanislav
>
> [1] https://github.com/knuxdroid/android_kernel_samsung_baffinlite
>
> Signed-off-by: Artur Weber <[email protected]>
> ---
> Artur Weber (2):
> ARM: dts: broadcom: bcm21664: Move chosen node into bcm21664-garnet DTS
> ARM: dts: bcm-mobile: Split out nodes used by both BCM21664 and BCM23550
>
> arch/arm/boot/dts/broadcom/bcm21664-common.dtsi | 334 ++++++++++++++++++++++
> arch/arm/boot/dts/broadcom/bcm21664-garnet.dts | 4 +
> arch/arm/boot/dts/broadcom/bcm21664.dtsi | 326 +---------------------
> arch/arm/boot/dts/broadcom/bcm23550.dtsi | 354 +-----------------------
> 4 files changed, 357 insertions(+), 661 deletions(-)
> ---
> base-commit: a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6
> change-id: 20240528-bcm21664-common-14064864a4a7
>
> Best regards,
> --
> Artur Weber <[email protected]>
>
Hi Artur, some notes below.
On Wed, Jun 05, 2024 at 08:40:13AM +0200, Artur Weber wrote:
> The BCM21664 is nearly identical in terms of register layout to the
> BCM23550. Move the shared nodes into a new file, bcm21664-common.dtsi,
> and make both bcm21664.dtsi and bcm23550.dtsi include it. This new
> common file is based on the former bcm23550.dtsi file, and inherits
> its licensing.
>
> Signed-off-by: Artur Weber <[email protected]>
> ---
> As for other uses - the BCM21654 (not in mainline) appears to be fairly
> similar in a few ways to the BCM21664 as well; the BCM21855/BCM11531 has
> a similar layout of registers, but there are much more differences.
> We could potentially further split more nodes into a single common
> Broadcom Kona DTSI, then make sub-DTSIs to just change the compatibles,
> but that's a task for another patch.
> ---
> .../{bcm23550.dtsi => bcm21664-common.dtsi} | 109 +----
> arch/arm/boot/dts/broadcom/bcm21664.dtsi | 388 ++---------------
> arch/arm/boot/dts/broadcom/bcm23550.dtsi | 482 +++------------------
> 3 files changed, 131 insertions(+), 848 deletions(-)
>
> diff --git a/arch/arm/boot/dts/broadcom/bcm23550.dtsi b/arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
> similarity index 68%
> copy from arch/arm/boot/dts/broadcom/bcm23550.dtsi
> copy to arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
> index 50ebe93d6bd0..44978a459d32 100644
> --- a/arch/arm/boot/dts/broadcom/bcm23550.dtsi
> +++ b/arch/arm/boot/dts/broadcom/bcm21664-common.dtsi
> @@ -1,36 +1,13 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> /*
> - * BSD LICENSE
> + * Common device tree for components shared between the BCM21664 and BCM23550
> + * SoCs.
> *
> - * Copyright(c) 2016 Broadcom. All rights reserved.
> - *
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - *
> - * * Redistributions of source code must retain the above copyright
> - * notice, this list of conditions and the following disclaimer.
> - * * Redistributions in binary form must reproduce the above copyright
> - * notice, this list of conditions and the following disclaimer in
> - * the documentation and/or other materials provided with the
> - * distribution.
> - * * Neither the name of Broadcom Corporation nor the names of its
> - * contributors may be used to endorse or promote products derived
> - * from this software without specific prior written permission.
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + * Copyright (C) 2016 Broadcom
> */
>
> -/* BCM23550 and BCM21664 have almost identical clocks */
> +/dts-v1/;
> +
> #include <dt-bindings/clock/bcm21664.h>
> #include <dt-bindings/interrupt-controller/arm-gic.h>
> #include <dt-bindings/interrupt-controller/irq.h>
> @@ -38,58 +15,16 @@
> / {
> #address-cells = <1>;
> #size-cells = <1>;
> - model = "BCM23550 SoC";
> - compatible = "brcm,bcm23550";
> - interrupt-parent = <&gic>;
> -
> - cpus {
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - cpu0: cpu@0 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - reg = <0>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu1: cpu@1 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <1>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu2: cpu@2 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <2>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu3: cpu@3 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <3>;
> - clock-frequency = <1000000000>;
> - };
> - };
>
> /* Hub bus */
> - hub@34000000 {
> + hub: hub-bus@34000000 {
> compatible = "simple-bus";
> ranges = <0 0x34000000 0x102f83ac>;
> #address-cells = <1>;
> #size-cells = <1>;
>
> smc@4e000 {
> - compatible = "brcm,bcm23550-smc", "brcm,kona-smc";
> + compatible = "brcm,bcm21664-smc", "brcm,kona-smc";
> reg = <0x0004e000 0x400>; /* 1 KiB in SRAM */
> };
>
> @@ -99,7 +34,7 @@ resetmgr: reset-controller@1001f00 {
> };
>
> gpio: gpio@1003000 {
> - compatible = "brcm,bcm23550-gpio", "brcm,kona-gpio";
> + compatible = "brcm,bcm21664-gpio", "brcm,kona-gpio";
> reg = <0x01003000 0x524>;
> interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
> <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
> @@ -120,7 +55,7 @@ timer@1006000 {
> };
>
> /* Slaves bus */
> - slaves@3e000000 {
> + slaves: slaves-bus@3e000000 {
> compatible = "simple-bus";
> ranges = <0 0x3e000000 0x0001c070>;
> #address-cells = <1>;
> @@ -157,7 +92,7 @@ uartb3: serial@2000 {
> };
>
> bsc1: i2c@16000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> + compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> reg = <0x00016000 0x70>;
> interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
> #address-cells = <1>;
> @@ -167,7 +102,7 @@ bsc1: i2c@16000 {
> };
>
> bsc2: i2c@17000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> + compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> reg = <0x00017000 0x70>;
> interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
> #address-cells = <1>;
> @@ -177,7 +112,7 @@ bsc2: i2c@17000 {
> };
>
> bsc3: i2c@18000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> + compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> reg = <0x00018000 0x70>;
> interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
> #address-cells = <1>;
> @@ -187,7 +122,7 @@ bsc3: i2c@18000 {
> };
>
> bsc4: i2c@1c000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> + compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> reg = <0x0001c000 0x70>;
> interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
> #address-cells = <1>;
> @@ -198,7 +133,7 @@ bsc4: i2c@1c000 {
> };
>
> /* Apps bus */
> - apps@3e300000 {
> + apps: apps-bus@3e300000 {
> compatible = "simple-bus";
> ranges = <0 0x3e300000 0x01b77000>;
> #address-cells = <1>;
> @@ -253,20 +188,6 @@ sdio4: mmc@eb0000 {
> clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
> status = "disabled";
> };
> -
> - cdc: cdc@1b0e000 {
> - compatible = "brcm,bcm23550-cdc";
> - reg = <0x01b0e000 0x78>;
> - };
> -
> - gic: interrupt-controller@1b21000 {
> - compatible = "arm,cortex-a9-gic";
> - #interrupt-cells = <3>;
> - #address-cells = <0>;
> - interrupt-controller;
> - reg = <0x01b21000 0x1000>,
> - <0x01b22000 0x1000>;
> - };
> };
>
> clocks {
> diff --git a/arch/arm/boot/dts/broadcom/bcm21664.dtsi b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
> dissimilarity index 93%
> index c1ad5123bad4..a868f09e8930 100644
> --- a/arch/arm/boot/dts/broadcom/bcm21664.dtsi
> +++ b/arch/arm/boot/dts/broadcom/bcm21664.dtsi
> @@ -1,341 +1,47 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -// Copyright (C) 2014 Broadcom Corporation
> -
> -#include <dt-bindings/clock/bcm21664.h>
> -#include <dt-bindings/interrupt-controller/arm-gic.h>
> -#include <dt-bindings/interrupt-controller/irq.h>
> -
> -/ {
> - #address-cells = <1>;
> - #size-cells = <1>;
> - model = "BCM21664 SoC";
> - compatible = "brcm,bcm21664";
> - interrupt-parent = <&gic>;
> -
> - cpus {
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - cpu0: cpu@0 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a9";
> - reg = <0>;
> - };
> -
> - cpu1: cpu@1 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a9";
> - enable-method = "brcm,bcm11351-cpu-method";
> - secondary-boot-reg = <0x35004178>;
> - reg = <1>;
> - };
> - };
> -
> - gic: interrupt-controller@3ff00100 {
> - compatible = "arm,cortex-a9-gic";
> - #interrupt-cells = <3>;
> - #address-cells = <0>;
> - interrupt-controller;
> - reg = <0x3ff01000 0x1000>,
> - <0x3ff00100 0x100>;
> - };
> -
> - smc@3404e000 {
> - compatible = "brcm,bcm21664-smc", "brcm,kona-smc";
> - reg = <0x3404e000 0x400>; /* 1 KiB in SRAM */
> - };
> -
> - uartb: serial@3e000000 {
> - compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
> - reg = <0x3e000000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB>;
> - interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - uartb2: serial@3e001000 {
> - compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
> - reg = <0x3e001000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB2>;
> - interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - uartb3: serial@3e002000 {
> - compatible = "brcm,bcm21664-dw-apb-uart", "snps,dw-apb-uart";
> - reg = <0x3e002000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB3>;
> - interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - L2: cache-controller@3ff20000 {
> - compatible = "arm,pl310-cache";
> - reg = <0x3ff20000 0x1000>;
> - cache-unified;
> - cache-level = <2>;
> - };
> -
> - brcm,resetmgr@35001f00 {
> - compatible = "brcm,bcm21664-resetmgr";
> - reg = <0x35001f00 0x24>;
> - };
> -
> - timer@35006000 {
> - compatible = "brcm,kona-timer";
> - reg = <0x35006000 0x1c>;
> - interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&aon_ccu BCM21664_AON_CCU_HUB_TIMER>;
> - };
> -
> - gpio: gpio@35003000 {
> - compatible = "brcm,bcm21664-gpio", "brcm,kona-gpio";
> - reg = <0x35003000 0x524>;
> - interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
> - #gpio-cells = <2>;
> - #interrupt-cells = <2>;
> - gpio-controller;
> - interrupt-controller;
> - };
> -
> - sdio1: mmc@3f180000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x3f180000 0x801c>;
> - interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO1>;
> - status = "disabled";
> - };
> -
> - sdio2: mmc@3f190000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x3f190000 0x801c>;
> - interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO2>;
> - status = "disabled";
> - };
> -
> - sdio3: mmc@3f1a0000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x3f1a0000 0x801c>;
> - interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO3>;
> - status = "disabled";
> - };
> -
> - sdio4: mmc@3f1b0000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x3f1b0000 0x801c>;
> - interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
> - status = "disabled";
> - };
> -
> - bsc1: i2c@3e016000 {
> - compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> - reg = <0x3e016000 0x70>;
> - interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC1>;
> - status = "disabled";
> - };
> -
> - bsc2: i2c@3e017000 {
> - compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> - reg = <0x3e017000 0x70>;
> - interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC2>;
> - status = "disabled";
> - };
> -
> - bsc3: i2c@3e018000 {
> - compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> - reg = <0x3e018000 0x70>;
> - interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC3>;
> - status = "disabled";
> - };
> -
> - bsc4: i2c@3e01c000 {
> - compatible = "brcm,bcm21664-i2c", "brcm,kona-i2c";
> - reg = <0x3e01c000 0x70>;
> - interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC4>;
> - status = "disabled";
> - };
> -
> - clocks {
> - #address-cells = <1>;
> - #size-cells = <1>;
> - ranges;
> -
> - /*
> - * Fixed clocks are defined before CCUs whose
> - * clocks may depend on them.
> - */
> -
> - ref_32k_clk: ref_32k {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <32768>;
> - };
> -
> - bbl_32k_clk: bbl_32k {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <32768>;
> - };
> -
> - ref_13m_clk: ref_13m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <13000000>;
> - };
> -
> - var_13m_clk: var_13m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <13000000>;
> - };
> -
> - dft_19_5m_clk: dft_19_5m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <19500000>;
> - };
> -
> - ref_crystal_clk: ref_crystal {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <26000000>;
> - };
> -
> - ref_52m_clk: ref_52m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - var_52m_clk: var_52m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - usb_otg_ahb_clk: usb_otg_ahb {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - ref_96m_clk: ref_96m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <96000000>;
> - };
> -
> - var_96m_clk: var_96m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <96000000>;
> - };
> -
> - ref_104m_clk: ref_104m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <104000000>;
> - };
> -
> - var_104m_clk: var_104m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <104000000>;
> - };
> -
> - ref_156m_clk: ref_156m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <156000000>;
> - };
> -
> - var_156m_clk: var_156m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <156000000>;
> - };
> -
> - root_ccu: root_ccu@35001000 {
> - compatible = "brcm,bcm21664-root-ccu";
> - reg = <0x35001000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "frac_1m";
> - };
> -
> - aon_ccu: aon_ccu@35002000 {
> - compatible = "brcm,bcm21664-aon-ccu";
> - reg = <0x35002000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "hub_timer";
> - };
> -
> - master_ccu: master_ccu@3f001000 {
> - compatible = "brcm,bcm21664-master-ccu";
> - reg = <0x3f001000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "sdio1",
> - "sdio2",
> - "sdio3",
> - "sdio4",
> - "sdio1_sleep",
> - "sdio2_sleep",
> - "sdio3_sleep",
> - "sdio4_sleep";
> - };
> -
> - slave_ccu: slave_ccu@3e011000 {
> - compatible = "brcm,bcm21664-slave-ccu";
> - reg = <0x3e011000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "uartb",
> - "uartb2",
> - "uartb3",
> - "bsc1",
> - "bsc2",
> - "bsc3",
> - "bsc4";
> - };
> - };
> -
> - usbotg: usb@3f120000 {
> - compatible = "snps,dwc2";
> - reg = <0x3f120000 0x10000>;
> - interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&usb_otg_ahb_clk>;
> - clock-names = "otg";
> - phys = <&usbphy>;
> - phy-names = "usb2-phy";
> - status = "disabled";
> - };
> -
> - usbphy: usb-phy@3f130000 {
> - compatible = "brcm,kona-usb2-phy";
> - reg = <0x3f130000 0x28>;
> - #phy-cells = <0>;
> - status = "disabled";
> - };
> -};
> +// SPDX-License-Identifier: GPL-2.0-only
> +// Copyright (C) 2014 Broadcom Corporation
> +
> +#include "bcm21664-common.dtsi"
> +
> +/ {
> + model = "BCM21664 SoC";
> + compatible = "brcm,bcm21664";
Aren't model and compatible board-specific?
> + interrupt-parent = <&gic>;
> +
> + cpus {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + cpu0: cpu@0 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a9";
> + reg = <0>;
> + };
> +
> + cpu1: cpu@1 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a9";
> + enable-method = "brcm,bcm11351-cpu-method";
> + secondary-boot-reg = <0x35004178>;
> + reg = <1>;
> + };
> + };
> +
> + apps: apps-bus@3e300000 {
You can just reference this by the label, i.e.
&apps {
gic: ...
L2: ...
};
> + gic: interrupt-controller@1c00100 {
> + compatible = "arm,cortex-a9-gic";
> + #interrupt-cells = <3>;
> + #address-cells = <0>;
> + interrupt-controller;
> + reg = <0x01c01000 0x1000>,
> + <0x01c00100 0x100>;
> + };
> +
> + L2: cache-controller@1c20000 {
> + compatible = "arm,pl310-cache";
> + reg = <0x01c20000 0x1000>;
> + cache-unified;
> + cache-level = <2>;
> + };
> + };
> +};
> diff --git a/arch/arm/boot/dts/broadcom/bcm23550.dtsi b/arch/arm/boot/dts/broadcom/bcm23550.dtsi
> dissimilarity index 88%
> index 50ebe93d6bd0..bb5ae970816b 100644
> --- a/arch/arm/boot/dts/broadcom/bcm23550.dtsi
> +++ b/arch/arm/boot/dts/broadcom/bcm23550.dtsi
> @@ -1,413 +1,69 @@
> -/*
> - * BSD LICENSE
> - *
> - * Copyright(c) 2016 Broadcom. All rights reserved.
> - *
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - *
> - * * Redistributions of source code must retain the above copyright
> - * notice, this list of conditions and the following disclaimer.
> - * * Redistributions in binary form must reproduce the above copyright
> - * notice, this list of conditions and the following disclaimer in
> - * the documentation and/or other materials provided with the
> - * distribution.
> - * * Neither the name of Broadcom Corporation nor the names of its
> - * contributors may be used to endorse or promote products derived
> - * from this software without specific prior written permission.
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> - */
> -
> -/* BCM23550 and BCM21664 have almost identical clocks */
> -#include <dt-bindings/clock/bcm21664.h>
> -#include <dt-bindings/interrupt-controller/arm-gic.h>
> -#include <dt-bindings/interrupt-controller/irq.h>
> -
> -/ {
> - #address-cells = <1>;
> - #size-cells = <1>;
> - model = "BCM23550 SoC";
> - compatible = "brcm,bcm23550";
> - interrupt-parent = <&gic>;
> -
> - cpus {
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - cpu0: cpu@0 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - reg = <0>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu1: cpu@1 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <1>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu2: cpu@2 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <2>;
> - clock-frequency = <1000000000>;
> - };
> -
> - cpu3: cpu@3 {
> - device_type = "cpu";
> - compatible = "arm,cortex-a7";
> - enable-method = "brcm,bcm23550";
> - secondary-boot-reg = <0x35004178>;
> - reg = <3>;
> - clock-frequency = <1000000000>;
> - };
> - };
> -
> - /* Hub bus */
> - hub@34000000 {
> - compatible = "simple-bus";
> - ranges = <0 0x34000000 0x102f83ac>;
> - #address-cells = <1>;
> - #size-cells = <1>;
> -
> - smc@4e000 {
> - compatible = "brcm,bcm23550-smc", "brcm,kona-smc";
> - reg = <0x0004e000 0x400>; /* 1 KiB in SRAM */
> - };
> -
> - resetmgr: reset-controller@1001f00 {
> - compatible = "brcm,bcm21664-resetmgr";
> - reg = <0x01001f00 0x24>;
> - };
> -
> - gpio: gpio@1003000 {
> - compatible = "brcm,bcm23550-gpio", "brcm,kona-gpio";
> - reg = <0x01003000 0x524>;
> - interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
> - <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
> - #gpio-cells = <2>;
> - #interrupt-cells = <2>;
> - gpio-controller;
> - interrupt-controller;
> - };
> -
> - timer@1006000 {
> - compatible = "brcm,kona-timer";
> - reg = <0x01006000 0x1c>;
> - interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&aon_ccu BCM21664_AON_CCU_HUB_TIMER>;
> - };
> - };
> -
> - /* Slaves bus */
> - slaves@3e000000 {
> - compatible = "simple-bus";
> - ranges = <0 0x3e000000 0x0001c070>;
> - #address-cells = <1>;
> - #size-cells = <1>;
> -
> - uartb: serial@0 {
> - compatible = "snps,dw-apb-uart";
> - reg = <0x00000000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB>;
> - interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - uartb2: serial@1000 {
> - compatible = "snps,dw-apb-uart";
> - reg = <0x00001000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB2>;
> - interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - uartb3: serial@2000 {
> - compatible = "snps,dw-apb-uart";
> - reg = <0x00002000 0x118>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_UARTB3>;
> - interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
> - reg-shift = <2>;
> - reg-io-width = <4>;
> - status = "disabled";
> - };
> -
> - bsc1: i2c@16000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> - reg = <0x00016000 0x70>;
> - interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC1>;
> - status = "disabled";
> - };
> -
> - bsc2: i2c@17000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> - reg = <0x00017000 0x70>;
> - interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC2>;
> - status = "disabled";
> - };
> -
> - bsc3: i2c@18000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> - reg = <0x00018000 0x70>;
> - interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC3>;
> - status = "disabled";
> - };
> -
> - bsc4: i2c@1c000 {
> - compatible = "brcm,bcm23550-i2c", "brcm,kona-i2c";
> - reg = <0x0001c000 0x70>;
> - interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - clocks = <&slave_ccu BCM21664_SLAVE_CCU_BSC4>;
> - status = "disabled";
> - };
> - };
> -
> - /* Apps bus */
> - apps@3e300000 {
> - compatible = "simple-bus";
> - ranges = <0 0x3e300000 0x01b77000>;
> - #address-cells = <1>;
> - #size-cells = <1>;
> -
> - usbotg: usb@e20000 {
> - compatible = "snps,dwc2";
> - reg = <0x00e20000 0x10000>;
> - interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&usb_otg_ahb_clk>;
> - clock-names = "otg";
> - phys = <&usbphy>;
> - phy-names = "usb2-phy";
> - status = "disabled";
> - };
> -
> - usbphy: usb-phy@e30000 {
> - compatible = "brcm,kona-usb2-phy";
> - reg = <0x00e30000 0x28>;
> - #phy-cells = <0>;
> - status = "disabled";
> - };
> -
> - sdio1: mmc@e80000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x00e80000 0x801c>;
> - interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO1>;
> - status = "disabled";
> - };
> -
> - sdio2: mmc@e90000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x00e90000 0x801c>;
> - interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO2>;
> - status = "disabled";
> - };
> -
> - sdio3: mmc@ea0000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x00ea0000 0x801c>;
> - interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO3>;
> - status = "disabled";
> - };
> -
> - sdio4: mmc@eb0000 {
> - compatible = "brcm,kona-sdhci";
> - reg = <0x00eb0000 0x801c>;
> - interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
> - clocks = <&master_ccu BCM21664_MASTER_CCU_SDIO4>;
> - status = "disabled";
> - };
> -
> - cdc: cdc@1b0e000 {
> - compatible = "brcm,bcm23550-cdc";
> - reg = <0x01b0e000 0x78>;
> - };
> -
> - gic: interrupt-controller@1b21000 {
> - compatible = "arm,cortex-a9-gic";
> - #interrupt-cells = <3>;
> - #address-cells = <0>;
> - interrupt-controller;
> - reg = <0x01b21000 0x1000>,
> - <0x01b22000 0x1000>;
> - };
> - };
> -
> - clocks {
> - #address-cells = <1>;
> - #size-cells = <1>;
> - ranges;
> -
> - /*
> - * Fixed clocks are defined before CCUs whose
> - * clocks may depend on them.
> - */
> -
> - ref_32k_clk: ref_32k {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <32768>;
> - };
> -
> - bbl_32k_clk: bbl_32k {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <32768>;
> - };
> -
> - ref_13m_clk: ref_13m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <13000000>;
> - };
> -
> - var_13m_clk: var_13m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <13000000>;
> - };
> -
> - dft_19_5m_clk: dft_19_5m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <19500000>;
> - };
> -
> - ref_crystal_clk: ref_crystal {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <26000000>;
> - };
> -
> - ref_52m_clk: ref_52m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - var_52m_clk: var_52m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - usb_otg_ahb_clk: usb_otg_ahb {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <52000000>;
> - };
> -
> - ref_96m_clk: ref_96m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <96000000>;
> - };
> -
> - var_96m_clk: var_96m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <96000000>;
> - };
> -
> - ref_104m_clk: ref_104m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <104000000>;
> - };
> -
> - var_104m_clk: var_104m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <104000000>;
> - };
> -
> - ref_156m_clk: ref_156m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <156000000>;
> - };
> -
> - var_156m_clk: var_156m {
> - #clock-cells = <0>;
> - compatible = "fixed-clock";
> - clock-frequency = <156000000>;
> - };
> -
> - root_ccu: root_ccu@35001000 {
> - compatible = "brcm,bcm21664-root-ccu";
> - reg = <0x35001000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "frac_1m";
> - };
> -
> - aon_ccu: aon_ccu@35002000 {
> - compatible = "brcm,bcm21664-aon-ccu";
> - reg = <0x35002000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "hub_timer";
> - };
> -
> - slave_ccu: slave_ccu@3e011000 {
> - compatible = "brcm,bcm21664-slave-ccu";
> - reg = <0x3e011000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "uartb",
> - "uartb2",
> - "uartb3",
> - "bsc1",
> - "bsc2",
> - "bsc3",
> - "bsc4";
> - };
> -
> - master_ccu: master_ccu@3f001000 {
> - compatible = "brcm,bcm21664-master-ccu";
> - reg = <0x3f001000 0x0f00>;
> - #clock-cells = <1>;
> - clock-output-names = "sdio1",
> - "sdio2",
> - "sdio3",
> - "sdio4",
> - "sdio1_sleep",
> - "sdio2_sleep",
> - "sdio3_sleep",
> - "sdio4_sleep";
> - };
> - };
> -};
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Device tree for the BCM23550 SoC.
> + *
> + * Copyright (C) 2016 Broadcom
> + */
> +
> +#include "bcm21664-common.dtsi"
> +
> +/ {
> + model = "BCM23550 SoC";
> + compatible = "brcm,bcm23550";
Same here.
> + interrupt-parent = <&gic>;
> +
> + cpus {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + cpu0: cpu@0 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a7";
> + reg = <0>;
> + clock-frequency = <1000000000>;
> + };
> +
> + cpu1: cpu@1 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a7";
> + enable-method = "brcm,bcm23550";
> + secondary-boot-reg = <0x35004178>;
> + reg = <1>;
> + clock-frequency = <1000000000>;
> + };
> +
> + cpu2: cpu@2 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a7";
> + enable-method = "brcm,bcm23550";
> + secondary-boot-reg = <0x35004178>;
> + reg = <2>;
> + clock-frequency = <1000000000>;
> + };
> +
> + cpu3: cpu@3 {
> + device_type = "cpu";
> + compatible = "arm,cortex-a7";
> + enable-method = "brcm,bcm23550";
> + secondary-boot-reg = <0x35004178>;
> + reg = <3>;
> + clock-frequency = <1000000000>;
> + };
> + };
> +
> + apps: apps-bus@3e300000 {
Same here.
Regards,
Stanislav
> + cdc: cdc@1b0e000 {
> + compatible = "brcm,bcm23550-cdc";
> + reg = <0x01b0e000 0x78>;
> + };
> +
> + gic: interrupt-controller@1b21000 {
> + compatible = "arm,cortex-a9-gic";
> + #interrupt-cells = <3>;
> + #address-cells = <0>;
> + interrupt-controller;
> + reg = <0x01b21000 0x1000>,
> + <0x01b22000 0x1000>;
> + };
> + };
> +};
>
> --
> 2.45.1
>
On 8.06.2024 15:06, Stanislav Jakubek wrote:
>> To make development for both platforms easier, split out the common
>> nodes into a separate DTSI, bcm21664-common.dtsi. This only leaves
>> the device-specific nodes - so, CPU and related things - in the SoC-
>> specific DTSIs (bcm21664.dtsi and bcm23550.dtsi).
>
> The name "bcm21664-common" makes me think that it's a DTSI for common
> properties of multiple BCM21664 *board* DTs, which is obviously not the
> case here. IMO something like "bcm21664-bcm23550-common" makes more sense here.
>
The "bcm21664-common" name sounds fine to me, though I can certainly see
how it could be interpreted as a board DTSI (I was planning to make a
bcm21664-samsung-common.dtsi for Samsung's BCM21664-based phones, funny
enough...)
The idea of just putting together the two model numbers sounded a bit
awkward to me at first, but I've been thinking about it and I'm starting
to warm up to it. There are a handful of examples of a similar double-
naming scheme: e.g. intel-ixp45x-ixp46x.dtsi, sunxi-h3-h5.dtsi, sun8i-
a23-a33.dtsi. The difference is that these DTSIs have a manufacturer
prefix and no "-common" suffix.
I had many ideas for naming the common DTSI. My initial idea was
"bcm216xx.dtsi", but that would cover the BCM21654 (which has a few more
differences); then "bcm2166x.dtsi" which would cover the BCM21663 and
BCM21664 (which AFAIK are largely the same). We could combine it with
the current name and get "bcm2166x-common.dtsi". That already sounds
less like a board file to me, what do you think?
>> It's worth noting though that some bcm23550 compatibles now go unused,
>> since the bcm21664-common.dtsi file uses bcm21664 compatibles.
>
> I don't think this is the way to go. While in these cases the Linux drivers
> match only on the generic brcm,kona-* fallback compatible (AFAIK anyway),
> the compatibles in DT should still be (SoC-)specific.
>
> I think the common DTSI should omit the compatible values altogether
> and instead have the compatible be specified in SoC DTSI. You could keep
> a note in the common DTSI saying that the compatible is in SoC DTSI or
> something similar.
There's plenty of DTSIs in the kernel that have "device-specific"
compatibles in common DTSIs. Off the top of my head I can name the
Exynos 4 DTSIs that do this pretty often[1][2][3] (4210 and 4212
compatibles in DTSIs that are later included from the 4412 DTSI, but
which does not override any of them).
While looking around for examples I stumbled upon some sunxi DTSIs that
actually do *both*: have some compatibles that mention one of the two
models they cover, but leave some compatibles to be set in the child
DTSIs[4][5].
Since as I mentioned the underlying components seem to be the exact
same, the compatibles are really just cosmetic; plus I feel like lots of
such compatible-only nodes could add unnecessary noise to the SoC DTSIs.
With that said, I'm not against the idea, and I suppose it's not too
much extra work. I'm curious what other reviewers will have to say, but
either way I'll try to incorporate this into the next version of this
patchset.
Best regards
Artur
[1]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/samsung/exynos4.dtsi
[2]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/samsung/exynos4x12.dtsi
[3]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/samsung/exynos4412.dtsi
[4]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/allwinner/sunxi-h3-h5.dtsi
[5]
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/allwinner/sun8i-a23-a33.dtsi