Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-block.git] / arch / csky / abiv1 / inc / abi / entry.h
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, 28
171         lsli    r6, 28
172         addi    r6, 0xe
173         cpwcr   r6, cpcr30
174
175         lsri    r6, 28
176         addi    r6, 2
177         lsli    r6, 28
178         addi    r6, 0xe
179         cpwcr   r6, cpcr31
180 .endm
181
182 .macro ANDI_R3 rx, imm
183         lsri    \rx, 3
184         andi    \rx, (\imm >> 3)
185 .endm
186 #endif /* __ASM_CSKY_ENTRY_H */