|
@@ -69,6 +69,14 @@
|
|
|
LONG_S $24, PT_R24(sp)
|
|
|
#ifndef CONFIG_CPU_HAS_SMARTMIPS
|
|
|
LONG_S v1, PT_LO(sp)
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
|
|
+ /*
|
|
|
+ * The Octeon multiplier state is affected by general
|
|
|
+ * multiply instructions. It must be saved before and
|
|
|
+ * kernel code might corrupt it
|
|
|
+ */
|
|
|
+ jal octeon_mult_save
|
|
|
#endif
|
|
|
.endm
|
|
|
|
|
@@ -218,17 +226,8 @@
|
|
|
ori $28, sp, _THREAD_MASK
|
|
|
xori $28, _THREAD_MASK
|
|
|
#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
|
|
- .set mips64
|
|
|
- pref 0, 0($28) /* Prefetch the current pointer */
|
|
|
- pref 0, PT_R31(sp) /* Prefetch the $31(ra) */
|
|
|
- /* The Octeon multiplier state is affected by general multiply
|
|
|
- instructions. It must be saved before and kernel code might
|
|
|
- corrupt it */
|
|
|
- jal octeon_mult_save
|
|
|
- LONG_L v1, 0($28) /* Load the current pointer */
|
|
|
- /* Restore $31(ra) that was changed by the jal */
|
|
|
- LONG_L ra, PT_R31(sp)
|
|
|
- pref 0, 0(v1) /* Prefetch the current thread */
|
|
|
+ .set mips64
|
|
|
+ pref 0, 0($28) /* Prefetch the current pointer */
|
|
|
#endif
|
|
|
.set pop
|
|
|
.endm
|
|
@@ -248,6 +247,10 @@
|
|
|
.endm
|
|
|
|
|
|
.macro RESTORE_TEMP
|
|
|
+#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
|
|
+ /* Restore the Octeon multiplier state */
|
|
|
+ jal octeon_mult_restore
|
|
|
+#endif
|
|
|
#ifdef CONFIG_CPU_HAS_SMARTMIPS
|
|
|
LONG_L $24, PT_ACX(sp)
|
|
|
mtlhx $24
|
|
@@ -360,10 +363,6 @@
|
|
|
DVPE 5 # dvpe a1
|
|
|
jal mips_ihb
|
|
|
#endif /* CONFIG_MIPS_MT_SMTC */
|
|
|
-#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
|
|
- /* Restore the Octeon multiplier state */
|
|
|
- jal octeon_mult_restore
|
|
|
-#endif
|
|
|
mfc0 a0, CP0_STATUS
|
|
|
ori a0, STATMASK
|
|
|
xori a0, STATMASK
|