From 66ab3a74c5ce737effc2c64391e036b0938b1c36 Mon Sep 17 00:00:00 2001 From: Jesper Nilsson Date: Tue, 21 Apr 2009 11:44:57 +0200 Subject: [PATCH 1/4] CRIS: Merge machine dependent boot/compressed and boot/rescue Merge the machine dependent boot directories for v10 and v32. This avoids some code duplication and eases the way for further merging later on. Signed-off-by: Jesper Nilsson --- arch/cris/Makefile | 14 +- arch/cris/arch-v10/boot/compressed/README | 25 -- arch/cris/arch-v10/boot/compressed/misc.c | 246 ------------------ arch/cris/arch-v32/boot/Makefile | 20 -- arch/cris/arch-v32/boot/compressed/Makefile | 26 -- arch/cris/arch-v32/boot/rescue/Makefile | 26 -- arch/cris/{arch-v10 => }/boot/.gitignore | 0 arch/cris/{arch-v10 => }/boot/Makefile | 8 +- .../{arch-v10 => }/boot/compressed/Makefile | 19 +- .../{arch-v32 => }/boot/compressed/README | 0 .../compressed/decompress_v10.lds} | 0 .../compressed/decompress_v32.lds} | 0 .../head.S => boot/compressed/head_v10.S} | 4 +- .../head.S => boot/compressed/head_v32.S} | 10 +- .../{arch-v32 => }/boot/compressed/misc.c | 191 +++++++++----- arch/cris/{arch-v10 => }/boot/rescue/Makefile | 22 +- .../rescue/head.S => boot/rescue/head_v10.S} | 2 +- .../rescue/head.S => boot/rescue/head_v32.S} | 0 .../{arch-v10 => }/boot/rescue/kimagerescue.S | 0 .../rescue.lds => boot/rescue/rescue_v10.lds} | 0 .../rescue.lds => boot/rescue/rescue_v32.lds} | 0 .../{arch-v10 => }/boot/rescue/testrescue.S | 0 arch/cris/{arch-v10 => }/boot/tools/build.c | 0 23 files changed, 185 insertions(+), 428 deletions(-) delete mode 100644 arch/cris/arch-v10/boot/compressed/README delete mode 100644 arch/cris/arch-v10/boot/compressed/misc.c delete mode 100644 arch/cris/arch-v32/boot/Makefile delete mode 100644 arch/cris/arch-v32/boot/compressed/Makefile delete mode 100644 arch/cris/arch-v32/boot/rescue/Makefile rename arch/cris/{arch-v10 => }/boot/.gitignore (100%) rename arch/cris/{arch-v10 => }/boot/Makefile (65%) rename arch/cris/{arch-v10 => }/boot/compressed/Makefile (50%) rename arch/cris/{arch-v32 => }/boot/compressed/README (100%) rename arch/cris/{arch-v10/boot/compressed/decompress.lds => boot/compressed/decompress_v10.lds} (100%) rename arch/cris/{arch-v32/boot/compressed/decompress.lds => boot/compressed/decompress_v32.lds} (100%) rename arch/cris/{arch-v10/boot/compressed/head.S => boot/compressed/head_v10.S} (97%) rename arch/cris/{arch-v32/boot/compressed/head.S => boot/compressed/head_v32.S} (94%) rename arch/cris/{arch-v32 => }/boot/compressed/misc.c (65%) rename arch/cris/{arch-v10 => }/boot/rescue/Makefile (63%) rename arch/cris/{arch-v10/boot/rescue/head.S => boot/rescue/head_v10.S} (99%) rename arch/cris/{arch-v32/boot/rescue/head.S => boot/rescue/head_v32.S} (100%) rename arch/cris/{arch-v10 => }/boot/rescue/kimagerescue.S (100%) rename arch/cris/{arch-v10/boot/rescue/rescue.lds => boot/rescue/rescue_v10.lds} (100%) rename arch/cris/{arch-v32/boot/rescue/rescue.lds => boot/rescue/rescue_v32.lds} (100%) rename arch/cris/{arch-v10 => }/boot/rescue/testrescue.S (100%) rename arch/cris/{arch-v10 => }/boot/tools/build.c (100%) diff --git a/arch/cris/Makefile b/arch/cris/Makefile index 3662cfb7b61d..71e17d3eeddb 100644 --- a/arch/cris/Makefile +++ b/arch/cris/Makefile @@ -70,7 +70,7 @@ SRC_ARCH = $(srctree)/arch/cris # cris object files path OBJ_ARCH = $(objtree)/arch/cris -boot := arch/cris/$(SARCH)/boot +boot := arch/cris/boot MACHINE := arch/cris/$(SARCH) all: zImage @@ -81,15 +81,15 @@ zImage Image: vmlinux archprepare: archclean: - $(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \ - $(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \ + $(Q)if [ -e arch/cris/boot ]; then \ + $(MAKE) $(clean)=arch/cris/boot; \ fi CLEAN_FILES += \ - $(MACHINE)/boot/zImage \ - $(MACHINE)/boot/compressed/decompress.bin \ - $(MACHINE)/boot/compressed/piggy.gz \ - $(MACHINE)/boot/rescue/rescue.bin + $(boot)/zImage \ + $(boot)/compressed/decompress.bin \ + $(boot)/compressed/piggy.gz \ + $(boot)/rescue/rescue.bin # MRPROPER_FILES += diff --git a/arch/cris/arch-v10/boot/compressed/README b/arch/cris/arch-v10/boot/compressed/README deleted file mode 100644 index 48b3db9924b9..000000000000 --- a/arch/cris/arch-v10/boot/compressed/README +++ /dev/null @@ -1,25 +0,0 @@ -Creation of the self-extracting compressed kernel image (vmlinuz) ------------------------------------------------------------------ -$Id: README,v 1.1 2001/12/17 13:59:27 bjornw Exp $ - -This can be slightly confusing because it's a process with many steps. - -The kernel object built by the arch/etrax100/Makefile, vmlinux, is split -by that makefile into text and data binary files, vmlinux.text and -vmlinux.data. - -Those files together with a ROM filesystem can be catted together and -burned into a flash or executed directly at the DRAM origin. - -They can also be catted together and compressed with gzip, which is what -happens in this makefile. Together they make up piggy.img. - -The decompressor is built into the file decompress.o. It is turned into -the binary file decompress.bin, which is catted together with piggy.img -into the file vmlinuz. It can be executed in an arbitrary place in flash. - -Be careful - it assumes some things about free locations in DRAM. It -assumes the DRAM starts at 0x40000000 and that it is at least 8 MB, -so it puts its code at 0x40700000, and initial stack at 0x40800000. - --Bjorn diff --git a/arch/cris/arch-v10/boot/compressed/misc.c b/arch/cris/arch-v10/boot/compressed/misc.c deleted file mode 100644 index a4db1507d3b1..000000000000 --- a/arch/cris/arch-v10/boot/compressed/misc.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * 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 - * puts by Nick Holloway 1993, better puts by Martin Mares 1995 - * adaptation for Linux/CRIS Axis Communications AB, 1999 - * - */ - -/* where the piggybacked kernel image expects itself to live. - * it is the same address we use when we network load an uncompressed - * image into DRAM, and it is the address the kernel is linked to live - * at by vmlinux.lds.S - */ - -#define KERNEL_LOAD_ADR 0x40004000 - - -#include -#include - -/* - * gzip declarations - */ - -#define OF(args) args -#define STATIC static - -void *memset(void *s, int c, size_t n); -void *memcpy(void *__dest, __const void *__src, size_t __n); - -#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 */ - -unsigned inptr = 0; /* index of next byte to be processed in inbuf - * After decompression it will contain the - * compressed size, and head.S will read it. - */ - -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() (inbuf[inptr++]) - -/* Diagnostic functions */ -#ifdef DEBUG -# define Assert(cond, msg) do { \ - if (!(cond)) \ - error(msg); \ - } while (0) -# define Trace(x) fprintf x -# define Tracev(x) do { \ - if (verbose) \ - fprintf x; \ - } while (0) -# define Tracevv(x) do { \ - if (verbose > 1) \ - fprintf x; \ - } while (0) -# define Tracec(c, x) do { \ - if (verbose && (c)) \ - fprintf x; \ - } while (0) -# define Tracecv(c, x) do { \ - if (verbose > 1 && (c)) \ - fprintf x; \ - } while (0) -#else -# define Assert(cond, msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c, x) -# define Tracecv(c, x) -#endif - -static void flush_window(void); -static void error(char *m); - -extern char *input_data; /* lives in head.S */ - -static long bytes_out = 0; -static uch *output_data; -static unsigned long output_ptr = 0; -static void puts(const char *); - -/* the "heap" is put directly after the BSS ends, at end */ - -extern int _end; -static long free_mem_ptr = (long)&_end; -static long free_mem_end_ptr; - -#include "../../../../../lib/inflate.c" - -/* decompressor info and error messages to serial console */ - -static void -puts(const char *s) -{ -#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL - while (*s) { -#ifdef CONFIG_ETRAX_DEBUG_PORT0 - while (!(*R_SERIAL0_STATUS & (1 << 5))) ; - *R_SERIAL0_TR_DATA = *s++; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT1 - while (!(*R_SERIAL1_STATUS & (1 << 5))) ; - *R_SERIAL1_TR_DATA = *s++; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT2 - while (!(*R_SERIAL2_STATUS & (1 << 5))) ; - *R_SERIAL2_TR_DATA = *s++; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT3 - while (!(*R_SERIAL3_STATUS & (1 << 5))) ; - *R_SERIAL3_TR_DATA = *s++; -#endif - } -#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; -} - -/* =========================================================================== - * 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; - 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\n"); - - while (1); /* Halt */ -} - -void setup_normal_output_buffer(void) -{ - output_data = (char *)KERNEL_LOAD_ADR; -} - -void decompress_kernel(void) -{ - char revision; - - /* input_data is set in head.S */ - inbuf = input_data; - -#ifdef CONFIG_ETRAX_DEBUG_PORT0 - *R_SERIAL0_XOFF = 0; - *R_SERIAL0_BAUD = 0x99; - *R_SERIAL0_TR_CTRL = 0x40; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT1 - *R_SERIAL1_XOFF = 0; - *R_SERIAL1_BAUD = 0x99; - *R_SERIAL1_TR_CTRL = 0x40; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT2 - *R_GEN_CONFIG = 0x08; - *R_SERIAL2_XOFF = 0; - *R_SERIAL2_BAUD = 0x99; - *R_SERIAL2_TR_CTRL = 0x40; -#endif -#ifdef CONFIG_ETRAX_DEBUG_PORT3 - *R_GEN_CONFIG = 0x100; - *R_SERIAL3_XOFF = 0; - *R_SERIAL3_BAUD = 0x99; - *R_SERIAL3_TR_CTRL = 0x40; -#endif - - setup_normal_output_buffer(); - - makecrc(); - - __asm__ volatile ("move $vr,%0" : "=rm" (revision)); - if (revision < 10) { - puts("You need an ETRAX 100LX to run linux 2.6\n"); - while (1); - } - - puts("Uncompressing Linux...\n"); - gunzip(); - puts("Done. Now booting the kernel.\n"); -} diff --git a/arch/cris/arch-v32/boot/Makefile b/arch/cris/arch-v32/boot/Makefile deleted file mode 100644 index 99896ad60b30..000000000000 --- a/arch/cris/arch-v32/boot/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# -# arch/cris/arch-v32/boot/Makefile -# - -OBJCOPYFLAGS = -O binary -R .note -R .comment - -subdir- := compressed rescue -targets := Image - -$(obj)/Image: vmlinux FORCE - $(call if_changed,objcopy) - @echo ' Kernel: $@ is ready' - -$(obj)/compressed/vmlinux: $(obj)/Image FORCE - $(Q)$(MAKE) $(build)=$(obj)/compressed $@ - $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin - -$(obj)/zImage: $(obj)/compressed/vmlinux - @cp $< $@ - @echo ' Kernel: $@ is ready' diff --git a/arch/cris/arch-v32/boot/compressed/Makefile b/arch/cris/arch-v32/boot/compressed/Makefile deleted file mode 100644 index e176b8b69d92..000000000000 --- a/arch/cris/arch-v32/boot/compressed/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# -# arch/cris/arch-v32/boot/compressed/Makefile -# - -asflags-y += -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch -ccflags-y += -O2 -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch -ldflags-y += -T$(srctree)/$(src)/decompress.lds -OBJECTS = $(obj)/head.o $(obj)/misc.o -OBJCOPYFLAGS = -O binary --remove-section=.bss - -quiet_cmd_image = BUILD $@ -cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ - -targets := vmlinux piggy.gz decompress.o decompress.bin - -$(obj)/decompress.o: $(OBJECTS) FORCE - $(call if_changed,ld) - -$(obj)/decompress.bin: $(obj)/decompress.o FORCE - $(call if_changed,objcopy) - -$(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE - $(call if_changed,image) - -$(obj)/piggy.gz: $(obj)/../Image FORCE - $(call if_changed,gzip) diff --git a/arch/cris/arch-v32/boot/rescue/Makefile b/arch/cris/arch-v32/boot/rescue/Makefile deleted file mode 100644 index 566aac663a38..000000000000 --- a/arch/cris/arch-v32/boot/rescue/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# -# Makefile for rescue (bootstrap) code -# - -CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE) -ccflags-y += -O2 -I $(srctree)/include/asm/arch/mach/ \ - -I $(srctree)/include/asm/arch -asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch -LD = gcc-cris -mlinux -march=v32 -nostdlib -ldflags-y += -T $(srctree)/$(src)/rescue.lds -LDPOSTFLAGS = -lgcc -OBJCOPYFLAGS = -O binary --remove-section=.bss -obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o -OBJECT := $(obj)/head.o - -targets := rescue.o rescue.bin - -quiet_cmd_ldlibgcc = LD $@ -cmd_ldlibgcc = $(LD) $(LDFLAGS) $(filter-out FORCE,$^) $(LDPOSTFLAGS) -o $@ - -$(obj)/rescue.o: $(OBJECTS) FORCE - $(call if_changed,ldlibgcc) - -$(obj)/rescue.bin: $(obj)/rescue.o FORCE - $(call if_changed,objcopy) - cp -p $(obj)/rescue.bin $(objtree) diff --git a/arch/cris/arch-v10/boot/.gitignore b/arch/cris/boot/.gitignore similarity index 100% rename from arch/cris/arch-v10/boot/.gitignore rename to arch/cris/boot/.gitignore diff --git a/arch/cris/arch-v10/boot/Makefile b/arch/cris/boot/Makefile similarity index 65% rename from arch/cris/arch-v10/boot/Makefile rename to arch/cris/boot/Makefile index 217203014433..144f3afa0119 100644 --- a/arch/cris/arch-v10/boot/Makefile +++ b/arch/cris/boot/Makefile @@ -1,8 +1,12 @@ # -# arch/cris/arch-v10/boot/Makefile +# arch/cris/boot/Makefile # -OBJCOPYFLAGS = -O binary --remove-section=.bss +objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment +objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss + +OBJCOPYFLAGS = -O binary $(objcopyflags-y) + subdir- := compressed rescue targets := Image diff --git a/arch/cris/arch-v10/boot/compressed/Makefile b/arch/cris/boot/compressed/Makefile similarity index 50% rename from arch/cris/arch-v10/boot/compressed/Makefile rename to arch/cris/boot/compressed/Makefile index 6fe0ffaf3be6..8fe9338c1775 100644 --- a/arch/cris/arch-v10/boot/compressed/Makefile +++ b/arch/cris/boot/compressed/Makefile @@ -1,11 +1,23 @@ # -# arch/cris/arch-v10/boot/compressed/Makefile +# arch/cris/boot/compressed/Makefile # asflags-y += $(LINUXINCLUDE) ccflags-y += -O2 $(LINUXINCLUDE) -ldflags-y += -T $(srctree)/$(src)/decompress.lds -OBJECTS = $(obj)/head.o $(obj)/misc.o + +# asflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/mach \ +# -I$(srctree)/include/asm/arch +# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -O2 -I$(srctree)/include/asm/mach +# -I$(srctree)/include/asm/arch + +arch-$(CONFIG_ETRAX_ARCH_V10) = v10 +arch-$(CONFIG_ETRAX_ARCH_V32) = v32 + +ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds + +OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o +OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o +OBJECTS= $(OBJECTS-y) $(obj)/misc.o OBJCOPYFLAGS = -O binary --remove-section=.bss quiet_cmd_image = BUILD $@ @@ -24,4 +36,3 @@ $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE $(obj)/piggy.gz: $(obj)/../Image FORCE $(call if_changed,gzip) - diff --git a/arch/cris/arch-v32/boot/compressed/README b/arch/cris/boot/compressed/README similarity index 100% rename from arch/cris/arch-v32/boot/compressed/README rename to arch/cris/boot/compressed/README diff --git a/arch/cris/arch-v10/boot/compressed/decompress.lds b/arch/cris/boot/compressed/decompress_v10.lds similarity index 100% rename from arch/cris/arch-v10/boot/compressed/decompress.lds rename to arch/cris/boot/compressed/decompress_v10.lds diff --git a/arch/cris/arch-v32/boot/compressed/decompress.lds b/arch/cris/boot/compressed/decompress_v32.lds similarity index 100% rename from arch/cris/arch-v32/boot/compressed/decompress.lds rename to arch/cris/boot/compressed/decompress_v32.lds diff --git a/arch/cris/arch-v10/boot/compressed/head.S b/arch/cris/boot/compressed/head_v10.S similarity index 97% rename from arch/cris/arch-v10/boot/compressed/head.S rename to arch/cris/boot/compressed/head_v10.S index 0bb4dcc29254..9edb8ade7e1f 100644 --- a/arch/cris/arch-v10/boot/compressed/head.S +++ b/arch/cris/boot/compressed/head_v10.S @@ -30,7 +30,7 @@ beq dram_init_finished nop -#include "../../lib/dram_init.S" +#include "../../arch-v10/lib/dram_init.S" dram_init_finished: @@ -123,4 +123,4 @@ _cmd_line_magic: .dword 0 _cmd_line_addr: .dword 0 -#include "../../lib/hw_settings.S" +#include "../../arch-v10/lib/hw_settings.S" diff --git a/arch/cris/arch-v32/boot/compressed/head.S b/arch/cris/boot/compressed/head_v32.S similarity index 94% rename from arch/cris/arch-v32/boot/compressed/head.S rename to arch/cris/boot/compressed/head_v32.S index a4a65c5c669e..f483005f3d48 100644 --- a/arch/cris/arch-v32/boot/compressed/head.S +++ b/arch/cris/boot/compressed/head_v32.S @@ -17,7 +17,7 @@ .globl input_data .text -_start: +start: di ;; Start clocks for used blocks. @@ -29,9 +29,9 @@ _start: nop #if defined CONFIG_ETRAXFS -#include "../../mach-fs/dram_init.S" +#include "../../arch-v32/mach-fs/dram_init.S" #elif defined CONFIG_CRIS_MACH_ARTPEC3 -#include "../../mach-a3/dram_init.S" +#include "../../arch-v32/mach-a3/dram_init.S" #else #error Only ETRAXFS and ARTPEC-3 supported! #endif @@ -137,9 +137,9 @@ _boot_source: .dword 0 #if defined CONFIG_ETRAXFS -#include "../../mach-fs/hw_settings.S" +#include "../../arch-v32/mach-fs/hw_settings.S" #elif defined CONFIG_CRIS_MACH_ARTPEC3 -#include "../../mach-a3/hw_settings.S" +#include "../../arch-v32/mach-a3/hw_settings.S" #else #error Only ETRAXFS and ARTPEC-3 supported! #endif diff --git a/arch/cris/arch-v32/boot/compressed/misc.c b/arch/cris/boot/compressed/misc.c similarity index 65% rename from arch/cris/arch-v32/boot/compressed/misc.c rename to arch/cris/boot/compressed/misc.c index 3595e16e82bc..47bc190ba6d4 100644 --- a/arch/cris/arch-v32/boot/compressed/misc.c +++ b/arch/cris/boot/compressed/misc.c @@ -18,8 +18,9 @@ #define KERNEL_LOAD_ADR 0x40004000 - #include + +#ifdef CONFIG_ETRAX_ARCH_V32 #include #include #include @@ -27,6 +28,9 @@ #ifdef CONFIG_CRIS_MACH_ARTPEC3 #include #endif +#else +#include +#endif /* * gzip declarations @@ -35,12 +39,10 @@ #define OF(args) args #define STATIC static -void* memset(void* s, int c, size_t n); -void* memcpy(void* __dest, __const void* __src, - size_t __n); - -#define memzero(s, n) memset ((s), 0, (n)) +void *memset(void *s, int c, size_t n); +void *memcpy(void *__dest, __const void *__src, size_t __n); +#define memzero(s, n) memset((s), 0, (n)) typedef unsigned char uch; typedef unsigned short ush; @@ -68,27 +70,43 @@ static unsigned outcnt = 0; /* bytes in output buffer */ #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ #define RESERVED 0xC0 /* bit 6,7: reserved */ -#define get_byte() inbuf[inptr++] +#define get_byte() (inbuf[inptr++]) /* Diagnostic functions */ #ifdef DEBUG -# define Assert(cond,msg) {if(!(cond)) error(msg);} +# define Assert(cond, msg) do { \ + if (!(cond)) \ + error(msg); \ + } while (0) # 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 ;} +# define Tracev(x) do { \ + if (verbose) \ + fprintf x; \ + } while (0) +# define Tracevv(x) do { \ + if (verbose > 1) \ + fprintf x; \ + } while (0) +# define Tracec(c, x) do { \ + if (verbose && (c)) \ + fprintf x; \ + } while (0) +# define Tracecv(c, x) do { \ + if (verbose > 1 && (c)) \ + fprintf x; \ + } while (0) #else -# define Assert(cond,msg) +# define Assert(cond, msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) +# define Tracec(c, x) +# define Tracecv(c, x) #endif static void flush_window(void); static void error(char *m); +static void puts(const char *); extern char *input_data; /* lives in head.S */ @@ -96,10 +114,6 @@ static long bytes_out; static uch *output_data; static unsigned long output_ptr; -static void error(char *m); - -static void puts(const char *); - /* the "heap" is put directly after the BSS ends, at end */ extern int _end; @@ -110,8 +124,8 @@ static long free_mem_end_ptr; /* decompressor info and error messages to serial console */ -static inline void -serout(const char *s, reg_scope_instances regi_ser) +#ifdef CONFIG_ETRAX_ARCH_V32 +static inline void serout(const char *s, reg_scope_instances regi_ser) { reg_ser_rs_stat_din rs; reg_ser_rw_dout dout = {.data = *s}; @@ -123,23 +137,47 @@ serout(const char *s, reg_scope_instances regi_ser) REG_WR(ser, regi_ser, rw_dout, dout); } +#endif -static void -puts(const char *s) +static void puts(const char *s) { #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL while (*s) { #ifdef CONFIG_ETRAX_DEBUG_PORT0 +#ifdef CONFIG_ETRAX_ARCH_V32 serout(s, regi_ser0); +#else + while (!(*R_SERIAL0_STATUS & (1 << 5))) + ; + *R_SERIAL0_TR_DATA = *s++; +#endif #endif #ifdef CONFIG_ETRAX_DEBUG_PORT1 +#ifdef CONFIG_ETRAX_ARCH_V32 serout(s, regi_ser1); +#else + while (!(*R_SERIAL1_STATUS & (1 << 5))) + ; + *R_SERIAL1_TR_DATA = *s++; +#endif #endif #ifdef CONFIG_ETRAX_DEBUG_PORT2 +#ifdef CONFIG_ETRAX_ARCH_V32 serout(s, regi_ser2); +#else + while (!(*R_SERIAL2_STATUS & (1 << 5))) + ; + *R_SERIAL2_TR_DATA = *s++; +#endif #endif #ifdef CONFIG_ETRAX_DEBUG_PORT3 +#ifdef CONFIG_ETRAX_ARCH_V32 serout(s, regi_ser3); +#else + while (!(*R_SERIAL3_STATUS & (1 << 5))) + ; + *R_SERIAL3_TR_DATA = *s++; +#endif #endif *s++; } @@ -147,8 +185,7 @@ puts(const char *s) #endif } -void* -memset(void* s, int c, size_t n) +void *memset(void *s, int c, size_t n) { int i; char *ss = (char*)s; @@ -158,14 +195,13 @@ memset(void* s, int c, size_t n) return s; } -void* -memcpy(void* __dest, __const void* __src, - size_t __n) +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]; + for (i = 0; i < __n; i++) + d[i] = s[i]; return __dest; } @@ -175,43 +211,42 @@ memcpy(void* __dest, __const void* __src, * (Used for the decompressed data only.) */ -static void -flush_window() +static void flush_window(void) { - ulg c = crc; /* temporary variable */ - unsigned n; - uch *in, *out, ch; + 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; + in = window; + out = &output_data[output_ptr]; + for (n = 0; n < outcnt; n++) { + ch = *out = *in; + 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) +static void error(char *x) { - puts("\r\n\n"); + puts("\n\n"); puts(x); - puts("\r\n\n -- System halted\n"); + puts("\n\n -- System halted\n"); while(1); /* Halt */ } -void -setup_normal_output_buffer(void) +void setup_normal_output_buffer(void) { output_data = (char *)KERNEL_LOAD_ADR; } -static inline void -serial_setup(reg_scope_instances regi_ser) +#ifdef CONFIG_ETRAX_ARCH_V32 +static inline void serial_setup(reg_scope_instances regi_ser) { reg_ser_rw_xoff xoff; reg_ser_rw_tr_ctrl tr_ctrl; @@ -252,12 +287,16 @@ serial_setup(reg_scope_instances regi_ser) REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl); REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud); } +#endif -void -decompress_kernel(void) +void decompress_kernel(void) { char revision; + char compile_rev; +#ifdef CONFIG_ETRAX_ARCH_V32 + /* Need at least a CRISv32 to run. */ + compile_rev = 32; #if defined(CONFIG_ETRAX_DEBUG_PORT1) || \ defined(CONFIG_ETRAX_DEBUG_PORT2) || \ defined(CONFIG_ETRAX_DEBUG_PORT3) @@ -277,6 +316,7 @@ decompress_kernel(void) hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot); #endif + #ifdef CONFIG_ETRAX_DEBUG_PORT0 serial_setup(regi_ser0); #endif @@ -300,19 +340,52 @@ decompress_kernel(void) /* input_data is set in head.S */ inbuf = input_data; +#else /* CRISv10 */ + /* Need at least a crisv10 to run. */ + compile_rev = 10; + + /* input_data is set in head.S */ + inbuf = input_data; + +#ifdef CONFIG_ETRAX_DEBUG_PORT0 + *R_SERIAL0_XOFF = 0; + *R_SERIAL0_BAUD = 0x99; + *R_SERIAL0_TR_CTRL = 0x40; +#endif +#ifdef CONFIG_ETRAX_DEBUG_PORT1 + *R_SERIAL1_XOFF = 0; + *R_SERIAL1_BAUD = 0x99; + *R_SERIAL1_TR_CTRL = 0x40; +#endif +#ifdef CONFIG_ETRAX_DEBUG_PORT2 + *R_GEN_CONFIG = 0x08; + *R_SERIAL2_XOFF = 0; + *R_SERIAL2_BAUD = 0x99; + *R_SERIAL2_TR_CTRL = 0x40; +#endif +#ifdef CONFIG_ETRAX_DEBUG_PORT3 + *R_GEN_CONFIG = 0x100; + *R_SERIAL3_XOFF = 0; + *R_SERIAL3_BAUD = 0x99; + *R_SERIAL3_TR_CTRL = 0x40; +#endif +#endif setup_normal_output_buffer(); makecrc(); __asm__ volatile ("move $vr,%0" : "=rm" (revision)); - if (revision < 32) - { - puts("You need an ETRAX FS to run Linux 2.6/crisv32.\r\n"); + if (revision < compile_rev) { +#ifdef CONFIG_ETRAX_ARCH_V32 + puts("You need an ETRAX FS to run Linux 2.6/crisv32\n"); +#else + puts("You need an ETRAX 100LX to run linux 2.6\n"); +#endif while(1); } - puts("Uncompressing Linux...\r\n"); + puts("Uncompressing Linux...\n"); gunzip(); - puts("Done. Now booting the kernel.\r\n"); + puts("Done. Now booting the kernel\n"); } diff --git a/arch/cris/arch-v10/boot/rescue/Makefile b/arch/cris/boot/rescue/Makefile similarity index 63% rename from arch/cris/arch-v10/boot/rescue/Makefile rename to arch/cris/boot/rescue/Makefile index 82ab59b968e5..52bd0bd1dd22 100644 --- a/arch/cris/arch-v10/boot/rescue/Makefile +++ b/arch/cris/boot/rescue/Makefile @@ -2,16 +2,26 @@ # Makefile for rescue (bootstrap) code # -ccflags-y += -O2 $(LINUXINCLUDE) +# CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE) +# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/arch/mach/ \ +# -I$(srctree)/include/asm/arch +# asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch +# LD = gcc-cris -mlinux -march=v32 -nostdlib + asflags-y += $(LINUXINCLUDE) -ldflags-y += -T $(srctree)/$(src)/rescue.lds +ccflags-y += -O2 $(LINUXINCLUDE) +arch-$(CONFIG_ETRAX_ARCH_V10) = v10 +arch-$(CONFIG_ETRAX_ARCH_V32) = v32 + +ldflags-y += -T $(srctree)/$(src)/rescue_$(arch-y).lds OBJCOPYFLAGS = -O binary --remove-section=.bss -obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o -OBJECT := $(obj)/head.o +obj-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o +obj-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o +OBJECTS := $(obj-y) targets := rescue.o rescue.bin -$(obj)/rescue.o: $(OBJECT) FORCE +$(obj)/rescue.o: $(OBJECTS) FORCE $(call if_changed,ld) $(obj)/rescue.bin: $(obj)/rescue.o FORCE @@ -26,6 +36,7 @@ $(obj)/testrescue.bin: $(obj)/testrescue.o dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784 rm tr.bin tmp2423 testrescue_tmp.bin + $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o $(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin # Pad it to 784 bytes, that's what the rescue loader expects @@ -33,3 +44,4 @@ $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o cat ktr.bin tmp2423 >kimagerescue_tmp.bin dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784 rm ktr.bin tmp2423 kimagerescue_tmp.bin + diff --git a/arch/cris/arch-v10/boot/rescue/head.S b/arch/cris/boot/rescue/head_v10.S similarity index 99% rename from arch/cris/arch-v10/boot/rescue/head.S rename to arch/cris/boot/rescue/head_v10.S index fb503d1eeea4..2fafe247a25b 100644 --- a/arch/cris/arch-v10/boot/rescue/head.S +++ b/arch/cris/boot/rescue/head_v10.S @@ -155,7 +155,7 @@ no_newjump: #endif ;; We need to setup the bus registers before we start using the DRAM -#include "../../lib/dram_init.S" +#include "../../../arch-v10/lib/dram_init.S" ;; we now should go through the checksum-table and check the listed ;; partitions for errors. diff --git a/arch/cris/arch-v32/boot/rescue/head.S b/arch/cris/boot/rescue/head_v32.S similarity index 100% rename from arch/cris/arch-v32/boot/rescue/head.S rename to arch/cris/boot/rescue/head_v32.S diff --git a/arch/cris/arch-v10/boot/rescue/kimagerescue.S b/arch/cris/boot/rescue/kimagerescue.S similarity index 100% rename from arch/cris/arch-v10/boot/rescue/kimagerescue.S rename to arch/cris/boot/rescue/kimagerescue.S diff --git a/arch/cris/arch-v10/boot/rescue/rescue.lds b/arch/cris/boot/rescue/rescue_v10.lds similarity index 100% rename from arch/cris/arch-v10/boot/rescue/rescue.lds rename to arch/cris/boot/rescue/rescue_v10.lds diff --git a/arch/cris/arch-v32/boot/rescue/rescue.lds b/arch/cris/boot/rescue/rescue_v32.lds similarity index 100% rename from arch/cris/arch-v32/boot/rescue/rescue.lds rename to arch/cris/boot/rescue/rescue_v32.lds diff --git a/arch/cris/arch-v10/boot/rescue/testrescue.S b/arch/cris/boot/rescue/testrescue.S similarity index 100% rename from arch/cris/arch-v10/boot/rescue/testrescue.S rename to arch/cris/boot/rescue/testrescue.S diff --git a/arch/cris/arch-v10/boot/tools/build.c b/arch/cris/boot/tools/build.c similarity index 100% rename from arch/cris/arch-v10/boot/tools/build.c rename to arch/cris/boot/tools/build.c From d7bd15f67ebaaebc842a971e600c364a73b81b22 Mon Sep 17 00:00:00 2001 From: Jesper Nilsson Date: Tue, 21 Apr 2009 13:10:33 +0200 Subject: [PATCH 2/4] CRISv32: Remove obsolete vcs_hook.o from Makefile On Sun, Apr 19, 2009 at 10:01:50PM +0200, Robert P. J. Day wrote: > ./arch/cris/arch-v32/kernel/Makefile:obj-$(CONFIG_ETRAXFS_SIM) += vcs_hook.o > > there appears to be no definition of ETRAXFS_SIM anywhere. There hasn't been a vcs_hook.c file here for ages. Remove the line from the Makefile. Signed-off-by: Jesper Nilsson Reported-by: "Robert P. J. Day" --- arch/cris/arch-v32/kernel/Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/cris/arch-v32/kernel/Makefile b/arch/cris/arch-v32/kernel/Makefile index 993d987b0078..40358355d0cb 100644 --- a/arch/cris/arch-v32/kernel/Makefile +++ b/arch/cris/arch-v32/kernel/Makefile @@ -9,8 +9,6 @@ obj-y := entry.o traps.o irq.o debugport.o \ process.o ptrace.o setup.o signal.o traps.o time.o \ cache.o cacheflush.o -obj-$(CONFIG_ETRAXFS_SIM) += vcs_hook.o - obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o From 6d3d4be40357e3ea43b5c8837dec01d8f6cd1c67 Mon Sep 17 00:00:00 2001 From: Jesper Nilsson Date: Tue, 28 Apr 2009 16:42:39 +0200 Subject: [PATCH 3/4] CRIS: Wire up syscalls signalfd4 to writev. Adds sys_signalfd4, sys_eventfd2, sys_epoll_create1, sys_dup3, sys_pipe2, sys_inotify_init1, sys_preadv, sys_pwritev for both CRISv10 and CRISv32. --- arch/cris/arch-v10/kernel/entry.S | 14 +++++++++++--- arch/cris/arch-v32/kernel/entry.S | 8 ++++++++ arch/cris/include/asm/unistd.h | 12 ++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S index 72f5cd319b97..2c18d08cd913 100644 --- a/arch/cris/arch-v10/kernel/entry.S +++ b/arch/cris/arch-v10/kernel/entry.S @@ -536,10 +536,10 @@ multiple_interrupt: movem $r13, [$sp] push $r10 ; push orig_r10 clear.d [$sp=$sp-4] ; frametype == 0, normal frame - + move.d $sp, $r10 jsr do_multiple_IRQ - + jump ret_from_intr do_sigtrap: @@ -585,7 +585,7 @@ _ugdb_handle_breakpoint: pop $r0 ; Restore r0. ba do_sigtrap ; SIGTRAP the offending process. pop $dccr ; Restore dccr in delay slot. - + .global kernel_execve kernel_execve: move.d __NR_execve, $r9 @@ -929,6 +929,14 @@ sys_call_table: .long sys_fallocate .long sys_timerfd_settime /* 325 */ .long sys_timerfd_gettime + .long sys_signalfd4 + .long sys_eventfd2 + .long sys_epoll_create1 + .long sys_dup3 /* 330 */ + .long sys_pipe2 + .long sys_inotify_init1 + .long sys_preadv + .long sys_pwritev /* * NOTE!! This doesn't have to be exact - we just have diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S index 5e674c8f7c51..435b9671bd4b 100644 --- a/arch/cris/arch-v32/kernel/entry.S +++ b/arch/cris/arch-v32/kernel/entry.S @@ -852,6 +852,14 @@ sys_call_table: .long sys_fallocate .long sys_timerfd_settime /* 325 */ .long sys_timerfd_gettime + .long sys_signalfd4 + .long sys_eventfd2 + .long sys_epoll_create1 + .long sys_dup3 /* 330 */ + .long sys_pipe2 + .long sys_inotify_init1 + .long sys_preadv + .long sys_pwritev /* * NOTE!! This doesn't have to be exact - we just have diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h index 235d076379d5..c17079388bb9 100644 --- a/arch/cris/include/asm/unistd.h +++ b/arch/cris/include/asm/unistd.h @@ -281,7 +281,7 @@ #define __NR_mbind 274 #define __NR_get_mempolicy 275 #define __NR_set_mempolicy 276 -#define __NR_mq_open 277 +#define __NR_mq_open 277 #define __NR_mq_unlink (__NR_mq_open+1) #define __NR_mq_timedsend (__NR_mq_open+2) #define __NR_mq_timedreceive (__NR_mq_open+3) @@ -331,10 +331,18 @@ #define __NR_fallocate 324 #define __NR_timerfd_settime 325 #define __NR_timerfd_gettime 326 +#define __NR_signalfd4 327 +#define __NR_eventfd2 328 +#define __NR_epoll_create1 329 +#define __NR_dup3 330 +#define __NR_pipe2 331 +#define __NR_inotify_init1 332 +#define __NR_preadv 333 +#define __NR_pwritev 334 #ifdef __KERNEL__ -#define NR_syscalls 327 +#define NR_syscalls 335 #include From 999fb23ef868719b8bd55ee3f6b1f7a8fd8016af Mon Sep 17 00:00:00 2001 From: Jesper Nilsson Date: Tue, 28 Apr 2009 19:08:10 +0200 Subject: [PATCH 4/4] CRISv32: Fix typo compile error in ARTPEC-3 gpio driver. arch/cris/arch-v32/drivers/mach-a3/gpio.c: +spin_lock_irqrestore(&gpio_lock, flags); arch/cris/arch-v32/drivers/mach-a3/gpio.c: +spin_lock_irqrestore(&gpio_lock, flags); should that not be "spin_unlock_irqrestore()"? The code in question was inside an (most often) undefined ifdef. Reported-by: "Robert P. J. Day" Signed-off-by: Jesper Nilsson --- arch/cris/arch-v32/drivers/mach-a3/gpio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/cris/arch-v32/drivers/mach-a3/gpio.c b/arch/cris/arch-v32/drivers/mach-a3/gpio.c index 7a87bc0ae2e8..97357cfd17bb 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/gpio.c +++ b/arch/cris/arch-v32/drivers/mach-a3/gpio.c @@ -681,7 +681,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd, shadow |= ~readl(dir_oe[priv->minor]) | (arg & changeable_bits[priv->minor]); i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); - spin_lock_irqrestore(&gpio_lock, flags); + spin_unlock_irqrestore(&gpio_lock, flags); break; case IO_CLRBITS: spin_lock_irqsave(&gpio_lock, flags); @@ -690,7 +690,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd, shadow |= ~readl(dir_oe[priv->minor]) & ~(arg & changeable_bits[priv->minor]); i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); - spin_lock_irqrestore(&gpio_lock, flags); + spin_unlock_irqrestore(&gpio_lock, flags); break; case IO_HIGHALARM: /* Set alarm when bits with 1 in arg go high. */