On 10/6/23 14:51, Biju Das wrote:
Hi Paul,
Subject: Re: [PATCH 16/16] board: rzg2l: Add RZ/G2L SMARC EVK board
On 03/10/2023 14:36, Marek Vasut wrote:
On 9/20/23 14:42, Paul Barker wrote:
The Renesas RZ/G2L SMARC Evaluation Board Kit consists of the RZ/G2L
System-on-Module (SOM) based on the R9A07G044L2 SoC, and a common
SMARC carrier board.
The ARM TrustedFirmware code for the Renesas RZ/G2L SoC family passes
a devicetree blob to the bootloader as an argument in the same was
previous R-Car gen3/gen4 SoCs. This blob contains a compatible string
which can be used to identify the particular SoC we are running on
and this is used to select the appropriate device tree to load.
The configuration renesas_rzg2l_smarc_defconfig is added to support
building for this target. In the future this defconfig will be
extended to support other SoCs and evaluation boards from the RZ/G2L
family.
Signed-off-by: Paul Barker <paul.barker...@bp.renesas.com>
Reviewed-by: Biju Das <biju.das...@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad...@bp.renesas.com>
---
arch/arm/mach-rmobile/Kconfig.rzg2l | 14 +++++
board/renesas/rzg2l/Kconfig | 18 +++++++
board/renesas/rzg2l/MAINTAINERS | 6 +++
board/renesas/rzg2l/Makefile | 4 ++
board/renesas/rzg2l/rzg2l.c | 76 +++++++++++++++++++++++++++
configs/renesas_rzg2l_smarc_defconfig | 52 ++++++++++++++++++
include/configs/rzg2l-smarc.h | 14 +++++
7 files changed, 184 insertions(+)
create mode 100644 board/renesas/rzg2l/Kconfig
create mode 100644 board/renesas/rzg2l/MAINTAINERS
create mode 100644 board/renesas/rzg2l/Makefile
create mode 100644 board/renesas/rzg2l/rzg2l.c
create mode 100644 configs/renesas_rzg2l_smarc_defconfig
create mode 100644 include/configs/rzg2l-smarc.h
diff --git a/arch/arm/mach-rmobile/Kconfig.rzg2l
b/arch/arm/mach-rmobile/Kconfig.rzg2l
index 7d268e8c366a..1fe49e323300 100644
--- a/arch/arm/mach-rmobile/Kconfig.rzg2l
+++ b/arch/arm/mach-rmobile/Kconfig.rzg2l
@@ -9,6 +9,20 @@ config R9A07G044L
help
Enable support for the R9A07G044L SoC used in the RZ/G2L.
+choice
+ prompt "Renesas RZ/G2L Family Board selection"
+ default TARGET_RZG2L_SMARC_EVK
+
+config TARGET_RZG2L_SMARC_EVK
+ bool "Renesas RZ/G2L SMARC EVK"
+ imply R9A07G044L
+ help
+ Enable support for the RZ/G2L SMARC evaluation board.
+
+source "board/renesas/rzg2l/Kconfig"
+
+endchoice
+
config MULTI_DTB_FIT_UNCOMPRESS_SZ
default 0x80000 if TARGET_RZG2L_SMARC_EVK
diff --git a/board/renesas/rzg2l/Kconfig
b/board/renesas/rzg2l/Kconfig new file mode 100644 index
000000000000..1335fc7ae806
--- /dev/null
+++ b/board/renesas/rzg2l/Kconfig
@@ -0,0 +1,18 @@
+# Copyright (C) 2023 Renesas Electronics Corporation #
+SPDX-License-Identifier: GPL-2.0+
+
+if TARGET_RZG2L_SMARC_EVK
+
+config SYS_SOC
+ default "rmobile"
+
+config SYS_BOARD
+ default "rzg2l"
+
+config SYS_VENDOR
+ default "renesas"
+
+config SYS_CONFIG_NAME
+ default "rzg2l-smarc"
+
+endif
diff --git a/board/renesas/rzg2l/MAINTAINERS
b/board/renesas/rzg2l/MAINTAINERS new file mode 100644 index
000000000000..0a51391c1fc9
--- /dev/null
+++ b/board/renesas/rzg2l/MAINTAINERS
@@ -0,0 +1,6 @@
+RENESAS RZG2L BOARD FAMILY
+M: Paul Barker <paul.barker...@bp.renesas.com>
+S: Supported
+F: arch/arm/dts/rz-smarc-common.dtsi
I suspect there should be more files here, right ?
You likely want to be CCed on things like rzg2l clock, scif, and so on.
+N: rzg2l
+N: r9a07g044
diff --git a/board/renesas/rzg2l/Makefile
b/board/renesas/rzg2l/Makefile new file mode 100644 index
000000000000..466935fc8158
--- /dev/null
+++ b/board/renesas/rzg2l/Makefile
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 Renesas Electronics Corporation #
+SPDX-License-Identifier: GPL-2.0+
+
+obj-y := rzg2l.o
diff --git a/board/renesas/rzg2l/rzg2l.c
b/board/renesas/rzg2l/rzg2l.c new file mode 100644 index
000000000000..2b1bb3546c26
--- /dev/null
+++ b/board/renesas/rzg2l/rzg2l.c
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * RZ/G2L board support.
+ * Copyright (C) 2023 Renesas Electronics Corporation */
+
+#include <common.h>
+#include <fdtdec.h>
+#include <linux/libfdt.h>
+
+#if IS_ENABLED(CONFIG_MULTI_DTB_FIT)
+/* If the firmware passed a device tree, use it for board
+identification. */ extern u64 rcar_atf_boot_args[];
+
+static bool is_rzg2l_board(const char *board_name) {
+ void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
+
+ return fdt_node_check_compatible(atf_fdt_blob, 0, board_name) == 0;
+}
+
+int board_fit_config_name_match(const char *name) {
+ void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
+
+ if (fdt_magic(atf_fdt_blob) != FDT_MAGIC)
+ return -1;
+
+ if (is_rzg2l_board("renesas,r9a07g044l2"))
+ return strcmp(name, "r9a07g044l2-smarc");
+
+ return -1;
+}
+#endif
+
+static void apply_atf_overlay(void *fdt_blob) {
+ void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
+
+ if (fdt_magic(atf_fdt_blob) == FDT_MAGIC)
+ fdt_overlay_apply_node(fdt_blob, 0, atf_fdt_blob, 0); }
+
+int fdtdec_board_setup(const void *fdt_blob) {
+ apply_atf_overlay((void *)fdt_blob);
+
+ return 0;
+}
+
+int ft_board_setup(void *blob, struct bd_info *bd) {
+ return 0;
Are all these stub functions really needed or can they be removed
(possibly also with removal of unnecessary config options) ?
I've moved dram_init() & dram_init_banksize() out to arch/arm/mach-
rmobile/memmap-rzg2l.c. However, the other three stub functions can't
easily be removed:
* board_init() is always called if CONFIG_ARM is enabled. There is a
similar stub in board/renesas/rcar-common/common.c so I think this is
ok.
* ft_board_setup() is called if CONFIG_OF_BOARD_SETUP is enabled, which
is selected by CONFIG_RCAR_64, I don't see much point messing around
to break that config dependency when I'm going to be coming back to
fill in this stub once support for these boards is fully upstreamed to
TrustedFirmware.
* reset_cpu() is called from arch/arm/lib/reset.c, which is included
unless CONFIG_SYSRESET is defined, and I don't think enabling
CONFIG_SYSRESET makes any sense here. Again, I'll be filling in this
stub once TrustedFirmware supports resetting this board.
I'll chat to the rest of the team tomorrow and see if there's a hacky way
we can do the reset before TrustedFirmware support is complete.
If you need reset other than TF-A, either you can implement
1) watchdog reset
Or
2) System reset through PMIC
Former requires watchdog driver support where as later requires
I2C support.
I will go with 2) as with 2 one can distinguish
Normal reset from abnormal reset due to watchdog.
Let's add a ToDo comment for now, just to be clear this is being worked on.