diff options
Diffstat (limited to 'arch/mips/include/asm/stackframe.h')
| -rw-r--r-- | arch/mips/include/asm/stackframe.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h index 3b6da3330e32..c8419129e770 100644 --- a/arch/mips/include/asm/stackframe.h +++ b/arch/mips/include/asm/stackframe.h | |||
| @@ -121,6 +121,25 @@ | |||
| 121 | .endm | 121 | .endm |
| 122 | #else | 122 | #else |
| 123 | .macro get_saved_sp /* Uniprocessor variation */ | 123 | .macro get_saved_sp /* Uniprocessor variation */ |
| 124 | #ifdef CONFIG_CPU_LOONGSON2F | ||
| 125 | /* | ||
| 126 | * Clear BTB (branch target buffer), forbid RAS (return address | ||
| 127 | * stack) to workaround the Out-of-order Issue in Loongson2F | ||
| 128 | * via its diagnostic register. | ||
| 129 | */ | ||
| 130 | move k0, ra | ||
| 131 | jal 1f | ||
| 132 | nop | ||
| 133 | 1: jal 1f | ||
| 134 | nop | ||
| 135 | 1: jal 1f | ||
| 136 | nop | ||
| 137 | 1: jal 1f | ||
| 138 | nop | ||
| 139 | 1: move ra, k0 | ||
| 140 | li k0, 3 | ||
| 141 | mtc0 k0, $22 | ||
| 142 | #endif /* CONFIG_CPU_LOONGSON2F */ | ||
| 124 | #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) | 143 | #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) |
| 125 | lui k1, %hi(kernelsp) | 144 | lui k1, %hi(kernelsp) |
| 126 | #else | 145 | #else |
