
On 3/24/22 18:13, Andre Przywara wrote:
On Wed, 23 Mar 2022 19:03:48 -0700 William Zhang william.zhang@broadcom.com wrote:
Hi,
This is the initial support for Broadcom's ARM-based 47622 SOC.
In this change, our first SOC is an armv7 platform called 47622. The initial support includes a bare-bone implementation and dts with ARM PL011 uart.
As Tom said, you need to run the DT through the kernel review first. To maybe save you one round there, see below my comments.
Yes we are working on that.
The SOC-specific code resides in arch/arm/mach-bcmbca/<soc> and board related code is in board/broadcom/bcmba.
The u-boot image can be loaded from flash or network to the entry point address in the memory and boot from there.
Signed-off-by: William Zhang william.zhang@broadcom.com Signed-off-by: Kursad Oney kursad.oney@broadcom.com Signed-off-by: Anand Gore anand.gore@broadcom.com
MAINTAINERS | 11 ++++++++ arch/arm/Kconfig | 7 ++++++ arch/arm/Makefile | 1 + arch/arm/dts/Makefile | 3 +++ arch/arm/dts/bcm47622.dtsi | 25 ++++++++++++++++++ arch/arm/dts/bcm947622.dts | 31 +++++++++++++++++++++++ arch/arm/mach-bcmbca/Kconfig | 17 +++++++++++++ arch/arm/mach-bcmbca/Makefile | 6 +++++ arch/arm/mach-bcmbca/bcm47622/Kconfig | 17 +++++++++++++ arch/arm/mach-bcmbca/bcm47622/Makefile | 5 ++++ board/broadcom/bcmbca/Kconfig | 17 +++++++++++++ board/broadcom/bcmbca/Makefile | 5 ++++ board/broadcom/bcmbca/board.c | 35 ++++++++++++++++++++++++++ configs/bcm947622_defconfig | 18 +++++++++++++ include/configs/bcm947622.h | 21 ++++++++++++++++ 15 files changed, 219 insertions(+) create mode 100644 arch/arm/dts/bcm47622.dtsi create mode 100644 arch/arm/dts/bcm947622.dts create mode 100644 arch/arm/mach-bcmbca/Kconfig create mode 100644 arch/arm/mach-bcmbca/Makefile create mode 100644 arch/arm/mach-bcmbca/bcm47622/Kconfig create mode 100644 arch/arm/mach-bcmbca/bcm47622/Makefile create mode 100644 board/broadcom/bcmbca/Kconfig create mode 100644 board/broadcom/bcmbca/Makefile create mode 100644 board/broadcom/bcmbca/board.c create mode 100644 configs/bcm947622_defconfig create mode 100644 include/configs/bcm947622.h
diff --git a/MAINTAINERS b/MAINTAINERS index 96582fc677..ef4a9b04e8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -195,6 +195,17 @@ F: drivers/pinctrl/broadcom/ F: configs/rpi_* T: git https://source.denx.de/u-boot/custodians/u-boot-arm.git
+ARM BROADCOM BCMBCA +M: Anand Gore anand.gore@broadcom.com +M: William Zhang william.zhang@broadcom.com +M: Kursad Oney kursad.oney@broadcom.com +M: Joel Peshkin joel.peshkin@broadcom.com +S: Maintained +F: arch/arm/mach-bcmbca/ +F: board/broadcom/bcmbca/ +F: configs/bcm947622_defconfig +F: include/configs/bcm947622.h
- ARM BROADCOM BCMSTB M: Thomas Fitzsimmons fitzsim@fitzsim.org S: Maintained
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4567c183fb..9a75d2e6bb 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -641,6 +641,11 @@ config ARCH_BCMSTB This enables support for Broadcom ARM-based set-top box chipsets, including the 7445 family of chips.
+config ARCH_BCMBCA
- bool "Broadcom broadband chip family"
- select DM
- select OF_CONTROL
- config TARGET_VEXPRESS_CA9X4 bool "Support vexpress_ca9x4" select CPU_V7A
@@ -2092,6 +2097,8 @@ source "arch/arm/mach-at91/Kconfig"
source "arch/arm/mach-bcm283x/Kconfig"
+source "arch/arm/mach-bcmbca/Kconfig"
source "arch/arm/mach-bcmstb/Kconfig"
source "arch/arm/mach-davinci/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index ad757e982e..0fd127e0e7 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -59,6 +59,7 @@ machine-$(CONFIG_ARCH_APPLE) += apple machine-$(CONFIG_ARCH_ASPEED) += aspeed machine-$(CONFIG_ARCH_AT91) += at91 machine-$(CONFIG_ARCH_BCM283X) += bcm283x +machine-$(CONFIG_ARCH_BCMBCA) += bcmbca machine-$(CONFIG_ARCH_BCMSTB) += bcmstb machine-$(CONFIG_ARCH_DAVINCI) += davinci machine-$(CONFIG_ARCH_EXYNOS) += exynos diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 644ba961a2..448347d278 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -1112,6 +1112,9 @@ dtb-$(CONFIG_TARGET_BCMNS3) += ns3-board.dtb
dtb-$(CONFIG_ARCH_BCMSTB) += bcm7xxx.dtb
+dtb-$(CONFIG_BCM47622) += \
- bcm947622.dtb
- dtb-$(CONFIG_ASPEED_AST2500) += ast2500-evb.dtb dtb-$(CONFIG_ASPEED_AST2600) += ast2600-evb.dtb
diff --git a/arch/arm/dts/bcm47622.dtsi b/arch/arm/dts/bcm47622.dtsi new file mode 100644 index 0000000000..1fe05daa67 --- /dev/null +++ b/arch/arm/dts/bcm47622.dtsi @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright 2019 Broadcom Ltd.
- */
+#include "skeleton.dtsi"
skeleton is not used anymore in the kernel.
+/ {
- compatible = "brcm,bcm47622";
- #address-cells = <0x1>;
- #size-cells = <0x1>;
Just use decimals: ... = <1>;
- ubus@ff800000 {
just: bus@ff800000 {
Actually not sure you need that at all. Are there going to be more devices later?
There will be more devices under this peripheral bus. I will rename it as periph.
compatible = "simple-bus";
#address-cells = <0x1>;
#size-cells = <0x1>;
uart0: serial@ff812000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0xff812000 0x1000>;
clock = <50000000>;
This is not an official property. Please use a fixed-clock and the clocks property.
In general, once you have those files in the kernel tree, run your DT through "make dtbs_check". This will report a lot of unrelated failures initially, so ignore the first run, "touch" your .dts file, then re-run.
If this SoC contains Cortex-A7 cores, then please also add the GIC, arch timer and CPU nodes, for basic functionality.
Thanks for the feedbacks Andre! Will address all your comments in the dts we submit to kernel upstream.
Cheers, Andre
status = "disabled";
};
- };
+}; diff --git a/arch/arm/dts/bcm947622.dts b/arch/arm/dts/bcm947622.dts new file mode 100644 index 0000000000..e241c4ec56 --- /dev/null +++ b/arch/arm/dts/bcm947622.dts @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 +/*
- Copyright 2019 Broadcom Ltd.
- */
+/dts-v1/;
+#include "bcm47622.dtsi"
+/ {
- model = "Broadcom bcm947622";
- compatible = "broadcom,bcm947622", "brcm,bcm947622";
- aliases {
serial0 = &uart0;
- };
- chosen {
stdout-path = "serial0:115200n8";
- };
- memory {
device_type = "memory";
reg = <0x0 0x08000000>;
- };
+};
+&uart0 {
- status = "okay";
+};
diff --git a/arch/arm/mach-bcmbca/Kconfig b/arch/arm/mach-bcmbca/Kconfig new file mode 100644 index 0000000000..2d49380f87 --- /dev/null +++ b/arch/arm/mach-bcmbca/Kconfig @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd +#
+if ARCH_BCMBCA
+config BCM47622
- bool "Support for Broadcom 47622 Family"
- select SYS_ARCH_TIMER
- select CPU_V7A
- select DM_SERIAL
- select PL01X_SERIAL
+endif
+source "arch/arm/mach-bcmbca/bcm47622/Kconfig" diff --git a/arch/arm/mach-bcmbca/Makefile b/arch/arm/mach-bcmbca/Makefile new file mode 100644 index 0000000000..072d4ea7b5 --- /dev/null +++ b/arch/arm/mach-bcmbca/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd +#
+obj-$(CONFIG_BCM47622) += bcm47622/ diff --git a/arch/arm/mach-bcmbca/bcm47622/Kconfig b/arch/arm/mach-bcmbca/bcm47622/Kconfig new file mode 100644 index 0000000000..bce30892e3 --- /dev/null +++ b/arch/arm/mach-bcmbca/bcm47622/Kconfig @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd +#
+if BCM47622
+config TARGET_BCM947622
- bool "Broadcom 47622 Reference Board"
- depends on ARCH_BCMBCA
+config SYS_SOC
- default "bcm47622"
+source "board/broadcom/bcmbca/Kconfig"
+endif diff --git a/arch/arm/mach-bcmbca/bcm47622/Makefile b/arch/arm/mach-bcmbca/bcm47622/Makefile new file mode 100644 index 0000000000..beb979af75 --- /dev/null +++ b/arch/arm/mach-bcmbca/bcm47622/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd +# +obj- += dummy.o diff --git a/board/broadcom/bcmbca/Kconfig b/board/broadcom/bcmbca/Kconfig new file mode 100644 index 0000000000..63d4252da6 --- /dev/null +++ b/board/broadcom/bcmbca/Kconfig @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd +#
+config SYS_BOARD
- default "bcmbca"
+config SYS_VENDOR
- default "broadcom"
+if TARGET_BCM947622
+config SYS_CONFIG_NAME
- default "bcm947622"
+endif diff --git a/board/broadcom/bcmbca/Makefile b/board/broadcom/bcmbca/Makefile new file mode 100644 index 0000000000..8f06c3111b --- /dev/null +++ b/board/broadcom/bcmbca/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2022 Broadcom Ltd
+obj-y += board.o diff --git a/board/broadcom/bcmbca/board.c b/board/broadcom/bcmbca/board.c new file mode 100644 index 0000000000..4aa1d659d5 --- /dev/null +++ b/board/broadcom/bcmbca/board.c @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- (C) Copyright 2022 Broadcom Ltd.
- */
+#include <common.h> +#include <fdtdec.h>
+int board_init(void) +{
- return 0;
+}
+int dram_init(void) +{
- if (fdtdec_setup_mem_size_base() != 0)
puts("fdtdec_setup_mem_size_base() has failed\n");
- return 0;
+}
+int dram_init_banksize(void) +{
- fdtdec_setup_memory_banksize();
- return 0;
+}
+int print_cpuinfo(void) +{
- return 0;
+}
+void reset_cpu(ulong addr) +{ +} diff --git a/configs/bcm947622_defconfig b/configs/bcm947622_defconfig new file mode 100644 index 0000000000..c8d14820af --- /dev/null +++ b/configs/bcm947622_defconfig @@ -0,0 +1,18 @@ +CONFIG_ARM=y +CONFIG_ARCH_BCMBCA=y +CONFIG_SYS_TEXT_BASE=0x10000000 +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SYS_MALLOC_F_LEN=0x8000 +CONFIG_BCM47622=y +CONFIG_TARGET_BCM947622=y +CONFIG_NR_DRAM_BANKS=1 +CONFIG_DEFAULT_DEVICE_TREE="bcm947622" +CONFIG_IDENT_STRING=" Broadcom BCM47622" +CONFIG_ENV_VARS_UBOOT_CONFIG=y +CONFIG_SYS_LOAD_ADDR=0x10000000 +CONFIG_OF_STDOUT_VIA_ALIAS=y +CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_CACHE=y +CONFIG_OF_EMBED=y +CONFIG_CLK=y diff --git a/include/configs/bcm947622.h b/include/configs/bcm947622.h new file mode 100644 index 0000000000..7c80e88be0 --- /dev/null +++ b/include/configs/bcm947622.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- (C) Copyright 2022 Broadcom Ltd.
- */
+#ifndef __BCM947622_H +#define __BCM947622_H +#include <linux/sizes.h>
+#define CONFIG_SYS_MAXARGS 64 +#define CONFIG_SYS_BOOTM_LEN (32 * 1024 * 1024)
+/* UART */ +#define CONFIG_SYS_BAUDRATE_TABLE { 115200 }
+#define CONFIG_SYS_SDRAM_BASE 0x00000000
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE + SZ_16M)
+#define COUNTER_FREQUENCY 50000000 +#endif