sh: shared register saving code for sh3/sh4/sh4a
PATCH 1/4 sh: shared register saving code for sh3/sh4/sh4a
From: Magnus Damm <[email protected]>
This patch reworks the sh3/sh4/sh4a register saving code in the following ways:
- break out prepare_stack_save_dsp() from handle_exception()
- break out save_regs() from handle_exception()
- the register saving order is unchanged
- align new functions to fit in cache lines
- separate exception code from interrupt code
- keep main code flow in a single cache line per exception vector
- use bsr/rts for regular functions (save pr first)
- keep data in one shared cache line (exception_data)
- document the functions
- tie in the hp6xx code
Signed-off-by Magnus Damm <[email protected]>
---
Let me know if you prefer to split this change into smaller pieces.
arch/sh/boards/mach-hp6xx/pm_wakeup.S | 31 --- arch/sh/kernel/cpu/sh3/entry.S | 273 +++++++++++++++++---------------- 2 files changed, 155 insertions(+), 149 deletions(-)
arch/sh/boards/mach-hp6xx/pm_wakeup.S +8 -23
@@ -10,47 +10,32 @@ #include <linux/linkage.h> #include <cpu/mmu_context.h> -#define k0 r0 -#define k1 r1 -#define k2 r2 -#define k3 r3 -#define k4 r4 - /* * Kernel mode register usage: * k0 scratch * k1 scratch - * k2 scratch (Exception code) - * k3 scratch (Return address) - * k4 scratch - * k5 reserved - * k6 Global Interrupt Mask (0--15 << 4) - * k7 CURRENT_THREAD_INFO (pointer to current thread info) + * For more details, please have a look at entry.S */ +#define k0 r0 +#define k1 r1 + ENTRY(wakeup_start) ! clear STBY bit - mov #-126, k2 + mov #-126, k1 and #127, k0 - mov.b k0, @k2 + mov.b k0, @k1 ! enable refresh mov.l 5f, k1 mov.w 6f, k0 mov.w k0, @k1 ! jump to handler - mov.l 2f, k2 - mov.l 3f, k3 - mov.l @k2, k2 - mov.l 4f, k1 jmp @k1 - nop + nop .align 2 -1: .long EXPEVT -2: .long INTEVT -3: .long ret_from_irq -4: .long handle_exception +4: .long handle_interrupt 5: .long 0xffffff68 6: .word 0x0524
arch/sh/kernel/cpu/sh3/entry.S +147 -126
366 lines not on this page · raw message