1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright 2014, Michael Ellerman, IBM Corp. |
4 | */ |
5 | |
6 | #include <ppc-asm.h> |
7 | |
8 | .text |
9 | |
10 | FUNC_START(core_busy_loop) |
11 | stdu %r1, -168(%r1) |
12 | std r14, 160(%r1) |
13 | std r15, 152(%r1) |
14 | std r16, 144(%r1) |
15 | std r17, 136(%r1) |
16 | std r18, 128(%r1) |
17 | std r19, 120(%r1) |
18 | std r20, 112(%r1) |
19 | std r21, 104(%r1) |
20 | std r22, 96(%r1) |
21 | std r23, 88(%r1) |
22 | std r24, 80(%r1) |
23 | std r25, 72(%r1) |
24 | std r26, 64(%r1) |
25 | std r27, 56(%r1) |
26 | std r28, 48(%r1) |
27 | std r29, 40(%r1) |
28 | std r30, 32(%r1) |
29 | std r31, 24(%r1) |
30 | |
31 | li r3, 0x3030 |
32 | std r3, -96(%r1) |
33 | li r4, 0x4040 |
34 | std r4, -104(%r1) |
35 | li r5, 0x5050 |
36 | std r5, -112(%r1) |
37 | li r6, 0x6060 |
38 | std r6, -120(%r1) |
39 | li r7, 0x7070 |
40 | std r7, -128(%r1) |
41 | li r8, 0x0808 |
42 | std r8, -136(%r1) |
43 | li r9, 0x0909 |
44 | std r9, -144(%r1) |
45 | li r10, 0x1010 |
46 | std r10, -152(%r1) |
47 | li r11, 0x1111 |
48 | std r11, -160(%r1) |
49 | li r14, 0x1414 |
50 | std r14, -168(%r1) |
51 | li r15, 0x1515 |
52 | std r15, -176(%r1) |
53 | li r16, 0x1616 |
54 | std r16, -184(%r1) |
55 | li r17, 0x1717 |
56 | std r17, -192(%r1) |
57 | li r18, 0x1818 |
58 | std r18, -200(%r1) |
59 | li r19, 0x1919 |
60 | std r19, -208(%r1) |
61 | li r20, 0x2020 |
62 | std r20, -216(%r1) |
63 | li r21, 0x2121 |
64 | std r21, -224(%r1) |
65 | li r22, 0x2222 |
66 | std r22, -232(%r1) |
67 | li r23, 0x2323 |
68 | std r23, -240(%r1) |
69 | li r24, 0x2424 |
70 | std r24, -248(%r1) |
71 | li r25, 0x2525 |
72 | std r25, -256(%r1) |
73 | li r26, 0x2626 |
74 | std r26, -264(%r1) |
75 | li r27, 0x2727 |
76 | std r27, -272(%r1) |
77 | li r28, 0x2828 |
78 | std r28, -280(%r1) |
79 | li r29, 0x2929 |
80 | std r29, -288(%r1) |
81 | li r30, 0x3030 |
82 | li r31, 0x3131 |
83 | |
84 | li r3, 0 |
85 | 0: addi r3, r3, 1 |
86 | cmpwi r3, 100 |
87 | blt 0b |
88 | |
89 | /* Return 1 (fail) unless we get through all the checks */ |
90 | li r3, 1 |
91 | |
92 | /* Check none of our registers have been corrupted */ |
93 | cmpwi r4, 0x4040 |
94 | bne 1f |
95 | cmpwi r5, 0x5050 |
96 | bne 1f |
97 | cmpwi r6, 0x6060 |
98 | bne 1f |
99 | cmpwi r7, 0x7070 |
100 | bne 1f |
101 | cmpwi r8, 0x0808 |
102 | bne 1f |
103 | cmpwi r9, 0x0909 |
104 | bne 1f |
105 | cmpwi r10, 0x1010 |
106 | bne 1f |
107 | cmpwi r11, 0x1111 |
108 | bne 1f |
109 | cmpwi r14, 0x1414 |
110 | bne 1f |
111 | cmpwi r15, 0x1515 |
112 | bne 1f |
113 | cmpwi r16, 0x1616 |
114 | bne 1f |
115 | cmpwi r17, 0x1717 |
116 | bne 1f |
117 | cmpwi r18, 0x1818 |
118 | bne 1f |
119 | cmpwi r19, 0x1919 |
120 | bne 1f |
121 | cmpwi r20, 0x2020 |
122 | bne 1f |
123 | cmpwi r21, 0x2121 |
124 | bne 1f |
125 | cmpwi r22, 0x2222 |
126 | bne 1f |
127 | cmpwi r23, 0x2323 |
128 | bne 1f |
129 | cmpwi r24, 0x2424 |
130 | bne 1f |
131 | cmpwi r25, 0x2525 |
132 | bne 1f |
133 | cmpwi r26, 0x2626 |
134 | bne 1f |
135 | cmpwi r27, 0x2727 |
136 | bne 1f |
137 | cmpwi r28, 0x2828 |
138 | bne 1f |
139 | cmpwi r29, 0x2929 |
140 | bne 1f |
141 | cmpwi r30, 0x3030 |
142 | bne 1f |
143 | cmpwi r31, 0x3131 |
144 | bne 1f |
145 | |
146 | /* Load junk into all our registers before we reload them from the stack. */ |
147 | li r3, 0xde |
148 | li r4, 0xad |
149 | li r5, 0xbe |
150 | li r6, 0xef |
151 | li r7, 0xde |
152 | li r8, 0xad |
153 | li r9, 0xbe |
154 | li r10, 0xef |
155 | li r11, 0xde |
156 | li r14, 0xad |
157 | li r15, 0xbe |
158 | li r16, 0xef |
159 | li r17, 0xde |
160 | li r18, 0xad |
161 | li r19, 0xbe |
162 | li r20, 0xef |
163 | li r21, 0xde |
164 | li r22, 0xad |
165 | li r23, 0xbe |
166 | li r24, 0xef |
167 | li r25, 0xde |
168 | li r26, 0xad |
169 | li r27, 0xbe |
170 | li r28, 0xef |
171 | li r29, 0xdd |
172 | |
173 | ld r3, -96(%r1) |
174 | cmpwi r3, 0x3030 |
175 | bne 1f |
176 | ld r4, -104(%r1) |
177 | cmpwi r4, 0x4040 |
178 | bne 1f |
179 | ld r5, -112(%r1) |
180 | cmpwi r5, 0x5050 |
181 | bne 1f |
182 | ld r6, -120(%r1) |
183 | cmpwi r6, 0x6060 |
184 | bne 1f |
185 | ld r7, -128(%r1) |
186 | cmpwi r7, 0x7070 |
187 | bne 1f |
188 | ld r8, -136(%r1) |
189 | cmpwi r8, 0x0808 |
190 | bne 1f |
191 | ld r9, -144(%r1) |
192 | cmpwi r9, 0x0909 |
193 | bne 1f |
194 | ld r10, -152(%r1) |
195 | cmpwi r10, 0x1010 |
196 | bne 1f |
197 | ld r11, -160(%r1) |
198 | cmpwi r11, 0x1111 |
199 | bne 1f |
200 | ld r14, -168(%r1) |
201 | cmpwi r14, 0x1414 |
202 | bne 1f |
203 | ld r15, -176(%r1) |
204 | cmpwi r15, 0x1515 |
205 | bne 1f |
206 | ld r16, -184(%r1) |
207 | cmpwi r16, 0x1616 |
208 | bne 1f |
209 | ld r17, -192(%r1) |
210 | cmpwi r17, 0x1717 |
211 | bne 1f |
212 | ld r18, -200(%r1) |
213 | cmpwi r18, 0x1818 |
214 | bne 1f |
215 | ld r19, -208(%r1) |
216 | cmpwi r19, 0x1919 |
217 | bne 1f |
218 | ld r20, -216(%r1) |
219 | cmpwi r20, 0x2020 |
220 | bne 1f |
221 | ld r21, -224(%r1) |
222 | cmpwi r21, 0x2121 |
223 | bne 1f |
224 | ld r22, -232(%r1) |
225 | cmpwi r22, 0x2222 |
226 | bne 1f |
227 | ld r23, -240(%r1) |
228 | cmpwi r23, 0x2323 |
229 | bne 1f |
230 | ld r24, -248(%r1) |
231 | cmpwi r24, 0x2424 |
232 | bne 1f |
233 | ld r25, -256(%r1) |
234 | cmpwi r25, 0x2525 |
235 | bne 1f |
236 | ld r26, -264(%r1) |
237 | cmpwi r26, 0x2626 |
238 | bne 1f |
239 | ld r27, -272(%r1) |
240 | cmpwi r27, 0x2727 |
241 | bne 1f |
242 | ld r28, -280(%r1) |
243 | cmpwi r28, 0x2828 |
244 | bne 1f |
245 | ld r29, -288(%r1) |
246 | cmpwi r29, 0x2929 |
247 | bne 1f |
248 | |
249 | /* Load 0 (success) to return */ |
250 | li r3, 0 |
251 | |
252 | 1: ld r14, 160(%r1) |
253 | ld r15, 152(%r1) |
254 | ld r16, 144(%r1) |
255 | ld r17, 136(%r1) |
256 | ld r18, 128(%r1) |
257 | ld r19, 120(%r1) |
258 | ld r20, 112(%r1) |
259 | ld r21, 104(%r1) |
260 | ld r22, 96(%r1) |
261 | ld r23, 88(%r1) |
262 | ld r24, 80(%r1) |
263 | ld r25, 72(%r1) |
264 | ld r26, 64(%r1) |
265 | ld r27, 56(%r1) |
266 | ld r28, 48(%r1) |
267 | ld r29, 40(%r1) |
268 | ld r30, 32(%r1) |
269 | ld r31, 24(%r1) |
270 | addi %r1, %r1, 168 |
271 | blr |
272 | |