Commit | Line | Data |
---|---|---|
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 | ||
233 | main: /* 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 | ||
248 | set_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 | |
275 | user_data_start: | |
276 | .word 0x12345678 | |
277 | .word 0x9a9b9c9d | |
278 | .word 0x00000000 | |
279 | .word 0xffffffff | |
280 | ||
281 | !#*********************************************************************** | |
282 | ||
283 | SECTION .My_User_Section_4v000 TEXT_VA=MY_USER_TEXT_VA000, DATA_VA=MY_USER_DATA_VA000 | |
284 | attr_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 | } | |
307 | attr_text { | |
308 | NAME = .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 | |
324 | user_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 | ||
340 | LOOP0_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 | ||
365 | chk_cache_hit: | |
366 | ldx [%l4], %o4 !cache hit, no trap shd be seen | |
367 | brnz %i1, FAIL | |
368 | chk_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 | |
380 | chk_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 | |
399 | chk_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 | ||
419 | chk_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 | ||
448 | FAIL: | |
449 | EXIT_BAD | |
450 | ||
451 | attr_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 | } | |
474 | attr_data { | |
475 | NAME = .My_User_Section_4v000, | |
476 | hypervisor | |
477 | } | |
478 | .data | |
479 | .global user_data_begin_000 | |
480 | user_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 | ||
560 | SECTION .My_User_Section_4v001 TEXT_VA=MY_USER_TEXT_VA001, DATA_VA=MY_USER_DATA_VA001 | |
561 | attr_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 | } | |
584 | attr_text { | |
585 | NAME = .My_User_Section_4v001, | |
586 | hypervisor | |
587 | } | |
588 | ||
589 | .text | |
590 | .global user_code_begin_001 | |
591 | user_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 | ||
621 | chk_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 | ||
635 | FAIL: | |
636 | EXIT_BAD | |
637 | nop | |
638 | ||
639 | attr_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 | } | |
662 | attr_data { | |
663 | NAME = .My_User_Section_4v001, | |
664 | hypervisor | |
665 | } | |
666 | .data | |
667 | .global user_data_begin_001 | |
668 | user_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 | ||
702 | SECTION .My_User_Section_4v002 TEXT_VA=MY_USER_TEXT_VA002, DATA_VA=MY_USER_DATA_VA002 | |
703 | attr_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 | } | |
726 | attr_text { | |
727 | NAME = .My_User_Section_4v002, | |
728 | hypervisor | |
729 | } | |
730 | ||
731 | .text | |
732 | .global user_code_begin_002 | |
733 | user_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 | ||
771 | chk_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 | |
796 | FAIL: | |
797 | EXIT_BAD | |
798 | nop | |
799 | ||
800 | attr_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 | } | |
823 | attr_data { | |
824 | NAME = .My_User_Section_4v002, | |
825 | hypervisor | |
826 | } | |
827 | .data | |
828 | .global user_data_begin_002 | |
829 | user_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 | ||
882 | SECTION .My_User_Section_4v003 TEXT_VA=MY_USER_TEXT_VA003, DATA_VA=MY_USER_DATA_VA003 | |
883 | attr_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 | } | |
906 | attr_text { | |
907 | NAME = .My_User_Section_4v003, | |
908 | hypervisor | |
909 | } | |
910 | ! same as case 2 uses hp stores. | |
911 | .text | |
912 | .global user_code_begin_003 | |
913 | user_code_begin_003: | |
914 | add %g0, 1, %l1 | |
915 | mov %g0, %l2 | |
916 | add %g0, 1, %l3 | |
917 | ||
918 | FAIL: | |
919 | EXIT_BAD | |
920 | nop | |
921 | ||
922 | attr_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 | } | |
945 | attr_data { | |
946 | NAME = .My_User_Section_4v003, | |
947 | hypervisor | |
948 | } | |
949 | .data | |
950 | .global user_data_begin_003 | |
951 | user_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 | ||
976 | SECTION .My_User_Section_4v004 TEXT_VA=MY_USER_TEXT_VA004, DATA_VA=MY_USER_DATA_VA004 | |
977 | attr_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 | } | |
1000 | attr_text { | |
1001 | NAME = .My_User_Section_4v004, | |
1002 | hypervisor | |
1003 | } | |
1004 | .text | |
1005 | .global user_code_begin_004 | |
1006 | user_code_begin_004: | |
1007 | mov %g0, %l2 | |
1008 | !! turn off error injection and do diag accesses | |
1009 | ||
1010 | FAIL: EXIT_BAD | |
1011 | nop | |
1012 | ||
1013 | attr_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 | } | |
1036 | attr_data { | |
1037 | NAME = .My_User_Section_4v004, | |
1038 | hypervisor | |
1039 | } | |
1040 | .data | |
1041 | .global user_data_begin_004 | |
1042 | .global store_ecc_data | |
1043 | user_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 | |
1070 | store_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 | ||
1087 | SECTION .My_User_Section_4v005 TEXT_VA=MY_USER_TEXT_VA005, DATA_VA=MY_USER_DATA_VA005 | |
1088 | attr_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 | } | |
1111 | attr_text { | |
1112 | NAME = .My_User_Section_4v005, | |
1113 | hypervisor | |
1114 | } | |
1115 | ||
1116 | !! inject error into all the scratchpad entries. | |
1117 | .text | |
1118 | .global user_code_begin_005 | |
1119 | user_code_begin_005: | |
1120 | mov %g0, %i3 !! disable err -injection | |
1121 | add %g0, 1, %l3 !! l3 has the expected ecc mask | |
1122 | ||
1123 | FAIL: EXIT_BAD | |
1124 | nop | |
1125 | ||
1126 | attr_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 | } | |
1149 | attr_data { | |
1150 | NAME = .My_User_Section_4v005, | |
1151 | hypervisor | |
1152 | } | |
1153 | .data | |
1154 | .global user_data_begin_005 | |
1155 | user_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 | ||
1180 | SECTION .My_User_Section_4v006 TEXT_VA=MY_USER_TEXT_VA006, DATA_VA=MY_USER_DATA_VA006 | |
1181 | attr_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 | } | |
1204 | attr_text { | |
1205 | NAME = .My_User_Section_4v006, | |
1206 | hypervisor | |
1207 | } | |
1208 | .text | |
1209 | .global user_code_begin_006 | |
1210 | user_code_begin_006: | |
1211 | cmp %i0, %l1 | |
1212 | bne FAIL | |
1213 | mov %g0, %i0 | |
1214 | FAIL: EXIT_BAD | |
1215 | nop | |
1216 | ||
1217 | attr_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 | } | |
1240 | attr_data { | |
1241 | NAME = .My_User_Section_4v006, | |
1242 | hypervisor | |
1243 | } | |
1244 | .data | |
1245 | .global user_data_begin_006 | |
1246 | user_data_begin_006: | |
1247 | .word 0x7551 | |
1248 | .word 0x1535d | |
1249 | .word 0x59 | |
1250 | .word 0x72f7 | |
1251 | ||
1252 | ||
1253 | SECTION .My_User_Section_4v007 TEXT_VA=MY_USER_TEXT_VA007, DATA_VA=MY_USER_DATA_VA007 | |
1254 | attr_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 | } | |
1277 | attr_text { | |
1278 | NAME = .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 | |
1287 | user_code_begin_007: | |
1288 | cmp %i0, %l1 | |
1289 | bne FAIL | |
1290 | mov %g0, %i0 | |
1291 | mov %g0, %l1 | |
1292 | ||
1293 | ||
1294 | ||
1295 | FAIL: EXIT_BAD | |
1296 | nop | |
1297 | ||
1298 | ||
1299 | attr_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 | } | |
1322 | attr_data { | |
1323 | NAME = .My_User_Section_4v007, | |
1324 | hypervisor | |
1325 | } | |
1326 | .data | |
1327 | .global user_data_begin_007 | |
1328 | user_data_begin_007: | |
1329 | .word 0x14a3d | |
1330 | .word 0x798d | |
1331 | .word 0xfdd5 | |
1332 | .word 0x9d05 | |
1333 | ||
1334 | ||
1335 | SECTION .My_User_Section_4v008 TEXT_VA=MY_USER_TEXT_VA008, DATA_VA=MY_USER_DATA_VA008 | |
1336 | attr_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 | } | |
1359 | attr_text { | |
1360 | NAME = .My_User_Section_4v008, | |
1361 | hypervisor | |
1362 | } | |
1363 | .text | |
1364 | .global user_code_begin_008 | |
1365 | user_code_begin_008: | |
1366 | cmp %i0, %l1 | |
1367 | bne FAIL | |
1368 | mov %g0, %i0 | |
1369 | mov %g0, %l1 | |
1370 | ||
1371 | ||
1372 | FAIL: EXIT_BAD | |
1373 | nop | |
1374 | ||
1375 | attr_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 | } | |
1398 | attr_data { | |
1399 | NAME = .My_User_Section_4v008, | |
1400 | hypervisor | |
1401 | } | |
1402 | .data | |
1403 | .global user_data_begin_008 | |
1404 | user_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 | ||
1416 | SECTION .HTRAPS | |
1417 | .text | |
1418 | DATA_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 | ||
1428 | INST_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 | ||
1446 | MEM_ADDR_HANDLER: | |
1447 | done | |
1448 | nop | |
1449 | ||
1450 | HW_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 | ||
1457 | INVALID_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 | |
1479 | STORES_7: | |
1480 | stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj | |
1481 | STORES_6: | |
1482 | stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj | |
1483 | STORES_5: | |
1484 | stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj | |
1485 | STORES_4: | |
1486 | stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj | |
1487 | STORES_3: | |
1488 | stxa %g1, [%g0]ASI_ERR_INJ ! no err injected on wr to err inj | |
1489 | STORES_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 | ||
1493 | DONE: | |
1494 | done | |
1495 | nop | |
1496 | ||
1497 | RECOVERABLE_ERR_HANDLER: | |
1498 | stxa %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. | |
1501 | CHK_ERRT: | |
1502 | srlx %g1, 56, %g2 !! chk the err_type | |
1503 | and %g2, 0x1F, %g3 | |
1504 | cmp %g3, SBDPU_ERR_TYPE | |
1505 | bne FAIL | |
1506 | CHK_S_BIT: | |
1507 | srlx %g2, 5, %g2 !! chk s bit | |
1508 | and %g2, 1, %g3 | |
1509 | cmp %g3, 1 | |
1510 | bne FAIL | |
1511 | CHK_F_BIT: | |
1512 | srlx %g2, 2, %g3 !! chk F bit set | |
1513 | cmp %g3, 1 | |
1514 | bne FAIL | |
1515 | CHK_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 | ||
1524 | FAIL: EXIT_BAD | |
1525 | nop | |
1526 | ||
1527 | .data | |
1528 | ||
1529 | ||
1530 | ||
1531 | ||
1532 | ||
1533 |