Skip to content
Snippets Groups Projects
Commit 95f4bbd5 authored by Marek Vasut's avatar Marek Vasut
Browse files

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: default avatarMarek 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: default avatarMarek Vasut <marek.vasut+renesas@gmail.com>
parent 1fd30354
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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"
......
......@@ -16,7 +16,4 @@
#define CONFIG_BOOTM_RTEMS 1
#define CONFIG_BOOTM_VXWORKS 1
#define CONFIG_GZIP 1
#define CONFIG_ZLIB 1
#endif
......@@ -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
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment