[PATCH v2 04/18] boot: Respect the load_op in fit_image_load()
Simon Glass
sjg at chromium.org
Fri Sep 20 17:59:10 CEST 2024
On Fri, 20 Sept 2024 at 10:13, Simon Glass <sjg at chromium.org> wrote:
>
> Some code has crept in which ignores this parameter. Fix this and add a
> little debugging.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
> boot/image-fit.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
As requested:
Fixes: b1307f884a9 ("fit: Support compression for non-kernel
components (e.g. FDT)")
Or at least that is my reading of the situation
> diff --git a/boot/image-fit.c b/boot/image-fit.c
> index 439ff51edf6..db7fb61bca9 100644
> --- a/boot/image-fit.c
> +++ b/boot/image-fit.c
> @@ -2226,6 +2226,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
> data = map_to_sysmem(buf);
> load = data;
> if (load_op == FIT_LOAD_IGNORED) {
> + log_debug("load_op: not loading\n");
> /* Don't load */
> } else if (fit_image_get_load(fit, noffset, &load)) {
> if (load_op == FIT_LOAD_REQUIRED) {
> @@ -2262,10 +2263,13 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
> /* Kernel images get decompressed later in bootm_load_os(). */
> if (!fit_image_get_comp(fit, noffset, &comp) &&
> comp != IH_COMP_NONE &&
> + load_op != FIT_LOAD_IGNORED &&
> !(image_type == IH_TYPE_KERNEL ||
> image_type == IH_TYPE_KERNEL_NOLOAD ||
> image_type == IH_TYPE_RAMDISK)) {
> ulong max_decomp_len = len * 20;
> +
> + log_debug("decompressing image\n");
> if (load == data) {
> loadbuf = malloc(max_decomp_len);
> load = map_to_sysmem(loadbuf);
> @@ -2280,6 +2284,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
> }
> len = load_end - load;
> } else if (load != data) {
> + log_debug("copying\n");
> loadbuf = map_sysmem(load, len);
> memcpy(loadbuf, buf, len);
> }
> @@ -2289,8 +2294,9 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
> " please fix your .its file!\n");
>
> /* verify that image data is a proper FDT blob */
> - if (image_type == IH_TYPE_FLATDT && fdt_check_header(loadbuf)) {
> - puts("Subimage data is not a FDT");
> + if (load_op != FIT_LOAD_IGNORED && image_type == IH_TYPE_FLATDT &&
> + fdt_check_header(loadbuf)) {
> + puts("Subimage data is not a FDT\n");
> return -ENOEXEC;
> }
>
> --
> 2.43.0
>
More information about the U-Boot
mailing list