[PATCH v2] board: rzg2l: Check the DTB pointer passed by the TF-A.
Hugo Villeneuve
hugo at hugovil.com
Tue Sep 23 15:05:37 CEST 2025
Hi Mathieu,
thanks for the patch, I have been wondering why the latest U-Boot
didn't work for the renesas EVK.
Note: remove the trailing dot from all your commit messages.
On Mon, 22 Sep 2025 18:29:00 +0200
Mathieu Othacehe <othacehe at gnu.org> wrote:
> On the RZG2L platform, the advised
> TF-A (https://github.com/renesas-rz/rzg_trusted-firmware-a/tree/v2.5/rzg2l)
> does not pass any DTB blob to U-Boot.
>
> On the other hand, the RZG2L part of U-Boot expects a DTB to be passed. It
> means that if one flashes the latest TF-A as well as the mainline U-Boot,
> it will crash trying to dereference the NULL DTB pointer before outputing
> anything.
>
> Check if the DTB pointer is NULL before trying to use it.
>
> Signed-off-by: Mathieu Othacehe <othacehe at gnu.org>
> ---
> v1: https://lists.denx.de/pipermail/u-boot/2025-September/598712.html
>
> Changelog:
> v2: Keep compatibility with TF-A passing DTB blobs.
>
> arch/arm/mach-renesas/cpu_info-rzg2l.c | 2 +-
> board/renesas/rzg2l/rzg2l.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-renesas/cpu_info-rzg2l.c b/arch/arm/mach-renesas/cpu_info-rzg2l.c
> index ab95ce76388..a9cb9f72dd3 100644
> --- a/arch/arm/mach-renesas/cpu_info-rzg2l.c
> +++ b/arch/arm/mach-renesas/cpu_info-rzg2l.c
> @@ -30,7 +30,7 @@ static const struct tfa_info *get_tfa_info(void)
> {
> void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]);
>
> - if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) {
> + if (atf_fdt_blob && fdt_magic(atf_fdt_blob) == FDT_MAGIC) {
> unsigned int i;
> for (i = 0; i < ARRAY_SIZE(tfa_info); i++) {
> if (!fdt_node_check_compatible(atf_fdt_blob, 0,
Would it be a good idea to:
a) "return &invalid_tfa_info" if atf_fdt_blob is valid but
fdt_node_check_compatible() fails to find a valid node?
b) "return tfa_info" if atf_fdt_blob is not
valid?
This is inspired by what you proposed in your patch
"board: rzg2l: Do not expect a DTB blob from the TF-A."
This would look like this (on top of this current patch):
--------------------------------------------------
@@ -37,9 +37,11 @@ static const struct tfa_info *get_tfa_info(void)
tfa_info[i].soc_name))
return &tfa_info[i];
}
+
+ return &invalid_tfa_info;
}
- return &invalid_tfa_info;
+ return tfa_info;
}
--------------------------------------------------
With this, I am able to successfully boot using the current TF-A.
> diff --git a/board/renesas/rzg2l/rzg2l.c b/board/renesas/rzg2l/rzg2l.c
> index 509c5dbb156..3c8f8d04cbd 100644
> --- a/board/renesas/rzg2l/rzg2l.c
> +++ b/board/renesas/rzg2l/rzg2l.c
> @@ -22,7 +22,7 @@ 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)
> + if (!atf_fdt_blob || fdt_magic(atf_fdt_blob) != FDT_MAGIC)
> return -1;
>
> if (is_rzg2l_board("renesas,r9a07g044l2"))
> @@ -36,7 +36,7 @@ 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)
> + if (atf_fdt_blob && fdt_magic(atf_fdt_blob) == FDT_MAGIC)
> fdt_overlay_apply_node(fdt_blob, 0, atf_fdt_blob, 0);
> }
>
> --
> 2.49.0
>
--
Hugo Villeneuve
More information about the U-Boot
mailing list