[U-Boot] [U-Boot, v2, 3/5] spl: fit: Eanble GZIP support for image decompression

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Sep 13 20:38:02 UTC 2017


On 08/08/2017 01:16 AM, York Sun wrote:
> Add Kconfig option SPL_GZIP and SPL_ZLIB to enable gunzip support for
> SPL boot, eg. falcon boot compressed kernel image.
> 
> Signed-off-by: York Sun <york.sun at nxp.com>
> Reviewed-by: Tom Rini <trini at konsulko.com>
> ---
> 
> Changes in v2:
> Combine Kconfig change and actual code into one patch
> 
>  common/spl/spl_fit.c | 28 ++++++++++++++++++++++++++--
>  lib/Kconfig          |  8 ++++++++
>  lib/Makefile         |  5 +++--
>  3 files changed, 37 insertions(+), 4 deletions(-)
> 
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index d2a352e..23f85d2 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -135,6 +135,19 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
>  	ulong overhead;
>  	int nr_sectors;
>  	int align_len = ARCH_DMA_MINALIGN - 1;
> +#if defined(CONFIG_SPL_OS_BOOT) && defined(CONFIG_SPL_GZIP)
> +	uint8_t image_comp, type;
> +
> +	if (fit_image_get_comp(fit, node, &image_comp))
> +		puts("Cannot get image compression format.\n");
> +	else
> +		debug("%s ", genimg_get_comp_name(image_comp));
> +
> +	if (fit_image_get_type(fit, node, &type))
> +		puts("Cannot get image type.\n");
> +	else
> +		debug("%s ", genimg_get_type_name(type));
> +#endif
>  
>  	offset = fdt_getprop_u32(fit, node, "data-offset");
>  	if (offset == FDT_ERROR)
> @@ -154,7 +167,7 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
>  	if (info->read(info, sector + get_aligned_image_offset(info, offset),
>  		       nr_sectors, (void*)load_ptr) != nr_sectors)
>  		return -EIO;
> -	debug("image: dst=%lx, offset=%lx, size=%lx\n", load_ptr, offset,
> +	debug("image dst=%lx, offset=%lx, size=%lx\n", load_ptr, offset,
>  	      (unsigned long)length);
>  
>  	src = (void *)load_ptr + overhead;
> @@ -162,7 +175,18 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
>  	board_fit_image_post_process(&src, &length);
>  #endif
>  
> -	memcpy((void*)load_addr, src, length);
> +#if defined(CONFIG_SPL_OS_BOOT) && defined(CONFIG_SPL_GZIP)
> +	if (image_comp == IH_COMP_GZIP && type == IH_TYPE_KERNEL) {
> +		if (gunzip((void *)load_addr, CONFIG_SYS_BOOTM_LEN,
> +			   src, &length)) {

In this file length is defined as size_t.

In include/common.h the last parameter of gunzip is defined as unsigned
long *.

This leads to a compilation warning and probably incorrect results:
  CC      spl/common/spl/spl_fit.o
common/spl/spl_fit.c: In function ‘spl_load_fit_image’:
common/spl/spl_fit.c:201:12: warning: passing argument 4 of ‘gunzip’
from incompatible pointer type [-Wincompatible-pointer-types]
       src, &length)) {

Please, correct the patch to pass a compatible parameter.
The patch already made it into the U-Boot git master.
So possibly you want to send a follow up patch.

Best regards

Heinrich


> +			puts("Uncompressing error\n");
> +			return -EIO;
> +		}
> +	} else
> +#endif
> +	{
> +		memcpy((void *)load_addr, src, length);
> +	}
>  
>  	if (image_info) {
>  		image_info->load_addr = load_addr;
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 2f5a210..a3c6520 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -160,6 +160,14 @@ config LZO
>  	bool "Enable LZO decompression support"
>  	help
>  	  This enables support for LZO compression algorithm.r
> +
> +config SPL_GZIP
> +	bool "Enable gzip decompression support for SPL build"
> +	select SPL_ZLIB
> +
> +config SPL_ZLIB
> +	bool
> +
>  endmenu
>  
>  config ERRNO_STR
> diff --git a/lib/Makefile b/lib/Makefile
> index eacc7d6..455cc9d 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -11,7 +11,6 @@ obj-$(CONFIG_EFI) += efi/
>  obj-$(CONFIG_EFI_LOADER) += efi_loader/
>  obj-$(CONFIG_LZMA) += lzma/
>  obj-$(CONFIG_LZO) += lzo/
> -obj-$(CONFIG_ZLIB) += zlib/
>  obj-$(CONFIG_BZIP2) += bzip2/
>  obj-$(CONFIG_TIZEN) += tizen/
>  obj-$(CONFIG_FIT) += libfdt/
> @@ -26,7 +25,6 @@ obj-y += crc16.o
>  obj-$(CONFIG_ERRNO_STR) += errno_str.o
>  obj-$(CONFIG_FIT) += fdtdec_common.o
>  obj-$(CONFIG_TEST_FDTDEC) += fdtdec_test.o
> -obj-$(CONFIG_GZIP) += gunzip.o
>  obj-$(CONFIG_GZIP_COMPRESSED) += gzip.o
>  obj-$(CONFIG_GENERATE_SMBIOS_TABLE) += smbios.o
>  obj-y += initcall.o
> @@ -49,6 +47,9 @@ obj-$(CONFIG_RSA) += rsa/
>  obj-$(CONFIG_SHA1) += sha1.o
>  obj-$(CONFIG_SHA256) += sha256.o
>  
> +obj-$(CONFIG_$(SPL_)ZLIB) += zlib/
> +obj-$(CONFIG_$(SPL_)GZIP) += gunzip.o
> +
>  obj-$(CONFIG_SPL_SAVEENV) += qsort.o
>  obj-$(CONFIG_$(SPL_)OF_LIBFDT) += libfdt/
>  ifneq ($(CONFIG_SPL_BUILD)$(CONFIG_SPL_OF_PLATDATA),yy)
> 



More information about the U-Boot mailing list