[PATCH 1/3] spl: fit: Discard decompression if not supported

Sean Anderson seanga2 at gmail.com
Sat Nov 4 16:10:34 CET 2023


On 11/3/23 10:34, Loic Poulain wrote:
> And simplify further decompression testing.
> 
> Signed-off-by: Loic Poulain <loic.poulain at linaro.org>
> ---
>   common/spl/spl_fit.c | 27 +++++++++++++++++++++------
>   1 file changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 70d8d5942d..1d42cb1d10 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -208,6 +208,20 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size,
>   	return (data_size + info->bl_len - 1) / info->bl_len;
>   }
>   
> +static inline bool spl_fit_decompression_supported(uint8_t comp)
> +{
> +	switch (comp) {
> +	case IH_COMP_GZIP:
> +		return IS_ENABLED(CONFIG_SPL_GZIP);
> +	case IH_COMP_LZMA:
> +		return IS_ENABLED(CONFIG_SPL_LZMA);
> +	case IH_COMP_NONE:
> +		return true;
> +	}
> +
> +	return false;
> +}
> +
>   /**
>    * load_simple_fit(): load the image described in a certain FIT node
>    * @info:	points to information about the device to load data from
> @@ -235,7 +249,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector,
>   	void *src;
>   	ulong overhead;
>   	int nr_sectors;
> -	uint8_t image_comp = -1, type = -1;
> +	uint8_t image_comp, type = -1;
>   	const void *data;
>   	const void *fit = ctx->fit;
>   	bool external_data = false;
> @@ -248,9 +262,11 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector,
>   			debug("%s ", genimg_get_type_name(type));
>   	}
>   
> -	if (spl_decompression_enabled()) {
> -		fit_image_get_comp(fit, node, &image_comp);
> -		debug("%s ", genimg_get_comp_name(image_comp));
> +	fit_image_get_comp(fit, node, &image_comp);
> +	if (!spl_fit_decompression_supported(image_comp)) {
> +		debug("Discard unsupported compression %s ",
> +		      genimg_get_comp_name(image_comp));
> +		image_comp = IH_COMP_NONE;
>   	}
>   
>   	if (fit_image_get_load(fit, node, &load_addr)) {
> @@ -283,8 +299,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector,
>   			return 0;
>   		}
>   
> -		if (spl_decompression_enabled() &&
> -		    (image_comp == IH_COMP_GZIP || image_comp == IH_COMP_LZMA))
> +		if (image_comp != IH_COMP_NONE)
>   			src_ptr = map_sysmem(ALIGN(CONFIG_SYS_LOAD_ADDR, ARCH_DMA_MINALIGN), len);
>   		else
>   			src_ptr = map_sysmem(ALIGN(load_addr, ARCH_DMA_MINALIGN), len);

Why doesn't spl_decompression_enabled work here?

--Sean


More information about the U-Boot mailing list