Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/csky/abiv2/inc/abi/entry.h
26481 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
3
#ifndef __ASM_CSKY_ENTRY_H
4
#define __ASM_CSKY_ENTRY_H
5
6
#include <asm/setup.h>
7
#include <abi/regdef.h>
8
9
#define LSAVE_PC 8
10
#define LSAVE_PSR 12
11
#define LSAVE_A0 24
12
#define LSAVE_A1 28
13
#define LSAVE_A2 32
14
#define LSAVE_A3 36
15
#define LSAVE_A4 40
16
#define LSAVE_A5 44
17
18
#define KSPTOUSP
19
#define USPTOKSP
20
21
#define usp cr<14, 1>
22
23
.macro SAVE_ALL epc_inc
24
subi sp, 152
25
stw tls, (sp, 0)
26
stw lr, (sp, 4)
27
28
RD_MEH lr
29
WR_MEH lr
30
31
mfcr lr, epc
32
movi tls, \epc_inc
33
add lr, tls
34
stw lr, (sp, 8)
35
36
mfcr lr, epsr
37
stw lr, (sp, 12)
38
btsti lr, 31
39
bf 1f
40
addi lr, sp, 152
41
br 2f
42
1:
43
mfcr lr, usp
44
2:
45
stw lr, (sp, 16)
46
47
stw a0, (sp, 20)
48
stw a0, (sp, 24)
49
stw a1, (sp, 28)
50
stw a2, (sp, 32)
51
stw a3, (sp, 36)
52
53
addi sp, 40
54
stm r4-r13, (sp)
55
56
addi sp, 40
57
stm r16-r30, (sp)
58
#ifdef CONFIG_CPU_HAS_HILO
59
mfhi lr
60
stw lr, (sp, 60)
61
mflo lr
62
stw lr, (sp, 64)
63
mfcr lr, cr14
64
stw lr, (sp, 68)
65
#endif
66
subi sp, 80
67
.endm
68
69
.macro RESTORE_ALL
70
ldw tls, (sp, 0)
71
ldw lr, (sp, 4)
72
ldw a0, (sp, 8)
73
mtcr a0, epc
74
ldw a0, (sp, 12)
75
mtcr a0, epsr
76
btsti a0, 31
77
ldw a0, (sp, 16)
78
mtcr a0, usp
79
mtcr a0, ss0
80
81
#ifdef CONFIG_CPU_HAS_HILO
82
ldw a0, (sp, 140)
83
mthi a0
84
ldw a0, (sp, 144)
85
mtlo a0
86
ldw a0, (sp, 148)
87
mtcr a0, cr14
88
#endif
89
90
ldw a0, (sp, 24)
91
ldw a1, (sp, 28)
92
ldw a2, (sp, 32)
93
ldw a3, (sp, 36)
94
95
addi sp, 40
96
ldm r4-r13, (sp)
97
addi sp, 40
98
ldm r16-r30, (sp)
99
addi sp, 72
100
bf 1f
101
mfcr sp, ss0
102
1:
103
rte
104
.endm
105
106
.macro SAVE_REGS_FTRACE
107
subi sp, 152
108
stw tls, (sp, 0)
109
stw lr, (sp, 4)
110
111
mfcr lr, psr
112
stw lr, (sp, 12)
113
114
addi lr, sp, 152
115
stw lr, (sp, 16)
116
117
stw a0, (sp, 20)
118
stw a0, (sp, 24)
119
stw a1, (sp, 28)
120
stw a2, (sp, 32)
121
stw a3, (sp, 36)
122
123
addi sp, 40
124
stm r4-r13, (sp)
125
126
addi sp, 40
127
stm r16-r30, (sp)
128
#ifdef CONFIG_CPU_HAS_HILO
129
mfhi lr
130
stw lr, (sp, 60)
131
mflo lr
132
stw lr, (sp, 64)
133
mfcr lr, cr14
134
stw lr, (sp, 68)
135
#endif
136
subi sp, 80
137
.endm
138
139
.macro RESTORE_REGS_FTRACE
140
ldw tls, (sp, 0)
141
142
#ifdef CONFIG_CPU_HAS_HILO
143
ldw a0, (sp, 140)
144
mthi a0
145
ldw a0, (sp, 144)
146
mtlo a0
147
ldw a0, (sp, 148)
148
mtcr a0, cr14
149
#endif
150
151
ldw a0, (sp, 24)
152
ldw a1, (sp, 28)
153
ldw a2, (sp, 32)
154
ldw a3, (sp, 36)
155
156
addi sp, 40
157
ldm r4-r13, (sp)
158
addi sp, 40
159
ldm r16-r30, (sp)
160
addi sp, 72
161
.endm
162
163
.macro SAVE_SWITCH_STACK
164
subi sp, 64
165
stm r4-r11, (sp)
166
stw lr, (sp, 32)
167
stw r16, (sp, 36)
168
stw r17, (sp, 40)
169
stw r26, (sp, 44)
170
stw r27, (sp, 48)
171
stw r28, (sp, 52)
172
stw r29, (sp, 56)
173
stw r30, (sp, 60)
174
#ifdef CONFIG_CPU_HAS_HILO
175
subi sp, 16
176
mfhi lr
177
stw lr, (sp, 0)
178
mflo lr
179
stw lr, (sp, 4)
180
mfcr lr, cr14
181
stw lr, (sp, 8)
182
#endif
183
.endm
184
185
.macro RESTORE_SWITCH_STACK
186
#ifdef CONFIG_CPU_HAS_HILO
187
ldw lr, (sp, 0)
188
mthi lr
189
ldw lr, (sp, 4)
190
mtlo lr
191
ldw lr, (sp, 8)
192
mtcr lr, cr14
193
addi sp, 16
194
#endif
195
ldm r4-r11, (sp)
196
ldw lr, (sp, 32)
197
ldw r16, (sp, 36)
198
ldw r17, (sp, 40)
199
ldw r26, (sp, 44)
200
ldw r27, (sp, 48)
201
ldw r28, (sp, 52)
202
ldw r29, (sp, 56)
203
ldw r30, (sp, 60)
204
addi sp, 64
205
.endm
206
207
/* MMU registers operators. */
208
.macro RD_MIR rx
209
mfcr \rx, cr<0, 15>
210
.endm
211
212
.macro RD_MEH rx
213
mfcr \rx, cr<4, 15>
214
.endm
215
216
.macro RD_MCIR rx
217
mfcr \rx, cr<8, 15>
218
.endm
219
220
.macro RD_PGDR rx
221
mfcr \rx, cr<29, 15>
222
.endm
223
224
.macro RD_PGDR_K rx
225
mfcr \rx, cr<28, 15>
226
.endm
227
228
.macro WR_MEH rx
229
mtcr \rx, cr<4, 15>
230
.endm
231
232
.macro WR_MCIR rx
233
mtcr \rx, cr<8, 15>
234
.endm
235
236
#ifdef CONFIG_PAGE_OFFSET_80000000
237
#define MSA_SET cr<30, 15>
238
#define MSA_CLR cr<31, 15>
239
#endif
240
241
#ifdef CONFIG_PAGE_OFFSET_A0000000
242
#define MSA_SET cr<31, 15>
243
#define MSA_CLR cr<30, 15>
244
#endif
245
246
.macro SETUP_MMU
247
/* Init psr and enable ee */
248
lrw r6, DEFAULT_PSR_VALUE
249
mtcr r6, psr
250
psrset ee
251
252
/* Invalid I/Dcache BTB BHT */
253
movi r6, 7
254
lsli r6, 16
255
addi r6, (1<<4) | 3
256
mtcr r6, cr17
257
258
/* Invalid all TLB */
259
bgeni r6, 26
260
mtcr r6, cr<8, 15> /* Set MCIR */
261
262
/* Check MMU on/off */
263
mfcr r6, cr18
264
btsti r6, 0
265
bt 1f
266
267
/* MMU off: setup mapping tlb entry */
268
movi r6, 0
269
mtcr r6, cr<6, 15> /* Set MPR with 4K page size */
270
271
grs r6, 1f /* Get current pa by PC */
272
bmaski r7, (PAGE_SHIFT + 1) /* r7 = 0x1fff */
273
andn r6, r7
274
mtcr r6, cr<4, 15> /* Set MEH */
275
276
mov r8, r6
277
movi r7, 0x00000006
278
or r8, r7
279
mtcr r8, cr<2, 15> /* Set MEL0 */
280
movi r7, 0x00001006
281
or r8, r7
282
mtcr r8, cr<3, 15> /* Set MEL1 */
283
284
bgeni r8, 28
285
mtcr r8, cr<8, 15> /* Set MCIR to write TLB */
286
287
br 2f
288
1:
289
/*
290
* MMU on: use origin MSA value from bootloader
291
*
292
* cr<30/31, 15> MSA register format:
293
* 31 - 29 | 28 - 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
294
* BA Reserved SH WA B SO SEC C D V
295
*/
296
mfcr r6, MSA_SET /* Get MSA */
297
2:
298
lsri r6, 29
299
lsli r6, 29
300
addi r6, 0x1ce
301
mtcr r6, MSA_SET /* Set MSA */
302
303
movi r6, 0
304
mtcr r6, MSA_CLR /* Clr MSA */
305
306
/* enable MMU */
307
mfcr r6, cr18
308
bseti r6, 0
309
mtcr r6, cr18
310
311
jmpi 3f /* jump to va */
312
3:
313
.endm
314
#endif /* __ASM_CSKY_ENTRY_H */
315
316