xref: /openbmc/linux/arch/csky/abiv1/inc/abi/entry.h (revision 165f2d28)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
3 
4 #ifndef __ASM_CSKY_ENTRY_H
5 #define __ASM_CSKY_ENTRY_H
6 
7 #include <asm/setup.h>
8 #include <abi/regdef.h>
9 
10 #define LSAVE_PC	8
11 #define LSAVE_PSR	12
12 #define LSAVE_A0	24
13 #define LSAVE_A1	28
14 #define LSAVE_A2	32
15 #define LSAVE_A3	36
16 #define LSAVE_A4	40
17 #define LSAVE_A5	44
18 
19 #define usp ss1
20 
21 .macro USPTOKSP
22 	mtcr	sp, usp
23 	mfcr	sp, ss0
24 .endm
25 
26 .macro KSPTOUSP
27 	mtcr	sp, ss0
28 	mfcr	sp, usp
29 .endm
30 
31 .macro	SAVE_ALL epc_inc
32 	mtcr    r13, ss2
33 	mfcr    r13, epsr
34 	btsti   r13, 31
35 	bt      1f
36 	USPTOKSP
37 1:
38 	subi    sp, 32
39 	subi    sp, 32
40 	subi    sp, 16
41 	stw     r13, (sp, 12)
42 
43 	stw     lr, (sp, 4)
44 
45 	mfcr	lr, epc
46 	movi	r13, \epc_inc
47 	add	lr, r13
48 	stw     lr, (sp, 8)
49 
50 	mov	lr, sp
51 	addi	lr, 32
52 	addi	lr, 32
53 	addi	lr, 16
54 	bt	2f
55 	mfcr	lr, ss1
56 2:
57 	stw     lr, (sp, 16)
58 
59 	stw     a0, (sp, 20)
60 	stw     a0, (sp, 24)
61 	stw     a1, (sp, 28)
62 	stw     a2, (sp, 32)
63 	stw     a3, (sp, 36)
64 
65 	addi	sp, 32
66 	addi	sp, 8
67 	mfcr    r13, ss2
68 	stw	r6, (sp)
69 	stw	r7, (sp, 4)
70 	stw	r8, (sp, 8)
71 	stw	r9, (sp, 12)
72 	stw	r10, (sp, 16)
73 	stw	r11, (sp, 20)
74 	stw	r12, (sp, 24)
75 	stw	r13, (sp, 28)
76 	stw	r14, (sp, 32)
77 	stw	r1, (sp, 36)
78 	subi	sp, 32
79 	subi	sp, 8
80 .endm
81 
82 .macro	RESTORE_ALL
83 	psrclr  ie
84 	ldw	lr, (sp, 4)
85 	ldw     a0, (sp, 8)
86 	mtcr    a0, epc
87 	ldw     a0, (sp, 12)
88 	mtcr    a0, epsr
89 	btsti   a0, 31
90 	bt      1f
91 	ldw     a0, (sp, 16)
92 	mtcr	a0, ss1
93 1:
94 	ldw     a0, (sp, 24)
95 	ldw     a1, (sp, 28)
96 	ldw     a2, (sp, 32)
97 	ldw     a3, (sp, 36)
98 
99 	addi	sp, 32
100 	addi	sp, 8
101 	ldw	r6, (sp)
102 	ldw	r7, (sp, 4)
103 	ldw	r8, (sp, 8)
104 	ldw	r9, (sp, 12)
105 	ldw	r10, (sp, 16)
106 	ldw	r11, (sp, 20)
107 	ldw	r12, (sp, 24)
108 	ldw	r13, (sp, 28)
109 	ldw	r14, (sp, 32)
110 	ldw	r1, (sp, 36)
111 	addi	sp, 32
112 	addi	sp, 8
113 
114 	bt      2f
115 	KSPTOUSP
116 2:
117 	rte
118 .endm
119 
120 .macro SAVE_SWITCH_STACK
121 	subi    sp, 32
122 	stm     r8-r15, (sp)
123 .endm
124 
125 .macro RESTORE_SWITCH_STACK
126 	ldm     r8-r15, (sp)
127 	addi    sp, 32
128 .endm
129 
130 /* MMU registers operators. */
131 .macro RD_MIR	rx
132 	cprcr   \rx, cpcr0
133 .endm
134 
135 .macro RD_MEH	rx
136 	cprcr   \rx, cpcr4
137 .endm
138 
139 .macro RD_MCIR	rx
140 	cprcr   \rx, cpcr8
141 .endm
142 
143 .macro RD_PGDR  rx
144 	cprcr   \rx, cpcr29
145 .endm
146 
147 .macro WR_MEH	rx
148 	cpwcr   \rx, cpcr4
149 .endm
150 
151 .macro WR_MCIR	rx
152 	cpwcr   \rx, cpcr8
153 .endm
154 
155 .macro SETUP_MMU
156 	/* Init psr and enable ee */
157 	lrw	r6, DEFAULT_PSR_VALUE
158 	mtcr    r6, psr
159 	psrset  ee
160 
161 	/* Select MMU as co-processor */
162 	cpseti	cp15
163 
164 	/*
165 	 * cpcr30 format:
166 	 * 31 - 29 | 28 - 4 | 3 | 2 | 1 | 0
167 	 *   BA     Reserved  C   D   V
168 	 */
169 	cprcr	r6, cpcr30
170 	lsri	r6, 29
171 	lsli	r6, 29
172 	addi	r6, 0xe
173 	cpwcr	r6, cpcr30
174 
175 	movi	r6, 0
176 	cpwcr	r6, cpcr31
177 .endm
178 
179 .macro ANDI_R3 rx, imm
180 	lsri	\rx, 3
181 	andi	\rx, (\imm >> 3)
182 .endm
183 #endif /* __ASM_CSKY_ENTRY_H */
184