Skip to contentSkip to conversation

common: image: Remove FIT header update from image post-processing

PATCH In review Andrew F. Davis 4 participants 4 messages Nov 21, 2016 – Dec 4, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 common: image: Remove FIT header update from image post-processing

After an image is selected out of a FIT blob for further processing we run an optional, platform specific, post-processing function on this component. This post-processing may modify the position and size of the image, so after post-processing we update the location and size for this image in the FIT header. This can cause problems as the position of subsequent components in the FIT blob are only referenced by relative position to the end of the last component. When we resize or move a component the following components position will be calculated incorrectly. To fix this, we do not update the FIT header but instead only update our local understanding of the image data. This also allows us to re-run post-processing steps if needed.

---
 common/image-fit.c | 29 ++++++-----------------------
 1 file changed, 6 insertions(+), 23 deletions(-)
common/image-fit.c +6 -23
index 77dc011..23b9c54 100644
@@ -1505,12 +1505,6 @@ void fit_conf_print(const void *fit, int noffset, const char *p)
 
 static int fit_image_select(const void *fit, int rd_noffset, int verify)
 {
-#if !defined(USE_HOSTCC) && defined(CONFIG_FIT_IMAGE_POST_PROCESS)
-	const void *data;
-	size_t size;
-	int ret;
-#endif
-
 	fit_image_print(fit, rd_noffset, "   ");
 
 	if (verify) {
@@ -1522,23 +1516,6 @@ static int fit_image_select(const void *fit, int rd_noffset, int verify)
 		puts("OK\n");
 	}
 
-#if !defined(USE_HOSTCC) && defined(CONFIG_FIT_IMAGE_POST_PROCESS)
-	ret = fit_image_get_data(fit, rd_noffset, &data, &size);
-	if (ret)
-		return ret;
-
-	/* perform any post-processing on the image data */
-	board_fit_image_post_process((void **)&data, &size);
-
-	/*
-	 * update U-Boot's understanding of the "data" property start address
-	 * and size according to the performed post-processing
-	 */
-	ret = fdt_setprop((void *)fit, rd_noffset, FIT_DATA_PROP, data, size);
-	if (ret)
-		return ret;
-#endif
-
 	return 0;
 }
 
@@ -1738,6 +1715,12 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 		bootstage_error(bootstage_id + BOOTSTAGE_SUB_GET_DATA);
 		return -ENOENT;
 	}
+
+#if !defined(USE_HOSTCC) && defined(CONFIG_FIT_IMAGE_POST_PROCESS)
+	/* perform any post-processing on the image data */
+	board_fit_image_post_process((void **)&buf, &size);
+#endif
+
 	len = (ulong)size;
 
 	/* verify that image data is a proper FDT blob */
Signature · 1 line
2.10.2
#1 lore raw

PATCH 1/1 common: image: Remove FIT header update from image post-processing

Quoted 12 lines · Andrew F. Davis

After an image is selected out of a FIT blob for further processing we run an optional, platform specific, post-processing function on this component. This post-processing may modify the position and size of the image, so after post-processing we update the location and size for this image in the FIT header. This can cause problems as the position of subsequent components in the FIT blob are only referenced by relative position to the end of the last component. When we resize or move a component the following components position will be calculated incorrectly. To fix this, we do not update the FIT header but instead only update our local understanding of the image data. This also allows us to re-run post-processing steps if needed.

Quoted 5 lines
---
 common/image-fit.c | 29 ++++++-----------------------
 1 file changed, 6 insertions(+), 23 deletions(-)
#2 lore raw

PATCH 1/1 common: image: Remove FIT header update from image post-processing

In reply to Andrew F. Davis
Quoted 12 lines · Andrew F. Davis

After an image is selected out of a FIT blob for further processing we run an optional, platform specific, post-processing function on this component. This post-processing may modify the position and size of the image, so after post-processing we update the location and size for this image in the FIT header. This can cause problems as the position of subsequent components in the FIT blob are only referenced by relative position to the end of the last component. When we resize or move a component the following components position will be calculated incorrectly. To fix this, we do not update the FIT header but instead only update our local understanding of the image data. This also allows us to re-run post-processing steps if needed.

Quoted 2 lines

Thanks and regards,
Lokesh

#3 lore raw
In reply to Andrew F. Davis
Quoted 12 lines · Andrew F. Davis

After an image is selected out of a FIT blob for further processing we run an optional, platform specific, post-processing function on this component. This post-processing may modify the position and size of the image, so after post-processing we update the location and size for this image in the FIT header. This can cause problems as the position of subsequent components in the FIT blob are only referenced by relative position to the end of the last component. When we resize or move a component the following components position will be calculated incorrectly. To fix this, we do not update the FIT header but instead only update our local understanding of the image data. This also allows us to re-run post-processing steps if needed.

Quoted 4 lines

Applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20161204/050c4070/attachment.sig>