Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / lsu / diag / err_sbdpu_diag.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: err_sbdpu_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
76#define MY_USER_DATA_VA000 0x6a000000
77#define MY_USER_DATA_RA000 0x6b000000
78#define MY_USER_DATA_PA000 0x106b000000
79#define MY_USER_DATA_VA001 0x6a010000
80#define MY_USER_DATA_RA001 0x6b010000
81#define MY_USER_DATA_PA001 0x106b010000
82#define MY_nc_DATA_RA001 0xb06b0a0000
83#define MY_nc_DATA_PA001 0xc06b0a0000
84#define MY_USER_DATA_VA002 0x6a020000
85#define MY_USER_DATA_RA002 0x6b020000
86#define MY_USER_DATA_PA002 0x106b020000
87#define MY_USER_DATA_VA003 0x6a030000
88#define MY_USER_DATA_RA003 0x6b030000
89#define MY_USER_DATA_PA003 0x106b030000
90#define MY_USER_DATA_VA004 0x6a040000
91#define MY_USER_DATA_RA004 0x6b040000
92#define MY_USER_DATA_PA004 0x106b040000
93#define MY_USER_DATA_VA005 0x6a050000
94#define MY_USER_DATA_RA005 0x6b050000
95#define MY_USER_DATA_PA005 0x106b050000
96#define MY_USER_DATA_VA006 0x6a060000
97#define MY_USER_DATA_RA006 0x6b060000
98#define MY_USER_DATA_PA006 0x106b060000
99#define MY_USER_DATA_VA007 0x6a070000
100#define MY_USER_DATA_RA007 0x6b070000
101#define MY_USER_DATA_PA007 0x106b070000
102#define MY_USER_DATA_VA008 0x6a080000
103#define MY_USER_DATA_RA008 0x6b080000
104#define MY_USER_DATA_PA008 0x106b080000
105#define MY_USER_DATA_VA009 0x6a090000
106#define MY_USER_DATA_RA009 0x6b090000
107#define MY_USER_DATA_PA009 0x106b090000
108
109#define IMDU_ERR_EN 0xa0000000
110#define IMTU_ERR_EN 0x90000000
111#define DMDU_ERR_EN 0x88000000
112#define DMTU_ERR_EN 0x84000000
113#define IRCU_ERR_EN 0x82000000
114#define FRCU_ERR_EN 0x81000000
115#define SCAU_ERR_EN 0x80800000
116#define TCCU_ERR_EN 0x80400000
117#define TSAU_ERR_EN 0x80200000
118#define MRAU_ERR_EN 0x80100000
119#define STAU_ERR_EN 0x80080000
120#define STDU_ERR_EN 0x80020000
121
122#define ASI_DESR 0x4c
123#define ASI_DFESR 0x4c
124#define DFESR_VA 0x8
125#define ASI_DSFSR 0x58
126#define ASI_ISFSR 0x50
127#define SFSR_VA 0x18
128#define ASI_SFAR 0x58
129#define SFAR_VA 0x20
130#define ASI_ERR_INJ 0x43
131#define ASI_CETER 0x4C
132#define CETER_VA 0x18
133#define ASI_CERER 0x4C
134#define CERER_VA 0x10
135
136#define CERER_SBDPC 0x400
137#define CETER_DHCCE 0x1000000000000000
138#define CETER_DE 0x2000000000000000
139#define CETER_PSCCE 0x4000000000000000
140#define DCVP_ERR_TYPE 0x5
141#define SBDPC_ERR_TYPE 0x5
142#define SBDPU_ERR_TYPE 0x6
143#define HPRIV 0x5
144#define PRIV 0x3
145#define USER 0x0
146
147#define MAIN_PAGE_HV_ALSO
148#define H_HT0_Mem_Address_Not_Aligned_0x34
149#define My_HT0_Mem_Address_Not_Aligned_0x34 \
150 ba MEM_ADDR_HANDLER; \
151 nop;nop;nop;nop;nop;nop;nop
152
153
154#define H_HT0_Data_Access_MMU_Error_0x72
155#define SUN_H_HT0_Data_Access_MMU_Error_0x72 \
156 ba DATA_ACCESS_ERROR_HANDLER; \
157 nop;nop;nop;nop;nop;nop;nop
158
159#define H_HT0_Instruction_Access_MMU_Error_0x71
160#define SUN_H_HT0_Instruction_Access_MMU_Error_0x71 \
161 ba INST_ACCESS_ERROR_HANDLER; \
162 nop;nop;nop;nop;nop;nop;nop
163
164#define H_HT0_Hw_Corrected_Error_0x63
165#define SUN_H_HT0_Hw_Corrected_Error_0x63 \
166 ba HW_CORR_ERROR_HANDLER; \
167 nop;nop;nop;nop;nop;nop;nop
168
169#define H_HT0_DAE_invalid_asi_0x14
170#define SUN_H_HT0_DAE_invalid_asi_0x14 \
171 ba INVALID_ASI_HANDLER; \
172 nop;nop;nop;nop;nop;nop;nop
173
174!! turn off cerer.dcvp
175#define H_HT0_DAE_nc_page_0x16
176#define SUN_H_HT0_DAE_nc_page_0x16 \
177 add %g0, CERER_VA, %g3;\
178 stxa %g0, [%g3]ASI_CERER;\
179 done;nop;nop;nop;nop;nop
180
181!! turn on cerer.dcvp
182#define H_HT0_Privileged_Action_0x37
183#define My_HT0_Privileged_Action_0x37 \
184 set 0x04000, %g1; \
185 add %g0, CERER_VA, %g3;\
186 stxa %g1, [%g3]ASI_CERER;\
187 done;nop;nop;nop;nop
188
189!! turn on/off ceter.de
190!! i4 =1 . turn on ceter.de
191!! l4 =0 . turn off ceter.e
192#define H_HT0_Lddf_Mem_Address_Not_Aligned_0x35
193#define My_HT0_Lddf_Mem_Address_Not_Aligned_0x35 \
194 setx CETER_DE, %g2, %g1;\
195 add %g0, CETER_VA, %g3; \
196 cmp %i4, 1; \
197 be,a .+12; \
198 stxa %g1, [%g3]ASI_CETER; \
199 stxa %g0, [%g3]ASI_CETER; \
200 done
201
202#define H_HT0_Stdf_Mem_Address_Not_Aligned_0x36
203#define My_HT0_Stdf_Mem_Address_Not_Aligned_0x36 \
204 set STDU_ERR_EN, %g1;\
205 or %g1, %l3, %g1 ;\
206 cmp %i3, 1; \
207 be,a .+12; \
208 stxa %g1, [%g0]ASI_ERR_INJ ;\
209 stxa %g0, [%g0]ASI_ERR_INJ ;\
210 done
211
212#define H_HT0_Sw_Recoverable_Error_0x40
213#define SUN_H_HT0_Sw_Recoverable_Error_0x40 \
214 ba RECOVERABLE_ERR_HANDLER; \
215 nop;nop;nop;nop;nop;nop;nop
216
217
218#include "hboot.s"
219
220/************************************************************************
221 Test case:
222 ************************************************************************/
223
224.text
225.global main
226
227main: /* test begin */
228 ta T_CHANGE_HPRIV
229
230 !! set CERER.SBDPU
231 set 0x0000200, %o2 !! enable sbdpu errs
232 add %g0, CERER_VA, %g3 !!g3 has cerer va
233
234 stxa %o2, [%g3]ASI_CERER
235
236 !! set CETER.DE
237 setx CETER_DE, %l0, %o2
238 add %g0, CETER_VA, %g3
239 stxa %o2, [%g3]ASI_CETER
240 ta T_CHANGE_NONHPRIV
241
242 setx user_code_begin_000, %g2, %g3
243 !setx user_code_begin_001, %g2, %g3
244 jmp %g3
245 nop
246 EXIT_BAD
247
248
249/************************************************************************
250 Test case data start
251 ************************************************************************/
252.data
253.global user_data_start
254user_data_start:
255.word 0x12345678
256.word 0x9a9b9c9d
257.word 0x00000000
258.word 0xffffffff
259
260!#***********************************************************************
261
262SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000
263attr_text {
264 Name = .My_User_Section_4v000,
265 part_0_ctx_nonzero_tsb_config_2,
266 VA = MY_USER_TEXT_VA000,
267 RA = MY_USER_TEXT_RA000,
268 PA = ra2pa(MY_USER_TEXT_RA000, 0),
269 TTE_Context = PCONTEXT,
270 TTE_V = 1,
271 TTE_NFO = 0,
272 TTE_L = 0,
273 TTE_Soft = 0,
274 TTE_IE = 0,
275 TTE_E = 0,
276 TTE_CP = 1,
277 TTE_CV = 0,
278 TTE_P = 0,
279 TTE_EP = 1,
280 TTE_W = 0,
281 TTE_SW1 = 0,
282 TTE_SW0 = 0,
283 TTE_RSVD1 = 0,
284 TTE_Size = 0,
285 }
286attr_text {
287NAME = .My_User_Section_4v000,
288 hypervisor
289}
290!! STb has only 7 bits of ecc. So, Flipping bit 7 of
291!! the ecc mask has no effect and is not changed.
292!! Try all possible 2 bit combinations of errors in ecc bits.
293!! combinations of bits tried:70 (70 means bits 7 and 0 are asserted together)
294!! With bit 0 = 1: 60, 50, 40, 30, 20, 10 => 7 cases
295!! With bit 1 = 1: 61, 51, 41, 31, 21 => 6 cases
296!! With bit 2 = 1: 62, 52, 42, 32 => 5 cases
297!! With bit 3 = 1: 63, 53, 43 => 4 cases
298!! With bit 4 = 1: 64, 54 => 3 cases
299!! With bit 5 = 1: 65 => 2 cases
300
301.text
302.global user_code_begin_000
303user_code_begin_000:
304 mov %g0, %l2 !! stb expected index is in l2
305 add %g0, 1, %i1
306 add %g0, 1, %i2 !! mask
307 sllx %i1, 1, %i1
308 or %i1, %i2, %l3
309
310 mov %g0, %o6 !! to chk ecc or not in trap hanlder
311 mov %g0, %i0
312 add %g0, 1, %l1
313 mov %g0, %o7 !! To chk ME bit in the hanlder or not
314 add %g0, 1, %i3 !! enable err_injection
315 add %g0, USER, %i6
316 add %g0, 0xff, %l7 ! byte mask to compare on diag read
317 std %d0, [%l4 + 0x4] !stdf_not_aligned
318 ldxa [%l4]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
319
320 setx user_data_begin_000, %g1, %l4
321 setx MY_USER_DATA_PA000, %g2, %l5 !! expected PA
322 ldx [%l4], %o4
323
324LOOP0_000:
325 ldx [%l4 +0x8], %l6
326 xor %o4, %l6, %o5
327 add %l4, 0x10, %l4
328 add %l5, 0x10, %l5
329 stx %o5, [%l4] !! UE
330
331 ldx [%l4 + 0x20], %o4
332 add %g0, 1, %l1
333 cmp %l1, %i0
334 bne FAIL ! chk trap is taken by the stx
335 mov %g0, %i0
336 cmp %l2, 0x6
337 ble LOOP0_000
338 add %l2, 1, %l2
339
340!! This loop is executed when changing from 10 -> 20
341
342LOOP1_000:
343 sllx %i1, 1, %i1
344 or %i1, %i2, %l3
345 cmp %i1, 0x080
346 be LOOP2_000
347 nop
348 std %d0, [%l4 + 0x4] !stdf_not_aligned to change the mask
349 ldxa [%l4]0xE4, %g1 !! invalid asi trap to get the stb ptr.
350 ba LOOP0_000
351 mov %g0, %l2 !! stb expected index is in l2
352
353!! This loop is executed when changing from bit 0 being 1 to bit 1 being 1.
354
355LOOP2_000:
356 mov %g0, %i1
357 sllx %i2, 1, %i2
358 mov %i2, %i1
359 sllx %i1, 1, %i1
360 or %i1, %i2, %l3
361 cmp %i2, 0x40
362 be NEXT_CASE
363 nop
364 std %d0, [%l4 + 0x4] !stdf_not_aligned to change the mask
365 ldxa [%l4]0xE4, %g1 !! invalid asi trap to get the stb ptr.
366 ba LOOP0_000
367 mov %g0, %l2 !! stb expected index is in l2
368
369NEXT_CASE:
370
371 setx user_code_begin_001, %g2, %g3
372 jmp %g3
373 mov %g0, %i0
374
375FAIL:
376 EXIT_BAD
377
378attr_data {
379 Name = .My_User_Section_4v000,
380 part_0_ctx_nonzero_tsb_config_1,
381 VA = MY_USER_DATA_VA000,
382 RA = MY_USER_DATA_RA000,
383 PA = ra2pa(MY_USER_DATA_RA000, 0),
384 TTE_Context = PCONTEXT,
385 TTE_V = 1,
386 TTE_NFO = 0,
387 TTE_L = 0,
388 TTE_Soft = 0,
389 TTE_IE = 0,
390 TTE_E = 0,
391 TTE_CP = 1,
392 TTE_CV = 0,
393 TTE_P = 0,
394 TTE_EP = 0,
395 TTE_W = 1,
396 TTE_SW1 = 0,
397 TTE_SW0 = 0,
398 TTE_RSVD1 = 0,
399 TTE_Size = 0,
400 }
401attr_data {
402NAME = .My_User_Section_4v000,
403 hypervisor
404}
405.data
406.global user_data_begin_000
407user_data_begin_000:
408.xword 0xe0066361bd9fcb86
409.xword 0xea22901c101f6f52
410.xword 0x806faa2171350467
411.xword 0xff54f2cd06a0d342
412.xword 0x566bff718cddb905
413.xword 0x6d367bc4d165d37a
414.xword 0x5efc42b18f920522
415.xword 0x584c92dec4bc66de
416.xword 0xed9efe0d05896ce1
417.xword 0xf9d45b94972117c8
418.xword 0xd0c647618c9e43f3
419.xword 0xfe04ead3b77c2d11
420.xword 0x06d2d7f29e76397c
421.xword 0x234c366110eddd38
422.xword 0xa80656d4288044bc
423.xword 0x12e763fbd8e2970d
424.xword 0x7320217fab3eae0e
425.xword 0x38683cebedefb5af
426.xword 0xefc4e1f1b35853fc
427.xword 0xe790a0c1689eb683
428.xword 0x88c650f170c41710
429.xword 0x614126cf9fc8dca3
430.xword 0x4be2f60911e465ce
431.xword 0x4e22352a0c29c95c
432.xword 0xf18efdf01ce79e24
433.xword 0x294aaa56144d7cf1
434.xword 0xe0066361bd9fcb86
435.xword 0xea22901c101f6f52
436.xword 0x806faa2171350467
437.xword 0xff54f2cd06a0d342
438.xword 0x566bff718cddb905
439.xword 0x6d367bc4d165d37a
440.xword 0x5efc42b18f920522
441.xword 0x584c92dec4bc66de
442.xword 0xefc4e1f1b35853fc
443.xword 0xe790a0c1689eb683
444.xword 0x88c650f170c41710
445.xword 0x614126cf9fc8dca3
446.xword 0x5efc42b18f920522
447.xword 0x584c92dec4bc66de
448.xword 0xed9efe0d05896ce1
449.xword 0xf9d45b94972117c8
450.xword 0xd0c647618c9e43f3
451.xword 0xfe04ead3b77c2d11
452.xword 0x06d2d7f29e76397c
453.xword 0x234c366110eddd38
454.xword 0xa80656d4288044bc
455.xword 0x12e763fbd8e2970d
456.xword 0x7320217fab3eae0e
457.xword 0x38683cebedefb5af
458.xword 0xefc4e1f1b35853fc
459.xword 0xe790a0c1689eb683
460.xword 0x88c650f170c41710
461
462
463SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001
464attr_text {
465 Name = .My_User_Section_4v001,
466 part_0_ctx_nonzero_tsb_config_2,
467 VA = MY_USER_TEXT_VA001,
468 RA = MY_USER_TEXT_RA001,
469 PA = ra2pa(MY_USER_TEXT_RA001, 0),
470 TTE_Context = PCONTEXT,
471 TTE_V = 1,
472 TTE_NFO = 0,
473 TTE_L = 0,
474 TTE_Soft = 0,
475 TTE_IE = 0,
476 TTE_E = 0,
477 TTE_CP = 1,
478 TTE_CV = 0,
479 TTE_P = 0,
480 TTE_EP = 1,
481 TTE_W = 0,
482 TTE_SW1 = 0,
483 TTE_SW0 = 0,
484 TTE_RSVD1 = 0,
485 TTE_Size = 0,
486 }
487attr_text {
488NAME = .My_User_Section_4v001,
489 hypervisor
490}
491! Check, if CETER.DE is clear then no trap is taken.
492! After that once CETER.DE is set, trap will be taken.
493
494.text
495.global user_code_begin_001
496user_code_begin_001:
497 mov %g0, %l2 !! stb expected index is in l2
498 add %g0, 0x30, %l3 !! double bit err
499
500 mov %g0, %i0
501 mov %g0, %o6 !! not to chk ecc in the handler
502 mov %g0, %l1
503 add %g0, 1, %o7 !! ME bit will be set in this case
504 add %g0, 0, %i3 !! Disable err_injection
505 std %d0, [%l4 + 0x4] !stdf_not_aligned , disable err_injection
506 !clear ceter.DE
507 mov %g0, %i4 !! Turn off ceter.de
508 ldd [%l4 + 0x4], %d0 !lddf_not_aligned , turn off ceter.de
509 add %g0, 0xff, %l7 ! byte mask to compare on diag read
510
511 setx user_data_begin_001, %g1, %l4
512 setx MY_USER_DATA_PA001, %g2, %l5 !! expected PA
513 ldx [%l4], %o4
514
515 add %g0, 1, %i3 !! Enable err_injection
516 std %d0, [%l4 + 0x4]
517 ldxa [%l4]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
518
519CASE1_000:
520 ldx [%l4 +0x8], %l6
521 xor %o4, %l6, %o5
522 add %l4, 0x10, %l4
523 add %l5, 0x10, %l5
524 stx %o5, [%l4] !! UE
525 stx %l6, [%l4 + 8] !! UE
526 stx %o4, [%l4 + 0x10] !! UE
527 stx %l4, [%l4 + 0x18] !! UE
528 std %d0, [%l4 + 0x20] !! UE
529 stx %g2, [%l4 + 0x28] !! UE Do only 6 stores because the lddf and stdf trap handlers
530 !!have one store each. In the recoverabel_err_handler contents
531 !!of stb are chked and if more then 6 stores are added the
532 !! we get mismatches in the handler.
533
534 ldx [%l4 + 0x20], %o4
535 ldx [%l4 + 0x30], %o4
536 ldx [%l4 + 0x40], %o4
537 ldx [%l4 + 0x50], %o4
538 ldx [%l4 + 0x60], %o4
539 ldx [%l4 + 0x70], %o4
540 ldx [%l4 + 0x80], %o4
541 cmp %l1, %i0
542 bne FAIL ! chk no trap shd be taken
543 nop
544
545!! now enable ceter.de. Err trap shd be taken, once de is set.
546!! Turn off error injcetion before setting ceter.de. This will
547!! ensure that the store is not dropped.
548
549 mov %g0, %i3 !! Disable err_injection
550 std %d0, [%l4 + 0x4]
551 add %g0, 1, %i4 !! Turn on ceter.de
552 ldd [%l4 + 0x4], %d0 !lddf_not_aligned , turn on ceter.de
553
554! Do a bunch of lds. Trap shd be taken in the M stage of next inst.
555! read all the stored data to ensure it matches Riesling.
556! err_injcet shd not cause data mismatch.
557 add %g0, 1, %l1
558 ldx [%l4], %o4
559 ldx [%l4 + 0x8], %o4
560 ldx [%l4 + 0x10], %o4
561 ldx [%l4 + 0x18], %o4
562 ldx [%l4 + 0x20], %o4
563 ldx [%l4 + 0x28], %o4
564 ldx [%l4 + 0x30], %o4
565 ldx [%l4 + 0x38], %o4
566
567 cmp %l1, %i0
568 bne FAIL ! chk trap shd be taken
569 nop
570
571
572 setx user_code_begin_002, %g2, %g3
573 jmp %g3
574 mov %g0, %i0
575
576FAIL:
577 EXIT_BAD
578 nop
579
580attr_data {
581 Name = .My_User_Section_4v001,
582 part_0_ctx_nonzero_tsb_config_1,
583 VA = MY_USER_DATA_VA001,
584 RA = MY_USER_DATA_RA001,
585 PA = ra2pa(MY_USER_DATA_RA001, 0),
586 TTE_Context = PCONTEXT,
587 TTE_V = 1,
588 TTE_NFO = 0,
589 TTE_L = 0,
590 TTE_Soft = 0,
591 TTE_IE = 0,
592 TTE_E = 0,
593 TTE_CP = 1,
594 TTE_CV = 1,
595 TTE_P = 0,
596 TTE_EP = 0,
597 TTE_W = 1,
598 TTE_SW1 = 0,
599 TTE_SW0 = 0,
600 TTE_RSVD1 = 0,
601 TTE_Size = 0,
602 }
603attr_data {
604NAME = .My_User_Section_4v001,
605 hypervisor
606}
607.data
608.global user_data_begin_001
609user_data_begin_001:
610.xword 0xfa474991f13e3460
611.xword 0x1446415baecf3609
612.xword 0xe3215e901114ad4b
613.xword 0xf91d897e92d1ee95
614.xword 0x33458a48805d888b
615.xword 0x7f5a3ddb7d8e3c23
616.xword 0xaa80311fb1e17e79
617.xword 0x0f59d0e1ac35dbd4
618.xword 0x057c893bc8fc1e7e
619.xword 0xcfb9e3a29c786cc0
620.xword 0x7257becb4609969e
621.xword 0x4b1896677e83abae
622.xword 0xc2e35a285574f037
623.xword 0x2e42eb5835020e2e
624.xword 0x90775b99929f43cc
625.xword 0xd0c647618c9e43f3
626.xword 0xfe04ead3b77c2d11
627.xword 0x06d2d7f29e76397c
628.xword 0x234c366110eddd38
629.xword 0xa80656d4288044bc
630.xword 0x12e763fbd8e2970d
631.xword 0x7320217fab3eae0e
632.xword 0x38683cebedefb5af
633.xword 0xefc4e1f1b35853fc
634.xword 0xe790a0c1689eb683
635.xword 0x9fac4ae85a4ecd4e
636
637 .word 0x10731
638 .word 0xd027
639 .word 0x1350e
640 .word 0x10e9d
641
642
643SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002
644attr_text {
645 Name = .My_User_Section_4v002,
646 part_0_ctx_nonzero_tsb_config_2,
647 VA = MY_USER_TEXT_VA002,
648 RA = MY_USER_TEXT_RA002,
649 PA = ra2pa(MY_USER_TEXT_RA002, 0),
650 TTE_Context = PCONTEXT,
651 TTE_V = 1,
652 TTE_NFO = 0,
653 TTE_L = 0,
654 TTE_Soft = 0,
655 TTE_IE = 0,
656 TTE_E = 0,
657 TTE_CP = 1,
658 TTE_CV = 0,
659 TTE_P = 0,
660 TTE_EP = 1,
661 TTE_W = 0,
662 TTE_SW1 = 0,
663 TTE_SW0 = 0,
664 TTE_RSVD1 = 0,
665 TTE_Size = 0,
666 }
667attr_text {
668NAME = .My_User_Section_4v002,
669 hypervisor
670}
671
672!! Chk that if DESR.F is set due to a h/w correctable error and a
673!! sw_recoverable_err occured, then the DESR is overwritten with
674!! sw_recoverable_err info.
675!! turn off all bits in CETER.
676! Inject single bit err in an STB entry using ecc_inject
677! Now inject double bit err in an STB entry using ecc_inject
678! Trun on ceter.de and ceter.dhcce. Sw_recoverable_err trap is taken.
679
680.text
681.global user_code_begin_002
682user_code_begin_002:
683 ta T_CHANGE_HPRIV
684
685 !! set CERER.SBDPU and CERER.SBDPC
686 set 0x0000600, %o2 !!
687 add %g0, CERER_VA, %g3
688 stxa %o2, [%g3]ASI_CERER
689
690 !! Turn off all bits in CETER
691 add %g0, CETER_VA, %g3
692 stxa %g0, [%g3]ASI_CETER
693
694 !! Inject single bit err using err_inject_reg
695 add %g0, 1, %l3 !! single bit err
696 add %g0, 1, %i3 !! Enable err_injection
697 std %d0, [%l4 + 0x4]
698 add %g0, 0x100, %g3 !! read the stb ptr
699 ldxa [%g3]ASI_STB_ACCESS, %g2 !! Entry in which correctable err will be injected
700
701 mov %g2, %l2 !! stb expected index is in l2
702 mov %g0, %i0
703 mov %g0, %o6 !! not to chk ecc in the handler
704 mov %g0, %l1
705 add %g0, 1, %o7 !! ME bit will be set in this case
706 add %g0, 0xff, %l7 ! byte mask to compare on diag read
707 add %g0, HPRIV, %i6 ! The priv type to chk in the trap handler.
708
709 setx user_data_begin_002, %g1, %l4
710 mov %l4, %l5 !! expected PA
711 ldx [%l4], %o4
712
713CASE2_000:
714 ldx [%l4 +0x8], %l6
715 xor %o4, %l6, %o5
716 add %l4, 0x10, %l4
717 add %l5, 0x10, %l5
718 stx %o5, [%l4] !! CE
719 sllx %g2, 3, %g3 !! g3 has the addr to read data
720 or %g3, 0xC0, %g5 !! g5 has the addr to diag read stb pa
721 ldxa [%g3]ASI_STB_ACCESS, %g6 !! data
722 ldxa [%g5]ASI_STB_ACCESS, %g6 !! pa
723
724INJ_UC_ERR:
725 add %g0, 0x3, %l3 !! inject double bit errors
726 ldxa [%l4]0xE4, %g1 !! invalid asi trap to set to stb ptr to 0
727 add %l4, 0x10, %l4
728 add %l5, 0x10, %l5
729 xor %l6, %l5, %o5
730 stx %o5, [%l4] !! UE
731 mov %g0, %l2 !! index compared in the trap handler shd be 0
732 !! Disable err injection and turn on CETER bits.
733ERR_INJ_OFF:
734 mov %g0, %i3
735 std %d0, [%l4 + 0x4]
736 !! Turn on all bits in CETER
737TURN_ON_CETER:
738 add %g0, CETER_VA, %g3
739 setx 0x7000000000000000, %g1, %g2
740 stxa %g2, [%g3]ASI_CETER
741 !! After couple of cycles trap shd be taken.
742
743 ldx [%l4 + 0x30], %o4
744 ldx [%l4 + 0x38], %o4
745 ldx [%l4 + 0x40], %o4
746 ldx [%l4 + 0x48], %o4
747 stx %l6, [%l4 + 8]
748 stx %o4, [%l4 + 0x10]
749 stx %l4, [%l4 + 0x18]
750 std %d0, [%l4 + 0x20]
751 stx %g2, [%l4 + 0x28]
752 ldx [%l4 + 0x20], %o4
753 ldx [%l4 + 0x30], %o4
754 ldx [%l4 + 0x40], %o4
755 ldx [%l4 + 0x50], %o4
756 ldx [%l4 + 0x60], %o4
757
758 EXIT_GOOD
759 nop
760FAIL:
761 EXIT_BAD
762 nop
763
764attr_data {
765 Name = .My_User_Section_4v002,
766 part_0_ctx_nonzero_tsb_config_1,
767 VA = MY_USER_DATA_VA002,
768 RA = MY_USER_DATA_RA002,
769 PA = ra2pa(MY_USER_DATA_RA002, 0),
770 TTE_Context = PCONTEXT,
771 TTE_V = 1,
772 TTE_NFO = 0,
773 TTE_L = 0,
774 TTE_Soft = 0,
775 TTE_IE = 0,
776 TTE_E = 0,
777 TTE_CP = 1,
778 TTE_CV = 0,
779 TTE_P = 0,
780 TTE_EP = 0,
781 TTE_W = 1,
782 TTE_SW1 = 0,
783 TTE_SW0 = 0,
784 TTE_RSVD1 = 0,
785 TTE_Size = 0,
786 }
787attr_data {
788NAME = .My_User_Section_4v002,
789 hypervisor
790}
791.data
792.global user_data_begin_002
793user_data_begin_002:
794.xword 0x050a211e918857f3
795.xword 0x7980bbbf09b95bba
796.xword 0x55f410e2b57433f6
797.xword 0x106c3aa95e2aa3c3
798.xword 0xbcb980bc1bb072d8
799.xword 0x63da435c10b717dd
800.xword 0x375d99be87bef073
801.xword 0x03a5206ac6d08fd2
802.xword 0xfa474991f13e3460
803.xword 0x1446415baecf3609
804.xword 0xe3215e901114ad4b
805.xword 0xf91d897e92d1ee95
806.xword 0x33458a48805d888b
807.xword 0x7f5a3ddb7d8e3c23
808.xword 0xaa80311fb1e17e79
809.xword 0x0f59d0e1ac35dbd4
810
811 .word 0x1eb9
812 .word 0x43ec
813 .word 0xc619
814 .word 0x11a06
815
816
817SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003
818attr_text {
819 Name = .My_User_Section_4v003,
820 part_0_ctx_nonzero_tsb_config_2,
821 VA = MY_USER_TEXT_VA003,
822 RA = MY_USER_TEXT_RA003,
823 PA = ra2pa(MY_USER_TEXT_RA003, 0),
824 TTE_Context = PCONTEXT,
825 TTE_V = 1,
826 TTE_NFO = 0,
827 TTE_L = 0,
828 TTE_Soft = 0,
829 TTE_IE = 0,
830 TTE_E = 0,
831 TTE_CP = 1,
832 TTE_CV = 0,
833 TTE_P = 0,
834 TTE_EP = 1,
835 TTE_W = 0,
836 TTE_SW1 = 0,
837 TTE_SW0 = 0,
838 TTE_RSVD1 = 0,
839 TTE_Size = 0,
840 }
841attr_text {
842NAME = .My_User_Section_4v003,
843 hypervisor
844}
845! same as case 2 uses hp stores.
846.text
847.global user_code_begin_003
848user_code_begin_003:
849 add %g0, 1, %l1
850 mov %g0, %l2
851 add %g0, 1, %l3
852
853FAIL:
854 EXIT_BAD
855 nop
856
857attr_data {
858 Name = .My_User_Section_4v003,
859 part_0_ctx_nonzero_tsb_config_1,
860 VA = MY_USER_DATA_VA003,
861 RA = MY_USER_DATA_RA003,
862 PA = ra2pa(MY_USER_DATA_RA003, 0),
863 TTE_Context = PCONTEXT,
864 TTE_V = 1,
865 TTE_NFO = 0,
866 TTE_L = 0,
867 TTE_Soft = 0,
868 TTE_IE = 0,
869 TTE_E = 0,
870 TTE_CP = 1,
871 TTE_CV = 0,
872 TTE_P = 0,
873 TTE_EP = 0,
874 TTE_W = 1,
875 TTE_SW1 = 0,
876 TTE_SW0 = 0,
877 TTE_RSVD1 = 0,
878 TTE_Size = 0,
879 }
880attr_data {
881NAME = .My_User_Section_4v003,
882 hypervisor
883}
884.data
885.global user_data_begin_003
886user_data_begin_003:
887.xword 0xca12fd23b5b1b1d6
888.xword 0x3428a18f797bd42a
889.xword 0x0d0630dd16ca2db5
890.xword 0x281c49cf3f51a83f
891.xword 0x8fc66b8940c55c03
892.xword 0xfd6f2a2b60aee94c
893.xword 0xec72846b0261894e
894.xword 0xf1bd6c544120f822
895
896.xword 0xefc4e1f1b35853fc
897.xword 0xe790a0c1689eb683
898.xword 0x88c650f170c41710
899.xword 0x614126cf9fc8dca3
900.xword 0x4be2f60911e465ce
901.xword 0x4e22352a0c29c95c
902.xword 0xf18efdf01ce79e24
903.xword 0x294aaa56144d7cf1
904
905 .word 0xdfaa
906 .word 0x39a9
907 .word 0xb967
908 .word 0x280c
909
910
911SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004
912attr_text {
913 Name = .My_User_Section_4v004,
914 part_0_ctx_nonzero_tsb_config_2,
915 VA = MY_USER_TEXT_VA004,
916 RA = MY_USER_TEXT_RA004,
917 PA = ra2pa(MY_USER_TEXT_RA004, 0),
918 TTE_Context = PCONTEXT,
919 TTE_V = 1,
920 TTE_NFO = 0,
921 TTE_L = 0,
922 TTE_Soft = 0,
923 TTE_IE = 0,
924 TTE_E = 0,
925 TTE_CP = 1,
926 TTE_CV = 0,
927 TTE_P = 0,
928 TTE_EP = 1,
929 TTE_W = 0,
930 TTE_SW1 = 0,
931 TTE_SW0 = 0,
932 TTE_RSVD1 = 0,
933 TTE_Size = 0,
934 }
935attr_text {
936NAME = .My_User_Section_4v004,
937 hypervisor
938}
939.text
940.global user_code_begin_004
941user_code_begin_004:
942 mov %g0, %l2
943 !! turn off error injection and do diag accesses
944
945FAIL: EXIT_BAD
946 nop
947
948attr_data {
949 Name = .My_User_Section_4v004,
950 part_0_ctx_nonzero_tsb_config_1,
951 VA = MY_USER_DATA_VA004,
952 RA = MY_USER_DATA_RA004,
953 PA = ra2pa(MY_USER_DATA_RA004, 0),
954 TTE_Context = PCONTEXT,
955 TTE_V = 1,
956 TTE_NFO = 0,
957 TTE_L = 0,
958 TTE_Soft = 0,
959 TTE_IE = 0,
960 TTE_E = 0,
961 TTE_CP = 1,
962 TTE_CV = 0,
963 TTE_P = 0,
964 TTE_EP = 0,
965 TTE_W = 1,
966 TTE_SW1 = 0,
967 TTE_SW0 = 0,
968 TTE_RSVD1 = 0,
969 TTE_Size = 0,
970 }
971attr_data {
972NAME = .My_User_Section_4v004,
973 hypervisor
974}
975.data
976.global user_data_begin_004
977.global store_ecc_data
978user_data_begin_004:
979.xword 0xefc4e1f1b35853fc
980.xword 0xe790a0c1689eb683
981.xword 0x88c650f170c41710
982.xword 0x614126cf9fc8dca3
983.xword 0x4be2f60911e465ce
984.xword 0x4e22352a0c29c95c
985.xword 0xf18efdf01ce79e24
986.xword 0x294aaa56144d7cf1
987.xword 0xe0066361bd9fcb86
988.xword 0xea22901c101f6f52
989.xword 0x806faa2171350467
990.xword 0xff54f2cd06a0d342
991.xword 0x566bff718cddb905
992.xword 0x6d367bc4d165d37a
993.xword 0x5efc42b18f920522
994.xword 0x584c92dec4bc66de
995.xword 0xefc4e1f1b35853fc
996.xword 0xe790a0c1689eb683
997.xword 0x88c650f170c41710
998.xword 0x614126cf9fc8dca3
999.xword 0x4be2f60911e465ce
1000.xword 0x4e22352a0c29c95c
1001.xword 0xf18efdf01ce79e24
1002.xword 0x294aaa56144d7cf1
1003.xword 0xe0066361bd9fcb86
1004.xword 0xea22901c101f6f52
1005store_ecc_data:
1006.xword 0xff54f2cd06a0d342
1007.xword 0x566bff718cddb905
1008.xword 0x6d367bc4d165d37a
1009.xword 0x5efc42b18f920522
1010.xword 0x584c92dec4bc66de
1011.xword 0xe0066361bd9fcb86
1012.xword 0xea22901c101f6f52
1013.xword 0x806faa2171350467
1014.xword 0x566bff718cddb905
1015.xword 0x6d367bc4d165d37a
1016 .word 0x4069
1017 .word 0x41ed
1018 .word 0x14c07
1019 .word 0x29de
1020
1021
1022SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005
1023attr_text {
1024 Name = .My_User_Section_4v005,
1025 part_0_ctx_nonzero_tsb_config_3,
1026 VA = MY_USER_TEXT_VA005,
1027 RA = MY_USER_TEXT_RA005,
1028 PA = ra2pa(MY_USER_TEXT_RA005, 0),
1029 TTE_Context = PCONTEXT,
1030 TTE_V = 1,
1031 TTE_NFO = 0,
1032 TTE_L = 0,
1033 TTE_Soft = 0,
1034 TTE_IE = 0,
1035 TTE_E = 0,
1036 TTE_CP = 1,
1037 TTE_CV = 0,
1038 TTE_P = 0,
1039 TTE_EP = 1,
1040 TTE_W = 0,
1041 TTE_SW1 = 0,
1042 TTE_SW0 = 0,
1043 TTE_RSVD1 = 0,
1044 TTE_Size = 0,
1045 }
1046attr_text {
1047NAME = .My_User_Section_4v005,
1048 hypervisor
1049}
1050
1051!! inject error into all the scratchpad entries.
1052.text
1053.global user_code_begin_005
1054user_code_begin_005:
1055 mov %g0, %i3 !! disable err -injection
1056 add %g0, 1, %l3 !! l3 has the expected ecc mask
1057
1058FAIL: EXIT_BAD
1059 nop
1060
1061attr_data {
1062 Name = .My_User_Section_4v005,
1063 part_0_ctx_nonzero_tsb_config_1,
1064 VA = MY_USER_DATA_VA005,
1065 RA = MY_USER_DATA_RA005,
1066 PA = ra2pa(MY_USER_DATA_RA005, 0),
1067 TTE_Context = PCONTEXT,
1068 TTE_V = 1,
1069 TTE_NFO = 0,
1070 TTE_L = 0,
1071 TTE_Soft = 0,
1072 TTE_IE = 0,
1073 TTE_E = 0,
1074 TTE_CP = 1,
1075 TTE_CV = 0,
1076 TTE_P = 0,
1077 TTE_EP = 0,
1078 TTE_W = 1,
1079 TTE_SW1 = 0,
1080 TTE_SW0 = 0,
1081 TTE_RSVD1 = 0,
1082 TTE_Size = 0,
1083 }
1084attr_data {
1085NAME = .My_User_Section_4v005,
1086 hypervisor
1087}
1088.data
1089.global user_data_begin_005
1090user_data_begin_005:
1091.xword 0xefc4e1f1b35853fc
1092.xword 0xe790a0c1689eb683
1093.xword 0x88c650f170c41710
1094.xword 0x614126cf9fc8dca3
1095.xword 0x4be2f60911e465ce
1096.xword 0x4e22352a0c29c95c
1097.xword 0xf18efdf01ce79e24
1098.xword 0x294aaa56144d7cf1
1099.xword 0xe0066361bd9fcb86
1100.xword 0xea22901c101f6f52
1101.xword 0x806faa2171350467
1102.xword 0xff54f2cd06a0d342
1103.xword 0x566bff718cddb905
1104.xword 0x6d367bc4d165d37a
1105.xword 0x5efc42b18f920522
1106.xword 0x4be2f60911e465ce
1107.xword 0x4e22352a0c29c95c
1108.xword 0xf18efdf01ce79e24
1109 .word 0xf93b
1110 .word 0xe34b
1111 .word 0x127e6
1112 .word 0xd915
1113
1114
1115SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006
1116attr_text {
1117 Name = .My_User_Section_4v006,
1118 part_0_ctx_nonzero_tsb_config_3,
1119 VA = MY_USER_TEXT_VA006,
1120 RA = MY_USER_TEXT_RA006,
1121 PA = ra2pa(MY_USER_TEXT_RA006, 0),
1122 TTE_Context = PCONTEXT,
1123 TTE_V = 1,
1124 TTE_NFO = 0,
1125 TTE_L = 0,
1126 TTE_Soft = 0,
1127 TTE_IE = 0,
1128 TTE_E = 0,
1129 TTE_CP = 1,
1130 TTE_CV = 0,
1131 TTE_P = 0,
1132 TTE_EP = 1,
1133 TTE_W = 0,
1134 TTE_SW1 = 0,
1135 TTE_SW0 = 0,
1136 TTE_RSVD1 = 0,
1137 TTE_Size = 0,
1138 }
1139attr_text {
1140NAME = .My_User_Section_4v006,
1141 hypervisor
1142}
1143.text
1144.global user_code_begin_006
1145user_code_begin_006:
1146 cmp %i0, %l1
1147 bne FAIL
1148 mov %g0, %i0
1149FAIL: EXIT_BAD
1150 nop
1151
1152attr_data {
1153 Name = .My_User_Section_4v006,
1154 part_0_ctx_nonzero_tsb_config_1,
1155 VA = MY_USER_DATA_VA006,
1156 RA = MY_USER_DATA_RA006,
1157 PA = ra2pa(MY_USER_DATA_RA006, 0),
1158 TTE_Context = PCONTEXT,
1159 TTE_V = 1,
1160 TTE_NFO = 0,
1161 TTE_L = 0,
1162 TTE_Soft = 0,
1163 TTE_IE = 0,
1164 TTE_E = 0,
1165 TTE_CP = 1,
1166 TTE_CV = 0,
1167 TTE_P = 0,
1168 TTE_EP = 0,
1169 TTE_W = 1,
1170 TTE_SW1 = 0,
1171 TTE_SW0 = 0,
1172 TTE_RSVD1 = 0,
1173 TTE_Size = 0,
1174 }
1175attr_data {
1176NAME = .My_User_Section_4v006,
1177 hypervisor
1178}
1179.data
1180.global user_data_begin_006
1181user_data_begin_006:
1182 .word 0x7551
1183 .word 0x1535d
1184 .word 0x59
1185 .word 0x72f7
1186
1187
1188SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007
1189attr_text {
1190 Name = .My_User_Section_4v007,
1191 part_0_ctx_nonzero_tsb_config_3,
1192 VA = MY_USER_TEXT_VA007,
1193 RA = MY_USER_TEXT_RA007,
1194 PA = ra2pa(MY_USER_TEXT_RA007, 0),
1195 TTE_Context = PCONTEXT,
1196 TTE_V = 1,
1197 TTE_NFO = 0,
1198 TTE_L = 0,
1199 TTE_Soft = 0,
1200 TTE_IE = 0,
1201 TTE_E = 0,
1202 TTE_CP = 1,
1203 TTE_CV = 0,
1204 TTE_P = 0,
1205 TTE_EP = 1,
1206 TTE_W = 0,
1207 TTE_SW1 = 0,
1208 TTE_SW0 = 0,
1209 TTE_RSVD1 = 0,
1210 TTE_Size = 0,
1211 }
1212attr_text {
1213NAME = .My_User_Section_4v007,
1214 hypervisor
1215}
1216
1217!! inject error in all the 4 ways and do special memops and chk the effect.
1218!! Also do nc accesses
1219
1220.text
1221.global user_code_begin_007
1222user_code_begin_007:
1223 cmp %i0, %l1
1224 bne FAIL
1225 mov %g0, %i0
1226 mov %g0, %l1
1227
1228
1229
1230FAIL: EXIT_BAD
1231 nop
1232
1233
1234attr_data {
1235 Name = .My_User_Section_4v007,
1236 part_0_ctx_nonzero_tsb_config_1,
1237 VA = MY_USER_DATA_VA007,
1238 RA = MY_USER_DATA_RA007,
1239 PA = ra2pa(MY_USER_DATA_RA007, 0),
1240 TTE_Context = PCONTEXT,
1241 TTE_V = 1,
1242 TTE_NFO = 0,
1243 TTE_L = 0,
1244 TTE_Soft = 0,
1245 TTE_IE = 0,
1246 TTE_E = 0,
1247 TTE_CP = 1,
1248 TTE_CV = 0,
1249 TTE_P = 0,
1250 TTE_EP = 0,
1251 TTE_W = 1,
1252 TTE_SW1 = 0,
1253 TTE_SW0 = 0,
1254 TTE_RSVD1 = 0,
1255 TTE_Size = 0,
1256 }
1257attr_data {
1258NAME = .My_User_Section_4v007,
1259 hypervisor
1260}
1261.data
1262.global user_data_begin_007
1263user_data_begin_007:
1264 .word 0x14a3d
1265 .word 0x798d
1266 .word 0xfdd5
1267 .word 0x9d05
1268
1269
1270SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008
1271attr_text {
1272 Name = .My_User_Section_4v008,
1273 part_0_ctx_nonzero_tsb_config_3,
1274 VA = MY_USER_TEXT_VA008,
1275 RA = MY_USER_TEXT_RA008,
1276 PA = ra2pa(MY_USER_TEXT_RA008, 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_4v008,
1296 hypervisor
1297}
1298.text
1299.global user_code_begin_008
1300user_code_begin_008:
1301 cmp %i0, %l1
1302 bne FAIL
1303 mov %g0, %i0
1304 mov %g0, %l1
1305
1306
1307FAIL: EXIT_BAD
1308 nop
1309
1310attr_data {
1311 Name = .My_User_Section_4v008,
1312 part_0_ctx_nonzero_tsb_config_1,
1313 VA = MY_USER_DATA_VA008,
1314 RA = MY_USER_DATA_RA008,
1315 PA = ra2pa(MY_USER_DATA_RA008, 0),
1316 TTE_Context = PCONTEXT,
1317 TTE_V = 1,
1318 TTE_NFO = 0,
1319 TTE_L = 0,
1320 TTE_Soft = 0,
1321 TTE_IE = 0,
1322 TTE_E = 0,
1323 TTE_CP = 1,
1324 TTE_CV = 0,
1325 TTE_P = 0,
1326 TTE_EP = 0,
1327 TTE_W = 1,
1328 TTE_SW1 = 0,
1329 TTE_SW0 = 0,
1330 TTE_RSVD1 = 0,
1331 TTE_Size = 0,
1332 }
1333attr_data {
1334NAME = .My_User_Section_4v008,
1335 hypervisor
1336}
1337.data
1338.global user_data_begin_008
1339user_data_begin_008:
1340 .word 0xfd87
1341 .word 0x6aa3
1342 .word 0x4d58
1343 .word 0x547a
1344
1345
1346.global DATA_ACCESS_ERROR_HANDLER
1347.global INST_ACCESS_ERROR_HANDLER
1348.global MEM_ADDR_HANDLER
1349.global RECOVERABLE_ERR_HANDLER
1350
1351SECTION .HTRAPS
1352.text
1353DATA_ACCESS_ERROR_HANDLER:
1354 add %g0, SFSR_VA, %g5 !
1355 ldxa [%g5]ASI_DSFSR, %o1 !
1356 cmp %o1, 0x1
1357 bne FAIL
1358 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1359 ldxa [%g6]ASI_SFAR, %o1
1360 cmp %o1, %l3
1361 bne FAIL
1362 !!issue demap pg
1363 xor %o1, 0x1fff, %o1
1364 stxa %g0, [%o1] ASI_DMMU_DEMAP
1365 !!disable errors
1366 add %g0, CERER_VA, %g3
1367 stxa %g0, [%g3]ASI_CERER
1368 add %g0, 1, %i0 !
1369 retry
1370 nop
1371
1372INST_ACCESS_ERROR_HANDLER:
1373 add %g0, SFSR_VA, %g5 !
1374 !!ldxa [%g5]ASI_ISFSR, %o1 !
1375 !!cmp %o1, 0x1
1376 !!bne FAIL
1377 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1378 ldxa [%g6]ASI_SFAR, %o1
1379 !!brnz %o1, FAIL
1380 rdpr %tpc, %o1
1381 cmp %o1, %l4 !! cmp pc matches the expected pc
1382 bne FAIL
1383 !!issue demap pg
1384 srlx %o1, 0xd, %o1
1385 sllx %o1, 0xd, %o1
1386 stxa %g0, [%o1] ASI_IMMU_DEMAP
1387 add %g0, 1, %i0 !
1388 retry
1389
1390MEM_ADDR_HANDLER:
1391 done
1392 nop
1393
1394HW_CORR_ERROR_HANDLER:
1395 ldxa [%g0]0x4c, %g1 !! read the DESR
1396 ldxa [%g0]0x4c, %g2 !! g2 shd be 0.
1397 retry
1398 nop
1399
1400INVALID_ASI_HANDLER:
1401 set STDU_ERR_EN, %g1
1402 or %g1, %l3, %g1
1403
1404 add %g0, 0x100, %g3 !! read the stb ptr
1405 ldxa [%g3]ASI_STB_ACCESS, %g2
1406 !srlx %g2, 3, %g2
1407 brz %g2, DONE
1408 cmp %g2, 1
1409 be STORES_7
1410 cmp %g2, 2
1411 be STORES_6
1412 cmp %g2, 3
1413 be STORES_5
1414 cmp %g2, 4
1415 be STORES_4
1416 cmp %g2, 5
1417 be STORES_3
1418 cmp %g2, 6
1419 be STORES_2
1420 cmp %g2, 7
1421 be,a DONE
1422STORES_7:
1423 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1424STORES_6:
1425 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1426STORES_5:
1427 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1428STORES_4:
1429 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1430STORES_3:
1431 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1432STORES_2:
1433 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1434 stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj
1435
1436DONE:
1437 done
1438 nop
1439
1440RECOVERABLE_ERR_HANDLER:
1441 ldxa [%g0]0x4c, %g1 !! read the DESR
1442 ldxa [%g0]0x4c, %g2 !! g2 shd be 0.
1443CHK_ERRT:
1444 srlx %g1, 56, %g2 !! chk the err_type
1445 and %g2, 0x1F, %g3
1446 cmp %g3, SBDPU_ERR_TYPE
1447 bne FAIL
1448CHK_S_BIT:
1449 srlx %g2, 5, %g2 !! chk s bit
1450 and %g2, 1, %g3
1451 cmp %g3, 1
1452 bne FAIL
1453CHK_M_BIT:
1454 srlx %g2, 1, %g2 !! chk M bit bit
1455 and %g2, 1, %g3
1456 cmp %o7, %g3
1457 bne FAIL
1458CHK_F_BIT:
1459 srlx %g2, 1, %g3 !! chk F bit set
1460 cmp %g3, 1
1461 bne FAIL
1462CHK_WAY:
1463 and %g1, 0x7, %g2 !! SB index
1464 cmp %g2, %l2
1465 bne FAIL
1466
1467 sllx %g2, 3, %g3 !! g3 has the addr to read data
1468 or %g3, 0x40, %g4 !! g4 has the addr to read ecc
1469 or %g3, 0xC0, %g5 !! g5 has the addr to diag read stb pa
1470
1471 CMP_DATA:
1472 ldxa [%g3]ASI_STB_ACCESS, %g6
1473 cmp %g6, %o5
1474 bne FAIL
1475
1476 CMP_ECC:
1477 ldxa [%g4]ASI_STB_ACCESS, %g6 !! ecc data
1478 brz %o6, CMP_PA !! lsu flips the ecc for upper 32 bits only.
1479 srlx %g6, 7, %g7
1480 srlx %o3, 7, %o3
1481 xor %o3, %l3, %g1 !! o3 has the ecc withour err, l3 has the mask.
1482 cmp %g1, %g7
1483 bne FAIL
1484
1485 CMP_PA:
1486 ldxa [%g5]ASI_STB_ACCESS, %g6 !! pa
1487 srlx %g6, 40, %g7
1488 cmp %g7, %l7 !! cmp asi, byte mask
1489 bne FAIL
1490 sllx %g6, 24, %g6 !! shift the mask
1491 srlx %g6, 24, %g6
1492 cmp %g6, %l5
1493 bne FAIL
1494 CMP_PRIV:
1495 or %g3, 0x80, %g7 !! g7 has the addr for the control read
1496 ldxa [%g7]ASI_STB_ACCESS, %g6 !! chk priv
1497 and %g6, 0x7, %g6
1498 cmp %g6, %i6
1499 bne FAIL
1500 add %g0, 1, %i0
1501
1502 retry
1503
1504FAIL: EXIT_BAD
1505 nop
1506
1507.data
1508
1509