Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * VISsave.S: Code for saving FPU register state for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *            VIS routines. One should not call this directly,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  *            but use macros provided in <asm/visasm.h>.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/asi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/page.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/ptrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <asm/visasm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	/* On entry: %o5=current FPRS value, %g7 is callers address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	/* May clobber %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	/* Nothing special need be done here to handle pre-emption, this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	 * FPU save/restore mechanism is already preemption safe.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	.align		32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ENTRY(VISenter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	ldub		[%g6 + TI_FPDEPTH], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	brnz,a,pn	%g1, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	 cmp		%g1, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	stb		%g0, [%g6 + TI_FPSAVED]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	stx		%fsr, [%g6 + TI_XFSR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 9:	jmpl		%g7 + %g0, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 1:	bne,pn		%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	 srl		%g1, 1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) vis1:	ldub		[%g6 + TI_FPSAVED], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	stx		%fsr, [%g6 + TI_XFSR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	or		%g3, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	stb		%g3, [%g6 + TI_FPSAVED]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	rd		%gsr, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	clr		%g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	ba,pt		%xcc, 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	 stx		%g3, [%g6 + TI_GSR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 2:	add		%g6, %g1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	mov		FPRS_DU | FPRS_DL | FPRS_FEF, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	sll		%g1, 3, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	stb		%o5, [%g3 + TI_FPSAVED]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	rd		%gsr, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	add		%g6, %g1, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	stx		%g2, [%g3 + TI_GSR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	add		%g6, %g1, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	stx		%fsr, [%g2 + TI_XFSR]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	sll		%g1, 5, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 3:	andcc		%o5, FPRS_DL|FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	be,pn		%icc, 9b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	 add		%g6, TI_FPREGS, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	andcc		%o5, FPRS_DL, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	be,pn		%icc, 4f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 	 add		%g6, TI_FPREGS+0x40, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	membar		#Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	stda		%f0, [%g2 + %g1] ASI_BLK_P
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	stda		%f16, [%g3 + %g1] ASI_BLK_P
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	membar		#Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	andcc		%o5, FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	be,pn		%icc, 5f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 4:	 add		%g1, 128, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	membar		#Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 	stda		%f32, [%g2 + %g1] ASI_BLK_P
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	stda		%f48, [%g3 + %g1] ASI_BLK_P
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 5:	membar		#Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 	ba,pt		%xcc, 80f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 	.align		32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 80:	jmpl		%g7 + %g0, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) ENDPROC(VISenter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) EXPORT_SYMBOL(VISenter)