aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-07-11 13:21:19 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-07-11 13:21:19 -0400
commit07e88e1bfc128681a80578724fde6a872f413862 (patch)
tree7e85e26152bcc277d6e2e288aac155f155ce5c4e /arch/sh
parentdf8ce2595fbac8b046322fce9df61ce1cf8ddf62 (diff)
sh: bzip2/lzma zImage support.
This plugs in bzip2 and lzma support for zImages. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/Kconfig2
-rw-r--r--arch/sh/boot/compressed/.gitignore1
-rw-r--r--arch/sh/boot/compressed/Makefile19
-rw-r--r--arch/sh/boot/compressed/misc_32.c14
-rw-r--r--arch/sh/boot/compressed/misc_64.c14
-rw-r--r--arch/sh/boot/compressed/piggy.S8
-rw-r--r--arch/sh/boot/compressed/vmlinux.scr10
7 files changed, 55 insertions, 13 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 9f531ca3c8ea..c4a955d25451 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -18,6 +18,8 @@ config SUPERH
18 select HAVE_DMA_API_DEBUG 18 select HAVE_DMA_API_DEBUG
19 select HAVE_PERF_COUNTERS 19 select HAVE_PERF_COUNTERS
20 select HAVE_KERNEL_GZIP 20 select HAVE_KERNEL_GZIP
21 select HAVE_KERNEL_BZIP2
22 select HAVE_KERNEL_LZMA
21 select RTC_LIB 23 select RTC_LIB
22 select GENERIC_ATOMIC64 24 select GENERIC_ATOMIC64
23 help 25 help
diff --git a/arch/sh/boot/compressed/.gitignore b/arch/sh/boot/compressed/.gitignore
new file mode 100644
index 000000000000..2374a83d87b2
--- /dev/null
+++ b/arch/sh/boot/compressed/.gitignore
@@ -0,0 +1 @@
vmlinux.bin.*
diff --git a/arch/sh/boot/compressed/Makefile b/arch/sh/boot/compressed/Makefile
index 9531bf1b7c2f..0a4e7af8a71b 100644
--- a/arch/sh/boot/compressed/Makefile
+++ b/arch/sh/boot/compressed/Makefile
@@ -5,6 +5,7 @@
5# 5#
6 6
7targets := vmlinux vmlinux.bin vmlinux.bin.gz \ 7targets := vmlinux vmlinux.bin vmlinux.bin.gz \
8 vmlinux.bin.bz2 vmlinux.bin.lzma \
8 head_$(BITS).o misc_$(BITS).o piggy.o 9 head_$(BITS).o misc_$(BITS).o piggy.o
9 10
10OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc_$(BITS).o $(obj)/cache.o 11OBJECTS = $(obj)/head_$(BITS).o $(obj)/misc_$(BITS).o $(obj)/cache.o
@@ -38,10 +39,22 @@ $(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o $(LIBGCC) FORCE
38$(obj)/vmlinux.bin: vmlinux FORCE 39$(obj)/vmlinux.bin: vmlinux FORCE
39 $(call if_changed,objcopy) 40 $(call if_changed,objcopy)
40 41
41$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE 42vmlinux.bin.all-y := $(obj)/vmlinux.bin
43
44$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
42 $(call if_changed,gzip) 45 $(call if_changed,gzip)
46$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
47 $(call if_changed,bzip2)
48$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
49 $(call if_changed,lzma)
50
51suffix-$(CONFIG_KERNEL_GZIP) := gz
52suffix-$(CONFIG_KERNEL_BZIP2) := bz2
53suffix-$(CONFIG_KERNEL_LZMA) := lzma
43 54
44OBJCOPYFLAGS += -R .empty_zero_page 55OBJCOPYFLAGS += -R .empty_zero_page
45 56
46$(obj)/piggy.o: $(obj)/piggy.S $(obj)/vmlinux.bin.gz FORCE 57LDFLAGS_piggy.o := -r --format binary --oformat $(ld-bfd) -T
47 $(call if_changed,as_o_S) 58
59$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
60 $(call if_changed,ld)
diff --git a/arch/sh/boot/compressed/misc_32.c b/arch/sh/boot/compressed/misc_32.c
index 1ab4f49153be..b86e3596918b 100644
--- a/arch/sh/boot/compressed/misc_32.c
+++ b/arch/sh/boot/compressed/misc_32.c
@@ -41,12 +41,24 @@ extern int _end;
41static unsigned long free_mem_ptr; 41static unsigned long free_mem_ptr;
42static unsigned long free_mem_end_ptr; 42static unsigned long free_mem_end_ptr;
43 43
44#define HEAP_SIZE 0x10000 44#ifdef CONFIG_HAVE_KERNEL_BZIP2
45#define HEAP_SIZE 0x400000
46#else
47#define HEAP_SIZE 0x10000
48#endif
45 49
46#ifdef CONFIG_KERNEL_GZIP 50#ifdef CONFIG_KERNEL_GZIP
47#include "../../../../lib/decompress_inflate.c" 51#include "../../../../lib/decompress_inflate.c"
48#endif 52#endif
49 53
54#ifdef CONFIG_KERNEL_BZIP2
55#include "../../../../lib/decompress_bunzip2.c"
56#endif
57
58#ifdef CONFIG_KERNEL_LZMA
59#include "../../../../lib/decompress_unlzma.c"
60#endif
61
50#ifdef CONFIG_SH_STANDARD_BIOS 62#ifdef CONFIG_SH_STANDARD_BIOS
51size_t strlen(const char *s) 63size_t strlen(const char *s)
52{ 64{
diff --git a/arch/sh/boot/compressed/misc_64.c b/arch/sh/boot/compressed/misc_64.c
index 0c6894e37115..09b7b7cd24f9 100644
--- a/arch/sh/boot/compressed/misc_64.c
+++ b/arch/sh/boot/compressed/misc_64.c
@@ -40,12 +40,24 @@ extern int _end;
40static unsigned long free_mem_ptr; 40static unsigned long free_mem_ptr;
41static unsigned long free_mem_end_ptr; 41static unsigned long free_mem_end_ptr;
42 42
43#define HEAP_SIZE 0x10000 43#ifdef CONFIG_HAVE_KERNEL_BZIP2
44#define HEAP_SIZE 0x400000
45#else
46#define HEAP_SIZE 0x10000
47#endif
44 48
45#ifdef CONFIG_KERNEL_GZIP 49#ifdef CONFIG_KERNEL_GZIP
46#include "../../../../lib/decompress_inflate.c" 50#include "../../../../lib/decompress_inflate.c"
47#endif 51#endif
48 52
53#ifdef CONFIG_KERNEL_BZIP2
54#include "../../../../lib/decompress_bunzip2.c"
55#endif
56
57#ifdef CONFIG_KERNEL_LZMA
58#include "../../../../lib/decompress_unlzma.c"
59#endif
60
49void puts(const char *s) 61void puts(const char *s)
50{ 62{
51} 63}
diff --git a/arch/sh/boot/compressed/piggy.S b/arch/sh/boot/compressed/piggy.S
deleted file mode 100644
index 566071926b13..000000000000
--- a/arch/sh/boot/compressed/piggy.S
+++ /dev/null
@@ -1,8 +0,0 @@
1 .global input_len, input_data
2 .data
3input_len:
4 .long input_data_end - input_data
5input_data:
6 .incbin "arch/sh/boot/compressed/vmlinux.bin.gz"
7input_data_end:
8 .end
diff --git a/arch/sh/boot/compressed/vmlinux.scr b/arch/sh/boot/compressed/vmlinux.scr
new file mode 100644
index 000000000000..f02382ae5c48
--- /dev/null
+++ b/arch/sh/boot/compressed/vmlinux.scr
@@ -0,0 +1,10 @@
1SECTIONS
2{
3 .rodata.compressed : {
4 input_len = .;
5 LONG(input_data_end - input_data) input_data = .;
6 *(.data)
7 output_len = . - 4;
8 input_data_end = .;
9 }
10}