sh: Merge the sh64 zImage bits.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 21 Nov 2007 07:53:37 +0000 (16:53 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 28 Jan 2008 04:18:52 +0000 (13:18 +0900)
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
18 files changed:
arch/sh/boot/compressed/Makefile
arch/sh/boot/compressed/Makefile_32 [new file with mode: 0644]
arch/sh/boot/compressed/Makefile_64 [new file with mode: 0644]
arch/sh/boot/compressed/cache.c [new file with mode: 0644]
arch/sh/boot/compressed/head.S [deleted file]
arch/sh/boot/compressed/head_32.S [new file with mode: 0644]
arch/sh/boot/compressed/head_64.S [new file with mode: 0644]
arch/sh/boot/compressed/misc.c [deleted file]
arch/sh/boot/compressed/misc_32.c [new file with mode: 0644]
arch/sh/boot/compressed/misc_64.c [new file with mode: 0644]
arch/sh/boot/compressed/vmlinux_64.lds [new file with mode: 0644]
arch/sh64/boot/Makefile [deleted file]
arch/sh64/boot/compressed/Makefile [deleted file]
arch/sh64/boot/compressed/cache.c [deleted file]
arch/sh64/boot/compressed/head.S [deleted file]
arch/sh64/boot/compressed/install.sh [deleted file]
arch/sh64/boot/compressed/misc.c [deleted file]
arch/sh64/boot/compressed/vmlinux.lds.S [deleted file]

index 906a13f82fe0d2f1b557c3a7da1b28077b3feb40..efb01dc3c8c3aaa35ece6e2e21a428e1d1c0aa40 100644 (file)
@@ -1,43 +1,5 @@
-#
-# linux/arch/sh/boot/compressed/Makefile
-#
-# create a compressed vmlinux image from the original vmlinux
-#
-
-targets                := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o piggy.o
-EXTRA_AFLAGS   := -traditional
-
-OBJECTS = $(obj)/head.o $(obj)/misc.o
-
-ifdef CONFIG_SH_STANDARD_BIOS
-OBJECTS += $(obj)/../../kernel/sh_bios.o
+ifeq ($(CONFIG_SUPERH32),y)
+include ${srctree}/arch/sh/boot/compressed/Makefile_32
+else
+include ${srctree}/arch/sh/boot/compressed/Makefile_64
 endif
-
-#
-# IMAGE_OFFSET is the load offset of the compression loader
-#
-IMAGE_OFFSET   := $(shell /bin/bash -c 'printf "0x%08x" \
-                    $$[$(CONFIG_PAGE_OFFSET)  + \
-                       $(CONFIG_MEMORY_START) + \
-                       $(CONFIG_BOOT_LINK_OFFSET)]')
-
-LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
-
-LDFLAGS_vmlinux := -Ttext $(IMAGE_OFFSET) -e startup -T $(obj)/../../kernel/vmlinux.lds
-
-
-$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o $(LIBGCC) FORCE
-       $(call if_changed,ld)
-       @:
-
-$(obj)/vmlinux.bin: vmlinux FORCE
-       $(call if_changed,objcopy)
-
-$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
-       $(call if_changed,gzip)
-
-LDFLAGS_piggy.o := -r --format binary --oformat elf32-sh-linux -T
-OBJCOPYFLAGS += -R .empty_zero_page
-
-$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
-       $(call if_changed,ld)
diff --git a/arch/sh/boot/compressed/Makefile_32 b/arch/sh/boot/compressed/Makefile_32
new file mode 100644 (file)
index 0000000..6ac8d4a
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# linux/arch/sh/boot/compressed/Makefile
+#
+# create a compressed vmlinux image from the original vmlinux
+#
+
+targets                := vmlinux vmlinux.bin vmlinux.bin.gz \
+                  head_32.o misc_32.o piggy.o
+EXTRA_AFLAGS   := -traditional
+
+OBJECTS = $(obj)/head_32.o $(obj)/misc_32.o
+
+ifdef CONFIG_SH_STANDARD_BIOS
+OBJECTS += $(obj)/../../kernel/sh_bios.o
+endif
+
+#
+# IMAGE_OFFSET is the load offset of the compression loader
+#
+IMAGE_OFFSET   := $(shell /bin/bash -c 'printf "0x%08x" \
+                    $$[$(CONFIG_PAGE_OFFSET)  + \
+                       $(CONFIG_MEMORY_START) + \
+                       $(CONFIG_BOOT_LINK_OFFSET)]')
+
+LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
+
+LDFLAGS_vmlinux := -Ttext $(IMAGE_OFFSET) -e startup -T $(obj)/../../kernel/vmlinux.lds
+
+$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o $(LIBGCC) FORCE
+       $(call if_changed,ld)
+       @:
+
+$(obj)/vmlinux.bin: vmlinux FORCE
+       $(call if_changed,objcopy)
+
+$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
+       $(call if_changed,gzip)
+
+LDFLAGS_piggy.o := -r --format binary --oformat elf32-sh-linux -T
+OBJCOPYFLAGS += -R .empty_zero_page
+
+$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
+       $(call if_changed,ld)
diff --git a/arch/sh/boot/compressed/Makefile_64 b/arch/sh/boot/compressed/Makefile_64
new file mode 100644 (file)
index 0000000..0b48ae9
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# linux/arch/sh64/boot/compressed/Makefile
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License.  See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 2002 Stuart Menefy
+# Copyright (C) 2004 Paul Mundt
+#
+# create a compressed vmlinux image from the original vmlinux
+#
+
+targets                := vmlinux vmlinux.bin vmlinux.bin.gz \
+                  head_64.o misc_64.o cache.o piggy.o
+EXTRA_AFLAGS   := -traditional
+
+OBJECTS                := $(obj)/vmlinux_64.lds $(obj)/head_64.o $(obj)/misc_64.o \
+                  $(obj)/cache.o
+
+#
+# ZIMAGE_OFFSET is the load offset of the compression loader
+# (4M for the kernel plus 64K for this loader)
+#
+ZIMAGE_OFFSET  := $(shell /bin/bash -c 'printf "0x%08x" \
+                    $$[$(CONFIG_PAGE_OFFSET)+0x400000+0x10000]')
+
+LDFLAGS_vmlinux := -Ttext $(ZIMAGE_OFFSET) -e startup \
+                   -T $(obj)/../../kernel/vmlinux.lds
+
+$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o FORCE
+       $(call if_changed,ld)
+       @:
+
+$(obj)/vmlinux.bin: vmlinux FORCE
+       $(call if_changed,objcopy)
+
+$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
+       $(call if_changed,gzip)
+
+LDFLAGS_piggy.o := -r --format binary --oformat elf32-sh64-linux -T
+OBJCOPYFLAGS += -R .empty_zero_page
+
+$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
+       $(call if_changed,ld)
diff --git a/arch/sh/boot/compressed/cache.c b/arch/sh/boot/compressed/cache.c
new file mode 100644 (file)
index 0000000..e27fc74
--- /dev/null
@@ -0,0 +1,12 @@
+int cache_control(unsigned int command)
+{
+       volatile unsigned int *p = (volatile unsigned int *) 0x80000000;
+       int i;
+
+       for (i = 0; i < (32 * 1024); i += 32) {
+               (void)*p;
+               p += (32 / sizeof (int));
+       }
+
+       return 0;
+}
diff --git a/arch/sh/boot/compressed/head.S b/arch/sh/boot/compressed/head.S
deleted file mode 100644 (file)
index a8399b0..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- *  linux/arch/sh/boot/compressed/head.S
- *
- *  Copyright (C) 1999 Stuart Menefy
- *  Copyright (C) 2003 SUGIOKA Toshinobu
- */
-
-.text
-
-#include <linux/linkage.h>
-#include <asm/page.h>
-
-       .global startup
-startup:
-       /* Load initial status register */
-       mov.l   init_sr, r1
-       ldc     r1, sr
-
-       /* Move myself to proper location if necessary */
-       mova    1f, r0
-       mov.l   1f, r2
-       cmp/eq  r2, r0
-       bt      clear_bss
-       sub     r0, r2
-       mov.l   bss_start_addr, r0
-       mov     #0xe0, r1
-       and     r1, r0                  ! align cache line
-       mov.l   text_start_addr, r3
-       mov     r0, r1
-       sub     r2, r1
-3:
-       mov.l   @r1, r4
-       mov.l   @(4,r1), r5
-       mov.l   @(8,r1), r6
-       mov.l   @(12,r1), r7
-       mov.l   @(16,r1), r8
-       mov.l   @(20,r1), r9
-       mov.l   @(24,r1), r10
-       mov.l   @(28,r1), r11
-       mov.l   r4, @r0
-       mov.l   r5, @(4,r0)
-       mov.l   r6, @(8,r0)
-       mov.l   r7, @(12,r0)
-       mov.l   r8, @(16,r0)
-       mov.l   r9, @(20,r0)
-       mov.l   r10, @(24,r0)
-       mov.l   r11, @(28,r0)
-#ifdef CONFIG_CPU_SH4
-       ocbwb   @r0
-#endif
-       cmp/hi  r3, r0
-       add     #-32, r0
-       bt/s    3b
-        add    #-32, r1
-       mov.l   2f, r0
-       jmp     @r0
-        nop
-
-       .align 2
-1:     .long   1b
-2:     .long   clear_bss
-text_start_addr:
-       .long   startup
-
-       /* Clear BSS */
-clear_bss:
-       mov.l   end_addr, r1
-       mov.l   bss_start_addr, r2
-       mov     #0, r0
-l1:
-       mov.l   r0, @-r1
-       cmp/eq  r1,r2
-       bf      l1
-
-       /* Set the initial pointer. */
-       mov.l   init_stack_addr, r0
-       mov.l   @r0, r15
-
-       /* Decompress the kernel */
-       mov.l   decompress_kernel_addr, r0
-       jsr     @r0
-       nop
-
-       /* Jump to the start of the decompressed kernel */
-       mov.l   kernel_start_addr, r0
-       jmp     @r0
-       nop
-       
-       .align  2
-bss_start_addr:
-       .long   __bss_start
-end_addr:
-       .long   _end
-init_sr:
-       .long   0x400000F0      /* Privileged mode, Bank=0, Block=0, IMASK=0xF */
-init_stack_addr:
-       .long   stack_start
-decompress_kernel_addr:
-       .long   decompress_kernel
-kernel_start_addr:
-       .long   _text+PAGE_SIZE
-
-       .align  9
-fake_headers_as_bzImage:
-       .word   0
-       .ascii  "HdrS"          ! header signature
-       .word   0x0202          ! header version number (>= 0x0105)
-                               ! or else old loadlin-1.5 will fail)
-       .word   0               ! default_switch
-       .word   0               ! SETUPSEG
-       .word   0x1000
-       .word   0               ! pointing to kernel version string
-       .byte   0               ! = 0, old one (LILO, Loadlin,
-                               ! 0xTV: T=0 for LILO
-                               !       V = version
-       .byte   1               ! Load flags bzImage=1
-       .word   0x8000          ! size to move, when setup is not
-       .long   0x100000        ! 0x100000 = default for big kernel
-       .long   0               ! address of loaded ramdisk image
-       .long   0               # its size in bytes
diff --git a/arch/sh/boot/compressed/head_32.S b/arch/sh/boot/compressed/head_32.S
new file mode 100644 (file)
index 0000000..a8399b0
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ *  linux/arch/sh/boot/compressed/head.S
+ *
+ *  Copyright (C) 1999 Stuart Menefy
+ *  Copyright (C) 2003 SUGIOKA Toshinobu
+ */
+
+.text
+
+#include <linux/linkage.h>
+#include <asm/page.h>
+
+       .global startup
+startup:
+       /* Load initial status register */
+       mov.l   init_sr, r1
+       ldc     r1, sr
+
+       /* Move myself to proper location if necessary */
+       mova    1f, r0
+       mov.l   1f, r2
+       cmp/eq  r2, r0
+       bt      clear_bss
+       sub     r0, r2
+       mov.l   bss_start_addr, r0
+       mov     #0xe0, r1
+       and     r1, r0                  ! align cache line
+       mov.l   text_start_addr, r3
+       mov     r0, r1
+       sub     r2, r1
+3:
+       mov.l   @r1, r4
+       mov.l   @(4,r1), r5
+       mov.l   @(8,r1), r6
+       mov.l   @(12,r1), r7
+       mov.l   @(16,r1), r8
+       mov.l   @(20,r1), r9
+       mov.l   @(24,r1), r10
+       mov.l   @(28,r1), r11
+       mov.l   r4, @r0
+       mov.l   r5, @(4,r0)
+       mov.l   r6, @(8,r0)
+       mov.l   r7, @(12,r0)
+       mov.l   r8, @(16,r0)
+       mov.l   r9, @(20,r0)
+       mov.l   r10, @(24,r0)
+       mov.l   r11, @(28,r0)
+#ifdef CONFIG_CPU_SH4
+       ocbwb   @r0
+#endif
+       cmp/hi  r3, r0
+       add     #-32, r0
+       bt/s    3b
+        add    #-32, r1
+       mov.l   2f, r0
+       jmp     @r0
+        nop
+
+       .align 2
+1:     .long   1b
+2:     .long   clear_bss
+text_start_addr:
+       .long   startup
+
+       /* Clear BSS */
+clear_bss:
+       mov.l   end_addr, r1
+       mov.l   bss_start_addr, r2
+       mov     #0, r0
+l1:
+       mov.l   r0, @-r1
+       cmp/eq  r1,r2
+       bf      l1
+
+       /* Set the initial pointer. */
+       mov.l   init_stack_addr, r0
+       mov.l   @r0, r15
+
+       /* Decompress the kernel */
+       mov.l   decompress_kernel_addr, r0
+       jsr     @r0
+       nop
+
+       /* Jump to the start of the decompressed kernel */
+       mov.l   kernel_start_addr, r0
+       jmp     @r0
+       nop
+       
+       .align  2
+bss_start_addr:
+       .long   __bss_start
+end_addr:
+       .long   _end
+init_sr:
+       .long   0x400000F0      /* Privileged mode, Bank=0, Block=0, IMASK=0xF */
+init_stack_addr:
+       .long   stack_start
+decompress_kernel_addr:
+       .long   decompress_kernel
+kernel_start_addr:
+       .long   _text+PAGE_SIZE
+
+       .align  9
+fake_headers_as_bzImage:
+       .word   0
+       .ascii  "HdrS"          ! header signature
+       .word   0x0202          ! header version number (>= 0x0105)
+                               ! or else old loadlin-1.5 will fail)
+       .word   0               ! default_switch
+       .word   0               ! SETUPSEG
+       .word   0x1000
+       .word   0               ! pointing to kernel version string
+       .byte   0               ! = 0, old one (LILO, Loadlin,
+                               ! 0xTV: T=0 for LILO
+                               !       V = version
+       .byte   1               ! Load flags bzImage=1
+       .word   0x8000          ! size to move, when setup is not
+       .long   0x100000        ! 0x100000 = default for big kernel
+       .long   0               ! address of loaded ramdisk image
+       .long   0               # its size in bytes
diff --git a/arch/sh/boot/compressed/head_64.S b/arch/sh/boot/compressed/head_64.S
new file mode 100644 (file)
index 0000000..1d4ecbf
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * arch/shmedia/boot/compressed/head.S
+ *
+ * Copied from
+ *   arch/shmedia/kernel/head.S
+ * which carried the copyright:
+ *   Copyright (C) 2000, 2001  Paolo Alberelli
+ *
+ * Modification for compressed loader:
+ *   Copyright (C) 2002 Stuart Menefy (stuart.menefy@st.com)
+ */
+#include <linux/linkage.h>
+#include <asm/cache.h>
+#include <asm/cpu/mmu_context.h>
+#include <asm/cpu/registers.h>
+
+/*
+ * Fixed TLB entries to identity map the beginning of RAM
+ */
+#define MMUIR_TEXT_H   0x0000000000000003 | CONFIG_MEMORY_START
+                       /* Enabled, Shared, ASID 0, Eff. Add. 0xA0000000 */
+#define MMUIR_TEXT_L   0x000000000000009a | CONFIG_MEMORY_START
+                       /* 512 Mb, Cacheable (Write-back), execute, Not User, Ph. Add. */
+
+#define MMUDR_CACHED_H 0x0000000000000003 | CONFIG_MEMORY_START
+                       /* Enabled, Shared, ASID 0, Eff. Add. 0xA0000000 */
+#define MMUDR_CACHED_L 0x000000000000015a | CONFIG_MEMORY_START
+                       /* 512 Mb, Cacheable (Write-back), read/write, Not User, Ph. Add. */
+
+#define        ICCR0_INIT_VAL  ICCR0_ON | ICCR0_ICI            /* ICE + ICI */
+#define        ICCR1_INIT_VAL  ICCR1_NOLOCK                    /* No locking */
+
+#if 1
+#define        OCCR0_INIT_VAL  OCCR0_ON | OCCR0_OCI | OCCR0_WB /* OCE + OCI + WB */
+#else
+#define        OCCR0_INIT_VAL  OCCR0_OFF
+#endif
+#define        OCCR1_INIT_VAL  OCCR1_NOLOCK                    /* No locking */
+
+       .text
+
+       .global startup
+startup:
+       /*
+        * Prevent speculative fetch on device memory due to
+        * uninitialized target registers.
+        * This must be executed before the first branch.
+        */
+       ptabs/u r63, tr0
+       ptabs/u r63, tr1
+       ptabs/u r63, tr2
+       ptabs/u r63, tr3
+       ptabs/u r63, tr4
+       ptabs/u r63, tr5
+       ptabs/u r63, tr6
+       ptabs/u r63, tr7
+       synci
+
+       /*
+        * Set initial TLB entries for cached and uncached regions.
+        * Note: PTA/BLINK is PIC code, PTABS/BLINK isn't !
+        */
+       /* Clear ITLBs */
+       pta     1f, tr1
+       movi    ITLB_FIXED, r21
+       movi    ITLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
+1:     putcfg  r21, 0, r63             /* Clear MMUIR[n].PTEH.V */
+       addi    r21, TLB_STEP, r21
+        bne    r21, r22, tr1
+
+       /* Clear DTLBs */
+       pta     1f, tr1
+       movi    DTLB_FIXED, r21
+       movi    DTLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
+1:     putcfg  r21, 0, r63             /* Clear MMUDR[n].PTEH.V */
+       addi    r21, TLB_STEP, r21
+        bne    r21, r22, tr1
+
+       /* Map one big (512Mb) page for ITLB */
+       movi    ITLB_FIXED, r21
+       movi    MMUIR_TEXT_L, r22       /* PTEL first */
+       putcfg  r21, 1, r22             /* Set MMUIR[0].PTEL */
+       movi    MMUIR_TEXT_H, r22       /* PTEH last */
+       putcfg  r21, 0, r22             /* Set MMUIR[0].PTEH */
+
+       /* Map one big CACHED (512Mb) page for DTLB */
+       movi    DTLB_FIXED, r21
+       movi    MMUDR_CACHED_L, r22     /* PTEL first */
+       putcfg  r21, 1, r22             /* Set MMUDR[0].PTEL */
+       movi    MMUDR_CACHED_H, r22     /* PTEH last */
+       putcfg  r21, 0, r22             /* Set MMUDR[0].PTEH */
+
+       /* ICache */
+       movi    ICCR_BASE, r21
+       movi    ICCR0_INIT_VAL, r22
+       movi    ICCR1_INIT_VAL, r23
+       putcfg  r21, ICCR_REG0, r22
+       putcfg  r21, ICCR_REG1, r23
+       synci
+
+       /* OCache */
+       movi    OCCR_BASE, r21
+       movi    OCCR0_INIT_VAL, r22
+       movi    OCCR1_INIT_VAL, r23
+       putcfg  r21, OCCR_REG0, r22
+       putcfg  r21, OCCR_REG1, r23
+       synco
+
+       /*
+        * Enable the MMU.
+        * From here-on code can be non-PIC.
+        */
+       movi    SR_HARMLESS | SR_ENABLE_MMU, r22
+       putcon  r22, SSR
+       movi    1f, r22
+       putcon  r22, SPC
+       synco
+       rte                             /* And now go into the hyperspace ... */
+1:                                     /* ... that's the next instruction ! */
+
+       /* Set initial stack pointer */
+       movi    datalabel stack_start, r0
+       ld.l    r0, 0, r15
+
+       /*
+        * Clear bss
+        */
+       pt      1f, tr1
+       movi    datalabel __bss_start, r22
+       movi    datalabel _end, r23
+1:     st.l    r22, 0, r63
+       addi    r22, 4, r22
+       bne     r22, r23, tr1
+
+       /*
+        * Decompress the kernel.
+        */
+       pt      decompress_kernel, tr0
+       blink   tr0, r18
+
+       /*
+        * Disable the MMU.
+        */
+       movi    SR_HARMLESS, r22
+       putcon  r22, SSR
+       movi    1f, r22
+       putcon  r22, SPC
+       synco
+       rte                             /* And now go into the hyperspace ... */
+1:                                     /* ... that's the next instruction ! */
+
+       /* Jump into the decompressed kernel */
+       movi    datalabel (CONFIG_MEMORY_START + 0x2000)+1, r19
+       ptabs   r19, tr0
+       blink   tr0, r18
+
+       /* Shouldn't return here, but just in case, loop forever */
+       pt      1f, tr0
+1:     blink   tr0, r63
diff --git a/arch/sh/boot/compressed/misc.c b/arch/sh/boot/compressed/misc.c
deleted file mode 100644 (file)
index df65e30..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * arch/sh/boot/compressed/misc.c
- *
- * This is a collection of several routines from gzip-1.0.3
- * adapted for Linux.
- *
- * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
- *
- * Adapted for SH by Stuart Menefy, Aug 1999
- *
- * Modified to use standard LinuxSH BIOS by Greg Banks 7Jul2000
- */
-
-#include <asm/uaccess.h>
-#include <asm/addrspace.h>
-#include <asm/page.h>
-#ifdef CONFIG_SH_STANDARD_BIOS
-#include <asm/sh_bios.h>
-#endif
-
-/*
- * gzip declarations
- */
-
-#define OF(args)  args
-#define STATIC static
-
-#undef memset
-#undef memcpy
-#define memzero(s, n)     memset ((s), 0, (n))
-
-typedef unsigned char  uch;
-typedef unsigned short ush;
-typedef unsigned long  ulg;
-
-#define WSIZE 0x8000           /* Window size must be at least 32k, */
-                               /* and a power of two */
-
-static uch *inbuf;          /* input buffer */
-static uch window[WSIZE];    /* Sliding window buffer */
-
-static unsigned insize = 0;  /* valid bytes in inbuf */
-static unsigned inptr = 0;   /* index of next byte to be processed in inbuf */
-static unsigned outcnt = 0;  /* bytes in output buffer */
-
-/* gzip flag byte */
-#define ASCII_FLAG   0x01 /* bit 0 set: file probably ASCII text */
-#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
-#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
-#define COMMENT      0x10 /* bit 4 set: file comment present */
-#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
-#define RESERVED     0xC0 /* bit 6,7:   reserved */
-
-#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-
-/* Diagnostic functions */
-#ifdef DEBUG
-#  define Assert(cond,msg) {if(!(cond)) error(msg);}
-#  define Trace(x) fprintf x
-#  define Tracev(x) {if (verbose) fprintf x ;}
-#  define Tracevv(x) {if (verbose>1) fprintf x ;}
-#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
-#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
-#else
-#  define Assert(cond,msg)
-#  define Trace(x)
-#  define Tracev(x)
-#  define Tracevv(x)
-#  define Tracec(c,x)
-#  define Tracecv(c,x)
-#endif
-
-static int  fill_inbuf(void);
-static void flush_window(void);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-extern char input_data[];
-extern int input_len;
-
-static long bytes_out = 0;
-static uch *output_data;
-static unsigned long output_ptr = 0;
-
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-int puts(const char *);
-
-extern int _text;              /* Defined in vmlinux.lds.S */
-extern int _end;
-static unsigned long free_mem_ptr;
-static unsigned long free_mem_end_ptr;
-
-#define HEAP_SIZE             0x10000
-
-#include "../../../../lib/inflate.c"
-
-static void *malloc(int size)
-{
-       void *p;
-
-       if (size <0) error("Malloc error");
-       if (free_mem_ptr == 0) error("Memory error");
-
-       free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
-
-       p = (void *)free_mem_ptr;
-       free_mem_ptr += size;
-
-       if (free_mem_ptr >= free_mem_end_ptr)
-               error("Out of memory");
-
-       return p;
-}
-
-static void free(void *where)
-{      /* Don't care */
-}
-
-static void gzip_mark(void **ptr)
-{
-       *ptr = (void *) free_mem_ptr;
-}
-
-static void gzip_release(void **ptr)
-{
-       free_mem_ptr = (long) *ptr;
-}
-
-#ifdef CONFIG_SH_STANDARD_BIOS
-size_t strlen(const char *s)
-{
-       int i = 0;
-
-       while (*s++)
-               i++;
-       return i;
-}
-
-int puts(const char *s)
-{
-       int len = strlen(s);
-       sh_bios_console_write(s, len);
-       return len;
-}
-#else
-int puts(const char *s)
-{
-       /* This should be updated to use the sh-sci routines */
-       return 0;
-}
-#endif
-
-void* memset(void* s, int c, size_t n)
-{
-       int i;
-       char *ss = (char*)s;
-
-       for (i=0;i<n;i++) ss[i] = c;
-       return s;
-}
-
-void* memcpy(void* __dest, __const void* __src,
-                           size_t __n)
-{
-       int i;
-       char *d = (char *)__dest, *s = (char *)__src;
-
-       for (i=0;i<__n;i++) d[i] = s[i];
-       return __dest;
-}
-
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-static int fill_inbuf(void)
-{
-       if (insize != 0) {
-               error("ran out of input data");
-       }
-
-       inbuf = input_data;
-       insize = input_len;
-       inptr = 1;
-       return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-static void flush_window(void)
-{
-    ulg c = crc;         /* temporary variable */
-    unsigned n;
-    uch *in, *out, ch;
-
-    in = window;
-    out = &output_data[output_ptr];
-    for (n = 0; n < outcnt; n++) {
-           ch = *out++ = *in++;
-           c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
-    }
-    crc = c;
-    bytes_out += (ulg)outcnt;
-    output_ptr += (ulg)outcnt;
-    outcnt = 0;
-}
-
-static void error(char *x)
-{
-       puts("\n\n");
-       puts(x);
-       puts("\n\n -- System halted");
-
-       while(1);       /* Halt */
-}
-
-#define STACK_SIZE (4096)
-long user_stack [STACK_SIZE];
-long* stack_start = &user_stack[STACK_SIZE];
-
-void decompress_kernel(void)
-{
-       output_data = 0;
-       output_ptr = P2SEGADDR((unsigned long)&_text+PAGE_SIZE);
-       free_mem_ptr = (unsigned long)&_end;
-       free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
-
-       makecrc();
-       puts("Uncompressing Linux... ");
-       gunzip();
-       puts("Ok, booting the kernel.\n");
-}
diff --git a/arch/sh/boot/compressed/misc_32.c b/arch/sh/boot/compressed/misc_32.c
new file mode 100644 (file)
index 0000000..df65e30
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * arch/sh/boot/compressed/misc.c
+ *
+ * This is a collection of several routines from gzip-1.0.3
+ * adapted for Linux.
+ *
+ * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
+ *
+ * Adapted for SH by Stuart Menefy, Aug 1999
+ *
+ * Modified to use standard LinuxSH BIOS by Greg Banks 7Jul2000
+ */
+
+#include <asm/uaccess.h>
+#include <asm/addrspace.h>
+#include <asm/page.h>
+#ifdef CONFIG_SH_STANDARD_BIOS
+#include <asm/sh_bios.h>
+#endif
+
+/*
+ * gzip declarations
+ */
+
+#define OF(args)  args
+#define STATIC static
+
+#undef memset
+#undef memcpy
+#define memzero(s, n)     memset ((s), 0, (n))
+
+typedef unsigned char  uch;
+typedef unsigned short ush;
+typedef unsigned long  ulg;
+
+#define WSIZE 0x8000           /* Window size must be at least 32k, */
+                               /* and a power of two */
+
+static uch *inbuf;          /* input buffer */
+static uch window[WSIZE];    /* Sliding window buffer */
+
+static unsigned insize = 0;  /* valid bytes in inbuf */
+static unsigned inptr = 0;   /* index of next byte to be processed in inbuf */
+static unsigned outcnt = 0;  /* bytes in output buffer */
+
+/* gzip flag byte */
+#define ASCII_FLAG   0x01 /* bit 0 set: file probably ASCII text */
+#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
+#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
+#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
+#define COMMENT      0x10 /* bit 4 set: file comment present */
+#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
+#define RESERVED     0xC0 /* bit 6,7:   reserved */
+
+#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
+
+/* Diagnostic functions */
+#ifdef DEBUG
+#  define Assert(cond,msg) {if(!(cond)) error(msg);}
+#  define Trace(x) fprintf x
+#  define Tracev(x) {if (verbose) fprintf x ;}
+#  define Tracevv(x) {if (verbose>1) fprintf x ;}
+#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
+#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
+#else
+#  define Assert(cond,msg)
+#  define Trace(x)
+#  define Tracev(x)
+#  define Tracevv(x)
+#  define Tracec(c,x)
+#  define Tracecv(c,x)
+#endif
+
+static int  fill_inbuf(void);
+static void flush_window(void);
+static void error(char *m);
+static void gzip_mark(void **);
+static void gzip_release(void **);
+
+extern char input_data[];
+extern int input_len;
+
+static long bytes_out = 0;
+static uch *output_data;
+static unsigned long output_ptr = 0;
+
+static void *malloc(int size);
+static void free(void *where);
+static void error(char *m);
+static void gzip_mark(void **);
+static void gzip_release(void **);
+
+int puts(const char *);
+
+extern int _text;              /* Defined in vmlinux.lds.S */
+extern int _end;
+static unsigned long free_mem_ptr;
+static unsigned long free_mem_end_ptr;
+
+#define HEAP_SIZE             0x10000
+
+#include "../../../../lib/inflate.c"
+
+static void *malloc(int size)
+{
+       void *p;
+
+       if (size <0) error("Malloc error");
+       if (free_mem_ptr == 0) error("Memory error");
+
+       free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
+
+       p = (void *)free_mem_ptr;
+       free_mem_ptr += size;
+
+       if (free_mem_ptr >= free_mem_end_ptr)
+               error("Out of memory");
+
+       return p;
+}
+
+static void free(void *where)
+{      /* Don't care */
+}
+
+static void gzip_mark(void **ptr)
+{
+       *ptr = (void *) free_mem_ptr;
+}
+
+static void gzip_release(void **ptr)
+{
+       free_mem_ptr = (long) *ptr;
+}
+
+#ifdef CONFIG_SH_STANDARD_BIOS
+size_t strlen(const char *s)
+{
+       int i = 0;
+
+       while (*s++)
+               i++;
+       return i;
+}
+
+int puts(const char *s)
+{
+       int len = strlen(s);
+       sh_bios_console_write(s, len);
+       return len;
+}
+#else
+int puts(const char *s)
+{
+       /* This should be updated to use the sh-sci routines */
+       return 0;
+}
+#endif
+
+void* memset(void* s, int c, size_t n)
+{
+       int i;
+       char *ss = (char*)s;
+
+       for (i=0;i<n;i++) ss[i] = c;
+       return s;
+}
+
+void* memcpy(void* __dest, __const void* __src,
+                           size_t __n)
+{
+       int i;
+       char *d = (char *)__dest, *s = (char *)__src;
+
+       for (i=0;i<__n;i++) d[i] = s[i];
+       return __dest;
+}
+
+/* ===========================================================================
+ * Fill the input buffer. This is called only when the buffer is empty
+ * and at least one byte is really needed.
+ */
+static int fill_inbuf(void)
+{
+       if (insize != 0) {
+               error("ran out of input data");
+       }
+
+       inbuf = input_data;
+       insize = input_len;
+       inptr = 1;
+       return inbuf[0];
+}
+
+/* ===========================================================================
+ * Write the output window window[0..outcnt-1] and update crc and bytes_out.
+ * (Used for the decompressed data only.)
+ */
+static void flush_window(void)
+{
+    ulg c = crc;         /* temporary variable */
+    unsigned n;
+    uch *in, *out, ch;
+
+    in = window;
+    out = &output_data[output_ptr];
+    for (n = 0; n < outcnt; n++) {
+           ch = *out++ = *in++;
+           c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
+    }
+    crc = c;
+    bytes_out += (ulg)outcnt;
+    output_ptr += (ulg)outcnt;
+    outcnt = 0;
+}
+
+static void error(char *x)
+{
+       puts("\n\n");
+       puts(x);
+       puts("\n\n -- System halted");
+
+       while(1);       /* Halt */
+}
+
+#define STACK_SIZE (4096)
+long user_stack [STACK_SIZE];
+long* stack_start = &user_stack[STACK_SIZE];
+
+void decompress_kernel(void)
+{
+       output_data = 0;
+       output_ptr = P2SEGADDR((unsigned long)&_text+PAGE_SIZE);
+       free_mem_ptr = (unsigned long)&_end;
+       free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
+
+       makecrc();
+       puts("Uncompressing Linux... ");
+       gunzip();
+       puts("Ok, booting the kernel.\n");
+}
diff --git a/arch/sh/boot/compressed/misc_64.c b/arch/sh/boot/compressed/misc_64.c
new file mode 100644 (file)
index 0000000..aea00c5
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * arch/sh64/boot/compressed/misc.c
+ *
+ * This is a collection of several routines from gzip-1.0.3
+ * adapted for Linux.
+ *
+ * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
+ *
+ * Adapted for SHmedia from sh by Stuart Menefy, May 2002
+ */
+
+#include <asm/uaccess.h>
+
+/* cache.c */
+#define CACHE_ENABLE      0
+#define CACHE_DISABLE     1
+int cache_control(unsigned int command);
+
+/*
+ * gzip declarations
+ */
+
+#define OF(args)  args
+#define STATIC static
+
+#undef memset
+#undef memcpy
+#define memzero(s, n)     memset ((s), 0, (n))
+
+typedef unsigned char uch;
+typedef unsigned short ush;
+typedef unsigned long ulg;
+
+#define WSIZE 0x8000           /* Window size must be at least 32k, */
+                               /* and a power of two */
+
+static uch *inbuf;             /* input buffer */
+static uch window[WSIZE];      /* Sliding window buffer */
+
+static unsigned insize = 0;    /* valid bytes in inbuf */
+static unsigned inptr = 0;     /* index of next byte to be processed in inbuf */
+static unsigned outcnt = 0;    /* bytes in output buffer */
+
+/* gzip flag byte */
+#define ASCII_FLAG   0x01      /* bit 0 set: file probably ASCII text */
+#define CONTINUATION 0x02      /* bit 1 set: continuation of multi-part gzip file */
+#define EXTRA_FIELD  0x04      /* bit 2 set: extra field present */
+#define ORIG_NAME    0x08      /* bit 3 set: original file name present */
+#define COMMENT      0x10      /* bit 4 set: file comment present */
+#define ENCRYPTED    0x20      /* bit 5 set: file is encrypted */
+#define RESERVED     0xC0      /* bit 6,7:   reserved */
+
+#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
+
+/* Diagnostic functions */
+#ifdef DEBUG
+#  define Assert(cond,msg) {if(!(cond)) error(msg);}
+#  define Trace(x) fprintf x
+#  define Tracev(x) {if (verbose) fprintf x ;}
+#  define Tracevv(x) {if (verbose>1) fprintf x ;}
+#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
+#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
+#else
+#  define Assert(cond,msg)
+#  define Trace(x)
+#  define Tracev(x)
+#  define Tracevv(x)
+#  define Tracec(c,x)
+#  define Tracecv(c,x)
+#endif
+
+static int fill_inbuf(void);
+static void flush_window(void);
+static void error(char *m);
+static void gzip_mark(void **);
+static void gzip_release(void **);
+
+extern char input_data[];
+extern int input_len;
+
+static long bytes_out = 0;
+static uch *output_data;
+static unsigned long output_ptr = 0;
+
+static void *malloc(int size);
+static void free(void *where);
+static void error(char *m);
+static void gzip_mark(void **);
+static void gzip_release(void **);
+
+static void puts(const char *);
+
+extern int _text;              /* Defined in vmlinux.lds.S */
+extern int _end;
+static unsigned long free_mem_ptr;
+static unsigned long free_mem_end_ptr;
+
+#define HEAP_SIZE             0x10000
+
+#include "../../../../lib/inflate.c"
+
+static void *malloc(int size)
+{
+       void *p;
+
+       if (size < 0)
+               error("Malloc error\n");
+       if (free_mem_ptr == 0)
+               error("Memory error\n");
+
+       free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
+
+       p = (void *) free_mem_ptr;
+       free_mem_ptr += size;
+
+       if (free_mem_ptr >= free_mem_end_ptr)
+               error("\nOut of memory\n");
+
+       return p;
+}
+
+static void free(void *where)
+{                              /* Don't care */
+}
+
+static void gzip_mark(void **ptr)
+{
+       *ptr = (void *) free_mem_ptr;
+}
+
+static void gzip_release(void **ptr)
+{
+       free_mem_ptr = (long) *ptr;
+}
+
+void puts(const char *s)
+{
+}
+
+void *memset(void *s, int c, size_t n)
+{
+       int i;
+       char *ss = (char *) s;
+
+       for (i = 0; i < n; i++)
+               ss[i] = c;
+       return s;
+}
+
+void *memcpy(void *__dest, __const void *__src, size_t __n)
+{
+       int i;
+       char *d = (char *) __dest, *s = (char *) __src;
+
+       for (i = 0; i < __n; i++)
+               d[i] = s[i];
+       return __dest;
+}
+
+/* ===========================================================================
+ * Fill the input buffer. This is called only when the buffer is empty
+ * and at least one byte is really needed.
+ */
+static int fill_inbuf(void)
+{
+       if (insize != 0) {
+               error("ran out of input data\n");
+       }
+
+       inbuf = input_data;
+       insize = input_len;
+       inptr = 1;
+       return inbuf[0];
+}
+
+/* ===========================================================================
+ * Write the output window window[0..outcnt-1] and update crc and bytes_out.
+ * (Used for the decompressed data only.)
+ */
+static void flush_window(void)
+{
+       ulg c = crc;            /* temporary variable */
+       unsigned n;
+       uch *in, *out, ch;
+
+       in = window;
+       out = &output_data[output_ptr];
+       for (n = 0; n < outcnt; n++) {
+               ch = *out++ = *in++;
+               c = crc_32_tab[((int) c ^ ch) & 0xff] ^ (c >> 8);
+       }
+       crc = c;
+       bytes_out += (ulg) outcnt;
+       output_ptr += (ulg) outcnt;
+       outcnt = 0;
+       puts(".");
+}
+
+static void error(char *x)
+{
+       puts("\n\n");
+       puts(x);
+       puts("\n\n -- System halted");
+
+       while (1) ;             /* Halt */
+}
+
+#define STACK_SIZE (4096)
+long __attribute__ ((aligned(8))) user_stack[STACK_SIZE];
+long *stack_start = &user_stack[STACK_SIZE];
+
+void decompress_kernel(void)
+{
+       output_data = (uch *) (CONFIG_MEMORY_START + 0x2000);
+       free_mem_ptr = (unsigned long) &_end;
+       free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
+
+       makecrc();
+       puts("Uncompressing Linux... ");
+       cache_control(CACHE_ENABLE);
+       gunzip();
+       puts("\n");
+
+#if 0
+       /* When booting from ROM may want to do something like this if the
+        * boot loader doesn't.
+        */
+
+       /* Set up the parameters and command line */
+       {
+               volatile unsigned int *parambase =
+                   (int *) (CONFIG_MEMORY_START + 0x1000);
+
+               parambase[0] = 0x1;     /* MOUNT_ROOT_RDONLY */
+               parambase[1] = 0x0;     /* RAMDISK_FLAGS */
+               parambase[2] = 0x0200;  /* ORIG_ROOT_DEV */
+               parambase[3] = 0x0;     /* LOADER_TYPE */
+               parambase[4] = 0x0;     /* INITRD_START */
+               parambase[5] = 0x0;     /* INITRD_SIZE */
+               parambase[6] = 0;
+
+               strcpy((char *) ((int) parambase + 0x100),
+                      "console=ttySC0,38400");
+       }
+#endif
+
+       puts("Ok, booting the kernel.\n");
+
+       cache_control(CACHE_DISABLE);
+}
diff --git a/arch/sh/boot/compressed/vmlinux_64.lds b/arch/sh/boot/compressed/vmlinux_64.lds
new file mode 100644 (file)
index 0000000..59c2ef4
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * ld script to make compressed SuperH/shmedia Linux kernel+decompression
+ *             bootstrap
+ * Modified by Stuart Menefy from arch/sh/vmlinux.lds.S written by Niibe Yutaka
+ */
+
+
+#ifdef CONFIG_LITTLE_ENDIAN
+/* OUTPUT_FORMAT("elf32-sh64l-linux", "elf32-sh64l-linux", "elf32-sh64l-linux") */
+#define NOP 0x6ff0fff0
+#else
+/* OUTPUT_FORMAT("elf32-sh64", "elf32-sh64", "elf32-sh64") */
+#define NOP 0xf0fff06f
+#endif
+
+OUTPUT_FORMAT("elf32-sh64-linux")
+OUTPUT_ARCH(sh)
+ENTRY(_start)
+
+#define ALIGNED_GAP(section, align) (((ADDR(section)+SIZEOF(section)+(align)-1) & ~((align)-1))-ADDR(section))
+#define FOLLOWING(section, align) AT (LOADADDR(section) + ALIGNED_GAP(section,align))
+
+SECTIONS
+{
+  _text = .;                   /* Text and read-only data */
+
+  .text : {
+       *(.text)
+       *(.text64)
+       *(.text..SHmedia32)
+       *(.fixup)
+       *(.gnu.warning)
+       } = NOP
+  . = ALIGN(4);
+  .rodata : { *(.rodata) }
+
+  /* There is no 'real' reason for eight byte alignment, four would work
+   * as well, but gdb downloads much (*4) faster with this.
+   */
+  . = ALIGN(8);
+  .image : { *(.image) }
+  . = ALIGN(4);
+  _etext = .;                  /* End of text section */
+
+  .data :                      /* Data */
+       FOLLOWING(.image, 4)
+       {
+       _data = .;
+       *(.data)
+       }
+  _data_image = LOADADDR(.data);/* Address of data section in ROM */
+
+  _edata = .;                  /* End of data section */
+
+  .stack : { stack = .;  _stack = .; }
+
+  . = ALIGN(4);
+  __bss_start = .;             /* BSS */
+  .bss : {
+       *(.bss)
+       }
+  . = ALIGN(4);
+  _end = . ;
+}
diff --git a/arch/sh64/boot/Makefile b/arch/sh64/boot/Makefile
deleted file mode 100644 (file)
index fb71087..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# arch/sh64/boot/Makefile
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 2002 Stuart Menefy
-#
-
-targets := zImage
-subdir- := compressed
-
-$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
-       $(call if_changed,objcopy)
-       @echo 'Kernel: $@ is ready'
-
-$(obj)/compressed/vmlinux: FORCE
-       $(Q)$(MAKE) $(build)=$(obj)/compressed $@
-
diff --git a/arch/sh64/boot/compressed/Makefile b/arch/sh64/boot/compressed/Makefile
deleted file mode 100644 (file)
index 9cd2167..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# linux/arch/sh64/boot/compressed/Makefile
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 2002 Stuart Menefy
-# Copyright (C) 2004 Paul Mundt
-#
-# create a compressed vmlinux image from the original vmlinux
-#
-
-targets                := vmlinux vmlinux.bin vmlinux.bin.gz \
-                  head.o misc.o cache.o piggy.o vmlinux.lds
-
-EXTRA_AFLAGS   := -traditional
-
-OBJECTS                := $(obj)/head.o $(obj)/misc.o $(obj)/cache.o
-
-#
-# ZIMAGE_OFFSET is the load offset of the compression loader
-# (4M for the kernel plus 64K for this loader)
-#
-ZIMAGE_OFFSET = $(shell printf "0x%8x" $$[$(CONFIG_MEMORY_START)+0x400000+0x10000])
-
-LDFLAGS_vmlinux := -Ttext $(ZIMAGE_OFFSET) -e startup \
-                   -T $(obj)/../../kernel/vmlinux.lds \
-                   --no-warn-mismatch
-
-$(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o FORCE
-       $(call if_changed,ld)
-       @:
-
-$(obj)/vmlinux.bin: vmlinux FORCE
-       $(call if_changed,objcopy)
-
-$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
-       $(call if_changed,gzip)
-
-LDFLAGS_piggy.o := -r --format binary --oformat elf32-sh64-linux -T
-OBJCOPYFLAGS += -R .empty_zero_page
-
-$(obj)/piggy.o: $(obj)/vmlinux.lds $(obj)/vmlinux.bin.gz FORCE
-       $(call if_changed,ld)
-
diff --git a/arch/sh64/boot/compressed/cache.c b/arch/sh64/boot/compressed/cache.c
deleted file mode 100644 (file)
index 7087073..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * arch/shmedia/boot/compressed/cache.c -- simple cache management functions
- *
- * Code extracted from sh-ipl+g, sh-stub.c, which has the copyright:
- *
- *   This is originally based on an m68k software stub written by Glenn
- *   Engel at HP, but has changed quite a bit.
- *
- *   Modifications for the SH by Ben Lee and Steve Chamberlain
- *
-****************************************************************************
-
-               THIS SOFTWARE IS NOT COPYRIGHTED
-
-   HP offers the following for use in the public domain.  HP makes no
-   warranty with regard to the software or it's performance and the
-   user accepts the software "AS IS" with all faults.
-
-   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
-   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-****************************************************************************/
-
-#define CACHE_ENABLE      0
-#define CACHE_DISABLE     1
-
-int cache_control(unsigned int command)
-{
-       volatile unsigned int *p = (volatile unsigned int *) 0x80000000;
-       int i;
-
-       for (i = 0; i < (32 * 1024); i += 32) {
-               (void *) *p;
-               p += (32 / sizeof (int));
-       }
-
-       return 0;
-}
diff --git a/arch/sh64/boot/compressed/head.S b/arch/sh64/boot/compressed/head.S
deleted file mode 100644 (file)
index 82040b1..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * arch/shmedia/boot/compressed/head.S
- *
- * Copied from
- *   arch/shmedia/kernel/head.S
- * which carried the copyright:
- *   Copyright (C) 2000, 2001  Paolo Alberelli
- *
- * Modification for compressed loader:
- *   Copyright (C) 2002 Stuart Menefy (stuart.menefy@st.com)
- */
-
-#include <linux/linkage.h>
-#include <asm/registers.h>
-#include <asm/cache.h>
-#include <asm/mmu_context.h>
-
-/*
- * Fixed TLB entries to identity map the beginning of RAM
- */
-#define MMUIR_TEXT_H   0x0000000000000003 | CONFIG_MEMORY_START
-                       /* Enabled, Shared, ASID 0, Eff. Add. 0xA0000000 */
-#define MMUIR_TEXT_L   0x000000000000009a | CONFIG_MEMORY_START
-                       /* 512 Mb, Cacheable (Write-back), execute, Not User, Ph. Add. */
-
-#define MMUDR_CACHED_H 0x0000000000000003 | CONFIG_MEMORY_START
-                       /* Enabled, Shared, ASID 0, Eff. Add. 0xA0000000 */
-#define MMUDR_CACHED_L 0x000000000000015a | CONFIG_MEMORY_START
-                       /* 512 Mb, Cacheable (Write-back), read/write, Not User, Ph. Add. */
-
-#define        ICCR0_INIT_VAL  ICCR0_ON | ICCR0_ICI            /* ICE + ICI */
-#define        ICCR1_INIT_VAL  ICCR1_NOLOCK                    /* No locking */
-
-#if 1
-#define        OCCR0_INIT_VAL  OCCR0_ON | OCCR0_OCI | OCCR0_WB /* OCE + OCI + WB */
-#else
-#define        OCCR0_INIT_VAL  OCCR0_OFF
-#endif
-#define        OCCR1_INIT_VAL  OCCR1_NOLOCK                    /* No locking */
-
-       .text
-
-       .global startup
-startup:
-       /*
-        * Prevent speculative fetch on device memory due to
-        * uninitialized target registers.
-        * This must be executed before the first branch.
-        */
-       ptabs/u ZERO, tr0
-       ptabs/u ZERO, tr1
-       ptabs/u ZERO, tr2
-       ptabs/u ZERO, tr3
-       ptabs/u ZERO, tr4
-       ptabs/u ZERO, tr5
-       ptabs/u ZERO, tr6
-       ptabs/u ZERO, tr7
-       synci
-
-       /*
-        * Set initial TLB entries for cached and uncached regions.
-        * Note: PTA/BLINK is PIC code, PTABS/BLINK isn't !
-        */
-       /* Clear ITLBs */
-       pta     1f, tr1
-       movi    ITLB_FIXED, r21
-       movi    ITLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
-1:     putcfg  r21, 0, ZERO            /* Clear MMUIR[n].PTEH.V */
-       addi    r21, TLB_STEP, r21
-        bne    r21, r22, tr1
-
-       /* Clear DTLBs */
-       pta     1f, tr1
-       movi    DTLB_FIXED, r21
-       movi    DTLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
-1:     putcfg  r21, 0, ZERO            /* Clear MMUDR[n].PTEH.V */
-       addi    r21, TLB_STEP, r21
-        bne    r21, r22, tr1
-
-       /* Map one big (512Mb) page for ITLB */
-       movi    ITLB_FIXED, r21
-       movi    MMUIR_TEXT_L, r22       /* PTEL first */
-       putcfg  r21, 1, r22             /* Set MMUIR[0].PTEL */
-       movi    MMUIR_TEXT_H, r22       /* PTEH last */
-       putcfg  r21, 0, r22             /* Set MMUIR[0].PTEH */
-
-       /* Map one big CACHED (512Mb) page for DTLB */
-       movi    DTLB_FIXED, r21
-       movi    MMUDR_CACHED_L, r22     /* PTEL first */
-       putcfg  r21, 1, r22             /* Set MMUDR[0].PTEL */
-       movi    MMUDR_CACHED_H, r22     /* PTEH last */
-       putcfg  r21, 0, r22             /* Set MMUDR[0].PTEH */
-
-       /* ICache */
-       movi    ICCR_BASE, r21
-       movi    ICCR0_INIT_VAL, r22
-       movi    ICCR1_INIT_VAL, r23
-       putcfg  r21, ICCR_REG0, r22
-       putcfg  r21, ICCR_REG1, r23
-       synci
-
-       /* OCache */
-       movi    OCCR_BASE, r21
-       movi    OCCR0_INIT_VAL, r22
-       movi    OCCR1_INIT_VAL, r23
-       putcfg  r21, OCCR_REG0, r22
-       putcfg  r21, OCCR_REG1, r23
-       synco
-
-       /*
-        * Enable the MMU.
-        * From here-on code can be non-PIC.
-        */
-       movi    SR_HARMLESS | SR_ENABLE_MMU, r22
-       putcon  r22, SSR
-       movi    1f, r22
-       putcon  r22, SPC
-       synco
-       rte                             /* And now go into the hyperspace ... */
-1:                                     /* ... that's the next instruction ! */
-
-       /* Set initial stack pointer */
-       movi    datalabel stack_start, r0
-       ld.l    r0, 0, r15
-
-       /*
-        * Clear bss
-        */
-       pt      1f, tr1
-       movi    datalabel __bss_start, r22
-       movi    datalabel _end, r23
-1:     st.l    r22, 0, ZERO
-       addi    r22, 4, r22
-       bne     r22, r23, tr1
-
-       /*
-        * Decompress the kernel.
-        */
-       pt      decompress_kernel, tr0
-       blink   tr0, r18
-
-       /*
-        * Disable the MMU.
-        */
-       movi    SR_HARMLESS, r22
-       putcon  r22, SSR
-       movi    1f, r22
-       putcon  r22, SPC
-       synco
-       rte                             /* And now go into the hyperspace ... */
-1:                                     /* ... that's the next instruction ! */
-
-       /* Jump into the decompressed kernel */
-       movi    datalabel (CONFIG_MEMORY_START + 0x2000)+1, r19
-       ptabs   r19, tr0
-       blink   tr0, r18
-
-       /* Shouldn't return here, but just in case, loop forever */
-       pt      1f, tr0
-1:     blink   tr0, ZERO
diff --git a/arch/sh64/boot/compressed/install.sh b/arch/sh64/boot/compressed/install.sh
deleted file mode 100644 (file)
index 90589f0..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-#
-# arch/sh/boot/install.sh
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1995 by Linus Torvalds
-#
-# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
-# Adapted from code in arch/i386/boot/install.sh by Russell King
-# Adapted from code in arch/arm/boot/install.sh by Stuart Menefy
-#
-# "make install" script for sh architecture
-#
-# Arguments:
-#   $1 - kernel version
-#   $2 - kernel image file
-#   $3 - kernel map file
-#   $4 - default install path (blank if root directory)
-#
-
-# User may have a custom install script
-
-if [ -x /sbin/installkernel ]; then
-  exec /sbin/installkernel "$@"
-fi
-
-if [ "$2" = "zImage" ]; then
-# Compressed install
-  echo "Installing compressed kernel"
-  if [ -f $4/vmlinuz-$1 ]; then
-    mv $4/vmlinuz-$1 $4/vmlinuz.old
-  fi
-
-  if [ -f $4/System.map-$1 ]; then
-    mv $4/System.map-$1 $4/System.old
-  fi
-
-  cat $2 > $4/vmlinuz-$1
-  cp $3 $4/System.map-$1
-else
-# Normal install
-  echo "Installing normal kernel"
-  if [ -f $4/vmlinux-$1 ]; then
-    mv $4/vmlinux-$1 $4/vmlinux.old
-  fi
-
-  if [ -f $4/System.map ]; then
-    mv $4/System.map $4/System.old
-  fi
-
-  cat $2 > $4/vmlinux-$1
-  cp $3 $4/System.map
-fi
diff --git a/arch/sh64/boot/compressed/misc.c b/arch/sh64/boot/compressed/misc.c
deleted file mode 100644 (file)
index aea00c5..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * arch/sh64/boot/compressed/misc.c
- *
- * This is a collection of several routines from gzip-1.0.3
- * adapted for Linux.
- *
- * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
- *
- * Adapted for SHmedia from sh by Stuart Menefy, May 2002
- */
-
-#include <asm/uaccess.h>
-
-/* cache.c */
-#define CACHE_ENABLE      0
-#define CACHE_DISABLE     1
-int cache_control(unsigned int command);
-
-/*
- * gzip declarations
- */
-
-#define OF(args)  args
-#define STATIC static
-
-#undef memset
-#undef memcpy
-#define memzero(s, n)     memset ((s), 0, (n))
-
-typedef unsigned char uch;
-typedef unsigned short ush;
-typedef unsigned long ulg;
-
-#define WSIZE 0x8000           /* Window size must be at least 32k, */
-                               /* and a power of two */
-
-static uch *inbuf;             /* input buffer */
-static uch window[WSIZE];      /* Sliding window buffer */
-
-static unsigned insize = 0;    /* valid bytes in inbuf */
-static unsigned inptr = 0;     /* index of next byte to be processed in inbuf */
-static unsigned outcnt = 0;    /* bytes in output buffer */
-
-/* gzip flag byte */
-#define ASCII_FLAG   0x01      /* bit 0 set: file probably ASCII text */
-#define CONTINUATION 0x02      /* bit 1 set: continuation of multi-part gzip file */
-#define EXTRA_FIELD  0x04      /* bit 2 set: extra field present */
-#define ORIG_NAME    0x08      /* bit 3 set: original file name present */
-#define COMMENT      0x10      /* bit 4 set: file comment present */
-#define ENCRYPTED    0x20      /* bit 5 set: file is encrypted */
-#define RESERVED     0xC0      /* bit 6,7:   reserved */
-
-#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-
-/* Diagnostic functions */
-#ifdef DEBUG
-#  define Assert(cond,msg) {if(!(cond)) error(msg);}
-#  define Trace(x) fprintf x
-#  define Tracev(x) {if (verbose) fprintf x ;}
-#  define Tracevv(x) {if (verbose>1) fprintf x ;}
-#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
-#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
-#else
-#  define Assert(cond,msg)
-#  define Trace(x)
-#  define Tracev(x)
-#  define Tracevv(x)
-#  define Tracec(c,x)
-#  define Tracecv(c,x)
-#endif
-
-static int fill_inbuf(void);
-static void flush_window(void);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-extern char input_data[];
-extern int input_len;
-
-static long bytes_out = 0;
-static uch *output_data;
-static unsigned long output_ptr = 0;
-
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-static void puts(const char *);
-
-extern int _text;              /* Defined in vmlinux.lds.S */
-extern int _end;
-static unsigned long free_mem_ptr;
-static unsigned long free_mem_end_ptr;
-
-#define HEAP_SIZE             0x10000
-
-#include "../../../../lib/inflate.c"
-
-static void *malloc(int size)
-{
-       void *p;
-
-       if (size < 0)
-               error("Malloc error\n");
-       if (free_mem_ptr == 0)
-               error("Memory error\n");
-
-       free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
-
-       p = (void *) free_mem_ptr;
-       free_mem_ptr += size;
-
-       if (free_mem_ptr >= free_mem_end_ptr)
-               error("\nOut of memory\n");
-
-       return p;
-}
-
-static void free(void *where)
-{                              /* Don't care */
-}
-
-static void gzip_mark(void **ptr)
-{
-       *ptr = (void *) free_mem_ptr;
-}
-
-static void gzip_release(void **ptr)
-{
-       free_mem_ptr = (long) *ptr;
-}
-
-void puts(const char *s)
-{
-}
-
-void *memset(void *s, int c, size_t n)
-{
-       int i;
-       char *ss = (char *) s;
-
-       for (i = 0; i < n; i++)
-               ss[i] = c;
-       return s;
-}
-
-void *memcpy(void *__dest, __const void *__src, size_t __n)
-{
-       int i;
-       char *d = (char *) __dest, *s = (char *) __src;
-
-       for (i = 0; i < __n; i++)
-               d[i] = s[i];
-       return __dest;
-}
-
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-static int fill_inbuf(void)
-{
-       if (insize != 0) {
-               error("ran out of input data\n");
-       }
-
-       inbuf = input_data;
-       insize = input_len;
-       inptr = 1;
-       return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-static void flush_window(void)
-{
-       ulg c = crc;            /* temporary variable */
-       unsigned n;
-       uch *in, *out, ch;
-
-       in = window;
-       out = &output_data[output_ptr];
-       for (n = 0; n < outcnt; n++) {
-               ch = *out++ = *in++;
-               c = crc_32_tab[((int) c ^ ch) & 0xff] ^ (c >> 8);
-       }
-       crc = c;
-       bytes_out += (ulg) outcnt;
-       output_ptr += (ulg) outcnt;
-       outcnt = 0;
-       puts(".");
-}
-
-static void error(char *x)
-{
-       puts("\n\n");
-       puts(x);
-       puts("\n\n -- System halted");
-
-       while (1) ;             /* Halt */
-}
-
-#define STACK_SIZE (4096)
-long __attribute__ ((aligned(8))) user_stack[STACK_SIZE];
-long *stack_start = &user_stack[STACK_SIZE];
-
-void decompress_kernel(void)
-{
-       output_data = (uch *) (CONFIG_MEMORY_START + 0x2000);
-       free_mem_ptr = (unsigned long) &_end;
-       free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
-
-       makecrc();
-       puts("Uncompressing Linux... ");
-       cache_control(CACHE_ENABLE);
-       gunzip();
-       puts("\n");
-
-#if 0
-       /* When booting from ROM may want to do something like this if the
-        * boot loader doesn't.
-        */
-
-       /* Set up the parameters and command line */
-       {
-               volatile unsigned int *parambase =
-                   (int *) (CONFIG_MEMORY_START + 0x1000);
-
-               parambase[0] = 0x1;     /* MOUNT_ROOT_RDONLY */
-               parambase[1] = 0x0;     /* RAMDISK_FLAGS */
-               parambase[2] = 0x0200;  /* ORIG_ROOT_DEV */
-               parambase[3] = 0x0;     /* LOADER_TYPE */
-               parambase[4] = 0x0;     /* INITRD_START */
-               parambase[5] = 0x0;     /* INITRD_SIZE */
-               parambase[6] = 0;
-
-               strcpy((char *) ((int) parambase + 0x100),
-                      "console=ttySC0,38400");
-       }
-#endif
-
-       puts("Ok, booting the kernel.\n");
-
-       cache_control(CACHE_DISABLE);
-}
diff --git a/arch/sh64/boot/compressed/vmlinux.lds.S b/arch/sh64/boot/compressed/vmlinux.lds.S
deleted file mode 100644 (file)
index 59c2ef4..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * ld script to make compressed SuperH/shmedia Linux kernel+decompression
- *             bootstrap
- * Modified by Stuart Menefy from arch/sh/vmlinux.lds.S written by Niibe Yutaka
- */
-
-
-#ifdef CONFIG_LITTLE_ENDIAN
-/* OUTPUT_FORMAT("elf32-sh64l-linux", "elf32-sh64l-linux", "elf32-sh64l-linux") */
-#define NOP 0x6ff0fff0
-#else
-/* OUTPUT_FORMAT("elf32-sh64", "elf32-sh64", "elf32-sh64") */
-#define NOP 0xf0fff06f
-#endif
-
-OUTPUT_FORMAT("elf32-sh64-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-#define ALIGNED_GAP(section, align) (((ADDR(section)+SIZEOF(section)+(align)-1) & ~((align)-1))-ADDR(section))
-#define FOLLOWING(section, align) AT (LOADADDR(section) + ALIGNED_GAP(section,align))
-
-SECTIONS
-{
-  _text = .;                   /* Text and read-only data */
-
-  .text : {
-       *(.text)
-       *(.text64)
-       *(.text..SHmedia32)
-       *(.fixup)
-       *(.gnu.warning)
-       } = NOP
-  . = ALIGN(4);
-  .rodata : { *(.rodata) }
-
-  /* There is no 'real' reason for eight byte alignment, four would work
-   * as well, but gdb downloads much (*4) faster with this.
-   */
-  . = ALIGN(8);
-  .image : { *(.image) }
-  . = ALIGN(4);
-  _etext = .;                  /* End of text section */
-
-  .data :                      /* Data */
-       FOLLOWING(.image, 4)
-       {
-       _data = .;
-       *(.data)
-       }
-  _data_image = LOADADDR(.data);/* Address of data section in ROM */
-
-  _edata = .;                  /* End of data section */
-
-  .stack : { stack = .;  _stack = .; }
-
-  . = ALIGN(4);
-  __bss_start = .;             /* BSS */
-  .bss : {
-       *(.bss)
-       }
-  . = ALIGN(4);
-  _end = . ;
-}