diff options
Diffstat (limited to 'arch/arm/boot/compressed')
| -rw-r--r-- | arch/arm/boot/compressed/Makefile | 15 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/Makefile.debug | 23 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/head-l7200.S | 29 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/head.S | 40 | ||||
| -rw-r--r-- | arch/arm/boot/compressed/misc.c | 20 |
5 files changed, 30 insertions, 97 deletions
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 864a002137f..7636c9b3f9a 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | # create a compressed vmlinuz image from the original vmlinux | 4 | # create a compressed vmlinuz image from the original vmlinux |
| 5 | # | 5 | # |
| 6 | 6 | ||
| 7 | AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) | ||
| 7 | HEAD = head.o | 8 | HEAD = head.o |
| 8 | OBJS = misc.o decompress.o | 9 | OBJS = misc.o decompress.o |
| 9 | FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c | 10 | FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c |
| @@ -19,10 +20,6 @@ ifeq ($(CONFIG_ARCH_SHARK),y) | |||
| 19 | OBJS += head-shark.o ofw-shark.o | 20 | OBJS += head-shark.o ofw-shark.o |
| 20 | endif | 21 | endif |
| 21 | 22 | ||
| 22 | ifeq ($(CONFIG_ARCH_L7200),y) | ||
| 23 | OBJS += head-l7200.o | ||
| 24 | endif | ||
| 25 | |||
| 26 | ifeq ($(CONFIG_ARCH_P720T),y) | 23 | ifeq ($(CONFIG_ARCH_P720T),y) |
| 27 | # Borrow this code from SA1100 | 24 | # Borrow this code from SA1100 |
| 28 | OBJS += head-sa1100.o | 25 | OBJS += head-sa1100.o |
| @@ -82,19 +79,9 @@ endif | |||
| 82 | EXTRA_CFLAGS := -fpic -fno-builtin | 79 | EXTRA_CFLAGS := -fpic -fno-builtin |
| 83 | EXTRA_AFLAGS := -Wa,-march=all | 80 | EXTRA_AFLAGS := -Wa,-march=all |
| 84 | 81 | ||
| 85 | # Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via | ||
| 86 | # linker symbols. We only define initrd_phys and params_phys if the | ||
| 87 | # machine class defined the corresponding makefile variable. | ||
| 88 | LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR) | ||
| 89 | ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) | 82 | ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) |
| 90 | LDFLAGS_vmlinux += --be8 | 83 | LDFLAGS_vmlinux += --be8 |
| 91 | endif | 84 | endif |
| 92 | ifneq ($(INITRD_PHYS),) | ||
| 93 | LDFLAGS_vmlinux += --defsym initrd_phys=$(INITRD_PHYS) | ||
| 94 | endif | ||
| 95 | ifneq ($(PARAMS_PHYS),) | ||
| 96 | LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS) | ||
| 97 | endif | ||
| 98 | # ? | 85 | # ? |
| 99 | LDFLAGS_vmlinux += -p | 86 | LDFLAGS_vmlinux += -p |
| 100 | # Report unresolved symbol references | 87 | # Report unresolved symbol references |
diff --git a/arch/arm/boot/compressed/Makefile.debug b/arch/arm/boot/compressed/Makefile.debug deleted file mode 100644 index 491a037b297..00000000000 --- a/arch/arm/boot/compressed/Makefile.debug +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | # | ||
| 2 | # linux/arch/arm/boot/compressed/Makefile | ||
| 3 | # | ||
| 4 | # create a compressed vmlinux image from the original vmlinux | ||
| 5 | # | ||
| 6 | |||
| 7 | COMPRESSED_EXTRA=../../lib/ll_char_wr.o | ||
| 8 | OBJECTS=misc-debug.o ll_char_wr.aout.o | ||
| 9 | |||
| 10 | CFLAGS=-D__KERNEL__ -O2 -DSTDC_HEADERS -DSTANDALONE_DEBUG -Wall -I../../../../include -c | ||
| 11 | |||
| 12 | test-gzip: piggy.aout.o $(OBJECTS) | ||
| 13 | $(CC) -o $@ $(OBJECTS) piggy.aout.o | ||
| 14 | |||
| 15 | misc-debug.o: misc.c | ||
| 16 | $(CC) $(CFLAGS) -o $@ misc.c | ||
| 17 | |||
| 18 | piggy.aout.o: piggy.o | ||
| 19 | arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux piggy.o piggy.aout.o | ||
| 20 | |||
| 21 | ll_char_wr.aout.o: $(COMPRESSED_EXTRA) | ||
| 22 | arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux $(COMPRESSED_EXTRA) ll_char_wr.aout.o | ||
| 23 | |||
diff --git a/arch/arm/boot/compressed/head-l7200.S b/arch/arm/boot/compressed/head-l7200.S deleted file mode 100644 index d0e3b20856c..00000000000 --- a/arch/arm/boot/compressed/head-l7200.S +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/boot/compressed/head-l7200.S | ||
| 3 | * | ||
| 4 | * Copyright (C) 2000 Steve Hill <sjhill@cotw.com> | ||
| 5 | * | ||
| 6 | * Some code borrowed from Nicolas Pitre's 'head-sa1100.S' file. This | ||
| 7 | * is merged with head.S by the linker. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <asm/mach-types.h> | ||
| 11 | |||
| 12 | #ifndef CONFIG_ARCH_L7200 | ||
| 13 | #error What am I doing here... | ||
| 14 | #endif | ||
| 15 | |||
| 16 | .section ".start", "ax" | ||
| 17 | |||
| 18 | __L7200_start: | ||
| 19 | mov r0, #0x00100000 @ FLASH address of initrd | ||
| 20 | mov r2, #0xf1000000 @ RAM address of initrd | ||
| 21 | add r3, r2, #0x00700000 @ Size of initrd | ||
| 22 | 1: | ||
| 23 | ldmia r0!, {r4, r5, r6, r7} | ||
| 24 | stmia r2!, {r4, r5, r6, r7} | ||
| 25 | cmp r2, r3 | ||
| 26 | ble 1b | ||
| 27 | |||
| 28 | mov r8, #0 @ Zero it out | ||
| 29 | mov r7, #MACH_TYPE_L7200 @ Set architecture ID | ||
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index c5191b1532e..abf4d65acf6 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
| @@ -170,9 +170,16 @@ not_angel: | |||
| 170 | 170 | ||
| 171 | .text | 171 | .text |
| 172 | adr r0, LC0 | 172 | adr r0, LC0 |
| 173 | ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp}) | 173 | ARM( ldmia r0, {r1, r2, r3, r5, r6, r11, ip, sp}) |
| 174 | THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} ) | 174 | THUMB( ldmia r0, {r1, r2, r3, r5, r6, r11, ip} ) |
| 175 | THUMB( ldr sp, [r0, #32] ) | 175 | THUMB( ldr sp, [r0, #32] ) |
| 176 | #ifdef CONFIG_AUTO_ZRELADDR | ||
| 177 | @ determine final kernel image address | ||
| 178 | and r4, pc, #0xf8000000 | ||
| 179 | add r4, r4, #TEXT_OFFSET | ||
| 180 | #else | ||
| 181 | ldr r4, =CONFIG_ZRELADDR | ||
| 182 | #endif | ||
| 176 | subs r0, r0, r1 @ calculate the delta offset | 183 | subs r0, r0, r1 @ calculate the delta offset |
| 177 | 184 | ||
| 178 | @ if delta is zero, we are | 185 | @ if delta is zero, we are |
| @@ -310,18 +317,17 @@ wont_overwrite: mov r0, r4 | |||
| 310 | LC0: .word LC0 @ r1 | 317 | LC0: .word LC0 @ r1 |
| 311 | .word __bss_start @ r2 | 318 | .word __bss_start @ r2 |
| 312 | .word _end @ r3 | 319 | .word _end @ r3 |
| 313 | .word zreladdr @ r4 | ||
| 314 | .word _start @ r5 | 320 | .word _start @ r5 |
| 315 | .word _image_size @ r6 | 321 | .word _image_size @ r6 |
| 316 | .word _got_start @ r11 | 322 | .word _got_start @ r11 |
| 317 | .word _got_end @ ip | 323 | .word _got_end @ ip |
| 318 | .word user_stack+4096 @ sp | 324 | .word user_stack_end @ sp |
| 319 | LC1: .word reloc_end - reloc_start | 325 | LC1: .word reloc_end - reloc_start |
| 320 | .size LC0, . - LC0 | 326 | .size LC0, . - LC0 |
| 321 | 327 | ||
| 322 | #ifdef CONFIG_ARCH_RPC | 328 | #ifdef CONFIG_ARCH_RPC |
| 323 | .globl params | 329 | .globl params |
| 324 | params: ldr r0, =params_phys | 330 | params: ldr r0, =0x10000100 @ params_phys for RPC |
| 325 | mov pc, lr | 331 | mov pc, lr |
| 326 | .ltorg | 332 | .ltorg |
| 327 | .align | 333 | .align |
| @@ -339,9 +345,8 @@ params: ldr r0, =params_phys | |||
| 339 | * r4 = kernel execution address | 345 | * r4 = kernel execution address |
| 340 | * r7 = architecture number | 346 | * r7 = architecture number |
| 341 | * r8 = atags pointer | 347 | * r8 = atags pointer |
| 342 | * r9 = run-time address of "start" (???) | ||
| 343 | * On exit, | 348 | * On exit, |
| 344 | * r1, r2, r3, r9, r10, r12 corrupted | 349 | * r0, r1, r2, r3, r9, r10, r12 corrupted |
| 345 | * This routine must preserve: | 350 | * This routine must preserve: |
| 346 | * r4, r5, r6, r7, r8 | 351 | * r4, r5, r6, r7, r8 |
| 347 | */ | 352 | */ |
| @@ -396,12 +401,18 @@ __armv3_mpu_cache_on: | |||
| 396 | 401 | ||
| 397 | mov r0, #0 | 402 | mov r0, #0 |
| 398 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 403 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 |
| 404 | /* | ||
| 405 | * ?? ARMv3 MMU does not allow reading the control register, | ||
| 406 | * does this really work on ARMv3 MPU? | ||
| 407 | */ | ||
| 399 | mrc p15, 0, r0, c1, c0, 0 @ read control reg | 408 | mrc p15, 0, r0, c1, c0, 0 @ read control reg |
| 400 | @ .... .... .... WC.M | 409 | @ .... .... .... WC.M |
| 401 | orr r0, r0, #0x000d @ .... .... .... 11.1 | 410 | orr r0, r0, #0x000d @ .... .... .... 11.1 |
| 411 | /* ?? this overwrites the value constructed above? */ | ||
| 402 | mov r0, #0 | 412 | mov r0, #0 |
| 403 | mcr p15, 0, r0, c1, c0, 0 @ write control reg | 413 | mcr p15, 0, r0, c1, c0, 0 @ write control reg |
| 404 | 414 | ||
| 415 | /* ?? invalidate for the second time? */ | ||
| 405 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 416 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 |
| 406 | mov pc, lr | 417 | mov pc, lr |
| 407 | 418 | ||
| @@ -771,8 +782,10 @@ proc_types: | |||
| 771 | * Turn off the Cache and MMU. ARMv3 does not support | 782 | * Turn off the Cache and MMU. ARMv3 does not support |
| 772 | * reading the control register, but ARMv4 does. | 783 | * reading the control register, but ARMv4 does. |
| 773 | * | 784 | * |
| 774 | * On exit, r0, r1, r2, r3, r9, r12 corrupted | 785 | * On exit, |
| 775 | * This routine must preserve: r4, r6, r7 | 786 | * r0, r1, r2, r3, r9, r12 corrupted |
| 787 | * This routine must preserve: | ||
| 788 | * r4, r6, r7 | ||
| 776 | */ | 789 | */ |
| 777 | .align 5 | 790 | .align 5 |
| 778 | cache_off: mov r3, #12 @ cache_off function | 791 | cache_off: mov r3, #12 @ cache_off function |
| @@ -845,7 +858,7 @@ __armv3_mmu_cache_off: | |||
| 845 | * Clean and flush the cache to maintain consistency. | 858 | * Clean and flush the cache to maintain consistency. |
| 846 | * | 859 | * |
| 847 | * On exit, | 860 | * On exit, |
| 848 | * r1, r2, r3, r9, r11, r12 corrupted | 861 | * r1, r2, r3, r9, r10, r11, r12 corrupted |
| 849 | * This routine must preserve: | 862 | * This routine must preserve: |
| 850 | * r0, r4, r5, r6, r7 | 863 | * r0, r4, r5, r6, r7 |
| 851 | */ | 864 | */ |
| @@ -988,7 +1001,7 @@ no_cache_id: | |||
| 988 | __armv3_mmu_cache_flush: | 1001 | __armv3_mmu_cache_flush: |
| 989 | __armv3_mpu_cache_flush: | 1002 | __armv3_mpu_cache_flush: |
| 990 | mov r1, #0 | 1003 | mov r1, #0 |
| 991 | mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3 | 1004 | mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3 |
| 992 | mov pc, lr | 1005 | mov pc, lr |
| 993 | 1006 | ||
| 994 | /* | 1007 | /* |
| @@ -1001,6 +1014,7 @@ __armv3_mpu_cache_flush: | |||
| 1001 | phexbuf: .space 12 | 1014 | phexbuf: .space 12 |
| 1002 | .size phexbuf, . - phexbuf | 1015 | .size phexbuf, . - phexbuf |
| 1003 | 1016 | ||
| 1017 | @ phex corrupts {r0, r1, r2, r3} | ||
| 1004 | phex: adr r3, phexbuf | 1018 | phex: adr r3, phexbuf |
| 1005 | mov r2, #0 | 1019 | mov r2, #0 |
| 1006 | strb r2, [r3, r1] | 1020 | strb r2, [r3, r1] |
| @@ -1015,6 +1029,7 @@ phex: adr r3, phexbuf | |||
| 1015 | strb r2, [r3, r1] | 1029 | strb r2, [r3, r1] |
| 1016 | b 1b | 1030 | b 1b |
| 1017 | 1031 | ||
| 1032 | @ puts corrupts {r0, r1, r2, r3} | ||
| 1018 | puts: loadsp r3, r1 | 1033 | puts: loadsp r3, r1 |
| 1019 | 1: ldrb r2, [r0], #1 | 1034 | 1: ldrb r2, [r0], #1 |
| 1020 | teq r2, #0 | 1035 | teq r2, #0 |
| @@ -1029,12 +1044,14 @@ puts: loadsp r3, r1 | |||
| 1029 | teq r0, #0 | 1044 | teq r0, #0 |
| 1030 | bne 1b | 1045 | bne 1b |
| 1031 | mov pc, lr | 1046 | mov pc, lr |
| 1047 | @ putc corrupts {r0, r1, r2, r3} | ||
| 1032 | putc: | 1048 | putc: |
| 1033 | mov r2, r0 | 1049 | mov r2, r0 |
| 1034 | mov r0, #0 | 1050 | mov r0, #0 |
| 1035 | loadsp r3, r1 | 1051 | loadsp r3, r1 |
| 1036 | b 2b | 1052 | b 2b |
| 1037 | 1053 | ||
| 1054 | @ memdump corrupts {r0, r1, r2, r3, r10, r11, r12, lr} | ||
| 1038 | memdump: mov r12, r0 | 1055 | memdump: mov r12, r0 |
| 1039 | mov r10, lr | 1056 | mov r10, lr |
| 1040 | mov r11, #0 | 1057 | mov r11, #0 |
| @@ -1070,3 +1087,4 @@ reloc_end: | |||
| 1070 | .align | 1087 | .align |
| 1071 | .section ".stack", "w" | 1088 | .section ".stack", "w" |
| 1072 | user_stack: .space 4096 | 1089 | user_stack: .space 4096 |
| 1090 | user_stack_end: | ||
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index d2b2ef41cd4..e653a6d3c8d 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c | |||
| @@ -28,9 +28,6 @@ unsigned int __machine_arch_type; | |||
| 28 | 28 | ||
| 29 | #include <asm/unaligned.h> | 29 | #include <asm/unaligned.h> |
| 30 | 30 | ||
| 31 | #ifdef STANDALONE_DEBUG | ||
| 32 | #define putstr printf | ||
| 33 | #else | ||
| 34 | 31 | ||
| 35 | static void putstr(const char *ptr); | 32 | static void putstr(const char *ptr); |
| 36 | extern void error(char *x); | 33 | extern void error(char *x); |
| @@ -116,7 +113,6 @@ static void putstr(const char *ptr) | |||
| 116 | flush(); | 113 | flush(); |
| 117 | } | 114 | } |
| 118 | 115 | ||
| 119 | #endif | ||
| 120 | 116 | ||
| 121 | void *memcpy(void *__dest, __const void *__src, size_t __n) | 117 | void *memcpy(void *__dest, __const void *__src, size_t __n) |
| 122 | { | 118 | { |
| @@ -186,7 +182,6 @@ asmlinkage void __div0(void) | |||
| 186 | 182 | ||
| 187 | extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); | 183 | extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); |
| 188 | 184 | ||
| 189 | #ifndef STANDALONE_DEBUG | ||
| 190 | 185 | ||
| 191 | unsigned long | 186 | unsigned long |
| 192 | decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, | 187 | decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, |
| @@ -211,18 +206,3 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, | |||
| 211 | putstr(" done, booting the kernel.\n"); | 206 | putstr(" done, booting the kernel.\n"); |
| 212 | return output_ptr; | 207 | return output_ptr; |
| 213 | } | 208 | } |
| 214 | #else | ||
| 215 | |||
| 216 | char output_buffer[1500*1024]; | ||
| 217 | |||
| 218 | int main() | ||
| 219 | { | ||
| 220 | output_data = output_buffer; | ||
| 221 | |||
| 222 | putstr("Uncompressing Linux..."); | ||
| 223 | decompress(input_data, input_data_end - input_data, | ||
| 224 | NULL, NULL, output_data, NULL, error); | ||
| 225 | putstr("done.\n"); | ||
| 226 | return 0; | ||
| 227 | } | ||
| 228 | #endif | ||
