[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