fdt: Tidy up error handling in image_setup_libfdt()

The message about needing to reset should be printed no matter what error
is printed. Also, an error should always be printed.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Anatolij Gustschin <agust@denx.de>
Reviewed-by: Tom Rini <trini@ti.com>
This commit is contained in:
Simon Glass 2014-10-23 18:58:53 -06:00
parent f3cc44f984
commit 6f4dbc21e4
2 changed files with 21 additions and 10 deletions

View File

@ -460,19 +460,25 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
{ {
ulong *initrd_start = &images->initrd_start; ulong *initrd_start = &images->initrd_start;
ulong *initrd_end = &images->initrd_end; ulong *initrd_end = &images->initrd_end;
int ret; int ret = -EPERM;
int fdt_ret;
if (fdt_chosen(blob) < 0) { if (fdt_chosen(blob) < 0) {
puts("ERROR: /chosen node create failed"); printf("ERROR: /chosen node create failed\n");
puts(" - must RESET the board to recover.\n"); goto err;
return -1;
} }
if (arch_fixup_fdt(blob) < 0) { if (arch_fixup_fdt(blob) < 0) {
puts("ERROR: arch specific fdt fixup failed"); printf("ERROR: arch-specific fdt fixup failed\n");
return -1; goto err;
}
if (IMAGE_OF_BOARD_SETUP) {
fdt_ret = ft_board_setup(blob, gd->bd);
if (fdt_ret) {
printf("ERROR: board-specific fdt fixup failed: %s\n",
fdt_strerror(fdt_ret));
goto err;
}
} }
if (IMAGE_OF_BOARD_SETUP)
ft_board_setup(blob, gd->bd);
fdt_fixup_ethernet(blob); fdt_fixup_ethernet(blob);
/* Delete the old LMB reservation */ /* Delete the old LMB reservation */
@ -481,7 +487,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
ret = fdt_shrink_to_minimum(blob); ret = fdt_shrink_to_minimum(blob);
if (ret < 0) if (ret < 0)
return ret; goto err;
of_size = ret; of_size = ret;
if (*initrd_start && *initrd_end) { if (*initrd_start && *initrd_end) {
@ -493,7 +499,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
fdt_initrd(blob, *initrd_start, *initrd_end); fdt_initrd(blob, *initrd_start, *initrd_end);
if (!ft_verify_fdt(blob)) if (!ft_verify_fdt(blob))
return -1; goto err;
#if defined(CONFIG_SOC_KEYSTONE) #if defined(CONFIG_SOC_KEYSTONE)
if (IMAGE_OF_BOARD_SETUP) if (IMAGE_OF_BOARD_SETUP)
@ -501,4 +507,8 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
#endif #endif
return 0; return 0;
err:
printf(" - must RESET the board to recover.\n\n");
return ret;
} }

View File

@ -70,6 +70,7 @@ int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name);
* Add board-specific data to the FDT before booting the OS. * Add board-specific data to the FDT before booting the OS.
* *
* Use CONFIG_SYS_FDT_PAD to ensure there is sufficient space. * Use CONFIG_SYS_FDT_PAD to ensure there is sufficient space.
* This function is called if CONFIG_OF_BOARD_SETUP is defined
* *
* @param blob FDT blob to update * @param blob FDT blob to update
* @param bd_t Pointer to board data * @param bd_t Pointer to board data