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