Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / uarch / tlu / diag / err_dcdp_halt_diag.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: err_dcdp_halt_diag.s
5* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
6* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
7*
8* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9*
10* This program is free software; you can redistribute it and/or modify
11* it under the terms of the GNU General Public License as published by
12* the Free Software Foundation; version 2 of the License.
13*
14* This program is distributed in the hope that it will be useful,
15* but WITHOUT ANY WARRANTY; without even the implied warranty of
16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17* GNU General Public License for more details.
18*
19* You should have received a copy of the GNU General Public License
20* along with this program; if not, write to the Free Software
21* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*
23* For the avoidance of doubt, and except that if any non-GPL license
24* choice is available it will apply instead, Sun elects to use only
25* the General Public License version 2 (GPLv2) at this time for any
26* software where a choice of GPL license versions is made
27* available with the language indicating that GPLv2 or any later version
28* may be used, or where a choice of which version of the GPL is applied is
29* otherwise unspecified.
30*
31* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
32* CA 95054 USA or visit www.sun.com if you need additional information or
33* have any questions.
34*
35*
36* ========== Copyright Header End ============================================
37*/
38#define THREAD_COUNT 8
39#define THREAD_STRIDE 1
40
41#define MY_HP_TEXT_PA 0x1050000000
42#define MY_HP_DATA_PA 0x1050001000
43
44#define ASI_PRIMARY_CONTEXT_0 0x21
45#define ASI_ITLB_DATA_IN_REG 0x54
46#define ASI_DMMU_TAG_ACCESS 0x58
47#define ASI_DTLB_DATA_IN_REG 0x5c
48#define ASI_DMMU_SFAR 0x58
49
50#define PART0_NZ_RANOTPA_2 0
51
52#define MY_USER_TEXT_VA000 0x7a000000
53#define MY_USER_TEXT_RA000 0x7b000000
54#define MY_USER_TEXT_PA000 0x107b000000
55#define MY_USER_TEXT_VA001 0x7a010000
56#define MY_USER_TEXT_RA001 0x7b010000
57#define MY_USER_TEXT_PA001 0x107b010000
58#define MY_USER_TEXT_VA002 0x7a020000
59#define MY_USER_TEXT_RA002 0x7b020000
60#define MY_USER_TEXT_PA002 0x107b020000
61#define MY_USER_TEXT_VA003 0x7a030000
62#define MY_USER_TEXT_RA003 0x7b030000
63#define MY_USER_TEXT_PA003 0x107b030000
64#define MY_USER_TEXT_VA004 0x7a040000
65#define MY_USER_TEXT_RA004 0x7b040000
66#define MY_USER_TEXT_PA004 0x107b040000
67#define MY_USER_TEXT_VA005 0x7a050000
68#define MY_USER_TEXT_RA005 0x7b050000
69#define MY_USER_TEXT_PA005 0x107b050000
70#define MY_USER_TEXT_VA006 0x7a060000
71#define MY_USER_TEXT_RA006 0x7b060000
72#define MY_USER_TEXT_PA006 0x107b060000
73#define MY_USER_TEXT_VA007 0x7a070000
74#define MY_USER_TEXT_RA007 0x7b070000
75#define MY_USER_TEXT_PA007 0x107b070000
76#define MY_USER_TEXT_VA008 0x7a080000
77#define MY_USER_TEXT_RA008 0x7b080000
78#define MY_USER_TEXT_PA008 0x107b080000
79#define MY_USER_TEXT_VA009 0x7a090000
80#define MY_USER_TEXT_RA009 0x7b090000
81#define MY_USER_TEXT_PA009 0x107b090000
82#define MY_USER_TEXT_VA010 0x7a0a0000
83#define MY_USER_TEXT_RA010 0x7b0a0000
84#define MY_USER_TEXT_PA010 0x107b0a0000
85#define MY_USER_TEXT_VA011 0x7a0b0000
86#define MY_USER_TEXT_RA011 0x7b0b0000
87#define MY_USER_TEXT_PA011 0x107b0b0000
88#define MY_USER_TEXT_VA012 0x7a0c0000
89#define MY_USER_TEXT_RA012 0x7b0c0000
90#define MY_USER_TEXT_PA012 0x107b0c0000
91#define MY_USER_TEXT_VA013 0x7a0d0000
92#define MY_USER_TEXT_RA013 0x7b0d0000
93#define MY_USER_TEXT_PA013 0x107b0d0000
94
95#define MY_USER_DATA_VA000 0x6a000000
96#define MY_USER_DATA_RA000 0x6a000000
97#define MY_USER_DATA_PA000 0x6a000000
98#define MY_USER_DATA_VA001 0x6a010000
99#define MY_USER_DATA_RA001 0x6b010000
100#define MY_USER_DATA_PA001 0x106b010000
101#define MY_USER_DATA_VA002 0x6a020000
102#define MY_USER_DATA_RA002 0x6b020000
103#define MY_USER_DATA_PA002 0x106b020000
104#define MY_USER_DATA_VA003 0x6a030000
105#define MY_USER_DATA_RA003 0x6b030000
106#define MY_USER_DATA_PA003 0x106b030000
107#define MY_USER_DATA_VA004 0x6a040000
108#define MY_USER_DATA_RA004 0x6b040000
109#define MY_USER_DATA_PA004 0x106b040000
110#define MY_USER_DATA_VA005 0x6a050000
111#define MY_USER_DATA_RA005 0x6b050000
112#define MY_USER_DATA_PA005 0x106b050000
113#define MY_USER_DATA_VA006 0x6a060000
114#define MY_USER_DATA_RA006 0x6b060000
115#define MY_USER_DATA_PA006 0x106b060000
116#define MY_USER_DATA_VA007 0x6a070000
117#define MY_USER_DATA_RA007 0x6b070000
118#define MY_USER_DATA_PA007 0x106b070000
119#define MY_USER_DATA_VA008 0x6a080000
120#define MY_USER_DATA_RA008 0x6b080000
121#define MY_USER_DATA_PA008 0x106b080000
122#define MY_USER_DATA_VA009 0x6a090000
123#define MY_USER_DATA_RA009 0x6b090000
124#define MY_USER_DATA_PA009 0x106b090000
125#define MY_USER_DATA_VA010 0x6a0a0000
126#define MY_nc_DATA_RA010 0xb06b0a0000
127#define MY_nc_DATA_PA010 0xc06b0a0000
128#define MY_USER_DATA_VA011 0x6a0b0000
129#define MY_nc_DATA_RA011 0xb06b0b0000
130#define MY_nc_DATA_PA011 0xc06b0b0000
131#define MY_USER_DATA_VA012 0x6a0c0000
132#define MY_nc_DATA_RA012 0xb06b0c0000
133#define MY_nc_DATA_PA012 0xc06b0c0000
134#define MY_USER_DATA_VA013 0x6a0d0000
135#define MY_nc_DATA_RA013 0xb06b0d0000
136#define MY_nc_DATA_PA013 0xc06b0d0000
137
138#define IMDU_ERR_EN 0xa0000000
139#define IMTU_ERR_EN 0x90000000
140#define DMDU_ERR_EN 0x88000000
141#define DMTU_ERR_EN 0x84000000
142#define IRCU_ERR_EN 0x82000000
143#define FRCU_ERR_EN 0x81000000
144#define SCAU_ERR_EN 0x80800000
145#define TCCU_ERR_EN 0x80400000
146#define TSAU_ERR_EN 0x80200000
147#define MRAU_ERR_EN 0x80100000
148#define STAU_ERR_EN 0x80080000
149#define STDU_ERR_EN 0x80020000
150
151#define ASI_DESR 0x4c
152#define ASI_DFESR 0x4c
153#define DFESR_VA 0x8
154#define ASI_DSFSR 0x58
155#define ASI_ISFSR 0x50
156#define SFSR_VA 0x18
157#define ASI_SFAR 0x58
158#define SFAR_VA 0x20
159#define ASI_ERR_INJ 0x43
160#define ASI_CETER 0x4C
161#define CETER_VA 0x18
162#define ASI_CERER 0x4C
163#define CERER_VA 0x10
164
165#define CETER_DHCCE 0x1000000000000000
166#define CETER_DE 0x2000_0000_0000_0000
167#define CETER_PSCCE 0x4000_0000_0000_0000
168#define DCDP_ERR_TYPE 0x8
169
170#define MAIN_PAGE_HV_ALSO
171#define H_HT0_Mem_Address_Not_Aligned_0x34
172#define My_HT0_Mem_Address_Not_Aligned_0x34 \
173 ba MEM_ADDR_HANDLER; \
174 nop;nop;nop;nop;nop;nop;nop
175
176
177#define H_HT0_Data_Access_MMU_Error_0x72
178#define SUN_H_HT0_Data_Access_MMU_Error_0x72 \
179 ba DATA_ACCESS_ERROR_HANDLER; \
180 nop;nop;nop;nop;nop;nop;nop
181
182#define H_HT0_Instruction_Access_MMU_Error_0x71
183#define SUN_H_HT0_Instruction_Access_MMU_Error_0x71 \
184 ba INST_ACCESS_ERROR_HANDLER; \
185 nop;nop;nop;nop;nop;nop;nop
186
187#define H_HT0_Hw_Corrected_Error_0x63
188#define SUN_H_HT0_Hw_Corrected_Error_0x63 \
189 ba HW_CORR_ERROR_HANDLER; \
190 nop;nop;nop;nop;nop;nop;nop
191
192#define H_HT0_DAE_invalid_asi_0x14
193#define SUN_H_HT0_DAE_invalid_asi_0x14 \
194 ba INVALID_ASI_HANDLER; \
195 nop;nop;nop;nop;nop;nop;nop
196
197#define H_HT0_DAE_nfo_page_0x17
198#define SUN_H_HT0_DAE_nfo_page_0x17 \
199 ba DAE_NFO_PG_HANDLER; \
200 nop;nop;nop;nop;nop;nop;nop
201
202#include "hboot.s"
203
204/************************************************************************
205 Test case:
206 ************************************************************************/
207
208.text
209.global main
210
211main: /* test begin */
212 ta T_CHANGE_HPRIV
213
214 setx 0x0000000000000800, %l0, %o2 !! enable DCDP errs
215 add %g0, CERER_VA, %g3 !!g3 has cerer va
216
217 stxa %o2, [%g3]ASI_CERER
218
219 !! set CETER.DHCCE
220 setx CETER_DHCCE, %l0, %o2
221 add %g0, CETER_VA, %g3
222 stxa %o2, [%g3]ASI_CETER
223
224 !! Put cache in direct mapped mode
225 add %g0, 0x10, %g1
226 or %g0, 0x2, %g2
227 stxa %g2, [%g1]ASI_DIAG
228
229 ta T_CHANGE_NONHPRIV
230
231
232 add %g0, 0x800, %i2 !!way 1
233 set 0x1000, %i3 !!way 2
234 set 0x1800, %i4 !!way 3
235 setx user_data_begin_000, %g1, %g3
236 setx user_data_begin_001, %g1, %g4
237 setx user_data_begin_002, %g1, %g5
238 setx user_data_begin_003, %g1, %g6
239
240 !! change g4, g5 and g6 to ways 1, 2 and 3
241 or %g4, %i2, %g4
242 or %g5, %i3, %g5
243 or %g6, %i4, %g6
244
245 add %g0, 32, %i1 !!i1 has the cache index
246
247 ld [%g3+%i1], %g1
248 ld [%g4+%i1], %g1
249 ld [%g5+%i1], %g1
250 ld [%g6+%i1], %g1
251
252 setx user_data_begin_005, %g1, %g2
253 stx %g0, [%g2] !! take a trap
254
255 mov %g3, %o7
256
257 mov %g0, %l0 !! l0 has the way no.
258 mov %g0, %l4 !! iteration #
259 mov %g0, %l5
260 mov %g0, %l1 !!
261 add %g0, 1, %l6 !! no. of valid ways in the index when trap is taken
262
263 ta T_CHANGE_HPRIV
264
265 setx user_code_begin_000, %g1, %g2
266 jmp %g2
267 nop
268 EXIT_BAD
269
270
271/************************************************************************
272 Test case data start
273 ************************************************************************/
274.data
275.global user_data_start
276user_data_start:
277.word 0x12345678
278.word 0x9a9b9c9d
279.word 0x00000000
280.word 0xffffffff
281
282!#***********************************************************************
283
284SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000
285attr_text {
286 Name = .My_User_Section_4v000,
287 part_0_ctx_nonzero_tsb_config_2,
288 VA = MY_USER_TEXT_VA000,
289 RA = MY_USER_TEXT_PA000,
290 PA = MY_USER_TEXT_PA000,
291 TTE_Context = PCONTEXT,
292 TTE_V = 1,
293 TTE_NFO = 0,
294 TTE_L = 0,
295 TTE_Soft = 0,
296 TTE_IE = 0,
297 TTE_E = 0,
298 TTE_CP = 1,
299 TTE_CV = 0,
300 TTE_P = 0,
301 TTE_EP = 1,
302 TTE_W = 0,
303 TTE_SW1 = 0,
304 TTE_SW0 = 0,
305 TTE_RSVD1 = 0,
306 TTE_Size = 0,
307 }
308attr_text {
309NAME = .My_User_Section_4v000,
310 hypervisor
311}
312.text
313.global user_code_begin_000
314user_code_begin_000:
315 cmp %i0, %l1
316 bne FAIL
317 mov %g0, %i0
318!!ld all 4 ways of the cache
319 ld [%g3+%i1], %g1
320 ld [%g4+%i1], %g1
321 ld [%g5+%i1], %g1
322 ld [%g6+%i1], %g1
323
324 ld [%g3+1], %g1 !cause mem_addr_not_aligned trap
325 add %i1, %l4, %l5
326 ldub [%g3+%l5], %g1 !! access the line to chk for trap
327 wrhpr %g0, 0x0, %halt
328 add %g0, 1, %l1
329
330 setx user_code_begin_001, %g1, %g2
331 jmp %g2
332 add %i1, 0x10, %i1 !!mov to next index
333
334FAIL:
335 EXIT_BAD
336
337attr_data {
338 Name = .My_User_Section_4v000,
339 part_0_ctx_nonzero_tsb_config_1,
340 VA = MY_USER_DATA_VA000,
341 RA = MY_USER_DATA_RA000,
342 PA = MY_USER_DATA_PA000,
343 TTE_Context = PCONTEXT,
344 TTE_V = 1,
345 TTE_NFO = 0,
346 TTE_L = 0,
347 TTE_Soft = 0,
348 TTE_IE = 0,
349 TTE_E = 0,
350 TTE_CP = 1,
351 TTE_CV = 0,
352 TTE_P = 0,
353 TTE_EP = 0,
354 TTE_W = 1,
355 TTE_SW1 = 0,
356 TTE_SW0 = 0,
357 TTE_RSVD1 = 0,
358 TTE_Size = 0,
359 }
360.data
361.global user_data_begin_000
362user_data_begin_000:
363.xword 0xe0066361bd9fcb86
364.xword 0xea22901c101f6f52
365.xword 0x806faa2171350467
366.xword 0xff54f2cd06a0d342
367.xword 0x566bff718cddb905
368.xword 0x6d367bc4d165d37a
369.xword 0x5efc42b18f920522
370.xword 0x584c92dec4bc66de
371
372.xword 0xed9efe0d05896ce1
373
374.xword 0xf9d45b94972117c8
375
376.xword 0xd0c647618c9e43f3
377
378.xword 0xfe04ead3b77c2d11
379
380.xword 0x06d2d7f29e76397c
381
382.xword 0x234c366110eddd38
383
384.xword 0xa80656d4288044bc
385
386.xword 0x12e763fbd8e2970d
387
388.xword 0x7320217fab3eae0e
389
390.xword 0x38683cebedefb5af
391
392
393SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001
394attr_text {
395 Name = .My_User_Section_4v001,
396 part_0_ctx_nonzero_tsb_config_2,
397 VA = MY_USER_TEXT_VA001,
398 RA = MY_USER_TEXT_PA001,
399 PA = MY_USER_TEXT_PA001,
400 TTE_Context = PCONTEXT,
401 TTE_V = 1,
402 TTE_NFO = 0,
403 TTE_L = 0,
404 TTE_Soft = 0,
405 TTE_IE = 0,
406 TTE_E = 0,
407 TTE_CP = 1,
408 TTE_CV = 0,
409 TTE_P = 0,
410 TTE_EP = 1,
411 TTE_W = 0,
412 TTE_SW1 = 0,
413 TTE_SW0 = 0,
414 TTE_RSVD1 = 0,
415 TTE_Size = 0,
416 }
417attr_text {
418NAME = .My_User_Section_4v001,
419 hypervisor
420}
421.text
422.global user_code_begin_001
423user_code_begin_001:
424 cmp %i0, %l1
425 bne FAIL
426 mov %g0, %i0
427 add %g0, 1, %l0 !! inject err in way 1
428
429!!ld all 4 ways of the cache
430 ld [%g3+%i1], %g1
431 ld [%g4+%i1], %g1
432 ld [%g5+%i1], %g1
433 ld [%g6+%i1], %g1
434
435 add %i1, %l4, %l5
436
437 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
438 ldub [%g3+%l5], %g1 !! access the line to chk for trap
439 wrhpr %g0, 0x0, %halt
440
441 setx user_code_begin_002, %g1, %g2
442 jmp %g2
443 add %i1, 0x10, %i1 !!mov to next index
444
445FAIL:
446 EXIT_BAD
447 nop
448
449attr_data {
450 Name = .My_User_Section_4v001,
451 part_0_ctx_nonzero_tsb_config_1,
452 VA = MY_USER_DATA_VA001,
453 RA = MY_USER_DATA_RA001,
454 PA = MY_USER_DATA_PA001,
455 TTE_Context = PCONTEXT,
456 TTE_V = 1,
457 TTE_NFO = 0,
458 TTE_L = 0,
459 TTE_Soft = 0,
460 TTE_IE = 0,
461 TTE_E = 0,
462 TTE_CP = 1,
463 TTE_CV = 0,
464 TTE_P = 0,
465 TTE_EP = 0,
466 TTE_W = 1,
467 TTE_SW1 = 0,
468 TTE_SW0 = 0,
469 TTE_RSVD1 = 0,
470 TTE_Size = 0,
471 }
472attr_data {
473NAME = .My_User_Section_4v001,
474 hypervisor
475}
476.data
477.global user_data_begin_001
478user_data_begin_001:
479.skip 0x800
480.xword 0xfa474991f13e3460
481.xword 0x1446415baecf3609
482.xword 0xe3215e901114ad4b
483.xword 0xf91d897e92d1ee95
484.xword 0x33458a48805d888b
485.xword 0x7f5a3ddb7d8e3c23
486.xword 0xaa80311fb1e17e79
487.xword 0x0f59d0e1ac35dbd4
488.xword 0x057c893bc8fc1e7e
489.xword 0xcfb9e3a29c786cc0
490.xword 0x7257becb4609969e
491.xword 0x4b1896677e83abae
492.xword 0xc2e35a285574f037
493.xword 0x2e42eb5835020e2e
494.xword 0x90775b99929f43cc
495.xword 0x9fac4ae85a4ecd4e
496
497 .word 0x10731
498 .word 0xd027
499 .word 0x1350e
500 .word 0x10e9d
501
502
503SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002
504attr_text {
505 Name = .My_User_Section_4v002,
506 part_0_ctx_nonzero_tsb_config_2,
507 VA = MY_USER_TEXT_VA002,
508 RA = MY_USER_TEXT_PA002,
509 PA = MY_USER_TEXT_PA002,
510 TTE_Context = PCONTEXT,
511 TTE_V = 1,
512 TTE_NFO = 0,
513 TTE_L = 0,
514 TTE_Soft = 0,
515 TTE_IE = 0,
516 TTE_E = 0,
517 TTE_CP = 1,
518 TTE_CV = 0,
519 TTE_P = 0,
520 TTE_EP = 1,
521 TTE_W = 0,
522 TTE_SW1 = 0,
523 TTE_SW0 = 0,
524 TTE_RSVD1 = 0,
525 TTE_Size = 0,
526 }
527attr_text {
528NAME = .My_User_Section_4v002,
529 hypervisor
530}
531.text
532.global user_code_begin_002
533user_code_begin_002:
534 cmp %i0, %l1
535 bne FAIL
536 mov %g0, %i0
537 add %g0, 2, %l0 !! inject err in way 2
538
539!!ld all 4 ways of the cache
540 ld [%g3+%i1], %g1
541 ld [%g4+%i1], %g1
542 ld [%g5+%i1], %g1
543 ld [%g6+%i1], %g1
544
545 add %i1, %l4, %l5
546 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
547 ldub [%g3+%l5], %g1 !! access the line to chk for trap
548 wrhpr %g0, 0x0, %halt
549
550 setx user_code_begin_003, %g1, %g2
551 jmp %g2
552 add %i1, 0x10, %i1 !!mov to next index
553
554FAIL:
555 EXIT_BAD
556 nop
557
558attr_data {
559 Name = .My_User_Section_4v002,
560 part_0_ctx_nonzero_tsb_config_1,
561 VA = MY_USER_DATA_VA002,
562 RA = MY_USER_DATA_RA002,
563 PA = MY_USER_DATA_PA002,
564 TTE_Context = PCONTEXT,
565 TTE_V = 1,
566 TTE_NFO = 0,
567 TTE_L = 0,
568 TTE_Soft = 0,
569 TTE_IE = 0,
570 TTE_E = 0,
571 TTE_CP = 1,
572 TTE_CV = 0,
573 TTE_P = 0,
574 TTE_EP = 0,
575 TTE_W = 1,
576 TTE_SW1 = 0,
577 TTE_SW0 = 0,
578 TTE_RSVD1 = 0,
579 TTE_Size = 0,
580 }
581attr_data {
582NAME = .My_User_Section_4v002,
583 hypervisor
584}
585.data
586.global user_data_begin_002
587user_data_begin_002:
588 .skip 0x1000
589.xword 0x050a211e918857f3
590.xword 0x7980bbbf09b95bba
591.xword 0x55f410e2b57433f6
592.xword 0x106c3aa95e2aa3c3
593.xword 0xbcb980bc1bb072d8
594.xword 0x63da435c10b717dd
595.xword 0x375d99be87bef073
596.xword 0x03a5206ac6d08fd2
597.xword 0xfa474991f13e3460
598.xword 0x1446415baecf3609
599.xword 0xe3215e901114ad4b
600.xword 0xf91d897e92d1ee95
601.xword 0x33458a48805d888b
602.xword 0x7f5a3ddb7d8e3c23
603.xword 0xaa80311fb1e17e79
604.xword 0x0f59d0e1ac35dbd4
605
606 .word 0x1eb9
607 .word 0x43ec
608 .word 0xc619
609 .word 0x11a06
610
611
612SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003
613attr_text {
614 Name = .My_User_Section_4v003,
615 part_0_ctx_nonzero_tsb_config_2,
616 VA = MY_USER_TEXT_VA003,
617 RA = MY_USER_TEXT_PA003,
618 PA = MY_USER_TEXT_PA003,
619 TTE_Context = PCONTEXT,
620 TTE_V = 1,
621 TTE_NFO = 0,
622 TTE_L = 0,
623 TTE_Soft = 0,
624 TTE_IE = 0,
625 TTE_E = 0,
626 TTE_CP = 1,
627 TTE_CV = 0,
628 TTE_P = 0,
629 TTE_EP = 1,
630 TTE_W = 0,
631 TTE_SW1 = 0,
632 TTE_SW0 = 0,
633 TTE_RSVD1 = 0,
634 TTE_Size = 0,
635 }
636attr_text {
637NAME = .My_User_Section_4v003,
638 hypervisor
639}
640.text
641.global user_code_begin_003
642user_code_begin_003:
643 cmp %i0, %l1
644 bne FAIL
645 mov %g0, %i0
646 add %g0, 3, %l0 !! inject err in way 3
647
648!!ld all 4 ways of the cache
649 ld [%g3+%i1], %g1
650 ld [%g4+%i1], %g1
651 ld [%g5+%i1], %g1
652 ld [%g6+%i1], %g1
653 add %i1, %l4, %l5
654
655 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
656 ldub [%g3+%l5], %g1 !! access the line to chk for trap
657 wrhpr %g0, 0x0, %halt
658
659 setx user_code_begin_004, %g1, %g2
660 jmp %g2
661 add %i1, 0x10, %i1 !!mov to next index
662
663FAIL:
664 EXIT_BAD
665 nop
666
667attr_data {
668 Name = .My_User_Section_4v003,
669 part_0_ctx_nonzero_tsb_config_1,
670 VA = MY_USER_DATA_VA003,
671 RA = MY_USER_DATA_RA003,
672 PA = MY_USER_DATA_PA003,
673 TTE_Context = PCONTEXT,
674 TTE_V = 1,
675 TTE_NFO = 0,
676 TTE_L = 0,
677 TTE_Soft = 0,
678 TTE_IE = 0,
679 TTE_E = 0,
680 TTE_CP = 1,
681 TTE_CV = 0,
682 TTE_P = 0,
683 TTE_EP = 0,
684 TTE_W = 1,
685 TTE_SW1 = 0,
686 TTE_SW0 = 0,
687 TTE_RSVD1 = 0,
688 TTE_Size = 0,
689 }
690attr_data {
691NAME = .My_User_Section_4v003,
692 hypervisor
693}
694.data
695.global user_data_begin_003
696user_data_begin_003:
697 .skip 0x1800
698.xword 0xca12fd23b5b1b1d6
699.xword 0x3428a18f797bd42a
700.xword 0x0d0630dd16ca2db5
701.xword 0x281c49cf3f51a83f
702.xword 0x8fc66b8940c55c03
703.xword 0xfd6f2a2b60aee94c
704.xword 0xec72846b0261894e
705.xword 0xf1bd6c544120f822
706
707.xword 0xefc4e1f1b35853fc
708.xword 0xe790a0c1689eb683
709.xword 0x88c650f170c41710
710.xword 0x614126cf9fc8dca3
711.xword 0x4be2f60911e465ce
712.xword 0x4e22352a0c29c95c
713.xword 0xf18efdf01ce79e24
714.xword 0x294aaa56144d7cf1
715
716 .word 0xdfaa
717 .word 0x39a9
718 .word 0xb967
719 .word 0x280c
720
721
722SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004
723attr_text {
724 Name = .My_User_Section_4v004,
725 part_0_ctx_nonzero_tsb_config_2,
726 VA = MY_USER_TEXT_VA004,
727 RA = MY_USER_TEXT_PA004,
728 PA = MY_USER_TEXT_PA004,
729 TTE_Context = PCONTEXT,
730 TTE_V = 1,
731 TTE_NFO = 0,
732 TTE_L = 0,
733 TTE_Soft = 0,
734 TTE_IE = 0,
735 TTE_E = 0,
736 TTE_CP = 1,
737 TTE_CV = 0,
738 TTE_P = 0,
739 TTE_EP = 1,
740 TTE_W = 0,
741 TTE_SW1 = 0,
742 TTE_SW0 = 0,
743 TTE_RSVD1 = 0,
744 TTE_Size = 0,
745 }
746attr_text {
747NAME = .My_User_Section_4v004,
748 hypervisor
749}
750.text
751.global user_code_begin_004
752user_code_begin_004:
753 cmp %i0, %l1
754 bne FAIL
755 mov %g0, %i0
756 add %g0, 4, %l0 !! inject err in all ways
757
758!!ld all 4 ways of the cache
759 ld [%g3+%i1], %g1
760 ld [%g4+%i1], %g1
761 ld [%g5+%i1], %g1
762 ld [%g6+%i1], %g1
763
764 add %i1, %l4, %l5
765 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
766 ldub [%g3+%l5], %g1 !! access the line to chk for trap
767 wrhpr %g0, 0x0, %halt
768
769 setx user_code_begin_000, %g1, %g2
770 add %g0, 32, %i1 !!i1 has the cache index
771 cmp %l4, 0xF
772 bnz GO_BACK
773 add %l4, 1, %l4
774
775 ta T_CHANGE_NONHPRIV
776 setx user_code_begin_005, %g1, %g2
777 add %g0, 32, %i1 !!i1 has the cache index
778 mov %g0, %l4
779GO_BACK:
780 jmp %g2
781 add %i1, %l4, %l5
782
783FAIL: EXIT_BAD
784 nop
785
786attr_data {
787 Name = .My_User_Section_4v004,
788 part_0_ctx_nonzero_tsb_config_1,
789 VA = MY_USER_DATA_VA004,
790 RA = MY_USER_DATA_PA004,
791 PA = MY_USER_DATA_PA004,
792 TTE_Context = PCONTEXT,
793 TTE_V = 1,
794 TTE_NFO = 0,
795 TTE_L = 0,
796 TTE_Soft = 0,
797 TTE_IE = 0,
798 TTE_E = 0,
799 TTE_CP = 1,
800 TTE_CV = 0,
801 TTE_P = 0,
802 TTE_EP = 0,
803 TTE_W = 1,
804 TTE_SW1 = 0,
805 TTE_SW0 = 0,
806 TTE_RSVD1 = 0,
807 TTE_Size = 0,
808 }
809attr_data {
810NAME = .My_User_Section_4v004,
811 hypervisor
812}
813.data
814.global user_data_begin_004
815user_data_begin_004:
816.xword 0xefc4e1f1b35853fc
817.xword 0xe790a0c1689eb683
818.xword 0x88c650f170c41710
819.xword 0x614126cf9fc8dca3
820.xword 0x4be2f60911e465ce
821.xword 0x4e22352a0c29c95c
822.xword 0xf18efdf01ce79e24
823.xword 0x294aaa56144d7cf1
824.xword 0xe0066361bd9fcb86
825.xword 0xea22901c101f6f52
826.xword 0x806faa2171350467
827.xword 0xff54f2cd06a0d342
828.xword 0x566bff718cddb905
829.xword 0x6d367bc4d165d37a
830.xword 0x5efc42b18f920522
831.xword 0x584c92dec4bc66de
832 .word 0x4069
833 .word 0x41ed
834 .word 0x14c07
835 .word 0x29de
836
837
838SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005
839attr_text {
840 Name = .My_User_Section_4v005,
841 part_0_ctx_nonzero_tsb_config_3,
842 VA = MY_USER_TEXT_VA005,
843 RA = MY_USER_TEXT_RA005,
844 PA = MY_USER_TEXT_PA005,
845 TTE_Context = PCONTEXT,
846 TTE_V = 1,
847 TTE_NFO = 0,
848 TTE_L = 0,
849 TTE_Soft = 0,
850 TTE_IE = 0,
851 TTE_E = 0,
852 TTE_CP = 1,
853 TTE_CV = 0,
854 TTE_P = 0,
855 TTE_EP = 1,
856 TTE_W = 0,
857 TTE_SW1 = 0,
858 TTE_SW0 = 0,
859 TTE_RSVD1 = 0,
860 TTE_Size = 0,
861 }
862attr_text {
863NAME = .My_User_Section_4v005,
864 hypervisor
865}
866.text
867.global user_code_begin_005
868!!Inject error into first 8 bytes of the cacheline in all ways. Access data from
869!!next 8 bytes. No trap shd be taken.
870user_code_begin_005:
871 cmp %i0, %l1
872 bne FAIL
873 mov %g0, %i0
874 add %g0, 4, %l0 !! inject err in all ways
875 add %g0, 1, %l4 !! inject error in byte 1
876
877!!ld all 4 ways of the cache
878 ld [%g3+%i1], %g1
879 ld [%g4+%i1], %g1
880 ld [%g5+%i1], %g1
881 ld [%g6+%i1], %g1
882
883 add %i1, 15, %l5
884 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
885
886 ldub [%g3+%l5], %g1 !! access the next 8 bytes, no trap
887 add %i1, 8, %l5
888 ldx [%g3+%l5], %g1 !! access the next 8 bytes, no trap, access using ldx
889
890 mov %g0, %l1
891 cmp %i0, %l1
892 bne FAIL
893 nop
894!! Do different type of store accesses and the error shd not be detected.
895!! The error is in all the 4 ways of the index 20 in the first 8 bytes.
896!! On a read parity is chked across 8 bytes but for a write the parity
897!! is stored only for bytes that I am writing.
898!! The following stores will recreate new paroty for bytes 0 to 3 and
899!! overwrite the rror.
900
901 add %i1, 4, %i5
902 stw %g2, [%g3 + %i5] !! store
903 ldub [%g3+%i5], %g1 !! This will get the data bypassed from STB. As
904 !! there is raw match no error shd be seen
905 st %f0, [%g4 + %i5] !! fp store
906 add %g5, %i1, %l5
907 or %g0, 0xff, %i5
908 stda %d0, [%l5 + %i5]0xC0 !! pst store
909 add %i1, 8, %l5
910 stwa %g3, [%g6 + %l5]0xE2 !! bis store, L1$ is invalidated
911
912!! Now do lds from above lines and chk that the error is cleared
913
914 membar #Sync
915
916 ld [%g4+%i1], %f0
917 ldda [%g5+%i1]0xD2, %d2 !! short fp ld
918 ldx [%g6+%i1], %g1
919 add %i1, 15, %i5
920 ldub [%g3+%i5], %g1
921
922 cmp %i0, %l1
923 bne FAIL
924 setx user_code_begin_006, %g1, %g2
925
926 jmp %g2
927 add %i1, 0x20, %i1
928
929FAIL: EXIT_BAD
930 nop
931
932attr_data {
933 Name = .My_User_Section_4v005,
934 part_0_ctx_nonzero_tsb_config_1,
935 VA = MY_USER_DATA_VA005,
936 RA = MY_USER_DATA_RA005,
937 PA = MY_USER_DATA_PA005,
938 TTE_Context = PCONTEXT,
939 TTE_V = 1,
940 TTE_NFO = 1,
941 TTE_L = 0,
942 TTE_Soft = 0,
943 TTE_IE = 0,
944 TTE_E = 0,
945 TTE_CP = 1,
946 TTE_CV = 0,
947 TTE_P = 0,
948 TTE_EP = 0,
949 TTE_W = 1,
950 TTE_SW1 = 0,
951 TTE_SW0 = 0,
952 TTE_RSVD1 = 0,
953 TTE_Size = 0,
954 }
955attr_data {
956NAME = .My_User_Section_4v005,
957 hypervisor
958}
959.data
960.global user_data_begin_005
961user_data_begin_005:
962 .word 0xf93b
963 .word 0xe34b
964 .word 0x127e6
965 .word 0xd915
966
967
968SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006
969attr_text {
970 Name = .My_User_Section_4v006,
971 part_0_ctx_nonzero_tsb_config_3,
972 VA = MY_USER_TEXT_VA006,
973 RA = MY_USER_TEXT_RA006,
974 PA = MY_USER_TEXT_PA006,
975 TTE_Context = PCONTEXT,
976 TTE_V = 1,
977 TTE_NFO = 0,
978 TTE_L = 0,
979 TTE_Soft = 0,
980 TTE_IE = 0,
981 TTE_E = 0,
982 TTE_CP = 1,
983 TTE_CV = 0,
984 TTE_P = 0,
985 TTE_EP = 1,
986 TTE_W = 0,
987 TTE_SW1 = 0,
988 TTE_SW0 = 0,
989 TTE_RSVD1 = 0,
990 TTE_Size = 0,
991 }
992attr_text {
993NAME = .My_User_Section_4v006,
994 hypervisor
995}
996.text
997.global user_code_begin_006
998user_code_begin_006:
999 cmp %i0, %l1
1000 bne FAIL
1001 mov %g0, %i0
1002 add %g0, 4, %l0 !! inject err in all ways
1003 add %g0, 1, %l4 !! inject error in byte 1
1004 add %g0, 0x40, %i1
1005!!ld all 4 ways of the cache, index is 40
1006 ld [%g3+%i1], %g1
1007 ld [%g4+%i1], %g1
1008 ld [%g5+%i1], %g1
1009 ld [%g6+%i1], %g1
1010
1011 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1012 !inject error in all ways
1013
1014 mov %g0, %l6 !! blk ld is not loaded into cache
1015 ! do a blk ld
1016 ! for blk lds err is seen if it is in the first D$ line and in the first 8 bytes.
1017 ldda [%g3 + %i1]0xF0, %d0 !! error shd be seen
1018 setx user_code_begin_007, %g1, %g2
1019 add %g0, 1, %l1
1020 cmp %i0, %l1
1021 bne FAIL
1022 mov %g0, %i0
1023
1024 !! now inject error in way3 only, i.e. inject in the way the address of which
1025 !! we are not accessing, LSU shd still flag the error.
1026
1027BLK_LD_CASE_2:
1028 add %g0, 3, %l0 !! inject err in way3
1029!!ld all 4 ways of the cache, index is 40
1030 ld [%g3+%i1], %g1
1031 ld [%g4+%i1], %g1
1032 ld [%g5+%i1], %g1
1033 ld [%g6+%i1], %g1
1034
1035 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1036 ldda [%g3 + %i1]0xF0, %d0 !! error shd be seen here too
1037 jmp %g2
1038 add %g0, 4, %l0 !! inject err in all ways
1039
1040
1041
1042FAIL: EXIT_BAD
1043 nop
1044
1045attr_data {
1046 Name = .My_User_Section_4v006,
1047 part_0_ctx_nonzero_tsb_config_1,
1048 VA = MY_USER_DATA_VA006,
1049 RA = MY_USER_DATA_RA006,
1050 PA = MY_USER_DATA_PA006,
1051 TTE_Context = PCONTEXT,
1052 TTE_V = 1,
1053 TTE_NFO = 0,
1054 TTE_L = 0,
1055 TTE_Soft = 0,
1056 TTE_IE = 0,
1057 TTE_E = 0,
1058 TTE_CP = 1,
1059 TTE_CV = 0,
1060 TTE_P = 0,
1061 TTE_EP = 0,
1062 TTE_W = 1,
1063 TTE_SW1 = 0,
1064 TTE_SW0 = 0,
1065 TTE_RSVD1 = 0,
1066 TTE_Size = 0,
1067 }
1068attr_data {
1069NAME = .My_User_Section_4v006,
1070 hypervisor
1071}
1072.data
1073.global user_data_begin_006
1074user_data_begin_006:
1075 .word 0x7551
1076 .word 0x1535d
1077 .word 0x59
1078 .word 0x72f7
1079
1080
1081SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007
1082attr_text {
1083 Name = .My_User_Section_4v007,
1084 part_0_ctx_nonzero_tsb_config_3,
1085 VA = MY_USER_TEXT_VA007,
1086 RA = MY_USER_TEXT_RA007,
1087 PA = MY_USER_TEXT_PA007,
1088 TTE_Context = PCONTEXT,
1089 TTE_V = 1,
1090 TTE_NFO = 0,
1091 TTE_L = 0,
1092 TTE_Soft = 0,
1093 TTE_IE = 0,
1094 TTE_E = 0,
1095 TTE_CP = 1,
1096 TTE_CV = 0,
1097 TTE_P = 0,
1098 TTE_EP = 1,
1099 TTE_W = 0,
1100 TTE_SW1 = 0,
1101 TTE_SW0 = 0,
1102 TTE_RSVD1 = 0,
1103 TTE_Size = 0,
1104 }
1105attr_text {
1106NAME = .My_User_Section_4v007,
1107 hypervisor
1108}
1109
1110!! inject error in all the 4 ways and do special memops and chk the effect.
1111!! Also do nc accesses
1112
1113.text
1114.global user_code_begin_007
1115user_code_begin_007:
1116 cmp %i0, %l1
1117 bne FAIL
1118 mov %g0, %i0
1119 mov %g0, %l1
1120
1121!!ld all 4 ways of the cache, index is 40
1122 ld [%g3+%i1], %g1
1123 ld [%g4+%i1], %g1
1124 ld [%g5+%i1], %o3
1125 ldx [%g6+%i1], %o4
1126
1127
1128 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1129 !inject error in all ways
1130
1131 ! do atomic lds to clear errors in all the ways
1132 ldstub [%g4 + %i1], %g1 !! no error shd be flagged
1133 swap [%g3 + %i1], %g2 !! no error shd be flagged
1134 add %g5, %i1, %i5
1135 casa [%i5]0x80, %o3, %g2 !! no error shd be flagged
1136 add %g6, %i1, %i5
1137 casxa [%i5]0x80, %o4, %g1 !! no error shd be flagged
1138 prefetch [%g6 + %i1], 0 !! no err
1139 setx user_code_begin_008, %g1, %g2 !! add cycles to wait
1140 cmp %i0, %l1
1141 bne FAIL
1142 ldda [%g5 + %i1]0xE2, %i6 !Bis ld
1143 jmp %g2
1144 mov %g0, %l1
1145
1146
1147FAIL: EXIT_BAD
1148 nop
1149
1150
1151attr_data {
1152 Name = .My_User_Section_4v007,
1153 part_0_ctx_nonzero_tsb_config_1,
1154 VA = MY_USER_DATA_VA007,
1155 RA = MY_USER_DATA_RA007,
1156 PA = MY_USER_DATA_PA007,
1157 TTE_Context = PCONTEXT,
1158 TTE_V = 1,
1159 TTE_NFO = 0,
1160 TTE_L = 0,
1161 TTE_Soft = 0,
1162 TTE_IE = 0,
1163 TTE_E = 0,
1164 TTE_CP = 1,
1165 TTE_CV = 0,
1166 TTE_P = 0,
1167 TTE_EP = 0,
1168 TTE_W = 1,
1169 TTE_SW1 = 0,
1170 TTE_SW0 = 0,
1171 TTE_RSVD1 = 0,
1172 TTE_Size = 0,
1173 }
1174attr_data {
1175NAME = .My_User_Section_4v007,
1176 hypervisor
1177}
1178.data
1179.global user_data_begin_007
1180user_data_begin_007:
1181 .word 0x14a3d
1182 .word 0x798d
1183 .word 0xfdd5
1184 .word 0x9d05
1185
1186
1187SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008
1188attr_text {
1189 Name = .My_User_Section_4v008,
1190 part_0_ctx_nonzero_tsb_config_3,
1191 VA = MY_USER_TEXT_VA008,
1192 RA = MY_USER_TEXT_RA008,
1193 PA = MY_USER_TEXT_PA008,
1194 TTE_Context = PCONTEXT,
1195 TTE_V = 1,
1196 TTE_NFO = 0,
1197 TTE_L = 0,
1198 TTE_Soft = 0,
1199 TTE_IE = 0,
1200 TTE_E = 0,
1201 TTE_CP = 1,
1202 TTE_CV = 0,
1203 TTE_P = 0,
1204 TTE_EP = 1,
1205 TTE_W = 0,
1206 TTE_SW1 = 0,
1207 TTE_SW0 = 0,
1208 TTE_RSVD1 = 0,
1209 TTE_Size = 0,
1210 }
1211attr_text {
1212NAME = .My_User_Section_4v008,
1213 hypervisor
1214}
1215.text
1216.global user_code_begin_008
1217user_code_begin_008:
1218 cmp %i0, %l1
1219 bne FAIL
1220 mov %g0, %i0
1221 mov %g0, %l1
1222
1223!!ld all 4 ways of the cache, index is 40
1224 ld [%g3+%i1], %g1
1225 ld [%g4+%i1], %g1
1226 ld [%g5+%i1], %g1
1227 ld [%g6+%i1], %g1
1228
1229 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1230 !inject error in all ways
1231
1232 ! do a blk st, it shd clear all the 4 ways
1233 stda %d0, [%g3 + %i1]0xF0
1234 stda %d0, [%g4 + %i1]0xF8
1235 stda %d0, [%g5 + %i1]0xE0
1236 stda %d0, [%g6 + %i1]0xF0
1237
1238 membar #Sync !! wait for all the previous stores to be done
1239 !! and then check all the errors are cleared
1240
1241 ldx [%g6+%i1], %g1
1242 add %i1, 15, %i5
1243 ldub [%g3+%i5], %g1
1244
1245 cmp %i0, %l1
1246 bne FAIL
1247 nop
1248 setx user_code_begin_009, %g1, %g2
1249 jmp %g2
1250 mov %g0, %l1
1251
1252
1253FAIL: EXIT_BAD
1254 nop
1255
1256attr_data {
1257 Name = .My_User_Section_4v008,
1258 part_0_ctx_nonzero_tsb_config_1,
1259 VA = MY_USER_DATA_VA008,
1260 RA = MY_USER_DATA_RA008,
1261 PA = MY_USER_DATA_PA008,
1262 TTE_Context = PCONTEXT,
1263 TTE_V = 1,
1264 TTE_NFO = 0,
1265 TTE_L = 0,
1266 TTE_Soft = 0,
1267 TTE_IE = 0,
1268 TTE_E = 0,
1269 TTE_CP = 1,
1270 TTE_CV = 0,
1271 TTE_P = 0,
1272 TTE_EP = 0,
1273 TTE_W = 1,
1274 TTE_SW1 = 0,
1275 TTE_SW0 = 0,
1276 TTE_RSVD1 = 0,
1277 TTE_Size = 0,
1278 }
1279attr_data {
1280NAME = .My_User_Section_4v008,
1281 hypervisor
1282}
1283.data
1284.global user_data_begin_008
1285user_data_begin_008:
1286 .word 0xfd87
1287 .word 0x6aa3
1288 .word 0x4d58
1289 .word 0x547a
1290
1291
1292SECTION .My_User_Section_4v009 TEXT_VA=MY_USER_TEXT_VA009, DATA_VA=MY_USER_DATA_VA009
1293attr_text {
1294 Name = .My_User_Section_4v009,
1295 part_0_ctx_nonzero_tsb_config_3,
1296 VA = MY_USER_TEXT_VA009,
1297 RA = MY_USER_TEXT_RA009,
1298 PA = MY_USER_TEXT_PA009,
1299 TTE_Context = PCONTEXT,
1300 TTE_V = 1,
1301 TTE_NFO = 0,
1302 TTE_L = 0,
1303 TTE_Soft = 0,
1304 TTE_IE = 0,
1305 TTE_E = 0,
1306 TTE_CP = 1,
1307 TTE_CV = 0,
1308 TTE_P = 0,
1309 TTE_EP = 1,
1310 TTE_W = 0,
1311 TTE_SW1 = 0,
1312 TTE_SW0 = 0,
1313 TTE_RSVD1 = 0,
1314 TTE_Size = 0,
1315 }
1316attr_text {
1317NAME = .My_User_Section_4v009,
1318 hypervisor
1319}
1320.text
1321.global user_code_begin_009
1322user_code_begin_009:
1323add %g0, 0x20, %i1 !! index is 20
1324!!ld all 4 ways of the cache, index is 40
1325 ld [%g3+%i1], %g1
1326 ld [%g4+%i1], %g1
1327 ld [%g5+%i1], %g1
1328 ld [%g6+%i1], %g1
1329
1330 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1331 !inject error in all ways
1332
1333 !! now do nc lds to the same addr as the cp space. Check that the
1334 !! err is not cleared.
1335 setx user_data_begin_010, %g1, %o3
1336 setx user_data_begin_011, %g1, %o4
1337 setx user_data_begin_012, %g1, %o5
1338 setx user_data_begin_013, %g1, %o6
1339 ld [%o3+%i1], %g1 !! no error shd be flagged
1340 ld [%o4+%i1], %g1 !! no error shd be flagged
1341 ld [%o5+%i1], %g1 !! no error shd be flagged
1342 ld [%o6+%i1], %g1 !! no error shd be flagged
1343 mov %g0, %l1
1344 cmp %i0, %l1
1345 bne FAIL
1346
1347 !! access a line with cp=0 from the same index as the faulty ld and see
1348 !! that the error is still reported.
1349 setx user_data_begin_009, %g1, %o7
1350 ld [%o7+%i1], %g1 !! the error shd be flagged
1351 add %g0, 1, %l1
1352 cmp %i0, %l1
1353 bne FAIL
1354 mov %g0, %i0
1355
1356NC_CASE_2:
1357!! Now again ld all the 4 ways of the cache
1358 ld [%g3+%i1], %g1
1359 ld [%g4+%i1], %g1
1360 ld [%g5+%i1], %g1
1361 ld [%g6+%i1], %g1
1362
1363 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1364 !inject error in all ways
1365
1366 !! now do nc stores to the same addr as the cp space. Check that the
1367 !! err is not cleared.
1368 st %g2, [%o3+%i1]
1369 st %g3, [%o4+%i1]
1370 st %g4, [%o5+%i1]
1371 st %g5, [%o6+%i1]
1372
1373 mov %g0, %l1
1374 cmp %i0, %l1
1375 bne FAIL
1376
1377 !! access a line with cp=0 from the same index as the faulty ld and see
1378 !! that the error is still reported.
1379 ld [%o7+%i1], %g1 !! the error shd be flagged
1380 add %g0, 1, %l1
1381 cmp %i0, %l1
1382 bne FAIL
1383 mov %g0, %i0
1384
1385NC_CASE_3:
1386!! Now again ld all the 4 ways of the cache
1387 ld [%g3+%i1], %g1
1388 ld [%g4+%i1], %g1
1389 ld [%g5+%i1], %g1
1390 ld [%g6+%i1], %g1
1391
1392 ld [%l3+1], %g1 !cause mem_addr_not_aligned trap
1393 !inject error in all ways
1394
1395 !!Now do store to cp =0, err shd not be cleared
1396 stb %o3, [%o7+%i1]
1397
1398 ld [%o7+%i1], %g1 !! the error shd be flagged
1399 add %g0, 1, %l1
1400 cmp %i0, %l1
1401 bne FAIL
1402 mov %g0, %i0
1403
1404 EXIT_GOOD
1405 nop
1406
1407
1408FAIL: EXIT_BAD
1409 nop
1410
1411attr_data {
1412 Name = .My_User_Section_4v009,
1413 part_0_ctx_nonzero_tsb_config_1,
1414 VA = MY_USER_DATA_VA009,
1415 RA = MY_USER_DATA_RA009,
1416 PA = MY_USER_DATA_PA009,
1417 TTE_Context = PCONTEXT,
1418 TTE_V = 1,
1419 TTE_NFO = 0,
1420 TTE_L = 0,
1421 TTE_Soft = 0,
1422 TTE_IE = 0,
1423 TTE_E = 0,
1424 TTE_CP = 0,
1425 TTE_CV = 0,
1426 TTE_P = 0,
1427 TTE_EP = 0,
1428 TTE_W = 1,
1429 TTE_SW1 = 0,
1430 TTE_SW0 = 0,
1431 TTE_RSVD1 = 0,
1432 TTE_Size = 0,
1433 }
1434attr_data {
1435NAME = .My_User_Section_4v009,
1436 hypervisor
1437}
1438.data
1439.global user_data_begin_009
1440user_data_begin_009:
1441.xword 0x9f9cf317c6bf6c3e
1442.xword 0x6e5072dea1536687
1443.xword 0xecd6c1a2d916c251
1444.xword 0x3ae5485cda37f88a
1445.xword 0x1a2c7d4ed5edb96c
1446.xword 0x9e3b9e188934db9d
1447.xword 0x6fc59d2722a580de
1448.xword 0x69b382cc58c91552
1449
1450 .word 0x26f5
1451 .word 0x14ad8
1452 .word 0x6417
1453 .word 0x17560
1454
1455
1456SECTION .My_User_Section_4v010 TEXT_VA=MY_USER_TEXT_VA010, DATA_VA=MY_USER_DATA_VA010
1457attr_text {
1458 Name = .My_User_Section_4v010,
1459 part_0_ctx_nonzero_tsb_config_2,
1460 VA = MY_USER_TEXT_VA010,
1461 RA = MY_USER_TEXT_PA010,
1462 PA = MY_USER_TEXT_PA010,
1463 TTE_Context = PCONTEXT,
1464 TTE_V = 1,
1465 TTE_NFO = 0,
1466 TTE_L = 0,
1467 TTE_Soft = 0,
1468 TTE_IE = 0,
1469 TTE_E = 0,
1470 TTE_CP = 1,
1471 TTE_CV = 0,
1472 TTE_P = 0,
1473 TTE_EP = 1,
1474 TTE_W = 0,
1475 TTE_SW1 = 0,
1476 TTE_SW0 = 0,
1477 TTE_RSVD1 = 0,
1478 TTE_Size = 0,
1479 }
1480attr_text {
1481NAME = .My_User_Section_4v010,
1482 hypervisor
1483}
1484.text
1485.global user_code_begin_010
1486user_code_begin_010:
1487 cmp %i0, %l1
1488 bne FAIL
1489 mov %g0, %i0
1490 setx user_code_begin_011, %g2, %l4
1491 jmp %l4
1492 nop
1493FAIL: EXIT_BAD
1494 nop
1495
1496attr_data {
1497 Name = .My_User_Section_4v010,
1498 part_0_ctx_nonzero_tsb_config_1,
1499 VA = MY_USER_DATA_VA010,
1500 RA = MY_nc_DATA_RA010,
1501 PA = MY_nc_DATA_PA010,
1502 TTE_Context = PCONTEXT,
1503 TTE_V = 1,
1504 TTE_NFO = 0,
1505 TTE_L = 0,
1506 TTE_Soft = 0,
1507 TTE_IE = 0,
1508 TTE_E = 0,
1509 TTE_CP = 0,
1510 TTE_CV = 0,
1511 TTE_P = 0,
1512 TTE_EP = 0,
1513 TTE_W = 1,
1514 TTE_SW1 = 0,
1515 TTE_SW0 = 0,
1516 TTE_RSVD1 = 0,
1517 TTE_Size = 0,
1518 }
1519attr_data {
1520NAME = .My_User_Section_4v010,
1521 hypervisor
1522}
1523.data
1524.global user_data_begin_010
1525user_data_begin_010:
1526.xword 0x54007d9c96e7a9ff
1527.xword 0x930027e0327f4f59
1528.xword 0xe0dcea6ac80eb2ff
1529.xword 0x970ef238b6fd38f3
1530.xword 0x1044dc7715f25a67
1531.xword 0xd7a62736b8af1568
1532.xword 0x0f5fcf05ff8a547a
1533.xword 0x853766fbc6f6eaa8
1534
1535 .word 0xc750
1536 .word 0x36b
1537 .word 0x4f6d
1538 .word 0x108ec
1539
1540
1541SECTION .My_User_Section_4v011 TEXT_VA=MY_USER_TEXT_VA011, DATA_VA=MY_USER_DATA_VA011
1542attr_text {
1543 Name = .My_User_Section_4v011,
1544 part_0_ctx_nonzero_tsb_config_2,
1545 VA = MY_USER_TEXT_VA011,
1546 RA = MY_USER_TEXT_PA011,
1547 PA = MY_USER_TEXT_PA011,
1548 TTE_Context = PCONTEXT,
1549 TTE_V = 1,
1550 TTE_NFO = 0,
1551 TTE_L = 0,
1552 TTE_Soft = 0,
1553 TTE_IE = 0,
1554 TTE_E = 0,
1555 TTE_CP = 1,
1556 TTE_CV = 0,
1557 TTE_P = 0,
1558 TTE_EP = 1,
1559 TTE_W = 0,
1560 TTE_SW1 = 0,
1561 TTE_SW0 = 0,
1562 TTE_RSVD1 = 0,
1563 TTE_Size = 0,
1564 }
1565attr_text {
1566NAME = .My_User_Section_4v011,
1567 hypervisor
1568}
1569.text
1570.global user_code_begin_011
1571user_code_begin_011:
1572 cmp %i0, %l1
1573 bne FAIL
1574 mov %g0, %i0
1575 setx user_code_begin_012, %g2, %l4
1576 jmp %l4
1577 nop
1578FAIL: EXIT_BAD
1579 nop
1580
1581attr_data {
1582 Name = .My_User_Section_4v011,
1583 part_0_ctx_nonzero_tsb_config_1,
1584 VA = MY_USER_DATA_VA011,
1585 RA = MY_nc_DATA_RA011,
1586 PA = MY_nc_DATA_PA011,
1587 TTE_Context = PCONTEXT,
1588 TTE_V = 1,
1589 TTE_NFO = 0,
1590 TTE_L = 0,
1591 TTE_Soft = 0,
1592 TTE_IE = 0,
1593 TTE_E = 0,
1594 TTE_CP = 0,
1595 TTE_CV = 0,
1596 TTE_P = 0,
1597 TTE_EP = 0,
1598 TTE_W = 1,
1599 TTE_SW1 = 0,
1600 TTE_SW0 = 0,
1601 TTE_RSVD1 = 0,
1602 TTE_Size = 0,
1603 }
1604attr_data {
1605NAME = .My_User_Section_4v011,
1606 hypervisor
1607}
1608.data
1609.global user_data_begin_011
1610user_data_begin_011:
1611.xword 0xe2faba6d06c28930
1612.xword 0xeb17ac2bc38a58c1
1613.xword 0xb82aeb3b264dd259
1614.xword 0xb68211db06aea937
1615.xword 0x05082906aae4d7b4
1616.xword 0x6ddfd83f3e9a6b87
1617.xword 0x15f5c009f48a5dfe
1618.xword 0x57519c7e517d5a47
1619
1620 .word 0x1684b
1621 .word 0xe9eb
1622 .word 0x39e
1623 .word 0x15b8
1624
1625
1626SECTION .My_User_Section_4v012 TEXT_VA=MY_USER_TEXT_VA012, DATA_VA=MY_USER_DATA_VA012
1627attr_text {
1628 Name = .My_User_Section_4v012,
1629 part_0_ctx_nonzero_tsb_config_2,
1630 VA = MY_USER_TEXT_VA012,
1631 RA = MY_USER_TEXT_PA012,
1632 PA = MY_USER_TEXT_PA012,
1633 TTE_Context = PCONTEXT,
1634 TTE_V = 1,
1635 TTE_NFO = 0,
1636 TTE_L = 0,
1637 TTE_Soft = 0,
1638 TTE_IE = 0,
1639 TTE_E = 0,
1640 TTE_CP = 1,
1641 TTE_CV = 0,
1642 TTE_P = 0,
1643 TTE_EP = 1,
1644 TTE_W = 0,
1645 TTE_SW1 = 0,
1646 TTE_SW0 = 0,
1647 TTE_RSVD1 = 0,
1648 TTE_Size = 0,
1649 }
1650attr_text {
1651NAME = .My_User_Section_4v012,
1652 hypervisor
1653}
1654.text
1655.global user_code_begin_012
1656user_code_begin_012:
1657 cmp %i0, %l1
1658 bne FAIL
1659 mov %g0, %i0
1660 setx user_code_begin_013, %g2, %l4
1661 jmp %l4
1662 nop
1663FAIL: EXIT_BAD
1664 nop
1665
1666attr_data {
1667 Name = .My_User_Section_4v012,
1668 part_0_ctx_nonzero_tsb_config_1,
1669 VA = MY_USER_DATA_VA012,
1670 RA = MY_nc_DATA_RA012,
1671 PA = MY_nc_DATA_PA012,
1672 TTE_Context = PCONTEXT,
1673 TTE_V = 1,
1674 TTE_NFO = 0,
1675 TTE_L = 0,
1676 TTE_Soft = 0,
1677 TTE_IE = 0,
1678 TTE_E = 0,
1679 TTE_CP = 0,
1680 TTE_CV = 0,
1681 TTE_P = 0,
1682 TTE_EP = 0,
1683 TTE_W = 1,
1684 TTE_SW1 = 0,
1685 TTE_SW0 = 0,
1686 TTE_RSVD1 = 0,
1687 TTE_Size = 0,
1688 }
1689attr_data {
1690NAME = .My_User_Section_4v012,
1691 hypervisor
1692}
1693.data
1694.global user_data_begin_012
1695user_data_begin_012:
1696.xword 0xe7719c91a7d39000
1697.xword 0x897bf53fdfab4acf
1698.xword 0x33641c943c252a55
1699.xword 0x7a6152bedcb6d45a
1700.xword 0xc402d285b09a5315
1701.xword 0x113780fae604dd95
1702.xword 0xf4b4dc9fdda745da
1703.xword 0x4541714dba5a4e49
1704
1705 .word 0x1001b
1706 .word 0x8080
1707 .word 0x1008a
1708 .word 0x9431
1709
1710
1711SECTION .My_User_Section_4v013 TEXT_VA=MY_USER_TEXT_VA013, DATA_VA=MY_USER_DATA_VA013
1712attr_text {
1713 Name = .My_User_Section_4v013,
1714 part_0_ctx_nonzero_tsb_config_2,
1715 VA = MY_USER_TEXT_VA013,
1716 RA = MY_USER_TEXT_PA013,
1717 PA = MY_USER_TEXT_PA013,
1718 TTE_Context = PCONTEXT,
1719 TTE_V = 1,
1720 TTE_NFO = 0,
1721 TTE_L = 0,
1722 TTE_Soft = 0,
1723 TTE_IE = 0,
1724 TTE_E = 0,
1725 TTE_CP = 1,
1726 TTE_CV = 0,
1727 TTE_P = 0,
1728 TTE_EP = 1,
1729 TTE_W = 0,
1730 TTE_SW1 = 0,
1731 TTE_SW0 = 0,
1732 TTE_RSVD1 = 0,
1733 TTE_Size = 0,
1734 }
1735attr_text {
1736NAME = .My_User_Section_4v013,
1737 hypervisor
1738}
1739.text
1740.global user_code_begin_013
1741user_code_begin_013:
1742 EXIT_GOOD
1743 nop
1744
1745attr_data {
1746 Name = .My_User_Section_4v013,
1747 part_0_ctx_nonzero_tsb_config_1,
1748 VA = MY_USER_DATA_VA013,
1749 RA = MY_nc_DATA_RA013,
1750 PA = MY_nc_DATA_PA013,
1751 TTE_Context = PCONTEXT,
1752 TTE_V = 1,
1753 TTE_NFO = 0,
1754 TTE_L = 0,
1755 TTE_Soft = 0,
1756 TTE_IE = 0,
1757 TTE_E = 0,
1758 TTE_CP = 0,
1759 TTE_CV = 0,
1760 TTE_P = 0,
1761 TTE_EP = 0,
1762 TTE_W = 1,
1763 TTE_SW1 = 0,
1764 TTE_SW0 = 0,
1765 TTE_RSVD1 = 0,
1766 TTE_Size = 0,
1767 }
1768attr_data {
1769NAME = .My_User_Section_4v013,
1770 hypervisor
1771}
1772.data
1773.global user_data_begin_013
1774user_data_begin_013:
1775.xword 0xf9d14275b20204ee
1776.xword 0xcbd5e7e62934200b
1777.xword 0x88d5a3eb459d773d
1778.xword 0x1113616971dbf6ad
1779.xword 0x9208e6261dbbac60
1780.xword 0x6ad4e3984dc85a86
1781.xword 0x5b8aaa327733b2bc
1782.xword 0x0178b83acce0d7fa
1783.xword 0xd6cc7f8e1fe93d33
1784 .word 0x137a8
1785 .word 0xa14
1786 .word 0xc9a1
1787 .word 0x14d93
1788
1789
1790.global DATA_ACCESS_ERROR_HANDLER
1791.global INST_ACCESS_ERROR_HANDLER
1792.global MEM_ADDR_HANDLER
1793
1794SECTION .HTRAPS
1795.text
1796DATA_ACCESS_ERROR_HANDLER:
1797 add %g0, SFSR_VA, %g5 !
1798 ldxa [%g5]ASI_DSFSR, %o1 !
1799 cmp %o1, 0x1
1800 bne FAIL
1801 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1802 ldxa [%g6]ASI_SFAR, %o1
1803 cmp %o1, %l3
1804 bne FAIL
1805 !!issue demap pg
1806 xor %o1, 0x1fff, %o1
1807 stxa %g0, [%o1] ASI_DMMU_DEMAP
1808 !!disable errors
1809 add %g0, CERER_VA, %g3
1810 stxa %g0, [%g3]ASI_CERER
1811 add %g0, 1, %i0 !
1812 retry
1813 nop
1814
1815INST_ACCESS_ERROR_HANDLER:
1816 add %g0, SFSR_VA, %g5 !
1817 !!ldxa [%g5]ASI_ISFSR, %o1 !
1818 !!cmp %o1, 0x1
1819 !!bne FAIL
1820 add %g0, SFAR_VA, %g6 !!g6 has sfar va
1821 ldxa [%g6]ASI_SFAR, %o1
1822 !!brnz %o1, FAIL
1823 rdpr %tpc, %o1
1824 cmp %o1, %l4 !! cmp pc matches the expected pc
1825 bne FAIL
1826 !!issue demap pg
1827 srlx %o1, 0xd, %o1
1828 sllx %o1, 0xd, %o1
1829 stxa %g0, [%o1] ASI_IMMU_DEMAP
1830 add %g0, 1, %i0 !
1831 retry
1832MEM_ADDR_HANDLER:
1833 !!read the four D$ entries and inject errors
1834 !!D$ entry 0
1835 sll %i3, 1, %g1
1836 mov %g0, %g2
1837 cmp %l4, 7
1838 bg,a .+8
1839 or %g0, 0x8, %g2
1840 and %l4, 0x7, %g3
1841 sll %g1, %g3, %g4
1842
1843 setx cache_index_data, %g5, %g6
1844
1845DC_ENTRY0:
1846 ldx [%g6], %o1
1847 stxa %o1, [%g0+%i1]ASI_DC_TAG
1848 ldx [%g6 +0x8], %o2
1849 add %g4, %g2, %i5
1850 !! inject err in way0
1851 cmp %l0, 0
1852 bz,a .+8
1853 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1854 cmp %l0, 4
1855 bz,a .+8
1856 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1857
1858DC_ENTRY1:
1859
1860 !!D$ entry 1
1861 ldx [%g6 + 0x10], %o1
1862 stxa %o1, [%i2 + %i1]ASI_DC_TAG
1863 ldx [%g6 + 0x18], %o2
1864 !! inject err in way1
1865 add %g4, %g2, %i5
1866 add %i2, %i5, %i5
1867 cmp %l0, 1
1868 bz,a .+8
1869 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1870 cmp %l0, 4
1871 bz,a .+8
1872 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1873
1874DC_ENTRY2:
1875
1876 !!D$ entry 2
1877 ldx [%g6 + 0x20], %o1
1878 stxa %o1, [%i3 + %i1]ASI_DC_TAG
1879 ldx [%g6 + 0x28], %o2
1880 add %g4, %g2, %i5
1881 add %i3, %i5, %i5
1882 !! inject err in way2
1883 cmp %l0, 2
1884 bz,a .+8
1885 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1886 cmp %l0, 4
1887 bz,a .+8
1888 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1889
1890DC_ENTRY3:
1891
1892 !!D$ entry 3
1893 ldx [%g6 + 0x30], %o1
1894 stxa %o1, [%i4 + %i1]ASI_DC_TAG
1895 ldx [%g6 + 0x38], %o2
1896
1897 add %g4, %g2, %i5
1898 add %i4, %i5, %i5
1899 !! inject err in way3
1900 cmp %l0, 3
1901 bge,a .+8
1902 stxa %o2, [%i5+%i1]ASI_DC_DATA !! store data with parity err
1903 nop
1904 done
1905
1906HW_CORR_ERROR_HANDLER:
1907RD_DESR:
1908 ldxa [%g0]0x4c, %o1 !! read the DESR
1909CHL_ERRT:
1910 srlx %o1, 56, %o2 !! chk the err_type
1911 and %o2, 0x1F, %o0
1912 cmp %o0, DCDP_ERR_TYPE
1913 bne FAIL
1914CHK_S_M_BIT:
1915 srlx %o2, 5, %o2 !! chk s and M bit clear
1916 and %o2, 3, %o0
1917 cmp %o0, 0
1918 bne FAIL
1919CHK_F_BIT:
1920
1921 srlx %o2, 2, %o0 !! chk F bit set
1922 cmp %o0, 1
1923 bne FAIL
1924CHK_WAY:
1925 srlx %i1, 4, %o0 !! get the index from i1
1926 and %o1, 0x3f, %o2 !! get the index
1927 cmp %o2, %o0
1928 bne FAIL
1929 sra %o1, 7, %o2 !! get the way
1930 subcc %l0, %o2, %o0 !! in case of err in all ways, way 0 is reported.
1931 bz .+16
1932 cmp %o0, %l0
1933 bnz FAIL
1934 nop
1935RD_DTAG0:
1936 mov %g0, %o2
1937 ldxa [%g0+%i1]ASI_DC_TAG, %o1
1938 and %o1, 0x3, %i6
1939 cmp %i6, 3
1940 bz,a .+8
1941 add %o2, 1, %o2
1942
1943RD_DTAG1:
1944 ldxa [%i2+%i1]ASI_DC_TAG, %o1
1945 and %o1, 0x3, %i6
1946 cmp %i6, 3
1947 bz,a .+8
1948 add %o2, 1, %o2
1949
1950RD_DTAG2:
1951 ldxa [%i3+%i1]ASI_DC_TAG, %o1
1952 and %o1, 0x3, %i6
1953 cmp %i6, 3
1954 bz,a .+8
1955 add %o2, 1, %o2
1956
1957RD_DTAG3:
1958 ldxa [%i4+%i1]ASI_DC_TAG, %o1
1959 and %o1, 0x3, %i6
1960 cmp %i6, 3
1961 bz,a .+8
1962 add %o2, 1, %o2
1963
1964 cmp %l6, %o2 !! make sure no. of valid ways equal expected data
1965 bne FAIL
1966 add %g0, 1, %i0
1967 retry
1968
1969INVALID_ASI_HANDLER:
1970 done
1971 nop
1972
1973DAE_NFO_PG_HANDLER:
1974 setx cache_index_data, %g1, %g4
1975 sll %i3, 1, %g1
1976 mov %g0, %g2
1977
1978 ST_WAY0:
1979 ldxa [%g0+%i1]ASI_DC_TAG, %o1
1980 sllx %o1, 1, %o1 !! move tag parity into bit 32
1981 srl %o1, 1, %o1 !! make upper 32 bits 0
1982 stx %o1, [%g4]
1983 add %g1, %g2, %i5
1984 ldxa [%i5+%i1]ASI_DC_DATA, %o2
1985 stx %o2, [%g4 + 0x8]
1986
1987 srl %o1, 2, %o1
1988 sllx %o1, 11, %o1
1989
1990 ST_WAY1:
1991 ldxa [%i2 + %i1]ASI_DC_TAG, %o1
1992 sllx %o1, 1, %o1 !! move tag parity into bit 32
1993 srl %o1, 1, %o1 !! make upper 32 bits 0
1994 stx %o1, [%g4 + 0x10]
1995 add %g1, %g2, %i5
1996 add %i2, %i5, %i5
1997 ldxa [%i5 + %i1]ASI_DC_DATA, %o2
1998 stx %o2, [%g4 + 0x18]
1999
2000 srl %o1, 2, %o1
2001 sllx %o1, 11, %o1
2002
2003 ST_WAY2:
2004 ldxa [%i3 + %i1]ASI_DC_TAG, %o1
2005 sllx %o1, 1, %o1 !! move tag parity into bit 32
2006 srl %o1, 1, %o1 !! make upper 32 bits 0
2007 stx %o1, [%g4 + 0x20]
2008 add %g1, %g2, %i5
2009 add %i3, %i5, %i5
2010 ldxa [%i5 + %i1]ASI_DC_DATA, %o2
2011 stx %o2, [%g4 + 0x28]
2012
2013 srl %o1, 2, %o1
2014 sllx %o1, 11, %o1
2015
2016 ST_WAY3:
2017 ldxa [%i4 + %i1]ASI_DC_TAG, %o1
2018 sllx %o1, 1, %o1 !! move tag parity into bit 32
2019 srl %o1, 1, %o1 !! make upper 32 bits 0
2020 stx %o1, [%g4 + 0x30]
2021 add %g1, %g2, %i5
2022 add %i4, %i5, %i5
2023 ldxa [%i5 + %i1]ASI_DC_DATA, %o2
2024 stx %o2, [%g4 + 0x38]
2025
2026 srl %o1, 2, %o1
2027 sllx %o1, 11, %o1
2028
2029 done
2030 nop
2031
2032FAIL: EXIT_BAD
2033 nop
2034
2035.data
2036.align 64
2037cache_index_data:
2038.xword 0
2039.xword 0
2040.xword 0
2041.xword 0
2042.xword 0
2043.xword 0
2044.xword 0
2045.xword 0
2046.xword 0
2047.xword 0
2048.xword 0
2049.xword 0
2050.xword 0