[PATCH 2/2] FIT: do not decompress ramdisks even if asked
Christian Eggers
ceggers at arri.de
Fri Aug 25 03:45:52 PDT 2023
On Friday, 25 August 2023, 12:22:46 CEST, Ahmad Fatoum wrote:
> Linux will decompress its own ramdisk, so a well-formed ITS would
> specify compression = "none", so the bootloader doesn't unpack the
> ramdisk and the kernel takes care of it.
>
> Some older versions of the Yocto kernel-fitimage.bbclass did populate
> compression != "none" for ramdisks, so now barebox will fail to boot
> the FIT images generated by them.
>
> Fix this issue by not acting on the compression property when the image
> in question is a ramdisk. We still print a warning, so users can fix
> their ITS.
>
> This aligns us with U-Boot's behavior[1].
>
> [1]: https://git.yoctoproject.org/poky/commit/?h=kirkstone&id=2c58079222310
> [2]: https://github.com/u-boot/u-boot/commit/bddd985734653c366c8da073650930
>
> Fixes: 2ab6780b80e3 ("FIT: add first support for compressed images")
> Reported-by: Christian Eggers <ceggers at arri.de>
> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---
> common/image-fit.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 9ceebde02931..0352dc5cbd0c 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -565,6 +565,7 @@ static void fit_uncompress_error_fn(char *x)
> }
>
> static int fit_handle_decompression(struct device_node *image,
> + const char *type,
> const void **data,
> int *data_len)
> {
> @@ -576,6 +577,12 @@ static int fit_handle_decompression(struct device_node *image,
> if (!compression || !strcmp(compression, "none"))
> return 0;
>
> + if (!strcmp(type, "ramdisk")) {
> + pr_warn("compression != \"none\" for ramdisks is deprecated,"
> + " please fix your .its file!\n");
> + return 0;
> + }
> +
> if (!IS_ENABLED(CONFIG_UNCOMPRESS)) {
> pr_err("image has compression = \"%s\", but support not compiled in\n",
> compression);
> @@ -652,7 +659,7 @@ int fit_open_image(struct fit_handle *handle, void *configuration,
> if (ret < 0)
> return ret;
>
> - ret = fit_handle_decompression(image, &data, &data_len);
> + ret = fit_handle_decompression(image, type, &data, &data_len);
> if (ret)
> return ret;
>
>
Hi Ahmad,
thanks for the fast solution!
Tested-by: Christian Eggers <ceggers at arri.de>
[Tested both patches, as 1/2 is also required ]
More information about the barebox
mailing list