mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
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>
This commit is contained in:
parent
1fd303543a
commit
95f4bbd581
5 changed files with 86 additions and 5 deletions
16
Makefile
16
Makefile
|
@ -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
|
||||
|
|
57
dts/Kconfig
57
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"
|
||||
|
|
|
@ -16,7 +16,4 @@
|
|||
#define CONFIG_BOOTM_RTEMS 1
|
||||
#define CONFIG_BOOTM_VXWORKS 1
|
||||
|
||||
#define CONFIG_GZIP 1
|
||||
#define CONFIG_ZLIB 1
|
||||
|
||||
#endif
|
||||
|
|
13
lib/Kconfig
13
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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue