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 usp ss1
19
20.macro USPTOKSP
21	mtcr	sp, usp
22	mfcr	sp, ss0
23.endm
24
25.macro KSPTOUSP
26	mtcr	sp, ss0
27	mfcr	sp, usp
28.endm
29
30.macro	SAVE_ALL epc_inc
31	mtcr    r13, ss2
32	mfcr    r13, epsr
33	btsti   r13, 31
34	bt      1f
35	USPTOKSP
361:
37	subi    sp, 32
38	subi    sp, 32
39	subi    sp, 16
40	stw     r13, (sp, 12)
41
42	stw     lr, (sp, 4)
43
44	mfcr	lr, epc
45	movi	r13, \epc_inc
46	add	lr, r13
47	stw     lr, (sp, 8)
48
49	mov	lr, sp
50	addi	lr, 32
51	addi	lr, 32
52	addi	lr, 16
53	bt	2f
54	mfcr	lr, ss1
552:
56	stw     lr, (sp, 16)
57
58	stw     a0, (sp, 20)
59	stw     a0, (sp, 24)
60	stw     a1, (sp, 28)
61	stw     a2, (sp, 32)
62	stw     a3, (sp, 36)
63
64	addi	sp, 32
65	addi	sp, 8
66	mfcr    r13, ss2
67	stw	r6, (sp)
68	stw	r7, (sp, 4)
69	stw	r8, (sp, 8)
70	stw	r9, (sp, 12)
71	stw	r10, (sp, 16)
72	stw	r11, (sp, 20)
73	stw	r12, (sp, 24)
74	stw	r13, (sp, 28)
75	stw	r14, (sp, 32)
76	stw	r1, (sp, 36)
77	subi	sp, 32
78	subi	sp, 8
79.endm
80
81.macro	RESTORE_ALL
82	ldw	lr, (sp, 4)
83	ldw     a0, (sp, 8)
84	mtcr    a0, epc
85	ldw     a0, (sp, 12)
86	mtcr    a0, epsr
87	btsti   a0, 31
88	bt      1f
89	ldw     a0, (sp, 16)
90	mtcr	a0, ss1
911:
92	ldw     a0, (sp, 24)
93	ldw     a1, (sp, 28)
94	ldw     a2, (sp, 32)
95	ldw     a3, (sp, 36)
96
97	addi	sp, 32
98	addi	sp, 8
99	ldw	r6, (sp)
100	ldw	r7, (sp, 4)
101	ldw	r8, (sp, 8)
102	ldw	r9, (sp, 12)
103	ldw	r10, (sp, 16)
104	ldw	r11, (sp, 20)
105	ldw	r12, (sp, 24)
106	ldw	r13, (sp, 28)
107	ldw	r14, (sp, 32)
108	ldw	r1, (sp, 36)
109	addi	sp, 32
110	addi	sp, 8
111
112	bt      2f
113	KSPTOUSP
1142:
115	rte
116.endm
117
118.macro SAVE_SWITCH_STACK
119	subi    sp, 32
120	stm     r8-r15, (sp)
121.endm
122
123.macro RESTORE_SWITCH_STACK
124	ldm     r8-r15, (sp)
125	addi    sp, 32
126.endm
127
128/* MMU registers operators. */
129.macro RD_MIR	rx
130	cprcr   \rx, cpcr0
131.endm
132
133.macro RD_MEH	rx
134	cprcr   \rx, cpcr4
135.endm
136
137.macro RD_MCIR	rx
138	cprcr   \rx, cpcr8
139.endm
140
141.macro RD_PGDR  rx
142	cprcr   \rx, cpcr29
143.endm
144
145.macro WR_MEH	rx
146	cpwcr   \rx, cpcr4
147.endm
148
149.macro WR_MCIR	rx
150	cpwcr   \rx, cpcr8
151.endm
152
153.macro SETUP_MMU
154	/* Init psr and enable ee */
155	lrw	r6, DEFAULT_PSR_VALUE
156	mtcr    r6, psr
157	psrset  ee
158
159	/* Select MMU as co-processor */
160	cpseti	cp15
161
162	/*
163	 * cpcr30 format:
164	 * 31 - 29 | 28 - 4 | 3 | 2 | 1 | 0
165	 *   BA     Reserved  C   D   V
166	 */
167	cprcr	r6, cpcr30
168	lsri	r6, 29
169	lsli	r6, 29
170	addi	r6, 0xe
171	cpwcr	r6, cpcr30
172
173	movi	r6, 0
174	cpwcr	r6, cpcr31
175.endm
176#endif /* __ASM_CSKY_ENTRY_H */
177