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 |