]> git.ipfire.org Git - people/ms/u-boot.git/blob - arch/blackfin/include/asm/entry.h
Add GPL-2.0+ SPDX-License-Identifier to source files
[people/ms/u-boot.git] / arch / blackfin / include / asm / entry.h
1 /*
2 * entry.h - routines for context saving and restoring (for interrupts/exceptions)
3 *
4 * Copyright (c) 2005-2007 Analog Devices Inc.
5 *
6 * SPDX-License-Identifier: GPL-2.0+
7 */
8
9 #ifndef __BLACKFIN_ENTRY_H
10 #define __BLACKFIN_ENTRY_H
11 #ifdef __ASSEMBLY__
12
13 #define SAVE_ALL_INT save_context_no_interrupts
14 #define SAVE_ALL_SYS save_context_no_interrupts
15 #define SAVE_CONTEXT save_context_with_interrupts
16
17 #define RESTORE_ALL restore_context_no_interrupts
18 #define RESTORE_ALL_SYS restore_context_no_interrupts
19 #define RESTORE_CONTEXT restore_context_with_interrupts
20
21 /*
22 * Code to save processor context.
23 * We even save the register which are preserved by a function call
24 * - r4, r5, r6, r7, p3, p4, p5
25 */
26 .macro save_context_with_interrupts
27 [--sp] = R0;
28 [--sp] = ( R7:0, P5:0 );
29 [--sp] = fp;
30 [--sp] = usp;
31
32 [--sp] = i0;
33 [--sp] = i1;
34 [--sp] = i2;
35 [--sp] = i3;
36
37 [--sp] = m0;
38 [--sp] = m1;
39 [--sp] = m2;
40 [--sp] = m3;
41
42 [--sp] = l0;
43 [--sp] = l1;
44 [--sp] = l2;
45 [--sp] = l3;
46
47 [--sp] = b0;
48 [--sp] = b1;
49 [--sp] = b2;
50 [--sp] = b3;
51 [--sp] = a0.x;
52 [--sp] = a0.w;
53 [--sp] = a1.x;
54 [--sp] = a1.w;
55
56 [--sp] = LC0;
57 [--sp] = LC1;
58 [--sp] = LT0;
59 [--sp] = LT1;
60 [--sp] = LB0;
61 [--sp] = LB1;
62
63 [--sp] = ASTAT;
64
65 [--sp] = r0; /* Skip reserved */
66 [--sp] = RETS;
67 [--sp] = RETI;
68 [--sp] = RETX;
69 [--sp] = RETN;
70 [--sp] = RETE;
71 [--sp] = SEQSTAT;
72 [--sp] = SYSCFG;
73 #ifdef CONFIG_CMD_KGDB
74 p0.l = lo(IPEND)
75 p0.h = hi(IPEND)
76 r0 = [p0];
77 #endif
78 [--sp] = r0; /* Skip IPEND as well. */
79 .endm
80
81 .macro save_context_no_interrupts
82 [--sp] = R0;
83 [--sp] = ( R7:0, P5:0 );
84 [--sp] = fp;
85 [--sp] = usp;
86
87 [--sp] = i0;
88 [--sp] = i1;
89 [--sp] = i2;
90 [--sp] = i3;
91
92 [--sp] = m0;
93 [--sp] = m1;
94 [--sp] = m2;
95 [--sp] = m3;
96
97 [--sp] = l0;
98 [--sp] = l1;
99 [--sp] = l2;
100 [--sp] = l3;
101
102 [--sp] = b0;
103 [--sp] = b1;
104 [--sp] = b2;
105 [--sp] = b3;
106 [--sp] = a0.x;
107 [--sp] = a0.w;
108 [--sp] = a1.x;
109 [--sp] = a1.w;
110
111 [--sp] = LC0;
112 [--sp] = LC1;
113 [--sp] = LT0;
114 [--sp] = LT1;
115 [--sp] = LB0;
116 [--sp] = LB1;
117
118 [--sp] = ASTAT;
119
120 [--sp] = r0; /* Skip reserved */
121 [--sp] = RETS;
122 r0 = RETI;
123 [--sp] = r0;
124 [--sp] = RETX;
125 [--sp] = RETN;
126 [--sp] = RETE;
127 [--sp] = SEQSTAT;
128 [--sp] = SYSCFG;
129 #ifdef CONFIG_CMD_KGDB
130 p0.l = lo(IPEND)
131 p0.h = hi(IPEND)
132 r0 = [p0];
133 #endif
134 [--sp] = r0; /* Skip IPEND as well. */
135 .endm
136
137 .macro restore_context_no_interrupts
138 sp += 4;
139 SYSCFG = [sp++];
140 SEQSTAT = [sp++];
141 RETE = [sp++];
142 RETN = [sp++];
143 RETX = [sp++];
144 r0 = [sp++];
145 RETI = r0;
146 RETS = [sp++];
147
148 sp += 4;
149
150 ASTAT = [sp++];
151
152 LB1 = [sp++];
153 LB0 = [sp++];
154 LT1 = [sp++];
155 LT0 = [sp++];
156 LC1 = [sp++];
157 LC0 = [sp++];
158
159 a1.w = [sp++];
160 a1.x = [sp++];
161 a0.w = [sp++];
162 a0.x = [sp++];
163 b3 = [sp++];
164 b2 = [sp++];
165 b1 = [sp++];
166 b0 = [sp++];
167
168 l3 = [sp++];
169 l2 = [sp++];
170 l1 = [sp++];
171 l0 = [sp++];
172
173 m3 = [sp++];
174 m2 = [sp++];
175 m1 = [sp++];
176 m0 = [sp++];
177
178 i3 = [sp++];
179 i2 = [sp++];
180 i1 = [sp++];
181 i0 = [sp++];
182
183 sp += 4;
184 fp = [sp++];
185
186 ( R7 : 0, P5 : 0) = [ SP ++ ];
187 sp += 4;
188 .endm
189
190 .macro restore_context_with_interrupts
191 sp += 4;
192 SYSCFG = [sp++];
193 SEQSTAT = [sp++];
194 RETE = [sp++];
195 RETN = [sp++];
196 RETX = [sp++];
197 RETI = [sp++];
198 RETS = [sp++];
199
200 sp += 4;
201
202 ASTAT = [sp++];
203
204 LB1 = [sp++];
205 LB0 = [sp++];
206 LT1 = [sp++];
207 LT0 = [sp++];
208 LC1 = [sp++];
209 LC0 = [sp++];
210
211 a1.w = [sp++];
212 a1.x = [sp++];
213 a0.w = [sp++];
214 a0.x = [sp++];
215 b3 = [sp++];
216 b2 = [sp++];
217 b1 = [sp++];
218 b0 = [sp++];
219
220 l3 = [sp++];
221 l2 = [sp++];
222 l1 = [sp++];
223 l0 = [sp++];
224
225 m3 = [sp++];
226 m2 = [sp++];
227 m1 = [sp++];
228 m0 = [sp++];
229
230 i3 = [sp++];
231 i2 = [sp++];
232 i1 = [sp++];
233 i0 = [sp++];
234
235 sp += 4;
236 fp = [sp++];
237
238 ( R7 : 0, P5 : 0) = [ SP ++ ];
239 sp += 4;
240 .endm
241
242 #endif
243 #endif