Commit 4e23eb63 authored by Florian Fainelli's avatar Florian Fainelli Committed by Ralf Baechle

MIPS: ZBOOT: Support XZ compression scheme

Add support for the XZ compression scheme in the ZBOOT decompression
stub, in order to support it we need to:

- select the "xzkern" compression tool to compress the vmlinux.bin
  payload
- link with ashldi3.o for xz_dec_run() to work
- memcpy() is also required for decompress_unxz.c so we share the
  implementation between GZIP and XZ
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: blogic@openwrt.org
Cc: james.hogan@imgtec.com
Patchwork: https://patchwork.linux-mips.org/patch/5818/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 26fca83a
...@@ -1491,6 +1491,7 @@ config SYS_SUPPORTS_ZBOOT ...@@ -1491,6 +1491,7 @@ config SYS_SUPPORTS_ZBOOT
select HAVE_KERNEL_BZIP2 select HAVE_KERNEL_BZIP2
select HAVE_KERNEL_LZMA select HAVE_KERNEL_LZMA
select HAVE_KERNEL_LZO select HAVE_KERNEL_LZO
select HAVE_KERNEL_XZ
config SYS_SUPPORTS_ZBOOT_UART16550 config SYS_SUPPORTS_ZBOOT_UART16550
bool bool
......
...@@ -37,6 +37,10 @@ vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o ...@@ -37,6 +37,10 @@ vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o
vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o
endif endif
ifdef CONFIG_KERNEL_XZ
vmlinuzobjs-y += $(obj)/../../lib/ashldi3.o
endif
targets += vmlinux.bin targets += vmlinux.bin
OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S
$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE $(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
...@@ -46,6 +50,7 @@ tool_$(CONFIG_KERNEL_GZIP) = gzip ...@@ -46,6 +50,7 @@ tool_$(CONFIG_KERNEL_GZIP) = gzip
tool_$(CONFIG_KERNEL_BZIP2) = bzip2 tool_$(CONFIG_KERNEL_BZIP2) = bzip2
tool_$(CONFIG_KERNEL_LZMA) = lzma tool_$(CONFIG_KERNEL_LZMA) = lzma
tool_$(CONFIG_KERNEL_LZO) = lzo tool_$(CONFIG_KERNEL_LZO) = lzo
tool_$(CONFIG_KERNEL_XZ) = xzkern
targets += vmlinux.bin.z targets += vmlinux.bin.z
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE $(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
......
...@@ -43,7 +43,7 @@ void error(char *x) ...@@ -43,7 +43,7 @@ void error(char *x)
/* activate the code for pre-boot environment */ /* activate the code for pre-boot environment */
#define STATIC static #define STATIC static
#ifdef CONFIG_KERNEL_GZIP #if defined(CONFIG_KERNEL_GZIP) || defined(CONFIG_KERNEL_XZ)
void *memcpy(void *dest, const void *src, size_t n) void *memcpy(void *dest, const void *src, size_t n)
{ {
int i; int i;
...@@ -54,6 +54,8 @@ void *memcpy(void *dest, const void *src, size_t n) ...@@ -54,6 +54,8 @@ void *memcpy(void *dest, const void *src, size_t n)
d[i] = s[i]; d[i] = s[i];
return dest; return dest;
} }
#endif
#ifdef CONFIG_KERNEL_GZIP
#include "../../../../lib/decompress_inflate.c" #include "../../../../lib/decompress_inflate.c"
#endif #endif
...@@ -78,6 +80,10 @@ void *memset(void *s, int c, size_t n) ...@@ -78,6 +80,10 @@ void *memset(void *s, int c, size_t n)
#include "../../../../lib/decompress_unlzo.c" #include "../../../../lib/decompress_unlzo.c"
#endif #endif
#ifdef CONFIG_KERNEL_XZ
#include "../../../../lib/decompress_unxz.c"
#endif
void decompress_kernel(unsigned long boot_heap_start) void decompress_kernel(unsigned long boot_heap_start)
{ {
unsigned long zimage_start, zimage_size; unsigned long zimage_start, zimage_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment