diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-19 19:33:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-19 19:33:08 -0400 |
commit | db07b02304d0d70bf8273abc93d94e4c8d2f9cec (patch) | |
tree | 02ff2652fdbf288021bcbcf9af37b79d9aa76254 | |
parent | 88e6c9499f959cdac9ef120a1a1e857da5944052 (diff) | |
parent | 336f1d326831873ffab6de5fcec4b3be05103ae0 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6:
sh: Fix up restorer in debug_trap exception return path.
sh: Make is_valid_bugaddr() more intelligent on nommu.
sh: use the common ascii hex helpers
sh: fix sh7785 master clock value
sh: Fix up thread info pointer in syscall_badsys resume path.
sh: Fix up optimized SH-4 memcpy on big endian.
sh: disable initrd defaults in .empty_zero_page.
sh: display boot params by default on entry.
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/clock-sh7785.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/entry-common.S | 12 | ||||
-rw-r--r-- | arch/sh/kernel/head_32.S | 4 | ||||
-rw-r--r-- | arch/sh/kernel/kgdb_stub.c | 11 | ||||
-rw-r--r-- | arch/sh/kernel/setup.c | 11 | ||||
-rw-r--r-- | arch/sh/kernel/traps.c | 10 | ||||
-rw-r--r-- | arch/sh/lib/memcpy-sh4.S | 22 | ||||
-rw-r--r-- | drivers/serial/sh-sci.c | 8 | ||||
-rw-r--r-- | include/asm-sh/kgdb.h | 14 |
9 files changed, 49 insertions, 45 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c index 805535aa505e..27fa81bef6a0 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c | |||
@@ -26,7 +26,7 @@ static int pfc_divisors[] = { 1, 1, 1, 1, 1, 1, 1, 18, | |||
26 | 26 | ||
27 | static void master_clk_init(struct clk *clk) | 27 | static void master_clk_init(struct clk *clk) |
28 | { | 28 | { |
29 | clk->rate *= 36; | 29 | clk->rate *= pfc_divisors[ctrl_inl(FRQMR1) & 0x000f]; |
30 | } | 30 | } |
31 | 31 | ||
32 | static struct clk_ops sh7785_master_clk_ops = { | 32 | static struct clk_ops sh7785_master_clk_ops = { |
diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index 926b2e7b11c1..718bd2356b34 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S | |||
@@ -1,9 +1,6 @@ | |||
1 | /* $Id: entry.S,v 1.37 2004/06/11 13:02:46 doyu Exp $ | 1 | /* |
2 | * | ||
3 | * linux/arch/sh/entry.S | ||
4 | * | ||
5 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka | 2 | * Copyright (C) 1999, 2000, 2002 Niibe Yutaka |
6 | * Copyright (C) 2003 Paul Mundt | 3 | * Copyright (C) 2003 - 2008 Paul Mundt |
7 | * | 4 | * |
8 | * This file is subject to the terms and conditions of the GNU General Public | 5 | * This file is subject to the terms and conditions of the GNU General Public |
9 | * License. See the file "COPYING" in the main directory of this archive | 6 | * License. See the file "COPYING" in the main directory of this archive |
@@ -262,6 +259,7 @@ __restore_all: | |||
262 | 259 | ||
263 | .align 2 | 260 | .align 2 |
264 | syscall_badsys: ! Bad syscall number | 261 | syscall_badsys: ! Bad syscall number |
262 | get_current_thread_info r8, r0 | ||
265 | mov #-ENOSYS, r0 | 263 | mov #-ENOSYS, r0 |
266 | bra resume_userspace | 264 | bra resume_userspace |
267 | mov.l r0, @(OFF_R0,r15) ! Return value | 265 | mov.l r0, @(OFF_R0,r15) ! Return value |
@@ -281,7 +279,9 @@ debug_trap: | |||
281 | mov.l 1f, r8 | 279 | mov.l 1f, r8 |
282 | add r0, r8 | 280 | add r0, r8 |
283 | mov.l @r8, r8 | 281 | mov.l @r8, r8 |
284 | jmp @r8 | 282 | jsr @r8 |
283 | nop | ||
284 | bra __restore_all | ||
285 | nop | 285 | nop |
286 | 286 | ||
287 | .align 2 | 287 | .align 2 |
diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S index d67d7ed09f22..ae0a382a82eb 100644 --- a/arch/sh/kernel/head_32.S +++ b/arch/sh/kernel/head_32.S | |||
@@ -30,8 +30,8 @@ ENTRY(empty_zero_page) | |||
30 | .long 0 /* RAMDISK_FLAGS */ | 30 | .long 0 /* RAMDISK_FLAGS */ |
31 | .long 0x0200 /* ORIG_ROOT_DEV */ | 31 | .long 0x0200 /* ORIG_ROOT_DEV */ |
32 | .long 1 /* LOADER_TYPE */ | 32 | .long 1 /* LOADER_TYPE */ |
33 | .long 0x00360000 /* INITRD_START */ | 33 | .long 0x00000000 /* INITRD_START */ |
34 | .long 0x000a0000 /* INITRD_SIZE */ | 34 | .long 0x00000000 /* INITRD_SIZE */ |
35 | #ifdef CONFIG_32BIT | 35 | #ifdef CONFIG_32BIT |
36 | .long 0x53453f00 + 32 /* "SE?" = 32 bit */ | 36 | .long 0x53453f00 + 32 /* "SE?" = 32 bit */ |
37 | #else | 37 | #else |
diff --git a/arch/sh/kernel/kgdb_stub.c b/arch/sh/kernel/kgdb_stub.c index 832641bbd47d..bf8ac4c71640 100644 --- a/arch/sh/kernel/kgdb_stub.c +++ b/arch/sh/kernel/kgdb_stub.c | |||
@@ -274,8 +274,7 @@ static char *mem_to_hex(const char *mem, char *buf, const int count) | |||
274 | } | 274 | } |
275 | for (i = 0; i < count; i++) { | 275 | for (i = 0; i < count; i++) { |
276 | ch = *mem++; | 276 | ch = *mem++; |
277 | *buf++ = highhex(ch); | 277 | buf = pack_hex_byte(buf, ch); |
278 | *buf++ = lowhex(ch); | ||
279 | } | 278 | } |
280 | *buf = 0; | 279 | *buf = 0; |
281 | return (buf); | 280 | return (buf); |
@@ -427,8 +426,8 @@ static void put_packet(char *buffer) | |||
427 | 426 | ||
428 | /* '#' Separator, put high and low components of checksum */ | 427 | /* '#' Separator, put high and low components of checksum */ |
429 | put_debug_char('#'); | 428 | put_debug_char('#'); |
430 | put_debug_char(highhex(checksum)); | 429 | put_debug_char(hex_asc_hi(checksum)); |
431 | put_debug_char(lowhex(checksum)); | 430 | put_debug_char(hex_asc_lo(checksum)); |
432 | } | 431 | } |
433 | while ((get_debug_char()) != '+'); /* While no ack */ | 432 | while ((get_debug_char()) != '+'); /* While no ack */ |
434 | } | 433 | } |
@@ -650,8 +649,8 @@ static void undo_single_step(void) | |||
650 | static void send_signal_msg(const int signum) | 649 | static void send_signal_msg(const int signum) |
651 | { | 650 | { |
652 | out_buffer[0] = 'S'; | 651 | out_buffer[0] = 'S'; |
653 | out_buffer[1] = highhex(signum); | 652 | out_buffer[1] = hex_asc_hi(signum); |
654 | out_buffer[2] = lowhex(signum); | 653 | out_buffer[2] = hex_asc_lo(signum); |
655 | out_buffer[3] = 0; | 654 | out_buffer[3] = 0; |
656 | put_packet(out_buffer); | 655 | put_packet(out_buffer); |
657 | } | 656 | } |
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index 516bde9c50fa..bca2bbc575db 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c | |||
@@ -292,6 +292,17 @@ void __init setup_arch(char **cmdline_p) | |||
292 | 292 | ||
293 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); | 293 | ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); |
294 | 294 | ||
295 | printk(KERN_NOTICE "Boot params:\n" | ||
296 | "... MOUNT_ROOT_RDONLY - %08lx\n" | ||
297 | "... RAMDISK_FLAGS - %08lx\n" | ||
298 | "... ORIG_ROOT_DEV - %08lx\n" | ||
299 | "... LOADER_TYPE - %08lx\n" | ||
300 | "... INITRD_START - %08lx\n" | ||
301 | "... INITRD_SIZE - %08lx\n", | ||
302 | MOUNT_ROOT_RDONLY, RAMDISK_FLAGS, | ||
303 | ORIG_ROOT_DEV, LOADER_TYPE, | ||
304 | INITRD_START, INITRD_SIZE); | ||
305 | |||
295 | #ifdef CONFIG_BLK_DEV_RAM | 306 | #ifdef CONFIG_BLK_DEV_RAM |
296 | rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; | 307 | rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; |
297 | rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); | 308 | rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); |
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c index a3bdc68ef02c..438f1ebcc453 100644 --- a/arch/sh/kernel/traps.c +++ b/arch/sh/kernel/traps.c | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/kdebug.h> | 4 | #include <linux/kdebug.h> |
5 | #include <linux/signal.h> | 5 | #include <linux/signal.h> |
6 | #include <linux/sched.h> | 6 | #include <linux/sched.h> |
7 | #include <linux/uaccess.h> | ||
7 | #include <asm/system.h> | 8 | #include <asm/system.h> |
8 | 9 | ||
9 | #ifdef CONFIG_BUG | 10 | #ifdef CONFIG_BUG |
@@ -21,7 +22,14 @@ static void handle_BUG(struct pt_regs *regs) | |||
21 | 22 | ||
22 | int is_valid_bugaddr(unsigned long addr) | 23 | int is_valid_bugaddr(unsigned long addr) |
23 | { | 24 | { |
24 | return addr >= PAGE_OFFSET; | 25 | unsigned short opcode; |
26 | |||
27 | if (addr < PAGE_OFFSET) | ||
28 | return 0; | ||
29 | if (probe_kernel_address((u16 *)addr, opcode)) | ||
30 | return 0; | ||
31 | |||
32 | return opcode == TRAPA_BUG_OPCODE; | ||
25 | } | 33 | } |
26 | #endif | 34 | #endif |
27 | 35 | ||
diff --git a/arch/sh/lib/memcpy-sh4.S b/arch/sh/lib/memcpy-sh4.S index 560bc17eebdd..459fa92a7c53 100644 --- a/arch/sh/lib/memcpy-sh4.S +++ b/arch/sh/lib/memcpy-sh4.S | |||
@@ -126,10 +126,10 @@ | |||
126 | 126 | ||
127 | mov.l r3,@-r0 ! 30 LS | 127 | mov.l r3,@-r0 ! 30 LS |
128 | #else | 128 | #else |
129 | 3: mov r1,r3 ! OPQR | 129 | 3: mov r7,r3 ! OPQR |
130 | shlr8 r3 ! xOPQ | 130 | shlr8 r3 ! xOPQ |
131 | mov.l @(r0,r5),r1 ! KLMN | 131 | mov.l @(r0,r5),r7 ! KLMN |
132 | mov r1,r6 | 132 | mov r7,r6 |
133 | shll16 r6 | 133 | shll16 r6 |
134 | shll8 r6 ! Nxxx | 134 | shll8 r6 ! Nxxx |
135 | or r6,r3 ! NOPQ | 135 | or r6,r3 ! NOPQ |
@@ -733,24 +733,24 @@ ENTRY(memcpy) | |||
733 | movca.l r0,@r1 ! 40 LS (latency=3-7) | 733 | movca.l r0,@r1 ! 40 LS (latency=3-7) |
734 | add #-0x1c, r1 ! 50 EX | 734 | add #-0x1c, r1 ! 50 EX |
735 | 735 | ||
736 | mov.l r3, @(0x1c,r1) ! 33 LS | 736 | mov.l r3, @(0x18,r1) ! 33 LS |
737 | xtrct r11, r10 ! 48 EX | 737 | xtrct r11, r10 ! 48 EX |
738 | 738 | ||
739 | mov.l r6, @(0x18,r1) ! 33 LS | 739 | mov.l r6, @(0x14,r1) ! 33 LS |
740 | xtrct r12, r11 ! 48 EX | 740 | xtrct r12, r11 ! 48 EX |
741 | 741 | ||
742 | mov.l r7, @(0x14,r1) ! 33 LS | 742 | mov.l r7, @(0x10,r1) ! 33 LS |
743 | 743 | ||
744 | mov.l r8, @(0x10,r1) ! 33 LS | 744 | mov.l r8, @(0x0c,r1) ! 33 LS |
745 | add #-0x3e, r5 ! 50 EX | 745 | add #-0x1e, r5 ! 50 EX |
746 | 746 | ||
747 | mov.l r9, @(0x0c,r1) ! 33 LS | 747 | mov.l r9, @(0x08,r1) ! 33 LS |
748 | cmp/eq r2,r1 ! 54 MT | 748 | cmp/eq r2,r1 ! 54 MT |
749 | 749 | ||
750 | mov.l r10, @(0x08,r1) ! 33 LS | 750 | mov.l r10, @(0x04,r1) ! 33 LS |
751 | bf/s 2b ! 109 BR | 751 | bf/s 2b ! 109 BR |
752 | 752 | ||
753 | mov.l r11, @(0x04,r1) ! 33 LS | 753 | mov.l r11, @(0x00,r1) ! 33 LS |
754 | #endif | 754 | #endif |
755 | 755 | ||
756 | mov.l @r15+, r12 | 756 | mov.l @r15+, r12 |
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index 8fdafc27fce8..ce6ee92b3a1b 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c | |||
@@ -184,15 +184,15 @@ static void put_string(struct sci_port *sci_port, const char *buffer, int count) | |||
184 | int h, l; | 184 | int h, l; |
185 | 185 | ||
186 | c = *p++; | 186 | c = *p++; |
187 | h = highhex(c); | 187 | h = hex_asc_hi(c); |
188 | l = lowhex(c); | 188 | l = hex_asc_lo(c); |
189 | put_char(port, h); | 189 | put_char(port, h); |
190 | put_char(port, l); | 190 | put_char(port, l); |
191 | checksum += h + l; | 191 | checksum += h + l; |
192 | } | 192 | } |
193 | put_char(port, '#'); | 193 | put_char(port, '#'); |
194 | put_char(port, highhex(checksum)); | 194 | put_char(port, hex_asc_hi(checksum)); |
195 | put_char(port, lowhex(checksum)); | 195 | put_char(port, hex_asc_lo(checksum)); |
196 | } while (get_char(port) != '+'); | 196 | } while (get_char(port) != '+'); |
197 | } else | 197 | } else |
198 | #endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ | 198 | #endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ |
diff --git a/include/asm-sh/kgdb.h b/include/asm-sh/kgdb.h index 4bc8cb187d11..24e42078f36f 100644 --- a/include/asm-sh/kgdb.h +++ b/include/asm-sh/kgdb.h | |||
@@ -66,18 +66,4 @@ extern int setjmp(jmp_buf __jmpb); | |||
66 | /* Forced breakpoint */ | 66 | /* Forced breakpoint */ |
67 | #define breakpoint() __asm__ __volatile__("trapa #0x3c") | 67 | #define breakpoint() __asm__ __volatile__("trapa #0x3c") |
68 | 68 | ||
69 | /* Taken from sh-stub.c of GDB 4.18 */ | ||
70 | static const char hexchars[] = "0123456789abcdef"; | ||
71 | |||
72 | /* Get high hex bits */ | ||
73 | static inline char highhex(const int x) | ||
74 | { | ||
75 | return hexchars[(x >> 4) & 0xf]; | ||
76 | } | ||
77 | |||
78 | /* Get low hex bits */ | ||
79 | static inline char lowhex(const int x) | ||
80 | { | ||
81 | return hexchars[x & 0xf]; | ||
82 | } | ||
83 | #endif | 69 | #endif |