From 36866202945404387efdc381ba8065509e08cf0f Mon Sep 17 00:00:00 2001 From: Tao Zeng Date: Wed, 14 Aug 2024 16:05:14 +0800 Subject: [PATCH] amfc: compress kernel by zstd [1/1] PD#SWPL-181954 Change-Id: Iaec2a486f4dfb7788238775c4a92d2727b00d45b Signed-off-by: Tao Zeng --- arch/arm/boot/compressed/Makefile | 58 +++++++++++++++++++++++++++ arch/arm/boot/compressed/decompress.c | 5 +++ arch/arm/boot/compressed/head.S | 15 +++++++ 3 files changed, 78 insertions(+) diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index adc0e318a1ea..0c2a62283a32 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -181,8 +181,66 @@ $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \ $(call if_changed,ld) @$(check_for_bad_syms) +ifneq ($(CONFIG_AMLOGIC_AMFC), ) + +ifeq ($(srctree),) +srctree := $(patsubst %/,%,$(dir $(CURDIR))) +srctree := $(patsubst %/,%,$(dir $(srctree))) +endif + +zstd_src := $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/debug.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/entropy_common.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/error_private.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/fse_decompress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/pool.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/threading.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/xxhash.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/common/zstd_common.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/fse_compress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/hist.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/huf_compress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_compress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_compress_literals.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_compress_sequences.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_compress_superblock.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_double_fast.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_fast.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_lazy.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_ldm.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstd_opt.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/compress/zstdmt_compress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/decompress/huf_decompress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/decompress/huf_decompress_amd64.S +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/decompress/zstd_ddict.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/decompress/zstd_decompress.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/decompress/zstd_decompress_block.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/dictBuilder/cover.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/dictBuilder/divsufsort.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/dictBuilder/fastcover.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/dictBuilder/zdict.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/legacy/zstd_v05.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/legacy/zstd_v06.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/legacy/zstd_v07.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/benchfn.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/benchzstd.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/datagen.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/dibio.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/fileio.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/timefn.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/util.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/zstdcli.c +zstd_src += $(srctree)/common_drivers/drivers/amfc/zstd_tool/zstdcli_trace.c + +$(obj)/zstd: + $(HOSTCC) $(zstd_src) $(LDFLAGS) -o $@ + cp -n $@ $(srctree)/ + +$(obj)/piggy_data: $(obj)/../Image $(obj)/zstd FORCE + $(srctree)/zstd -a -19 $< -o $@ +else # CONFIG_AMLOGIC_AMFC $(obj)/piggy_data: $(obj)/../Image FORCE $(call if_changed,$(compress-y)) +endif # CONFIG_AMLOGIC_AMFC $(obj)/piggy.o: $(obj)/piggy_data diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c index 74255e819831..2df2a3baca39 100644 --- a/arch/arm/boot/compressed/decompress.c +++ b/arch/arm/boot/compressed/decompress.c @@ -34,6 +34,10 @@ extern size_t strlen(const char *s); extern int memcmp(const void *cs, const void *ct, size_t count); extern char * strchrnul(const char *, int); +#if IS_ENABLED(CONFIG_AMLOGIC_AMFC) +#define __UNCOMPRESS_IMAGE__ +#include "../../../../common_drivers/drivers/amfc/decompress_amfc.c" +#else /* CONFIG_AMLOGIC_AMFC */ #ifdef CONFIG_KERNEL_GZIP #include "../../../../lib/decompress_inflate.c" #endif @@ -58,6 +62,7 @@ extern char * strchrnul(const char *, int); #ifdef CONFIG_KERNEL_LZ4 #include "../../../../lib/decompress_unlz4.c" #endif +#endif /* CONFIG_AMLOGIC_AMFC */ int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) { diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 6e8e611623ee..4b07e2a82017 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -1211,6 +1211,18 @@ __armv7_mmu_cache_off: mcr p15, 0, r0, c7, c5, 4 @ ISB mov pc, lr +#if IS_ENABLED(CONFIG_AMLOGIC_AMFC) + .global serial_putc +serial_putc: + ldr r2, =0xfe07840c @T6D +1111: + ldr r3, [r2, #0] + lsls r3, r3, #10 + bmi 1111b + ldr r3, =0xfe078400 @T6D + str r0, [r3, #0] + bx lr +#endif /* * Clean and flush the cache to maintain consistency. * @@ -1223,6 +1235,9 @@ __armv7_mmu_cache_off: * r4, r6, r7, r8 */ .align 5 +#if IS_ENABLED(CONFIG_AMLOGIC_AMFC) + .global cache_clean_flush +#endif cache_clean_flush: mov r3, #16 mov r11, r1