[PATCH v2 2/2] fdt: Swap the signature for board_fdt_blob_setup()
Simon Glass
sjg at chromium.org
Wed Dec 18 02:46:37 CET 2024
On Tue, 26 Nov 2024 at 10:10, Patrice CHOTARD
<patrice.chotard at foss.st.com> wrote:
>
>
>
> 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
>
Applied to sjg/master, thanks!
More information about the U-Boot
mailing list