diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-02-23 07:14:02 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-02-27 16:26:10 +0900 |
commit | 1d015cf02a1fd46385c03cf3ce8958dbea705dd3 (patch) | |
tree | 833e2ab294be74d7ecb3512a24bfefbc86189c59 /arch/sh/boards/mach-hp6xx/pm_wakeup.S | |
parent | b233b28eac0cc37d07c2d007ea08c86c778c5af4 (diff) | |
download | linux-stable-1d015cf02a1fd46385c03cf3ce8958dbea705dd3.tar.gz linux-stable-1d015cf02a1fd46385c03cf3ce8958dbea705dd3.tar.bz2 linux-stable-1d015cf02a1fd46385c03cf3ce8958dbea705dd3.zip |
sh: shared register saving code for sh3/sh4/sh4a
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 <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards/mach-hp6xx/pm_wakeup.S')
-rw-r--r-- | arch/sh/boards/mach-hp6xx/pm_wakeup.S | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/arch/sh/boards/mach-hp6xx/pm_wakeup.S b/arch/sh/boards/mach-hp6xx/pm_wakeup.S index 44b648cf6f23..4f18d44e0541 100644 --- a/arch/sh/boards/mach-hp6xx/pm_wakeup.S +++ b/arch/sh/boards/mach-hp6xx/pm_wakeup.S @@ -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 |