[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