diff options
Diffstat (limited to 'common/image-fdt.c')
| -rw-r--r-- | common/image-fdt.c | 37 | 
1 files changed, 27 insertions, 10 deletions
| diff --git a/common/image-fdt.c b/common/image-fdt.c index a39ae1b4cce..1d76bd60da8 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -460,19 +460,32 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,  {  	ulong *initrd_start = &images->initrd_start;  	ulong *initrd_end = &images->initrd_end; -	int ret; +	int ret = -EPERM; +	int fdt_ret;  	if (fdt_chosen(blob) < 0) { -		puts("ERROR: /chosen node create failed"); -		puts(" - must RESET the board to recover.\n"); -		return -1; +		printf("ERROR: /chosen node create failed\n"); +		goto err;  	}  	if (arch_fixup_fdt(blob) < 0) { -		puts("ERROR: arch specific fdt fixup failed"); -		return -1; +		printf("ERROR: arch-specific fdt fixup failed\n"); +		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_SYSTEM_SETUP) { +		if (ft_system_setup(blob, gd->bd)) { +			printf("ERROR: system-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);  	/* Delete the old LMB reservation */ @@ -481,7 +494,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,  	ret = fdt_shrink_to_minimum(blob);  	if (ret < 0) -		return ret; +		goto err;  	of_size = ret;  	if (*initrd_start && *initrd_end) { @@ -493,7 +506,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,  	fdt_initrd(blob, *initrd_start, *initrd_end);  	if (!ft_verify_fdt(blob)) -		return -1; +		goto err;  #if defined(CONFIG_SOC_KEYSTONE)  	if (IMAGE_OF_BOARD_SETUP) @@ -501,4 +514,8 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,  #endif  	return 0; +err: +	printf(" - must RESET the board to recover.\n\n"); + +	return ret;  } | 
