diff options
Diffstat (limited to 'common/spl')
| -rw-r--r-- | common/spl/spl.c | 6 | ||||
| -rw-r--r-- | common/spl/spl_fit.c | 21 | 
2 files changed, 19 insertions, 8 deletions
| diff --git a/common/spl/spl.c b/common/spl/spl.c index 0039716774c..14320fe75c1 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -13,7 +13,6 @@  #include <nand.h>  #include <fat.h>  #include <version.h> -#include <i2c.h>  #include <image.h>  #include <malloc.h>  #include <dm/root.h> @@ -203,7 +202,7 @@ int spl_init(void)  	gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;  	gd->malloc_ptr = 0;  #endif -	if (CONFIG_IS_ENABLED(OF_CONTROL)) { +	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {  		ret = fdtdec_setup();  		if (ret) {  			debug("fdtdec_setup() returned error %d\n", ret); @@ -211,7 +210,8 @@ int spl_init(void)  		}  	}  	if (IS_ENABLED(CONFIG_SPL_DM)) { -		ret = dm_init_and_scan(true); +		/* With CONFIG_OF_PLATDATA, bring in all devices */ +		ret = dm_init_and_scan(!CONFIG_IS_ENABLED(OF_PLATDATA));  		if (ret) {  			debug("dm_init_and_scan() returned error %d\n", ret);  			return ret; diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 987470896c4..069e94d529b 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -132,7 +132,7 @@ int spl_load_simple_fit(struct spl_load_info *info, ulong sector, void *fit)  	int data_offset, data_size;  	int base_offset, align_len = ARCH_DMA_MINALIGN - 1;  	int src_sector; -	void *dst; +	void *dst, *src;  	/*  	 * Figure out where the external images start. This is the base for the @@ -206,8 +206,13 @@ int spl_load_simple_fit(struct spl_load_info *info, ulong sector, void *fit)  		return -EIO;  	debug("image: dst=%p, data_offset=%x, size=%x\n", dst, data_offset,  	      data_size); -	memcpy(dst, dst + get_aligned_image_overhead(info, data_offset), -	       data_size); +	src = dst + get_aligned_image_overhead(info, data_offset); + +#ifdef CONFIG_SPL_FIT_IMAGE_POST_PROCESS +	board_fit_image_post_process((void **)&src, (size_t *)&data_size); +#endif + +	memcpy(dst, src, data_size);  	/* Figure out which device tree the board wants to use */  	fdt_len = spl_fit_select_fdt(fit, images, &fdt_offset); @@ -236,8 +241,14 @@ int spl_load_simple_fit(struct spl_load_info *info, ulong sector, void *fit)  	 */  	debug("fdt: dst=%p, data_offset=%x, size=%x\n", dst, fdt_offset,  	      fdt_len); -	memcpy(load_ptr + data_size, -	       dst + get_aligned_image_overhead(info, fdt_offset), fdt_len); +	src = dst + get_aligned_image_overhead(info, fdt_offset); +	dst = load_ptr + data_size; + +#ifdef CONFIG_SPL_FIT_IMAGE_POST_PROCESS +	board_fit_image_post_process((void **)&src, (size_t *)&fdt_len); +#endif + +	memcpy(dst, src, fdt_len);  	return 0;  } | 
