GNU Linux-libre 6.1.90-gnu
[releases.git] / arch / csky / abiv1 / inc / abi / entry.h
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
36 1:
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
55 2:
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
91 1:
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
114 2:
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 */