]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
imxtract: add support for zstd-compressed images
authorDmitry Gerasimov <di.gerasimov@gmail.com>
Sun, 2 Jun 2024 15:25:52 +0000 (17:25 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 13 Jun 2024 22:30:47 +0000 (16:30 -0600)
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

index 1467484df8d0daa90775c640d9e46290379aa45a..c79e8a078605aeca9d55f475d0ceb8cc85bafde7 100644 (file)
@@ -15,6 +15,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>
@@ -237,6 +240,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;