Commit 2a219b0e authored by David Daney's avatar David Daney Committed by Ralf Baechle
Browse files

MIPS: Cavium OCTEON multiplier state preservation.



For OCTEON, implement a save and restore of the multiplier state
across context switches.

Signed-off-by: default avatarTomaso Paoletti <tpaoletti@caviumnetworks.com>
Signed-off-by: default avatarDavid Daney <ddaney@caviumnetworks.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent ddcdb1b4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -194,6 +194,19 @@
		LONG_S	$31, PT_R31(sp)
		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 */
#endif
		.set	pop
		.endm

@@ -324,6 +337,10 @@
		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