]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
sh: Make kgdb i-cache flushing less inept.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 3 Oct 2007 08:21:10 +0000 (17:21 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 3 Oct 2007 08:21:10 +0000 (17:21 +0900)
kgdb had its own ranged I-cache flushing routine that attempted to
duplicate the flush_icache_range() functionality, but managed to do
an explicit D-cache writeback & invalidate twice on SH-4. This is
a no-op for SH-3, and the flush_icache_range() semantics already do
what kgdb was feebly attempting to do already, so just move over to
that and kill off the wrapper.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/kgdb_stub.c
include/asm-sh/kgdb.h

index 27f64b92aff067e070a64eb603706fedc76371ef..2fdc700dfd6e72be2bed5e8c4db4489967781d6c 100644 (file)
@@ -609,7 +609,7 @@ static short *get_step_address(void)
        else
                addr = trap_registers.pc + 2;
 
-       kgdb_flush_icache_range(addr, addr + 2);
+       flush_icache_range(addr, addr + 2);
        return (short *) addr;
 }
 
@@ -632,7 +632,7 @@ static void do_single_step(void)
        *addr = STEP_OPCODE;
 
        /* Flush and return */
-       kgdb_flush_icache_range((long) addr, (long) addr + 2);
+       flush_icache_range((long) addr, (long) addr + 2);
 }
 
 /* Undo a single step */
@@ -642,7 +642,7 @@ static void undo_single_step(void)
        /* Use stepped_address in case we stopped elsewhere */
        if (stepped_opcode != 0) {
                *(short*)stepped_address = stepped_opcode;
-               kgdb_flush_icache_range(stepped_address, stepped_address + 2);
+               flush_icache_range(stepped_address, stepped_address + 2);
        }
        stepped_opcode = 0;
 }
@@ -728,7 +728,7 @@ static void write_mem_msg(int binary)
                                        ebin_to_mem(ptr, (char*)addr, length);
                                else
                                        hex_to_mem(ptr, (char*)addr, length);
-                               kgdb_flush_icache_range(addr, addr + length);
+                               flush_icache_range(addr, addr + length);
                                ptr = 0;
                                send_ok_msg();
                        }
index 5334e86ccad670cc36f7d6870493375aeb3aa479..4bc8cb187d119a8d66bff3995b9f7add0d79e09d 100644 (file)
@@ -17,7 +17,6 @@
 #define __KGDB_H
 
 #include <asm/ptrace.h>
-#include <asm/cacheflush.h>
 
 /* Same as pt_regs but has vbr in place of syscall_nr */
 struct kgdb_regs {
@@ -67,17 +66,6 @@ extern int     setjmp(jmp_buf __jmpb);
 /* Forced breakpoint */
 #define breakpoint()   __asm__ __volatile__("trapa   #0x3c")
 
-/* KGDB should be able to flush all kernel text space */
-#if defined(CONFIG_CPU_SH4)
-#define kgdb_flush_icache_range(start, end) \
-{                                                                      \
-       __flush_purge_region((void*)(start), (int)(end) - (int)(start));\
-       flush_icache_range((start), (end));                             \
-}
-#else
-#define kgdb_flush_icache_range(start, end)    do { } while (0)
-#endif
-
 /* Taken from sh-stub.c of GDB 4.18 */
 static const char hexchars[] = "0123456789abcdef";