Commit 8dbc1864 authored by James Hogan's avatar James Hogan

MIPS: CPS: Fix MIPS_ISA_LEVEL_RAW fallout

Commit 17278a91 ("MIPS: CPS: Fix r1 .set mt assembler warning")
added .set MIPS_ISA_LEVEL_RAW to silence warnings about .set mt on r1,
however this can result in a MOVE being encoded as a 64-bit DADDU
instruction on certain version of binutils (e.g. 2.22), and reserved
instruction exceptions at runtime on 32-bit hardware.

Reduce the sizes of the push/pop sections to include only instructions
that are part of the MT ASE or which won't convert to 64-bit
instructions after .set mips64r2/mips64r6.
Reported-by: default avatarGreg Ungerer <gerg@linux-m68k.org>
Fixes: 17278a91 ("MIPS: CPS: Fix r1 .set mt assembler warning")
Signed-off-by: default avatarJames Hogan <jhogan@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paul.burton@mips.com>
Cc: linux-mips@linux-mips.org
Cc: <stable@vger.kernel.org> # 4.15
Tested-by: default avatarGreg Ungerer <gerg@linux-m68k.org>
Patchwork: https://patchwork.linux-mips.org/patch/18578/
parent d8a5b805
...@@ -388,15 +388,16 @@ LEAF(mips_cps_boot_vpes) ...@@ -388,15 +388,16 @@ LEAF(mips_cps_boot_vpes)
#elif defined(CONFIG_MIPS_MT) #elif defined(CONFIG_MIPS_MT)
.set push
.set MIPS_ISA_LEVEL_RAW
.set mt
/* If the core doesn't support MT then return */ /* If the core doesn't support MT then return */
has_mt t0, 5f has_mt t0, 5f
/* Enter VPE configuration state */ /* Enter VPE configuration state */
.set push
.set MIPS_ISA_LEVEL_RAW
.set mt
dvpe dvpe
.set pop
PTR_LA t1, 1f PTR_LA t1, 1f
jr.hb t1 jr.hb t1
nop nop
...@@ -422,6 +423,10 @@ LEAF(mips_cps_boot_vpes) ...@@ -422,6 +423,10 @@ LEAF(mips_cps_boot_vpes)
mtc0 t0, CP0_VPECONTROL mtc0 t0, CP0_VPECONTROL
ehb ehb
.set push
.set MIPS_ISA_LEVEL_RAW
.set mt
/* Skip the VPE if its TC is not halted */ /* Skip the VPE if its TC is not halted */
mftc0 t0, CP0_TCHALT mftc0 t0, CP0_TCHALT
beqz t0, 2f beqz t0, 2f
...@@ -495,6 +500,8 @@ LEAF(mips_cps_boot_vpes) ...@@ -495,6 +500,8 @@ LEAF(mips_cps_boot_vpes)
ehb ehb
evpe evpe
.set pop
/* Check whether this VPE is meant to be running */ /* Check whether this VPE is meant to be running */
li t0, 1 li t0, 1
sll t0, t0, a1 sll t0, t0, a1
...@@ -509,7 +516,7 @@ LEAF(mips_cps_boot_vpes) ...@@ -509,7 +516,7 @@ LEAF(mips_cps_boot_vpes)
1: jr.hb t0 1: jr.hb t0
nop nop
2: .set pop 2:
#endif /* CONFIG_MIPS_MT_SMP */ #endif /* CONFIG_MIPS_MT_SMP */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment