diff options
| author | Steven J. Hill <Steven.Hill@imgtec.com> | 2013-03-25 13:15:55 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2013-05-09 11:55:18 -0400 |
| commit | 2a0b24f56c2492b932f1aed617ae80fb23500d21 (patch) | |
| tree | c9aec2872f912c65b83a92a66fe94f6006427d73 /arch/mips/include/asm | |
| parent | 102cedc32a6e3cd537374a3678d407591d5a6fab (diff) | |
MIPS: microMIPS: Add support for exception handling.
All exceptions must be taken in microMIPS mode, never in classic
MIPS mode or the kernel falls apart. A few NOP instructions are
used to maintain the correct alignment of microMIPS versions of
the exception vectors.
Signed-off-by: Steven J. Hill <Steven.Hill@imgtec.com>
Diffstat (limited to 'arch/mips/include/asm')
| -rw-r--r-- | arch/mips/include/asm/mipsregs.h | 1 | ||||
| -rw-r--r-- | arch/mips/include/asm/stackframe.h | 12 |
2 files changed, 7 insertions, 6 deletions
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index f64e17fa3e96..87e6207b05e4 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
| @@ -596,6 +596,7 @@ | |||
| 596 | #define MIPS_CONF3_RXI (_ULCAST_(1) << 12) | 596 | #define MIPS_CONF3_RXI (_ULCAST_(1) << 12) |
| 597 | #define MIPS_CONF3_ULRI (_ULCAST_(1) << 13) | 597 | #define MIPS_CONF3_ULRI (_ULCAST_(1) << 13) |
| 598 | #define MIPS_CONF3_ISA (_ULCAST_(3) << 14) | 598 | #define MIPS_CONF3_ISA (_ULCAST_(3) << 14) |
| 599 | #define MIPS_CONF3_ISA_OE (_ULCAST_(3) << 16) | ||
| 599 | #define MIPS_CONF3_VZ (_ULCAST_(1) << 23) | 600 | #define MIPS_CONF3_VZ (_ULCAST_(1) << 23) |
| 600 | 601 | ||
| 601 | #define MIPS_CONF4_MMUSIZEEXT (_ULCAST_(255) << 0) | 602 | #define MIPS_CONF4_MMUSIZEEXT (_ULCAST_(255) << 0) |
diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h index c99384018161..a89d1b10d027 100644 --- a/arch/mips/include/asm/stackframe.h +++ b/arch/mips/include/asm/stackframe.h | |||
| @@ -139,7 +139,7 @@ | |||
| 139 | 1: move ra, k0 | 139 | 1: move ra, k0 |
| 140 | li k0, 3 | 140 | li k0, 3 |
| 141 | mtc0 k0, $22 | 141 | mtc0 k0, $22 |
| 142 | #endif /* CONFIG_CPU_LOONGSON2F */ | 142 | #endif /* CONFIG_CPU_JUMP_WORKAROUNDS */ |
| 143 | #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) | 143 | #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) |
| 144 | lui k1, %hi(kernelsp) | 144 | lui k1, %hi(kernelsp) |
| 145 | #else | 145 | #else |
| @@ -189,6 +189,7 @@ | |||
| 189 | LONG_S $0, PT_R0(sp) | 189 | LONG_S $0, PT_R0(sp) |
| 190 | mfc0 v1, CP0_STATUS | 190 | mfc0 v1, CP0_STATUS |
| 191 | LONG_S $2, PT_R2(sp) | 191 | LONG_S $2, PT_R2(sp) |
| 192 | LONG_S v1, PT_STATUS(sp) | ||
| 192 | #ifdef CONFIG_MIPS_MT_SMTC | 193 | #ifdef CONFIG_MIPS_MT_SMTC |
| 193 | /* | 194 | /* |
| 194 | * Ideally, these instructions would be shuffled in | 195 | * Ideally, these instructions would be shuffled in |
| @@ -200,21 +201,20 @@ | |||
| 200 | LONG_S k0, PT_TCSTATUS(sp) | 201 | LONG_S k0, PT_TCSTATUS(sp) |
| 201 | #endif /* CONFIG_MIPS_MT_SMTC */ | 202 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 202 | LONG_S $4, PT_R4(sp) | 203 | LONG_S $4, PT_R4(sp) |
| 203 | LONG_S $5, PT_R5(sp) | ||
| 204 | LONG_S v1, PT_STATUS(sp) | ||
| 205 | mfc0 v1, CP0_CAUSE | 204 | mfc0 v1, CP0_CAUSE |
| 206 | LONG_S $6, PT_R6(sp) | 205 | LONG_S $5, PT_R5(sp) |
| 207 | LONG_S $7, PT_R7(sp) | ||
| 208 | LONG_S v1, PT_CAUSE(sp) | 206 | LONG_S v1, PT_CAUSE(sp) |
| 207 | LONG_S $6, PT_R6(sp) | ||
| 209 | MFC0 v1, CP0_EPC | 208 | MFC0 v1, CP0_EPC |
| 209 | LONG_S $7, PT_R7(sp) | ||
| 210 | #ifdef CONFIG_64BIT | 210 | #ifdef CONFIG_64BIT |
| 211 | LONG_S $8, PT_R8(sp) | 211 | LONG_S $8, PT_R8(sp) |
| 212 | LONG_S $9, PT_R9(sp) | 212 | LONG_S $9, PT_R9(sp) |
| 213 | #endif | 213 | #endif |
| 214 | LONG_S v1, PT_EPC(sp) | ||
| 214 | LONG_S $25, PT_R25(sp) | 215 | LONG_S $25, PT_R25(sp) |
| 215 | LONG_S $28, PT_R28(sp) | 216 | LONG_S $28, PT_R28(sp) |
| 216 | LONG_S $31, PT_R31(sp) | 217 | LONG_S $31, PT_R31(sp) |
| 217 | LONG_S v1, PT_EPC(sp) | ||
| 218 | ori $28, sp, _THREAD_MASK | 218 | ori $28, sp, _THREAD_MASK |
| 219 | xori $28, _THREAD_MASK | 219 | xori $28, _THREAD_MASK |
| 220 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | 220 | #ifdef CONFIG_CPU_CAVIUM_OCTEON |
