diff options
| author | Marek Vasut <marek.vasut+renesas@gmail.com> | 2019-03-08 16:06:55 +0100 | 
|---|---|---|
| committer | Marek Vasut <marex@denx.de> | 2019-04-09 18:19:10 +0200 | 
| commit | 95f4bbd581cfde45d4bd1fa5e56c2d880dae7ced (patch) | |
| tree | fdf036ff9026bfcae64afd553105b60dcac6f382 | |
| parent | 1fd303543aef9c4641bd578e6e52284f5a69df67 (diff) | |
lib: fdt: Allow LZO and GZIP DT compression in U-Boot
Add required Kconfig symbols, Makefile bits and macro fixes in a
few places to support LZO and DT compression in U-Boot. This can
save a lot of space with multi-DTB fitImages.
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
| -rw-r--r-- | Makefile | 16 | ||||
| -rw-r--r-- | dts/Kconfig | 57 | ||||
| -rw-r--r-- | include/config_defaults.h | 3 | ||||
| -rw-r--r-- | lib/Kconfig | 13 | ||||
| -rw-r--r-- | lib/fdtdec.c | 2 | 
5 files changed, 86 insertions, 5 deletions
| @@ -1020,6 +1020,20 @@ quiet_cmd_copy = COPY    $@  ifeq ($(CONFIG_MULTI_DTB_FIT),y) +ifeq ($(CONFIG_MULTI_DTB_FIT_LZO),y) +FINAL_DTB_CONTAINER = fit-dtb.blob.lzo +else ifeq ($(CONFIG_MULTI_DTB_FIT_GZIP),y) +FINAL_DTB_CONTAINER = fit-dtb.blob.gz +else +FINAL_DTB_CONTAINER = fit-dtb.blob +endif + +fit-dtb.blob.gz: fit-dtb.blob +	@gzip -kf9 $< > $@ + +fit-dtb.blob.lzo: fit-dtb.blob +	@lzop -f9 $< > $@ +  fit-dtb.blob: dts/dt.dtb FORCE  	$(call if_changed,mkimage) @@ -1027,7 +1041,7 @@ MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \  	-a 0 -e 0 -E \  	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null -u-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob +u-boot-fit-dtb.bin: u-boot-nodtb.bin $(FINAL_DTB_CONTAINER)  	$(call if_changed,cat)  u-boot.bin: u-boot-fit-dtb.bin FORCE diff --git a/dts/Kconfig b/dts/Kconfig index 3e85914d115..a5f30c8fd03 100644 --- a/dts/Kconfig +++ b/dts/Kconfig @@ -130,6 +130,63 @@ config OF_LIST  	  device tree files (without the directory or .dtb suffix)  	  separated by <space>. +choice +	prompt "SPL OF LIST compression" +	depends on MULTI_DTB_FIT +	default MULTI_DTB_FIT_NO_COMPRESSION + +config MULTI_DTB_FIT_LZO +	bool "LZO" +	depends on SYS_MALLOC_F +	select LZO +	help +	  Compress the FIT image containing the DTBs available for the SPL +	  using LZO compression. (requires lzop on host). + +config MULTI_DTB_FIT_GZIP +	bool "GZIP" +	depends on SYS_MALLOC_F +	select GZIP +	help +	  Compress the FIT image containing the DTBs available for the SPL +	  using GZIP compression. (requires gzip on host) + +config MULTI_DTB_FIT_NO_COMPRESSION +	bool "No compression" +	help +	  Do not compress the FIT image containing the DTBs available for the SPL. +	  Use this options only if LZO is not available and the DTBs are very small. +endchoice + +choice +	prompt "Location of uncompressed DTBs" +	depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO) +	default MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F + +config MULTI_DTB_FIT_DYN_ALLOC +	bool "Dynamically allocate the memory" +	depends on SYS_MALLOC_F + +config MULTI_DTB_FIT_USER_DEFINED_AREA +	bool "User-defined location" +endchoice + +config MULTI_DTB_FIT_UNCOMPRESS_SZ +	hex "Size of memory reserved to uncompress the DTBs" +	depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO) +	default 0x8000 +	help +	   This is the size of this area where the DTBs are uncompressed. +	   If this area is dynamically allocated, make sure that +	   SYS_MALLOC_F_LEN is big enough to contain it. + +config MULTI_DTB_FIT_USER_DEF_ADDR +	hex "Address of memory where dtbs are uncompressed" +	depends on MULTI_DTB_FIT_USER_DEFINED_AREA +	help +	   the FIT image containing the DTBs is uncompressed in an area defined +	   at compilation time. This is the address of this area. It must be +	   aligned on 2-byte boundary.  config DTB_RESELECT  	bool "Support swapping dtbs at a later point in boot" diff --git a/include/config_defaults.h b/include/config_defaults.h index 7ef928bbe14..4ed09683b65 100644 --- a/include/config_defaults.h +++ b/include/config_defaults.h @@ -16,7 +16,4 @@  #define CONFIG_BOOTM_RTEMS 1  #define CONFIG_BOOTM_VXWORKS 1 -#define CONFIG_GZIP 1 -#define CONFIG_ZLIB 1 -  #endif diff --git a/lib/Kconfig b/lib/Kconfig index 366d164cd76..8fe5d85a050 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -301,6 +301,19 @@ config LZO  	help  	  This enables support for LZO compression algorithm.r +config GZIP +	bool "Enable gzip decompression support for SPL build" +	select ZLIB +	default y +	help +	  This enables support for GZIP compression algorithm. + +config ZLIB +	bool +	default y +	help +	  This enables ZLIB compression lib. +  config SPL_LZ4  	bool "Enable LZ4 decompression support in SPL"  	help diff --git a/lib/fdtdec.c b/lib/fdtdec.c index d5e8b5a4200..a51dc5e9867 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -1182,7 +1182,7 @@ int fdtdec_setup_memory_banksize(void)  	CONFIG_IS_ENABLED(MULTI_DTB_FIT_LZO)  static int uncompress_blob(const void *src, ulong sz_src, void **dstp)  { -	size_t sz_out = CONFIG_SPL_MULTI_DTB_FIT_UNCOMPRESS_SZ; +	size_t sz_out = CONFIG_VAL(MULTI_DTB_FIT_UNCOMPRESS_SZ);  	bool gzip = 0, lzo = 0;  	ulong sz_in = sz_src;  	void *dst; | 
