Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / lsu / diag / err_scau_diag.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: err_scau_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
67#define MY_USER_DATA_VA000 0x6a000000
68#define MY_USER_DATA_RA000 0x6b000000
69#define MY_USER_DATA_PA000 0x106b000000
70#define MY_USER_DATA_VA001 0x6a010000
71#define MY_USER_DATA_RA001 0x6b010000
72#define MY_USER_DATA_PA001 0x106b010000
73#define MY_USER_DATA_VA002 0x6a020000
74#define MY_USER_DATA_RA002 0x6b020000
75#define MY_USER_DATA_PA002 0x106b020000
76#define MY_USER_DATA_VA003 0x6a030000
77#define MY_USER_DATA_RA003 0x6b030000
78#define MY_USER_DATA_PA003 0x106b030000
79#define MY_USER_DATA_VA004 0x6a040000
80#define MY_USER_DATA_RA004 0x6b040000
81#define MY_USER_DATA_PA004 0x106b040000
82#define MY_USER_DATA_VA005 0x6a050000
83#define MY_USER_DATA_RA005 0x6b050000
84#define MY_USER_DATA_PA005 0x106b050000
85
86#define IMDU_ERR_EN 0xa0000000
87#define IMTU_ERR_EN 0x90000000
88#define DMDU_ERR_EN 0x88000000
89#define DMTU_ERR_EN 0x84000000
90#define IRCU_ERR_EN 0x82000000
91#define FRCU_ERR_EN 0x81000000
92#define SCAU_ERR_EN 0x80800000
93#define TCCU_ERR_EN 0x80400000
94#define TSAU_ERR_EN 0x80200000
95#define MRAU_ERR_EN 0x80100000
96#define STAU_ERR_EN 0x80080000
97#define STDU_ERR_EN 0x80020000
98
99#define ASI_DESR 0x4c
100#define ASI_DFESR 0x4c
101#define DFESR_VA 0x8
102#define ASI_DSFSR 0x58
103#define ASI_ISFSR 0x50
104#define SFSR_VA 0x18
105#define ASI_SFAR 0x58
106#define SFAR_VA 0x20
107#define ASI_ERR_INJ 0x43
108#define ASI_CETER 0x4C
109#define CETER_VA 0x18
110#define ASI_CERER 0x4C
111#define CERER_VA 0x10
112
113#define CERER_SBDPC 0x400
114#define CETER_DHCCE 0x1000000000000000
115#define CETER_DE 0x2000000000000000
116#define CETER_PSCCE 0x4000000000000000
117#define DCVP_ERR_TYPE 0x5
118#define SCAC_ERR_TYPE 0xa
119#define SCAU_ERR_TYPE 0xb
120
121#define MAIN_PAGE_HV_ALSO
122
123#define H_HT0_Mem_Address_Not_Aligned_0x34
124#define My_HT0_Mem_Address_Not_Aligned_0x34 \
125 add %g0, CERER_VA, %g3; \
126 set SCAU_ERR_EN, %g4; \
127 or %g4, %l2, %g4 ;\
128 stxa %g4, [%g0]ASI_ERR_INJ;\
129 done;nop
130
131#define H_HT0_Internal_Processor_Error_0x29
132#define SUN_H_HT0_Internal_Processor_Error_0x29 \
133 ba INT_PROC_ERR_HANDLER; \
134 nop;nop;nop;nop;nop;nop;nop
135#include "hboot.s"
136
137/************************************************************************
138 Test case:
139 ************************************************************************/
140
141.text
142.global main
143
144main: /* test begin */
145 ta T_CHANGE_HPRIV
146
147 !! set CERER.SCAU
148 setx 0x20000000, %g1, %o2 !! enable scac errs
149 add %g0, CERER_VA, %g3 !!g3 has cerer va
150
151 stxa %o2, [%g3]ASI_CERER
152
153 !! set CETER.DHCCE
154 setx CETER_PSCCE, %l0, %o2
155 add %g0, CETER_VA, %g3
156 stxa %o2, [%g3]ASI_CETER
157
158 add %g0, 1, %l2 !! mask
159
160!! Enable error injection
161 add %g0, 1, %l5
162 add %g0, 1, %l6 !! mask
163 sllx %l5, 1, %l5
164 or %l5, %l6, %l2
165
166 set SCAU_ERR_EN, %l1
167 or %l1, %l2, %l1 ! set mask bit 0 to 1
168 stxa %l1, [%g0]ASI_ERR_INJ
169
170 ta T_CHANGE_NONHPRIV
171
172 ta T_CHANGE_PRIV
173 mov %g0, %i0
174 add %g0, 1, %l1
175 mov %g0, %i1
176 add %g0, 0x20, %o4
177 setx user_data_begin_000, %g1, %l4
178 setx user_code_begin_000, %g1, %g2
179 jmp %g2
180 nop
181 EXIT_BAD
182
183/*
184begin_thread_1:
185 add %g0, 4, %i7
186 setx THS_START, %g1, %g2
187 jmp %g2
188 nop
189 EXIT_BAD
190
191begin_thread_2:
192 add %g0, 8, %i7
193 setx THS_START, %g1, %g2
194 jmp %g2
195 nop
196 EXIT_BAD
197*/
198
199/************************************************************************
200 Test case data start
201 ************************************************************************/
202.data
203.global user_data_start
204user_data_start:
205.word 0x12345678
206.word 0x9a9b9c9d
207.word 0x00000000
208.word 0xffffffff
209
210!#***********************************************************************
211
212SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000
213attr_text {
214 Name = .My_User_Section_4v000,
215 part_0_ctx_nonzero_tsb_config_2,
216 VA = MY_USER_TEXT_VA000,
217 RA = MY_USER_TEXT_RA000,
218 PA = ra2pa(MY_USER_TEXT_RA000, 0),
219 TTE_Context = PCONTEXT,
220 TTE_V = 1,
221 TTE_NFO = 0,
222 TTE_L = 0,
223 TTE_Soft = 0,
224 TTE_IE = 0,
225 TTE_E = 0,
226 TTE_CP = 1,
227 TTE_CV = 0,
228 TTE_P = 0,
229 TTE_EP = 1,
230 TTE_W = 0,
231 TTE_SW1 = 0,
232 TTE_SW0 = 0,
233 TTE_RSVD1 = 0,
234 TTE_Size = 0,
235 }
236attr_text {
237NAME = .My_User_Section_4v000,
238 hypervisor
239}
240!! Try all possible 2 bit combinations of errors in ecc bits.
241!! combinations of bits tried:70 (70 means bits 7 and 0 are asserted together)
242!! With bit 0 = 1: 70, 60, 50, 40, 30, 20, 10 => 7 cases
243!! With bit 1 = 1: 71, 61, 51, 41, 31, 21 => 6 cases
244!! With bit 2 = 1: 72, 62, 52, 42, 32 => 5 cases
245!! With bit 3 = 1: 73, 63, 53, 43 => 4 cases
246!! With bit 4 = 1: 74, 64, 54 => 3 cases
247!! With bit 5 = 1: 75, 65 => 2 cases
248!! With bit 6 = 1: 76 => 1 case
249.text
250.global user_code_begin_000
251user_code_begin_000:
252 ldx [%l4 + %i1], %i2 !! data to be stored in scratchpad
253 stxa %i2, [%g0 + %i1]0x20
254 ldxa [%g0 + %i1]0x20, %i3 !! error is precise
255 cmp %i3, %i2
256 bne FAIL
257 cmp %i0, %l1
258 bne FAIL
259 mov %g0, %i0
260 add %i1, 8, %i1
261 cmp %i1, 0x20
262 be,a .+8
263 add %g0, 0x30, %i1
264 cmp %i1, 0x38
265 ble user_code_begin_000
266 nop
267LOOP_1: !! This loop is executed when changing from 10 -> 20
268 mov %g0, %i1
269 sllx %l5, 1, %l5
270 or %l5, %l6, %l2
271 cmp %l5, 0x80
272 ble user_code_begin_000
273 ldx [%l4 + 0x2], %i2 ! mem_aligned trap to change the mask in err_inject_reg
274
275!! This loop is executed when changing from bit 0 being 1 to bit 1 being 1.
276LOOP_2: mov %g0, %i1
277 sllx %l6, 1, %l6
278 mov %l6, %l5
279 sllx %l5, 1, %l5
280 or %l5, %l6, %l2
281 cmp %l6, 0x80
282 bl user_code_begin_000
283 ldx [%l4 + 0x2], %i2 ! mem_aligned trap to change the mask in err_inject_reg
284
285 setx user_code_begin_001, %g1, %g2
286 jmp %g2
287 nop
288
289FAIL:
290 EXIT_BAD
291 nop
292
293attr_data {
294 Name = .My_User_Section_4v000,
295 part_0_ctx_nonzero_tsb_config_1,
296 VA = MY_USER_DATA_VA000,
297 RA = MY_USER_DATA_RA000,
298 PA = ra2pa(MY_USER_DATA_RA000, 0),
299 TTE_Context = PCONTEXT,
300 TTE_V = 1,
301 TTE_NFO = 0,
302 TTE_L = 0,
303 TTE_Soft = 0,
304 TTE_IE = 0,
305 TTE_E = 0,
306 TTE_CP = 1,
307 TTE_CV = 0,
308 TTE_P = 0,
309 TTE_EP = 0,
310 TTE_W = 1,
311 TTE_SW1 = 0,
312 TTE_SW0 = 0,
313 TTE_RSVD1 = 0,
314 TTE_Size = 0,
315 }
316attr_data {
317NAME = .My_User_Section_4v000,
318 hypervisor
319}
320.data
321.global user_data_begin_000
322user_data_begin_000:
323.xword 0xe0066361bd9fcb86
324.xword 0xea22901c101f6f52
325.xword 0x806faa2171350467
326.xword 0xff54f2cd06a0d342
327.xword 0x566bff718cddb905
328.xword 0x6d367bc4d165d37a
329.xword 0x5efc42b18f920522
330.xword 0x584c92dec4bc66de
331
332.xword 0xed9efe0d05896ce1
333
334.xword 0xf9d45b94972117c8
335
336.xword 0xd0c647618c9e43f3
337
338.xword 0xfe04ead3b77c2d11
339
340.xword 0x06d2d7f29e76397c
341
342.xword 0x234c366110eddd38
343
344.xword 0xa80656d4288044bc
345
346.xword 0x12e763fbd8e2970d
347
348.xword 0x7320217fab3eae0e
349
350.xword 0x38683cebedefb5af
351
352
353SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001
354attr_text {
355 Name = .My_User_Section_4v001,
356 part_0_ctx_nonzero_tsb_config_2,
357 VA = MY_USER_TEXT_VA001,
358 RA = MY_USER_TEXT_RA001,
359 PA = ra2pa(MY_USER_TEXT_RA001, 0),
360 TTE_Context = PCONTEXT,
361 TTE_V = 1,
362 TTE_NFO = 0,
363 TTE_L = 0,
364 TTE_Soft = 0,
365 TTE_IE = 0,
366 TTE_E = 0,
367 TTE_CP = 1,
368 TTE_CV = 0,
369 TTE_P = 0,
370 TTE_EP = 1,
371 TTE_W = 0,
372 TTE_SW1 = 0,
373 TTE_SW0 = 0,
374 TTE_RSVD1 = 0,
375 TTE_Size = 0,
376 }
377attr_text {
378NAME = .My_User_Section_4v001,
379 hypervisor
380}
381.text
382.global user_code_begin_001
383user_code_begin_001:
384 ta T_CHANGE_HPRIV
385 add %g0, 1, %l6
386 mov %l6, %l5
387 sllx %l5, 1, %l5
388 or %l5, %l6, %l2
389 set SCAU_ERR_EN, %l3
390 or %l3, %l2, %l3
391 stxa %l3, [%g0]ASI_ERR_INJ
392 mov %g0, %i1
393 setx user_data_begin_001, %g1, %l4
394 add %g0, 0x40, %o4
395 set 0xffffff00, %g1
396
397ST0:
398 ldx [%l4 + %i1], %i2 !! data to be stored in scratchpad
399 stxa %i2, [%g0 + %i1]0x4F
400 cmp %l5, 0x80
401 be .+20
402 sllx %l5, 1, %l5
403 or %l5, %l6, %l2
404 and %l3, %g1, %l3
405 or %l3, %l2, %l3
406 add %i1, 8, %i1
407 cmp %i1, 0x38
408 ble ST0
409 stxa %l3, [%g0]ASI_ERR_INJ
410
411 mov %g0, %i1
412 add %g0, 1, %l6
413 mov %l6, %l5
414 sllx %l5, 1, %l5
415 or %l5, %l6, %l2
416LD0:
417 ldx [%l4 + %i1], %i2
418 ldxa [%g0 + %i1]0x4F, %i3 !! error is precise
419 cmp %i0, %l1
420 bne FAIL
421 cmp %l5, 0x80
422 be .+12
423 sllx %l5, 1, %l5
424 or %l5, %l6, %l2
425 mov %g0, %i0
426 cmp %i1, 0x30
427 ble LD0
428 add %i1, 8, %i1
429
430 setx user_code_begin_003, %g1, %g2
431 jmp %g2
432 nop
433
434FAIL:
435 EXIT_BAD
436 nop
437
438attr_data {
439 Name = .My_User_Section_4v001,
440 part_0_ctx_nonzero_tsb_config_1,
441 VA = MY_USER_DATA_VA001,
442 RA = MY_USER_DATA_RA001,
443 PA = ra2pa(MY_USER_DATA_RA001, 0),
444 TTE_Context = PCONTEXT,
445 TTE_V = 1,
446 TTE_NFO = 0,
447 TTE_L = 0,
448 TTE_Soft = 0,
449 TTE_IE = 0,
450 TTE_E = 0,
451 TTE_CP = 1,
452 TTE_CV = 0,
453 TTE_P = 0,
454 TTE_EP = 0,
455 TTE_W = 1,
456 TTE_SW1 = 0,
457 TTE_SW0 = 0,
458 TTE_RSVD1 = 0,
459 TTE_Size = 0,
460 }
461attr_data {
462NAME = .My_User_Section_4v001,
463 hypervisor
464}
465.data
466.global user_data_begin_001
467user_data_begin_001:
468.xword 0xfa474991f13e3460
469.xword 0x1446415baecf3609
470.xword 0xe3215e901114ad4b
471.xword 0xf91d897e92d1ee95
472.xword 0x33458a48805d888b
473.xword 0x7f5a3ddb7d8e3c23
474.xword 0xaa80311fb1e17e79
475.xword 0x0f59d0e1ac35dbd4
476.xword 0x057c893bc8fc1e7e
477.xword 0xcfb9e3a29c786cc0
478.xword 0x7257becb4609969e
479.xword 0x4b1896677e83abae
480.xword 0xc2e35a285574f037
481.xword 0x2e42eb5835020e2e
482.xword 0x90775b99929f43cc
483.xword 0x9fac4ae85a4ecd4e
484
485 .word 0x10731
486 .word 0xd027
487 .word 0x1350e
488 .word 0x10e9d
489
490
491SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003
492attr_text {
493 Name = .My_User_Section_4v003,
494 part_0_ctx_nonzero_tsb_config_2,
495 VA = MY_USER_TEXT_VA003,
496 RA = MY_USER_TEXT_RA003,
497 PA = ra2pa(MY_USER_TEXT_RA003, 0),
498 TTE_Context = PCONTEXT,
499 TTE_V = 1,
500 TTE_NFO = 0,
501 TTE_L = 0,
502 TTE_Soft = 0,
503 TTE_IE = 0,
504 TTE_E = 0,
505 TTE_CP = 1,
506 TTE_CV = 0,
507 TTE_P = 0,
508 TTE_EP = 1,
509 TTE_W = 0,
510 TTE_SW1 = 0,
511 TTE_SW0 = 0,
512 TTE_RSVD1 = 0,
513 TTE_Size = 0,
514 }
515attr_text {
516NAME = .My_User_Section_4v003,
517 hypervisor
518}
519!! Chk that no err is seen on a write.
520!! Also no err is flagged on a diagnostic read.
521.text
522.global user_code_begin_003
523user_code_begin_003:
524 add %g0, 3, %l2
525 add %g0, 1, %l6
526 mov %l6, %l5
527 set SCAU_ERR_EN, %l3
528 or %l3, %l2, %l3
529 stxa %l3, [%g0]ASI_ERR_INJ
530 mov %g0, %i1
531 mov %g0, %l1
532 mov %g0, %i3
533 mov %g0, %i0
534 setx user_data_begin_003, %g1, %l4
535 set 0xffffff00, %g1
536
537ST1:
538 ldx [%l4 + %i1], %i2 !! data to be stored in scratchpad
539 stxa %i2, [%g0 + %i1]0x4F
540 cmp %l5, 0x80
541 be .+24
542 sllx %l5, 1, %l5
543 or %l5, %l6, %l2
544 and %l3, %g1, %l3
545 or %l3, %l2, %l3
546 stxa %l3, [%g0]ASI_ERR_INJ
547 add %i1, 8, %i1
548 cmp %i1, 0x38
549 ble ST1
550 nop
551
552ST1_1:
553 add %g0, 3, %l2
554 add %g0, 1, %l6
555 mov %l6, %l5
556 and %l3, %g1, %l3
557 or %l3, %l2, %l3
558 stxa %l3, [%g0]ASI_ERR_INJ
559
560
561 mov %g0, %i1
562 cmp %i3, 0x0
563 be ST1
564 add %i3, 1, %i3
565
566 cmp %i0, %l1
567 bne FAIL
568 mov %g0, %i0
569
570!! ALL scratch pad entries have errors. Do a diagnostic read from all entries
571!!and see that no error is flagged.
572 mov %g0, %i1
573 mov %g0, %l1
574 mov %g0, %i3
575 mov %g0, %i0
576
577LD1:
578 ldxa [%g0 + %i1]0x59, %o3 !! read the ecc
579 add %i1, 0x40, %g1
580 ldxa [%g1]0x59, %g3 !! read the data
581 brnz %i0, FAIL
582 mov %g0, %i0
583 cmp %i1, 0x30
584 ble LD1
585 add %i1, 8, %i1
586
587
588 setx user_code_begin_004, %g1, %g2
589 jmp %g2
590 nop
591
592FAIL:
593 EXIT_BAD
594 nop
595
596attr_data {
597 Name = .My_User_Section_4v003,
598 part_0_ctx_nonzero_tsb_config_1,
599 VA = MY_USER_DATA_VA003,
600 RA = MY_USER_DATA_RA003,
601 PA = ra2pa(MY_USER_DATA_RA003, 0),
602 TTE_Context = PCONTEXT,
603 TTE_V = 1,
604 TTE_NFO = 0,
605 TTE_L = 0,
606 TTE_Soft = 0,
607 TTE_IE = 0,
608 TTE_E = 0,
609 TTE_CP = 1,
610 TTE_CV = 0,
611 TTE_P = 0,
612 TTE_EP = 0,
613 TTE_W = 1,
614 TTE_SW1 = 0,
615 TTE_SW0 = 0,
616 TTE_RSVD1 = 0,
617 TTE_Size = 0,
618 }
619attr_data {
620NAME = .My_User_Section_4v003,
621 hypervisor
622}
623.data
624.global user_data_begin_003
625user_data_begin_003:
626.xword 0xca12fd23b5b1b1d6
627.xword 0x3428a18f797bd42a
628.xword 0x0d0630dd16ca2db5
629.xword 0x281c49cf3f51a83f
630.xword 0x8fc66b8940c55c03
631.xword 0xfd6f2a2b60aee94c
632.xword 0xec72846b0261894e
633.xword 0xf1bd6c544120f822
634
635.xword 0xefc4e1f1b35853fc
636.xword 0xe790a0c1689eb683
637.xword 0x88c650f170c41710
638.xword 0x614126cf9fc8dca3
639.xword 0x4be2f60911e465ce
640.xword 0x4e22352a0c29c95c
641.xword 0xf18efdf01ce79e24
642.xword 0x294aaa56144d7cf1
643
644 .word 0xdfaa
645 .word 0x39a9
646 .word 0xb967
647 .word 0x280c
648
649
650SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004
651attr_text {
652 Name = .My_User_Section_4v004,
653 part_0_ctx_nonzero_tsb_config_2,
654 VA = MY_USER_TEXT_VA004,
655 RA = MY_USER_TEXT_RA004,
656 PA = ra2pa(MY_USER_TEXT_RA004, 0),
657 TTE_Context = PCONTEXT,
658 TTE_V = 1,
659 TTE_NFO = 0,
660 TTE_L = 0,
661 TTE_Soft = 0,
662 TTE_IE = 0,
663 TTE_E = 0,
664 TTE_CP = 1,
665 TTE_CV = 0,
666 TTE_P = 0,
667 TTE_EP = 1,
668 TTE_W = 0,
669 TTE_SW1 = 0,
670 TTE_SW0 = 0,
671 TTE_RSVD1 = 0,
672 TTE_Size = 0,
673 }
674attr_text {
675NAME = .My_User_Section_4v004,
676 hypervisor
677}
678
679!! check if cerer.scaU is clear or ceter.pscce is clear then the error is
680!! not detected and the sfsr is not updated.
681!! When we enter this testcase all the scratchpad entries have errors.
682!! Errors are put by the stxa's in the loop above.
683
684.text
685.global user_code_begin_004
686user_code_begin_004:
687 mov %g0, %i1
688 !! clear CERER.SCAU
689 add %g0, CERER_VA, %g3
690 stxa %g0, [%g3]ASI_CERER
691 add %g0, SFSR_VA, %g1
692 add %g0, 0x1000, %o1
693
694
695LD4:
696 ldx [%l4 + %i1], %i2
697 ldxa [%g0 + %i1]0x4F, %i3
698 cmp %i3, %i2
699 bne FAIL
700 ldxa [%g1]ASI_DSFSR, %o1 !! read the DSFSR
701 brnz %o1, FAIL
702 brnz %i0, FAIL
703 cmp %i1, 0x30
704 ble LD4
705 add %i1, 8, %i1
706
707
708!! Now set CERER.SCAU, but clear CETER.PSCCE. CHk that no error again.
709 setx 0x20000000, %g4, %o2 !! enable scac errs
710 add %g0, CERER_VA, %g3 !!g3 has cerer va
711
712 stxa %o2, [%g3]ASI_CERER
713
714 add %g0, CETER_VA, %g3
715 stxa %g0, [%g3]ASI_CETER
716
717 mov %g0, %i1
718 add %g0, 0x1000, %o1
719
720LD5:
721 ldx [%l4 + %i1], %i2
722 ldxa [%g0 + %i1]0x4F, %i3
723 cmp %i3, %i2
724 bne FAIL
725 ldxa [%g1]ASI_DSFSR, %o1 !! read the DSFSR
726 brnz %o1, FAIL
727 brnz %i0, FAIL
728 cmp %i1, 0x30
729 ble LD5
730 add %i1, 8, %i1
731
732!! Now set both CERER.SCAC, and CETER.PSCCE. Chk that error comes.
733 !! set CETER.PSCCE
734 setx CETER_PSCCE, %l0, %o2
735 add %g0, CETER_VA, %g3
736 stxa %o2, [%g3]ASI_CETER
737
738 mov %g0, %i1
739 add %g0, 1, %l1
740 add %g0, 3, %l2
741 add %g0, 1, %l6
742 mov %l6, %l5
743
744LD5_1:
745 ldx [%l4 + %i1], %i2
746 ldxa [%g0 + %i1]0x4F, %i3
747 cmp %i3, %i2
748 bne FAIL
749 brz %i0, FAIL
750 mov %g0, %i0
751 sllx %l5, 1, %l5
752 or %l5, %l6, %l2
753 cmp %i1, 0x30
754 ble LD5_1
755 add %i1, 8, %i1
756
757
758!! All errors shd be cleared now and no errors shd be seen
759
760 mov %g0, %i1
761 mov %g0, %l1
762
763LD6:
764 ldx [%l4 + %i1], %i2
765 ldxa [%g0 + %i1]0x4F, %i3
766 cmp %i3, %i2
767 bne FAIL
768 brnz %i0, FAIL
769 mov %g0, %i0
770 cmp %i1, 0x30
771 ble LD6
772 add %i1, 8, %i1
773
774
775 setx user_code_begin_005, %g1, %g2
776 jmp %g2
777 nop
778
779FAIL: EXIT_BAD
780 nop
781
782attr_data {
783 Name = .My_User_Section_4v004,
784 part_0_ctx_nonzero_tsb_config_1,
785 VA = MY_USER_DATA_VA004,
786 RA = MY_USER_DATA_RA004,
787 PA = ra2pa(MY_USER_DATA_RA004, 0),
788 TTE_Context = PCONTEXT,
789 TTE_V = 1,
790 TTE_NFO = 0,
791 TTE_L = 0,
792 TTE_Soft = 0,
793 TTE_IE = 0,
794 TTE_E = 0,
795 TTE_CP = 1,
796 TTE_CV = 0,
797 TTE_P = 0,
798 TTE_EP = 0,
799 TTE_W = 1,
800 TTE_SW1 = 0,
801 TTE_SW0 = 0,
802 TTE_RSVD1 = 0,
803 TTE_Size = 0,
804 }
805attr_data {
806NAME = .My_User_Section_4v004,
807 hypervisor
808}
809.data
810.global user_data_begin_004
811user_data_begin_004:
812.xword 0xefc4e1f1b35853fc
813.xword 0xe790a0c1689eb683
814.xword 0x88c650f170c41710
815.xword 0x614126cf9fc8dca3
816.xword 0x4be2f60911e465ce
817.xword 0x4e22352a0c29c95c
818.xword 0xf18efdf01ce79e24
819.xword 0x294aaa56144d7cf1
820.xword 0xe0066361bd9fcb86
821.xword 0xea22901c101f6f52
822.xword 0x806faa2171350467
823.xword 0xff54f2cd06a0d342
824.xword 0x566bff718cddb905
825.xword 0x6d367bc4d165d37a
826.xword 0x5efc42b18f920522
827.xword 0x584c92dec4bc66de
828 .word 0x4069
829 .word 0x41ed
830 .word 0x14c07
831 .word 0x29de
832
833
834SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005
835attr_text {
836 Name = .My_User_Section_4v005,
837 part_0_ctx_nonzero_tsb_config_3,
838 VA = MY_USER_TEXT_VA005,
839 RA = MY_USER_TEXT_RA005,
840 PA = ra2pa(MY_USER_TEXT_RA005, 0),
841 TTE_Context = PCONTEXT,
842 TTE_V = 1,
843 TTE_NFO = 0,
844 TTE_L = 0,
845 TTE_Soft = 0,
846 TTE_IE = 0,
847 TTE_E = 0,
848 TTE_CP = 1,
849 TTE_CV = 0,
850 TTE_P = 0,
851 TTE_EP = 1,
852 TTE_W = 0,
853 TTE_SW1 = 0,
854 TTE_SW0 = 0,
855 TTE_RSVD1 = 0,
856 TTE_Size = 0,
857 }
858attr_text {
859NAME = .My_User_Section_4v005,
860 hypervisor
861}
862.text
863.global user_code_begin_005
864user_code_begin_005:
865!!Now again inject errors in all the entries, but set cerer.scac bit.
866!! Chk the behavior.
867 add %g0, 0x5, %l2
868 set SCAU_ERR_EN, %l3
869 or %l3, %l2, %l3
870 stxa %l3, [%g0]ASI_ERR_INJ
871 set 0xffffff00, %g1
872
873!! Set cerer.scac bit
874 setx 0x40000000, %g1, %o2 !! enable scac errs
875 add %g0, CERER_VA, %g3 !!g3 has cerer va
876 stxa %o2, [%g3]ASI_CERER
877
878 mov %g0, %i1
879 setx user_data_begin_005, %g1, %l4
880ST5:
881 ldx [%l4 + %i1], %i2 !! data to be stored in scratchpad
882 stxa %i2, [%g0 + %i1]0x4F
883 add %i1, 8, %i1
884 cmp %i1, 0x38
885 ble ST5
886 nop
887
888 mov %g0, %l1
889 mov %g0, %i1
890LD7:
891 ldx [%l4 + %i1], %i2
892 ldxa [%g0 + %i1]0x4F, %i3
893 cmp %i3, %i2
894 bne FAIL
895 brnz %i0, FAIL
896 cmp %i1, 0x30
897 ble LD7
898 add %i1, 8, %i1
899
900
901!! Now set CERER.SCAU, and see that the error is flagged.
902!! Set cerer.scac bit
903 setx 0x20000000, %g1, %o2 !! enable scac errs
904 add %g0, CERER_VA, %g3 !!g3 has cerer va
905 stxa %o2, [%g3]ASI_CERER
906
907 add %g0, 1, %l1
908 mov %g0, %i1
909LD8:
910 ldx [%l4 + %i1], %i2
911 ldxa [%g0 + %i1]0x4F, %i3
912 cmp %i3, %i2
913 bne FAIL
914 cmp %i0, %l1
915 bne FAIL
916 mov %g0, %i0
917 cmp %i1, 0x30
918 ble LD8
919 add %i1, 8, %i1
920
921 EXIT_GOOD
922 nop
923
924FAIL: EXIT_BAD
925 nop
926
927attr_data {
928 Name = .My_User_Section_4v005,
929 part_0_ctx_nonzero_tsb_config_1,
930 VA = MY_USER_DATA_VA005,
931 RA = MY_USER_DATA_RA005,
932 PA = ra2pa(MY_USER_DATA_RA005, 0),
933 TTE_Context = PCONTEXT,
934 TTE_V = 1,
935 TTE_NFO = 0,
936 TTE_L = 0,
937 TTE_Soft = 0,
938 TTE_IE = 0,
939 TTE_E = 0,
940 TTE_CP = 1,
941 TTE_CV = 0,
942 TTE_P = 0,
943 TTE_EP = 0,
944 TTE_W = 1,
945 TTE_SW1 = 0,
946 TTE_SW0 = 0,
947 TTE_RSVD1 = 0,
948 TTE_Size = 0,
949 }
950attr_data {
951NAME = .My_User_Section_4v005,
952 hypervisor
953}
954.data
955.global user_data_begin_005
956user_data_begin_005:
957.xword 0xefc4e1f1b35853fc
958.xword 0xe790a0c1689eb683
959.xword 0x88c650f170c41710
960.xword 0x614126cf9fc8dca3
961.xword 0x4be2f60911e465ce
962.xword 0x4e22352a0c29c95c
963.xword 0xf18efdf01ce79e24
964.xword 0x294aaa56144d7cf1
965.xword 0xe0066361bd9fcb86
966.xword 0xea22901c101f6f52
967.xword 0x806faa2171350467
968.xword 0xff54f2cd06a0d342
969.xword 0x566bff718cddb905
970.xword 0x6d367bc4d165d37a
971.xword 0x5efc42b18f920522
972.xword 0x4be2f60911e465ce
973.xword 0x4e22352a0c29c95c
974.xword 0xf18efdf01ce79e24
975 .word 0xf93b
976 .word 0xe34b
977 .word 0x127e6
978 .word 0xd915
979
980.global INT_PROC_ERR_HANDLER
981
982SECTION .HTRAPS
983.text
984
985INT_PROC_ERR_HANDLER:
986
987CHK_ERR_TYP:
988 setx ecc_syndrome_table, %g1, %g2
989 add %g0, SFSR_VA, %g1
990 ldxa [%g1]ASI_DSFSR, %o1 !! read the DSFSR
991 stxa %g0, [%g1]ASI_DSFSR !! clear the dsfsr
992 and %o1, 0xF, %o1
993 cmp %o1, SCAU_ERR_TYPE
994 bne FAIL
995CHK_INDEX:
996 add %g0, SFAR_VA, %g1
997 ldxa [%g1]ASI_SFAR, %o1 !! read the DSFAR
998 srl %i1, 3, %o3 !! expected value of index
999 and %o1, 0x7, %o2
1000 cmp %o2, %o3
1001 bne FAIL
1002
1003!!diagnostic read the bad data and ecc
1004CHK_SYNDROME:
1005 srl %o1, 3, %o2 !! o2 has the bad syndrome
1006 and %o2, 0x80, %o3 !! look at the overall parity. Shd be 1 for correctable errors.
1007 brnz %o3, FAIL
1008 and %o2, 0x7F, %o3
1009 brz %o3, FAIL !! syndrome shdn't be 0 for UE.
1010
1011 ldxa [%g0 + %i1]0x59, %o3 !! read the ecc
1012
1013 add %i1, 0x40, %g1
1014 ldxa [%g1]0x59, %g3 !! read the data
1015 cmp %i2, %g3 !! i2 has the expceted data
1016 bne FAIL
1017
1018TURN_OFF_ERR_INJ:
1019 !!turn off error
1020 stxa %g0, [%g0]ASI_ERR_INJ
1021 !! do a normal wr to the scratchpad entry to clear the err
1022 cmp %o4, 0x20
1023 be,a .+12
1024 stxa %g3, [%i1]0x20
1025 stxa %g3, [%i1]0x4f
1026
1027CHECK_ERR_INJECT:
1028 !! diag read the ecc
1029 ldxa [%g0 + %i1]0x59, %g4 !! read the ecc
1030 xor %g4, %l2, %g5
1031 cmp %g5, %o3
1032 bne FAIL
1033
1034ENABLE_ERR_INJ:
1035
1036 !! enable error injection
1037 setx SCAU_ERR_EN, %l0, %g1
1038 or %g1, %l2, %g1 ! set mask bit 0 to 1
1039 stxa %g1, [%g0]ASI_ERR_INJ
1040 add %g0, 1, %i0
1041 retry
1042
1043PASS: EXIT_GOOD
1044 nop
1045
1046FAIL: EXIT_BAD
1047 nop
1048
1049.data
1050.align 64
1051ecc_syndrome_table:
1052.xword 0 !! no err
1053.xword 0x01 !! C0
1054.xword 0x02 !! C1
1055.xword 0x04 !! C2
1056.xword 0x08 !! C3
1057.xword 0x10 !! C4
1058.xword 0x20 !! C5
1059.xword 0x40 !! C6
1060.xword 0x4B !! C7
1061