diff options
Diffstat (limited to 'arch/microblaze/kernel/entry.S')
-rw-r--r-- | arch/microblaze/kernel/entry.S | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 304882e56459..819238b8a429 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -186,6 +186,8 @@ | |||
186 | swi r13, r1, PTO+PT_R13; /* Save SDA2 */ \ | 186 | swi r13, r1, PTO+PT_R13; /* Save SDA2 */ \ |
187 | swi r14, r1, PTO+PT_PC; /* PC, before IRQ/trap */ \ | 187 | swi r14, r1, PTO+PT_PC; /* PC, before IRQ/trap */ \ |
188 | swi r15, r1, PTO+PT_R15; /* Save LP */ \ | 188 | swi r15, r1, PTO+PT_R15; /* Save LP */ \ |
189 | swi r16, r1, PTO+PT_R16; \ | ||
190 | swi r17, r1, PTO+PT_R17; \ | ||
189 | swi r18, r1, PTO+PT_R18; /* Save asm scratch reg */ \ | 191 | swi r18, r1, PTO+PT_R18; /* Save asm scratch reg */ \ |
190 | swi r19, r1, PTO+PT_R19; \ | 192 | swi r19, r1, PTO+PT_R19; \ |
191 | swi r20, r1, PTO+PT_R20; \ | 193 | swi r20, r1, PTO+PT_R20; \ |
@@ -220,6 +222,8 @@ | |||
220 | lwi r13, r1, PTO+PT_R13; /* restore SDA2 */ \ | 222 | lwi r13, r1, PTO+PT_R13; /* restore SDA2 */ \ |
221 | lwi r14, r1, PTO+PT_PC; /* RESTORE_LINK PC, before IRQ/trap */\ | 223 | lwi r14, r1, PTO+PT_PC; /* RESTORE_LINK PC, before IRQ/trap */\ |
222 | lwi r15, r1, PTO+PT_R15; /* restore LP */ \ | 224 | lwi r15, r1, PTO+PT_R15; /* restore LP */ \ |
225 | lwi r16, r1, PTO+PT_R16; \ | ||
226 | lwi r17, r1, PTO+PT_R17; \ | ||
223 | lwi r18, r1, PTO+PT_R18; /* restore asm scratch reg */ \ | 227 | lwi r18, r1, PTO+PT_R18; /* restore asm scratch reg */ \ |
224 | lwi r19, r1, PTO+PT_R19; \ | 228 | lwi r19, r1, PTO+PT_R19; \ |
225 | lwi r20, r1, PTO+PT_R20; \ | 229 | lwi r20, r1, PTO+PT_R20; \ |
@@ -295,6 +299,8 @@ C_ENTRY(_user_exception): | |||
295 | /* addik r1, r1, -STATE_SAVE_SIZE; */ | 299 | /* addik r1, r1, -STATE_SAVE_SIZE; */ |
296 | addik r1, r1, THREAD_SIZE + CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; | 300 | addik r1, r1, THREAD_SIZE + CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; |
297 | SAVE_REGS | 301 | SAVE_REGS |
302 | swi r0, r1, PTO + PT_R3 | ||
303 | swi r0, r1, PTO + PT_R4 | ||
298 | 304 | ||
299 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | 305 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); |
300 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ | 306 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ |
@@ -458,14 +464,8 @@ C_ENTRY(sys_execve): | |||
458 | addik r8, r1, PTO; /* add user context as 4th arg */ | 464 | addik r8, r1, PTO; /* add user context as 4th arg */ |
459 | 465 | ||
460 | C_ENTRY(sys_rt_sigreturn_wrapper): | 466 | C_ENTRY(sys_rt_sigreturn_wrapper): |
461 | swi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | 467 | brid sys_rt_sigreturn /* Do real work */ |
462 | swi r4, r1, PTO+PT_R4; | ||
463 | brlid r15, sys_rt_sigreturn /* Do real work */ | ||
464 | addik r5, r1, PTO; /* add user context as 1st arg */ | 468 | addik r5, r1, PTO; /* add user context as 1st arg */ |
465 | lwi r3, r1, PTO+PT_R3; /* restore saved r3, r4 registers */ | ||
466 | lwi r4, r1, PTO+PT_R4; | ||
467 | bri ret_from_trap /* fall through will not work here due to align */ | ||
468 | nop; | ||
469 | 469 | ||
470 | /* | 470 | /* |
471 | * HW EXCEPTION rutine start | 471 | * HW EXCEPTION rutine start |
@@ -765,9 +765,7 @@ C_ENTRY(_debug_exception): | |||
765 | /* save all regs to pt_reg structure */ | 765 | /* save all regs to pt_reg structure */ |
766 | swi r0, r1, PTO+PT_R0; /* R0 must be saved too */ | 766 | swi r0, r1, PTO+PT_R0; /* R0 must be saved too */ |
767 | swi r14, r1, PTO+PT_R14 /* rewrite saved R14 value */ | 767 | swi r14, r1, PTO+PT_R14 /* rewrite saved R14 value */ |
768 | swi r16, r1, PTO+PT_R16 | ||
769 | swi r16, r1, PTO+PT_PC; /* PC and r16 are the same */ | 768 | swi r16, r1, PTO+PT_PC; /* PC and r16 are the same */ |
770 | swi r17, r1, PTO+PT_R17 | ||
771 | /* save special purpose registers to pt_regs */ | 769 | /* save special purpose registers to pt_regs */ |
772 | mfs r11, rear; | 770 | mfs r11, rear; |
773 | swi r11, r1, PTO+PT_EAR; | 771 | swi r11, r1, PTO+PT_EAR; |
@@ -801,8 +799,6 @@ C_ENTRY(_debug_exception): | |||
801 | 799 | ||
802 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ | 800 | addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ |
803 | SAVE_REGS; | 801 | SAVE_REGS; |
804 | swi r17, r1, PTO+PT_R17; | ||
805 | swi r16, r1, PTO+PT_R16; | ||
806 | swi r16, r1, PTO+PT_PC; /* Save LP */ | 802 | swi r16, r1, PTO+PT_PC; /* Save LP */ |
807 | swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ | 803 | swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ |
808 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); | 804 | lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); |
@@ -848,8 +844,6 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ | |||
848 | tophys(r1,r1); | 844 | tophys(r1,r1); |
849 | /* MS: Restore all regs */ | 845 | /* MS: Restore all regs */ |
850 | RESTORE_REGS | 846 | RESTORE_REGS |
851 | lwi r17, r1, PTO+PT_R17; | ||
852 | lwi r16, r1, PTO+PT_R16; | ||
853 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space */ | 847 | addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space */ |
854 | lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ | 848 | lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ |
855 | DBTRAP_return_user: /* MS: Make global symbol for debugging */ | 849 | DBTRAP_return_user: /* MS: Make global symbol for debugging */ |
@@ -863,7 +857,6 @@ DBTRAP_return_user: /* MS: Make global symbol for debugging */ | |||
863 | RESTORE_REGS | 857 | RESTORE_REGS |
864 | lwi r14, r1, PTO+PT_R14; | 858 | lwi r14, r1, PTO+PT_R14; |
865 | lwi r16, r1, PTO+PT_PC; | 859 | lwi r16, r1, PTO+PT_PC; |
866 | lwi r17, r1, PTO+PT_R17; | ||
867 | addik r1, r1, STATE_SAVE_SIZE; /* MS: Clean up stack space */ | 860 | addik r1, r1, STATE_SAVE_SIZE; /* MS: Clean up stack space */ |
868 | tovirt(r1,r1); | 861 | tovirt(r1,r1); |
869 | DBTRAP_return_kernel: /* MS: Make global symbol for debugging */ | 862 | DBTRAP_return_kernel: /* MS: Make global symbol for debugging */ |