|
@@ -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;
|
|
|
}
|