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-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) ;  Port on Texas Instruments TMS320C6x architecture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) ;  Copyright (C) 2004-2011 Texas Instruments Incorporated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) ;  Author: Aurelien Jacquiot (aurelien.jacquiot@virtuallogix.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) ;  Updated for 2.6.34: Mark Salter <msalter@redhat.com>
^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/sys.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <asm/asm-offsets.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include <asm/unistd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #include <asm/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) ; Registers naming
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define DP	B14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define SP	B15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #ifndef CONFIG_PREEMPTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define resume_kernel restore_all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	.altmacro
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	.macro MASK_INT reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	MVC	.S2	CSR,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	CLR	.S2	reg,0,0,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	MVC	.S2	reg,CSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	.macro UNMASK_INT reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	MVC	.S2	CSR,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	SET	.S2	reg,0,0,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	MVC	.S2	reg,CSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	.macro GET_THREAD_INFO reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	SHR	.S1X	SP,THREAD_SHIFT,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	SHL	.S1	reg,THREAD_SHIFT,reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	;;  This defines the normal kernel pt_regs layout.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	.macro SAVE_ALL __rp __tsr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	STW	.D2T2	B0,*SP--[2]		; save original B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	MVKL	.S2	current_ksp,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	MVKH	.S2	current_ksp,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	LDW	.D2T2	*B0,B1			; KSP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	NOP	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	STW	.D2T2	B1,*+SP[1]		; save original B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	XOR	.D2	SP,B1,B0		; (SP ^ KSP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	LDW	.D2T2	*+SP[1],B1		; restore B0/B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	LDW	.D2T2	*++SP[2],B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	SHR	.S2	B0,THREAD_SHIFT,B0	; 0 if already using kstack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)   [B0]	STDW	.D2T2	SP:DP,*--B1[1]		; user: save user sp/dp kstack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)   [B0]	MV	.S2	B1,SP			;    and switch to kstack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) ||[!B0] STDW	.D2T2	SP:DP,*--SP[1]		; kernel: save on current stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	SUBAW	.D2	SP,2,SP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	ADD	.D1X	SP,-8,A15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  ||	STDW	.D2T1	A15:A14,*SP--[16]	; save A15:A14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	STDW	.D2T2	B13:B12,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  ||	STDW	.D1T1	A13:A12,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)  ||	MVC	.S2	__rp,B13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	STDW	.D2T2	B11:B10,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  ||	STDW	.D1T1	A11:A10,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  ||	MVC	.S2	CSR,B12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	STDW	.D2T2	B9:B8,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)  ||	STDW	.D1T1	A9:A8,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)  ||	MVC	.S2	RILC,B11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	STDW	.D2T2	B7:B6,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80)  ||	STDW	.D1T1	A7:A6,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)  ||	MVC	.S2	ILC,B10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	STDW	.D2T2	B5:B4,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)  ||	STDW	.D1T1	A5:A4,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	STDW	.D2T2	B3:B2,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87)  ||	STDW	.D1T1	A3:A2,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)  ||	MVC	.S2	__tsr,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	STDW	.D2T2	B1:B0,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)  ||	STDW	.D1T1	A1:A0,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)  ||	MV	.S1X	B5,A5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	STDW	.D2T2	B31:B30,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  ||	STDW	.D1T1	A31:A30,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	STDW	.D2T2	B29:B28,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  ||	STDW	.D1T1	A29:A28,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	STDW	.D2T2	B27:B26,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  ||	STDW	.D1T1	A27:A26,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	STDW	.D2T2	B25:B24,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  ||	STDW	.D1T1	A25:A24,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	STDW	.D2T2	B23:B22,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)  ||	STDW	.D1T1	A23:A22,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	STDW	.D2T2	B21:B20,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  ||	STDW	.D1T1	A21:A20,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	STDW	.D2T2	B19:B18,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  ||	STDW	.D1T1	A19:A18,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	STDW	.D2T2	B17:B16,*SP--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)  ||	STDW	.D1T1	A17:A16,*A15--[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	STDW	.D2T2	B13:B12,*SP--[1]	; save PC and CSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	STDW	.D2T2	B11:B10,*SP--[1]	; save RILC and ILC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	STDW	.D2T1	A5:A4,*SP--[1]		; save TSR and orig A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	;; We left an unused word on the stack just above pt_regs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	;; It is used to save whether or not this frame is due to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	;; a syscall. It is cleared here, but the syscall handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	;; sets it to a non-zero value.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	MVK	.L2	0,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	STW	.D2T2	B1,*+SP(REGS__END+8)	; clear syscall flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	.macro RESTORE_ALL __rp __tsr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	LDDW	.D2T2	*++SP[1],B9:B8		; get TSR (B9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	LDDW	.D2T2	*++SP[1],B11:B10	; get RILC (B11) and ILC (B10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	LDDW	.D2T2	*++SP[1],B13:B12	; get PC (B13) and CSR (B12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	ADDAW	.D1X	SP,30,A15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	LDDW	.D1T1	*++A15[1],A17:A16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  ||	LDDW	.D2T2	*++SP[1],B17:B16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	LDDW	.D1T1	*++A15[1],A19:A18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)  ||	LDDW	.D2T2	*++SP[1],B19:B18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	LDDW	.D1T1	*++A15[1],A21:A20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)  ||	LDDW	.D2T2	*++SP[1],B21:B20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	LDDW	.D1T1	*++A15[1],A23:A22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)  ||	LDDW	.D2T2	*++SP[1],B23:B22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	LDDW	.D1T1	*++A15[1],A25:A24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)  ||	LDDW	.D2T2	*++SP[1],B25:B24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	LDDW	.D1T1	*++A15[1],A27:A26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)  ||	LDDW	.D2T2	*++SP[1],B27:B26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	LDDW	.D1T1	*++A15[1],A29:A28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)  ||	LDDW	.D2T2	*++SP[1],B29:B28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	LDDW	.D1T1	*++A15[1],A31:A30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)  ||	LDDW	.D2T2	*++SP[1],B31:B30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	LDDW	.D1T1	*++A15[1],A1:A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)  ||	LDDW	.D2T2	*++SP[1],B1:B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	LDDW	.D1T1	*++A15[1],A3:A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)  ||	LDDW	.D2T2	*++SP[1],B3:B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)  ||	MVC	.S2	B9,__tsr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	LDDW	.D1T1	*++A15[1],A5:A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)  ||	LDDW	.D2T2	*++SP[1],B5:B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)  ||	MVC	.S2	B11,RILC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	LDDW	.D1T1	*++A15[1],A7:A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)  ||	LDDW	.D2T2	*++SP[1],B7:B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)  ||	MVC	.S2	B10,ILC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	LDDW	.D1T1	*++A15[1],A9:A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)  ||	LDDW	.D2T2	*++SP[1],B9:B8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)  ||	MVC	.S2	B13,__rp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	LDDW	.D1T1	*++A15[1],A11:A10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)  ||	LDDW	.D2T2	*++SP[1],B11:B10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167)  ||	MVC	.S2	B12,CSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	LDDW	.D1T1	*++A15[1],A13:A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)  ||	LDDW	.D2T2	*++SP[1],B13:B12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	MV	.D2X	A15,SP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)  ||	MVKL	.S1	current_ksp,A15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	MVKH	.S1	current_ksp,A15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)  ||	ADDAW	.D1X	SP,6,A14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	STW	.D1T1	A14,*A15	; save kernel stack pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	LDDW	.D2T1	*++SP[1],A15:A14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	B	.S2	__rp		; return from interruption
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	LDDW	.D2T2	*+SP[1],SP:DP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	NOP	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	.section .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	;; Jump to schedule() then return to ret_from_exception
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) _reschedule:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	MVKL	.S1	schedule,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	MVKH	.S1	schedule,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	B	.S1	schedule
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	ADDKPC	.S2	ret_from_exception,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	;; Called before syscall handler when process is being debugged
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) tracesys_on:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	MVKL	.S1	syscall_trace_entry,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	MVKH	.S1	syscall_trace_entry,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	B	.S1	syscall_trace_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	ADDKPC	.S2	ret_from_syscall_trace,B3,3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	ADD	.S1X	8,SP,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ret_from_syscall_trace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	;; tracing returns (possibly new) syscall number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	MV	.D2X	A4,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  ||	MVK	.S2	__NR_syscalls,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	CMPLTU	.L2	B0,B1,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)  [!B1]	BNOP	.S2	ret_from_syscall_function,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)  ||	MVK	.S1	-ENOSYS,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	;; reload syscall args from (possibly modified) stack frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	;; and get syscall handler addr from sys_call_table:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	LDW	.D2T2	*+SP(REGS_B4+8),B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)  ||	MVKL	.S2	sys_call_table,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	LDW	.D2T1	*+SP(REGS_A6+8),A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)  ||	MVKH	.S2	sys_call_table,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	LDW	.D2T2	*+B1[B0],B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)  ||	MVKL	.S2	ret_from_syscall_function,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	LDW	.D2T2	*+SP(REGS_B6+8),B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)  ||	MVKH	.S2	ret_from_syscall_function,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	LDW	.D2T1	*+SP(REGS_A8+8),A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	LDW	.D2T2	*+SP(REGS_B8+8),B8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	NOP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	; B0 = sys_call_table[__NR_*]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	BNOP	.S2	B0,5			; branch to syscall handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  ||	LDW	.D2T1	*+SP(REGS_ORIG_A4+8),A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) syscall_exit_work:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	AND	.D1	_TIF_SYSCALL_TRACE,A2,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)  [!A0]	BNOP	.S1	work_pending,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)  [A0]	B	.S2	syscall_trace_exit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	ADDKPC	.S2	resume_userspace,B3,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	MVC	.S2	CSR,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	SET	.S2	B1,0,0,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	MVC	.S2	B1,CSR		; enable ints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) work_pending:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	AND	.D1	_TIF_NEED_RESCHED,A2,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)  [!A0]	BNOP	.S1	work_notifysig,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) work_resched:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	MVKL	.S1	schedule,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	MVKH	.S1	schedule,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	B	.S2X	A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	B	.S2	schedule
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	ADDKPC	.S2	work_rescheduled,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) work_rescheduled:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	;; make sure we don't miss an interrupt setting need_resched or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	;; sigpending between sampling and the rti
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	MASK_INT B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	GET_THREAD_INFO A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	LDW	.D1T1	*+A12(THREAD_INFO_FLAGS),A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	MVK	.S1	_TIF_WORK_MASK,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	MVK	.S1	_TIF_NEED_RESCHED,A3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	NOP	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	AND	.D1	A1,A2,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272)  ||	AND	.S1	A3,A2,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)  [!A0]	BNOP	.S1	restore_all,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)  [A1]	BNOP	.S1	work_resched,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) work_notifysig:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	;; enable interrupts for do_notify_resume()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	UNMASK_INT B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	B	.S2	do_notify_resume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	LDW	.D2T1	*+SP(REGS__END+8),A6 ; syscall flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	ADDKPC	.S2	resume_userspace,B3,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	ADD	.S1X	8,SP,A4		; pt_regs pointer is first arg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	MV	.D2X	A2,B4		; thread_info flags is second arg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	;; On C64x+, the return way from exception and interrupt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	;; is a little bit different
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) ENTRY(ret_from_exception)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) #ifdef CONFIG_PREEMPTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	MASK_INT B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) ENTRY(ret_from_interrupt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	;; Check if we are comming from user mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	LDW	.D2T2	*+SP(REGS_TSR+8),B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	MVK	.S2	0x40,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	NOP	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	AND	.D2	B0,B1,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)  [!B0]	BNOP	.S2	resume_kernel,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) resume_userspace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	;; make sure we don't miss an interrupt setting need_resched or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	;; sigpending between sampling and the rti
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	MASK_INT B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	GET_THREAD_INFO A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	LDW	.D1T1	*+A12(THREAD_INFO_FLAGS),A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	MVK	.S1	_TIF_WORK_MASK,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	MVK	.S1	_TIF_NEED_RESCHED,A3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	NOP	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	AND	.D1	A1,A2,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)  [A0]	BNOP	.S1	work_pending,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	BNOP	.S1	restore_all,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	;; System call handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	;; B0 = syscall number (in sys_call_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	;; A4,B4,A6,B6,A8,B8 = arguments of the syscall function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	;; A4 is the return value register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) system_call_saved:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	MVK	.L2	1,B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	STW	.D2T2	B2,*+SP(REGS__END+8)	; set syscall flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	MVC	.S2	B2,ECR			; ack the software exception
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	UNMASK_INT B2			; re-enable global IT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) system_call_saved_noack:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	;; Check system call number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	MVK	.S2	__NR_syscalls,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)  ||	MVKL	.S1	sys_ni_syscall,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	CMPLTU	.L2	B0,B1,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)  ||	MVKH	.S1	sys_ni_syscall,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	;; Check for ptrace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	GET_THREAD_INFO A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)  [!B1]	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)  [!B1]	B	.S2	sys_ni_syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)  [!B1]	ADDKPC	.S2	ret_from_syscall_function,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	;; Get syscall handler addr from sys_call_table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	;; call tracesys_on or call syscall handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	LDW	.D1T1	*+A12(THREAD_INFO_FLAGS),A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)  ||	MVKL	.S2	sys_call_table,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	MVKH	.S2	sys_call_table,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	LDW	.D2T2	*+B1[B0],B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	NOP	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	; A2 = thread_info flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	AND	.D1	_TIF_SYSCALL_TRACE,A2,A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360)  [A2]	BNOP	.S1	tracesys_on,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	;; B0 = _sys_call_table[__NR_*]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	B	.S2	B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	ADDKPC	.S2	ret_from_syscall_function,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) ret_from_syscall_function:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	STW	.D2T1	A4,*+SP(REGS_A4+8)	; save return value in A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 						; original A4 is in orig_A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) syscall_exit:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	;; make sure we don't miss an interrupt setting need_resched or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	;; sigpending between sampling and the rti
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	MASK_INT B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	LDW	.D1T1	*+A12(THREAD_INFO_FLAGS),A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	MVK	.S1	_TIF_ALLWORK_MASK,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	NOP	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	AND	.D1	A1,A2,A2 ; check for work to do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)  [A2]	BNOP	.S1	syscall_exit_work,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) restore_all:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	RESTORE_ALL NRP,NTSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	;; After a fork we jump here directly from resume,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	;; so that A4 contains the previous task structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) ENTRY(ret_from_fork)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	MVKL	.S1	schedule_tail,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	MVKH	.S1	schedule_tail,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	B	.S2	schedule_tail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	ADDKPC	.S2	ret_from_fork_2,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) ret_from_fork_2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	;; return 0 in A4 for child process
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	GET_THREAD_INFO A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	BNOP	.S2	syscall_exit,3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	MVK	.L2	0,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	STW	.D2T2	B0,*+SP(REGS_A4+8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) ENDPROC(ret_from_fork)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) ENTRY(ret_from_kernel_thread)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	MVKL	.S1	schedule_tail,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	MVKH	.S1	schedule_tail,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	B	.S2	schedule_tail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	LDW	.D2T2	*+SP(REGS_A0+8),B10 /* get fn  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	ADDKPC	.S2	0f,B3,3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	B	.S2	B10		   /* call fn */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	LDW	.D2T1	*+SP(REGS_A1+8),A4 /* get arg */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	ADDKPC	.S2	ret_from_fork_2,B3,3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ENDPROC(ret_from_kernel_thread)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	;; These are the interrupt handlers, responsible for calling c6x_do_IRQ()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	.macro SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	SAVE_ALL IRP,ITSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	.macro CALL_INT int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	MVKL	.S1	c6x_do_IRQ,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	MVKH	.S1	c6x_do_IRQ,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	BNOP	.S2X	A0,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	MVK	.S1	int,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	ADDAW	.D2	SP,2,B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	MVKL	.S2	ret_from_interrupt,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	MVKH	.S2	ret_from_interrupt,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	CALLP   .S2	c6x_do_IRQ,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)  ||	MVK	.S1	int,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)  ||	ADDAW	.D2	SP,2,B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	B	.S1	ret_from_interrupt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	.endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) ENTRY(_int4_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	CALL_INT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) ENDPROC(_int4_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) ENTRY(_int5_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	CALL_INT 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) ENDPROC(_int5_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) ENTRY(_int6_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	CALL_INT 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) ENDPROC(_int6_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) ENTRY(_int7_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	CALL_INT 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) ENDPROC(_int7_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) ENTRY(_int8_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	CALL_INT 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) ENDPROC(_int8_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) ENTRY(_int9_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	CALL_INT 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) ENDPROC(_int9_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) ENTRY(_int10_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	CALL_INT 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) ENDPROC(_int10_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) ENTRY(_int11_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	CALL_INT 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) ENDPROC(_int11_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) ENTRY(_int12_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	CALL_INT 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) ENDPROC(_int12_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) ENTRY(_int13_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 	CALL_INT 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) ENDPROC(_int13_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) ENTRY(_int14_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 	CALL_INT 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) ENDPROC(_int14_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) ENTRY(_int15_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 	SAVE_ALL_INT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	CALL_INT 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) ENDPROC(_int15_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	;; Handler for uninitialized and spurious interrupts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) ENTRY(_bad_interrupt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 	B	.S2	IRP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) ENDPROC(_bad_interrupt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	;; Entry for NMI/exceptions/syscall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) ENTRY(_nmi_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	SAVE_ALL NRP,NTSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	MVC	.S2	EFR,B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	CMPEQ	.L2	1,B2,B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519)  ||	MVC	.S2	TSR,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	CLR	.S2	B1,10,10,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	MVC	.S2	B1,TSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)  [!B2]	MVKL	.S1	process_exception,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)  [!B2]	MVKH	.S1	process_exception,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525)  [!B2]	B	.S2X	A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)  [!B2]	B	.S2	process_exception
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529)  [B2]	B	.S2	system_call_saved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)  [!B2]	ADDAW	.D2	SP,2,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)  [!B2]	MV	.D1X	B1,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	ADDKPC	.S2	ret_from_trap,B3,2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) ret_from_trap:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	MV	.D2X	A4,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)  [!B0]	BNOP	.S2	ret_from_exception,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	MVKL	.S2	system_call_saved_noack,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	MVKH	.S2	system_call_saved_noack,B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	LDW	.D2T2	*+SP(REGS_B0+8),B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	LDW	.D2T1	*+SP(REGS_A4+8),A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	LDW	.D2T2	*+SP(REGS_B4+8),B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	LDW	.D2T1	*+SP(REGS_A6+8),A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	LDW	.D2T2	*+SP(REGS_B6+8),B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	LDW	.D2T1	*+SP(REGS_A8+8),A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549)  ||	B	.S2	B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)  ||	B	.S2	system_call_saved_noack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	LDW	.D2T2	*+SP(REGS_B8+8),B8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	NOP	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) ENDPROC(_nmi_handler)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	;; Jump to schedule() then return to ret_from_isr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) #ifdef	CONFIG_PREEMPTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) resume_kernel:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	GET_THREAD_INFO A12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	LDW	.D1T1	*+A12(THREAD_INFO_PREEMPT_COUNT),A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 	NOP	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565)  [A1]	BNOP	.S2	restore_all,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) preempt_schedule:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	GET_THREAD_INFO A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 	LDW	.D1T1	*+A2(THREAD_INFO_FLAGS),A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 	MVKL	.S2	preempt_schedule_irq,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 	MVKH	.S2	preempt_schedule_irq,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 	NOP	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	NOP	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	AND	.D1	_TIF_NEED_RESCHED,A1,A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578)  [!A1]	BNOP	.S2	restore_all,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	B	.S2	B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	B	.S2	preempt_schedule_irq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	ADDKPC	.S2	preempt_schedule,B3,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) #endif /* CONFIG_PREEMPTION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) ENTRY(enable_exception)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) 	DINT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 	MVC	.S2	TSR,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	MVC	.S2	B3,NRP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 	MVK	.L2	0xc,B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	OR	.D2	B0,B1,B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	MVC	.S2	B0,TSR			;  Set GEE and XEN in TSR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	B	.S2	NRP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) ENDPROC(enable_exception)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	;; Special system calls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	;; return address is in B3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 	;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) ENTRY(sys_rt_sigreturn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 	ADD	.D1X	SP,8,A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605)  ||	MVKL	.S1	do_rt_sigreturn,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	MVKH	.S1	do_rt_sigreturn,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	BNOP	.S2X	A0,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609)  ||	B	.S2	do_rt_sigreturn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) ENDPROC(sys_rt_sigreturn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) ENTRY(sys_pread_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 	MV	.D2X	A8,B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617)  ||	MVKL	.S1	sys_pread64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	MVKH	.S1	sys_pread64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 	BNOP	.S2X	A0,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621)  ||	B	.S2	sys_pread64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) ENDPROC(sys_pread_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) ENTRY(sys_pwrite_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 	MV	.D2X	A8,B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629)  ||	MVKL	.S1	sys_pwrite64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 	MVKH	.S1	sys_pwrite64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) 	BNOP	.S2X	A0,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633)  ||	B	.S2	sys_pwrite64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) ENDPROC(sys_pwrite_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) ;; On Entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) ;;   A4 - path
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) ;;   B4 - offset_lo (LE), offset_hi (BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) ;;   A6 - offset_lo (BE), offset_hi (LE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) ENTRY(sys_truncate64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) #ifdef CONFIG_CPU_BIG_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	MV	.S2	B4,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 	MV	.D2X	A6,B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 	MV	.D2X	A6,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650)  ||	MVKL	.S1	sys_truncate64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 	MVKH	.S1	sys_truncate64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	BNOP	.S2X	A0,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)  ||	B	.S2	sys_truncate64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) ENDPROC(sys_truncate64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) ;; On Entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) ;;   A4 - fd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) ;;   B4 - offset_lo (LE), offset_hi (BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) ;;   A6 - offset_lo (BE), offset_hi (LE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) ENTRY(sys_ftruncate64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) #ifdef CONFIG_CPU_BIG_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 	MV	.S2	B4,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 	MV	.D2X	A6,B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 	MV	.D2X	A6,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671)  ||	MVKL	.S1	sys_ftruncate64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	MVKH	.S1	sys_ftruncate64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 	BNOP	.S2X	A0,5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675)  ||	B	.S2	sys_ftruncate64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 	NOP	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) ENDPROC(sys_ftruncate64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) ;; On Entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) ;;   A4 - fd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) ;;   B4 - offset_lo (LE), offset_hi (BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) ;;   A6 - offset_lo (BE), offset_hi (LE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) ;;   B6 - len_lo (LE), len_hi (BE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) ;;   A8 - len_lo (BE), len_hi (LE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) ;;   B8 - advice
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) ENTRY(sys_fadvise64_64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 	MVKL	.S1	sys_fadvise64_64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 	MVKH	.S1	sys_fadvise64_64,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 	BNOP	.S2X	A0,2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) 	B	.S2	sys_fadvise64_64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) 	NOP	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) #ifdef CONFIG_CPU_BIG_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) 	MV	.L2	B4,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698)  ||	MV	.D2X	A6,B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) 	MV	.L1	A8,A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700)  ||	MV	.D1X	B6,A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) 	MV	.D2X	A6,B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) 	MV	.L1	A8,A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704)  ||	MV	.D1X	B6,A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 	MV	.L2	B8,B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) ENDPROC(sys_fadvise64_64_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) ;; On Entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) ;;   A4 - fd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) ;;   B4 - mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) ;;   A6 - offset_hi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) ;;   B6 - offset_lo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) ;;   A8 - len_hi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) ;;   B8 - len_lo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) ENTRY(sys_fallocate_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) #ifdef CONFIG_C6X_BIG_KERNEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) 	MVKL	.S1	sys_fallocate,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) 	MVKH	.S1	sys_fallocate,A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) 	BNOP	.S2X	A0,1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) 	B	.S2	sys_fallocate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) 	NOP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) 	MV	.D1	A6,A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) 	MV	.D1X	B6,A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) 	MV	.D2X	A8,B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) 	MV	.D2	B8,B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) ENDPROC(sys_fallocate_c6x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) 	;; put this in .neardata for faster access when using DSBT mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) 	.section .neardata,"aw",@progbits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) 	.global	current_ksp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) 	.hidden	current_ksp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) current_ksp:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) 	.word	init_thread_union + THREAD_START_SP