[PATCH 16/16] board: rzg2l: Add RZ/G2L SMARC EVK board

Biju Das biju.das.jz at bp.renesas.com
Fri Oct 6 14:51:16 CEST 2023


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.ct at bp.renesas.com>
> >> Reviewed-by: Biju Das <biju.das.jz at bp.renesas.com>
> >> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj at 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.ct at 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.

Cheers,
Biju


More information about the U-Boot mailing list