boot: Respect the load_op in fit_image_load()
Some code has crept in which ignores this parameter. Fix this and add a
little debugging.
Signed-off-by: Simon Glass <sjg@chromium.org>
Fixes: b1307f884a
("fit: Support compression for non-kernel components (e.g. FDT)")
This commit is contained in:
@@ -2226,6 +2226,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
|
|||||||
data = map_to_sysmem(buf);
|
data = map_to_sysmem(buf);
|
||||||
load = data;
|
load = data;
|
||||||
if (load_op == FIT_LOAD_IGNORED) {
|
if (load_op == FIT_LOAD_IGNORED) {
|
||||||
|
log_debug("load_op: not loading\n");
|
||||||
/* Don't load */
|
/* Don't load */
|
||||||
} else if (fit_image_get_load(fit, noffset, &load)) {
|
} else if (fit_image_get_load(fit, noffset, &load)) {
|
||||||
if (load_op == FIT_LOAD_REQUIRED) {
|
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(). */
|
/* Kernel images get decompressed later in bootm_load_os(). */
|
||||||
if (!fit_image_get_comp(fit, noffset, &comp) &&
|
if (!fit_image_get_comp(fit, noffset, &comp) &&
|
||||||
comp != IH_COMP_NONE &&
|
comp != IH_COMP_NONE &&
|
||||||
|
load_op != FIT_LOAD_IGNORED &&
|
||||||
!(image_type == IH_TYPE_KERNEL ||
|
!(image_type == IH_TYPE_KERNEL ||
|
||||||
image_type == IH_TYPE_KERNEL_NOLOAD ||
|
image_type == IH_TYPE_KERNEL_NOLOAD ||
|
||||||
image_type == IH_TYPE_RAMDISK)) {
|
image_type == IH_TYPE_RAMDISK)) {
|
||||||
ulong max_decomp_len = len * 20;
|
ulong max_decomp_len = len * 20;
|
||||||
|
|
||||||
|
log_debug("decompressing image\n");
|
||||||
if (load == data) {
|
if (load == data) {
|
||||||
loadbuf = malloc(max_decomp_len);
|
loadbuf = malloc(max_decomp_len);
|
||||||
load = map_to_sysmem(loadbuf);
|
load = map_to_sysmem(loadbuf);
|
||||||
@@ -2280,6 +2284,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
|
|||||||
}
|
}
|
||||||
len = load_end - load;
|
len = load_end - load;
|
||||||
} else if (load != data) {
|
} else if (load != data) {
|
||||||
|
log_debug("copying\n");
|
||||||
loadbuf = map_sysmem(load, len);
|
loadbuf = map_sysmem(load, len);
|
||||||
memcpy(loadbuf, buf, 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");
|
" please fix your .its file!\n");
|
||||||
|
|
||||||
/* verify that image data is a proper FDT blob */
|
/* verify that image data is a proper FDT blob */
|
||||||
if (image_type == IH_TYPE_FLATDT && fdt_check_header(loadbuf)) {
|
if (load_op != FIT_LOAD_IGNORED && image_type == IH_TYPE_FLATDT &&
|
||||||
puts("Subimage data is not a FDT");
|
fdt_check_header(loadbuf)) {
|
||||||
|
puts("Subimage data is not a FDT\n");
|
||||||
return -ENOEXEC;
|
return -ENOEXEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user