Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * OpenSPARC T2 Processor File: err_tsa_diag.s | |
5 | * Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
6 | * 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
7 | * | |
8 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License as published by | |
12 | * the Free Software Foundation; version 2 of the License. | |
13 | * | |
14 | * This program is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | * GNU General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License | |
20 | * along with this program; if not, write to the Free Software | |
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 | * | |
23 | * For the avoidance of doubt, and except that if any non-GPL license | |
24 | * choice is available it will apply instead, Sun elects to use only | |
25 | * the General Public License version 2 (GPLv2) at this time for any | |
26 | * software where a choice of GPL license versions is made | |
27 | * available with the language indicating that GPLv2 or any later version | |
28 | * may be used, or where a choice of which version of the GPL is applied is | |
29 | * otherwise unspecified. | |
30 | * | |
31 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
32 | * CA 95054 USA or visit www.sun.com if you need additional information or | |
33 | * have any questions. | |
34 | * | |
35 | * | |
36 | * ========== Copyright Header End ============================================ | |
37 | */ | |
38 | #define MY_HP_TEXT_PA 0x1050000000 | |
39 | #define MY_HP_DATA_PA 0x1050001000 | |
40 | ||
41 | #define ASI_PRIMARY_CONTEXT_0 0x21 | |
42 | #define ASI_ITLB_DATA_IN_REG 0x54 | |
43 | #define ASI_DMMU_TAG_ACCESS 0x58 | |
44 | #define ASI_DTLB_DATA_IN_REG 0x5c | |
45 | #define ASI_DMMU_SFAR 0x58 | |
46 | ||
47 | ||
48 | #define MY_USER_TEXT_VA000 0x7a000000 | |
49 | #define MY_USER_TEXT_RA000 0x7b000000 | |
50 | #define MY_USER_TEXT_PA000 0x107b000000 | |
51 | #define MY_USER_TEXT_VA001 0x7a010000 | |
52 | #define MY_USER_TEXT_RA001 0x7b010000 | |
53 | #define MY_USER_TEXT_PA001 0x107b010000 | |
54 | #define MY_USER_TEXT_VA002 0x7a020000 | |
55 | #define MY_USER_TEXT_RA002 0x7b020000 | |
56 | #define MY_USER_TEXT_PA002 0x107b020000 | |
57 | #define MY_USER_TEXT_VA003 0x7a030000 | |
58 | #define MY_USER_TEXT_RA003 0x7b030000 | |
59 | #define MY_USER_TEXT_PA003 0x107b030000 | |
60 | #define MY_USER_TEXT_VA004 0x7a040000 | |
61 | #define MY_USER_TEXT_RA004 0x7b040000 | |
62 | #define MY_USER_TEXT_PA004 0x107b040000 | |
63 | #define MY_USER_TEXT_VA005 0x7a050000 | |
64 | #define MY_USER_TEXT_RA005 0x7b050000 | |
65 | #define MY_USER_TEXT_PA005 0x107b050000 | |
66 | #define MY_USER_TEXT_VA006 0x7a060000 | |
67 | #define MY_USER_TEXT_RA006 0x7b060000 | |
68 | #define MY_USER_TEXT_PA006 0x107b060000 | |
69 | #define MY_USER_TEXT_VA007 0x7a070000 | |
70 | #define MY_USER_TEXT_RA007 0x7b070000 | |
71 | #define MY_USER_TEXT_PA007 0x107b070000 | |
72 | #define MY_USER_TEXT_VA008 0x7a080000 | |
73 | #define MY_USER_TEXT_RA008 0x7b080000 | |
74 | #define MY_USER_TEXT_PA008 0x107b080000 | |
75 | #define MY_USER_TEXT_VA009 0x7a090000 | |
76 | #define MY_USER_TEXT_RA009 0x7b090000 | |
77 | #define MY_USER_TEXT_PA009 0x107b090000 | |
78 | #define MY_USER_TEXT_VA010 0x7a0a0000 | |
79 | #define MY_USER_TEXT_RA010 0x7b0a0000 | |
80 | #define MY_USER_TEXT_PA010 0x107b0a0000 | |
81 | #define MY_USER_TEXT_VA011 0x7a0b0000 | |
82 | #define MY_USER_TEXT_RA011 0x7b0b0000 | |
83 | #define MY_USER_TEXT_PA011 0x107b0b0000 | |
84 | #define MY_USER_TEXT_VA012 0x7a0c0000 | |
85 | #define MY_USER_TEXT_RA012 0x7b0c0000 | |
86 | #define MY_USER_TEXT_PA012 0x107b0c0000 | |
87 | #define MY_USER_TEXT_VA013 0x7a0d0000 | |
88 | #define MY_USER_TEXT_RA013 0x7b0d0000 | |
89 | #define MY_USER_TEXT_PA013 0x107b0d0000 | |
90 | ||
91 | #define MY_USER_DATA_VA000 0x6a000000 | |
92 | #define MY_USER_DATA_RA000 0x6b000000 | |
93 | #define MY_USER_DATA_PA000 0x106b000000 | |
94 | #define MY_USER_DATA_VA001 0x6a010000 | |
95 | #define MY_USER_DATA_RA001 0x6b010000 | |
96 | #define MY_USER_DATA_PA001 0x106b010000 | |
97 | #define MY_USER_DATA_VA002 0x6a020000 | |
98 | #define MY_USER_DATA_RA002 0x6b020000 | |
99 | #define MY_USER_DATA_PA002 0x106b020000 | |
100 | #define MY_USER_DATA_VA003 0x6a030000 | |
101 | #define MY_USER_DATA_RA003 0x6b030000 | |
102 | #define MY_USER_DATA_PA003 0x106b030000 | |
103 | #define MY_USER_DATA_VA004 0x6a040000 | |
104 | #define MY_USER_DATA_RA004 0x6b040000 | |
105 | #define MY_USER_DATA_PA004 0x106b040000 | |
106 | #define MY_USER_DATA_VA005 0x6a050000 | |
107 | #define MY_USER_DATA_RA005 0x6b050000 | |
108 | #define MY_USER_DATA_PA005 0x106b050000 | |
109 | #define MY_USER_DATA_VA006 0x6a060000 | |
110 | #define MY_USER_DATA_RA006 0x6b060000 | |
111 | #define MY_USER_DATA_PA006 0x106b060000 | |
112 | #define MY_USER_DATA_VA007 0x6a070000 | |
113 | #define MY_USER_DATA_RA007 0x6b070000 | |
114 | #define MY_USER_DATA_PA007 0x106b070000 | |
115 | #define MY_USER_DATA_VA008 0x6a080000 | |
116 | #define MY_USER_DATA_RA008 0x6b080000 | |
117 | #define MY_USER_DATA_PA008 0x106b080000 | |
118 | #define MY_USER_DATA_VA009 0x6a090000 | |
119 | #define MY_USER_DATA_RA009 0x6b090000 | |
120 | #define MY_USER_DATA_PA009 0x106b090000 | |
121 | #define MY_USER_DATA_VA010 0x6a0a0000 | |
122 | #define MY_nc_DATA_RA010 0xb06b0a0000 | |
123 | #define MY_nc_DATA_PA010 0xc06b0a0000 | |
124 | #define MY_USER_DATA_VA011 0x6a0b0000 | |
125 | #define MY_nc_DATA_RA011 0xb06b0b0000 | |
126 | #define MY_nc_DATA_PA011 0xc06b0b0000 | |
127 | #define MY_USER_DATA_VA012 0x6a0c0000 | |
128 | #define MY_nc_DATA_RA012 0xb06b0c0000 | |
129 | #define MY_nc_DATA_PA012 0xc06b0c0000 | |
130 | #define MY_USER_DATA_VA013 0x6a0d0000 | |
131 | #define MY_nc_DATA_RA013 0xb06b0d0000 | |
132 | #define MY_nc_DATA_PA013 0xc06b0d0000 | |
133 | ||
134 | #define IMDU_ERR_EN 0xa0000000 | |
135 | #define IMTU_ERR_EN 0x90000000 | |
136 | #define DMDU_ERR_EN 0x88000000 | |
137 | #define DMTU_ERR_EN 0x84000000 | |
138 | #define IRCU_ERR_EN 0x82000000 | |
139 | #define FRCU_ERR_EN 0x81000000 | |
140 | #define SCAU_ERR_EN 0x80800000 | |
141 | #define TCCU_ERR_EN 0x80400000 | |
142 | #define TSA_ERR_EN 0x80200000 | |
143 | #define MRAU_ERR_EN 0x80100000 | |
144 | #define STAU_ERR_EN 0x80080000 | |
145 | #define STDU_ERR_EN 0x80020000 | |
146 | ||
147 | #define ASI_DESR 0x4c | |
148 | #define ASI_DFESR 0x4c | |
149 | #define DFESR_VA 0x8 | |
150 | #define ASI_DSFSR 0x58 | |
151 | #define ASI_ISFSR 0x50 | |
152 | #define SFSR_VA 0x18 | |
153 | #define ASI_SFAR 0x58 | |
154 | #define SFAR_VA 0x20 | |
155 | #define ASI_ERR_INJ 0x43 | |
156 | #define ASI_CETER 0x4C | |
157 | #define CETER_VA 0x18 | |
158 | #define ASI_CERER 0x4C | |
159 | #define CERER_VA 0x10 | |
160 | ||
161 | #define CERER_SBDPC 0x400 | |
162 | #define CETER_DHCCE 0x1000000000000000 | |
163 | #define CETER_DE 0x2000000000000000 | |
164 | #define CETER_PSCCE 0x4000000000000000 | |
165 | ||
166 | #define MAIN_PAGE_HV_ALSO | |
167 | ||
168 | #define H_HT0_Internal_Processor_Error_0x29 | |
169 | #define SUN_H_HT0_Internal_Processor_Error_0x29 \ | |
170 | ba INT_PROC_ERR_HANDLER; \ | |
171 | nop;nop;nop;nop;nop;nop;nop | |
172 | ||
173 | #define My_RED_Mode_Other_Reset | |
174 | #define My_RED_Mode_Other_Reset \ | |
175 | add %g0, 1, %i0; \ | |
176 | nop;done;nop;nop;nop;nop;nop;nop | |
177 | ||
178 | #define My_Watchdog_Reset | |
179 | #define My_Watchdog_Reset \ | |
180 | wrpr %o2, %g0, %tnpc;\ | |
181 | sub %o2, 4, %g1;\ | |
182 | wrpr %g1, %g0, %tpc;\ | |
183 | add %g0, 1, %i0; \ | |
184 | nop;done;nop;nop | |
185 | ||
186 | #include "hboot.s" | |
187 | ||
188 | /************************************************************************ | |
189 | Test case: | |
190 | ************************************************************************/ | |
191 | ||
192 | .text | |
193 | .global main | |
194 | .global CLEAR_TSAC | |
195 | ||
196 | main: /* test begin */ | |
197 | ta T_CHANGE_HPRIV | |
198 | ||
199 | !! set CERER.TSAC | |
200 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
201 | add %g0, CERER_VA, %g3 | |
202 | ||
203 | stxa %o2, [%g3]ASI_CERER | |
204 | ||
205 | !! set CETER.PSCCE | |
206 | setx CETER_PSCCE, %l0, %o2 | |
207 | add %g0, CETER_VA, %g3 | |
208 | stxa %o2, [%g3]ASI_CETER | |
209 | ||
210 | !! change to TL1 | |
211 | !! add %g0, 1, %l2 | |
212 | !! wrpr %g0, %l2, %tl | |
213 | !! wrpr %g0, %g1, %tstate | |
214 | !! ldxa [%g0]0x5b, %g2 !! read ecc before err injection | |
215 | ||
216 | !! Enable error injection | |
217 | !! setx TSA_ERR_EN, %l0, %l5 | |
218 | !! or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
219 | !! stxa %l5, [%g0]ASI_ERR_INJ | |
220 | ||
221 | add %g0, 1, %l1 | |
222 | add %g0, 1, %l2 | |
223 | add %g0, 1, %l3 !!err injection mask | |
224 | ||
225 | setx CLEAR_TSAC, %g1, %g4 | |
226 | ||
227 | mov %g0, %o3 | |
228 | setx user_code_begin_000, %g1, %g2 | |
229 | jmp %g2 | |
230 | nop | |
231 | ||
232 | CLEAR_TSAC: | |
233 | !! disable error injection | |
234 | !!stxa %g0, [%g0]ASI_ERR_INJ | |
235 | !! disable error detection | |
236 | add %g0, CERER_VA, %g3 | |
237 | stxa %g0, [%g3]ASI_CERER | |
238 | ||
239 | wrpr %g0, 0x1, %tl | |
240 | wrpr %g0, %g0, %tstate | |
241 | wrpr %g0, %g0, %tt | |
242 | wrpr %g0, %g0, %tpc | |
243 | wrpr %g0, %g0, %tnpc | |
244 | wrhpr %g0, %g0, %htstate | |
245 | ||
246 | wrpr %g0, 0x2, %tl | |
247 | wrpr %g0, %g0, %tstate | |
248 | wrpr %g0, %g0, %tt | |
249 | wrpr %g0, %g0, %tpc | |
250 | wrpr %g0, %g0, %tnpc | |
251 | wrhpr %g0, %g0, %htstate | |
252 | ||
253 | wrpr %g0, 0x3, %tl | |
254 | wrpr %g0, %g0, %tstate | |
255 | wrpr %g0, %g0, %tt | |
256 | wrpr %g0, %g0, %tpc | |
257 | wrpr %g0, %g0, %tnpc | |
258 | wrhpr %g0, %g0, %htstate | |
259 | ||
260 | wrpr %g0, 0x4, %tl | |
261 | wrpr %g0, %g0, %tstate | |
262 | wrpr %g0, %g0, %tt | |
263 | wrpr %g0, %g0, %tpc | |
264 | wrpr %g0, %g0, %tnpc | |
265 | wrhpr %g0, %g0, %htstate | |
266 | ||
267 | wrpr %g0, 0x5, %tl | |
268 | wrpr %g0, %g0, %tstate | |
269 | wrpr %g0, %g0, %tt | |
270 | wrpr %g0, %g0, %tpc | |
271 | wrpr %g0, %g0, %tnpc | |
272 | wrhpr %g0, %g0, %htstate | |
273 | ||
274 | /* | |
275 | wrpr %g0, 0x6, %tl | |
276 | wrpr %g0, %g0, %tstate | |
277 | wrpr %g0, %g0, %tt | |
278 | wrpr %g0, %g0, %tpc | |
279 | wrpr %g0, %g0, %tnpc | |
280 | wrhpr %g0, %g0, %htstate | |
281 | */ | |
282 | jmp %g5 | |
283 | nop | |
284 | ||
285 | EXIT_BAD | |
286 | ||
287 | /************************************************************************ | |
288 | Test case data start | |
289 | ************************************************************************/ | |
290 | .data | |
291 | .global user_data_start | |
292 | user_data_start: | |
293 | .word 0x12345678 | |
294 | .word 0x9a9b9c9d | |
295 | .word 0x00000000 | |
296 | .word 0xffffffff | |
297 | ||
298 | !#*********************************************************************** | |
299 | ||
300 | SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000 | |
301 | attr_text { | |
302 | Name = .My_User_Section_4v000, | |
303 | part_0_ctx_nonzero_tsb_config_2, | |
304 | VA = MY_USER_TEXT_VA000, | |
305 | RA = MY_USER_TEXT_RA000, | |
306 | PA = ra2pa(MY_USER_TEXT_RA000, 0), | |
307 | TTE_Context = PCONTEXT, | |
308 | TTE_V = 1, | |
309 | TTE_NFO = 0, | |
310 | TTE_L = 0, | |
311 | TTE_Soft = 0, | |
312 | TTE_IE = 0, | |
313 | TTE_E = 0, | |
314 | TTE_CP = 1, | |
315 | TTE_CV = 0, | |
316 | TTE_P = 0, | |
317 | TTE_EP = 1, | |
318 | TTE_W = 0, | |
319 | TTE_SW1 = 0, | |
320 | TTE_SW0 = 0, | |
321 | TTE_RSVD1 = 0, | |
322 | TTE_Size = 0, | |
323 | } | |
324 | attr_text { | |
325 | NAME = .My_User_Section_4v000, | |
326 | hypervisor | |
327 | } | |
328 | !!Inject error in all the entries, by writing to tstate reg. | |
329 | .text | |
330 | .global user_code_begin_000 | |
331 | user_code_begin_000: | |
332 | add %g0, 1, %l1 | |
333 | add %g0, 1, %l2 | |
334 | add %g0, 0x55, %g1 | |
335 | ||
336 | mov %g0, %l6 | |
337 | ||
338 | LOOP_000: | |
339 | setx TSA_ERR_EN, %l0, %l5 | |
340 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
341 | stxa %l5, [%g0]ASI_ERR_INJ | |
342 | !! change TL | |
343 | wrpr %g0, %l2, %tl | |
344 | wrpr %g0, %g1, %tstate | |
345 | !! disable error injection | |
346 | stxa %g0, [%g0]ASI_ERR_INJ | |
347 | ldxa [%g0]0x5b, %g2 !! read ecc after err iinjection | |
348 | ||
349 | rdpr %tstate, %o2 | |
350 | brz %i0, FAIL | |
351 | mov %g0, %i0 | |
352 | ||
353 | rdpr %tt, %o2 | |
354 | brz %i0, FAIL | |
355 | mov %g0, %i0 | |
356 | ||
357 | rdpr %tpc, %o2 | |
358 | brz %i0, FAIL | |
359 | mov %g0, %i0 | |
360 | ||
361 | rdpr %tnpc, %o2 | |
362 | brz %i0, FAIL | |
363 | mov %g0, %i0 | |
364 | ||
365 | rdhpr %htstate, %o2 | |
366 | brz %i0, FAIL | |
367 | mov %g0, %i0 | |
368 | ||
369 | wrpr %g0, %g1, %tt | |
370 | brz %i0, FAIL | |
371 | mov %g0, %i0 | |
372 | ||
373 | wrpr %g0, %g1, %tpc | |
374 | brz %i0, FAIL | |
375 | mov %g0, %i0 | |
376 | ||
377 | wrpr %g0, %g1, %tnpc | |
378 | brz %i0, FAIL | |
379 | mov %g0, %i0 | |
380 | ||
381 | wrhpr %g0, %g1, %htstate | |
382 | brz %i0, FAIL | |
383 | mov %g0, %i0 | |
384 | ||
385 | wrpr %g0, %g1, %tstate | |
386 | brz %i0, FAIL | |
387 | mov %g0, %i0 | |
388 | ||
389 | ldxa [%l6]0x5b, %g2 !! read ecc for entry with err | |
390 | brnz %i0, FAIL | |
391 | mov %g0, %i0 | |
392 | ||
393 | sllx %l2, 8, %l6 | |
394 | cmp %l2, 5 | |
395 | bnz LOOP_000 | |
396 | add %l2, 1, %l2 | |
397 | ||
398 | setx user_code_begin_001, %g1, %g5 | |
399 | jmp %g4 !! call CLEAR_TSAC | |
400 | nop | |
401 | ||
402 | EXIT_GOOD | |
403 | nop | |
404 | ||
405 | FAIL: | |
406 | EXIT_BAD | |
407 | nop | |
408 | ||
409 | attr_data { | |
410 | Name = .My_User_Section_4v000, | |
411 | part_0_ctx_nonzero_tsb_config_1, | |
412 | VA = MY_USER_DATA_VA000, | |
413 | RA = MY_USER_DATA_RA000, | |
414 | PA = ra2pa(MY_USER_DATA_RA000, 0), | |
415 | TTE_Context = PCONTEXT, | |
416 | TTE_V = 1, | |
417 | TTE_NFO = 0, | |
418 | TTE_L = 0, | |
419 | TTE_Soft = 0, | |
420 | TTE_IE = 0, | |
421 | TTE_E = 0, | |
422 | TTE_CP = 1, | |
423 | TTE_CV = 0, | |
424 | TTE_P = 0, | |
425 | TTE_EP = 0, | |
426 | TTE_W = 1, | |
427 | TTE_SW1 = 0, | |
428 | TTE_SW0 = 0, | |
429 | TTE_RSVD1 = 0, | |
430 | TTE_Size = 0, | |
431 | } | |
432 | attr_data { | |
433 | NAME = .My_User_Section_4v000, | |
434 | hypervisor | |
435 | } | |
436 | .data | |
437 | .global user_data_begin_000 | |
438 | user_data_begin_000: | |
439 | .xword 0xe0066361bd9fcb86 | |
440 | .xword 0xea22901c101f6f52 | |
441 | .xword 0x806faa2171350467 | |
442 | .xword 0xff54f2cd06a0d342 | |
443 | .xword 0x566bff718cddb905 | |
444 | .xword 0x6d367bc4d165d37a | |
445 | .xword 0x5efc42b18f920522 | |
446 | .xword 0x584c92dec4bc66de | |
447 | ||
448 | .xword 0xed9efe0d05896ce1 | |
449 | ||
450 | .xword 0xf9d45b94972117c8 | |
451 | ||
452 | .xword 0xd0c647618c9e43f3 | |
453 | ||
454 | .xword 0xfe04ead3b77c2d11 | |
455 | ||
456 | .xword 0x06d2d7f29e76397c | |
457 | ||
458 | .xword 0x234c366110eddd38 | |
459 | ||
460 | .xword 0xa80656d4288044bc | |
461 | ||
462 | .xword 0x12e763fbd8e2970d | |
463 | ||
464 | .xword 0x7320217fab3eae0e | |
465 | ||
466 | .xword 0x38683cebedefb5af | |
467 | ||
468 | ||
469 | SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001 | |
470 | attr_text { | |
471 | Name = .My_User_Section_4v001, | |
472 | part_0_ctx_nonzero_tsb_config_2, | |
473 | VA = MY_USER_TEXT_VA001, | |
474 | RA = MY_USER_TEXT_RA001, | |
475 | PA = ra2pa(MY_USER_TEXT_RA001, 0), | |
476 | TTE_Context = PCONTEXT, | |
477 | TTE_V = 1, | |
478 | TTE_NFO = 0, | |
479 | TTE_L = 0, | |
480 | TTE_Soft = 0, | |
481 | TTE_IE = 0, | |
482 | TTE_E = 0, | |
483 | TTE_CP = 1, | |
484 | TTE_CV = 0, | |
485 | TTE_P = 0, | |
486 | TTE_EP = 1, | |
487 | TTE_W = 0, | |
488 | TTE_SW1 = 0, | |
489 | TTE_SW0 = 0, | |
490 | TTE_RSVD1 = 0, | |
491 | TTE_Size = 0, | |
492 | } | |
493 | attr_text { | |
494 | NAME = .My_User_Section_4v001, | |
495 | hypervisor | |
496 | } | |
497 | .text | |
498 | .global user_code_begin_001 | |
499 | !! inject err by writing to %tt register | |
500 | user_code_begin_001: | |
501 | !! Enable error detection | |
502 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
503 | stxa %o2, [%g3]ASI_CERER | |
504 | ||
505 | add %g0, 0xaa, %g1 | |
506 | add %g0, 0x1, %l2 | |
507 | add %g0, 1, %l1 | |
508 | ||
509 | LOOP_001: | |
510 | setx TSA_ERR_EN, %l0, %l5 | |
511 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
512 | stxa %l5, [%g0]ASI_ERR_INJ | |
513 | !! change TL | |
514 | wrpr %g0, %l2, %tl | |
515 | wrpr %g0, %g1, %tt | |
516 | !! disable error injection | |
517 | stxa %g0, [%g0]ASI_ERR_INJ | |
518 | ldxa [%g0]0x5b, %g2 !! read ecc after err iinjection | |
519 | ||
520 | rdpr %tstate, %o2 | |
521 | brz %i0, FAIL | |
522 | mov %g0, %i0 | |
523 | ||
524 | rdpr %tt, %o2 | |
525 | brz %i0, FAIL | |
526 | mov %g0, %i0 | |
527 | ||
528 | rdpr %tpc, %o2 | |
529 | brz %i0, FAIL | |
530 | mov %g0, %i0 | |
531 | ||
532 | rdpr %tnpc, %o2 | |
533 | brz %i0, FAIL | |
534 | mov %g0, %i0 | |
535 | ||
536 | rdhpr %htstate, %o2 | |
537 | brz %i0, FAIL | |
538 | mov %g0, %i0 | |
539 | ||
540 | wrpr %g0, %g1, %tt | |
541 | brz %i0, FAIL | |
542 | mov %g0, %i0 | |
543 | ||
544 | wrpr %g0, %g1, %tpc | |
545 | brz %i0, FAIL | |
546 | mov %g0, %i0 | |
547 | ||
548 | wrpr %g0, %g1, %tnpc | |
549 | brz %i0, FAIL | |
550 | mov %g0, %i0 | |
551 | ||
552 | wrhpr %g0, %g1, %htstate | |
553 | brz %i0, FAIL | |
554 | mov %g0, %i0 | |
555 | ||
556 | wrpr %g0, %g1, %tstate | |
557 | brz %i0, FAIL | |
558 | mov %g0, %i0 | |
559 | ||
560 | cmp %l2, 4 | |
561 | bnz LOOP_001 | |
562 | add %l2, 1, %l2 | |
563 | ||
564 | setx user_code_begin_002, %g1, %g5 | |
565 | jmp %g4 !! call CLEAR_TSAC | |
566 | nop | |
567 | ||
568 | FAIL: | |
569 | EXIT_BAD | |
570 | ||
571 | attr_data { | |
572 | Name = .My_User_Section_4v001, | |
573 | part_0_ctx_nonzero_tsb_config_1, | |
574 | VA = MY_USER_DATA_VA001, | |
575 | RA = MY_USER_DATA_RA001, | |
576 | PA = ra2pa(MY_USER_DATA_RA001, 0), | |
577 | TTE_Context = PCONTEXT, | |
578 | TTE_V = 1, | |
579 | TTE_NFO = 0, | |
580 | TTE_L = 0, | |
581 | TTE_Soft = 0, | |
582 | TTE_IE = 0, | |
583 | TTE_E = 0, | |
584 | TTE_CP = 1, | |
585 | TTE_CV = 0, | |
586 | TTE_P = 0, | |
587 | TTE_EP = 0, | |
588 | TTE_W = 1, | |
589 | TTE_SW1 = 0, | |
590 | TTE_SW0 = 0, | |
591 | TTE_RSVD1 = 0, | |
592 | TTE_Size = 0, | |
593 | } | |
594 | attr_data { | |
595 | NAME = .My_User_Section_4v001, | |
596 | hypervisor | |
597 | } | |
598 | .data | |
599 | .global user_data_begin_001 | |
600 | user_data_begin_001: | |
601 | .xword 0xfa474991f13e3460 | |
602 | .xword 0x1446415baecf3609 | |
603 | .xword 0xe3215e901114ad4b | |
604 | .xword 0xf91d897e92d1ee95 | |
605 | .xword 0x33458a48805d888b | |
606 | .xword 0x7f5a3ddb7d8e3c23 | |
607 | .xword 0xaa80311fb1e17e79 | |
608 | .xword 0x0f59d0e1ac35dbd4 | |
609 | .xword 0x057c893bc8fc1e7e | |
610 | .xword 0xcfb9e3a29c786cc0 | |
611 | .xword 0x7257becb4609969e | |
612 | .xword 0x4b1896677e83abae | |
613 | .xword 0xc2e35a285574f037 | |
614 | .xword 0x2e42eb5835020e2e | |
615 | .xword 0x90775b99929f43cc | |
616 | .xword 0x9fac4ae85a4ecd4e | |
617 | ||
618 | .word 0x10731 | |
619 | .word 0xd027 | |
620 | .word 0x1350e | |
621 | .word 0x10e9d | |
622 | ||
623 | ||
624 | SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002 | |
625 | attr_text { | |
626 | Name = .My_User_Section_4v002, | |
627 | part_0_ctx_nonzero_tsb_config_2, | |
628 | VA = MY_USER_TEXT_VA002, | |
629 | RA = MY_USER_TEXT_RA002, | |
630 | PA = ra2pa(MY_USER_TEXT_RA002, 0), | |
631 | TTE_Context = PCONTEXT, | |
632 | TTE_V = 1, | |
633 | TTE_NFO = 0, | |
634 | TTE_L = 0, | |
635 | TTE_Soft = 0, | |
636 | TTE_IE = 0, | |
637 | TTE_E = 0, | |
638 | TTE_CP = 1, | |
639 | TTE_CV = 0, | |
640 | TTE_P = 0, | |
641 | TTE_EP = 1, | |
642 | TTE_W = 0, | |
643 | TTE_SW1 = 0, | |
644 | TTE_SW0 = 0, | |
645 | TTE_RSVD1 = 0, | |
646 | TTE_Size = 0, | |
647 | } | |
648 | attr_text { | |
649 | NAME = .My_User_Section_4v002, | |
650 | hypervisor | |
651 | } | |
652 | .text | |
653 | .global user_code_begin_002 | |
654 | !!inject err by writing to tpc | |
655 | user_code_begin_002: | |
656 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
657 | stxa %o2, [%g3]ASI_CERER | |
658 | ||
659 | add %g0, 0xaa, %g1 | |
660 | add %g0, 0x1, %l2 | |
661 | add %g0, 1, %l1 | |
662 | ||
663 | LOOP_002: | |
664 | setx TSA_ERR_EN, %l0, %l5 | |
665 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
666 | stxa %l5, [%g0]ASI_ERR_INJ | |
667 | !! change TL | |
668 | wrpr %g0, %l2, %tl | |
669 | wrpr %g0, %g1, %tpc | |
670 | !! disable error injection | |
671 | stxa %g0, [%g0]ASI_ERR_INJ | |
672 | ldxa [%g0]0x5b, %g2 !! read ecc after err iinjection | |
673 | ||
674 | rdpr %tstate, %o2 | |
675 | brz %i0, FAIL | |
676 | mov %g0, %i0 | |
677 | ||
678 | rdpr %tt, %o2 | |
679 | brz %i0, FAIL | |
680 | mov %g0, %i0 | |
681 | ||
682 | rdpr %tpc, %o2 | |
683 | brz %i0, FAIL | |
684 | mov %g0, %i0 | |
685 | ||
686 | rdpr %tnpc, %o2 | |
687 | brz %i0, FAIL | |
688 | mov %g0, %i0 | |
689 | ||
690 | rdhpr %htstate, %o2 | |
691 | brz %i0, FAIL | |
692 | mov %g0, %i0 | |
693 | ||
694 | wrpr %g0, %g1, %tt | |
695 | brz %i0, FAIL | |
696 | mov %g0, %i0 | |
697 | ||
698 | wrpr %g0, %g1, %tpc | |
699 | brz %i0, FAIL | |
700 | mov %g0, %i0 | |
701 | ||
702 | wrpr %g0, %g1, %tnpc | |
703 | brz %i0, FAIL | |
704 | mov %g0, %i0 | |
705 | ||
706 | wrhpr %g0, %g1, %htstate | |
707 | brz %i0, FAIL | |
708 | mov %g0, %i0 | |
709 | ||
710 | wrpr %g0, %g1, %tstate | |
711 | brz %i0, FAIL | |
712 | mov %g0, %i0 | |
713 | ||
714 | cmp %l2, 4 | |
715 | bnz LOOP_002 | |
716 | add %l2, 1, %l2 | |
717 | ||
718 | setx user_code_begin_003, %g1, %g5 | |
719 | jmp %g4 !! call CLEAR_TSAC | |
720 | nop | |
721 | ||
722 | FAIL: | |
723 | EXIT_BAD | |
724 | nop | |
725 | ||
726 | attr_data { | |
727 | Name = .My_User_Section_4v002, | |
728 | part_0_ctx_nonzero_tsb_config_1, | |
729 | VA = MY_USER_DATA_VA002, | |
730 | RA = MY_USER_DATA_RA002, | |
731 | PA = ra2pa(MY_USER_DATA_RA002, 0), | |
732 | TTE_Context = PCONTEXT, | |
733 | TTE_V = 1, | |
734 | TTE_NFO = 0, | |
735 | TTE_L = 0, | |
736 | TTE_Soft = 0, | |
737 | TTE_IE = 0, | |
738 | TTE_E = 0, | |
739 | TTE_CP = 1, | |
740 | TTE_CV = 0, | |
741 | TTE_P = 0, | |
742 | TTE_EP = 0, | |
743 | TTE_W = 1, | |
744 | TTE_SW1 = 0, | |
745 | TTE_SW0 = 0, | |
746 | TTE_RSVD1 = 0, | |
747 | TTE_Size = 0, | |
748 | } | |
749 | attr_data { | |
750 | NAME = .My_User_Section_4v002, | |
751 | hypervisor | |
752 | } | |
753 | .data | |
754 | .global user_data_begin_002 | |
755 | user_data_begin_002: | |
756 | .xword 0x050a211e918857f3 | |
757 | .xword 0x7980bbbf09b95bba | |
758 | .xword 0x55f410e2b57433f6 | |
759 | .xword 0x106c3aa95e2aa3c3 | |
760 | .xword 0xbcb980bc1bb072d8 | |
761 | .xword 0x63da435c10b717dd | |
762 | .xword 0x375d99be87bef073 | |
763 | .xword 0x03a5206ac6d08fd2 | |
764 | .xword 0xfa474991f13e3460 | |
765 | .xword 0x1446415baecf3609 | |
766 | .xword 0xe3215e901114ad4b | |
767 | .xword 0xf91d897e92d1ee95 | |
768 | .xword 0x33458a48805d888b | |
769 | .xword 0x7f5a3ddb7d8e3c23 | |
770 | .xword 0xaa80311fb1e17e79 | |
771 | .xword 0x0f59d0e1ac35dbd4 | |
772 | ||
773 | .word 0x1eb9 | |
774 | .word 0x43ec | |
775 | .word 0xc619 | |
776 | .word 0x11a06 | |
777 | ||
778 | ||
779 | SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003 | |
780 | attr_text { | |
781 | Name = .My_User_Section_4v003, | |
782 | part_0_ctx_nonzero_tsb_config_2, | |
783 | VA = MY_USER_TEXT_VA003, | |
784 | RA = MY_USER_TEXT_RA003, | |
785 | PA = ra2pa(MY_USER_TEXT_RA003, 0), | |
786 | TTE_Context = PCONTEXT, | |
787 | TTE_V = 1, | |
788 | TTE_NFO = 0, | |
789 | TTE_L = 0, | |
790 | TTE_Soft = 0, | |
791 | TTE_IE = 0, | |
792 | TTE_E = 0, | |
793 | TTE_CP = 1, | |
794 | TTE_CV = 0, | |
795 | TTE_P = 0, | |
796 | TTE_EP = 1, | |
797 | TTE_W = 0, | |
798 | TTE_SW1 = 0, | |
799 | TTE_SW0 = 0, | |
800 | TTE_RSVD1 = 0, | |
801 | TTE_Size = 0, | |
802 | } | |
803 | attr_text { | |
804 | NAME = .My_User_Section_4v003, | |
805 | hypervisor | |
806 | } | |
807 | .text | |
808 | .global user_code_begin_003 | |
809 | !! inject err by writing to %tnpc register | |
810 | user_code_begin_003: | |
811 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
812 | stxa %o2, [%g3]ASI_CERER | |
813 | ||
814 | add %g0, 0xaa, %g1 | |
815 | add %g0, 0x1, %l2 | |
816 | add %g0, 1, %l1 | |
817 | ||
818 | LOOP_003: | |
819 | setx TSA_ERR_EN, %l0, %l5 | |
820 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
821 | stxa %l5, [%g0]ASI_ERR_INJ | |
822 | !! change TL | |
823 | wrpr %g0, %l2, %tl | |
824 | wrpr %g0, %g1, %tnpc | |
825 | !! disable error injection | |
826 | stxa %g0, [%g0]ASI_ERR_INJ | |
827 | ldxa [%g0]0x5b, %g2 !! read ecc after err iinjection | |
828 | ||
829 | rdpr %tstate, %o2 | |
830 | brz %i0, FAIL | |
831 | mov %g0, %i0 | |
832 | ||
833 | rdpr %tt, %o2 | |
834 | brz %i0, FAIL | |
835 | mov %g0, %i0 | |
836 | ||
837 | rdpr %tpc, %o2 | |
838 | brz %i0, FAIL | |
839 | mov %g0, %i0 | |
840 | ||
841 | rdpr %tnpc, %o2 | |
842 | brz %i0, FAIL | |
843 | mov %g0, %i0 | |
844 | ||
845 | rdhpr %htstate, %o2 | |
846 | brz %i0, FAIL | |
847 | mov %g0, %i0 | |
848 | ||
849 | wrpr %g0, %g1, %tt | |
850 | brz %i0, FAIL | |
851 | mov %g0, %i0 | |
852 | ||
853 | wrpr %g0, %g1, %tpc | |
854 | brz %i0, FAIL | |
855 | mov %g0, %i0 | |
856 | ||
857 | wrpr %g0, %g1, %tnpc | |
858 | brz %i0, FAIL | |
859 | mov %g0, %i0 | |
860 | ||
861 | wrhpr %g0, %g1, %htstate | |
862 | brz %i0, FAIL | |
863 | mov %g0, %i0 | |
864 | ||
865 | wrpr %g0, %g1, %tstate | |
866 | brz %i0, FAIL | |
867 | mov %g0, %i0 | |
868 | ||
869 | cmp %l2, 4 | |
870 | bnz LOOP_003 | |
871 | add %l2, 1, %l2 | |
872 | ||
873 | setx user_code_begin_004, %g1, %g5 | |
874 | jmp %g4 !! call CLEAR_TSAC | |
875 | nop | |
876 | ||
877 | FAIL: | |
878 | EXIT_BAD | |
879 | nop | |
880 | ||
881 | attr_data { | |
882 | Name = .My_User_Section_4v003, | |
883 | part_0_ctx_nonzero_tsb_config_1, | |
884 | VA = MY_USER_DATA_VA003, | |
885 | RA = MY_USER_DATA_RA003, | |
886 | PA = ra2pa(MY_USER_DATA_RA003, 0), | |
887 | TTE_Context = PCONTEXT, | |
888 | TTE_V = 1, | |
889 | TTE_NFO = 0, | |
890 | TTE_L = 0, | |
891 | TTE_Soft = 0, | |
892 | TTE_IE = 0, | |
893 | TTE_E = 0, | |
894 | TTE_CP = 1, | |
895 | TTE_CV = 0, | |
896 | TTE_P = 0, | |
897 | TTE_EP = 0, | |
898 | TTE_W = 1, | |
899 | TTE_SW1 = 0, | |
900 | TTE_SW0 = 0, | |
901 | TTE_RSVD1 = 0, | |
902 | TTE_Size = 0, | |
903 | } | |
904 | attr_data { | |
905 | NAME = .My_User_Section_4v003, | |
906 | hypervisor | |
907 | } | |
908 | .data | |
909 | .global user_data_begin_003 | |
910 | user_data_begin_003: | |
911 | .xword 0xca12fd23b5b1b1d6 | |
912 | .xword 0x3428a18f797bd42a | |
913 | .xword 0x0d0630dd16ca2db5 | |
914 | .xword 0x281c49cf3f51a83f | |
915 | .xword 0x8fc66b8940c55c03 | |
916 | .xword 0xfd6f2a2b60aee94c | |
917 | .xword 0xec72846b0261894e | |
918 | .xword 0xf1bd6c544120f822 | |
919 | ||
920 | .xword 0xefc4e1f1b35853fc | |
921 | .xword 0xe790a0c1689eb683 | |
922 | .xword 0x88c650f170c41710 | |
923 | .xword 0x614126cf9fc8dca3 | |
924 | .xword 0x4be2f60911e465ce | |
925 | .xword 0x4e22352a0c29c95c | |
926 | .xword 0xf18efdf01ce79e24 | |
927 | .xword 0x294aaa56144d7cf1 | |
928 | ||
929 | .word 0xdfaa | |
930 | .word 0x39a9 | |
931 | .word 0xb967 | |
932 | .word 0x280c | |
933 | ||
934 | ||
935 | SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004 | |
936 | attr_text { | |
937 | Name = .My_User_Section_4v004, | |
938 | part_0_ctx_nonzero_tsb_config_2, | |
939 | VA = MY_USER_TEXT_VA004, | |
940 | RA = MY_USER_TEXT_RA004, | |
941 | PA = ra2pa(MY_USER_TEXT_RA004, 0), | |
942 | TTE_Context = PCONTEXT, | |
943 | TTE_V = 1, | |
944 | TTE_NFO = 0, | |
945 | TTE_L = 0, | |
946 | TTE_Soft = 0, | |
947 | TTE_IE = 0, | |
948 | TTE_E = 0, | |
949 | TTE_CP = 1, | |
950 | TTE_CV = 0, | |
951 | TTE_P = 0, | |
952 | TTE_EP = 1, | |
953 | TTE_W = 0, | |
954 | TTE_SW1 = 0, | |
955 | TTE_SW0 = 0, | |
956 | TTE_RSVD1 = 0, | |
957 | TTE_Size = 0, | |
958 | } | |
959 | attr_text { | |
960 | NAME = .My_User_Section_4v004, | |
961 | hypervisor | |
962 | } | |
963 | .text | |
964 | .global user_code_begin_004 | |
965 | !!inject err by writing to htstate | |
966 | user_code_begin_004: | |
967 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
968 | stxa %o2, [%g3]ASI_CERER | |
969 | ||
970 | add %g0, 0xaa, %g1 | |
971 | add %g0, 0x1, %l2 | |
972 | add %g0, 1, %l1 | |
973 | ||
974 | LOOP_004: | |
975 | setx TSA_ERR_EN, %l0, %l5 | |
976 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
977 | stxa %l5, [%g0]ASI_ERR_INJ | |
978 | !! change TL | |
979 | wrpr %g0, %l2, %tl | |
980 | wrhpr %g0, %g1, %htstate | |
981 | !! disable error injection | |
982 | stxa %g0, [%g0]ASI_ERR_INJ | |
983 | ldxa [%g0]0x5b, %g2 !! read ecc after err iinjection | |
984 | ||
985 | rdpr %tstate, %o2 | |
986 | brz %i0, FAIL | |
987 | mov %g0, %i0 | |
988 | ||
989 | rdpr %tt, %o2 | |
990 | brz %i0, FAIL | |
991 | mov %g0, %i0 | |
992 | ||
993 | rdpr %tpc, %o2 | |
994 | brz %i0, FAIL | |
995 | mov %g0, %i0 | |
996 | ||
997 | rdpr %tnpc, %o2 | |
998 | brz %i0, FAIL | |
999 | mov %g0, %i0 | |
1000 | ||
1001 | rdhpr %htstate, %o2 | |
1002 | brz %i0, FAIL | |
1003 | mov %g0, %i0 | |
1004 | ||
1005 | wrpr %g0, %g1, %tt | |
1006 | brz %i0, FAIL | |
1007 | mov %g0, %i0 | |
1008 | ||
1009 | wrpr %g0, %g1, %tpc | |
1010 | brz %i0, FAIL | |
1011 | mov %g0, %i0 | |
1012 | ||
1013 | wrpr %g0, %g1, %tnpc | |
1014 | brz %i0, FAIL | |
1015 | mov %g0, %i0 | |
1016 | ||
1017 | wrhpr %g0, %g1, %htstate | |
1018 | brz %i0, FAIL | |
1019 | mov %g0, %i0 | |
1020 | ||
1021 | wrpr %g0, %g1, %tstate | |
1022 | brz %i0, FAIL | |
1023 | mov %g0, %i0 | |
1024 | ||
1025 | cmp %l2, 4 | |
1026 | bnz LOOP_004 | |
1027 | add %l2, 1, %l2 | |
1028 | ||
1029 | setx user_code_begin_005, %g1, %g5 | |
1030 | jmp %g4 !! call CLEAR_TSAC | |
1031 | nop | |
1032 | ||
1033 | FAIL: EXIT_BAD | |
1034 | nop | |
1035 | ||
1036 | attr_data { | |
1037 | Name = .My_User_Section_4v004, | |
1038 | part_0_ctx_nonzero_tsb_config_1, | |
1039 | VA = MY_USER_DATA_VA004, | |
1040 | RA = MY_USER_DATA_RA004, | |
1041 | PA = ra2pa(MY_USER_DATA_RA004, 0), | |
1042 | TTE_Context = PCONTEXT, | |
1043 | TTE_V = 1, | |
1044 | TTE_NFO = 0, | |
1045 | TTE_L = 0, | |
1046 | TTE_Soft = 0, | |
1047 | TTE_IE = 0, | |
1048 | TTE_E = 0, | |
1049 | TTE_CP = 1, | |
1050 | TTE_CV = 0, | |
1051 | TTE_P = 0, | |
1052 | TTE_EP = 0, | |
1053 | TTE_W = 1, | |
1054 | TTE_SW1 = 0, | |
1055 | TTE_SW0 = 0, | |
1056 | TTE_RSVD1 = 0, | |
1057 | TTE_Size = 0, | |
1058 | } | |
1059 | attr_data { | |
1060 | NAME = .My_User_Section_4v004, | |
1061 | hypervisor | |
1062 | } | |
1063 | .data | |
1064 | .global user_data_begin_004 | |
1065 | user_data_begin_004: | |
1066 | .xword 0xefc4e1f1b35853fc | |
1067 | .xword 0xe790a0c1689eb683 | |
1068 | .xword 0x88c650f170c41710 | |
1069 | .xword 0x614126cf9fc8dca3 | |
1070 | .xword 0x4be2f60911e465ce | |
1071 | .xword 0x4e22352a0c29c95c | |
1072 | .xword 0xf18efdf01ce79e24 | |
1073 | .xword 0x294aaa56144d7cf1 | |
1074 | .xword 0xe0066361bd9fcb86 | |
1075 | .xword 0xea22901c101f6f52 | |
1076 | .xword 0x806faa2171350467 | |
1077 | .xword 0xff54f2cd06a0d342 | |
1078 | .xword 0x566bff718cddb905 | |
1079 | .xword 0x6d367bc4d165d37a | |
1080 | .xword 0x5efc42b18f920522 | |
1081 | .xword 0x584c92dec4bc66de | |
1082 | .word 0x4069 | |
1083 | .word 0x41ed | |
1084 | .word 0x14c07 | |
1085 | .word 0x29de | |
1086 | ||
1087 | ||
1088 | SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005 | |
1089 | attr_text { | |
1090 | Name = .My_User_Section_4v005, | |
1091 | part_0_ctx_nonzero_tsb_config_3, | |
1092 | VA = MY_USER_TEXT_VA005, | |
1093 | RA = MY_USER_TEXT_RA005, | |
1094 | PA = ra2pa(MY_USER_TEXT_RA005, 0), | |
1095 | TTE_Context = PCONTEXT, | |
1096 | TTE_V = 1, | |
1097 | TTE_NFO = 0, | |
1098 | TTE_L = 0, | |
1099 | TTE_Soft = 0, | |
1100 | TTE_IE = 0, | |
1101 | TTE_E = 0, | |
1102 | TTE_CP = 1, | |
1103 | TTE_CV = 0, | |
1104 | TTE_P = 0, | |
1105 | TTE_EP = 1, | |
1106 | TTE_W = 0, | |
1107 | TTE_SW1 = 0, | |
1108 | TTE_SW0 = 0, | |
1109 | TTE_RSVD1 = 0, | |
1110 | TTE_Size = 0, | |
1111 | } | |
1112 | attr_text { | |
1113 | NAME = .My_User_Section_4v005, | |
1114 | hypervisor | |
1115 | } | |
1116 | ! Use done inst. to catch errors in TSA | |
1117 | .text | |
1118 | .global user_code_begin_005 | |
1119 | user_code_begin_005: | |
1120 | !! Enable error detection | |
1121 | add %g0, CERER_VA, %g3 | |
1122 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1123 | stxa %o2, [%g3]ASI_CERER | |
1124 | ||
1125 | !! Enable error injection | |
1126 | setx TSA_ERR_EN, %l0, %l5 | |
1127 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1128 | stxa %l5, [%g0]ASI_ERR_INJ | |
1129 | ||
1130 | wrpr %g0, 1, %tl !!change to tl1 | |
1131 | wrhpr %g0, %g1, %htstate !! | |
1132 | stxa %g0, [%g0]ASI_ERR_INJ | |
1133 | ||
1134 | done_tl1: | |
1135 | done !!trap | |
1136 | brz %i0, FAIL | |
1137 | mov %g0, %i0 | |
1138 | ||
1139 | done_tl2: | |
1140 | !tl2 | |
1141 | stxa %l5, [%g0]ASI_ERR_INJ | |
1142 | wrpr %g0, 2, %tl | |
1143 | wrpr %g0, %g1, %tstate | |
1144 | stxa %g0, [%g0]ASI_ERR_INJ | |
1145 | done !!trap | |
1146 | brz %i0, FAIL | |
1147 | mov %g0, %i0 | |
1148 | ||
1149 | done_tl3: | |
1150 | !tl3 | |
1151 | stxa %l5, [%g0]ASI_ERR_INJ | |
1152 | wrpr %g0, 3, %tl | |
1153 | wrpr %g0, %g1, %tpc | |
1154 | stxa %g0, [%g0]ASI_ERR_INJ | |
1155 | done !!trap | |
1156 | brz %i0, FAIL | |
1157 | mov %g0, %i0 | |
1158 | ||
1159 | done_tl4: | |
1160 | !tl4 | |
1161 | stxa %l5, [%g0]ASI_ERR_INJ | |
1162 | wrpr %g0, 4, %tl | |
1163 | wrpr %g0, %g1, %tnpc | |
1164 | stxa %g0, [%g0]ASI_ERR_INJ | |
1165 | done !!trap | |
1166 | brz %i0, FAIL | |
1167 | mov %g0, %i0 | |
1168 | ||
1169 | done_tl5: | |
1170 | !tl5 | |
1171 | stxa %l5, [%g0]ASI_ERR_INJ | |
1172 | wrpr %g0, 5, %tl | |
1173 | wrpr %g0, %g1, %tt | |
1174 | stxa %g0, [%g0]ASI_ERR_INJ | |
1175 | done !!trap | |
1176 | brz %i0, FAIL | |
1177 | mov %g0, %i0 | |
1178 | ||
1179 | done_tl6: | |
1180 | !tl6 | |
1181 | stxa %l5, [%g0]ASI_ERR_INJ | |
1182 | wrpr %g0, 6, %tl | |
1183 | wrpr %g0, %g1, %tt | |
1184 | stxa %g0, [%g0]ASI_ERR_INJ | |
1185 | setx clr_err_done, %l0, %o2 | |
1186 | done !!trap | |
1187 | clr_err_done: | |
1188 | brz %i0, FAIL | |
1189 | mov %g0, %i0 | |
1190 | ||
1191 | ||
1192 | !! Now clear all the errors from TSA | |
1193 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1194 | stxa %g0, [%g3]ASI_CERER | |
1195 | wrpr %g0, 0x1, %tl | |
1196 | wrpr %g0, %tstate | |
1197 | wrpr %g0, 0x2, %tl | |
1198 | wrpr %g0, %tstate | |
1199 | wrpr %g0, 0x3, %tl | |
1200 | wrpr %g0, %tstate | |
1201 | wrpr %g0, 0x4, %tl | |
1202 | wrpr %g0, %tstate | |
1203 | wrpr %g0, 0x5, %tl | |
1204 | wrpr %g0, %tstate | |
1205 | wrpr %g0, 0x6, %tl | |
1206 | wrpr %g0, %tstate | |
1207 | ||
1208 | ||
1209 | setx user_code_begin_006, %g1, %g2 | |
1210 | jmp %g2 | |
1211 | nop | |
1212 | ||
1213 | FAIL: EXIT_BAD | |
1214 | nop | |
1215 | ||
1216 | attr_data { | |
1217 | Name = .My_User_Section_4v005, | |
1218 | part_0_ctx_nonzero_tsb_config_1, | |
1219 | VA = MY_USER_DATA_VA005, | |
1220 | RA = MY_USER_DATA_RA005, | |
1221 | PA = ra2pa(MY_USER_DATA_RA005, 0), | |
1222 | TTE_Context = PCONTEXT, | |
1223 | TTE_V = 1, | |
1224 | TTE_NFO = 0, | |
1225 | TTE_L = 0, | |
1226 | TTE_Soft = 0, | |
1227 | TTE_IE = 0, | |
1228 | TTE_E = 0, | |
1229 | TTE_CP = 1, | |
1230 | TTE_CV = 0, | |
1231 | TTE_P = 0, | |
1232 | TTE_EP = 0, | |
1233 | TTE_W = 1, | |
1234 | TTE_SW1 = 0, | |
1235 | TTE_SW0 = 0, | |
1236 | TTE_RSVD1 = 0, | |
1237 | TTE_Size = 0, | |
1238 | } | |
1239 | attr_data { | |
1240 | NAME = .My_User_Section_4v005, | |
1241 | hypervisor | |
1242 | } | |
1243 | .data | |
1244 | .global user_data_begin_005 | |
1245 | user_data_begin_005: | |
1246 | .xword 0xefc4e1f1b35853fc | |
1247 | .xword 0xe790a0c1689eb683 | |
1248 | .xword 0x88c650f170c41710 | |
1249 | .xword 0x614126cf9fc8dca3 | |
1250 | .xword 0x4be2f60911e465ce | |
1251 | .xword 0x4e22352a0c29c95c | |
1252 | .xword 0xf18efdf01ce79e24 | |
1253 | .xword 0x294aaa56144d7cf1 | |
1254 | .xword 0xe0066361bd9fcb86 | |
1255 | .xword 0xea22901c101f6f52 | |
1256 | .xword 0x806faa2171350467 | |
1257 | .xword 0xff54f2cd06a0d342 | |
1258 | .xword 0x566bff718cddb905 | |
1259 | .xword 0x6d367bc4d165d37a | |
1260 | .xword 0x5efc42b18f920522 | |
1261 | .xword 0x4be2f60911e465ce | |
1262 | .xword 0x4e22352a0c29c95c | |
1263 | .xword 0xf18efdf01ce79e24 | |
1264 | .word 0xf93b | |
1265 | .word 0xe34b | |
1266 | .word 0x127e6 | |
1267 | .word 0xd915 | |
1268 | ||
1269 | ||
1270 | SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006 | |
1271 | attr_text { | |
1272 | Name = .My_User_Section_4v006, | |
1273 | part_0_ctx_nonzero_tsb_config_3, | |
1274 | VA = MY_USER_TEXT_VA006, | |
1275 | RA = MY_USER_TEXT_RA006, | |
1276 | PA = ra2pa(MY_USER_TEXT_RA006, 0), | |
1277 | TTE_Context = PCONTEXT, | |
1278 | TTE_V = 1, | |
1279 | TTE_NFO = 0, | |
1280 | TTE_L = 0, | |
1281 | TTE_Soft = 0, | |
1282 | TTE_IE = 0, | |
1283 | TTE_E = 0, | |
1284 | TTE_CP = 1, | |
1285 | TTE_CV = 0, | |
1286 | TTE_P = 0, | |
1287 | TTE_EP = 1, | |
1288 | TTE_W = 0, | |
1289 | TTE_SW1 = 0, | |
1290 | TTE_SW0 = 0, | |
1291 | TTE_RSVD1 = 0, | |
1292 | TTE_Size = 0, | |
1293 | } | |
1294 | attr_text { | |
1295 | NAME = .My_User_Section_4v006, | |
1296 | hypervisor | |
1297 | } | |
1298 | ! Use retry inst. to catch errors in TSA | |
1299 | .text | |
1300 | .global user_code_begin_006 | |
1301 | user_code_begin_006: | |
1302 | !! Enable error detection | |
1303 | add %g0, CERER_VA, %g3 | |
1304 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1305 | stxa %o2, [%g3]ASI_CERER | |
1306 | ||
1307 | !! Enable error injection | |
1308 | retry_tl1: | |
1309 | setx TSA_ERR_EN, %l0, %l5 | |
1310 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1311 | stxa %l5, [%g0]ASI_ERR_INJ | |
1312 | ||
1313 | wrpr %g0, 1, %tl !!change to tl1 | |
1314 | wrhpr %g0, %g1, %htstate !! | |
1315 | stxa %g0, [%g0]ASI_ERR_INJ | |
1316 | ||
1317 | retry !!trap | |
1318 | brz %i0, FAIL | |
1319 | mov %g0, %i0 | |
1320 | ||
1321 | retry_tl2: | |
1322 | !tl2 | |
1323 | stxa %l5, [%g0]ASI_ERR_INJ | |
1324 | wrpr %g0, 2, %tl | |
1325 | wrpr %g0, %g1, %tstate | |
1326 | stxa %g0, [%g0]ASI_ERR_INJ | |
1327 | retry !!trap | |
1328 | brz %i0, FAIL | |
1329 | mov %g0, %i0 | |
1330 | ||
1331 | retry_tl3: | |
1332 | !tl3 | |
1333 | stxa %l5, [%g0]ASI_ERR_INJ | |
1334 | wrpr %g0, 3, %tl | |
1335 | wrpr %g0, %g1, %tpc | |
1336 | stxa %g0, [%g0]ASI_ERR_INJ | |
1337 | retry !!trap | |
1338 | brz %i0, FAIL | |
1339 | mov %g0, %i0 | |
1340 | ||
1341 | retry_tl4: | |
1342 | !tl4 | |
1343 | stxa %l5, [%g0]ASI_ERR_INJ | |
1344 | wrpr %g0, 4, %tl | |
1345 | wrpr %g0, %g1, %tnpc | |
1346 | stxa %g0, [%g0]ASI_ERR_INJ | |
1347 | retry !!trap | |
1348 | brz %i0, FAIL | |
1349 | mov %g0, %i0 | |
1350 | ||
1351 | retry_tl5: | |
1352 | !tl5 | |
1353 | stxa %l5, [%g0]ASI_ERR_INJ | |
1354 | wrpr %g0, 5, %tl | |
1355 | wrpr %g0, %g1, %tt | |
1356 | stxa %g0, [%g0]ASI_ERR_INJ | |
1357 | retry !!trap | |
1358 | brz %i0, FAIL | |
1359 | mov %g0, %i0 | |
1360 | ||
1361 | retry_tl6: | |
1362 | !tl6 | |
1363 | stxa %l5, [%g0]ASI_ERR_INJ | |
1364 | wrpr %g0, 6, %tl | |
1365 | wrpr %g0, %g1, %tt | |
1366 | stxa %g0, [%g0]ASI_ERR_INJ | |
1367 | setx clr_err_retry, %l0, %o2 | |
1368 | retry !!trap | |
1369 | clr_err_retry: | |
1370 | brz %i0, FAIL | |
1371 | mov %g0, %i0 | |
1372 | ||
1373 | ||
1374 | !! Now clear all the errors from TSA | |
1375 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1376 | stxa %g0, [%g3]ASI_CERER | |
1377 | wrpr %g0, 0x1, %tl | |
1378 | wrpr %g0, %tstate | |
1379 | wrpr %g0, 0x2, %tl | |
1380 | wrpr %g0, %tstate | |
1381 | wrpr %g0, 0x3, %tl | |
1382 | wrpr %g0, %tstate | |
1383 | wrpr %g0, 0x4, %tl | |
1384 | wrpr %g0, %tstate | |
1385 | wrpr %g0, 0x5, %tl | |
1386 | wrpr %g0, %tstate | |
1387 | wrpr %g0, 0x6, %tl | |
1388 | wrpr %g0, %tstate | |
1389 | ||
1390 | setx user_code_begin_007, %g1, %g2 | |
1391 | jmp %g2 | |
1392 | nop | |
1393 | ||
1394 | FAIL: EXIT_BAD | |
1395 | nop | |
1396 | ||
1397 | attr_data { | |
1398 | Name = .My_User_Section_4v006, | |
1399 | part_0_ctx_nonzero_tsb_config_1, | |
1400 | VA = MY_USER_DATA_VA006, | |
1401 | RA = MY_USER_DATA_RA006, | |
1402 | PA = ra2pa(MY_USER_DATA_RA006, 0), | |
1403 | TTE_Context = PCONTEXT, | |
1404 | TTE_V = 1, | |
1405 | TTE_NFO = 0, | |
1406 | TTE_L = 0, | |
1407 | TTE_Soft = 0, | |
1408 | TTE_IE = 0, | |
1409 | TTE_E = 0, | |
1410 | TTE_CP = 1, | |
1411 | TTE_CV = 0, | |
1412 | TTE_P = 0, | |
1413 | TTE_EP = 0, | |
1414 | TTE_W = 1, | |
1415 | TTE_SW1 = 0, | |
1416 | TTE_SW0 = 0, | |
1417 | TTE_RSVD1 = 0, | |
1418 | TTE_Size = 0, | |
1419 | } | |
1420 | attr_data { | |
1421 | NAME = .My_User_Section_4v006, | |
1422 | hypervisor | |
1423 | } | |
1424 | .data | |
1425 | .global user_data_begin_006 | |
1426 | user_data_begin_006: | |
1427 | .word 0x7551 | |
1428 | .word 0x1535d | |
1429 | .word 0x59 | |
1430 | .word 0x72f7 | |
1431 | ||
1432 | ||
1433 | SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007 | |
1434 | attr_text { | |
1435 | Name = .My_User_Section_4v007, | |
1436 | part_0_ctx_nonzero_tsb_config_3, | |
1437 | VA = MY_USER_TEXT_VA007, | |
1438 | RA = MY_USER_TEXT_RA007, | |
1439 | PA = ra2pa(MY_USER_TEXT_RA007, 0), | |
1440 | TTE_Context = PCONTEXT, | |
1441 | TTE_V = 1, | |
1442 | TTE_NFO = 0, | |
1443 | TTE_L = 0, | |
1444 | TTE_Soft = 0, | |
1445 | TTE_IE = 0, | |
1446 | TTE_E = 0, | |
1447 | TTE_CP = 1, | |
1448 | TTE_CV = 0, | |
1449 | TTE_P = 0, | |
1450 | TTE_EP = 1, | |
1451 | TTE_W = 0, | |
1452 | TTE_SW1 = 0, | |
1453 | TTE_SW0 = 0, | |
1454 | TTE_RSVD1 = 0, | |
1455 | TTE_Size = 0, | |
1456 | } | |
1457 | attr_text { | |
1458 | NAME = .My_User_Section_4v007, | |
1459 | hypervisor | |
1460 | } | |
1461 | ||
1462 | !! inject err in entry 6/7 by doing stxa. | |
1463 | ||
1464 | .text | |
1465 | .global user_code_begin_007 | |
1466 | user_code_begin_007: | |
1467 | wrpr %g0, %g0, %tl | |
1468 | !! Enable error detection | |
1469 | add %g0, CERER_VA, %g3 | |
1470 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1471 | stxa %o2, [%g3]ASI_CERER | |
1472 | ||
1473 | !! Enable error injection | |
1474 | setx TSA_ERR_EN, %l0, %l5 | |
1475 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1476 | stxa %l5, [%g0]ASI_ERR_INJ | |
1477 | ||
1478 | mov 0x3c0, %l0 | |
1479 | mov 0x3e0, %l1 | |
1480 | stxa %g0, [%l0]0x25 | |
1481 | stxa %g0, [%l1]0x25 | |
1482 | mov %g0, %i0 | |
1483 | ||
1484 | !disable err injection | |
1485 | stxa %g0, [%g0]ASI_ERR_INJ | |
1486 | ||
1487 | ldxa [%l0]0x25, %l2 | |
1488 | brz %i0, FAIL !! chk ipe trap taken | |
1489 | mov %g0, %i0 | |
1490 | ||
1491 | stxa %g0, [%l0]0x25 | |
1492 | brz %i0, FAIL !! chk ipe trap taken | |
1493 | mov %g0, %i0 | |
1494 | ||
1495 | mov 0x3c8, %l0 | |
1496 | ldxa [%l0]0x25, %l2 | |
1497 | brz %i0, FAIL !! chk ipe trap taken | |
1498 | mov %g0, %i0 | |
1499 | ||
1500 | stxa %g0, [%l0]0x25 | |
1501 | brz %i0, FAIL !! chk ipe trap taken | |
1502 | mov %g0, %i0 | |
1503 | ||
1504 | mov 0x3d0, %l0 | |
1505 | ldxa [%l0]0x25, %l2 | |
1506 | brz %i0, FAIL !! chk ipe trap taken | |
1507 | mov %g0, %i0 | |
1508 | ||
1509 | stxa %g0, [%l0]0x25 | |
1510 | brz %i0, FAIL !! chk ipe trap taken | |
1511 | mov %g0, %i0 | |
1512 | ||
1513 | mov 0x3d8, %l0 | |
1514 | ldxa [%l0]0x25, %l2 | |
1515 | brz %i0, FAIL !! chk ipe trap taken | |
1516 | mov %g0, %i0 | |
1517 | ||
1518 | stxa %g0, [%l0]0x25 | |
1519 | brz %i0, FAIL !! chk ipe trap taken | |
1520 | mov %g0, %i0 | |
1521 | ||
1522 | mov 0x3e0, %l0 | |
1523 | ldxa [%l0]0x25, %l2 | |
1524 | brz %i0, FAIL !! chk ipe trap taken | |
1525 | mov %g0, %i0 | |
1526 | ||
1527 | stxa %g0, [%l0]0x25 | |
1528 | brz %i0, FAIL !! chk ipe trap taken | |
1529 | mov %g0, %i0 | |
1530 | ||
1531 | mov 0x3e8, %l0 | |
1532 | ldxa [%l0]0x25, %l2 | |
1533 | brz %i0, FAIL !! chk ipe trap taken | |
1534 | mov %g0, %i0 | |
1535 | ||
1536 | stxa %g0, [%l0]0x25 | |
1537 | brz %i0, FAIL !! chk ipe trap taken | |
1538 | mov %g0, %i0 | |
1539 | ||
1540 | mov 0x3f0, %l0 | |
1541 | ldxa [%l0]0x25, %l2 | |
1542 | brz %i0, FAIL !! chk ipe trap taken | |
1543 | mov %g0, %i0 | |
1544 | ||
1545 | stxa %g0, [%l0]0x25 | |
1546 | brz %i0, FAIL !! chk ipe trap taken | |
1547 | mov %g0, %i0 | |
1548 | ||
1549 | mov 0x3f8, %l0 | |
1550 | ldxa [%l0]0x25, %l2 | |
1551 | brz %i0, FAIL !! chk ipe trap taken | |
1552 | mov %g0, %i0 | |
1553 | ||
1554 | stxa %g0, [%l0]0x25 | |
1555 | brz %i0, FAIL !! chk ipe trap taken | |
1556 | mov %g0, %i0 | |
1557 | ||
1558 | mov 0x38, %l6 !! read ecc and chk no err | |
1559 | ldxa [%l6]0x5b, %g2 !! read ecc for entry with err | |
1560 | brnz %i0, FAIL | |
1561 | mov %g0, %i0 | |
1562 | ||
1563 | !! Now disable err detection and clear the error from entry 6/7 | |
1564 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1565 | stxa %g0, [%g3]ASI_CERER | |
1566 | ||
1567 | stxa %g0, [%l0]0x25 | |
1568 | mov 0x3c0, %l0 | |
1569 | stxa %g0, [%l0]0x25 | |
1570 | ||
1571 | mondo_tail: | |
1572 | !!enable err injection and err detection | |
1573 | !!inject err using write to dev head | |
1574 | !! Enable error detection | |
1575 | add %g0, CERER_VA, %g3 | |
1576 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1577 | stxa %o2, [%g3]ASI_CERER | |
1578 | ||
1579 | !! Enable error injection | |
1580 | setx TSA_ERR_EN, %l0, %l5 | |
1581 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1582 | stxa %l5, [%g0]ASI_ERR_INJ | |
1583 | ||
1584 | mov 0x3c8, %l0 | |
1585 | stxa %g0, [%l0]0x25 | |
1586 | mov %g0, %i0 | |
1587 | ||
1588 | !disable err injection | |
1589 | stxa %g0, [%g0]ASI_ERR_INJ | |
1590 | ||
1591 | ldxa [%l0]0x25, %l2 | |
1592 | brz %i0, FAIL !! chk ipe trap taken | |
1593 | mov %g0, %i0 | |
1594 | ||
1595 | !! Now clear the error from entry 6 | |
1596 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1597 | stxa %g0, [%g3]ASI_CERER | |
1598 | ||
1599 | stxa %g0, [%l0]0x25 | |
1600 | dev_head: | |
1601 | !!enable err injection and err detection | |
1602 | !!inject err using write to dev head | |
1603 | !! Enable error detection | |
1604 | add %g0, CERER_VA, %g3 | |
1605 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1606 | stxa %o2, [%g3]ASI_CERER | |
1607 | ||
1608 | !! Enable error injection | |
1609 | setx TSA_ERR_EN, %l0, %l5 | |
1610 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1611 | stxa %l5, [%g0]ASI_ERR_INJ | |
1612 | ||
1613 | mov 0x3d0, %l0 | |
1614 | stxa %g0, [%l0]0x25 | |
1615 | mov %g0, %i0 | |
1616 | ||
1617 | !disable err injection | |
1618 | stxa %g0, [%g0]ASI_ERR_INJ | |
1619 | ||
1620 | ldxa [%l0]0x25, %l2 | |
1621 | brz %i0, FAIL !! chk ipe trap taken | |
1622 | mov %g0, %i0 | |
1623 | ||
1624 | !! Now clear the error from entry 6 | |
1625 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1626 | stxa %g0, [%g3]ASI_CERER | |
1627 | ||
1628 | stxa %g0, [%l0]0x25 | |
1629 | dev_tail: | |
1630 | !!enable err injection and err detection | |
1631 | !!inject err using write to dev head | |
1632 | !! Enable error detection | |
1633 | add %g0, CERER_VA, %g3 | |
1634 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1635 | stxa %o2, [%g3]ASI_CERER | |
1636 | ||
1637 | !! Enable error injection | |
1638 | setx TSA_ERR_EN, %l0, %l5 | |
1639 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1640 | stxa %l5, [%g0]ASI_ERR_INJ | |
1641 | ||
1642 | mov 0x3d8, %l0 | |
1643 | stxa %g0, [%l0]0x25 | |
1644 | mov %g0, %i0 | |
1645 | ||
1646 | !disable err injection | |
1647 | stxa %g0, [%g0]ASI_ERR_INJ | |
1648 | ||
1649 | ldxa [%l0]0x25, %l2 | |
1650 | brz %i0, FAIL !! chk ipe trap taken | |
1651 | mov %g0, %i0 | |
1652 | ||
1653 | !! Now clear the error from entry 6 | |
1654 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1655 | stxa %g0, [%g3]ASI_CERER | |
1656 | ||
1657 | stxa %g0, [%l0]0x25 | |
1658 | res_head: | |
1659 | !!enable err injection and err detection | |
1660 | !!inject err using write to dev head | |
1661 | !! Enable error detection | |
1662 | add %g0, CERER_VA, %g3 | |
1663 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1664 | stxa %o2, [%g3]ASI_CERER | |
1665 | ||
1666 | !! Enable error injection | |
1667 | setx TSA_ERR_EN, %l0, %l5 | |
1668 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1669 | stxa %l5, [%g0]ASI_ERR_INJ | |
1670 | ||
1671 | mov 0x3e0, %l0 | |
1672 | stxa %g0, [%l0]0x25 | |
1673 | mov %g0, %i0 | |
1674 | ||
1675 | !disable err injection | |
1676 | stxa %g0, [%g0]ASI_ERR_INJ | |
1677 | ||
1678 | ldxa [%l0]0x25, %l2 | |
1679 | brz %i0, FAIL !! chk ipe trap taken | |
1680 | mov %g0, %i0 | |
1681 | ||
1682 | !! Now clear the error from entry 6 | |
1683 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1684 | stxa %g0, [%g3]ASI_CERER | |
1685 | ||
1686 | stxa %g0, [%l0]0x25 | |
1687 | res_tail: | |
1688 | !!enable err injection and err detection | |
1689 | !!inject err using write to dev head | |
1690 | !! Enable error detection | |
1691 | add %g0, CERER_VA, %g3 | |
1692 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1693 | stxa %o2, [%g3]ASI_CERER | |
1694 | ||
1695 | !! Enable error injection | |
1696 | setx TSA_ERR_EN, %l0, %l5 | |
1697 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1698 | stxa %l5, [%g0]ASI_ERR_INJ | |
1699 | ||
1700 | mov 0x3e8, %l0 | |
1701 | stxa %g0, [%l0]0x25 | |
1702 | mov %g0, %i0 | |
1703 | ||
1704 | !disable err injection | |
1705 | stxa %g0, [%g0]ASI_ERR_INJ | |
1706 | ||
1707 | ldxa [%l0]0x25, %l2 | |
1708 | brz %i0, FAIL !! chk ipe trap taken | |
1709 | mov %g0, %i0 | |
1710 | ||
1711 | !! Now clear the error from entry 6 | |
1712 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1713 | stxa %g0, [%g3]ASI_CERER | |
1714 | ||
1715 | stxa %g0, [%l0]0x25 | |
1716 | non_res_head: | |
1717 | !!enable err injection and err detection | |
1718 | !!inject err using write to dev head | |
1719 | !! Enable error detection | |
1720 | add %g0, CERER_VA, %g3 | |
1721 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1722 | stxa %o2, [%g3]ASI_CERER | |
1723 | ||
1724 | !! Enable error injection | |
1725 | setx TSA_ERR_EN, %l0, %l5 | |
1726 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1727 | stxa %l5, [%g0]ASI_ERR_INJ | |
1728 | ||
1729 | mov 0x3f0, %l0 | |
1730 | stxa %g0, [%l0]0x25 | |
1731 | mov %g0, %i0 | |
1732 | ||
1733 | !disable err injection | |
1734 | stxa %g0, [%g0]ASI_ERR_INJ | |
1735 | ||
1736 | ldxa [%l0]0x25, %l2 | |
1737 | brz %i0, FAIL !! chk ipe trap taken | |
1738 | mov %g0, %i0 | |
1739 | ||
1740 | !! Now clear the error from entry 6 | |
1741 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1742 | stxa %g0, [%g3]ASI_CERER | |
1743 | stxa %g0, [%l0]0x25 | |
1744 | non_res_tail: | |
1745 | !!enable err injection and err detection | |
1746 | !!inject err using write to dev head | |
1747 | !! Enable error detection | |
1748 | add %g0, CERER_VA, %g3 | |
1749 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1750 | stxa %o2, [%g3]ASI_CERER | |
1751 | ||
1752 | !! Enable error injection | |
1753 | setx TSA_ERR_EN, %l0, %l5 | |
1754 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1755 | stxa %l5, [%g0]ASI_ERR_INJ | |
1756 | ||
1757 | mov 0x3f8, %l0 | |
1758 | stxa %g0, [%l0]0x25 | |
1759 | mov %g0, %i0 | |
1760 | ||
1761 | !disable err injection | |
1762 | stxa %g0, [%g0]ASI_ERR_INJ | |
1763 | ||
1764 | ldxa [%l0]0x25, %l2 | |
1765 | brz %i0, FAIL !! chk ipe trap taken | |
1766 | mov %g0, %i0 | |
1767 | ||
1768 | !! Now clear the error from entry 6 | |
1769 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
1770 | stxa %g0, [%g3]ASI_CERER | |
1771 | stxa %g0, [%l0]0x25 | |
1772 | ||
1773 | setx user_code_begin_008, %g1, %g2 | |
1774 | jmp %g2 | |
1775 | nop | |
1776 | ||
1777 | FAIL: EXIT_BAD | |
1778 | nop | |
1779 | ||
1780 | ||
1781 | attr_data { | |
1782 | Name = .My_User_Section_4v007, | |
1783 | part_0_ctx_nonzero_tsb_config_1, | |
1784 | VA = MY_USER_DATA_VA007, | |
1785 | RA = MY_USER_DATA_RA007, | |
1786 | PA = ra2pa(MY_USER_DATA_RA007, 0), | |
1787 | TTE_Context = PCONTEXT, | |
1788 | TTE_V = 1, | |
1789 | TTE_NFO = 0, | |
1790 | TTE_L = 0, | |
1791 | TTE_Soft = 0, | |
1792 | TTE_IE = 0, | |
1793 | TTE_E = 0, | |
1794 | TTE_CP = 1, | |
1795 | TTE_CV = 0, | |
1796 | TTE_P = 0, | |
1797 | TTE_EP = 0, | |
1798 | TTE_W = 1, | |
1799 | TTE_SW1 = 0, | |
1800 | TTE_SW0 = 0, | |
1801 | TTE_RSVD1 = 0, | |
1802 | TTE_Size = 0, | |
1803 | } | |
1804 | attr_data { | |
1805 | NAME = .My_User_Section_4v007, | |
1806 | hypervisor | |
1807 | } | |
1808 | .data | |
1809 | .global user_data_begin_007 | |
1810 | user_data_begin_007: | |
1811 | .word 0x14a3d | |
1812 | .word 0x798d | |
1813 | .word 0xfdd5 | |
1814 | .word 0x9d05 | |
1815 | ||
1816 | ||
1817 | SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008 | |
1818 | attr_text { | |
1819 | Name = .My_User_Section_4v008, | |
1820 | part_0_ctx_nonzero_tsb_config_3, | |
1821 | VA = MY_USER_TEXT_VA008, | |
1822 | RA = MY_USER_TEXT_RA008, | |
1823 | PA = ra2pa(MY_USER_TEXT_RA008, 0), | |
1824 | TTE_Context = PCONTEXT, | |
1825 | TTE_V = 1, | |
1826 | TTE_NFO = 0, | |
1827 | TTE_L = 0, | |
1828 | TTE_Soft = 0, | |
1829 | TTE_IE = 0, | |
1830 | TTE_E = 0, | |
1831 | TTE_CP = 1, | |
1832 | TTE_CV = 0, | |
1833 | TTE_P = 0, | |
1834 | TTE_EP = 1, | |
1835 | TTE_W = 0, | |
1836 | TTE_SW1 = 0, | |
1837 | TTE_SW0 = 0, | |
1838 | TTE_RSVD1 = 0, | |
1839 | TTE_Size = 0, | |
1840 | } | |
1841 | attr_text { | |
1842 | NAME = .My_User_Section_4v008, | |
1843 | hypervisor | |
1844 | } | |
1845 | .text | |
1846 | .global user_code_begin_008 | |
1847 | user_code_begin_008: | |
1848 | !! Enable error detection | |
1849 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
1850 | stxa %o2, [%g3]ASI_CERER | |
1851 | ||
1852 | add %g0, 1, %l1 | |
1853 | add %g0, 6, %l2 | |
1854 | add %g0, 0x55, %g1 | |
1855 | ||
1856 | mov %g0, %l6 | |
1857 | rd_tstate: | |
1858 | setx TSA_ERR_EN, %l0, %l5 | |
1859 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
1860 | stxa %l5, [%g0]ASI_ERR_INJ | |
1861 | !! change TL | |
1862 | wrpr %g0, %l2, %tl | |
1863 | wrpr %g0, %g1, %tstate | |
1864 | !! disable error injection | |
1865 | stxa %g0, [%g0]ASI_ERR_INJ | |
1866 | ||
1867 | setx rd_tt, %l0, %o2 | |
1868 | rdpr %tstate, %o2 | |
1869 | ||
1870 | rd_tt: | |
1871 | brz %i0, FAIL | |
1872 | mov %g0, %i0 | |
1873 | wrpr %g0, %l2, %tl | |
1874 | !!enable err injection | |
1875 | stxa %l5, [%g0]ASI_ERR_INJ | |
1876 | wrpr %g0, %g1, %tpc | |
1877 | !! disable error injection | |
1878 | stxa %g0, [%g0]ASI_ERR_INJ | |
1879 | setx rd_tpc, %l0, %o2 | |
1880 | ||
1881 | rdpr %tt, %o2 | |
1882 | ||
1883 | rd_tpc: | |
1884 | brz %i0, FAIL | |
1885 | mov %g0, %i0 | |
1886 | wrpr %g0, %l2, %tl | |
1887 | !!enable err injection | |
1888 | stxa %l5, [%g0]ASI_ERR_INJ | |
1889 | wrpr %g0, %g1, %tnpc | |
1890 | !! disable error injection | |
1891 | stxa %g0, [%g0]ASI_ERR_INJ | |
1892 | setx rd_tnpc, %l0, %o2 | |
1893 | ||
1894 | rdpr %tpc, %o2 | |
1895 | ||
1896 | rd_tnpc: | |
1897 | brz %i0, FAIL | |
1898 | mov %g0, %i0 | |
1899 | wrpr %g0, %l2, %tl | |
1900 | !!enable err injection | |
1901 | stxa %l5, [%g0]ASI_ERR_INJ | |
1902 | wrpr %g0, %g1, %tt | |
1903 | !! disable error injection | |
1904 | stxa %g0, [%g0]ASI_ERR_INJ | |
1905 | setx rd_hpstate, %l0, %o2 | |
1906 | ||
1907 | rdpr %tnpc, %o2 | |
1908 | ||
1909 | rd_hpstate: | |
1910 | brz %i0, FAIL | |
1911 | mov %g0, %i0 | |
1912 | wrpr %g0, %l2, %tl | |
1913 | !!enable err injection | |
1914 | stxa %l5, [%g0]ASI_ERR_INJ | |
1915 | wrpr %g0, %g1, %tt | |
1916 | !! disable error injection | |
1917 | stxa %g0, [%g0]ASI_ERR_INJ | |
1918 | setx wr_tt, %l0, %o2 | |
1919 | ||
1920 | rdhpr %htstate, %o2 | |
1921 | ||
1922 | wr_tt: | |
1923 | brz %i0, FAIL | |
1924 | mov %g0, %i0 | |
1925 | wrpr %g0, %l2, %tl | |
1926 | !!enable err injection | |
1927 | stxa %l5, [%g0]ASI_ERR_INJ | |
1928 | wrpr %g0, %g1, %tt | |
1929 | !! disable error injection | |
1930 | stxa %g0, [%g0]ASI_ERR_INJ | |
1931 | setx wr_tpc, %l0, %o2 | |
1932 | ||
1933 | wrpr %g0, %g1, %tt | |
1934 | ||
1935 | wr_tpc: | |
1936 | brz %i0, FAIL | |
1937 | mov %g0, %i0 | |
1938 | wrpr %g0, %l2, %tl | |
1939 | !!enable err injection | |
1940 | stxa %l5, [%g0]ASI_ERR_INJ | |
1941 | wrpr %g0, %g1, %tpc | |
1942 | !! disable error injection | |
1943 | stxa %g0, [%g0]ASI_ERR_INJ | |
1944 | setx wr_tnpc, %l0, %o2 | |
1945 | ||
1946 | wrpr %g0, %g1, %tpc | |
1947 | ||
1948 | wr_tnpc: | |
1949 | brz %i0, FAIL | |
1950 | mov %g0, %i0 | |
1951 | wrpr %g0, %l2, %tl | |
1952 | !!enable err injection | |
1953 | stxa %l5, [%g0]ASI_ERR_INJ | |
1954 | wrpr %g0, %g1, %tnpc | |
1955 | !! disable error injection | |
1956 | stxa %g0, [%g0]ASI_ERR_INJ | |
1957 | setx wr_htstate, %l0, %o2 | |
1958 | ||
1959 | wrpr %g0, %g1, %tnpc | |
1960 | ||
1961 | wr_htstate: | |
1962 | brz %i0, FAIL | |
1963 | mov %g0, %i0 | |
1964 | wrpr %g0, %l2, %tl | |
1965 | !!enable err injection | |
1966 | stxa %l5, [%g0]ASI_ERR_INJ | |
1967 | wrhpr %g0, %g1, %htstate | |
1968 | !! disable error injection | |
1969 | stxa %g0, [%g0]ASI_ERR_INJ | |
1970 | setx wr_tstate, %l0, %o2 | |
1971 | ||
1972 | wrhpr %g0, %g1, %htstate | |
1973 | ||
1974 | wr_tstate: | |
1975 | brz %i0, FAIL | |
1976 | mov %g0, %i0 | |
1977 | wrpr %g0, %l2, %tl | |
1978 | !!enable err injection | |
1979 | stxa %l5, [%g0]ASI_ERR_INJ | |
1980 | wrpr %g0, %g1, %tstate | |
1981 | !! disable error injection | |
1982 | stxa %g0, [%g0]ASI_ERR_INJ | |
1983 | setx wr_diag_6, %l0, %o2 | |
1984 | ||
1985 | wrpr %g0, %g1, %tstate | |
1986 | wr_diag_6: | |
1987 | brz %i0, FAIL | |
1988 | mov %g0, %i0 | |
1989 | ||
1990 | wrpr %g0, %l2, %tl | |
1991 | !!enable err injection | |
1992 | stxa %l5, [%g0]ASI_ERR_INJ | |
1993 | wrpr %g0, %g1, %tstate | |
1994 | !! disable error injection | |
1995 | stxa %g0, [%g0]ASI_ERR_INJ | |
1996 | ||
1997 | mov 0x28, %l6 | |
1998 | ldxa [%l6]0x5b, %g2 !! read ecc for entry with err | |
1999 | brnz %i0, FAIL | |
2000 | mov %g0, %i0 | |
2001 | ||
2002 | !! Now clear the err in entry 5 | |
2003 | add %g0, CERER_VA, %g3 !!g3 has cerer va | |
2004 | stxa %g0, [%g3]ASI_CERER | |
2005 | mov 1, %l2 | |
2006 | wrpr %g0, %g1, %tstate | |
2007 | ||
2008 | wrpr %g0, %l2, %tl | |
2009 | ||
2010 | setx user_code_begin_010, %g1, %g2 | |
2011 | jmp %g2 | |
2012 | nop | |
2013 | ||
2014 | EXIT_GOOD | |
2015 | ||
2016 | ||
2017 | FAIL: EXIT_BAD | |
2018 | nop | |
2019 | ||
2020 | attr_data { | |
2021 | Name = .My_User_Section_4v008, | |
2022 | part_0_ctx_nonzero_tsb_config_1, | |
2023 | VA = MY_USER_DATA_VA008, | |
2024 | RA = MY_USER_DATA_RA008, | |
2025 | PA = ra2pa(MY_USER_DATA_RA008, 0), | |
2026 | TTE_Context = PCONTEXT, | |
2027 | TTE_V = 1, | |
2028 | TTE_NFO = 0, | |
2029 | TTE_L = 0, | |
2030 | TTE_Soft = 0, | |
2031 | TTE_IE = 0, | |
2032 | TTE_E = 0, | |
2033 | TTE_CP = 1, | |
2034 | TTE_CV = 0, | |
2035 | TTE_P = 0, | |
2036 | TTE_EP = 0, | |
2037 | TTE_W = 1, | |
2038 | TTE_SW1 = 0, | |
2039 | TTE_SW0 = 0, | |
2040 | TTE_RSVD1 = 0, | |
2041 | TTE_Size = 0, | |
2042 | } | |
2043 | attr_data { | |
2044 | NAME = .My_User_Section_4v008, | |
2045 | hypervisor | |
2046 | } | |
2047 | .data | |
2048 | .global user_data_begin_008 | |
2049 | user_data_begin_008: | |
2050 | .word 0xfd87 | |
2051 | .word 0x6aa3 | |
2052 | .word 0x4d58 | |
2053 | .word 0x547a | |
2054 | ||
2055 | ||
2056 | SECTION .My_User_Section_4v009 TEXT_VA=MY_USER_TEXT_VA009, DATA_VA=MY_USER_DATA_VA009 | |
2057 | attr_text { | |
2058 | Name = .My_User_Section_4v009, | |
2059 | part_0_ctx_nonzero_tsb_config_3, | |
2060 | VA = MY_USER_TEXT_VA009, | |
2061 | RA = MY_USER_TEXT_RA009, | |
2062 | PA = ra2pa(MY_USER_TEXT_RA009, 0), | |
2063 | TTE_Context = PCONTEXT, | |
2064 | TTE_V = 1, | |
2065 | TTE_NFO = 0, | |
2066 | TTE_L = 0, | |
2067 | TTE_Soft = 0, | |
2068 | TTE_IE = 0, | |
2069 | TTE_E = 0, | |
2070 | TTE_CP = 1, | |
2071 | TTE_CV = 0, | |
2072 | TTE_P = 0, | |
2073 | TTE_EP = 1, | |
2074 | TTE_W = 0, | |
2075 | TTE_SW1 = 0, | |
2076 | TTE_SW0 = 0, | |
2077 | TTE_RSVD1 = 0, | |
2078 | TTE_Size = 0, | |
2079 | } | |
2080 | attr_text { | |
2081 | NAME = .My_User_Section_4v009, | |
2082 | hypervisor | |
2083 | } | |
2084 | !! inject errors but don't enable cerer.tsac. Chk that the error is not detected. | |
2085 | .text | |
2086 | .global user_code_begin_009 | |
2087 | user_code_begin_009: | |
2088 | set 0xaabbccdd, %g1 | |
2089 | setx TSA_ERR_EN, %l0, %l5 | |
2090 | or %l5, 0x1, %l5 | |
2091 | stxa %l5, [%g0]ASI_ERR_INJ !! enable error injection | |
2092 | ||
2093 | mov %g0, %l1 | |
2094 | wrpr %g0, 1, %tl !!change to tl1 | |
2095 | wrhpr %g0, %g1, %htstate | |
2096 | ||
2097 | rdpr %tstate, %o2 | |
2098 | rdpr %tt, %o2 | |
2099 | rdpr %tpc, %o2 | |
2100 | rdpr %tnpc, %o2 | |
2101 | rdhpr %htstate, %o2 | |
2102 | wrpr %g0, %g1, %tstate | |
2103 | wrpr %g0, %g1, %tt | |
2104 | wrpr %g0, %g1, %tpc | |
2105 | wrpr %g0, %g1, %tnpc | |
2106 | ||
2107 | cmp %l1, %i0 | |
2108 | bne FAIL | |
2109 | ||
2110 | wrpr %g0, 2, %tl !!change to tl2 | |
2111 | wrpr %g0, %g1, %tstate | |
2112 | ||
2113 | rdpr %tstate, %o2 | |
2114 | rdpr %tt, %o2 | |
2115 | rdpr %tpc, %o2 | |
2116 | rdpr %tnpc, %o2 | |
2117 | rdhpr %htstate, %o2 | |
2118 | wrpr %g0, %g1, %tstate | |
2119 | wrpr %g0, %g1, %tt | |
2120 | wrpr %g0, %g1, %tpc | |
2121 | wrpr %g0, %g1, %tnpc | |
2122 | ||
2123 | cmp %l1, %i0 | |
2124 | bne FAIL | |
2125 | ||
2126 | wrpr %g0, 3, %tl !!change to tl2 | |
2127 | wrpr %g0, %g1, %tt | |
2128 | ||
2129 | rdpr %tstate, %o2 | |
2130 | rdpr %tt, %o2 | |
2131 | rdpr %tpc, %o2 | |
2132 | rdpr %tnpc, %o2 | |
2133 | rdhpr %htstate, %o2 | |
2134 | wrpr %g0, %g1, %tstate | |
2135 | wrpr %g0, %g1, %tt | |
2136 | wrpr %g0, %g1, %tpc | |
2137 | wrpr %g0, %g1, %tnpc | |
2138 | ||
2139 | cmp %l1, %i0 | |
2140 | bne FAIL | |
2141 | ||
2142 | wrpr %g0, 4, %tl !!change to tl2 | |
2143 | wrpr %g0, %g1, %tpc | |
2144 | ||
2145 | rdpr %tstate, %o2 | |
2146 | rdpr %tt, %o2 | |
2147 | rdpr %tpc, %o2 | |
2148 | rdpr %tnpc, %o2 | |
2149 | rdhpr %htstate, %o2 | |
2150 | wrpr %g0, %g1, %tstate | |
2151 | wrpr %g0, %g1, %tt | |
2152 | wrpr %g0, %g1, %tpc | |
2153 | wrpr %g0, %g1, %tnpc | |
2154 | ||
2155 | cmp %l1, %i0 | |
2156 | bne FAIL | |
2157 | ||
2158 | wrpr %g0, 5, %tl !!change to tl2 | |
2159 | wrpr %g0, %g1, %tnpc | |
2160 | ||
2161 | rdpr %tstate, %o2 | |
2162 | rdpr %tt, %o2 | |
2163 | rdpr %tpc, %o2 | |
2164 | rdpr %tnpc, %o2 | |
2165 | rdhpr %htstate, %o2 | |
2166 | wrpr %g0, %g1, %tstate | |
2167 | wrpr %g0, %g1, %tt | |
2168 | wrpr %g0, %g1, %tpc | |
2169 | wrpr %g0, %g1, %tnpc | |
2170 | ||
2171 | cmp %l1, %i0 | |
2172 | bne FAIL | |
2173 | ||
2174 | setx user_code_begin_010, %g1, %g2 | |
2175 | jmp %g2 | |
2176 | nop | |
2177 | ||
2178 | FAIL: EXIT_BAD | |
2179 | nop | |
2180 | ||
2181 | attr_data { | |
2182 | Name = .My_User_Section_4v009, | |
2183 | part_0_ctx_nonzero_tsb_config_1, | |
2184 | VA = MY_USER_DATA_VA009, | |
2185 | RA = MY_USER_DATA_RA009, | |
2186 | PA = ra2pa(MY_USER_DATA_RA009, 0), | |
2187 | TTE_Context = PCONTEXT, | |
2188 | TTE_V = 1, | |
2189 | TTE_NFO = 0, | |
2190 | TTE_L = 0, | |
2191 | TTE_Soft = 0, | |
2192 | TTE_IE = 0, | |
2193 | TTE_E = 0, | |
2194 | TTE_CP = 0, | |
2195 | TTE_CV = 0, | |
2196 | TTE_P = 0, | |
2197 | TTE_EP = 0, | |
2198 | TTE_W = 1, | |
2199 | TTE_SW1 = 0, | |
2200 | TTE_SW0 = 0, | |
2201 | TTE_RSVD1 = 0, | |
2202 | TTE_Size = 0, | |
2203 | } | |
2204 | attr_data { | |
2205 | NAME = .My_User_Section_4v009, | |
2206 | hypervisor | |
2207 | } | |
2208 | .data | |
2209 | .global user_data_begin_009 | |
2210 | user_data_begin_009: | |
2211 | .xword 0x9f9cf317c6bf6c3e | |
2212 | .xword 0x6e5072dea1536687 | |
2213 | .xword 0xecd6c1a2d916c251 | |
2214 | .xword 0x3ae5485cda37f88a | |
2215 | .xword 0x1a2c7d4ed5edb96c | |
2216 | .xword 0x9e3b9e188934db9d | |
2217 | .xword 0x6fc59d2722a580de | |
2218 | .xword 0x69b382cc58c91552 | |
2219 | ||
2220 | .word 0x26f5 | |
2221 | .word 0x14ad8 | |
2222 | .word 0x6417 | |
2223 | .word 0x17560 | |
2224 | ||
2225 | ||
2226 | SECTION .My_User_Section_4v010 TEXT_VA=MY_USER_TEXT_VA010, DATA_VA=MY_USER_DATA_VA010 | |
2227 | attr_text { | |
2228 | Name = .My_User_Section_4v010, | |
2229 | part_0_ctx_nonzero_tsb_config_2, | |
2230 | VA = MY_USER_TEXT_VA010, | |
2231 | RA = MY_USER_TEXT_RA010, | |
2232 | PA = ra2pa(MY_USER_TEXT_RA010, 0), | |
2233 | TTE_Context = PCONTEXT, | |
2234 | TTE_V = 1, | |
2235 | TTE_NFO = 0, | |
2236 | TTE_L = 0, | |
2237 | TTE_Soft = 0, | |
2238 | TTE_IE = 0, | |
2239 | TTE_E = 0, | |
2240 | TTE_CP = 1, | |
2241 | TTE_CV = 0, | |
2242 | TTE_P = 0, | |
2243 | TTE_EP = 1, | |
2244 | TTE_W = 0, | |
2245 | TTE_SW1 = 0, | |
2246 | TTE_SW0 = 0, | |
2247 | TTE_RSVD1 = 0, | |
2248 | TTE_Size = 0, | |
2249 | } | |
2250 | attr_text { | |
2251 | NAME = .My_User_Section_4v010, | |
2252 | hypervisor | |
2253 | } | |
2254 | !! inject errors, enable cerer.tsac. Turn off CETER.PSCCE. | |
2255 | !! chk that the stores are not committed and the trap is | |
2256 | !! not taken. | |
2257 | .text | |
2258 | .global user_code_begin_010 | |
2259 | user_code_begin_010: | |
2260 | ||
2261 | mov %g0, %i0 | |
2262 | ||
2263 | !! set CERER.TSAC | |
2264 | setx 0x100000000, %g1, %o2 !! enable tsac errs | |
2265 | add %g0, CERER_VA, %g3 | |
2266 | ||
2267 | stxa %o2, [%g3]ASI_CERER | |
2268 | ||
2269 | !! clear CETER.PSCCE but set the DE and pscce bits | |
2270 | mov 3, %g1 | |
2271 | sllx %g1, 60, %g1 | |
2272 | add %g0, CETER_VA, %g3 | |
2273 | stxa %g1, [%g3]ASI_CETER | |
2274 | ||
2275 | setx TSA_ERR_EN, %l0, %l5 | |
2276 | or %l5, 0x1, %l5 ! set mask bit 0 to 1 | |
2277 | stxa %l5, [%g0]ASI_ERR_INJ | |
2278 | !! change TL | |
2279 | mov 1, %l2 | |
2280 | wrpr %g0, %l2, %tl | |
2281 | wrpr %g0, %g1, %tstate | |
2282 | !! disable error injection | |
2283 | stxa %g0, [%g0]ASI_ERR_INJ | |
2284 | ||
2285 | rdpr %tstate, %o2 | |
2286 | brnz %i0, FAIL | |
2287 | mov %g0, %i0 | |
2288 | ||
2289 | wrpr %g0, %g1, %tstate !! shd also clear the err | |
2290 | brnz %i0, FAIL | |
2291 | mov %g0, %i0 | |
2292 | ||
2293 | !! enable err detection and see that no trap is taken | |
2294 | mov 1, %g1 | |
2295 | sllx %g1, 62, %g1 | |
2296 | add %g0, CETER_VA, %g3 | |
2297 | stxa %g1, [%g3]ASI_CETER | |
2298 | ||
2299 | rdpr %tstate, %o2 | |
2300 | brnz %i0, FAIL | |
2301 | mov %g0, %i0 | |
2302 | ||
2303 | ||
2304 | EXIT_GOOD | |
2305 | nop | |
2306 | ||
2307 | FAIL: EXIT_BAD | |
2308 | nop | |
2309 | ||
2310 | attr_data { | |
2311 | Name = .My_User_Section_4v010, | |
2312 | part_0_ctx_nonzero_tsb_config_1, | |
2313 | VA = MY_USER_DATA_VA010, | |
2314 | RA = MY_nc_DATA_RA010, | |
2315 | PA = ra2pa(MY_nc_DATA_RA010, 0), | |
2316 | TTE_Context = PCONTEXT, | |
2317 | TTE_V = 1, | |
2318 | TTE_NFO = 0, | |
2319 | TTE_L = 0, | |
2320 | TTE_Soft = 0, | |
2321 | TTE_IE = 0, | |
2322 | TTE_E = 0, | |
2323 | TTE_CP = 0, | |
2324 | TTE_CV = 0, | |
2325 | TTE_P = 0, | |
2326 | TTE_EP = 0, | |
2327 | TTE_W = 1, | |
2328 | TTE_SW1 = 0, | |
2329 | TTE_SW0 = 0, | |
2330 | TTE_RSVD1 = 0, | |
2331 | TTE_Size = 0, | |
2332 | } | |
2333 | attr_data { | |
2334 | NAME = .My_User_Section_4v010, | |
2335 | hypervisor | |
2336 | } | |
2337 | .data | |
2338 | .global user_data_begin_010 | |
2339 | user_data_begin_010: | |
2340 | .xword 0x54007d9c96e7a9ff | |
2341 | .xword 0x930027e0327f4f59 | |
2342 | .xword 0xe0dcea6ac80eb2ff | |
2343 | .xword 0x970ef238b6fd38f3 | |
2344 | .xword 0x1044dc7715f25a67 | |
2345 | .xword 0xd7a62736b8af1568 | |
2346 | .xword 0x0f5fcf05ff8a547a | |
2347 | .xword 0x853766fbc6f6eaa8 | |
2348 | ||
2349 | .word 0xc750 | |
2350 | .word 0x36b | |
2351 | .word 0x4f6d | |
2352 | .word 0x108ec | |
2353 | ||
2354 | ||
2355 | SECTION .My_User_Section_4v011 TEXT_VA=MY_USER_TEXT_VA011, DATA_VA=MY_USER_DATA_VA011 | |
2356 | attr_text { | |
2357 | Name = .My_User_Section_4v011, | |
2358 | part_0_ctx_nonzero_tsb_config_2, | |
2359 | VA = MY_USER_TEXT_VA011, | |
2360 | RA = MY_USER_TEXT_RA011, | |
2361 | PA = ra2pa(MY_USER_TEXT_RA011, 0), | |
2362 | TTE_Context = PCONTEXT, | |
2363 | TTE_V = 1, | |
2364 | TTE_NFO = 0, | |
2365 | TTE_L = 0, | |
2366 | TTE_Soft = 0, | |
2367 | TTE_IE = 0, | |
2368 | TTE_E = 0, | |
2369 | TTE_CP = 1, | |
2370 | TTE_CV = 0, | |
2371 | TTE_P = 0, | |
2372 | TTE_EP = 1, | |
2373 | TTE_W = 0, | |
2374 | TTE_SW1 = 0, | |
2375 | TTE_SW0 = 0, | |
2376 | TTE_RSVD1 = 0, | |
2377 | TTE_Size = 0, | |
2378 | } | |
2379 | attr_text { | |
2380 | NAME = .My_User_Section_4v011, | |
2381 | hypervisor | |
2382 | } | |
2383 | .text | |
2384 | .global user_code_begin_011 | |
2385 | user_code_begin_011: | |
2386 | !! The index 40 has errors. | |
2387 | !! turn off cerer.dcvp. | |
2388 | !! access an index with errros. | |
2389 | !! The ld reqs shd be hits and no err shd be reported. | |
2390 | !! Now turn on the cerer.dcvp, chk that an error is reported. | |
2391 | ||
2392 | setx user_data_begin_011, %g1, %o4 | |
2393 | swap [%o4 + %i1], %g2 !! Take a dae_nc_pg exception to turn of cerer.dcvp | |
2394 | ||
2395 | !!now do a bunch of lds from the index with err and see no trap is reported | |
2396 | ld [%g3+%i1], %g1 | |
2397 | ld [%g4+%i1], %g1 | |
2398 | ld [%g5+%i1], %g1 | |
2399 | ld [%g6+%i1], %g1 | |
2400 | ||
2401 | mov %g0, %l1 | |
2402 | cmp %i0, %l1 | |
2403 | bne FAIL | |
2404 | mov %g0, %i0 | |
2405 | add %g0, 1, %l1 | |
2406 | ||
2407 | ! turn on cerer.dcvp | |
2408 | ldxa [%g3]0x4, %g1 !!priv_action trap | |
2409 | ||
2410 | ld [%g3+%i1], %g1 !! err reported | |
2411 | cmp %i0, %l1 | |
2412 | bne FAIL | |
2413 | mov %g0, %i0 | |
2414 | ||
2415 | !! Ld data in 2 ways in cache. Inject error in invalid way. Chk that the error | |
2416 | !! is still reported when we access the index. | |
2417 | ||
2418 | INVALID_LINE_CASE: | |
2419 | add %i1, 0x20, %i1 !! index is 60 | |
2420 | ld [%g3+%i1], %g1 | |
2421 | ld [%g4+%i1], %g1 | |
2422 | add %g0, 2, %l0 !! inject err in way2 | |
2423 | ||
2424 | ld [%g3+1], %g1 !! Take misaligned trap to inject err | |
2425 | setx user_data_begin_005, %g1, %o3 | |
2426 | ld [%o3+%i1], %g1 !! err shd be reported | |
2427 | setx user_code_begin_012, %g1, %g2 | |
2428 | jmp %g2 | |
2429 | nop | |
2430 | ||
2431 | FAIL: EXIT_BAD | |
2432 | nop | |
2433 | ||
2434 | attr_data { | |
2435 | Name = .My_User_Section_4v011, | |
2436 | part_0_ctx_nonzero_tsb_config_1, | |
2437 | VA = MY_USER_DATA_VA011, | |
2438 | RA = MY_nc_DATA_RA011, | |
2439 | PA = ra2pa(MY_nc_DATA_RA011, 0), | |
2440 | TTE_Context = PCONTEXT, | |
2441 | TTE_V = 1, | |
2442 | TTE_NFO = 0, | |
2443 | TTE_L = 0, | |
2444 | TTE_Soft = 0, | |
2445 | TTE_IE = 0, | |
2446 | TTE_E = 0, | |
2447 | TTE_CP = 0, | |
2448 | TTE_CV = 0, | |
2449 | TTE_P = 0, | |
2450 | TTE_EP = 0, | |
2451 | TTE_W = 1, | |
2452 | TTE_SW1 = 0, | |
2453 | TTE_SW0 = 0, | |
2454 | TTE_RSVD1 = 0, | |
2455 | TTE_Size = 0, | |
2456 | } | |
2457 | attr_data { | |
2458 | NAME = .My_User_Section_4v011, | |
2459 | hypervisor | |
2460 | } | |
2461 | .data | |
2462 | .global user_data_begin_011 | |
2463 | user_data_begin_011: | |
2464 | .xword 0xe2faba6d06c28930 | |
2465 | .xword 0xeb17ac2bc38a58c1 | |
2466 | .xword 0xb82aeb3b264dd259 | |
2467 | .xword 0xb68211db06aea937 | |
2468 | .xword 0x05082906aae4d7b4 | |
2469 | .xword 0x6ddfd83f3e9a6b87 | |
2470 | .xword 0x15f5c009f48a5dfe | |
2471 | .xword 0x57519c7e517d5a47 | |
2472 | ||
2473 | .word 0x1684b | |
2474 | .word 0xe9eb | |
2475 | .word 0x39e | |
2476 | .word 0x15b8 | |
2477 | ||
2478 | ||
2479 | SECTION .My_User_Section_4v012 TEXT_VA=MY_USER_TEXT_VA012, DATA_VA=MY_USER_DATA_VA012 | |
2480 | attr_text { | |
2481 | Name = .My_User_Section_4v012, | |
2482 | part_0_ctx_nonzero_tsb_config_2, | |
2483 | VA = MY_USER_TEXT_VA012, | |
2484 | RA = MY_USER_TEXT_RA012, | |
2485 | PA = ra2pa(MY_USER_TEXT_RA012, 0), | |
2486 | TTE_Context = PCONTEXT, | |
2487 | TTE_V = 1, | |
2488 | TTE_NFO = 0, | |
2489 | TTE_L = 0, | |
2490 | TTE_Soft = 0, | |
2491 | TTE_IE = 0, | |
2492 | TTE_E = 0, | |
2493 | TTE_CP = 1, | |
2494 | TTE_CV = 0, | |
2495 | TTE_P = 0, | |
2496 | TTE_EP = 1, | |
2497 | TTE_W = 0, | |
2498 | TTE_SW1 = 0, | |
2499 | TTE_SW0 = 0, | |
2500 | TTE_RSVD1 = 0, | |
2501 | TTE_Size = 0, | |
2502 | } | |
2503 | attr_text { | |
2504 | NAME = .My_User_Section_4v012, | |
2505 | hypervisor | |
2506 | } | |
2507 | .text | |
2508 | .global user_code_begin_012 | |
2509 | user_code_begin_012: | |
2510 | cmp %i0, %l1 | |
2511 | bne FAIL | |
2512 | mov %g0, %i0 | |
2513 | add %g0, 0x40, %i1 | |
2514 | ||
2515 | add %g0, 4, %l0 !! err in all ways | |
2516 | ||
2517 | ! turn off ceter.dhcce | |
2518 | mov %g0, %l7 | |
2519 | ldd [%g3 + 0x4], %d0 | |
2520 | ! ld data | |
2521 | ||
2522 | ld [%g3+%i1], %g1 | |
2523 | ld [%g4+%i1], %g1 | |
2524 | ld [%g5+%i1], %g1 | |
2525 | ld [%g6+%i1], %g1 | |
2526 | ||
2527 | !take misaligned trap | |
2528 | ||
2529 | ld [%g3+1], %g1 | |
2530 | ||
2531 | !now access from same page, no err shd be reported, desr shd still be updated | |
2532 | !! and the err cleared and D$ invalidated. | |
2533 | ||
2534 | ld [%g3+%i1], %g1 | |
2535 | mov %g0, %l1 | |
2536 | cmp %i0, %l1 | |
2537 | bne FAIL | |
2538 | mov %g0, %o6 !! ME bit clear | |
2539 | ! chk that desr is still updated | |
2540 | std %d0, [%g3 + 0x4] !stdf_not_aligned | |
2541 | ||
2542 | ! If I turn on ceter.dhcce now, the trap won't be taken because the TLU | |
2543 | ! clears the F bit once we read the DESR. | |
2544 | ||
2545 | ! Do a bunch of bogus lds and then turn on ceter.dhcce. | |
2546 | ld [%g3], %g1 | |
2547 | ld [%g4], %g1 | |
2548 | ld [%g5], %g1 | |
2549 | ||
2550 | ! turn on dhcce | |
2551 | add %g0, 1, %l7 | |
2552 | ldd [%g3 + 0x4], %d0 | |
2553 | ||
2554 | ! Do a bunch of bogus lds. The TLU will still take the trap. Clear the io | |
2555 | ld [%g3], %g1 | |
2556 | ld [%g4], %g1 | |
2557 | ld [%g5], %g1 | |
2558 | mov %g0, %l1 | |
2559 | mov %g0, %i0 | |
2560 | ||
2561 | ! By this time the trap shd be taken. | |
2562 | ! now do a bunch of lds from the index that had the err. No trap shd be taken as | |
2563 | ! the error shd have been cleared. | |
2564 | ||
2565 | ld [%g3+%i1], %g1 | |
2566 | ld [%g4+%i1], %g1 | |
2567 | ld [%g5+%i1], %g1 | |
2568 | ld [%g6+%i1], %g1 | |
2569 | ld [%g3+%i1], %g1 | |
2570 | ld [%g4+%i1], %g1 | |
2571 | ld [%g5+%i1], %g1 | |
2572 | mov %g0, %l1 | |
2573 | cmp %i0, %l1 | |
2574 | bne FAIL | |
2575 | setx user_code_begin_013, %g1, %g2 | |
2576 | jmp %g2 | |
2577 | nop | |
2578 | ||
2579 | FAIL: EXIT_BAD | |
2580 | nop | |
2581 | ||
2582 | attr_data { | |
2583 | Name = .My_User_Section_4v012, | |
2584 | part_0_ctx_nonzero_tsb_config_1, | |
2585 | VA = MY_USER_DATA_VA012, | |
2586 | RA = MY_nc_DATA_RA012, | |
2587 | PA = ra2pa(MY_nc_DATA_RA012, 0), | |
2588 | TTE_Context = PCONTEXT, | |
2589 | TTE_V = 1, | |
2590 | TTE_NFO = 0, | |
2591 | TTE_L = 0, | |
2592 | TTE_Soft = 0, | |
2593 | TTE_IE = 0, | |
2594 | TTE_E = 0, | |
2595 | TTE_CP = 0, | |
2596 | TTE_CV = 0, | |
2597 | TTE_P = 0, | |
2598 | TTE_EP = 0, | |
2599 | TTE_W = 1, | |
2600 | TTE_SW1 = 0, | |
2601 | TTE_SW0 = 0, | |
2602 | TTE_RSVD1 = 0, | |
2603 | TTE_Size = 0, | |
2604 | } | |
2605 | attr_data { | |
2606 | NAME = .My_User_Section_4v012, | |
2607 | hypervisor | |
2608 | } | |
2609 | .data | |
2610 | .global user_data_begin_012 | |
2611 | user_data_begin_012: | |
2612 | .xword 0xe7719c91a7d39000 | |
2613 | .xword 0x897bf53fdfab4acf | |
2614 | .xword 0x33641c943c252a55 | |
2615 | .xword 0x7a6152bedcb6d45a | |
2616 | .xword 0xc402d285b09a5315 | |
2617 | .xword 0x113780fae604dd95 | |
2618 | .xword 0xf4b4dc9fdda745da | |
2619 | .xword 0x4541714dba5a4e49 | |
2620 | ||
2621 | .word 0x1001b | |
2622 | .word 0x8080 | |
2623 | .word 0x1008a | |
2624 | .word 0x9431 | |
2625 | ||
2626 | ||
2627 | SECTION .My_User_Section_4v013 TEXT_VA=MY_USER_TEXT_VA013, DATA_VA=MY_USER_DATA_VA013 | |
2628 | attr_text { | |
2629 | Name = .My_User_Section_4v013, | |
2630 | part_0_ctx_nonzero_tsb_config_2, | |
2631 | VA = MY_USER_TEXT_VA013, | |
2632 | RA = MY_USER_TEXT_RA013, | |
2633 | PA = ra2pa(MY_USER_TEXT_RA013, 0), | |
2634 | TTE_Context = PCONTEXT, | |
2635 | TTE_V = 1, | |
2636 | TTE_NFO = 0, | |
2637 | TTE_L = 0, | |
2638 | TTE_Soft = 0, | |
2639 | TTE_IE = 0, | |
2640 | TTE_E = 0, | |
2641 | TTE_CP = 1, | |
2642 | TTE_CV = 0, | |
2643 | TTE_P = 0, | |
2644 | TTE_EP = 1, | |
2645 | TTE_W = 0, | |
2646 | TTE_SW1 = 0, | |
2647 | TTE_SW0 = 0, | |
2648 | TTE_RSVD1 = 0, | |
2649 | TTE_Size = 0, | |
2650 | } | |
2651 | attr_text { | |
2652 | NAME = .My_User_Section_4v013, | |
2653 | hypervisor | |
2654 | } | |
2655 | .text | |
2656 | .global user_code_begin_013 | |
2657 | user_code_begin_013: | |
2658 | add %g0, 4, %l0 !! err in all ways | |
2659 | ||
2660 | ! turn off ceter.dhcce | |
2661 | mov %g0, %l7 | |
2662 | ldd [%g3 + 0x4], %d0 | |
2663 | ||
2664 | !take misaligned trap | |
2665 | ||
2666 | ld [%g3+1], %g1 | |
2667 | ||
2668 | !now access from same page, no err shd be reported, desr shd still be updated | |
2669 | !! and the err cleared and D$ invalidated. | |
2670 | ||
2671 | ld [%g3+%i1], %g1 | |
2672 | mov %g0, %l1 | |
2673 | cmp %i0, %l1 | |
2674 | bne FAIL | |
2675 | ||
2676 | !! Now inject error in another index. | |
2677 | !! ld in all the ways | |
2678 | add %i1, 0x10, %i1 !! index is 0x50 | |
2679 | ld [%g3+%i1], %g1 | |
2680 | ld [%g4+%i1], %g1 | |
2681 | ld [%g5+%i1], %g1 | |
2682 | ld [%g6+%i1], %g1 | |
2683 | ||
2684 | ld [%g3+1], %g1 !! inject err | |
2685 | ||
2686 | !now access from same page, no err shd be reported, desr shd still be updated | |
2687 | ! and ME bit be set. | |
2688 | !!And the err cleared and D$ invalidated. | |
2689 | ||
2690 | !now access from same page, no err shd be reported, desr shd still be updated | |
2691 | !! and the err cleared and D$ invalidated. | |
2692 | ||
2693 | ld [%g3+0x50], %g1 | |
2694 | mov %g0, %l1 | |
2695 | cmp %i0, %l1 | |
2696 | bne FAIL | |
2697 | add %g0, 0x40, %i1 !! DESR recoreds the info for the first index | |
2698 | add %g0,1, %o6 !! ME bit set | |
2699 | ! chk that desr is still updated | |
2700 | std %d0, [%g3 + 0x4] !stdf_not_aligned | |
2701 | ||
2702 | ! Do a bunch of bogus lds and then turn on ceter.dhcce. | |
2703 | ld [%g3], %g1 | |
2704 | ld [%g4], %g1 | |
2705 | ld [%g5], %g1 | |
2706 | ||
2707 | ! turn on dhcce | |
2708 | add %g0, 1, %l7 | |
2709 | ldd [%g3 + 0x4], %d0 | |
2710 | ||
2711 | ! Do a bunch of bogus lds. The TLU will still take the trap. Clear the io | |
2712 | ld [%g3], %g1 | |
2713 | ld [%g4], %g1 | |
2714 | ld [%g5], %g1 | |
2715 | mov %g0, %l1 | |
2716 | mov %g0, %i0 | |
2717 | ||
2718 | ! By this time the trap shd be taken. | |
2719 | ! now do a bunch of lds from the index that had the err. No trap shd be taken as | |
2720 | ! the error shd have been cleared. | |
2721 | ||
2722 | ld [%g3+%i1], %g1 | |
2723 | ld [%g4+%i1], %g1 | |
2724 | ld [%g5+%i1], %g1 | |
2725 | ld [%g6+%i1], %g1 | |
2726 | ld [%g3+0x50], %g1 | |
2727 | ld [%g4+0x50], %g1 | |
2728 | ld [%g5+0x50], %g1 | |
2729 | ld [%g6+0x50], %g1 | |
2730 | ||
2731 | mov %g0, %l1 | |
2732 | cmp %i0, %l1 | |
2733 | bne FAIL | |
2734 | nop | |
2735 | ||
2736 | EXIT_GOOD | |
2737 | nop | |
2738 | ||
2739 | FAIL: | |
2740 | EXIT_BAD | |
2741 | nop | |
2742 | attr_data { | |
2743 | Name = .My_User_Section_4v013, | |
2744 | part_0_ctx_nonzero_tsb_config_1, | |
2745 | VA = MY_USER_DATA_VA013, | |
2746 | RA = MY_nc_DATA_RA013, | |
2747 | PA = ra2pa(MY_nc_DATA_RA013, 0), | |
2748 | TTE_Context = PCONTEXT, | |
2749 | TTE_V = 1, | |
2750 | TTE_NFO = 0, | |
2751 | TTE_L = 0, | |
2752 | TTE_Soft = 0, | |
2753 | TTE_IE = 0, | |
2754 | TTE_E = 0, | |
2755 | TTE_CP = 0, | |
2756 | TTE_CV = 0, | |
2757 | TTE_P = 0, | |
2758 | TTE_EP = 0, | |
2759 | TTE_W = 1, | |
2760 | TTE_SW1 = 0, | |
2761 | TTE_SW0 = 0, | |
2762 | TTE_RSVD1 = 0, | |
2763 | TTE_Size = 0, | |
2764 | } | |
2765 | attr_data { | |
2766 | NAME = .My_User_Section_4v013, | |
2767 | hypervisor | |
2768 | } | |
2769 | .data | |
2770 | .global user_data_begin_013 | |
2771 | user_data_begin_013: | |
2772 | .xword 0xf9d14275b20204ee | |
2773 | .xword 0xcbd5e7e62934200b | |
2774 | .xword 0x88d5a3eb459d773d | |
2775 | .xword 0x1113616971dbf6ad | |
2776 | .xword 0x9208e6261dbbac60 | |
2777 | .xword 0x6ad4e3984dc85a86 | |
2778 | .xword 0x5b8aaa327733b2bc | |
2779 | .xword 0x0178b83acce0d7fa | |
2780 | .xword 0xd6cc7f8e1fe93d33 | |
2781 | .word 0x137a8 | |
2782 | .word 0xa14 | |
2783 | .word 0xc9a1 | |
2784 | .word 0x14d93 | |
2785 | ||
2786 | ||
2787 | .global INT_PROC_ERR_HANDLER | |
2788 | ||
2789 | SECTION .HTRAPS | |
2790 | .text | |
2791 | ||
2792 | INT_PROC_ERR_HANDLER: | |
2793 | !! read the dsfsr | |
2794 | add %g0, SFSR_VA, %o1 | |
2795 | ldxa [%o1]ASI_DSFSR, %o2 !! read the dsfsr | |
2796 | cmp %o2, DSFSR_TSAC | |
2797 | bne FAIL | |
2798 | ||
2799 | add %g0, 1, %i0 | |
2800 | nop | |
2801 | done | |
2802 | nop | |
2803 | ||
2804 | FAIL: EXIT_BAD | |
2805 | nop | |
2806 | ||
2807 | ||
2808 |