diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-apple/board.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-snapdragon/board.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-stm32mp/boot_params.c | 19 | ||||
-rw-r--r-- | arch/sandbox/cpu/cpu.c | 34 |
4 files changed, 36 insertions, 33 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 75a880f093c..f1319df4314 100644 --- a/arch/arm/mach-snapdragon/board.c +++ b/arch/arm/mach-snapdragon/board.c @@ -150,12 +150,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); @@ -170,10 +170,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; } /* @@ -182,7 +183,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; } diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index d1c4dcf0764..6407193c5f1 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -368,7 +368,7 @@ static int setup_auto_tree(void *blob) return 0; } -void *board_fdt_blob_setup(int *ret) +int board_fdt_blob_setup(void **fdtp) { struct sandbox_state *state = state_get_current(); const char *fname = state->fdt_fname; @@ -378,43 +378,41 @@ void *board_fdt_blob_setup(int *ret) int fd; if (gd->fdt_blob) - return (void *)gd->fdt_blob; + return -EEXIST; blob = map_sysmem(CONFIG_SYS_FDT_LOAD_ADDR, 0); - *ret = 0; if (!state->fdt_fname) { err = setup_auto_tree(blob); - if (!err) - goto done; - os_printf("Unable to create empty FDT: %s\n", fdt_strerror(err)); - *ret = -EINVAL; - goto fail; + if (err) { + os_printf("Unable to create empty FDT: %s\n", + fdt_strerror(err)); + return -EINVAL; + } + *fdtp = blob; + + return 0; } err = os_get_filesize(fname, &size); if (err < 0) { os_printf("Failed to find FDT file '%s'\n", fname); - *ret = err; - goto fail; + return err; } fd = os_open(fname, OS_O_RDONLY); if (fd < 0) { os_printf("Failed to open FDT file '%s'\n", fname); - *ret = -EACCES; - goto fail; + return -EACCES; } if (os_read(fd, blob, size) != size) { os_close(fd); os_printf("Failed to read FDT file '%s'\n", fname); - *ret = -EIO; - goto fail; + return -EIO; } os_close(fd); -done: - return blob; -fail: - return NULL; + *fdtp = blob; + + return 0; } ulong timer_get_boot_us(void) |