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 3b6da3330e3..c8419129e77 100644 --- a/arch/mips/include/asm/stackframe.h +++ b/arch/mips/include/asm/stackframe.h @@ -121,6 +121,25 @@  		.endm  #else  		.macro	get_saved_sp	/* Uniprocessor variation */ +#ifdef CONFIG_CPU_LOONGSON2F +		/* +		 * Clear BTB (branch target buffer), forbid RAS (return address +		 * stack) to workaround the Out-of-order Issue in Loongson2F +		 * via its diagnostic register. +		 */ +		move	k0, ra +		jal	1f +		 nop +1:		jal	1f +		 nop +1:		jal	1f +		 nop +1:		jal	1f +		 nop +1:		move	ra, k0 +		li	k0, 3 +		mtc0	k0, $22 +#endif /* CONFIG_CPU_LOONGSON2F */  #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)  		lui	k1, %hi(kernelsp)  #else  |