[PATCH v2 2/2] fdt: Swap the signature for board_fdt_blob_setup()

Patrice CHOTARD patrice.chotard at foss.st.com
Tue Nov 26 18:04:14 CET 2024



On 11/2/24 18:49, Simon Glass wrote:
> This returns a devicetree and updates a parameter with an error code.
> Swap it, since this fits better with the way U-Boot normally works. It
> also (more easily) allows leaving the existing pointer unchanged.
> 
> No yaks were harmed in this change, but there is a very small code-size
> reduction.
> 
> For sifive, the OF_BOARD option must be set for the function to be
> called, so there is no point in checking it again. Also OF_SEPARATE is
> defined always.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
> Changes in v2:
> - Set up the existing FDT in case the board wants to check it
> - Update snapdragon to return -EEXIST
> - Set the existing FDT before calling board_fd_blob_setup()
> - Update sandbox to return -EEXIST if an fdt comes from a bloblist
> - Update do_go_uboot() to set the existing FDT
> - Drop unnecessary setting of FDT in vexpress64
> - Tidy up redundant RISC-V code
> 
>  arch/arm/mach-apple/board.c                   |  7 ++--
>  arch/arm/mach-snapdragon/board.c              |  9 ++---
>  arch/arm/mach-stm32mp/boot_params.c           | 19 ++++++-----
>  arch/sandbox/cpu/cpu.c                        | 34 +++++++++----------
>  board/Marvell/octeontx/board-fdt.c            | 12 +++----
>  board/Marvell/octeontx2/board-fdt.c           | 12 +++----
>  board/Marvell/octeontx2/board.c               |  3 +-
>  board/andestech/ae350/ae350.c                 | 23 +++++++------
>  board/armltd/vexpress64/vexpress64.c          | 33 ++++++++----------
>  board/broadcom/bcmstb/bcmstb.c                |  7 ++--
>  board/emulation/qemu-arm/qemu-arm.c           |  7 ++--
>  board/emulation/qemu-ppce500/qemu-ppce500.c   | 12 +++----
>  board/emulation/qemu-riscv/qemu-riscv.c       |  7 ++--
>  board/highbank/highbank.c                     |  7 ++--
>  board/raspberrypi/rpi/rpi.c                   | 13 ++++---
>  board/sifive/unleashed/unleashed.c            | 12 +++----
>  board/sifive/unmatched/unmatched.c            | 11 +++---
>  .../visionfive2/starfive_visionfive2.c        | 11 +++---
>  board/xen/xenguest_arm64/xenguest_arm64.c     | 14 ++++----
>  board/xilinx/common/board.c                   | 26 ++++++++------
>  include/fdtdec.h                              |  9 ++---
>  lib/fdtdec.c                                  | 14 +++++---
>  22 files changed, 152 insertions(+), 150 deletions(-)
> 
> diff --git a/arch/arm/mach-apple/board.c b/arch/arm/mach-apple/board.c
> index 0b6d290b8ac..2644a04a622 100644
> --- a/arch/arm/mach-apple/board.c
> +++ b/arch/arm/mach-apple/board.c
> @@ -691,11 +691,12 @@ int dram_init_banksize(void)
>  
>  extern long fw_dtb_pointer;
>  
> -void *board_fdt_blob_setup(int *err)
> +int board_fdt_blob_setup(void **fdtp)
>  {
>  	/* Return DTB pointer passed by m1n1 */
> -	*err = 0;
> -	return (void *)fw_dtb_pointer;
> +	*fdtp = (void *)fw_dtb_pointer;
> +
> +	return 0;
>  }
>  
>  void build_mem_map(void)
> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c
> index 2ab2ceb5138..cd49de540f0 100644
> --- a/arch/arm/mach-snapdragon/board.c
> +++ b/arch/arm/mach-snapdragon/board.c
> @@ -147,12 +147,12 @@ static void show_psci_version(void)
>   * or for supporting quirky devices where it's easier to leave the downstream DT in place
>   * to improve ABL compatibility. Otherwise, we use the DT provided by ABL.
>   */
> -void *board_fdt_blob_setup(int *err)
> +int board_fdt_blob_setup(void **fdtp)
>  {
>  	struct fdt_header *fdt;
>  	bool internal_valid, external_valid;
> +	int ret = 0;
>  
> -	*err = 0;
>  	fdt = (struct fdt_header *)get_prev_bl_fdt_addr();
>  	external_valid = fdt && !fdt_check_header(fdt);
>  	internal_valid = !fdt_check_header(gd->fdt_blob);
> @@ -167,10 +167,11 @@ void *board_fdt_blob_setup(int *err)
>  
>  	if (internal_valid) {
>  		debug("Using built in FDT\n");
> +		ret = -EEXIST;
>  	} else {
>  		debug("Using external FDT\n");
>  		/* So we can use it before returning */
> -		gd->fdt_blob = fdt;
> +		*fdtp = fdt;
>  	}
>  
>  	/*
> @@ -179,7 +180,7 @@ void *board_fdt_blob_setup(int *err)
>  	 */
>  	qcom_parse_memory();
>  
> -	return (void *)gd->fdt_blob;
> +	return ret;
>  }
>  
>  void reset_cpu(void)
> diff --git a/arch/arm/mach-stm32mp/boot_params.c b/arch/arm/mach-stm32mp/boot_params.c
> index ebddf6a7dbc..2d058edc419 100644
> --- a/arch/arm/mach-stm32mp/boot_params.c
> +++ b/arch/arm/mach-stm32mp/boot_params.c
> @@ -6,6 +6,7 @@
>  #define LOG_CATEGORY LOGC_ARCH
>  
>  #include <config.h>
> +#include <errno.h>
>  #include <log.h>
>  #include <linux/libfdt.h>
>  #include <asm/arch/sys_proto.h>
> @@ -16,20 +17,22 @@
>   * Use the saved FDT address provided by TF-A at boot time (NT_FW_CONFIG =
>   * Non Trusted Firmware configuration file) when the pointer is valid
>   */
> -void *board_fdt_blob_setup(int *err)
> +int board_fdt_blob_setup(void **fdtp)
>  {
>  	unsigned long nt_fw_dtb = get_stm32mp_bl2_dtb();
>  
>  	log_debug("%s: nt_fw_dtb=%lx\n", __func__, nt_fw_dtb);
>  
> -	*err = 0;
>  	/* use external device tree only if address is valid */
> -	if (nt_fw_dtb >= STM32_DDR_BASE) {
> -		if (fdt_magic(nt_fw_dtb) == FDT_MAGIC)
> -			return (void *)nt_fw_dtb;
> -		log_debug("%s: DTB not found.\n", __func__);
> +	if (nt_fw_dtb < STM32_DDR_BASE ||
> +	    fdt_magic(nt_fw_dtb) != FDT_MAGIC) {
> +		log_debug("DTB not found.\n");
> +		log_debug("fall back to builtin DTB, %p\n", _end);
> +
> +		return -EEXIST;
>  	}
> -	log_debug("%s: fall back to builtin DTB, %p\n", __func__, _end);
>  
> -	return (void *)_end;
> +	*fdtp = (void *)nt_fw_dtb;
> +
> +	return 0;
>  }

For mach-stm32mp:
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>

Thanks



More information about the U-Boot mailing list