|
|
@@ -32,6 +32,16 @@
|
|
|
*/
|
|
|
#define THREAD_NORMSAVE(offset) (THREAD_NORMSAVES + (offset * 4))
|
|
|
|
|
|
+#ifdef CONFIG_PPC_FSL_BOOK3E
|
|
|
+#define BOOKE_CLEAR_BTB(reg) \
|
|
|
+START_BTB_FLUSH_SECTION \
|
|
|
+ BTB_FLUSH(reg) \
|
|
|
+END_BTB_FLUSH_SECTION
|
|
|
+#else
|
|
|
+#define BOOKE_CLEAR_BTB(reg)
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
#define NORMAL_EXCEPTION_PROLOG(intno) \
|
|
|
mtspr SPRN_SPRG_WSCRATCH0, r10; /* save one register */ \
|
|
|
mfspr r10, SPRN_SPRG_THREAD; \
|
|
|
@@ -43,9 +53,7 @@
|
|
|
andi. r11, r11, MSR_PR; /* check whether user or kernel */\
|
|
|
mr r11, r1; \
|
|
|
beq 1f; \
|
|
|
-START_BTB_FLUSH_SECTION \
|
|
|
- BTB_FLUSH(r11) \
|
|
|
-END_BTB_FLUSH_SECTION \
|
|
|
+ BOOKE_CLEAR_BTB(r11) \
|
|
|
/* if from user, start at top of this thread's kernel stack */ \
|
|
|
lwz r11, THREAD_INFO-THREAD(r10); \
|
|
|
ALLOC_STACK_FRAME(r11, THREAD_SIZE); \
|
|
|
@@ -131,9 +139,7 @@ END_BTB_FLUSH_SECTION \
|
|
|
stw r9,_CCR(r8); /* save CR on stack */\
|
|
|
mfspr r11,exc_level_srr1; /* check whether user or kernel */\
|
|
|
DO_KVM BOOKE_INTERRUPT_##intno exc_level_srr1; \
|
|
|
-START_BTB_FLUSH_SECTION \
|
|
|
- BTB_FLUSH(r10) \
|
|
|
-END_BTB_FLUSH_SECTION \
|
|
|
+ BOOKE_CLEAR_BTB(r10) \
|
|
|
andi. r11,r11,MSR_PR; \
|
|
|
mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\
|
|
|
lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
|