summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.inc5
-rw-r--r--src/Kconfig35
-rw-r--r--src/lib/Makefile.inc4
-rw-r--r--src/lib/cbfs.c2
4 files changed, 35 insertions, 11 deletions
diff --git a/Makefile.inc b/Makefile.inc
index 5cd13ba6f4..2b5d742a2c 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -372,9 +372,12 @@ cbfs-files-handler= \
#######################################################################
# a variety of flags for our build
CBFS_COMPRESS_FLAG:=none
-ifeq ($(CONFIG_COMPRESS_RAMSTAGE),y)
+ifeq ($(CONFIG_COMPRESS_RAMSTAGE_LZMA),y)
CBFS_COMPRESS_FLAG:=LZMA
endif
+ifeq ($(CONFIG_COMPRESS_RAMSTAGE_LZ4),y)
+CBFS_COMPRESS_FLAG:=LZ4
+endif
CBFS_PAYLOAD_COMPRESS_FLAG:=none
ifeq ($(CONFIG_COMPRESSED_PAYLOAD_LZMA),y)
diff --git a/src/Kconfig b/src/Kconfig
index f68553c2a0..8246a17a3e 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -170,12 +170,36 @@ config STATIC_OPTION_TABLE
every boot. Use this if you want the NVRAM configuration to
never be modified from its default values.
-config COMPRESS_RAMSTAGE
+config MB_COMPRESS_RAMSTAGE_LZ4
+ bool
+ help
+ Select this in a mainboard to use LZ4 compression by default
+
+choice
+ prompt "Ramstage compression"
+ depends on HAVE_RAMSTAGE && !UNCOMPRESSED_RAMSTAGE
+ default COMPRESS_RAMSTAGE_LZ4 if MB_COMPRESS_RAMSTAGE_LZ4
+ default COMPRESS_RAMSTAGE_LZMA
+
+config COMPRESS_RAMSTAGE_LZMA
bool "Compress ramstage with LZMA"
- depends on HAVE_RAMSTAGE
- # Default value set at the end of the file
help
- Compress ramstage to save memory in the flash image.
+ Compress ramstage with LZMA to save memory in the flash image.
+
+config COMPRESS_RAMSTAGE_LZ4
+ bool "Compress ramstage with LZ4"
+ help
+ LZ4 doesn't give as good compression as LZMA, but decompresses much
+ faster. For large binaries such as ramstage, it's typically best to
+ use LZMA, but there can be cases where the faster decompression of
+ LZ4 can lead to a faster boot time. Testing on each individual board
+ is typically going to be needed due to the large number of factors
+ that can influence the decision. Binary size, CPU speed, ROM read
+ speed, cache, and other factors all play a part.
+
+ If you're not sure, stick with LZMA.
+
+endchoice
config COMPRESS_PRERAM_STAGES
bool "Compress romstage and verstage with LZ4"
@@ -1379,9 +1403,6 @@ config MEMLAYOUT_LD_FILE
# Set default values for symbols created before mainboards. This allows the
# option to be displayed in the general menu, but the default to be loaded in
# the mainboard if desired.
-config COMPRESS_RAMSTAGE
- default y if !UNCOMPRESSED_RAMSTAGE
-
config COMPRESS_PRERAM_STAGES
depends on (HAVE_ROMSTAGE || HAVE_VERSTAGE) && NO_XIP_EARLY_STAGES
default y
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index dcba0c61db..030959c9c6 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -95,7 +95,7 @@ $(foreach arch,$(ARCH_SUPPORTED),\
romstage-y += fmap.c
romstage-y += delay.c
romstage-y += cbfs.c
-romstage-$(CONFIG_COMPRESS_RAMSTAGE) += lzma.c lzmadecode.c
+romstage-$(CONFIG_COMPRESS_RAMSTAGE_LZMA) += lzma.c lzmadecode.c
romstage-y += libgcc.c
romstage-y += memrange.c
romstage-$(CONFIG_PRIMITIVE_MEMTEST) += primitive_memtest.c
@@ -294,7 +294,7 @@ postcar-y += fmap.c
postcar-y += gcc.c
postcar-y += halt.c
postcar-y += libgcc.c
-postcar-$(CONFIG_COMPRESS_RAMSTAGE) += lzma.c lzmadecode.c
+postcar-$(CONFIG_COMPRESS_RAMSTAGE_LZMA) += lzma.c lzmadecode.c
postcar-y += memchr.c
postcar-y += memcmp.c
postcar-y += prog_loaders.c
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index d2829d1d3e..0b2d66b33a 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -142,7 +142,7 @@ static inline bool cbfs_lzma_enabled(void)
return false;
if (ENV_ROMSTAGE && CONFIG(POSTCAR_STAGE))
return false;
- if ((ENV_ROMSTAGE || ENV_POSTCAR) && !CONFIG(COMPRESS_RAMSTAGE))
+ if ((ENV_ROMSTAGE || ENV_POSTCAR) && !CONFIG(COMPRESS_RAMSTAGE_LZMA))
return false;
if (ENV_SMM)
return false;