Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / lsu / diag / err_sbapp_cp_diag.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: err_sbapp_cp_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 THREAD_COUNT 8
39#define THREAD_STRIDE 1
40
41#define MY_HP_TEXT_PA 0x1050000000
42#define MY_HP_DATA_PA 0x1050001000
43
44#define ASI_PRIMARY_CONTEXT_0 0x21
45#define ASI_ITLB_DATA_IN_REG 0x54
46#define ASI_DMMU_TAG_ACCESS 0x58
47#define ASI_DTLB_DATA_IN_REG 0x5c
48#define ASI_DMMU_SFAR 0x58
49
50#define PART0_NZ_RANOTPA_2 0
51
52#define MY_USER_TEXT_VA000 0x7a000000
53#define MY_USER_TEXT_RA000 0x7b000000
54#define MY_USER_TEXT_PA000 0x107b000000
55#define MY_USER_TEXT_VA001 0x7a010000
56#define MY_USER_TEXT_RA001 0x7b010000
57#define MY_USER_TEXT_PA001 0x107b010000
58#define MY_USER_TEXT_VA002 0x7a020000
59#define MY_USER_TEXT_RA002 0x7b020000
60#define MY_USER_TEXT_PA002 0x107b020000
61#define MY_USER_TEXT_VA003 0x7a030000
62#define MY_USER_TEXT_RA003 0x7b030000
63#define MY_USER_TEXT_PA003 0x107b030000
64#define MY_USER_TEXT_VA004 0x7a040000
65#define MY_USER_TEXT_RA004 0x7b040000
66#define MY_USER_TEXT_PA004 0x107b040000
67#define MY_USER_TEXT_VA005 0x7a050000
68#define MY_USER_TEXT_RA005 0x7b050000
69#define MY_USER_TEXT_PA005 0x107b050000
70#define MY_USER_TEXT_VA006 0x7a060000
71#define MY_USER_TEXT_RA006 0x7b060000
72#define MY_USER_TEXT_PA006 0x107b060000
73#define MY_USER_TEXT_VA007 0x7a070000
74#define MY_USER_TEXT_RA007 0x7b070000
75#define MY_USER_TEXT_PA007 0x107b070000
76#define MY_USER_TEXT_VA008 0x7a080000
77#define MY_USER_TEXT_RA008 0x7b080000
78#define MY_USER_TEXT_PA008 0x107b080000
79
80#define MY_USER_DATA_VA000 0x6a000000
81#define MY_nc_DATA_RA000 0xb06b000000
82#define MY_nc_DATA_PA000 0xc06b000000
83#define MY_USER_DATA_RA000 0x6b000000
84#define MY_USER_DATA_PA000 0x106b000000
85#define MY_USER_DATA_VA001 0x6a010000
86#define MY_USER_DATA_RA001 0x6b010000
87#define MY_USER_DATA_PA001 0x106b010000
88#define MY_nc_DATA_RA001 0xb06b0a0000
89#define MY_nc_DATA_PA001 0xc06b0a0000
90#define MY_USER_DATA_VA002 0x6a020000
91#define MY_USER_DATA_RA002 0x6b020000
92#define MY_USER_DATA_PA002 0x106b020000
93#define MY_USER_DATA_VA003 0x6a030000
94#define MY_USER_DATA_RA003 0x6b030000
95#define MY_USER_DATA_PA003 0x106b030000
96#define MY_USER_DATA_VA004 0x6a040000
97#define MY_USER_DATA_RA004 0x6b040000
98#define MY_USER_DATA_PA004 0x106b040000
99#define MY_USER_DATA_VA005 0x6a050000
100#define MY_USER_DATA_RA005 0x6b050000
101#define MY_USER_DATA_PA005 0x106b050000
102#define MY_USER_DATA_VA006 0x6a060000
103#define MY_USER_DATA_RA006 0x6b060000
104#define MY_USER_DATA_PA006 0x106b060000
105#define MY_USER_DATA_VA007 0x6a070000
106#define MY_USER_DATA_RA007 0x6b070000
107#define MY_USER_DATA_PA007 0x106b070000
108#define MY_USER_DATA_VA008 0x6a080000
109#define MY_USER_DATA_RA008 0x6b080000
110#define MY_USER_DATA_PA008 0x106b080000
111#define MY_USER_DATA_VA009 0x6a090000
112#define MY_USER_DATA_RA009 0x6b090000
113#define MY_USER_DATA_PA009 0x106b090000
114
115#define IMDU_ERR_EN 0xa0000000
116#define IMTU_ERR_EN 0x90000000
117#define DMDU_ERR_EN 0x88000000
118#define DMTU_ERR_EN 0x84000000
119#define IRCU_ERR_EN 0x82000000
120#define FRCU_ERR_EN 0x81000000
121#define SCAU_ERR_EN 0x80800000
122#define TCCU_ERR_EN 0x80400000
123#define TSAU_ERR_EN 0x80200000
124#define MRAU_ERR_EN 0x80100000
125#define STAU_ERR_EN 0x80080000
126#define STDU_ERR_EN 0x80020000
127
128#define ASI_DESR 0x4c
129#define ASI_DFESR 0x4c
130#define DFESR_VA 0x8
131#define ASI_DSFSR 0x58
132#define ASI_ISFSR 0x50
133#define SFSR_VA 0x18
134#define ASI_SFAR 0x58
135#define SFAR_VA 0x20
136#define ASI_ERR_INJ 0x43
137#define ASI_CETER 0x4C
138#define CETER_VA 0x18
139#define ASI_CERER 0x4C
140#define CERER_VA 0x10
141#define ASI_DECR 0x45
142#define DECR_VA 0x8
143
144#define CERER_SBDPC 0x400
145#define CETER_DHCCE 0x1000000000000000
146#define CETER_DE 0x2000000000000000
147#define CETER_PSCCE 0x4000000000000000
148#define DCVP_ERR_TYPE 0x5
149#define SBDPC_ERR_TYPE 0x5
150#define SBDPU_ERR_TYPE 0x6
151#define HPRIV 0x2
152#define PRIV 0x1
153#define USER 0x0
154
155#define MAIN_PAGE_HV_ALSO
156#define H_HT0_Mem_Address_Not_Aligned_0x34
157#define My_HT0_Mem_Address_Not_Aligned_0x34 \
158 ba MEM_ADDR_HANDLER; \
159 nop;nop;nop;nop;nop;nop;nop
160
161
162#define H_HT0_Data_Access_MMU_Error_0x72
163#define SUN_H_HT0_Data_Access_MMU_Error_0x72 \
164 ba DATA_ACCESS_ERROR_HANDLER; \
165 nop;nop;nop;nop;nop;nop;nop
166
167#define H_HT0_Instruction_Access_MMU_Error_0x71
168#define SUN_H_HT0_Instruction_Access_MMU_Error_0x71 \
169 ba INST_ACCESS_ERROR_HANDLER; \
170 nop;nop;nop;nop;nop;nop;nop
171
172#define H_HT0_Hw_Corrected_Error_0x63
173#define SUN_H_HT0_Hw_Corrected_Error_0x63 \
174 ba HW_CORR_ERROR_HANDLER; \
175 nop;nop;nop;nop;nop;nop;nop
176
177#define H_HT0_DAE_invalid_asi_0x14
178#define SUN_H_HT0_DAE_invalid_asi_0x14 \
179 ba INVALID_ASI_HANDLER; \
180 nop;nop;nop;nop;nop;nop;nop
181
182!! turn off cerer.dcvp
183#define H_HT0_DAE_nc_page_0x16
184#define SUN_H_HT0_DAE_nc_page_0x16 \
185 add %g0, CERER_VA, %g3;\
186 stxa %g0, [%g3]ASI_CERER;\
187 done;nop;nop;nop;nop;nop
188
189!! turn on cerer.dcvp
190#define H_HT0_Privileged_Action_0x37
191#define My_HT0_Privileged_Action_0x37 \
192 set 0x04000, %g1; \
193 add %g0, CERER_VA, %g3;\
194 stxa %g1, [%g3]ASI_CERER;\
195 done;nop;nop;nop;nop
196
197!! turn on/off ceter.de
198!! i4 =1 . turn on ceter.de
199!! l4 =0 . turn off ceter.e
200#define H_HT0_Lddf_Mem_Address_Not_Aligned_0x35
201#define My_HT0_Lddf_Mem_Address_Not_Aligned_0x35 \
202 setx CETER_DE, %g2, %g1;\
203 add %g0, CETER_VA, %g3; \
204 cmp %i4, 1; \
205 be,a .+12; \
206 stxa %g1, [%g3]ASI_CETER; \
207 stxa %g0, [%g3]ASI_CETER; \
208 done
209
210#define H_HT0_Stdf_Mem_Address_Not_Aligned_0x36
211#define My_HT0_Stdf_Mem_Address_Not_Aligned_0x36 \
212 set STAU_ERR_EN, %g1;\
213 cmp %i3, 1; \
214 be,a .+12; \
215 stxa %g1, [%g0]ASI_ERR_INJ ;\
216 stxa %g0, [%g0]ASI_ERR_INJ ;\
217 done
218
219#define H_HT0_Sw_Recoverable_Error_0x40
220#define SUN_H_HT0_Sw_Recoverable_Error_0x40 \
221 ba RECOVERABLE_ERR_HANDLER; \
222 nop;nop;nop;nop;nop;nop;nop
223
224#define H_HT0_Store_Error_0x07
225#define SUN_H_HT0_Store_Error_0x07 \
226 ba STORE_ERR_HANDLER; \
227 nop;nop;nop;nop;nop;nop;nop
228
229
230#include "hboot.s"
231
232/************************************************************************
233 Test case:
234 ************************************************************************/
235
236.text
237.global main
238
239main: /* test begin */
240 ta T_CHANGE_HPRIV
241
242 ! store 1 to DECR
243 setx 0x1111111111111111, %o1, %o2
244 setx DECR_VA, %o1, %o3
245 stxa %o2, [%o3]ASI_DECR
246
247 !! set CERER.SBAPP
248 set 0x0800000, %o2 !! enable sbapp errs
249 add %g0, CERER_VA, %g3 !!g3 has cerer va
250
251
252 stxa %o2, [%g3]ASI_CERER
253 ta T_CHANGE_NONHPRIV
254
255 mov %g0, %o6 !! start with user mode
256 add %g0, USER, %l4
257 setx user_code_begin_000, %g2, %g3
258 !setx HPRIV_MODE, %g2, %g3
259 jmp %g3
260 nop
261 EXIT_BAD
262
263
264/************************************************************************
265 Test case data start
266 ************************************************************************/
267.data
268.global user_data_start
269user_data_start:
270.word 0x12345678
271.word 0x9a9b9c9d
272.word 0x00000000
273.word 0xffffffff
274
275!#***********************************************************************
276
277SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000
278attr_text {
279 Name = .My_User_Section_4v000,
280 part_0_ctx_nonzero_tsb_config_2,
281 VA = MY_USER_TEXT_VA000,
282 RA = MY_USER_TEXT_PA000,
283 PA = MY_USER_TEXT_PA000,
284 TTE_Context = PCONTEXT,
285 TTE_V = 1,
286 TTE_NFO = 0,
287 TTE_L = 0,
288 TTE_Soft = 0,
289 TTE_IE = 0,
290 TTE_E = 0,
291 TTE_CP = 1,
292 TTE_CV = 0,
293 TTE_P = 0,
294 TTE_EP = 1,
295 TTE_W = 0,
296 TTE_SW1 = 0,
297 TTE_SW0 = 0,
298 TTE_RSVD1 = 0,
299 TTE_Size = 0,
300 }
301attr_text {
302NAME = .My_User_Section_4v000,
303 hypervisor
304}
305
306.text
307.global user_code_begin_000
308.global HPRIV_MODE
309user_code_begin_000:
310 setx user_data_begin_000, %g1, %g2
311 setx original_data, %g1, %g3
312 setx st_address, %g1, %g4
313 setx st_address_1, %g1, %g5
314user_code_begin_hp:
315 mov %g0, %l2 !! stb expected index is in l2
316 add %g0, 0x5, %l3 !! mask
317 add %g0, 1, %l1
318 add %g0, 1, %i3 !! enable err_injection
319
320 std %d0, [%g2 + 0x4] !stdf_not_aligned to set err_inject
321 ldxa [%g2]0xE4, %g1 !! invalid asi trap to set the stb ptr to 0
322
323 add %g0, 1, %g6 !! start with 1 entries in stb
324
325LOOP0_000:
326 ldx [%g4], %i1
327 ldx [%g2 + 0x8], %i2
328 ldx [%g2 + 0x10], %i3
329 ldx [%g2 + 0x18], %i4
330 ldx [%g2 + 0x20], %i5
331 ldx [%g2 + 0x28], %i6
332 ldx [%g2 + 0x30], %i7
333 ldx [%g2 + 0x38], %l1
334
335 cmp %g6, 1
336 be STORES_1
337 cmp %g6, 2
338 be STORES_2
339 cmp %g6, 3
340 be STORES_3
341 cmp %g6, 4
342 be STORES_4
343 cmp %g6, 5
344 be STORES_5
345 cmp %g6, 6
346 be STORES_6
347 cmp %g6, 7
348 be STORES_7
349 nop
350STORES_8:
351 stx %l1, [%g4 + 0x38]
352STORES_7:
353 stx %i7, [%g4 + 0x30]
354STORES_6:
355 stx %i6, [%g4 + 0x28]
356STORES_5:
357 stx %i5, [%g4 + 0x20]
358STORES_4:
359 stx %i4, [%g4 + 0x18]
360STORES_3:
361 stx %i3, [%g4 + 0x10]
362STORES_2:
363 stx %i2, [%g4 + 0x8]
364STORES_1:
365 !!stx %i1, [%g4]
366 casa [%g4]0x80, %i1, %l1
367
368 ldx [%g2 + 0x8], %g7
369 ldub [%g2], %g7
370 ldub [%g2 + 0x1], %g7
371 ld [%g2 + 0x4], %g7
372 ldx [%g2], %g7
373 ldx [%g2 + 0x8], %g7
374 ldub [%g2], %g7
375 brz %i0, FAIL
376 mov %g0, %i0
377
378CHK_STORE_FLUSHED:
379 cmp %g6, 1
380 be FLUSH_LD_1
381 cmp %g6, 2
382 be FLUSH_LD_2
383 cmp %g6, 3
384 be FLUSH_LD_3
385 cmp %g6, 4
386 be FLUSH_LD_4
387 cmp %g6, 5
388 be FLUSH_LD_5
389 cmp %g6, 6
390 be FLUSH_LD_6
391 cmp %g6, 7
392 be FLUSH_LD_7
393 nop
394FLUSH_LD_8:
395 ldx [%g4 + 0x38], %o4
396 ldx [%g3 + 0x38], %o5
397 cmp %o4, %o5
398 bne FAIL
399FLUSH_LD_7:
400 ldx [%g4 + 0x30], %o4
401 ldx [%g3 + 0x30], %o5
402 cmp %o4, %o5
403 bne FAIL
404FLUSH_LD_6:
405 ldx [%g4 + 0x28], %o4
406 ldx [%g3 + 0x28], %o5
407 cmp %o4, %o5
408 bne FAIL
409FLUSH_LD_5:
410 ldx [%g4 + 0x20], %o4
411 ldx [%g3 + 0x20], %o5
412 cmp %o4, %o5
413 bne FAIL
414FLUSH_LD_4:
415 ldx [%g4 + 0x18], %o4
416 ldx [%g3 + 0x18], %o5
417 cmp %o4, %o5
418 bne FAIL
419FLUSH_LD_3:
420 ldx [%g4 + 0x10], %o4
421 ldx [%g3 + 0x10], %o5
422 cmp %o4, %o5
423 bne FAIL
424FLUSH_LD_2:
425 ldx [%g4 + 0x8], %o4
426 ldx [%g3 + 0x8], %o5
427 cmp %o4, %o5
428 bne FAIL
429FLUSH_LD_1:
430 ldx [%g4], %o4
431 ldx [%g3], %o5
432 cmp %o4, %o5
433 bne FAIL
434
435 add %g2, 0x10, %g2
436 add %g3, 0x10, %g3
437 add %g4, 0x10, %g4
438 add %g5, 0x10, %g5
439 add %l2, %g6, %l2 !!the stb entry in which data will be stored next
440 add %l2, 2, %l2 !! three stores, turn off and on err_inject
441 and %l2, 0x7, %l2
442 add %g0, 1, %i3 !! enable err_injection
443 add %g6, 1, %g6
444 cmp %g6, 8
445 ble,a LOOP0_000
446 std %d0, [%g2 + 0x4] !Turn on err_inject, err_injection turned off
447 !by trap hanlder
448
449 add %o6, 1, %o6
450 cmp %o6, 1
451 be PRIV_MODE
452 cmp %o6, 2
453 be,a HPRIV_MODE
454 ta T_CHANGE_NONPRIV
455
456 ba NEXT_CASE
457 ta T_CHANGE_NONHPRIV
458
459PRIV_MODE:
460 ta T_CHANGE_PRIV
461 ba user_code_begin_000
462 add %g0, PRIV, %l4
463
464!! For hp mode load vas which pt to nc range.
465HPRIV_MODE:
466 ta T_CHANGE_HPRIV
467
468 ! store 2 to DECR
469 setx 0x2222222222222222, %g1, %g2
470 setx DECR_VA, %g1, %g3
471 stxa %g2, [%g3]ASI_DECR
472
473 setx user_data_begin_003, %g1, %g2
474 setx original_data_hp, %g1, %g3
475 setx st_address_hp, %g1, %g4
476 setx st_address_1_hp, %g1, %g5
477 ba user_code_begin_hp
478 add %g0, HPRIV, %l4
479
480NEXT_CASE:
481 setx user_code_begin_001, %g2, %g3
482 jmp %g3
483 nop
484
485FAIL:
486 ta 0xa1
487 nop
488
489attr_data {
490 Name = .My_User_Section_4v000,
491 part_0_ctx_nonzero_tsb_config_1,
492 VA = MY_USER_DATA_VA000,
493 RA = MY_USER_DATA_RA000,
494 PA = MY_USER_DATA_PA000,
495 TTE_Context = PCONTEXT,
496 TTE_V = 1,
497 TTE_NFO = 0,
498 TTE_L = 0,
499 TTE_Soft = 0,
500 TTE_IE = 0,
501 TTE_E = 0,
502 TTE_CP = 1,
503 TTE_CV = 0,
504 TTE_P = 0,
505 TTE_EP = 0,
506 TTE_W = 1,
507 TTE_SW1 = 0,
508 TTE_SW0 = 0,
509 TTE_RSVD1 = 0,
510 TTE_Size = 0,
511 }
512attr_data {
513NAME = .My_User_Section_4v000,
514 hypervisor
515}
516.data
517.global user_data_begin_000
518user_data_begin_000:
519.xword 0x06d2d7f29e76397c
520.xword 0x234c366110eddd38
521.xword 0xa80656d4288044bc
522.xword 0x12e763fbd8e2970d
523.xword 0x7320217fab3eae0e
524.xword 0x38683cebedefb5af
525.xword 0xefc4e1f1b35853fc
526.xword 0xe790a0c1689eb683
527.xword 0x88c650f170c41710
528.xword 0x614126cf9fc8dca3
529.xword 0xe0066361bd9fcb86
530.xword 0xea22901c101f6f52
531.xword 0x806faa2171350467
532.xword 0xff54f2cd06a0d342
533.xword 0x566bff718cddb905
534.xword 0x6d367bc4d165d37a
535.xword 0x5efc42b18f920522
536.xword 0x584c92dec4bc66de
537.xword 0xed9efe0d05896ce1
538.xword 0xf9d45b94972117c8
539.xword 0xd0c647618c9e43f3
540.xword 0xfe04ead3b77c2d11
541.xword 0x4be2f60911e465ce
542.xword 0x4e22352a0c29c95c
543.xword 0xf18efdf01ce79e24
544original_data: !! copy of the data at the st_address location. St location
545!! shd not be overwritten
546.xword 0x294aaa56144d7cf1
547.xword 0xe0066361bd9fcb86
548.xword 0xea22901c101f6f52
549.xword 0x806faa2171350467
550.xword 0xff54f2cd06a0d342
551.xword 0x566bff718cddb905
552.xword 0x6d367bc4d165d37a
553.xword 0x5efc42b18f920522
554.xword 0x584c92dec4bc66de
555.xword 0xefc4e1f1b35853fc
556.xword 0xe790a0c1689eb683
557.xword 0x88c650f170c41710
558.xword 0x614126cf9fc8dca3
559.xword 0x5efc42b18f920522
560.xword 0x584c92dec4bc66de
561.xword 0xed9efe0d05896ce1
562.xword 0xf9d45b94972117c8
563.xword 0xd0c647618c9e43f3
564.xword 0xfe04ead3b77c2d11
565.xword 0x06d2d7f29e76397c
566.xword 0x234c366110eddd38
567.xword 0xa80656d4288044bc
568.xword 0x12e763fbd8e2970d
569.xword 0x7320217fab3eae0e
570.xword 0x38683cebedefb5af
571
572st_address:
573.xword 0x294aaa56144d7cf1
574.xword 0xe0066361bd9fcb86
575.xword 0xea22901c101f6f52
576.xword 0x806faa2171350467
577.xword 0xff54f2cd06a0d342
578.xword 0x566bff718cddb905
579.xword 0x6d367bc4d165d37a
580.xword 0x5efc42b18f920522
581.xword 0x584c92dec4bc66de
582.xword 0xefc4e1f1b35853fc
583.xword 0xe790a0c1689eb683
584.xword 0x88c650f170c41710
585.xword 0x614126cf9fc8dca3
586.xword 0x5efc42b18f920522
587.xword 0x584c92dec4bc66de
588.xword 0xed9efe0d05896ce1
589.xword 0xf9d45b94972117c8
590.xword 0xd0c647618c9e43f3
591.xword 0xfe04ead3b77c2d11
592.xword 0x06d2d7f29e76397c
593.xword 0x234c366110eddd38
594.xword 0xa80656d4288044bc
595.xword 0x12e763fbd8e2970d
596.xword 0x7320217fab3eae0e
597.xword 0x38683cebedefb5af
598.xword 0xefc4e1f1b35853fc
599.xword 0xe790a0c1689eb683
600.xword 0x88c650f170c41710
601st_address_1:
602.xword 0x294aaa56144d7cf1
603.xword 0xe0066361bd9fcb86
604.xword 0xea22901c101f6f52
605.xword 0x806faa2171350467
606.xword 0xff54f2cd06a0d342
607.xword 0x566bff718cddb905
608.xword 0x6d367bc4d165d37a
609.xword 0x5efc42b18f920522
610.xword 0x584c92dec4bc66de
611.xword 0xefc4e1f1b35853fc
612.xword 0xe790a0c1689eb683
613.xword 0x88c650f170c41710
614.xword 0x614126cf9fc8dca3
615.xword 0x5efc42b18f920522
616.xword 0x584c92dec4bc66de
617.xword 0xed9efe0d05896ce1
618.xword 0xf9d45b94972117c8
619.xword 0xd0c647618c9e43f3
620.xword 0xfe04ead3b77c2d11
621.xword 0x38683cebedefb5af
622.xword 0xefc4e1f1b35853fc
623.xword 0xe790a0c1689eb683
624.xword 0x88c650f170c41710
625.xword 0xed9efe0d05896ce1
626.xword 0xf9d45b94972117c8
627.xword 0xd0c647618c9e43f3
628.xword 0xfe04ead3b77c2d11
629
630
631SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001
632attr_text {
633 Name = .My_User_Section_4v001,
634 part_0_ctx_nonzero_tsb_config_2,
635 VA = MY_USER_TEXT_VA001,
636 RA = MY_USER_TEXT_PA001,
637 PA = MY_USER_TEXT_PA001,
638 TTE_Context = PCONTEXT,
639 TTE_V = 1,
640 TTE_NFO = 0,
641 TTE_L = 0,
642 TTE_Soft = 0,
643 TTE_IE = 0,
644 TTE_E = 0,
645 TTE_CP = 1,
646 TTE_CV = 0,
647 TTE_P = 0,
648 TTE_EP = 1,
649 TTE_W = 0,
650 TTE_SW1 = 0,
651 TTE_SW0 = 0,
652 TTE_RSVD1 = 0,
653 TTE_Size = 0,
654 }
655attr_text {
656NAME = .My_User_Section_4v001,
657 hypervisor
658}
659! Check, uncorrectable errors are detected for blk stores also.
660
661.text
662.global user_code_begin_001
663user_code_begin_001:
664 add %g0, USER, %l4
665 mov %g0, %l2 !! In case of address parity the addr parity err is reported when
666 !! the blk store is written in the STB.
667 add %g0, 0x30, %l3 !! double bit err
668 setx user_data_begin_001, %g1, %g2
669
670 setx original_data, %g1, %g3
671 setx st_address, %g1, %g4
672 mov %g0, %i0
673 mov %g0, %l1
674
675 add %g0, 1, %i3 !! Enable err_injection
676 std %d0, [%g2 + 0x4]
677 ldxa [%g2]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
678 !ldda [%g2]0xf0, %d0
679 ldx [%g4], %i1
680 ldd [%g2], %f0
681 ldd [%g2 + 0x8], %f2
682 ldd [%g2 + 0x10], %f4
683 ldd [%g2 + 0x18], %f6
684 ldd [%g2 + 0x20], %f8
685 ldd [%g2 + 0x28], %f10
686 ldd [%g2 + 0x30], %f12
687 ldd [%g2 + 0x38], %f14
688
689 stda %d0, [%g4]0xF0
690 ldx [%g2], %i1
691 ldx [%g2 + 0x8], %i2
692 ldx [%g2 + 0x10], %i3
693 ldx [%g2 + 0x18], %i4
694 ldx [%g2 + 0x20], %i5
695 ldx [%g2 + 0x28], %i6
696 ldx [%g2 + 0x30], %i7
697 ldx [%g2 + 0x38], %l1
698 cmp %i0, 1
699 bne FAIL
700 mov %g0, %i0
701
702CASE1_000:
703 ldx [%g3 + %i0], %o4
704 ldx [%g4 + %i0], %o5
705 cmp %o4, %o5
706 bne FAIL
707 add %i0, 8, %i0
708 cmp %i0, 0x38
709 ble CASE1_000
710 nop
711
712 setx user_code_begin_002, %g2, %g3
713 jmp %g3
714 nop
715FAIL:
716 ta 0xa1
717 nop
718
719attr_data {
720 Name = .My_User_Section_4v001,
721 part_0_ctx_nonzero_tsb_config_1,
722 VA = MY_USER_DATA_VA001,
723 RA = MY_USER_DATA_RA001,
724 PA = MY_USER_DATA_PA001,
725 TTE_Context = PCONTEXT,
726 TTE_V = 1,
727 TTE_NFO = 0,
728 TTE_L = 0,
729 TTE_Soft = 0,
730 TTE_IE = 0,
731 TTE_E = 0,
732 TTE_CP = 1,
733 TTE_CV = 1,
734 TTE_P = 0,
735 TTE_EP = 0,
736 TTE_W = 1,
737 TTE_SW1 = 0,
738 TTE_SW0 = 0,
739 TTE_RSVD1 = 0,
740 TTE_Size = 0,
741 }
742attr_data {
743NAME = .My_User_Section_4v001,
744 hypervisor
745}
746.data
747.global user_data_begin_001
748user_data_begin_001:
749.xword 0xfa474991f13e3460
750.xword 0x1446415baecf3609
751.xword 0xe3215e901114ad4b
752.xword 0xf91d897e92d1ee95
753.xword 0x33458a48805d888b
754.xword 0x7f5a3ddb7d8e3c23
755.xword 0xaa80311fb1e17e79
756.xword 0x0f59d0e1ac35dbd4
757st_address:
758.xword 0x4b1896677e83abae
759.xword 0xc2e35a285574f037
760.xword 0x2e42eb5835020e2e
761.xword 0x90775b99929f43cc
762.xword 0xd0c647618c9e43f3
763.xword 0xfe04ead3b77c2d11
764.xword 0x06d2d7f29e76397c
765.xword 0x234c366110eddd38
766.xword 0xa80656d4288044bc
767.xword 0x12e763fbd8e2970d
768.xword 0x7320217fab3eae0e
769.xword 0x38683cebedefb5af
770.xword 0xefc4e1f1b35853fc
771.xword 0xe790a0c1689eb683
772.xword 0x9fac4ae85a4ecd4e
773original_data:
774.xword 0x4b1896677e83abae
775.xword 0xc2e35a285574f037
776.xword 0x2e42eb5835020e2e
777.xword 0x90775b99929f43cc
778.xword 0xd0c647618c9e43f3
779.xword 0xfe04ead3b77c2d11
780.xword 0x06d2d7f29e76397c
781.xword 0x234c366110eddd38
782.xword 0xa80656d4288044bc
783.xword 0x12e763fbd8e2970d
784.xword 0x7320217fab3eae0e
785.xword 0x38683cebedefb5af
786
787 .word 0x10731
788 .word 0xd027
789 .word 0x1350e
790 .word 0x10e9d
791
792
793SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002
794attr_text {
795 Name = .My_User_Section_4v002,
796 part_0_ctx_nonzero_tsb_config_2,
797 VA = MY_USER_TEXT_VA002,
798 RA = MY_USER_TEXT_PA002,
799 PA = MY_USER_TEXT_PA002,
800 TTE_Context = PCONTEXT,
801 TTE_V = 1,
802 TTE_NFO = 0,
803 TTE_L = 0,
804 TTE_Soft = 0,
805 TTE_IE = 0,
806 TTE_E = 0,
807 TTE_CP = 1,
808 TTE_CV = 0,
809 TTE_P = 0,
810 TTE_EP = 1,
811 TTE_W = 0,
812 TTE_SW1 = 0,
813 TTE_SW0 = 0,
814 TTE_RSVD1 = 0,
815 TTE_Size = 0,
816 }
817attr_text {
818NAME = .My_User_Section_4v002,
819 hypervisor
820}
821
822! Chk that asi writes are squashed too in case of uncorrectable errors.
823! The testcase runs in a loop and in each iteration the stb pts to next entry.
824! 6 asi stores are squashed.
825! For first iteration, stb pts to entry 0. 6 asi stores are written that move the ptr to 5.
826! Trap is taken. 2 stores occur in trap handler:1st to disable err
827! injection and 2nd to clear dsfsr. That moves the stb ptr to 0. The test case then
828! uses 1 stb entry to enable err injection. Which moves teh ptr to 1 for
829! next iteration of loop. So, 9 stores happen in each iteration which move the stb ptr
830! to next entry for each iteration.
831! the loop runs for 8 iterations correpsonding to stb entry 0,1,2,3, 4...to 7.
832! So the testcase checks that squashing can occur from every entry in STB.
833! The test runs in HP mode too.
834
835.text
836.global user_code_begin_002
837user_code_begin_002:
838 ta T_CHANGE_PRIV
839 mov %g0, %o6 !! priv mode
840 add %g0, PRIV, %l4
841 setx user_data_begin_000, %g1, %g2
842
843!! Init the scratchpad array
844 mov %g0, %i0
845ST_LOOP_2:
846 ldx [%g2 + %i0], %i1
847 stxa %i1, [%i0]0x20
848 add %i0, 8, %i0
849 cmp %i0, 0x20
850 be,a ST_LOOP_2
851 add %g0, 0x30, %i0
852 cmp %i0, 0x38
853 ble ST_LOOP_2
854 nop
855
856NEXT_MODE:
857 setx new_data, %g1, %g3
858 setx new_store_loc, %g1, %g4
859 add %g0, 0x6, %l3 !! mask
860 mov %g0, %l2
861 add %g0, 1, %i3 !! enable err_injection
862 std %d0, [%g2 + 0x4] !stdf_not_aligned to set err_inject
863 ldxa [%g4]0xE4, %g1 !! invalid asi trap to set the stb ptr to 0
864 mov %g0, %i0
865
866START_ASI_LOOP:
867 mov %g0, %l0
868 add %g0, 8, %i2
869 add %g0, 0x10, %i3
870 add %g0, 0x18, %i4
871 add %g0, 0x30, %i5
872 add %g0, 0x38, %i6
873
874 !!now do 6 asi stores. These will have err injected
875 stxa %i1, [%l0]0x20
876 stxa %i1, [%i2]0x20
877 stxa %i1, [%i3]0x20
878 stxa %i1, [%i4]0x20
879 stxa %i1, [%i5]0x20
880 stxa %i1, [%i6]0x20
881
882 ldx [%g3 + 0x8], %i2
883 ldx [%g3 + 0x10], %i3
884 ldx [%g3 + 0x18], %i4
885 ldx [%g3 + 0x20], %i5
886 brz %i0, FAIL
887 nop
888
889 !! Chk that the stores were squashed
890 mov %g0, %i0
891LD_LOOP_2:
892 ldx [%g2 + %i0], %o4
893 ldxa [%i0]0x20, %o5
894 cmp %o4, %o5
895 bne FAIL
896 add %i0, 8, %i0
897 cmp %i0, 0x20
898 be,a LD_LOOP_2
899 add %g0, 0x30, %i0
900 cmp %i0, 0x38
901 ble LD_LOOP_2
902 nop
903/*
904!! now do 5 stores
905!! 5 stores are required to advance the ptr from 0 to 1 and so on.
906 mov %g0, %i0
907DST_LOOP_2:
908 ldx [%g3 + %i0], %i1
909 stx %i1, [%g4 + %i0]
910 add %i0,8, %i0
911 cmp %i0, 0x28
912 bl DST_LOOP_2
913 nop
914
915!! now chk that these stores were not squashed
916 mov %g0, %i0
917DLD_LOOP_2:
918 ldx [%g3 + %i0], %o4
919 ldx [%g4 + %i0], %o5
920 cmp %o4, %o5
921 bne FAIL
922 add %i0,8, %i0
923 cmp %i0, 0x28
924 bl DLD_LOOP_2
925 nop
926
927*/
928!! enable err injection.
929 add %g3, 0x10, %g3
930 add %g4, 0x10, %g4
931 add %g0, 1, %i3 !! enable err_injection
932 !! do a dummy store to advance store ptr.
933 !! since the store_error handler no longer has a wr to to clear the dsfsr, I had
934 !!to add a dummy store here to make the diag work
935 stx %g2, [%g2+0x200]
936 add %l2, 1, %l2
937 cmp %l2, 8
938 bl,a START_ASI_LOOP
939 std %d0, [%g2 + 0x4] !stdf_not_aligned to set err_inject
940
941 brnz %o6, DONE
942 add %o6, 1, %o6
943
944 ta T_CHANGE_HPRIV
945
946 ! store 3 to DECR
947 setx 0x3333333333333333, %g6, %g7
948 setx DECR_VA, %g6, %g6
949 stxa %g7, [%g6]ASI_DECR
950
951 ba NEXT_MODE
952 add %g0, HPRIV, %l4
953
954
955DONE:
956 setx user_code_begin_003, %g2, %g3
957 jmp %g3
958 nop
959
960FAIL:
961 ta 0xa1
962 nop
963
964attr_data {
965 Name = .My_User_Section_4v002,
966 part_0_ctx_nonzero_tsb_config_1,
967 VA = MY_USER_DATA_VA002,
968 RA = MY_USER_DATA_RA002,
969 PA = MY_USER_DATA_PA002,
970 TTE_Context = PCONTEXT,
971 TTE_V = 1,
972 TTE_NFO = 0,
973 TTE_L = 0,
974 TTE_Soft = 0,
975 TTE_IE = 0,
976 TTE_E = 0,
977 TTE_CP = 1,
978 TTE_CV = 0,
979 TTE_P = 0,
980 TTE_EP = 0,
981 TTE_W = 1,
982 TTE_SW1 = 0,
983 TTE_SW0 = 0,
984 TTE_RSVD1 = 0,
985 TTE_Size = 0,
986 }
987attr_data {
988NAME = .My_User_Section_4v002,
989 hypervisor
990}
991.data
992.global user_data_begin_002
993user_data_begin_002:
994.xword 0x050a211e918857f3
995.xword 0x7980bbbf09b95bba
996.xword 0x55f410e2b57433f6
997.xword 0x106c3aa95e2aa3c3
998.xword 0xbcb980bc1bb072d8
999.xword 0x63da435c10b717dd
1000.xword 0x375d99be87bef073
1001.xword 0x03a5206ac6d08fd2
1002new_data:
1003.xword 0xfa474991f13e3460
1004.xword 0x1446415baecf3609
1005.xword 0xe3215e901114ad4b
1006.xword 0xf91d897e92d1ee95
1007.xword 0x33458a48805d888b
1008.xword 0x7f5a3ddb7d8e3c23
1009.xword 0xaa80311fb1e17e79
1010.xword 0x0f59d0e1ac35dbd4
1011.xword 0xca12fd23b5b1b1d6
1012.xword 0x3428a18f797bd42a
1013.xword 0x0d0630dd16ca2db5
1014.xword 0x281c49cf3f51a83f
1015.xword 0x8fc66b8940c55c03
1016.xword 0xfd6f2a2b60aee94c
1017.xword 0xec72846b0261894e
1018.xword 0xf1bd6c544120f822
1019.xword 0xefc4e1f1b35853fc
1020.xword 0xe790a0c1689eb683
1021.xword 0x88c650f170c41710
1022.xword 0x614126cf9fc8dca3
1023.xword 0x4be2f60911e465ce
1024.xword 0x4e22352a0c29c95c
1025.xword 0xf18efdf01ce79e24
1026.xword 0x294aaa56144d7cf1
1027
1028new_store_loc:
1029.xword 0xefc4e1f1b35853fc
1030.xword 0xe790a0c1689eb683
1031.xword 0x88c650f170c41710
1032.xword 0x614126cf9fc8dca3
1033.xword 0x4be2f60911e465ce
1034.xword 0x4e22352a0c29c95c
1035.xword 0xf18efdf01ce79e24
1036.xword 0x294aaa56144d7cf1
1037.xword 0xe0066361bd9fcb86
1038.xword 0xea22901c101f6f52
1039.xword 0x806faa2171350467
1040.xword 0xff54f2cd06a0d342
1041.xword 0x566bff718cddb905
1042.xword 0x6d367bc4d165d37a
1043.xword 0x5efc42b18f920522
1044.xword 0x4be2f60911e465ce
1045.xword 0x4e22352a0c29c95c
1046.xword 0xf18efdf01ce79e24
1047 .word 0xf93b
1048 .word 0xe34b
1049 .word 0xdfaa
1050 .word 0x39a9
1051
1052 .word 0x1eb9
1053 .word 0x43ec
1054 .word 0xc619
1055 .word 0x11a06
1056
1057
1058SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003
1059attr_text {
1060 Name = .My_User_Section_4v003,
1061 part_0_ctx_nonzero_tsb_config_2,
1062 VA = MY_USER_TEXT_VA003,
1063 RA = MY_USER_TEXT_PA003,
1064 PA = MY_USER_TEXT_PA003,
1065 TTE_Context = PCONTEXT,
1066 TTE_V = 1,
1067 TTE_NFO = 0,
1068 TTE_L = 0,
1069 TTE_Soft = 0,
1070 TTE_IE = 0,
1071 TTE_E = 0,
1072 TTE_CP = 1,
1073 TTE_CV = 0,
1074 TTE_P = 0,
1075 TTE_EP = 1,
1076 TTE_W = 0,
1077 TTE_SW1 = 0,
1078 TTE_SW0 = 0,
1079 TTE_RSVD1 = 0,
1080 TTE_Size = 0,
1081 }
1082attr_text {
1083NAME = .My_User_Section_4v003,
1084 hypervisor
1085}
1086! same as case 2 uses hp stores.
1087.text
1088.global user_code_begin_003
1089user_code_begin_003:
1090 ta T_CHANGE_NONHPRIV
1091 ta T_CHANGE_PRIV
1092 add %g0, PRIV, %l4
1093 mov %g0, %l2
1094 add %g0, 0x30, %l3 !! double bit err
1095 setx user_data_begin_003, %g1, %g2
1096 mov %g0, %o6
1097
1098hpriv_003:
1099 mov %g0, %i0
1100 mov %g0, %l1
1101
1102 add %g0, 1, %i3 !! Enable err_injection
1103 std %d0, [%g2 + 0x4]
1104 ldxa [%g2]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
1105
1106 ldx [%g2], %i2
1107
1108
1109 std %l4, [%g2]
1110 ldx [%g2 + 0x10], %i3
1111 ldx [%g2 + 0x18], %i4
1112 ldx [%g2 + 0x20], %i5
1113 ldx [%g2 + 0x28], %i6
1114 ldx [%g2 + 0x30], %i7
1115 ldx [%g2 + 0x38], %l1
1116 cmp %i0, 1
1117 bne FAIL
1118 mov %g0, %i0
1119 ldx [%g2], %i1
1120 cmp %i1, %i2
1121 bne FAIL
1122 nop
1123
1124 brnz %o6, DONE_004
1125 add %o6, 1, %o6
1126
1127 ta T_CHANGE_HPRIV
1128 setx st_address_hp, %g1, %g2
1129
1130 ba hpriv_003
1131 add %g0, HPRIV, %l4
1132
1133
1134DONE_004:
1135 setx user_code_begin_004, %g2, %g3
1136 jmp %g3
1137 nop
1138
1139FAIL:
1140 EXIT_BAD
1141 nop
1142
1143attr_data {
1144 Name = .My_User_Section_4v003,
1145 part_0_ctx_nonzero_tsb_config_1,
1146 VA = MY_USER_DATA_VA003,
1147 RA = MY_USER_DATA_RA003,
1148 PA = MY_USER_DATA_PA003,
1149 TTE_Context = PCONTEXT,
1150 TTE_V = 1,
1151 TTE_NFO = 0,
1152 TTE_L = 0,
1153 TTE_Soft = 0,
1154 TTE_IE = 0,
1155 TTE_E = 0,
1156 TTE_CP = 1,
1157 TTE_CV = 0,
1158 TTE_P = 0,
1159 TTE_EP = 0,
1160 TTE_W = 1,
1161 TTE_SW1 = 0,
1162 TTE_SW0 = 0,
1163 TTE_RSVD1 = 0,
1164 TTE_Size = 0,
1165 }
1166attr_data {
1167NAME = .My_User_Section_4v003,
1168 hypervisor
1169}
1170.data
1171.global user_data_begin_003
1172.global original_data_hp
1173.global st_address_hp
1174.global st_address_1_hp
1175user_data_begin_003:
1176.xword 0xca12fd23b5b1b1d6
1177.xword 0x3428a18f797bd42a
1178.xword 0x0d0630dd16ca2db5
1179.xword 0x281c49cf3f51a83f
1180.xword 0x8fc66b8940c55c03
1181.xword 0xfd6f2a2b60aee94c
1182.xword 0xec72846b0261894e
1183.xword 0xf1bd6c544120f822
1184.xword 0xefc4e1f1b35853fc
1185.xword 0xe790a0c1689eb683
1186.xword 0x88c650f170c41710
1187.xword 0x614126cf9fc8dca3
1188.xword 0x4be2f60911e465ce
1189.xword 0x4e22352a0c29c95c
1190.xword 0xf18efdf01ce79e24
1191.xword 0x294aaa56144d7cf1
1192original_data_hp: !! copy of the data at the st_address location. St location
1193!! shd not be overwritten
1194.xword 0x234c366110eddd38
1195.xword 0xa80656d4288044bc
1196.xword 0x12e763fbd8e2970d
1197.xword 0x7320217fab3eae0e
1198.xword 0x38683cebedefb5af
1199.xword 0xefc4e1f1b35853fc
1200.xword 0xe790a0c1689eb683
1201.xword 0x88c650f170c41710
1202.xword 0x614126cf9fc8dca3
1203.xword 0xe0066361bd9fcb86
1204.xword 0xea22901c101f6f52
1205.xword 0x806faa2171350467
1206.xword 0xff54f2cd06a0d342
1207.xword 0x566bff718cddb905
1208.xword 0x6d367bc4d165d37a
1209.xword 0x5efc42b18f920522
1210.xword 0x294aaa56144d7cf1
1211.xword 0xe0066361bd9fcb86
1212.xword 0xea22901c101f6f52
1213.xword 0x806faa2171350467
1214.xword 0xff54f2cd06a0d342
1215.xword 0x566bff718cddb905
1216.xword 0x6d367bc4d165d37a
1217.xword 0x5efc42b18f920522
1218.xword 0x584c92dec4bc66de
1219.xword 0xefc4e1f1b35853fc
1220st_address_hp:
1221.xword 0x234c366110eddd38
1222.xword 0xa80656d4288044bc
1223.xword 0x12e763fbd8e2970d
1224.xword 0x7320217fab3eae0e
1225.xword 0x38683cebedefb5af
1226.xword 0xefc4e1f1b35853fc
1227.xword 0xe790a0c1689eb683
1228.xword 0x88c650f170c41710
1229.xword 0x614126cf9fc8dca3
1230.xword 0xe0066361bd9fcb86
1231.xword 0xea22901c101f6f52
1232.xword 0x806faa2171350467
1233.xword 0xff54f2cd06a0d342
1234.xword 0x566bff718cddb905
1235.xword 0x6d367bc4d165d37a
1236.xword 0x5efc42b18f920522
1237.xword 0x294aaa56144d7cf1
1238.xword 0xe0066361bd9fcb86
1239.xword 0xea22901c101f6f52
1240.xword 0x806faa2171350467
1241.xword 0xff54f2cd06a0d342
1242.xword 0x566bff718cddb905
1243.xword 0x6d367bc4d165d37a
1244.xword 0x5efc42b18f920522
1245.xword 0x584c92dec4bc66de
1246.xword 0xefc4e1f1b35853fc
1247st_address_1_hp:
1248.xword 0xefc4e1f1b35853fc
1249.xword 0xe790a0c1689eb683
1250.xword 0x88c650f170c41710
1251.xword 0x614126cf9fc8dca3
1252.xword 0x5efc42b18f920522
1253.xword 0x584c92dec4bc66de
1254.xword 0xed9efe0d05896ce1
1255.xword 0xf9d45b94972117c8
1256.xword 0xd0c647618c9e43f3
1257.xword 0xfe04ead3b77c2d11
1258.xword 0x06d2d7f29e76397c
1259.xword 0x234c366110eddd38
1260.xword 0xa80656d4288044bc
1261.xword 0x12e763fbd8e2970d
1262.xword 0x7320217fab3eae0e
1263.xword 0x38683cebedefb5af
1264.xword 0xefc4e1f1b35853fc
1265.xword 0xe790a0c1689eb683
1266.xword 0x88c650f170c41710
1267.xword 0x294aaa56144d7cf1
1268.xword 0xe0066361bd9fcb86
1269.xword 0xea22901c101f6f52
1270.xword 0x806faa2171350467
1271.xword 0xff54f2cd06a0d342
1272.xword 0x566bff718cddb905
1273.xword 0x6d367bc4d165d37a
1274.xword 0x5efc42b18f920522
1275.xword 0x584c92dec4bc66de
1276.xword 0xefc4e1f1b35853fc
1277.xword 0xe790a0c1689eb683
1278.xword 0x88c650f170c41710
1279.xword 0x614126cf9fc8dca3
1280.xword 0x5efc42b18f920522
1281.xword 0x584c92dec4bc66de
1282.xword 0xed9efe0d05896ce1
1283.xword 0xf9d45b94972117c8
1284
1285 .word 0xdfaa
1286 .word 0x39a9
1287 .word 0xb967
1288 .word 0x280c
1289
1290
1291SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004
1292attr_text {
1293 Name = .My_User_Section_4v004,
1294 part_0_ctx_nonzero_tsb_config_2,
1295 VA = MY_USER_TEXT_VA004,
1296 RA = MY_USER_TEXT_PA004,
1297 PA = MY_USER_TEXT_PA004,
1298 TTE_Context = PCONTEXT,
1299 TTE_V = 1,
1300 TTE_NFO = 0,
1301 TTE_L = 0,
1302 TTE_Soft = 0,
1303 TTE_IE = 0,
1304 TTE_E = 0,
1305 TTE_CP = 1,
1306 TTE_CV = 0,
1307 TTE_P = 0,
1308 TTE_EP = 1,
1309 TTE_W = 0,
1310 TTE_SW1 = 0,
1311 TTE_SW0 = 0,
1312 TTE_RSVD1 = 0,
1313 TTE_Size = 0,
1314 }
1315attr_text {
1316NAME = .My_User_Section_4v004,
1317 hypervisor
1318}
1319.text
1320.global user_code_begin_004
1321user_code_begin_004:
1322 ta T_CHANGE_NONHPRIV
1323 ta T_CHANGE_PRIV
1324 add %g0, PRIV, %l4
1325 mov %g0, %l2
1326 add %g0, 0x30, %l3 !! double bit err
1327 setx user_data_begin_004, %g1, %g2
1328 mov %g0, %o6
1329
1330hpriv_004:
1331 mov %g0, %i0
1332 mov %g0, %l1
1333
1334 add %g0, 1, %i3 !! Enable err_injection
1335 std %d0, [%g2 + 0x4]
1336 ldxa [%g2]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
1337
1338 ldx [%g2], %i2
1339
1340
1341 swap [%g2], %l3
1342 ldx [%g2 + 0x10], %i3
1343 ldx [%g2 + 0x18], %i4
1344 ldx [%g2 + 0x20], %i5
1345 ldx [%g2 + 0x28], %i6
1346 ldx [%g2 + 0x30], %i7
1347 ldx [%g2 + 0x38], %l1
1348 cmp %i0, 1
1349 bne FAIL
1350 mov %g0, %i0
1351 ldx [%g2], %i1
1352 cmp %i1, %i2
1353 bne FAIL
1354 nop
1355
1356 brnz %o6, DONE_005
1357 add %o6, 1, %o6
1358
1359 ta T_CHANGE_HPRIV
1360 setx st_address_hp, %g1, %g2
1361
1362 ba hpriv_004
1363 add %g0, HPRIV, %l4
1364
1365
1366DONE_005:
1367
1368 setx user_code_begin_005, %g2, %g3
1369 jmp %g3
1370 nop
1371
1372FAIL: EXIT_BAD
1373 nop
1374
1375attr_data {
1376 Name = .My_User_Section_4v004,
1377 part_0_ctx_nonzero_tsb_config_1,
1378 VA = MY_USER_DATA_VA004,
1379 RA = MY_USER_DATA_PA004,
1380 PA = MY_USER_DATA_PA004,
1381 TTE_Context = PCONTEXT,
1382 TTE_V = 1,
1383 TTE_NFO = 0,
1384 TTE_L = 0,
1385 TTE_Soft = 0,
1386 TTE_IE = 0,
1387 TTE_E = 0,
1388 TTE_CP = 1,
1389 TTE_CV = 0,
1390 TTE_P = 0,
1391 TTE_EP = 0,
1392 TTE_W = 1,
1393 TTE_SW1 = 0,
1394 TTE_SW0 = 0,
1395 TTE_RSVD1 = 0,
1396 TTE_Size = 0,
1397 }
1398attr_data {
1399NAME = .My_User_Section_4v004,
1400 hypervisor
1401}
1402.data
1403.global user_data_begin_004
1404.global store_ecc_data
1405user_data_begin_004:
1406.xword 0xefc4e1f1b35853fc
1407.xword 0xe790a0c1689eb683
1408.xword 0x88c650f170c41710
1409.xword 0x614126cf9fc8dca3
1410.xword 0x4be2f60911e465ce
1411.xword 0x4e22352a0c29c95c
1412.xword 0xf18efdf01ce79e24
1413.xword 0x294aaa56144d7cf1
1414.xword 0xe0066361bd9fcb86
1415.xword 0xea22901c101f6f52
1416.xword 0x806faa2171350467
1417.xword 0xff54f2cd06a0d342
1418.xword 0x566bff718cddb905
1419.xword 0x6d367bc4d165d37a
1420.xword 0x5efc42b18f920522
1421.xword 0x584c92dec4bc66de
1422.xword 0xefc4e1f1b35853fc
1423.xword 0xe790a0c1689eb683
1424.xword 0x88c650f170c41710
1425.xword 0x614126cf9fc8dca3
1426.xword 0x4be2f60911e465ce
1427.xword 0x4e22352a0c29c95c
1428.xword 0xf18efdf01ce79e24
1429.xword 0x294aaa56144d7cf1
1430.xword 0xe0066361bd9fcb86
1431.xword 0xea22901c101f6f52
1432store_ecc_data:
1433.xword 0xff54f2cd06a0d342
1434.xword 0x566bff718cddb905
1435.xword 0x6d367bc4d165d37a
1436.xword 0x5efc42b18f920522
1437.xword 0x584c92dec4bc66de
1438.xword 0xe0066361bd9fcb86
1439.xword 0xea22901c101f6f52
1440.xword 0x806faa2171350467
1441.xword 0x566bff718cddb905
1442.xword 0x6d367bc4d165d37a
1443 .word 0x4069
1444 .word 0x41ed
1445 .word 0x14c07
1446 .word 0x29de
1447
1448
1449SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005
1450attr_text {
1451 Name = .My_User_Section_4v005,
1452 part_0_ctx_nonzero_tsb_config_3,
1453 VA = MY_USER_TEXT_VA005,
1454 RA = MY_USER_TEXT_RA005,
1455 PA = MY_USER_TEXT_PA005,
1456 TTE_Context = PCONTEXT,
1457 TTE_V = 1,
1458 TTE_NFO = 0,
1459 TTE_L = 0,
1460 TTE_Soft = 0,
1461 TTE_IE = 0,
1462 TTE_E = 0,
1463 TTE_CP = 1,
1464 TTE_CV = 0,
1465 TTE_P = 0,
1466 TTE_EP = 1,
1467 TTE_W = 0,
1468 TTE_SW1 = 0,
1469 TTE_SW0 = 0,
1470 TTE_RSVD1 = 0,
1471 TTE_Size = 0,
1472 }
1473attr_text {
1474NAME = .My_User_Section_4v005,
1475 hypervisor
1476}
1477
1478!! inject error into all the scratchpad entries.
1479.text
1480.global user_code_begin_005
1481user_code_begin_005:
1482 ta T_CHANGE_NONHPRIV
1483 ta T_CHANGE_PRIV
1484 add %g0, PRIV, %l4
1485 mov %g0, %l2
1486 add %g0, 0x30, %l3 !! double bit err
1487 setx user_data_begin_005, %g1, %g2
1488 mov %g0, %o6
1489
1490hpriv_005:
1491 mov %g0, %i0
1492 mov %g0, %l1
1493
1494 add %g0, 1, %i3 !! Enable err_injection
1495 std %d0, [%g2 + 0x4]
1496 ldxa [%g2]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
1497
1498 ldx [%g2], %i2
1499
1500
1501 ldstub [%g2], %l3
1502 ldx [%g2 + 0x10], %i3
1503 ldx [%g2 + 0x18], %i4
1504 ldx [%g2 + 0x20], %i5
1505 ldx [%g2 + 0x28], %i6
1506 ldx [%g2 + 0x30], %i7
1507 ldx [%g2 + 0x38], %l1
1508 cmp %i0, 1
1509 bne FAIL
1510 mov %g0, %i0
1511 ldx [%g2], %i1
1512 cmp %i1, %i2
1513 bne FAIL
1514 nop
1515
1516 brnz %o6, DONE_006
1517 add %o6, 1, %o6
1518
1519 ta T_CHANGE_HPRIV
1520 setx st_address_hp, %g1, %g2
1521
1522 ba hpriv_005
1523 add %g0, HPRIV, %l4
1524
1525
1526DONE_006:
1527 EXIT_GOOD
1528 nop
1529
1530FAIL: EXIT_BAD
1531 nop
1532
1533attr_data {
1534 Name = .My_User_Section_4v005,
1535 part_0_ctx_nonzero_tsb_config_1,
1536 VA = MY_USER_DATA_VA005,
1537 RA = MY_USER_DATA_RA005,
1538 PA = MY_USER_DATA_PA005,
1539 TTE_Context = PCONTEXT,
1540 TTE_V = 1,
1541 TTE_NFO = 0,
1542 TTE_L = 0,
1543 TTE_Soft = 0,
1544 TTE_IE = 0,
1545 TTE_E = 0,
1546 TTE_CP = 1,
1547 TTE_CV = 0,
1548 TTE_P = 0,
1549 TTE_EP = 0,
1550 TTE_W = 1,
1551 TTE_SW1 = 0,
1552 TTE_SW0 = 0,
1553 TTE_RSVD1 = 0,
1554 TTE_Size = 0,
1555 }
1556attr_data {
1557NAME = .My_User_Section_4v005,
1558 hypervisor
1559}
1560.data
1561.global user_data_begin_005
1562user_data_begin_005:
1563.xword 0xefc4e1f1b35853fc
1564.xword 0xe790a0c1689eb683
1565.xword 0x88c650f170c41710
1566.xword 0x614126cf9fc8dca3
1567.xword 0x4be2f60911e465ce
1568.xword 0x4e22352a0c29c95c
1569.xword 0xf18efdf01ce79e24
1570.xword 0x294aaa56144d7cf1
1571.xword 0xe0066361bd9fcb86
1572.xword 0xea22901c101f6f52
1573.xword 0x806faa2171350467
1574.xword 0xff54f2cd06a0d342
1575.xword 0x566bff718cddb905
1576.xword 0x6d367bc4d165d37a
1577.xword 0x5efc42b18f920522
1578.xword 0x4be2f60911e465ce
1579.xword 0x4e22352a0c29c95c
1580.xword 0xf18efdf01ce79e24
1581 .word 0xf93b
1582 .word 0xe34b
1583 .word 0x127e6
1584 .word 0xd915
1585
1586
1587SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006
1588attr_text {
1589 Name = .My_User_Section_4v006,
1590 part_0_ctx_nonzero_tsb_config_3,
1591 VA = MY_USER_TEXT_VA006,
1592 RA = MY_USER_TEXT_RA006,
1593 PA = MY_USER_TEXT_PA006,
1594 TTE_Context = PCONTEXT,
1595 TTE_V = 1,
1596 TTE_NFO = 0,
1597 TTE_L = 0,
1598 TTE_Soft = 0,
1599 TTE_IE = 0,
1600 TTE_E = 0,
1601 TTE_CP = 1,
1602 TTE_CV = 0,
1603 TTE_P = 0,
1604 TTE_EP = 1,
1605 TTE_W = 0,
1606 TTE_SW1 = 0,
1607 TTE_SW0 = 0,
1608 TTE_RSVD1 = 0,
1609 TTE_Size = 0,
1610 }
1611attr_text {
1612NAME = .My_User_Section_4v006,
1613 hypervisor
1614}
1615.text
1616.global user_code_begin_006
1617user_code_begin_006:
1618 cmp %i0, %l1
1619 bne FAIL
1620 mov %g0, %i0
1621FAIL: EXIT_BAD
1622 nop
1623
1624attr_data {
1625 Name = .My_User_Section_4v006,
1626 part_0_ctx_nonzero_tsb_config_1,
1627 VA = MY_USER_DATA_VA006,
1628 RA = MY_USER_DATA_RA006,
1629 PA = MY_USER_DATA_PA006,
1630 TTE_Context = PCONTEXT,
1631 TTE_V = 1,
1632 TTE_NFO = 0,
1633 TTE_L = 0,
1634 TTE_Soft = 0,
1635 TTE_IE = 0,
1636 TTE_E = 0,
1637 TTE_CP = 1,
1638 TTE_CV = 0,
1639 TTE_P = 0,
1640 TTE_EP = 0,
1641 TTE_W = 1,
1642 TTE_SW1 = 0,
1643 TTE_SW0 = 0,
1644 TTE_RSVD1 = 0,
1645 TTE_Size = 0,
1646 }
1647attr_data {
1648NAME = .My_User_Section_4v006,
1649 hypervisor
1650}
1651.data
1652.global user_data_begin_006
1653user_data_begin_006:
1654 .word 0x7551
1655 .word 0x1535d
1656 .word 0x59
1657 .word 0x72f7
1658
1659
1660SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007
1661attr_text {
1662 Name = .My_User_Section_4v007,
1663 part_0_ctx_nonzero_tsb_config_3,
1664 VA = MY_USER_TEXT_VA007,
1665 RA = MY_USER_TEXT_RA007,
1666 PA = MY_USER_TEXT_PA007,
1667 TTE_Context = PCONTEXT,
1668 TTE_V = 1,
1669 TTE_NFO = 0,
1670 TTE_L = 0,
1671 TTE_Soft = 0,
1672 TTE_IE = 0,
1673 TTE_E = 0,
1674 TTE_CP = 1,
1675 TTE_CV = 0,
1676 TTE_P = 0,
1677 TTE_EP = 1,
1678 TTE_W = 0,
1679 TTE_SW1 = 0,
1680 TTE_SW0 = 0,
1681 TTE_RSVD1 = 0,
1682 TTE_Size = 0,
1683 }
1684attr_text {
1685NAME = .My_User_Section_4v007,
1686 hypervisor
1687}
1688
1689!! inject error in all the 4 ways and do special memops and chk the effect.
1690!! Also do nc accesses
1691
1692.text
1693.global user_code_begin_007
1694user_code_begin_007:
1695 cmp %i0, %l1
1696 bne FAIL
1697 mov %g0, %i0
1698 mov %g0, %l1
1699
1700
1701
1702FAIL: EXIT_BAD
1703 nop
1704
1705
1706attr_data {
1707 Name = .My_User_Section_4v007,
1708 part_0_ctx_nonzero_tsb_config_1,
1709 VA = MY_USER_DATA_VA007,
1710 RA = MY_USER_DATA_RA007,
1711 PA = MY_USER_DATA_PA007,
1712 TTE_Context = PCONTEXT,
1713 TTE_V = 1,
1714 TTE_NFO = 0,
1715 TTE_L = 0,
1716 TTE_Soft = 0,
1717 TTE_IE = 0,
1718 TTE_E = 0,
1719 TTE_CP = 1,
1720 TTE_CV = 0,
1721 TTE_P = 0,
1722 TTE_EP = 0,
1723 TTE_W = 1,
1724 TTE_SW1 = 0,
1725 TTE_SW0 = 0,
1726 TTE_RSVD1 = 0,
1727 TTE_Size = 0,
1728 }
1729attr_data {
1730NAME = .My_User_Section_4v007,
1731 hypervisor
1732}
1733.data
1734.global user_data_begin_007
1735user_data_begin_007:
1736 .word 0x14a3d
1737 .word 0x798d
1738 .word 0xfdd5
1739 .word 0x9d05
1740
1741
1742SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008
1743attr_text {
1744 Name = .My_User_Section_4v008,
1745 part_0_ctx_nonzero_tsb_config_3,
1746 VA = MY_USER_TEXT_VA008,
1747 RA = MY_USER_TEXT_RA008,
1748 PA = MY_USER_TEXT_PA008,
1749 TTE_Context = PCONTEXT,
1750 TTE_V = 1,
1751 TTE_NFO = 0,
1752 TTE_L = 0,
1753 TTE_Soft = 0,
1754 TTE_IE = 0,
1755 TTE_E = 0,
1756 TTE_CP = 1,
1757 TTE_CV = 0,
1758 TTE_P = 0,
1759 TTE_EP = 1,
1760 TTE_W = 0,
1761 TTE_SW1 = 0,
1762 TTE_SW0 = 0,
1763 TTE_RSVD1 = 0,
1764 TTE_Size = 0,
1765 }
1766attr_text {
1767NAME = .My_User_Section_4v008,
1768 hypervisor
1769}
1770.text
1771.global user_code_begin_008
1772user_code_begin_008:
1773 cmp %i0, %l1
1774 bne FAIL
1775 mov %g0, %i0
1776 mov %g0, %l1
1777
1778
1779FAIL: EXIT_BAD
1780 nop
1781
1782attr_data {
1783 Name = .My_User_Section_4v008,
1784 part_0_ctx_nonzero_tsb_config_1,
1785 VA = MY_USER_DATA_VA008,
1786 RA = MY_USER_DATA_RA008,
1787 PA = MY_USER_DATA_PA008,
1788 TTE_Context = PCONTEXT,
1789 TTE_V = 1,
1790 TTE_NFO = 0,
1791 TTE_L = 0,
1792 TTE_Soft = 0,
1793 TTE_IE = 0,
1794 TTE_E = 0,
1795 TTE_CP = 1,
1796 TTE_CV = 0,
1797 TTE_P = 0,
1798 TTE_EP = 0,
1799 TTE_W = 1,
1800 TTE_SW1 = 0,
1801 TTE_SW0 = 0,
1802 TTE_RSVD1 = 0,
1803 TTE_Size = 0,
1804 }
1805attr_data {
1806NAME = .My_User_Section_4v008,
1807 hypervisor
1808}
1809.data
1810.global user_data_begin_008
1811user_data_begin_008:
1812 .word 0xfd87
1813 .word 0x6aa3
1814 .word 0x4d58
1815 .word 0x547a
1816
1817
1818.global DATA_ACCESS_ERROR_HANDLER
1819.global INST_ACCESS_ERROR_HANDLER
1820.global MEM_ADDR_HANDLER
1821.global RECOVERABLE_ERR_HANDLER
1822.global STORE_ERR_HANDLER
1823
1824SECTION .HTRAPS
1825.text
1826DATA_ACCESS_ERROR_HANDLER:
1827 add %g0, SFSR_VA, %g5 !
1828 ldxa [%g5]ASI_DSFSR, %o1 !
1829 cmp %o1, 0x1
1830 bne FAIL
1831 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1832 ldxa [%g6]ASI_SFAR, %o1
1833 cmp %o1, %l3
1834 bne FAIL
1835 !!issue demap pg
1836 xor %o1, 0x1fff, %o1
1837 stxa %g0, [%o1] ASI_DMMU_DEMAP
1838 !!disable errors
1839 add %g0, CERER_VA, %g3
1840 stxa %g0, [%g3]ASI_CERER
1841 add %g0, 1, %i0 !
1842 retry
1843 nop
1844
1845INST_ACCESS_ERROR_HANDLER:
1846 add %g0, SFSR_VA, %g5 !
1847 !!ldxa [%g5]ASI_ISFSR, %o1 !
1848 !!cmp %o1, 0x1
1849 !!bne FAIL
1850 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1851 ldxa [%g6]ASI_SFAR, %o1
1852 !!brnz %o1, FAIL
1853 rdpr %tpc, %o1
1854 cmp %o1, %l4 !! cmp pc matches the expected pc
1855 bne FAIL
1856 !!issue demap pg
1857 srlx %o1, 0xd, %o1
1858 sllx %o1, 0xd, %o1
1859 stxa %g0, [%o1] ASI_IMMU_DEMAP
1860 add %g0, 1, %i0 !
1861 retry
1862
1863MEM_ADDR_HANDLER:
1864 done
1865 nop
1866
1867HW_CORR_ERROR_HANDLER:
1868 ldxa [%g0]0x4c, %g1 !! read the DESR
1869 ldxa [%g0]0x4c, %g2 !! g2 shd be 0.
1870 retry
1871 nop
1872
1873INVALID_ASI_HANDLER:
1874 set STAU_ERR_EN, %g1
1875 add %g0, 0x100, %g3 !! read the stb ptr
1876 ldxa [%g3]ASI_STB_ACCESS, %g2
1877 !srlx %g2, 3, %g2
1878 brz %g2, DONE
1879 cmp %g2, 1
1880 be STORES_7
1881 cmp %g2, 2
1882 be STORES_6
1883 cmp %g2, 3
1884 be STORES_5
1885 cmp %g2, 4
1886 be STORES_4
1887 cmp %g2, 5
1888 be STORES_3
1889 cmp %g2, 6
1890 be STORES_2
1891 cmp %g2, 7
1892 be,a DONE
1893STORES_7:
1894 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1895STORES_6:
1896 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1897STORES_5:
1898 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1899STORES_4:
1900 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1901STORES_3:
1902 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1903STORES_2:
1904 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1905 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1906
1907DONE:
1908 done
1909 nop
1910
1911RECOVERABLE_ERR_HANDLER:
1912 ldxa [%g0]0x4c, %g1 !! read the DESR
1913 ldxa [%g0]0x4c, %g2 !! g2 shd be 0.
1914CHK_ERRT:
1915 srlx %g1, 56, %g2 !! chk the err_type
1916 and %g2, 0x1F, %g3
1917 cmp %g3, SBDPU_ERR_TYPE
1918 bne FAIL
1919CHK_S_BIT:
1920 srlx %g2, 5, %g2 !! chk s bit
1921 and %g2, 1, %g3
1922 cmp %g3, 1
1923 bne FAIL
1924CHK_M_BIT:
1925 srlx %g2, 1, %g2 !! chk M bit bit
1926 and %g2, 1, %g3
1927 cmp %o7, %g3
1928 bne FAIL
1929CHK_F_BIT:
1930 srlx %g2, 1, %g3 !! chk F bit set
1931 cmp %g3, 1
1932 bne FAIL
1933CHK_WAY:
1934 and %g1, 0x7, %g2 !! SB index
1935 cmp %g2, %l2
1936 bne FAIL
1937
1938 sllx %g2, 3, %g3 !! g3 has the addr to read data
1939 or %g3, 0x40, %g4 !! g4 has the addr to read ecc
1940 or %g3, 0xC0, %g5 !! g5 has the addr to diag read stb pa
1941
1942 CMP_DATA:
1943 ldxa [%g3]ASI_STB_ACCESS, %g6
1944 cmp %g6, %o5
1945 bne FAIL
1946
1947 CMP_ECC:
1948 ldxa [%g4]ASI_STB_ACCESS, %g6 !! ecc data
1949 brz %o6, CMP_PA !! lsu flips the ecc for upper 32 bits only.
1950 srlx %g6, 7, %g7
1951 srlx %o3, 7, %o3
1952 xor %o3, %l3, %g1 !! o3 has the ecc withour err, l3 has the mask.
1953 cmp %g1, %g7
1954 bne FAIL
1955
1956 CMP_PA:
1957 ldxa [%g5]ASI_STB_ACCESS, %g6 !! pa
1958 srlx %g6, 40, %g7
1959 cmp %g7, %l7 !! cmp asi, byte mask
1960 bne FAIL
1961 sllx %g6, 24, %g6 !! shift the mask
1962 srlx %g6, 24, %g6
1963 cmp %g6, %l5
1964 bne FAIL
1965 CMP_PRIV:
1966 or %g3, 0x80, %g7 !! g7 has the addr for the control read
1967 ldxa [%g7]ASI_STB_ACCESS, %g6 !! chk priv
1968 and %g6, 0x7, %g6
1969 cmp %g6, %i6
1970 bne FAIL
1971 add %g0, 1, %i0
1972
1973 retry
1974
1975STORE_ERR_HANDLER:
1976 add %g0, 0x8, %g1
1977 ldxa [%g1]0x4c, %g2 !! read the DFESR
1978 !!reading dfesr clears it now
1979 ldxa [%g1]0x4c, %g3 !! read the DFESR
1980 brnz %g3, FAIL
1981 nop
1982CHK_INDEX:
1983 srlx %g2, 55, %g2
1984 and %g2, 0x7, %g3
1985 cmp %g3, %l2
1986 bne FAIL
1987CHK_PRIV:
1988 srlx %g2, 3, %g2
1989 and %g2, 0x3, %g3
1990 cmp %g3, %l4
1991 bne FAIL
1992CHK_ERR_TYPE:
1993 srlx %g2, 3, %g2
1994 and %g2, 3, %g3
1995 cmp %g3, 0x1 !!SBAPP
1996 bne FAIL
1997
1998 add %i0, 1, %i0
1999
2000TURN_OFF_ERR_INJECT:
2001 stxa %g0, [%g0]ASI_ERR_INJ
2002 retry
2003
2004FAIL: ta 0xa1
2005 nop
2006
2007.data
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017