sh: prefetch early exception data on sh4/sh4a.
Prefetch early exception data. There is unused space in our
exception handler cache line anyway, so this is almost free.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
diff --git a/arch/sh/include/asm/entry-macros.S b/arch/sh/include/asm/entry-macros.S
index 2dab0b8..3a4752a 100644
--- a/arch/sh/include/asm/entry-macros.S
+++ b/arch/sh/include/asm/entry-macros.S
@@ -31,3 +31,8 @@
#endif
.endm
+#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
+# define PREF(x) pref @x
+#else
+# define PREF(x) nop
+#endif
diff --git a/arch/sh/kernel/cpu/sh3/entry.S b/arch/sh/kernel/cpu/sh3/entry.S
index 0271fe0..e984e94 100644
--- a/arch/sh/kernel/cpu/sh3/entry.S
+++ b/arch/sh/kernel/cpu/sh3/entry.S
@@ -463,9 +463,11 @@
sts pr, k3 ! save original pr value in k3
handle_exception:
+ mova exception_data, k0
+
! Setup stack and save DSP context (k0 contains original r15 on return)
bsr prepare_stack_save_dsp
- nop
+ PREF(k0)
! Save registers / Switch to bank 0
mov.l 5f, k2 ! vector register address
@@ -556,10 +558,11 @@
11:
#endif /* defined(CONFIG_KGDB) */
sts pr, k3 ! save original pr value in k3
+ mova exception_data, k0
! Setup stack and save DSP context (k0 contains original r15 on return)
bsr prepare_stack_save_dsp
- nop
+ PREF(k0)
! Save registers / Switch to bank 0
bsr save_regs ! needs original pr value in k3