diff mbox series

[v1] imxtract: add support for zstd-compressed images

Message ID 20240602152613.32338-1-di.gerasimov@gmail.com
State Accepted
Delegated to: Tom Rini
Headers show
Series [v1] imxtract: add support for zstd-compressed images | expand

Commit Message

Dmitry Gerasimov June 2, 2024, 3:25 p.m. UTC
Allow extraction of zstd-compressed images from FIT using imxtract
command. This is especially useful when one has to load an image via
some interface (e.g. SPI) rather that just to the memory.

Signed-off-by: Dmitry Gerasimov <di.gerasimov@gmail.com>
---

 cmd/ximg.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

Comments

Tom Rini June 14, 2024, 2:54 p.m. UTC | #1
On Sun, 02 Jun 2024 17:25:52 +0200, Dmitry Gerasimov wrote:

> Allow extraction of zstd-compressed images from FIT using imxtract
> command. This is especially useful when one has to load an image via
> some interface (e.g. SPI) rather that just to the memory.
> 
> 

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/cmd/ximg.c b/cmd/ximg.c
index 0e7eead8d1..25a15fa184 100644
--- a/cmd/ximg.c
+++ b/cmd/ximg.c
@@ -16,6 +16,9 @@ 
 #include <cpu_func.h>
 #include <env.h>
 #include <gzip.h>
+#if IS_ENABLED(CONFIG_ZSTD)
+#include <linux/zstd.h>
+#endif
 #include <image.h>
 #include <malloc.h>
 #include <mapmem.h>
@@ -238,6 +241,26 @@  do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			}
 			break;
 #endif /* CONFIG_BZIP2 */
+#if IS_ENABLED(CONFIG_ZSTD)
+		case IH_COMP_ZSTD:
+			{
+				int ret;
+				struct abuf in, out;
+
+				printf("   Uncompressing part %d ... ", part);
+
+				abuf_init_set(&in, (void *)data, len);
+				abuf_init_set(&out, (void *)dest, unc_len);
+				ret = zstd_decompress(&in, &out);
+				if (ret < 0) {
+					printf("ZSTD ERROR %d - "
+					       "image not loaded\n", ret);
+					return 1;
+				}
+				len = ret;
+			}
+			break;
+#endif
 		default:
 			printf("Unimplemented compression type %d\n", comp);
 			return 1;