diff options
| -rw-r--r-- | arch/cris/Makefile | 14 | ||||
| -rw-r--r-- | arch/cris/arch-v10/boot/compressed/README | 25 | ||||
| -rw-r--r-- | arch/cris/arch-v10/boot/compressed/misc.c | 246 | ||||
| -rw-r--r-- | arch/cris/arch-v10/kernel/entry.S | 14 | ||||
| -rw-r--r-- | arch/cris/arch-v32/boot/Makefile | 20 | ||||
| -rw-r--r-- | arch/cris/arch-v32/boot/compressed/Makefile | 26 | ||||
| -rw-r--r-- | arch/cris/arch-v32/boot/rescue/Makefile | 26 | ||||
| -rw-r--r-- | arch/cris/arch-v32/drivers/mach-a3/gpio.c | 4 | ||||
| -rw-r--r-- | arch/cris/arch-v32/kernel/Makefile | 2 | ||||
| -rw-r--r-- | arch/cris/arch-v32/kernel/entry.S | 8 | ||||
| -rw-r--r-- | arch/cris/boot/.gitignore (renamed from arch/cris/arch-v10/boot/.gitignore) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/Makefile (renamed from arch/cris/arch-v10/boot/Makefile) | 8 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/Makefile (renamed from arch/cris/arch-v10/boot/compressed/Makefile) | 19 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/README (renamed from arch/cris/arch-v32/boot/compressed/README) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/decompress_v10.lds (renamed from arch/cris/arch-v10/boot/compressed/decompress.lds) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/decompress_v32.lds (renamed from arch/cris/arch-v32/boot/compressed/decompress.lds) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/head_v10.S (renamed from arch/cris/arch-v10/boot/compressed/head.S) | 4 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/head_v32.S (renamed from arch/cris/arch-v32/boot/compressed/head.S) | 10 | ||||
| -rw-r--r-- | arch/cris/boot/compressed/misc.c (renamed from arch/cris/arch-v32/boot/compressed/misc.c) | 193 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/Makefile (renamed from arch/cris/arch-v10/boot/rescue/Makefile) | 22 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/head_v10.S (renamed from arch/cris/arch-v10/boot/rescue/head.S) | 2 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/head_v32.S (renamed from arch/cris/arch-v32/boot/rescue/head.S) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/kimagerescue.S (renamed from arch/cris/arch-v10/boot/rescue/kimagerescue.S) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/rescue_v10.lds (renamed from arch/cris/arch-v10/boot/rescue/rescue.lds) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/rescue_v32.lds (renamed from arch/cris/arch-v32/boot/rescue/rescue.lds) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/rescue/testrescue.S (renamed from arch/cris/arch-v10/boot/rescue/testrescue.S) | 0 | ||||
| -rw-r--r-- | arch/cris/boot/tools/build.c (renamed from arch/cris/arch-v10/boot/tools/build.c) | 0 | ||||
| -rw-r--r-- | arch/cris/include/asm/unistd.h | 12 |
28 files changed, 217 insertions, 438 deletions
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 | |||
| 70 | # cris object files path | 70 | # cris object files path |
| 71 | OBJ_ARCH = $(objtree)/arch/cris | 71 | OBJ_ARCH = $(objtree)/arch/cris |
| 72 | 72 | ||
| 73 | boot := arch/cris/$(SARCH)/boot | 73 | boot := arch/cris/boot |
| 74 | MACHINE := arch/cris/$(SARCH) | 74 | MACHINE := arch/cris/$(SARCH) |
| 75 | 75 | ||
| 76 | all: zImage | 76 | all: zImage |
| @@ -81,15 +81,15 @@ zImage Image: vmlinux | |||
| 81 | archprepare: | 81 | archprepare: |
| 82 | 82 | ||
| 83 | archclean: | 83 | archclean: |
| 84 | $(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \ | 84 | $(Q)if [ -e arch/cris/boot ]; then \ |
| 85 | $(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \ | 85 | $(MAKE) $(clean)=arch/cris/boot; \ |
| 86 | fi | 86 | fi |
| 87 | 87 | ||
| 88 | CLEAN_FILES += \ | 88 | CLEAN_FILES += \ |
| 89 | $(MACHINE)/boot/zImage \ | 89 | $(boot)/zImage \ |
| 90 | $(MACHINE)/boot/compressed/decompress.bin \ | 90 | $(boot)/compressed/decompress.bin \ |
| 91 | $(MACHINE)/boot/compressed/piggy.gz \ | 91 | $(boot)/compressed/piggy.gz \ |
| 92 | $(MACHINE)/boot/rescue/rescue.bin | 92 | $(boot)/rescue/rescue.bin |
| 93 | 93 | ||
| 94 | 94 | ||
| 95 | # MRPROPER_FILES += | 95 | # 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 @@ | |||
| 1 | Creation of the self-extracting compressed kernel image (vmlinuz) | ||
| 2 | ----------------------------------------------------------------- | ||
| 3 | $Id: README,v 1.1 2001/12/17 13:59:27 bjornw Exp $ | ||
| 4 | |||
| 5 | This can be slightly confusing because it's a process with many steps. | ||
| 6 | |||
| 7 | The kernel object built by the arch/etrax100/Makefile, vmlinux, is split | ||
| 8 | by that makefile into text and data binary files, vmlinux.text and | ||
| 9 | vmlinux.data. | ||
| 10 | |||
| 11 | Those files together with a ROM filesystem can be catted together and | ||
| 12 | burned into a flash or executed directly at the DRAM origin. | ||
| 13 | |||
| 14 | They can also be catted together and compressed with gzip, which is what | ||
| 15 | happens in this makefile. Together they make up piggy.img. | ||
| 16 | |||
| 17 | The decompressor is built into the file decompress.o. It is turned into | ||
| 18 | the binary file decompress.bin, which is catted together with piggy.img | ||
| 19 | into the file vmlinuz. It can be executed in an arbitrary place in flash. | ||
| 20 | |||
| 21 | Be careful - it assumes some things about free locations in DRAM. It | ||
| 22 | assumes the DRAM starts at 0x40000000 and that it is at least 8 MB, | ||
| 23 | so it puts its code at 0x40700000, and initial stack at 0x40800000. | ||
| 24 | |||
| 25 | -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 @@ | |||
| 1 | /* | ||
| 2 | * misc.c | ||
| 3 | * | ||
| 4 | * This is a collection of several routines from gzip-1.0.3 | ||
| 5 | * adapted for Linux. | ||
| 6 | * | ||
| 7 | * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 | ||
| 8 | * puts by Nick Holloway 1993, better puts by Martin Mares 1995 | ||
| 9 | * adaptation for Linux/CRIS Axis Communications AB, 1999 | ||
| 10 | * | ||
| 11 | */ | ||
| 12 | |||
| 13 | /* where the piggybacked kernel image expects itself to live. | ||
| 14 | * it is the same address we use when we network load an uncompressed | ||
| 15 | * image into DRAM, and it is the address the kernel is linked to live | ||
| 16 | * at by vmlinux.lds.S | ||
| 17 | */ | ||
| 18 | |||
| 19 | #define KERNEL_LOAD_ADR 0x40004000 | ||
| 20 | |||
| 21 | |||
| 22 | #include <linux/types.h> | ||
| 23 | #include <arch/svinto.h> | ||
| 24 | |||
| 25 | /* | ||
| 26 | * gzip declarations | ||
| 27 | */ | ||
| 28 | |||
| 29 | #define OF(args) args | ||
| 30 | #define STATIC static | ||
| 31 | |||
| 32 | void *memset(void *s, int c, size_t n); | ||
| 33 | void *memcpy(void *__dest, __const void *__src, size_t __n); | ||
| 34 | |||
| 35 | #define memzero(s, n) memset((s), 0, (n)) | ||
| 36 | |||
| 37 | typedef unsigned char uch; | ||
| 38 | typedef unsigned short ush; | ||
| 39 | typedef unsigned long ulg; | ||
| 40 | |||
| 41 | #define WSIZE 0x8000 /* Window size must be at least 32k, */ | ||
| 42 | /* and a power of two */ | ||
| 43 | |||
| 44 | static uch *inbuf; /* input buffer */ | ||
| 45 | static uch window[WSIZE]; /* Sliding window buffer */ | ||
| 46 | |||
| 47 | unsigned inptr = 0; /* index of next byte to be processed in inbuf | ||
| 48 | * After decompression it will contain the | ||
| 49 | * compressed size, and head.S will read it. | ||
| 50 | */ | ||
| 51 | |||
| 52 | static unsigned outcnt = 0; /* bytes in output buffer */ | ||
| 53 | |||
| 54 | /* gzip flag byte */ | ||
| 55 | #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ | ||
| 56 | #define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ | ||
| 57 | #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ | ||
| 58 | #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ | ||
| 59 | #define COMMENT 0x10 /* bit 4 set: file comment present */ | ||
| 60 | #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ | ||
| 61 | #define RESERVED 0xC0 /* bit 6,7: reserved */ | ||
| 62 | |||
| 63 | #define get_byte() (inbuf[inptr++]) | ||
| 64 | |||
| 65 | /* Diagnostic functions */ | ||
| 66 | #ifdef DEBUG | ||
| 67 | # define Assert(cond, msg) do { \ | ||
| 68 | if (!(cond)) \ | ||
| 69 | error(msg); \ | ||
| 70 | } while (0) | ||
| 71 | # define Trace(x) fprintf x | ||
| 72 | # define Tracev(x) do { \ | ||
| 73 | if (verbose) \ | ||
| 74 | fprintf x; \ | ||
| 75 | } while (0) | ||
| 76 | # define Tracevv(x) do { \ | ||
| 77 | if (verbose > 1) \ | ||
| 78 | fprintf x; \ | ||
| 79 | } while (0) | ||
| 80 | # define Tracec(c, x) do { \ | ||
| 81 | if (verbose && (c)) \ | ||
| 82 | fprintf x; \ | ||
| 83 | } while (0) | ||
| 84 | # define Tracecv(c, x) do { \ | ||
| 85 | if (verbose > 1 && (c)) \ | ||
| 86 | fprintf x; \ | ||
| 87 | } while (0) | ||
| 88 | #else | ||
| 89 | # define Assert(cond, msg) | ||
| 90 | # define Trace(x) | ||
| 91 | # define Tracev(x) | ||
| 92 | # define Tracevv(x) | ||
| 93 | # define Tracec(c, x) | ||
| 94 | # define Tracecv(c, x) | ||
| 95 | #endif | ||
| 96 | |||
| 97 | static void flush_window(void); | ||
| 98 | static void error(char *m); | ||
| 99 | |||
| 100 | extern char *input_data; /* lives in head.S */ | ||
| 101 | |||
| 102 | static long bytes_out = 0; | ||
| 103 | static uch *output_data; | ||
| 104 | static unsigned long output_ptr = 0; | ||
| 105 | static void puts(const char *); | ||
| 106 | |||
| 107 | /* the "heap" is put directly after the BSS ends, at end */ | ||
| 108 | |||
| 109 | extern int _end; | ||
| 110 | static long free_mem_ptr = (long)&_end; | ||
| 111 | static long free_mem_end_ptr; | ||
| 112 | |||
| 113 | #include "../../../../../lib/inflate.c" | ||
| 114 | |||
| 115 | /* decompressor info and error messages to serial console */ | ||
| 116 | |||
| 117 | static void | ||
| 118 | puts(const char *s) | ||
| 119 | { | ||
| 120 | #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL | ||
| 121 | while (*s) { | ||
| 122 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | ||
| 123 | while (!(*R_SERIAL0_STATUS & (1 << 5))) ; | ||
| 124 | *R_SERIAL0_TR_DATA = *s++; | ||
| 125 | #endif | ||
| 126 | #ifdef CONFIG_ETRAX_DEBUG_PORT1 | ||
| 127 | while (!(*R_SERIAL1_STATUS & (1 << 5))) ; | ||
| 128 | *R_SERIAL1_TR_DATA = *s++; | ||
| 129 | #endif | ||
| 130 | #ifdef CONFIG_ETRAX_DEBUG_PORT2 | ||
| 131 | while (!(*R_SERIAL2_STATUS & (1 << 5))) ; | ||
| 132 | *R_SERIAL2_TR_DATA = *s++; | ||
| 133 | #endif | ||
| 134 | #ifdef CONFIG_ETRAX_DEBUG_PORT3 | ||
| 135 | while (!(*R_SERIAL3_STATUS & (1 << 5))) ; | ||
| 136 | *R_SERIAL3_TR_DATA = *s++; | ||
| 137 | #endif | ||
| 138 | } | ||
| 139 | #endif | ||
| 140 | } | ||
| 141 | |||
| 142 | void *memset(void *s, int c, size_t n) | ||
| 143 | { | ||
| 144 | int i; | ||
| 145 | char *ss = (char *)s; | ||
| 146 | |||
| 147 | for (i = 0; i < n; i++) | ||
| 148 | ss[i] = c; | ||
| 149 | |||
| 150 | return s; | ||
| 151 | } | ||
| 152 | |||
| 153 | void *memcpy(void *__dest, __const void *__src, size_t __n) | ||
| 154 | { | ||
| 155 | int i; | ||
| 156 | char *d = (char *)__dest, *s = (char *)__src; | ||
| 157 | |||
| 158 | for (i = 0; i < __n; i++) | ||
| 159 | d[i] = s[i]; | ||
| 160 | |||
| 161 | return __dest; | ||
| 162 | } | ||
| 163 | |||
| 164 | /* =========================================================================== | ||
| 165 | * Write the output window window[0..outcnt-1] and update crc and bytes_out. | ||
| 166 | * (Used for the decompressed data only.) | ||
| 167 | */ | ||
| 168 | |||
| 169 | static void flush_window(void) | ||
| 170 | { | ||
| 171 | ulg c = crc; /* temporary variable */ | ||
| 172 | unsigned n; | ||
| 173 | uch *in, *out, ch; | ||
| 174 | |||
| 175 | in = window; | ||
| 176 | out = &output_data[output_ptr]; | ||
| 177 | for (n = 0; n < outcnt; n++) { | ||
| 178 | ch = *out = *in; | ||
| 179 | out++; | ||
| 180 | in++; | ||
| 181 | c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); | ||
| 182 | } | ||
| 183 | crc = c; | ||
| 184 | bytes_out += (ulg)outcnt; | ||
| 185 | output_ptr += (ulg)outcnt; | ||
| 186 | outcnt = 0; | ||
| 187 | } | ||
| 188 | |||
| 189 | static void error(char *x) | ||
| 190 | { | ||
| 191 | puts("\n\n"); | ||
| 192 | puts(x); | ||
| 193 | puts("\n\n -- System halted\n"); | ||
| 194 | |||
| 195 | while (1); /* Halt */ | ||
| 196 | } | ||
| 197 | |||
| 198 | void setup_normal_output_buffer(void) | ||
| 199 | { | ||
| 200 | output_data = (char *)KERNEL_LOAD_ADR; | ||
| 201 | } | ||
| 202 | |||
| 203 | void decompress_kernel(void) | ||
| 204 | { | ||
| 205 | char revision; | ||
| 206 | |||
| 207 | /* input_data is set in head.S */ | ||
| 208 | inbuf = input_data; | ||
| 209 | |||
| 210 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | ||
| 211 | *R_SERIAL0_XOFF = 0; | ||
| 212 | *R_SERIAL0_BAUD = 0x99; | ||
| 213 | *R_SERIAL0_TR_CTRL = 0x40; | ||
| 214 | #endif | ||
| 215 | #ifdef CONFIG_ETRAX_DEBUG_PORT1 | ||
| 216 | *R_SERIAL1_XOFF = 0; | ||
| 217 | *R_SERIAL1_BAUD = 0x99; | ||
| 218 | *R_SERIAL1_TR_CTRL = 0x40; | ||
| 219 | #endif | ||
| 220 | #ifdef CONFIG_ETRAX_DEBUG_PORT2 | ||
| 221 | *R_GEN_CONFIG = 0x08; | ||
| 222 | *R_SERIAL2_XOFF = 0; | ||
| 223 | *R_SERIAL2_BAUD = 0x99; | ||
| 224 | *R_SERIAL2_TR_CTRL = 0x40; | ||
| 225 | #endif | ||
| 226 | #ifdef CONFIG_ETRAX_DEBUG_PORT3 | ||
| 227 | *R_GEN_CONFIG = 0x100; | ||
| 228 | *R_SERIAL3_XOFF = 0; | ||
| 229 | *R_SERIAL3_BAUD = 0x99; | ||
| 230 | *R_SERIAL3_TR_CTRL = 0x40; | ||
| 231 | #endif | ||
| 232 | |||
| 233 | setup_normal_output_buffer(); | ||
| 234 | |||
| 235 | makecrc(); | ||
| 236 | |||
| 237 | __asm__ volatile ("move $vr,%0" : "=rm" (revision)); | ||
| 238 | if (revision < 10) { | ||
| 239 | puts("You need an ETRAX 100LX to run linux 2.6\n"); | ||
| 240 | while (1); | ||
| 241 | } | ||
| 242 | |||
| 243 | puts("Uncompressing Linux...\n"); | ||
| 244 | gunzip(); | ||
| 245 | puts("Done. Now booting the kernel.\n"); | ||
| 246 | } | ||
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: | |||
| 536 | movem $r13, [$sp] | 536 | movem $r13, [$sp] |
| 537 | push $r10 ; push orig_r10 | 537 | push $r10 ; push orig_r10 |
| 538 | clear.d [$sp=$sp-4] ; frametype == 0, normal frame | 538 | clear.d [$sp=$sp-4] ; frametype == 0, normal frame |
| 539 | 539 | ||
| 540 | move.d $sp, $r10 | 540 | move.d $sp, $r10 |
| 541 | jsr do_multiple_IRQ | 541 | jsr do_multiple_IRQ |
| 542 | 542 | ||
| 543 | jump ret_from_intr | 543 | jump ret_from_intr |
| 544 | 544 | ||
| 545 | do_sigtrap: | 545 | do_sigtrap: |
| @@ -585,7 +585,7 @@ _ugdb_handle_breakpoint: | |||
| 585 | pop $r0 ; Restore r0. | 585 | pop $r0 ; Restore r0. |
| 586 | ba do_sigtrap ; SIGTRAP the offending process. | 586 | ba do_sigtrap ; SIGTRAP the offending process. |
| 587 | pop $dccr ; Restore dccr in delay slot. | 587 | pop $dccr ; Restore dccr in delay slot. |
| 588 | 588 | ||
| 589 | .global kernel_execve | 589 | .global kernel_execve |
| 590 | kernel_execve: | 590 | kernel_execve: |
| 591 | move.d __NR_execve, $r9 | 591 | move.d __NR_execve, $r9 |
| @@ -929,6 +929,14 @@ sys_call_table: | |||
| 929 | .long sys_fallocate | 929 | .long sys_fallocate |
| 930 | .long sys_timerfd_settime /* 325 */ | 930 | .long sys_timerfd_settime /* 325 */ |
| 931 | .long sys_timerfd_gettime | 931 | .long sys_timerfd_gettime |
| 932 | .long sys_signalfd4 | ||
| 933 | .long sys_eventfd2 | ||
| 934 | .long sys_epoll_create1 | ||
| 935 | .long sys_dup3 /* 330 */ | ||
| 936 | .long sys_pipe2 | ||
| 937 | .long sys_inotify_init1 | ||
| 938 | .long sys_preadv | ||
| 939 | .long sys_pwritev | ||
| 932 | 940 | ||
| 933 | /* | 941 | /* |
| 934 | * NOTE!! This doesn't have to be exact - we just have | 942 | * NOTE!! This doesn't have to be exact - we just have |
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 @@ | |||
| 1 | # | ||
| 2 | # arch/cris/arch-v32/boot/Makefile | ||
| 3 | # | ||
| 4 | |||
| 5 | OBJCOPYFLAGS = -O binary -R .note -R .comment | ||
| 6 | |||
| 7 | subdir- := compressed rescue | ||
| 8 | targets := Image | ||
| 9 | |||
| 10 | $(obj)/Image: vmlinux FORCE | ||
| 11 | $(call if_changed,objcopy) | ||
| 12 | @echo ' Kernel: $@ is ready' | ||
| 13 | |||
| 14 | $(obj)/compressed/vmlinux: $(obj)/Image FORCE | ||
| 15 | $(Q)$(MAKE) $(build)=$(obj)/compressed $@ | ||
| 16 | $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin | ||
| 17 | |||
| 18 | $(obj)/zImage: $(obj)/compressed/vmlinux | ||
| 19 | @cp $< $@ | ||
| 20 | @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 @@ | |||
| 1 | # | ||
| 2 | # arch/cris/arch-v32/boot/compressed/Makefile | ||
| 3 | # | ||
| 4 | |||
| 5 | asflags-y += -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch | ||
| 6 | ccflags-y += -O2 -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch | ||
| 7 | ldflags-y += -T$(srctree)/$(src)/decompress.lds | ||
| 8 | OBJECTS = $(obj)/head.o $(obj)/misc.o | ||
| 9 | OBJCOPYFLAGS = -O binary --remove-section=.bss | ||
| 10 | |||
| 11 | quiet_cmd_image = BUILD $@ | ||
| 12 | cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ | ||
| 13 | |||
| 14 | targets := vmlinux piggy.gz decompress.o decompress.bin | ||
| 15 | |||
| 16 | $(obj)/decompress.o: $(OBJECTS) FORCE | ||
| 17 | $(call if_changed,ld) | ||
| 18 | |||
| 19 | $(obj)/decompress.bin: $(obj)/decompress.o FORCE | ||
| 20 | $(call if_changed,objcopy) | ||
| 21 | |||
| 22 | $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE | ||
| 23 | $(call if_changed,image) | ||
| 24 | |||
| 25 | $(obj)/piggy.gz: $(obj)/../Image FORCE | ||
| 26 | $(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 @@ | |||
| 1 | # | ||
| 2 | # Makefile for rescue (bootstrap) code | ||
| 3 | # | ||
| 4 | |||
| 5 | CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE) | ||
| 6 | ccflags-y += -O2 -I $(srctree)/include/asm/arch/mach/ \ | ||
| 7 | -I $(srctree)/include/asm/arch | ||
| 8 | asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch | ||
| 9 | LD = gcc-cris -mlinux -march=v32 -nostdlib | ||
| 10 | ldflags-y += -T $(srctree)/$(src)/rescue.lds | ||
| 11 | LDPOSTFLAGS = -lgcc | ||
| 12 | OBJCOPYFLAGS = -O binary --remove-section=.bss | ||
| 13 | obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o | ||
| 14 | OBJECT := $(obj)/head.o | ||
| 15 | |||
| 16 | targets := rescue.o rescue.bin | ||
| 17 | |||
| 18 | quiet_cmd_ldlibgcc = LD $@ | ||
| 19 | cmd_ldlibgcc = $(LD) $(LDFLAGS) $(filter-out FORCE,$^) $(LDPOSTFLAGS) -o $@ | ||
| 20 | |||
| 21 | $(obj)/rescue.o: $(OBJECTS) FORCE | ||
| 22 | $(call if_changed,ldlibgcc) | ||
| 23 | |||
| 24 | $(obj)/rescue.bin: $(obj)/rescue.o FORCE | ||
| 25 | $(call if_changed,objcopy) | ||
| 26 | cp -p $(obj)/rescue.bin $(objtree) | ||
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, | |||
| 681 | shadow |= ~readl(dir_oe[priv->minor]) | | 681 | shadow |= ~readl(dir_oe[priv->minor]) | |
| 682 | (arg & changeable_bits[priv->minor]); | 682 | (arg & changeable_bits[priv->minor]); |
| 683 | i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); | 683 | i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); |
| 684 | spin_lock_irqrestore(&gpio_lock, flags); | 684 | spin_unlock_irqrestore(&gpio_lock, flags); |
| 685 | break; | 685 | break; |
| 686 | case IO_CLRBITS: | 686 | case IO_CLRBITS: |
| 687 | spin_lock_irqsave(&gpio_lock, flags); | 687 | spin_lock_irqsave(&gpio_lock, flags); |
| @@ -690,7 +690,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd, | |||
| 690 | shadow |= ~readl(dir_oe[priv->minor]) & | 690 | shadow |= ~readl(dir_oe[priv->minor]) & |
| 691 | ~(arg & changeable_bits[priv->minor]); | 691 | ~(arg & changeable_bits[priv->minor]); |
| 692 | i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); | 692 | i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); |
| 693 | spin_lock_irqrestore(&gpio_lock, flags); | 693 | spin_unlock_irqrestore(&gpio_lock, flags); |
| 694 | break; | 694 | break; |
| 695 | case IO_HIGHALARM: | 695 | case IO_HIGHALARM: |
| 696 | /* Set alarm when bits with 1 in arg go high. */ | 696 | /* Set alarm when bits with 1 in arg go high. */ |
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 \ | |||
| 9 | process.o ptrace.o setup.o signal.o traps.o time.o \ | 9 | process.o ptrace.o setup.o signal.o traps.o time.o \ |
| 10 | cache.o cacheflush.o | 10 | cache.o cacheflush.o |
| 11 | 11 | ||
| 12 | obj-$(CONFIG_ETRAXFS_SIM) += vcs_hook.o | ||
| 13 | |||
| 14 | obj-$(CONFIG_SMP) += smp.o | 12 | obj-$(CONFIG_SMP) += smp.o |
| 15 | obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o | 13 | obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o |
| 16 | obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o | 14 | obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o |
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: | |||
| 852 | .long sys_fallocate | 852 | .long sys_fallocate |
| 853 | .long sys_timerfd_settime /* 325 */ | 853 | .long sys_timerfd_settime /* 325 */ |
| 854 | .long sys_timerfd_gettime | 854 | .long sys_timerfd_gettime |
| 855 | .long sys_signalfd4 | ||
| 856 | .long sys_eventfd2 | ||
| 857 | .long sys_epoll_create1 | ||
| 858 | .long sys_dup3 /* 330 */ | ||
| 859 | .long sys_pipe2 | ||
| 860 | .long sys_inotify_init1 | ||
| 861 | .long sys_preadv | ||
| 862 | .long sys_pwritev | ||
| 855 | 863 | ||
| 856 | /* | 864 | /* |
| 857 | * NOTE!! This doesn't have to be exact - we just have | 865 | * NOTE!! This doesn't have to be exact - we just have |
diff --git a/arch/cris/arch-v10/boot/.gitignore b/arch/cris/boot/.gitignore index 171a0853caf8..171a0853caf8 100644 --- a/arch/cris/arch-v10/boot/.gitignore +++ b/arch/cris/boot/.gitignore | |||
diff --git a/arch/cris/arch-v10/boot/Makefile b/arch/cris/boot/Makefile index 217203014433..144f3afa0119 100644 --- a/arch/cris/arch-v10/boot/Makefile +++ b/arch/cris/boot/Makefile | |||
| @@ -1,8 +1,12 @@ | |||
| 1 | # | 1 | # |
| 2 | # arch/cris/arch-v10/boot/Makefile | 2 | # arch/cris/boot/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | OBJCOPYFLAGS = -O binary --remove-section=.bss | 5 | objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment |
| 6 | objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss | ||
| 7 | |||
| 8 | OBJCOPYFLAGS = -O binary $(objcopyflags-y) | ||
| 9 | |||
| 6 | 10 | ||
| 7 | subdir- := compressed rescue | 11 | subdir- := compressed rescue |
| 8 | targets := Image | 12 | targets := Image |
diff --git a/arch/cris/arch-v10/boot/compressed/Makefile b/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 @@ | |||
| 1 | # | 1 | # |
| 2 | # arch/cris/arch-v10/boot/compressed/Makefile | 2 | # arch/cris/boot/compressed/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | asflags-y += $(LINUXINCLUDE) | 5 | asflags-y += $(LINUXINCLUDE) |
| 6 | ccflags-y += -O2 $(LINUXINCLUDE) | 6 | ccflags-y += -O2 $(LINUXINCLUDE) |
| 7 | ldflags-y += -T $(srctree)/$(src)/decompress.lds | 7 | |
| 8 | OBJECTS = $(obj)/head.o $(obj)/misc.o | 8 | # asflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/mach \ |
| 9 | # -I$(srctree)/include/asm/arch | ||
| 10 | # ccflags-$(CONFIG_ETRAX_ARCH_V32) += -O2 -I$(srctree)/include/asm/mach | ||
| 11 | # -I$(srctree)/include/asm/arch | ||
| 12 | |||
| 13 | arch-$(CONFIG_ETRAX_ARCH_V10) = v10 | ||
| 14 | arch-$(CONFIG_ETRAX_ARCH_V32) = v32 | ||
| 15 | |||
| 16 | ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds | ||
| 17 | |||
| 18 | OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o | ||
| 19 | OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o | ||
| 20 | OBJECTS= $(OBJECTS-y) $(obj)/misc.o | ||
| 9 | OBJCOPYFLAGS = -O binary --remove-section=.bss | 21 | OBJCOPYFLAGS = -O binary --remove-section=.bss |
| 10 | 22 | ||
| 11 | quiet_cmd_image = BUILD $@ | 23 | quiet_cmd_image = BUILD $@ |
| @@ -24,4 +36,3 @@ $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE | |||
| 24 | 36 | ||
| 25 | $(obj)/piggy.gz: $(obj)/../Image FORCE | 37 | $(obj)/piggy.gz: $(obj)/../Image FORCE |
| 26 | $(call if_changed,gzip) | 38 | $(call if_changed,gzip) |
| 27 | |||
diff --git a/arch/cris/arch-v32/boot/compressed/README b/arch/cris/boot/compressed/README index 182c5d75784b..182c5d75784b 100644 --- a/arch/cris/arch-v32/boot/compressed/README +++ b/arch/cris/boot/compressed/README | |||
diff --git a/arch/cris/arch-v10/boot/compressed/decompress.lds b/arch/cris/boot/compressed/decompress_v10.lds index e80f4594d543..e80f4594d543 100644 --- a/arch/cris/arch-v10/boot/compressed/decompress.lds +++ b/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 index 3c837feca3ac..3c837feca3ac 100644 --- a/arch/cris/arch-v32/boot/compressed/decompress.lds +++ b/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 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 @@ | |||
| 30 | beq dram_init_finished | 30 | beq dram_init_finished |
| 31 | nop | 31 | nop |
| 32 | 32 | ||
| 33 | #include "../../lib/dram_init.S" | 33 | #include "../../arch-v10/lib/dram_init.S" |
| 34 | 34 | ||
| 35 | dram_init_finished: | 35 | dram_init_finished: |
| 36 | 36 | ||
| @@ -123,4 +123,4 @@ _cmd_line_magic: | |||
| 123 | .dword 0 | 123 | .dword 0 |
| 124 | _cmd_line_addr: | 124 | _cmd_line_addr: |
| 125 | .dword 0 | 125 | .dword 0 |
| 126 | #include "../../lib/hw_settings.S" | 126 | #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 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 @@ | |||
| 17 | .globl input_data | 17 | .globl input_data |
| 18 | 18 | ||
| 19 | .text | 19 | .text |
| 20 | _start: | 20 | start: |
| 21 | di | 21 | di |
| 22 | 22 | ||
| 23 | ;; Start clocks for used blocks. | 23 | ;; Start clocks for used blocks. |
| @@ -29,9 +29,9 @@ _start: | |||
| 29 | nop | 29 | nop |
| 30 | 30 | ||
| 31 | #if defined CONFIG_ETRAXFS | 31 | #if defined CONFIG_ETRAXFS |
| 32 | #include "../../mach-fs/dram_init.S" | 32 | #include "../../arch-v32/mach-fs/dram_init.S" |
| 33 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | 33 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 |
| 34 | #include "../../mach-a3/dram_init.S" | 34 | #include "../../arch-v32/mach-a3/dram_init.S" |
| 35 | #else | 35 | #else |
| 36 | #error Only ETRAXFS and ARTPEC-3 supported! | 36 | #error Only ETRAXFS and ARTPEC-3 supported! |
| 37 | #endif | 37 | #endif |
| @@ -137,9 +137,9 @@ _boot_source: | |||
| 137 | .dword 0 | 137 | .dword 0 |
| 138 | 138 | ||
| 139 | #if defined CONFIG_ETRAXFS | 139 | #if defined CONFIG_ETRAXFS |
| 140 | #include "../../mach-fs/hw_settings.S" | 140 | #include "../../arch-v32/mach-fs/hw_settings.S" |
| 141 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | 141 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 |
| 142 | #include "../../mach-a3/hw_settings.S" | 142 | #include "../../arch-v32/mach-a3/hw_settings.S" |
| 143 | #else | 143 | #else |
| 144 | #error Only ETRAXFS and ARTPEC-3 supported! | 144 | #error Only ETRAXFS and ARTPEC-3 supported! |
| 145 | #endif | 145 | #endif |
diff --git a/arch/cris/arch-v32/boot/compressed/misc.c b/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 @@ | |||
| 18 | 18 | ||
| 19 | #define KERNEL_LOAD_ADR 0x40004000 | 19 | #define KERNEL_LOAD_ADR 0x40004000 |
| 20 | 20 | ||
| 21 | |||
| 22 | #include <linux/types.h> | 21 | #include <linux/types.h> |
| 22 | |||
| 23 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 23 | #include <hwregs/reg_rdwr.h> | 24 | #include <hwregs/reg_rdwr.h> |
| 24 | #include <hwregs/reg_map.h> | 25 | #include <hwregs/reg_map.h> |
| 25 | #include <hwregs/ser_defs.h> | 26 | #include <hwregs/ser_defs.h> |
| @@ -27,6 +28,9 @@ | |||
| 27 | #ifdef CONFIG_CRIS_MACH_ARTPEC3 | 28 | #ifdef CONFIG_CRIS_MACH_ARTPEC3 |
| 28 | #include <hwregs/clkgen_defs.h> | 29 | #include <hwregs/clkgen_defs.h> |
| 29 | #endif | 30 | #endif |
| 31 | #else | ||
| 32 | #include <arch/svinto.h> | ||
| 33 | #endif | ||
| 30 | 34 | ||
| 31 | /* | 35 | /* |
| 32 | * gzip declarations | 36 | * gzip declarations |
| @@ -35,12 +39,10 @@ | |||
| 35 | #define OF(args) args | 39 | #define OF(args) args |
| 36 | #define STATIC static | 40 | #define STATIC static |
| 37 | 41 | ||
| 38 | void* memset(void* s, int c, size_t n); | 42 | void *memset(void *s, int c, size_t n); |
| 39 | void* memcpy(void* __dest, __const void* __src, | 43 | void *memcpy(void *__dest, __const void *__src, size_t __n); |
| 40 | size_t __n); | ||
| 41 | |||
| 42 | #define memzero(s, n) memset ((s), 0, (n)) | ||
| 43 | 44 | ||
| 45 | #define memzero(s, n) memset((s), 0, (n)) | ||
| 44 | 46 | ||
| 45 | typedef unsigned char uch; | 47 | typedef unsigned char uch; |
| 46 | typedef unsigned short ush; | 48 | typedef unsigned short ush; |
| @@ -68,27 +70,43 @@ static unsigned outcnt = 0; /* bytes in output buffer */ | |||
| 68 | #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ | 70 | #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ |
| 69 | #define RESERVED 0xC0 /* bit 6,7: reserved */ | 71 | #define RESERVED 0xC0 /* bit 6,7: reserved */ |
| 70 | 72 | ||
| 71 | #define get_byte() inbuf[inptr++] | 73 | #define get_byte() (inbuf[inptr++]) |
| 72 | 74 | ||
| 73 | /* Diagnostic functions */ | 75 | /* Diagnostic functions */ |
| 74 | #ifdef DEBUG | 76 | #ifdef DEBUG |
| 75 | # define Assert(cond,msg) {if(!(cond)) error(msg);} | 77 | # define Assert(cond, msg) do { \ |
| 78 | if (!(cond)) \ | ||
| 79 | error(msg); \ | ||
| 80 | } while (0) | ||
| 76 | # define Trace(x) fprintf x | 81 | # define Trace(x) fprintf x |
| 77 | # define Tracev(x) {if (verbose) fprintf x ;} | 82 | # define Tracev(x) do { \ |
| 78 | # define Tracevv(x) {if (verbose>1) fprintf x ;} | 83 | if (verbose) \ |
| 79 | # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} | 84 | fprintf x; \ |
| 80 | # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} | 85 | } while (0) |
| 86 | # define Tracevv(x) do { \ | ||
| 87 | if (verbose > 1) \ | ||
| 88 | fprintf x; \ | ||
| 89 | } while (0) | ||
| 90 | # define Tracec(c, x) do { \ | ||
| 91 | if (verbose && (c)) \ | ||
| 92 | fprintf x; \ | ||
| 93 | } while (0) | ||
| 94 | # define Tracecv(c, x) do { \ | ||
| 95 | if (verbose > 1 && (c)) \ | ||
| 96 | fprintf x; \ | ||
| 97 | } while (0) | ||
| 81 | #else | 98 | #else |
| 82 | # define Assert(cond,msg) | 99 | # define Assert(cond, msg) |
| 83 | # define Trace(x) | 100 | # define Trace(x) |
| 84 | # define Tracev(x) | 101 | # define Tracev(x) |
| 85 | # define Tracevv(x) | 102 | # define Tracevv(x) |
| 86 | # define Tracec(c,x) | 103 | # define Tracec(c, x) |
| 87 | # define Tracecv(c,x) | 104 | # define Tracecv(c, x) |
| 88 | #endif | 105 | #endif |
| 89 | 106 | ||
| 90 | static void flush_window(void); | 107 | static void flush_window(void); |
| 91 | static void error(char *m); | 108 | static void error(char *m); |
| 109 | static void puts(const char *); | ||
| 92 | 110 | ||
| 93 | extern char *input_data; /* lives in head.S */ | 111 | extern char *input_data; /* lives in head.S */ |
| 94 | 112 | ||
| @@ -96,10 +114,6 @@ static long bytes_out; | |||
| 96 | static uch *output_data; | 114 | static uch *output_data; |
| 97 | static unsigned long output_ptr; | 115 | static unsigned long output_ptr; |
| 98 | 116 | ||
| 99 | static void error(char *m); | ||
| 100 | |||
| 101 | static void puts(const char *); | ||
| 102 | |||
| 103 | /* the "heap" is put directly after the BSS ends, at end */ | 117 | /* the "heap" is put directly after the BSS ends, at end */ |
| 104 | 118 | ||
| 105 | extern int _end; | 119 | extern int _end; |
| @@ -110,8 +124,8 @@ static long free_mem_end_ptr; | |||
| 110 | 124 | ||
| 111 | /* decompressor info and error messages to serial console */ | 125 | /* decompressor info and error messages to serial console */ |
| 112 | 126 | ||
| 113 | static inline void | 127 | #ifdef CONFIG_ETRAX_ARCH_V32 |
| 114 | serout(const char *s, reg_scope_instances regi_ser) | 128 | static inline void serout(const char *s, reg_scope_instances regi_ser) |
| 115 | { | 129 | { |
| 116 | reg_ser_rs_stat_din rs; | 130 | reg_ser_rs_stat_din rs; |
| 117 | reg_ser_rw_dout dout = {.data = *s}; | 131 | reg_ser_rw_dout dout = {.data = *s}; |
| @@ -123,23 +137,47 @@ serout(const char *s, reg_scope_instances regi_ser) | |||
| 123 | 137 | ||
| 124 | REG_WR(ser, regi_ser, rw_dout, dout); | 138 | REG_WR(ser, regi_ser, rw_dout, dout); |
| 125 | } | 139 | } |
| 140 | #endif | ||
| 126 | 141 | ||
| 127 | static void | 142 | static void puts(const char *s) |
| 128 | puts(const char *s) | ||
| 129 | { | 143 | { |
| 130 | #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL | 144 | #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL |
| 131 | while (*s) { | 145 | while (*s) { |
| 132 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | 146 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 |
| 147 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 133 | serout(s, regi_ser0); | 148 | serout(s, regi_ser0); |
| 149 | #else | ||
| 150 | while (!(*R_SERIAL0_STATUS & (1 << 5))) | ||
| 151 | ; | ||
| 152 | *R_SERIAL0_TR_DATA = *s++; | ||
| 153 | #endif | ||
| 134 | #endif | 154 | #endif |
| 135 | #ifdef CONFIG_ETRAX_DEBUG_PORT1 | 155 | #ifdef CONFIG_ETRAX_DEBUG_PORT1 |
| 156 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 136 | serout(s, regi_ser1); | 157 | serout(s, regi_ser1); |
| 158 | #else | ||
| 159 | while (!(*R_SERIAL1_STATUS & (1 << 5))) | ||
| 160 | ; | ||
| 161 | *R_SERIAL1_TR_DATA = *s++; | ||
| 162 | #endif | ||
| 137 | #endif | 163 | #endif |
| 138 | #ifdef CONFIG_ETRAX_DEBUG_PORT2 | 164 | #ifdef CONFIG_ETRAX_DEBUG_PORT2 |
| 165 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 139 | serout(s, regi_ser2); | 166 | serout(s, regi_ser2); |
| 167 | #else | ||
| 168 | while (!(*R_SERIAL2_STATUS & (1 << 5))) | ||
| 169 | ; | ||
| 170 | *R_SERIAL2_TR_DATA = *s++; | ||
| 171 | #endif | ||
| 140 | #endif | 172 | #endif |
| 141 | #ifdef CONFIG_ETRAX_DEBUG_PORT3 | 173 | #ifdef CONFIG_ETRAX_DEBUG_PORT3 |
| 174 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 142 | serout(s, regi_ser3); | 175 | serout(s, regi_ser3); |
| 176 | #else | ||
| 177 | while (!(*R_SERIAL3_STATUS & (1 << 5))) | ||
| 178 | ; | ||
| 179 | *R_SERIAL3_TR_DATA = *s++; | ||
| 180 | #endif | ||
| 143 | #endif | 181 | #endif |
| 144 | *s++; | 182 | *s++; |
| 145 | } | 183 | } |
| @@ -147,8 +185,7 @@ puts(const char *s) | |||
| 147 | #endif | 185 | #endif |
| 148 | } | 186 | } |
| 149 | 187 | ||
| 150 | void* | 188 | void *memset(void *s, int c, size_t n) |
| 151 | memset(void* s, int c, size_t n) | ||
| 152 | { | 189 | { |
| 153 | int i; | 190 | int i; |
| 154 | char *ss = (char*)s; | 191 | char *ss = (char*)s; |
| @@ -158,14 +195,13 @@ memset(void* s, int c, size_t n) | |||
| 158 | return s; | 195 | return s; |
| 159 | } | 196 | } |
| 160 | 197 | ||
| 161 | void* | 198 | void *memcpy(void *__dest, __const void *__src, size_t __n) |
| 162 | memcpy(void* __dest, __const void* __src, | ||
| 163 | size_t __n) | ||
| 164 | { | 199 | { |
| 165 | int i; | 200 | int i; |
| 166 | char *d = (char *)__dest, *s = (char *)__src; | 201 | char *d = (char *)__dest, *s = (char *)__src; |
| 167 | 202 | ||
| 168 | for (i=0;i<__n;i++) d[i] = s[i]; | 203 | for (i = 0; i < __n; i++) |
| 204 | d[i] = s[i]; | ||
| 169 | 205 | ||
| 170 | return __dest; | 206 | return __dest; |
| 171 | } | 207 | } |
| @@ -175,43 +211,42 @@ memcpy(void* __dest, __const void* __src, | |||
| 175 | * (Used for the decompressed data only.) | 211 | * (Used for the decompressed data only.) |
| 176 | */ | 212 | */ |
| 177 | 213 | ||
| 178 | static void | 214 | static void flush_window(void) |
| 179 | flush_window() | ||
| 180 | { | 215 | { |
| 181 | ulg c = crc; /* temporary variable */ | 216 | ulg c = crc; /* temporary variable */ |
| 182 | unsigned n; | 217 | unsigned n; |
| 183 | uch *in, *out, ch; | 218 | uch *in, *out, ch; |
| 184 | 219 | ||
| 185 | in = window; | 220 | in = window; |
| 186 | out = &output_data[output_ptr]; | 221 | out = &output_data[output_ptr]; |
| 187 | for (n = 0; n < outcnt; n++) { | 222 | for (n = 0; n < outcnt; n++) { |
| 188 | ch = *out++ = *in++; | 223 | ch = *out = *in; |
| 189 | c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); | 224 | out++; |
| 190 | } | 225 | in++; |
| 191 | crc = c; | 226 | c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); |
| 192 | bytes_out += (ulg)outcnt; | 227 | } |
| 193 | output_ptr += (ulg)outcnt; | 228 | crc = c; |
| 194 | outcnt = 0; | 229 | bytes_out += (ulg)outcnt; |
| 230 | output_ptr += (ulg)outcnt; | ||
| 231 | outcnt = 0; | ||
| 195 | } | 232 | } |
| 196 | 233 | ||
| 197 | static void | 234 | static void error(char *x) |
| 198 | error(char *x) | ||
| 199 | { | 235 | { |
| 200 | puts("\r\n\n"); | 236 | puts("\n\n"); |
| 201 | puts(x); | 237 | puts(x); |
| 202 | puts("\r\n\n -- System halted\n"); | 238 | puts("\n\n -- System halted\n"); |
| 203 | 239 | ||
| 204 | while(1); /* Halt */ | 240 | while(1); /* Halt */ |
| 205 | } | 241 | } |
| 206 | 242 | ||
| 207 | void | 243 | void setup_normal_output_buffer(void) |
| 208 | setup_normal_output_buffer(void) | ||
| 209 | { | 244 | { |
| 210 | output_data = (char *)KERNEL_LOAD_ADR; | 245 | output_data = (char *)KERNEL_LOAD_ADR; |
| 211 | } | 246 | } |
| 212 | 247 | ||
| 213 | static inline void | 248 | #ifdef CONFIG_ETRAX_ARCH_V32 |
| 214 | serial_setup(reg_scope_instances regi_ser) | 249 | static inline void serial_setup(reg_scope_instances regi_ser) |
| 215 | { | 250 | { |
| 216 | reg_ser_rw_xoff xoff; | 251 | reg_ser_rw_xoff xoff; |
| 217 | reg_ser_rw_tr_ctrl tr_ctrl; | 252 | reg_ser_rw_tr_ctrl tr_ctrl; |
| @@ -252,12 +287,16 @@ serial_setup(reg_scope_instances regi_ser) | |||
| 252 | REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl); | 287 | REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl); |
| 253 | REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud); | 288 | REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud); |
| 254 | } | 289 | } |
| 290 | #endif | ||
| 255 | 291 | ||
| 256 | void | 292 | void decompress_kernel(void) |
| 257 | decompress_kernel(void) | ||
| 258 | { | 293 | { |
| 259 | char revision; | 294 | char revision; |
| 295 | char compile_rev; | ||
| 260 | 296 | ||
| 297 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 298 | /* Need at least a CRISv32 to run. */ | ||
| 299 | compile_rev = 32; | ||
| 261 | #if defined(CONFIG_ETRAX_DEBUG_PORT1) || \ | 300 | #if defined(CONFIG_ETRAX_DEBUG_PORT1) || \ |
| 262 | defined(CONFIG_ETRAX_DEBUG_PORT2) || \ | 301 | defined(CONFIG_ETRAX_DEBUG_PORT2) || \ |
| 263 | defined(CONFIG_ETRAX_DEBUG_PORT3) | 302 | defined(CONFIG_ETRAX_DEBUG_PORT3) |
| @@ -277,6 +316,7 @@ decompress_kernel(void) | |||
| 277 | hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot); | 316 | hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot); |
| 278 | #endif | 317 | #endif |
| 279 | 318 | ||
| 319 | |||
| 280 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | 320 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 |
| 281 | serial_setup(regi_ser0); | 321 | serial_setup(regi_ser0); |
| 282 | #endif | 322 | #endif |
| @@ -300,19 +340,52 @@ decompress_kernel(void) | |||
| 300 | 340 | ||
| 301 | /* input_data is set in head.S */ | 341 | /* input_data is set in head.S */ |
| 302 | inbuf = input_data; | 342 | inbuf = input_data; |
| 343 | #else /* CRISv10 */ | ||
| 344 | /* Need at least a crisv10 to run. */ | ||
| 345 | compile_rev = 10; | ||
| 346 | |||
| 347 | /* input_data is set in head.S */ | ||
| 348 | inbuf = input_data; | ||
| 349 | |||
| 350 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | ||
| 351 | *R_SERIAL0_XOFF = 0; | ||
| 352 | *R_SERIAL0_BAUD = 0x99; | ||
| 353 | *R_SERIAL0_TR_CTRL = 0x40; | ||
| 354 | #endif | ||
| 355 | #ifdef CONFIG_ETRAX_DEBUG_PORT1 | ||
| 356 | *R_SERIAL1_XOFF = 0; | ||
| 357 | *R_SERIAL1_BAUD = 0x99; | ||
| 358 | *R_SERIAL1_TR_CTRL = 0x40; | ||
| 359 | #endif | ||
| 360 | #ifdef CONFIG_ETRAX_DEBUG_PORT2 | ||
| 361 | *R_GEN_CONFIG = 0x08; | ||
| 362 | *R_SERIAL2_XOFF = 0; | ||
| 363 | *R_SERIAL2_BAUD = 0x99; | ||
| 364 | *R_SERIAL2_TR_CTRL = 0x40; | ||
| 365 | #endif | ||
| 366 | #ifdef CONFIG_ETRAX_DEBUG_PORT3 | ||
| 367 | *R_GEN_CONFIG = 0x100; | ||
| 368 | *R_SERIAL3_XOFF = 0; | ||
| 369 | *R_SERIAL3_BAUD = 0x99; | ||
| 370 | *R_SERIAL3_TR_CTRL = 0x40; | ||
| 371 | #endif | ||
| 372 | #endif | ||
| 303 | 373 | ||
| 304 | setup_normal_output_buffer(); | 374 | setup_normal_output_buffer(); |
| 305 | 375 | ||
| 306 | makecrc(); | 376 | makecrc(); |
| 307 | 377 | ||
| 308 | __asm__ volatile ("move $vr,%0" : "=rm" (revision)); | 378 | __asm__ volatile ("move $vr,%0" : "=rm" (revision)); |
| 309 | if (revision < 32) | 379 | if (revision < compile_rev) { |
| 310 | { | 380 | #ifdef CONFIG_ETRAX_ARCH_V32 |
| 311 | puts("You need an ETRAX FS to run Linux 2.6/crisv32.\r\n"); | 381 | puts("You need an ETRAX FS to run Linux 2.6/crisv32\n"); |
| 382 | #else | ||
| 383 | puts("You need an ETRAX 100LX to run linux 2.6\n"); | ||
| 384 | #endif | ||
| 312 | while(1); | 385 | while(1); |
| 313 | } | 386 | } |
| 314 | 387 | ||
| 315 | puts("Uncompressing Linux...\r\n"); | 388 | puts("Uncompressing Linux...\n"); |
| 316 | gunzip(); | 389 | gunzip(); |
| 317 | puts("Done. Now booting the kernel.\r\n"); | 390 | puts("Done. Now booting the kernel\n"); |
| 318 | } | 391 | } |
diff --git a/arch/cris/arch-v10/boot/rescue/Makefile b/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 @@ | |||
| 2 | # Makefile for rescue (bootstrap) code | 2 | # Makefile for rescue (bootstrap) code |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | ccflags-y += -O2 $(LINUXINCLUDE) | 5 | # CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE) |
| 6 | # ccflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/arch/mach/ \ | ||
| 7 | # -I$(srctree)/include/asm/arch | ||
| 8 | # asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch | ||
| 9 | # LD = gcc-cris -mlinux -march=v32 -nostdlib | ||
| 10 | |||
| 6 | asflags-y += $(LINUXINCLUDE) | 11 | asflags-y += $(LINUXINCLUDE) |
| 7 | ldflags-y += -T $(srctree)/$(src)/rescue.lds | 12 | ccflags-y += -O2 $(LINUXINCLUDE) |
| 13 | arch-$(CONFIG_ETRAX_ARCH_V10) = v10 | ||
| 14 | arch-$(CONFIG_ETRAX_ARCH_V32) = v32 | ||
| 15 | |||
| 16 | ldflags-y += -T $(srctree)/$(src)/rescue_$(arch-y).lds | ||
| 8 | OBJCOPYFLAGS = -O binary --remove-section=.bss | 17 | OBJCOPYFLAGS = -O binary --remove-section=.bss |
| 9 | obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o | 18 | obj-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o |
| 10 | OBJECT := $(obj)/head.o | 19 | obj-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o |
| 20 | OBJECTS := $(obj-y) | ||
| 11 | 21 | ||
| 12 | targets := rescue.o rescue.bin | 22 | targets := rescue.o rescue.bin |
| 13 | 23 | ||
| 14 | $(obj)/rescue.o: $(OBJECT) FORCE | 24 | $(obj)/rescue.o: $(OBJECTS) FORCE |
| 15 | $(call if_changed,ld) | 25 | $(call if_changed,ld) |
| 16 | 26 | ||
| 17 | $(obj)/rescue.bin: $(obj)/rescue.o FORCE | 27 | $(obj)/rescue.bin: $(obj)/rescue.o FORCE |
| @@ -26,6 +36,7 @@ $(obj)/testrescue.bin: $(obj)/testrescue.o | |||
| 26 | dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784 | 36 | dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784 |
| 27 | rm tr.bin tmp2423 testrescue_tmp.bin | 37 | rm tr.bin tmp2423 testrescue_tmp.bin |
| 28 | 38 | ||
| 39 | |||
| 29 | $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o | 40 | $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o |
| 30 | $(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin | 41 | $(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin |
| 31 | # Pad it to 784 bytes, that's what the rescue loader expects | 42 | # Pad it to 784 bytes, that's what the rescue loader expects |
| @@ -33,3 +44,4 @@ $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o | |||
| 33 | cat ktr.bin tmp2423 >kimagerescue_tmp.bin | 44 | cat ktr.bin tmp2423 >kimagerescue_tmp.bin |
| 34 | dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784 | 45 | dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784 |
| 35 | rm ktr.bin tmp2423 kimagerescue_tmp.bin | 46 | rm ktr.bin tmp2423 kimagerescue_tmp.bin |
| 47 | |||
diff --git a/arch/cris/arch-v10/boot/rescue/head.S b/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: | |||
| 155 | #endif | 155 | #endif |
| 156 | 156 | ||
| 157 | ;; We need to setup the bus registers before we start using the DRAM | 157 | ;; We need to setup the bus registers before we start using the DRAM |
| 158 | #include "../../lib/dram_init.S" | 158 | #include "../../../arch-v10/lib/dram_init.S" |
| 159 | 159 | ||
| 160 | ;; we now should go through the checksum-table and check the listed | 160 | ;; we now should go through the checksum-table and check the listed |
| 161 | ;; partitions for errors. | 161 | ;; partitions for errors. |
diff --git a/arch/cris/arch-v32/boot/rescue/head.S b/arch/cris/boot/rescue/head_v32.S index 5f846b7700a3..5f846b7700a3 100644 --- a/arch/cris/arch-v32/boot/rescue/head.S +++ b/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 index 6f7b3e61260b..6f7b3e61260b 100644 --- a/arch/cris/arch-v10/boot/rescue/kimagerescue.S +++ b/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 index 0b52a9490db6..0b52a9490db6 100644 --- a/arch/cris/arch-v10/boot/rescue/rescue.lds +++ b/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 index 8ac646bc1a2b..8ac646bc1a2b 100644 --- a/arch/cris/arch-v32/boot/rescue/rescue.lds +++ b/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 index fc7ec674eca5..fc7ec674eca5 100644 --- a/arch/cris/arch-v10/boot/rescue/testrescue.S +++ b/arch/cris/boot/rescue/testrescue.S | |||
diff --git a/arch/cris/arch-v10/boot/tools/build.c b/arch/cris/boot/tools/build.c index c8adef364160..c8adef364160 100644 --- a/arch/cris/arch-v10/boot/tools/build.c +++ b/arch/cris/boot/tools/build.c | |||
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 @@ | |||
| 281 | #define __NR_mbind 274 | 281 | #define __NR_mbind 274 |
| 282 | #define __NR_get_mempolicy 275 | 282 | #define __NR_get_mempolicy 275 |
| 283 | #define __NR_set_mempolicy 276 | 283 | #define __NR_set_mempolicy 276 |
| 284 | #define __NR_mq_open 277 | 284 | #define __NR_mq_open 277 |
| 285 | #define __NR_mq_unlink (__NR_mq_open+1) | 285 | #define __NR_mq_unlink (__NR_mq_open+1) |
| 286 | #define __NR_mq_timedsend (__NR_mq_open+2) | 286 | #define __NR_mq_timedsend (__NR_mq_open+2) |
| 287 | #define __NR_mq_timedreceive (__NR_mq_open+3) | 287 | #define __NR_mq_timedreceive (__NR_mq_open+3) |
| @@ -331,10 +331,18 @@ | |||
| 331 | #define __NR_fallocate 324 | 331 | #define __NR_fallocate 324 |
| 332 | #define __NR_timerfd_settime 325 | 332 | #define __NR_timerfd_settime 325 |
| 333 | #define __NR_timerfd_gettime 326 | 333 | #define __NR_timerfd_gettime 326 |
| 334 | #define __NR_signalfd4 327 | ||
| 335 | #define __NR_eventfd2 328 | ||
| 336 | #define __NR_epoll_create1 329 | ||
| 337 | #define __NR_dup3 330 | ||
| 338 | #define __NR_pipe2 331 | ||
| 339 | #define __NR_inotify_init1 332 | ||
| 340 | #define __NR_preadv 333 | ||
| 341 | #define __NR_pwritev 334 | ||
| 334 | 342 | ||
| 335 | #ifdef __KERNEL__ | 343 | #ifdef __KERNEL__ |
| 336 | 344 | ||
| 337 | #define NR_syscalls 327 | 345 | #define NR_syscalls 335 |
| 338 | 346 | ||
| 339 | #include <arch/unistd.h> | 347 | #include <arch/unistd.h> |
| 340 | 348 | ||
