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) /* bzero.S: Simple prefetching memset, bzero, and clear_user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *          implementations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2005 David S. Miller <davem@davemloft.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 	.text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) ENTRY(memset) /* %o0=buf, %o1=pat, %o2=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	and		%o1, 0xff, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	mov		%o2, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	sllx		%o3, 8, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	or		%g1, %o3, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	sllx		%o2, 16, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	or		%g1, %o2, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	sllx		%o2, 32, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	ba,pt		%xcc, 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	 or		%g1, %o2, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) ENTRY(__bzero) /* %o0=buf, %o1=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	clr		%o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 1:	mov		%o0, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	brz,pn		%o1, __bzero_done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	 cmp		%o1, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	bl,pn		%icc, __bzero_tiny
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	 prefetch	[%o0 + 0x000], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	andcc		%o0, 0x3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	be,pt		%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 1:	 stb		%o2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	add		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	andcc		%o0, 0x3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	bne,pn		%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	 sub		%o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 2:	andcc		%o0, 0x7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	be,pt		%icc, 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	 stw		%o2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	sub		%o1, 4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	add		%o0, 4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 3:	and		%o1, 0x38, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	cmp		%o1, 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	andn		%o1, 0x3f, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	bl,pn		%icc, 5f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	 and		%o1, 0x7, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	prefetch	[%o0 + 0x040], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	prefetch	[%o0 + 0x080], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	prefetch	[%o0 + 0x0c0], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	prefetch	[%o0 + 0x100], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	prefetch	[%o0 + 0x140], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 4:	prefetch	[%o0 + 0x180], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	stx		%o2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	stx		%o2, [%o0 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	stx		%o2, [%o0 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	stx		%o2, [%o0 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	stx		%o2, [%o0 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	stx		%o2, [%o0 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	stx		%o2, [%o0 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	stx		%o2, [%o0 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	subcc		%o4, 0x40, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	bne,pt		%icc, 4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	 add		%o0, 0x40, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	brz,pn		%g1, 6f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 5:	stx		%o2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	subcc		%g1, 8, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	bne,pt		%icc, 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	 add		%o0, 0x8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 6:	brz,pt		%o1, __bzero_done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) __bzero_tiny:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 1:	stb		%o2, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	subcc		%o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	bne,pt		%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	 add		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) __bzero_done:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	 mov		%o3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) ENDPROC(__bzero)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) ENDPROC(memset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) EXPORT_SYMBOL(__bzero)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) EXPORT_SYMBOL(memset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define EX_ST(x,y)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 98:	x,y;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	.section __ex_table,"a";\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	.align 4;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	.word 98b, __retl_o1;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	.text;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	.align 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) ENTRY(__clear_user) /* %o0=buf, %o1=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	brz,pn		%o1, __clear_user_done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	 cmp		%o1, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	bl,pn		%icc, __clear_user_tiny
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	 EX_ST(prefetcha [%o0 + 0x00] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	andcc		%o0, 0x3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	be,pt		%icc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 1:	 EX_ST(stba	%g0, [%o0 + 0x00] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	add		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	andcc		%o0, 0x3, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	bne,pn		%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	 sub		%o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 2:	andcc		%o0, 0x7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	be,pt		%icc, 3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	 EX_ST(stwa	%g0, [%o0 + 0x00] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	sub		%o1, 4, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	add		%o0, 4, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 3:	and		%o1, 0x38, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	cmp		%o1, 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	andn		%o1, 0x3f, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	bl,pn		%icc, 5f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	 and		%o1, 0x7, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	EX_ST(prefetcha	[%o0 + 0x040] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	EX_ST(prefetcha	[%o0 + 0x080] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	EX_ST(prefetcha	[%o0 + 0x0c0] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	EX_ST(prefetcha	[%o0 + 0x100] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	EX_ST(prefetcha	[%o0 + 0x140] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 4:	EX_ST(prefetcha	[%o0 + 0x180] %asi, #n_writes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	EX_ST(stxa	%g0, [%o0 + 0x00] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	EX_ST(stxa	%g0, [%o0 + 0x08] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	EX_ST(stxa	%g0, [%o0 + 0x10] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	EX_ST(stxa	%g0, [%o0 + 0x18] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	EX_ST(stxa	%g0, [%o0 + 0x20] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	EX_ST(stxa	%g0, [%o0 + 0x28] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	EX_ST(stxa	%g0, [%o0 + 0x30] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	EX_ST(stxa	%g0, [%o0 + 0x38] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	subcc		%o4, 0x40, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	bne,pt		%icc, 4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	 add		%o0, 0x40, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	brz,pn		%g1, 6f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 5:	EX_ST(stxa	%g0, [%o0 + 0x00] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	subcc		%g1, 8, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	bne,pt		%icc, 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	 add		%o0, 0x8, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 6:	brz,pt		%o1, __clear_user_done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __clear_user_tiny:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 1:	EX_ST(stba	%g0, [%o0 + 0x00] %asi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	subcc		%o1, 1, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	bne,pt		%icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	 add		%o0, 1, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __clear_user_done:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	 clr		%o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) ENDPROC(__clear_user)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) EXPORT_SYMBOL(__clear_user)