Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / lsu / diag / err_tsa_diag.s
CommitLineData
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
196main: /* 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
232CLEAR_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
292user_data_start:
293.word 0x12345678
294.word 0x9a9b9c9d
295.word 0x00000000
296.word 0xffffffff
297
298!#***********************************************************************
299
300SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000
301attr_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 }
324attr_text {
325NAME = .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
331user_code_begin_000:
332 add %g0, 1, %l1
333 add %g0, 1, %l2
334 add %g0, 0x55, %g1
335
336 mov %g0, %l6
337
338LOOP_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
405FAIL:
406 EXIT_BAD
407 nop
408
409attr_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 }
432attr_data {
433NAME = .My_User_Section_4v000,
434 hypervisor
435}
436.data
437.global user_data_begin_000
438user_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
469SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001
470attr_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 }
493attr_text {
494NAME = .My_User_Section_4v001,
495 hypervisor
496}
497.text
498.global user_code_begin_001
499!! inject err by writing to %tt register
500user_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
509LOOP_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
568FAIL:
569 EXIT_BAD
570
571attr_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 }
594attr_data {
595NAME = .My_User_Section_4v001,
596 hypervisor
597}
598.data
599.global user_data_begin_001
600user_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
624SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002
625attr_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 }
648attr_text {
649NAME = .My_User_Section_4v002,
650 hypervisor
651}
652.text
653.global user_code_begin_002
654!!inject err by writing to tpc
655user_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
663LOOP_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
722FAIL:
723 EXIT_BAD
724 nop
725
726attr_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 }
749attr_data {
750NAME = .My_User_Section_4v002,
751 hypervisor
752}
753.data
754.global user_data_begin_002
755user_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
779SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003
780attr_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 }
803attr_text {
804NAME = .My_User_Section_4v003,
805 hypervisor
806}
807.text
808.global user_code_begin_003
809!! inject err by writing to %tnpc register
810user_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
818LOOP_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
877FAIL:
878 EXIT_BAD
879 nop
880
881attr_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 }
904attr_data {
905NAME = .My_User_Section_4v003,
906 hypervisor
907}
908.data
909.global user_data_begin_003
910user_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
935SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004
936attr_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 }
959attr_text {
960NAME = .My_User_Section_4v004,
961 hypervisor
962}
963.text
964.global user_code_begin_004
965!!inject err by writing to htstate
966user_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
974LOOP_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
1033FAIL: EXIT_BAD
1034 nop
1035
1036attr_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 }
1059attr_data {
1060NAME = .My_User_Section_4v004,
1061 hypervisor
1062}
1063.data
1064.global user_data_begin_004
1065user_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
1088SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005
1089attr_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 }
1112attr_text {
1113NAME = .My_User_Section_4v005,
1114 hypervisor
1115}
1116! Use done inst. to catch errors in TSA
1117.text
1118.global user_code_begin_005
1119user_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
1134done_tl1:
1135 done !!trap
1136 brz %i0, FAIL
1137 mov %g0, %i0
1138
1139done_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
1149done_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
1159done_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
1169done_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
1179done_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
1187clr_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
1213FAIL: EXIT_BAD
1214 nop
1215
1216attr_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 }
1239attr_data {
1240NAME = .My_User_Section_4v005,
1241 hypervisor
1242}
1243.data
1244.global user_data_begin_005
1245user_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
1270SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006
1271attr_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 }
1294attr_text {
1295NAME = .My_User_Section_4v006,
1296 hypervisor
1297}
1298! Use retry inst. to catch errors in TSA
1299.text
1300.global user_code_begin_006
1301user_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
1308retry_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
1321retry_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
1331retry_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
1341retry_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
1351retry_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
1361retry_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
1369clr_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
1394FAIL: EXIT_BAD
1395 nop
1396
1397attr_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 }
1420attr_data {
1421NAME = .My_User_Section_4v006,
1422 hypervisor
1423}
1424.data
1425.global user_data_begin_006
1426user_data_begin_006:
1427 .word 0x7551
1428 .word 0x1535d
1429 .word 0x59
1430 .word 0x72f7
1431
1432
1433SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007
1434attr_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 }
1457attr_text {
1458NAME = .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
1466user_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
1571mondo_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
1600dev_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
1629dev_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
1658res_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
1687res_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
1716non_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
1744non_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
1777FAIL: EXIT_BAD
1778 nop
1779
1780
1781attr_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 }
1804attr_data {
1805NAME = .My_User_Section_4v007,
1806 hypervisor
1807}
1808.data
1809.global user_data_begin_007
1810user_data_begin_007:
1811 .word 0x14a3d
1812 .word 0x798d
1813 .word 0xfdd5
1814 .word 0x9d05
1815
1816
1817SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008
1818attr_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 }
1841attr_text {
1842NAME = .My_User_Section_4v008,
1843 hypervisor
1844}
1845.text
1846.global user_code_begin_008
1847user_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
1857rd_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
1870rd_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
1883rd_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
1896rd_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
1909rd_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
1922wr_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
1935wr_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
1948wr_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
1961wr_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
1974wr_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
1986wr_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
2017FAIL: EXIT_BAD
2018 nop
2019
2020attr_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 }
2043attr_data {
2044NAME = .My_User_Section_4v008,
2045 hypervisor
2046}
2047.data
2048.global user_data_begin_008
2049user_data_begin_008:
2050 .word 0xfd87
2051 .word 0x6aa3
2052 .word 0x4d58
2053 .word 0x547a
2054
2055
2056SECTION .My_User_Section_4v009 TEXT_VA=MY_USER_TEXT_VA009, DATA_VA=MY_USER_DATA_VA009
2057attr_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 }
2080attr_text {
2081NAME = .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
2087user_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
2178FAIL: EXIT_BAD
2179 nop
2180
2181attr_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 }
2204attr_data {
2205NAME = .My_User_Section_4v009,
2206 hypervisor
2207}
2208.data
2209.global user_data_begin_009
2210user_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
2226SECTION .My_User_Section_4v010 TEXT_VA=MY_USER_TEXT_VA010, DATA_VA=MY_USER_DATA_VA010
2227attr_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 }
2250attr_text {
2251NAME = .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
2259user_code_begin_010:
2260
2261mov %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
2307FAIL: EXIT_BAD
2308 nop
2309
2310attr_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 }
2333attr_data {
2334NAME = .My_User_Section_4v010,
2335 hypervisor
2336}
2337.data
2338.global user_data_begin_010
2339user_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
2355SECTION .My_User_Section_4v011 TEXT_VA=MY_USER_TEXT_VA011, DATA_VA=MY_USER_DATA_VA011
2356attr_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 }
2379attr_text {
2380NAME = .My_User_Section_4v011,
2381 hypervisor
2382}
2383.text
2384.global user_code_begin_011
2385user_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
2418INVALID_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
2425setx 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
2431FAIL: EXIT_BAD
2432 nop
2433
2434attr_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 }
2457attr_data {
2458NAME = .My_User_Section_4v011,
2459 hypervisor
2460}
2461.data
2462.global user_data_begin_011
2463user_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
2479SECTION .My_User_Section_4v012 TEXT_VA=MY_USER_TEXT_VA012, DATA_VA=MY_USER_DATA_VA012
2480attr_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 }
2503attr_text {
2504NAME = .My_User_Section_4v012,
2505 hypervisor
2506}
2507.text
2508.global user_code_begin_012
2509user_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
2579FAIL: EXIT_BAD
2580 nop
2581
2582attr_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 }
2605attr_data {
2606NAME = .My_User_Section_4v012,
2607 hypervisor
2608}
2609.data
2610.global user_data_begin_012
2611user_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
2627SECTION .My_User_Section_4v013 TEXT_VA=MY_USER_TEXT_VA013, DATA_VA=MY_USER_DATA_VA013
2628attr_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 }
2651attr_text {
2652NAME = .My_User_Section_4v013,
2653 hypervisor
2654}
2655.text
2656.global user_code_begin_013
2657user_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
2739FAIL:
2740 EXIT_BAD
2741 nop
2742attr_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 }
2765attr_data {
2766NAME = .My_User_Section_4v013,
2767 hypervisor
2768}
2769.data
2770.global user_data_begin_013
2771user_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
2789SECTION .HTRAPS
2790.text
2791
2792INT_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
2804FAIL: EXIT_BAD
2805 nop
2806
2807
2808