Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * OpenSPARC T2 Processor File: interrupt_pci_regs.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 MAIN_PAGE_NUCLEUS_ALSO | |
39 | #define MAIN_PAGE_HV_ALSO | |
40 | ||
41 | #include "hboot.s" | |
42 | #include "asi_s.h" | |
43 | #include "peu_defines.h" | |
44 | ||
45 | /************************************************************************ | |
46 | Test case code start | |
47 | ************************************************************************/ | |
48 | ||
49 | .text | |
50 | .global main | |
51 | ||
52 | main: | |
53 | ||
54 | ! Switch to hypervisor mode. | |
55 | ||
56 | ta T_CHANGE_HPRIV | |
57 | nop | |
58 | ta T_CHANGE_PRIV | |
59 | nop | |
60 | pstate: | |
61 | rdpr %pstate, %l0 | |
62 | and %l0, 0x2, %l1 | |
63 | wrpr %l0, %l1, %pstate ! Disable interrupts | |
64 | ||
65 | ! Interrupt Mapping registers | |
66 | map_write_1: | |
67 | setx PCI_E_INT_MAP_ADDR, %g1, %g2 | |
68 | set PCI_E_INT_MAP_COUNT, %g3 | |
69 | set PCI_E_INT_MAP_STEP, %g4 | |
70 | setx 0x80000000fe0003C0, %g1, %g5 | |
71 | ||
72 | map_write_1_loop: | |
73 | stx %g5, [%g2] | |
74 | addx %g2, %g4, %g2 | |
75 | cmp %g3, 1 | |
76 | bne map_write_1_loop | |
77 | dec %g3 | |
78 | ||
79 | ! Two more registers to write, and skip over "missing" 2 registers. | |
80 | map_write_1_extra: | |
81 | addx %g2, %g4, %g2 | |
82 | addx %g2, %g4, %g2 | |
83 | stx %g5, [%g2] | |
84 | addx %g2, %g4, %g2 | |
85 | stx %g5, [%g2] | |
86 | ||
87 | map_read_1: | |
88 | setx PCI_E_INT_MAP_ADDR, %g1, %g2 | |
89 | set PCI_E_INT_MAP_COUNT, %g3 | |
90 | ||
91 | map_read_1_loop: | |
92 | ldx [%g2], %g7 | |
93 | addx %g2, %g4, %g2 | |
94 | cmp %g7, %g5 | |
95 | bne test_failed | |
96 | nop | |
97 | cmp %g3, 1 | |
98 | bne map_read_1_loop | |
99 | dec %g3 | |
100 | ||
101 | ! Two more registers to read, and ship over "missing" 2 registers. | |
102 | map_read_1_extra: | |
103 | addx %g2, %g4, %g2 | |
104 | addx %g2, %g4, %g2 | |
105 | ldx [%g2], %g7 | |
106 | addx %g2, %g4, %g2 | |
107 | cmp %g7, %g5 | |
108 | bne test_failed | |
109 | nop | |
110 | ldx [%g2], %g7 | |
111 | cmp %g7, %g5 | |
112 | bne test_failed | |
113 | nop | |
114 | ||
115 | map_write_0: | |
116 | setx PCI_E_INT_MAP_ADDR, %g1, %g2 | |
117 | set PCI_E_INT_MAP_COUNT, %g3 | |
118 | set PCI_E_INT_MAP_STEP, %g4 | |
119 | ||
120 | map_write_0_loop: | |
121 | stx %g0, [%g2] | |
122 | addx %g2, %g4, %g2 | |
123 | cmp %g3, 1 | |
124 | bne map_write_0_loop | |
125 | dec %g3 | |
126 | ||
127 | ! Two more registers to write, and skip over "missing" 2 registers. | |
128 | map_write_0_extra: | |
129 | addx %g2, %g4, %g2 | |
130 | addx %g2, %g4, %g2 | |
131 | stx %g0, [%g2] | |
132 | addx %g2, %g4, %g2 | |
133 | stx %g0, [%g2] | |
134 | ||
135 | map_read_0: | |
136 | setx PCI_E_INT_MAP_ADDR, %g1, %g2 | |
137 | set PCI_E_INT_MAP_COUNT, %g3 | |
138 | ||
139 | map_read_0_loop: | |
140 | ldx [%g2], %g7 | |
141 | addx %g2, %g4, %g2 | |
142 | cmp %g7, 0 | |
143 | bne test_failed | |
144 | nop | |
145 | cmp %g3, 1 | |
146 | bne map_read_0_loop | |
147 | dec %g3 | |
148 | ||
149 | ! Two more registers to read, and ship over "missing" 2 registers. | |
150 | map_read_0_extra: | |
151 | addx %g2, %g4, %g2 | |
152 | addx %g2, %g4, %g2 | |
153 | ldx [%g2], %g7 | |
154 | addx %g2, %g4, %g2 | |
155 | cmp %g7, 0 | |
156 | bne test_failed | |
157 | nop | |
158 | ldx [%g2], %g7 | |
159 | cmp %g7, 0 | |
160 | bne test_failed | |
161 | nop | |
162 | ||
163 | ! Interrupt Clear registers | |
164 | ||
165 | clear: | |
166 | setx PCI_E_INT_CLEAR_ADDR, %g1, %g2 | |
167 | set PCI_E_INT_CLEAR_COUNT, %g3 | |
168 | set PCI_E_INT_CLEAR_STEP, %g4 | |
169 | set 3, %g5 | |
170 | ||
171 | clear_write_1_loop: | |
172 | stx %g5, [%g2] | |
173 | addx %g2, %g4, %g2 | |
174 | cmp %g3, 1 | |
175 | bne clear_write_1_loop | |
176 | dec %g3 | |
177 | ||
178 | ! Two more registers to write, and skip over "missing" 2 registers. | |
179 | clear_write_1_extra: | |
180 | addx %g2, %g4, %g2 | |
181 | addx %g2, %g4, %g2 | |
182 | stx %g5, [%g2] | |
183 | addx %g2, %g4, %g2 | |
184 | stx %g5, [%g2] | |
185 | ||
186 | clear_read_1: | |
187 | setx PCI_E_INT_CLEAR_ADDR, %g1, %g2 | |
188 | set PCI_E_INT_CLEAR_COUNT, %g3 | |
189 | ||
190 | clear_read_1_loop: | |
191 | ldx [%g2], %g7 | |
192 | addx %g2, %g4, %g2 | |
193 | cmp %g7, %g5 | |
194 | bne test_failed | |
195 | nop | |
196 | cmp %g3, 1 | |
197 | bne clear_read_1_loop | |
198 | dec %g3 | |
199 | ||
200 | ! Two more registers to read, and ship over "missing" 2 registers. | |
201 | clear_read_1_extra: | |
202 | addx %g2, %g4, %g2 | |
203 | addx %g2, %g4, %g2 | |
204 | ldx [%g2], %g7 | |
205 | addx %g2, %g4, %g2 | |
206 | cmp %g7, %g5 | |
207 | bne test_failed | |
208 | nop | |
209 | ldx [%g2], %g7 | |
210 | cmp %g7, %g5 | |
211 | bne test_failed | |
212 | nop | |
213 | ||
214 | clear_write_0: | |
215 | setx PCI_E_INT_CLEAR_ADDR, %g1, %g2 | |
216 | set PCI_E_INT_CLEAR_COUNT, %g3 | |
217 | set PCI_E_INT_CLEAR_STEP, %g4 | |
218 | ||
219 | clear_write_0_loop: | |
220 | stx %g0, [%g2] | |
221 | addx %g2, %g4, %g2 | |
222 | cmp %g3, 1 | |
223 | bne clear_write_0_loop | |
224 | dec %g3 | |
225 | ||
226 | ! Two more registers to write, and skip over "missing" 2 registers. | |
227 | clear_write_0_extra: | |
228 | addx %g2, %g4, %g2 | |
229 | addx %g2, %g4, %g2 | |
230 | stx %g0, [%g2] | |
231 | addx %g2, %g4, %g2 | |
232 | stx %g0, [%g2] | |
233 | ||
234 | clear_read_0: | |
235 | setx PCI_E_INT_CLEAR_ADDR, %g1, %g2 | |
236 | set PCI_E_INT_CLEAR_COUNT, %g3 | |
237 | ||
238 | clear_read_0_loop: | |
239 | ldx [%g2], %g7 | |
240 | addx %g2, %g4, %g2 | |
241 | cmp %g7, 0 | |
242 | bne test_failed | |
243 | nop | |
244 | cmp %g3, 1 | |
245 | bne clear_read_0_loop | |
246 | dec %g3 | |
247 | ||
248 | ! Two more registers to read, and ship over "missing" 2 registers. | |
249 | clear_read_0_extra: | |
250 | addx %g2, %g4, %g2 | |
251 | addx %g2, %g4, %g2 | |
252 | ldx [%g2], %g7 | |
253 | addx %g2, %g4, %g2 | |
254 | cmp %g7, 0 | |
255 | bne test_failed | |
256 | nop | |
257 | ldx [%g2], %g7 | |
258 | cmp %g7, 0 | |
259 | bne test_failed | |
260 | nop | |
261 | ||
262 | ! Interrupt Retry Timer register | |
263 | ||
264 | retry_timer_write_1: | |
265 | setx PCI_E_INT_RETRY_TIMER_ADDR, %g1, %g2 | |
266 | setx 0x01ffffff, %g1, %g3 | |
267 | stx %g3, [%g2] | |
268 | ||
269 | retry_timer_read_1: | |
270 | ldx [%g2], %g4 | |
271 | cmp %g4, %g3 | |
272 | bne test_failed | |
273 | nop | |
274 | ||
275 | retry_timer_write_0: | |
276 | stx %g0, [%g2] | |
277 | ||
278 | retry_timer_read_0: | |
279 | ldx [%g2], %g5 | |
280 | cmp %g5, 0 | |
281 | bne test_failed | |
282 | nop | |
283 | ||
284 | ! Interrupt State Status registers 1 and 2, read only | |
285 | ||
286 | state_status: | |
287 | setx PCI_E_INT_STATE_STATUS_1_ADDR, %g1, %g2 | |
288 | setx PCI_E_INT_STATE_STATUS_2_ADDR, %g1, %g3 | |
289 | ldx [%g2], %g0 | |
290 | ldx [%g3], %g0 | |
291 | ||
292 | ! INTX Status register, read only | |
293 | ||
294 | intx_status: | |
295 | setx PCI_E_INTX_STATUS_ADDR, %g1, %g2 | |
296 | ldx [%g2], %g0 | |
297 | ||
298 | ! INT A/B/C/D Clear registers, RW1C | |
299 | ||
300 | int_abcd_clear: | |
301 | set 1, %g7 | |
302 | setx PCI_E_INT_A_CLEAR_ADDR, %g1, %g2 | |
303 | setx PCI_E_INT_B_CLEAR_ADDR, %g1, %g3 | |
304 | setx PCI_E_INT_C_CLEAR_ADDR, %g1, %g4 | |
305 | setx PCI_E_INT_D_CLEAR_ADDR, %g1, %g5 | |
306 | ||
307 | int_abcd_clear_write: | |
308 | stx %g7, [%g2] | |
309 | stx %g7, [%g3] | |
310 | stx %g7, [%g4] | |
311 | stx %g7, [%g5] | |
312 | ||
313 | int_abce_clear_read: | |
314 | ldx [%g2], %g6 | |
315 | cmp %g6, 0 | |
316 | bne test_failed | |
317 | nop | |
318 | ||
319 | ldx [%g3], %g6 | |
320 | cmp %g6, 0 | |
321 | bne test_failed | |
322 | nop | |
323 | ||
324 | ldx [%g4], %g6 | |
325 | cmp %g6, 0 | |
326 | bne test_failed | |
327 | nop | |
328 | ||
329 | ldx [%g5], %g6 | |
330 | cmp %g6, 0 | |
331 | bne test_failed | |
332 | nop | |
333 | ||
334 | ! Event Queue Base Address register. | |
335 | ||
336 | event_que_base_addr: | |
337 | setx PCI_E_EV_QUE_BASE_ADDRESS_ADDR, %g1, %g2 | |
338 | ||
339 | event_que_base_addr_write_1: | |
340 | subx %g0, 1, %g3 | |
341 | stx %g3, [%g2] | |
342 | ||
343 | event_que_base_addr_read_1: | |
344 | setx 0xfffffffffff80000, %g1, %g3 | |
345 | ldx [%g2], %g4 | |
346 | cmp %g4, %g3 | |
347 | bne test_failed | |
348 | nop | |
349 | ||
350 | event_que_base_addr_write_0: | |
351 | stx %g0, [%g2] | |
352 | ||
353 | event_que_base_addr_read_0: | |
354 | ldx [%g2], %g4 | |
355 | cmp %g4, %g0 | |
356 | bne test_failed | |
357 | nop | |
358 | ||
359 | ! Event Queue Control Set registers, WO | |
360 | ||
361 | event_que_ctl_set: | |
362 | setx PCI_E_EV_QUE_CTL_SET_ADDR, %g1, %g2 | |
363 | set PCI_E_EV_QUE_CTL_SET_COUNT, %g3 | |
364 | set PCI_E_EV_QUE_CTL_SET_STEP, %g4 | |
365 | ||
366 | event_que_ctl_set_write_1: | |
367 | setx 0x100000000000, %g1, %g5 ! First only write the EN bit | |
368 | ||
369 | event_que_ctl_set_write_en_loop: | |
370 | stx %g5, [%g2] | |
371 | addx %g2, %g4, %g2 | |
372 | cmp %g3, 1 | |
373 | bne event_que_ctl_set_write_en_loop | |
374 | dec %g3 | |
375 | ||
376 | setx PCI_E_EV_QUE_CTL_SET_ADDR, %g1, %g2 | |
377 | set PCI_E_EV_QUE_CTL_SET_COUNT, %g3 | |
378 | setx 0x200000000000000, %g1, %g5 ! Next write the ENOVERR bit | |
379 | ||
380 | event_que_ctl_set_write_enoverr_loop: | |
381 | stx %g5, [%g2] | |
382 | addx %g2, %g4, %g2 | |
383 | cmp %g3, 1 | |
384 | bne event_que_ctl_set_write_enoverr_loop | |
385 | dec %g3 | |
386 | ||
387 | ! Event Queue State registers, RO | |
388 | ||
389 | event_que_ctl_state: | |
390 | setx PCI_E_EV_QUE_STATE_ADDR, %g1, %g2 | |
391 | setx PCI_E_EV_QUE_STATE_COUNT, %g1, %g3 | |
392 | setx PCI_E_EV_QUE_STATE_STEP, %g1, %g4 | |
393 | ||
394 | event_que_ctl_state_loop: | |
395 | ldx [%g2], %g5 | |
396 | addx %g2, %g4, %g2 | |
397 | cmp %g5, 4 | |
398 | bne test_failed | |
399 | nop | |
400 | ||
401 | cmp %g3, 1 | |
402 | bne event_que_ctl_state_loop | |
403 | dec %g3 | |
404 | ||
405 | ! Event Queue Control Clear registers, WO | |
406 | ||
407 | event_que_ctl_clear: | |
408 | setx PCI_E_EV_QUE_CTL_CLEAR_ADDR, %g1, %g2 | |
409 | setx PCI_E_EV_QUE_CTL_CLEAR_COUNT, %g1, %g3 | |
410 | setx PCI_E_EV_QUE_CTL_CLEAR_STEP, %g1, %g4 | |
411 | setx 0x200900000000000, %g1, %g5 | |
412 | ||
413 | event_que_ctl_clear_write_loop: | |
414 | stx %g5, [%g2] | |
415 | addx %g2, %g4, %g2 | |
416 | cmp %g3, 1 | |
417 | bne event_que_ctl_clear_write_loop | |
418 | dec %g3 | |
419 | ||
420 | ! Event Queue Tail registers | |
421 | ||
422 | event_que_tail: | |
423 | setx PCI_E_EV_QUE_TAIL_ADDR, %g1, %g2 | |
424 | setx PCI_E_EV_QUE_TAIL_COUNT, %g1, %g3 | |
425 | setx PCI_E_EV_QUE_TAIL_STEP, %g1, %g4 | |
426 | ||
427 | event_que_tail_write_1: | |
428 | set 0x7f, %g5 | |
429 | ||
430 | event_que_tail_write_1_loop: | |
431 | stx %g5, [%g2] | |
432 | addx %g2, %g4, %g2 | |
433 | cmp %g3, 1 | |
434 | bne event_que_tail_write_1_loop | |
435 | dec %g3 | |
436 | ||
437 | event_que_tail_read_1: | |
438 | setx PCI_E_EV_QUE_TAIL_ADDR, %g1, %g2 | |
439 | setx PCI_E_EV_QUE_TAIL_COUNT, %g1, %g3 | |
440 | ||
441 | event_que_tail_read_1_loop: | |
442 | ldx [%g2], %g7 | |
443 | cmp %g7, %g5 | |
444 | bne test_failed | |
445 | nop | |
446 | ||
447 | addx %g2, %g4, %g2 | |
448 | cmp %g3, 1 | |
449 | bne event_que_tail_read_1_loop | |
450 | dec %g3 | |
451 | ||
452 | event_que_tail_write_0: | |
453 | setx PCI_E_EV_QUE_TAIL_ADDR, %g1, %g2 | |
454 | setx PCI_E_EV_QUE_TAIL_COUNT, %g1, %g3 | |
455 | ||
456 | event_que_tail_write_0_loop: | |
457 | stx %g0, [%g2] | |
458 | addx %g2, %g4, %g2 | |
459 | cmp %g3, 1 | |
460 | bne event_que_tail_write_0_loop | |
461 | dec %g3 | |
462 | ||
463 | event_que_tail_read_0: | |
464 | setx PCI_E_EV_QUE_TAIL_ADDR, %g1, %g2 | |
465 | setx PCI_E_EV_QUE_TAIL_COUNT, %g1, %g3 | |
466 | ||
467 | event_que_tail_read_0_loop: | |
468 | ldx [%g2], %g7 | |
469 | cmp %g7, 0 | |
470 | bne test_failed | |
471 | nop | |
472 | ||
473 | addx %g2, %g4, %g2 | |
474 | cmp %g3, 1 | |
475 | bne event_que_tail_read_0_loop | |
476 | dec %g3 | |
477 | ||
478 | ! Event Queue Head registers | |
479 | ||
480 | event_que_head: | |
481 | setx PCI_E_EV_QUE_HEAD_ADDR, %g1, %g2 | |
482 | setx PCI_E_EV_QUE_HEAD_COUNT, %g1, %g3 | |
483 | setx PCI_E_EV_QUE_HEAD_STEP, %g1, %g4 | |
484 | ||
485 | event_que_head_write_1: | |
486 | set 0x7f, %g5 | |
487 | ||
488 | event_que_head_write_1_loop: | |
489 | stx %g5, [%g2] | |
490 | addx %g2, %g4, %g2 | |
491 | cmp %g3, 1 | |
492 | bne event_que_head_write_1_loop | |
493 | dec %g3 | |
494 | ||
495 | event_que_head_read_1: | |
496 | setx PCI_E_EV_QUE_HEAD_ADDR, %g1, %g2 | |
497 | setx PCI_E_EV_QUE_HEAD_COUNT, %g1, %g3 | |
498 | ||
499 | event_que_head_read_1_loop: | |
500 | ldx [%g2], %g7 | |
501 | cmp %g7, %g5 | |
502 | bne test_failed | |
503 | nop | |
504 | ||
505 | addx %g2, %g4, %g2 | |
506 | cmp %g3, 1 | |
507 | bne event_que_head_read_1_loop | |
508 | dec %g3 | |
509 | ||
510 | event_que_head_write_0: | |
511 | setx PCI_E_EV_QUE_HEAD_ADDR, %g1, %g2 | |
512 | setx PCI_E_EV_QUE_HEAD_COUNT, %g1, %g3 | |
513 | ||
514 | event_que_head_write_0_loop: | |
515 | stx %g0, [%g2] | |
516 | addx %g2, %g4, %g2 | |
517 | cmp %g3, 1 | |
518 | bne event_que_head_write_0_loop | |
519 | dec %g3 | |
520 | ||
521 | event_que_head_read_0: | |
522 | setx PCI_E_EV_QUE_HEAD_ADDR, %g1, %g2 | |
523 | setx PCI_E_EV_QUE_HEAD_COUNT, %g1, %g3 | |
524 | ||
525 | event_que_head_read_0_loop: | |
526 | ldx [%g2], %g7 | |
527 | cmp %g7, 0 | |
528 | bne test_failed | |
529 | nop | |
530 | ||
531 | addx %g2, %g4, %g2 | |
532 | cmp %g3, 1 | |
533 | bne event_que_head_read_0_loop | |
534 | dec %g3 | |
535 | ||
536 | ! MSI Mapping registers | |
537 | ||
538 | msi_mapping: | |
539 | setx PCI_E_MSI_MAP_ADDR, %g1, %g2 | |
540 | setx PCI_E_MSI_MAP_COUNT, %g1, %g3 | |
541 | setx PCI_E_MSI_MAP_STEP, %g1, %g4 | |
542 | ||
543 | msi_mapping_write_1: | |
544 | setx 0x800000000000003f, %g1, %g5 | |
545 | ||
546 | msi_mapping_write_1_loop: | |
547 | stx %g5, [%g2] | |
548 | addx %g2, %g4, %g2 | |
549 | cmp %g3, 1 | |
550 | bne msi_mapping_write_1_loop | |
551 | dec %g3 | |
552 | ||
553 | msi_mapping_read_1: | |
554 | setx PCI_E_MSI_MAP_ADDR, %g1, %g2 | |
555 | setx PCI_E_MSI_MAP_COUNT, %g1, %g3 | |
556 | ||
557 | msi_mapping_read_1_loop: | |
558 | ldx [%g2], %g7 | |
559 | cmp %g7, %g5 | |
560 | addx %g2, %g4, %g2 | |
561 | cmp %g3, 1 | |
562 | bne msi_mapping_read_1_loop | |
563 | dec %g3 | |
564 | ||
565 | ||
566 | msi_mapping_write_0: | |
567 | setx PCI_E_MSI_MAP_ADDR, %g1, %g2 | |
568 | setx PCI_E_MSI_MAP_COUNT, %g1, %g3 | |
569 | setx PCI_E_MSI_MAP_STEP, %g1, %g4 | |
570 | ||
571 | msi_mapping_write_0_loop: | |
572 | stx %g0, [%g2] | |
573 | addx %g2, %g4, %g2 | |
574 | cmp %g3, 1 | |
575 | bne msi_mapping_write_0_loop | |
576 | dec %g3 | |
577 | ||
578 | msi_mapping_read_0: | |
579 | setx PCI_E_MSI_MAP_ADDR, %g1, %g2 | |
580 | setx PCI_E_MSI_MAP_COUNT, %g1, %g3 | |
581 | ||
582 | msi_mapping_read_0_loop: | |
583 | ldx [%g2], %g7 | |
584 | cmp %g7, 0 | |
585 | addx %g2, %g4, %g2 | |
586 | cmp %g3, 1 | |
587 | bne msi_mapping_read_0_loop | |
588 | dec %g3 | |
589 | ||
590 | ! MSI Clear registers | |
591 | ||
592 | msi_clear: | |
593 | setx PCI_E_MSI_CLEAR_ADDR, %g1, %g2 | |
594 | setx PCI_E_MSI_CLEAR_COUNT, %g1, %g3 | |
595 | setx PCI_E_MSI_CLEAR_STEP, %g1, %g4 | |
596 | ||
597 | msi_clear_write_1: | |
598 | setx 0x4000000000000000, %g1, %g5 | |
599 | ||
600 | msi_clear_write_1_loop: | |
601 | stx %g5, [%g2] | |
602 | addx %g2, %g4, %g2 | |
603 | cmp %g3, 1 | |
604 | bne msi_clear_write_1_loop | |
605 | dec %g3 | |
606 | ||
607 | msi_clear_read_1: | |
608 | setx PCI_E_MSI_CLEAR_ADDR, %g1, %g2 | |
609 | setx PCI_E_MSI_CLEAR_COUNT, %g1, %g3 | |
610 | ||
611 | msi_clear_read_1_loop: | |
612 | ldx [%g2], %g7 | |
613 | cmp %g7, 0 | |
614 | addx %g2, %g4, %g2 | |
615 | cmp %g3, 1 | |
616 | bne msi_clear_read_1_loop | |
617 | dec %g3 | |
618 | ||
619 | ||
620 | msi_clear_write_0: | |
621 | setx PCI_E_MSI_CLEAR_ADDR, %g1, %g2 | |
622 | setx PCI_E_MSI_CLEAR_COUNT, %g1, %g3 | |
623 | setx PCI_E_MSI_CLEAR_STEP, %g1, %g4 | |
624 | ||
625 | msi_clear_write_0_loop: | |
626 | stx %g0, [%g2] | |
627 | addx %g2, %g4, %g2 | |
628 | cmp %g3, 1 | |
629 | bne msi_clear_write_0_loop | |
630 | dec %g3 | |
631 | ||
632 | msi_clear_read_0: | |
633 | setx PCI_E_MSI_CLEAR_ADDR, %g1, %g2 | |
634 | setx PCI_E_MSI_CLEAR_COUNT, %g1, %g3 | |
635 | ||
636 | msi_clear_read_0_loop: | |
637 | ldx [%g2], %g7 | |
638 | cmp %g7, 0 | |
639 | addx %g2, %g4, %g2 | |
640 | cmp %g3, 1 | |
641 | bne msi_clear_read_0_loop | |
642 | dec %g3 | |
643 | ||
644 | ! Interrupt Mondo Data 0 and 1 registers | |
645 | ||
646 | intr_mondo_data: | |
647 | setx PCI_E_INT_MONDO_DATA_0_ADDR, %g1, %g2 | |
648 | setx PCI_E_INT_MONDO_DATA_1_ADDR, %g1, %g3 | |
649 | ||
650 | intr_mondo_data_write_1: | |
651 | subx %g0, 1, %g7 | |
652 | stx %g7, [%g2] | |
653 | stx %g7, [%g3] | |
654 | ||
655 | intr_mondo_data_read_1: | |
656 | ldx [%g2], %g6 | |
657 | andn %g7, 0x3f, %g1 | |
658 | cmp %g6, %g1 | |
659 | bne test_failed | |
660 | nop | |
661 | ||
662 | ldx [%g3], %g5 | |
663 | cmp %g5, %g7 | |
664 | bne test_failed | |
665 | nop | |
666 | ||
667 | intr_mondo_data_write_0: | |
668 | stx %g0, [%g2] | |
669 | stx %g0, [%g3] | |
670 | ||
671 | intr_mondo_data_read_0: | |
672 | ldx [%g2], %g6 | |
673 | cmp %g6, 0 | |
674 | bne test_failed | |
675 | nop | |
676 | ||
677 | ldx [%g3], %g5 | |
678 | cmp %g5, 0 | |
679 | bne test_failed | |
680 | nop | |
681 | ||
682 | ! ERR COR Mapping register | |
683 | ||
684 | err_cor_map: | |
685 | setx PCI_E_ERR_COR_MAP_ADDR, %g1, %g2 | |
686 | ||
687 | err_cor_map_write_1: | |
688 | subx %g0, 1, %g5 | |
689 | stx %g5, [%g2] | |
690 | ||
691 | err_core_map_read_1: | |
692 | ldx [%g2], %g6 | |
693 | setx 0x800000000000003f, %g1, %g7 | |
694 | cmp %g6, %g7 | |
695 | bne test_failed | |
696 | nop | |
697 | ||
698 | err_cor_map_write_0: | |
699 | stx %g0, [%g2] | |
700 | ||
701 | err_cor_map_read_0: | |
702 | ldx [%g2], %g3 | |
703 | cmp %g3, 0 | |
704 | bne test_failed | |
705 | nop | |
706 | ||
707 | ! ERR NONFATAL Mapping register | |
708 | ||
709 | err_nonfatal_map: | |
710 | setx PCI_E_ERR_NONFATAL_MAP_ADDR, %g1, %g2 | |
711 | ||
712 | err_nonfatal_map_write_1: | |
713 | subx %g0, 1, %g5 | |
714 | stx %g5, [%g2] | |
715 | ||
716 | err_nonfatal_map_read_1: | |
717 | ldx [%g2], %g6 | |
718 | setx 0x800000000000003f, %g1, %g7 | |
719 | cmp %g6, %g7 | |
720 | bne test_failed | |
721 | nop | |
722 | ||
723 | err_nonfatal_map_write_0: | |
724 | stx %g0, [%g2] | |
725 | ||
726 | err_nonfatal_map_read_0: | |
727 | ldx [%g2], %g3 | |
728 | cmp %g3, 0 | |
729 | bne test_failed | |
730 | nop | |
731 | ||
732 | ! ERR FATAL Mapping register | |
733 | ||
734 | err_fatal_map: | |
735 | setx PCI_E_ERR_FATAL_MAP_ADDR, %g1, %g2 | |
736 | ||
737 | err_fatal_map_write_1: | |
738 | subx %g0, 1, %g5 | |
739 | stx %g5, [%g2] | |
740 | ||
741 | err_fatal_map_read_1: | |
742 | ldx [%g2], %g6 | |
743 | setx 0x800000000000003f, %g1, %g7 | |
744 | cmp %g6, %g7 | |
745 | bne test_failed | |
746 | nop | |
747 | ||
748 | err_fatal_map_write_0: | |
749 | stx %g0, [%g2] | |
750 | ||
751 | err_fatal_map_read_0: | |
752 | ldx [%g2], %g3 | |
753 | cmp %g3, 0 | |
754 | bne test_failed | |
755 | nop | |
756 | ||
757 | ! PM PME Mapping register | |
758 | ||
759 | pm_pme_map: | |
760 | setx PCI_E_PM_PME_MAP_ADDR, %g1, %g2 | |
761 | ||
762 | pm_pme_map_write_1: | |
763 | subx %g0, 1, %g5 | |
764 | stx %g5, [%g2] | |
765 | ||
766 | pm_pme_map_read_1: | |
767 | ldx [%g2], %g6 | |
768 | setx 0x800000000000003f, %g1, %g7 | |
769 | cmp %g6, %g7 | |
770 | bne test_failed | |
771 | nop | |
772 | ||
773 | pm_pme_map_write_0: | |
774 | stx %g0, [%g2] | |
775 | ||
776 | pm_pme_map_read_0: | |
777 | ldx [%g2], %g3 | |
778 | cmp %g3, 0 | |
779 | bne test_failed | |
780 | nop | |
781 | ||
782 | ! PME To ACK Mapping register | |
783 | ||
784 | pme_ack_map: | |
785 | setx PCI_E_PME_ACK_MAP_ADDR, %g1, %g2 | |
786 | ||
787 | pme_ack_map_write_1: | |
788 | subx %g0, 1, %g5 | |
789 | stx %g5, [%g2] | |
790 | ||
791 | pme_ack_map_read_1: | |
792 | ldx [%g2], %g6 | |
793 | setx 0x800000000000003f, %g1, %g7 | |
794 | cmp %g6, %g7 | |
795 | bne test_failed | |
796 | nop | |
797 | ||
798 | pme_ack_map_write_0: | |
799 | stx %g0, [%g2] | |
800 | ||
801 | pme_ack_map_read_0: | |
802 | ldx [%g2], %g3 | |
803 | cmp %g3, 0 | |
804 | bne test_failed | |
805 | nop | |
806 | ||
807 | ! IMU Interrupt Enable register | |
808 | ||
809 | imu_int_enable: | |
810 | setx PCI_E_IMU_INT_ENB_ADDR, %g1, %g2 | |
811 | ||
812 | imu_int_enable_write_1: | |
813 | setx 0x7fff00007fff, %g1, %g3 ! Writeable fields | |
814 | stx %g3, [%g2] | |
815 | ||
816 | imu_int_enable_read_1: | |
817 | ldx [%g2], %g4 | |
818 | cmp %g4, %g3 | |
819 | bne test_failed | |
820 | nop | |
821 | ||
822 | imu_int_enable_write_0: | |
823 | stx %g0, [%g2] | |
824 | ||
825 | imu_int_enable_read_0: | |
826 | ldx [%g2], %g5 | |
827 | cmp %g5, 0 | |
828 | bne test_failed | |
829 | nop | |
830 | ||
831 | ! IMU Interrupt Status register, RO | |
832 | ||
833 | imu_int_stat: | |
834 | setx PCI_E_IMU_INT_STAT_ADDR, %g1, %g2 | |
835 | ldx [%g2], %g4 | |
836 | cmp %g4, 0 | |
837 | bne test_failed | |
838 | nop | |
839 | ||
840 | ! DMU Core and Block Interrupt Enable register | |
841 | ||
842 | dmu_int_enable: | |
843 | setx PCI_E_DMU_INT_ENB_ADDR, %g1, %g2 | |
844 | ||
845 | dmu_int_enable_write_1: | |
846 | setx 0xc000000000000003, %g1, %g3 | |
847 | stx %g3, [%g2] | |
848 | ||
849 | dmu_int_enable_read_1: | |
850 | ldx [%g2], %g4 | |
851 | cmp %g4, %g3 | |
852 | bne test_failed | |
853 | nop | |
854 | ||
855 | dmu_int_enable_write_0: | |
856 | stx %g0, [%g2] | |
857 | ||
858 | dmu_int_enable_read_0: | |
859 | ldx [%g2], %g5 | |
860 | cmp %g5, 0 | |
861 | bne test_failed | |
862 | nop | |
863 | ||
864 | ! DMU Core and Block Error Status register, RO | |
865 | ||
866 | dmu_err_status: | |
867 | setx PCI_E_DMU_ERR_STAT_ADDR, %g1, %g2 | |
868 | ldx [%g2], %g1 | |
869 | cmp %g1, 0 | |
870 | bne test_failed | |
871 | nop | |
872 | ||
873 | ! MSI 32-bit Address register | |
874 | ||
875 | msi_32_addr: | |
876 | setx PCI_E_MSI_32_ADDRESS_ADDR, %g1, %g2 | |
877 | ||
878 | ||
879 | msi_32_addr_write_1: | |
880 | subx %g0, 1, %g3 | |
881 | stx %g3, [%g2] | |
882 | ||
883 | msi_32_addr_read_1: | |
884 | ldx [%g2], %g5 | |
885 | setx 0xffff0000, %g1, %g4 | |
886 | cmp %g5, %g4 | |
887 | bne test_failed | |
888 | nop | |
889 | ||
890 | msi_32_addr_write_0: | |
891 | stx %g0, [%g2] | |
892 | ||
893 | msi_32_addr_read_0: | |
894 | ldx [%g2], %g1 | |
895 | cmp %g1, 0 | |
896 | bne test_failed | |
897 | nop | |
898 | ||
899 | ! MSI 64-bit Address register | |
900 | ||
901 | msi_64_addr: | |
902 | setx PCI_E_MSI_64_ADDRESS_ADDR, %g1, %g2 | |
903 | ||
904 | msi_64_addr_write_1: | |
905 | subx %g0, 1, %g3 | |
906 | stx %g3, [%g2] | |
907 | ||
908 | msi_64_addr_read_1: | |
909 | ldx [%g2], %g5 | |
910 | setx 0xffffffffffff0000, %g1, %g4 | |
911 | cmp %g5, %g4 | |
912 | bne test_failed | |
913 | nop | |
914 | ||
915 | msi_64_addr_write_0: | |
916 | stx %g0, [%g2] | |
917 | ||
918 | msi_64_addr_read_0: | |
919 | ldx [%g2], %g1 | |
920 | cmp %g1, 0 | |
921 | bne test_failed | |
922 | nop | |
923 | ||
924 | ! MMU Interrupt Enable register | |
925 | ||
926 | mmu_int_enable: | |
927 | setx PCI_E_MMU_INT_ENB_ADDR, %g1, %g2 | |
928 | ||
929 | mmu_int_enable_write_1: | |
930 | subx %g0, 1, %g4 | |
931 | stx %g4, [%g2] | |
932 | ||
933 | mmu_int_enable_read_1: | |
934 | ldx [%g2], %g3 | |
935 | setx 0x1fffff001fffff, %g1, %g5 | |
936 | cmp %g3, %g5 | |
937 | bne test_failed | |
938 | nop | |
939 | ||
940 | mmu_int_enable_write_0: | |
941 | stx %g0, [%g2] | |
942 | ||
943 | mmu_int_enable_read_0: | |
944 | ldx [%g2], %g3 | |
945 | cmp %g3, 0 | |
946 | bne test_failed | |
947 | nop | |
948 | ||
949 | ! MMU Interrupt Status register, RO | |
950 | ||
951 | mmu_int_status: | |
952 | setx PCI_E_MMU_INT_STAT_ADDR, %g1, %g2 | |
953 | ldx [%g2], %g3 | |
954 | cmp %g3, 0 | |
955 | bne test_failed | |
956 | nop | |
957 | ||
958 | ! MMU Error Status Clear register, RW1C | |
959 | ||
960 | mmu_error_status: | |
961 | setx PCI_E_MMU_ERR_STAT_CL_ADDR, %g1, %g2 | |
962 | ||
963 | mmu_error_status_write_1: | |
964 | subx %g0, 1, %g5 | |
965 | stx %g5, [%g2] | |
966 | ||
967 | mmu_error_status_read_0: | |
968 | ldx [%g2], %g3 | |
969 | cmp %g3, 0 | |
970 | bne test_failed | |
971 | nop | |
972 | ||
973 | ! MMU Error Status Set register, RW1S | |
974 | ||
975 | mmu_err_status_set: | |
976 | setx PCI_E_MMU_ERR_STAT_SET_ADDR, %g1, %g2 | |
977 | ||
978 | mmu_err_status_set_write_0: | |
979 | stx %g0, [%g2] | |
980 | ||
981 | mmu_err_status_set_read_0: | |
982 | ldx [%g2], %g4 | |
983 | cmp %g4, 0 | |
984 | bne test_failed | |
985 | nop | |
986 | ||
987 | mmu_err_status_set_write_1: | |
988 | subx %g0, 1, %g1 | |
989 | stx %g1, [%g2] | |
990 | ||
991 | mmu_err_status_set_read_1: | |
992 | ldx [%g2], %g6 | |
993 | setx 0x1fffff001fffff, %g1, %g4 | |
994 | cmp %g6, %g4 | |
995 | bne test_failed | |
996 | nop | |
997 | ||
998 | ! MMU Error Status Clear register, RW1C, | |
999 | ! status is set in MMU Error Status Set register above | |
1000 | ||
1001 | mmu_error_status_2: | |
1002 | setx PCI_E_MMU_ERR_STAT_CL_ADDR, %g1, %g2 | |
1003 | ||
1004 | mmu_error_status_read_1_2: | |
1005 | ldx [%g2], %g6 | |
1006 | setx 0x1fffff001fffff, %g1, %g4 | |
1007 | cmp %g6, %g4 | |
1008 | bne test_failed | |
1009 | nop | |
1010 | ||
1011 | mmu_error_status_write_1_2: | |
1012 | subx %g0, 1, %g5 | |
1013 | stx %g5, [%g2] | |
1014 | ||
1015 | mmu_error_status_read_0_2: | |
1016 | ldx [%g2], %g3 | |
1017 | cmp %g3, 0 | |
1018 | bne test_failed | |
1019 | nop | |
1020 | ||
1021 | ! ILU Interrupt Enable register | |
1022 | ||
1023 | ilu_int_enable: | |
1024 | setx PCI_E_ILU_INT_ENB_ADDR, %g1, %g2 | |
1025 | ||
1026 | ilu_int_enable_write_1: | |
1027 | subx %g0, 1, %g4 | |
1028 | stx %g4, [%g2] | |
1029 | ||
1030 | ilu_int_enable_read_1: | |
1031 | ldx [%g2], %g3 | |
1032 | setx 0xf0000000f0, %g1, %g5 | |
1033 | cmp %g3, %g5 | |
1034 | bne test_failed | |
1035 | nop | |
1036 | ||
1037 | ilu_int_enable_write_0: | |
1038 | stx %g0, [%g2] | |
1039 | ||
1040 | ilu_int_enable_read_0: | |
1041 | ldx [%g2], %g3 | |
1042 | cmp %g3, 0 | |
1043 | bne test_failed | |
1044 | nop | |
1045 | ||
1046 | ! ILU Interrupt Status register, RO | |
1047 | ||
1048 | ilu_int_status: | |
1049 | setx PCI_E_ILU_INT_STAT_ADDR, %g1, %g2 | |
1050 | ldx [%g2], %g3 | |
1051 | cmp %g3, 0 | |
1052 | bne test_failed | |
1053 | nop | |
1054 | ||
1055 | ! ILU Error Status Clear register, RW1C | |
1056 | ||
1057 | ilu_error_status: | |
1058 | setx PCI_E_ILU_ERR_STAT_CL_ADDR, %g1, %g2 | |
1059 | ||
1060 | ilu_error_status_write_1: | |
1061 | subx %g0, 1, %g5 | |
1062 | stx %g5, [%g2] | |
1063 | ||
1064 | ilu_error_status_read_0: | |
1065 | ldx [%g2], %g3 | |
1066 | cmp %g3, 0 | |
1067 | bne test_failed | |
1068 | nop | |
1069 | ||
1070 | ! ILU Error Status Set register, RW1S | |
1071 | ||
1072 | ilu_err_status_set: | |
1073 | setx PCI_E_ILU_ERR_STAT_SET_ADDR, %g1, %g2 | |
1074 | ||
1075 | ilu_err_status_set_write_0: | |
1076 | stx %g0, [%g2] | |
1077 | ||
1078 | ilu_err_status_set_read_0: | |
1079 | ldx [%g2], %g4 | |
1080 | cmp %g4, 0 | |
1081 | bne test_failed | |
1082 | nop | |
1083 | ||
1084 | ilu_err_status_set_write_1: | |
1085 | subx %g0, 1, %g1 | |
1086 | stx %g1, [%g2] | |
1087 | ||
1088 | ilu_err_status_set_read_1: | |
1089 | ldx [%g2], %g6 | |
1090 | setx 0xf0000000f0, %g1, %g4 | |
1091 | cmp %g6, %g4 | |
1092 | bne test_failed | |
1093 | nop | |
1094 | ||
1095 | ! ILU Error Status Clear register, RW1C, | |
1096 | ! status is set in ILU Error Status Set register above | |
1097 | ||
1098 | ilu_error_status_2: | |
1099 | setx PCI_E_ILU_ERR_STAT_CL_ADDR, %g1, %g2 | |
1100 | ||
1101 | ilu_error_status_read_1_2: | |
1102 | ldx [%g2], %g6 | |
1103 | setx 0xf0000000f0, %g1, %g4 | |
1104 | cmp %g6, %g4 | |
1105 | bne test_failed | |
1106 | nop | |
1107 | ||
1108 | ilu_error_status_write_1_2: | |
1109 | subx %g0, 1, %g5 | |
1110 | stx %g5, [%g2] | |
1111 | ||
1112 | ilu_error_status_read_0_2: | |
1113 | ldx [%g2], %g3 | |
1114 | cmp %g3, 0 | |
1115 | bne test_failed | |
1116 | nop | |
1117 | ||
1118 | ! PEU Core and Block Interrupt Enable register | |
1119 | ||
1120 | peu_int_enable: | |
1121 | setx PCI_E_PEU_INT_ENB_ADDR, %g1, %g2 | |
1122 | ||
1123 | peu_int_enable_write_1: | |
1124 | setx 0x800000000000000f, %g1, %g3 | |
1125 | stx %g3, [%g2] | |
1126 | ||
1127 | peu_int_enable_read_1: | |
1128 | ldx [%g2], %g4 | |
1129 | cmp %g4, %g3 | |
1130 | bne test_failed | |
1131 | nop | |
1132 | ||
1133 | peu_int_enable_write_0: | |
1134 | stx %g0, [%g2] | |
1135 | ||
1136 | peu_int_enable_read_0: | |
1137 | ldx [%g2], %g5 | |
1138 | cmp %g5, 0 | |
1139 | bne test_failed | |
1140 | nop | |
1141 | ||
1142 | ! PEU Core and Block Error Status register, RO | |
1143 | ||
1144 | peu_err_status: | |
1145 | setx PCI_E_PEU_INT_STAT_ADDR, %g1, %g2 | |
1146 | ldx [%g2], %g1 | |
1147 | cmp %g1, 0 | |
1148 | bne test_failed | |
1149 | nop | |
1150 | ||
1151 | ! PEU Other Interrupt Enable register | |
1152 | ||
1153 | peu_other_int_enable: | |
1154 | setx PCI_E_PEU_OTHER_INT_ENB_ADDR, %g1, %g2 | |
1155 | ||
1156 | peu_other_int_enable_write_1: | |
1157 | subx %g0, 1, %g4 | |
1158 | stx %g4, [%g2] | |
1159 | ||
1160 | peu_other_int_enable_read_1: | |
1161 | ldx [%g2], %g3 | |
1162 | setx 0xffffff00ffffff, %g1, %g5 | |
1163 | cmp %g3, %g5 | |
1164 | bne test_failed | |
1165 | nop | |
1166 | ||
1167 | peu_other_int_enable_write_0: | |
1168 | stx %g0, [%g2] | |
1169 | ||
1170 | peu_other_int_enable_read_0: | |
1171 | ldx [%g2], %g3 | |
1172 | cmp %g3, 0 | |
1173 | bne test_failed | |
1174 | nop | |
1175 | ||
1176 | ! PEU Other Interrupt Status register, RO | |
1177 | ||
1178 | peu_other_int_status: | |
1179 | setx PCI_E_PEU_OTHER_INT_STAT_ADDR, %g1, %g2 | |
1180 | ldx [%g2], %g3 | |
1181 | cmp %g3, 0 | |
1182 | bne test_failed | |
1183 | nop | |
1184 | ||
1185 | ! PEU Other Error Status Clear register, RW1C | |
1186 | ||
1187 | peu_other_error_status: | |
1188 | setx PCI_E_PEU_OTHER_ERR_STAT_CL_ADDR, %g1, %g2 | |
1189 | ||
1190 | peu_other_error_status_write_1: | |
1191 | subx %g0, 1, %g5 | |
1192 | stx %g5, [%g2] | |
1193 | ||
1194 | peu_other_error_status_read_0: | |
1195 | ldx [%g2], %g3 | |
1196 | cmp %g3, 0 | |
1197 | bne test_failed | |
1198 | nop | |
1199 | ||
1200 | ! PEU Other Error Status Set register, RW1S | |
1201 | ||
1202 | peu_other_err_status_set: | |
1203 | setx PCI_E_PEU_OTHER_ERR_STAT_SET_ADDR, %g1, %g2 | |
1204 | ||
1205 | peu_other_err_status_set_write_0: | |
1206 | stx %g0, [%g2] | |
1207 | ||
1208 | peu_other_err_status_set_read_0: | |
1209 | ldx [%g2], %g4 | |
1210 | cmp %g4, 0 | |
1211 | bne test_failed | |
1212 | nop | |
1213 | ||
1214 | peu_other_err_status_set_write_1: | |
1215 | subx %g0, 1, %g1 | |
1216 | stx %g1, [%g2] | |
1217 | ||
1218 | peu_other_err_status_set_read_1: | |
1219 | ldx [%g2], %g6 | |
1220 | setx 0xffffff00ffffff, %g1, %g5 | |
1221 | cmp %g6, %g5 | |
1222 | bne test_failed | |
1223 | nop | |
1224 | ||
1225 | ! PEU Other Error Status Clear register, RW1C, | |
1226 | ! status is set in PEU Other Error Status Set register above | |
1227 | ||
1228 | peu_other_error_status_2: | |
1229 | setx PCI_E_PEU_OTHER_ERR_STAT_CL_ADDR, %g1, %g2 | |
1230 | ||
1231 | peu_other_error_status_read_1_2: | |
1232 | ldx [%g2], %g6 | |
1233 | setx 0xffffff00ffffff, %g1, %g5 | |
1234 | cmp %g6, %g5 | |
1235 | bne test_failed | |
1236 | nop | |
1237 | ||
1238 | peu_other_error_status_write_1_2: | |
1239 | subx %g0, 1, %g5 | |
1240 | stx %g5, [%g2] | |
1241 | ||
1242 | peu_other_error_status_read_0_2: | |
1243 | ldx [%g2], %g3 | |
1244 | cmp %g3, 0 | |
1245 | bne test_failed | |
1246 | nop | |
1247 | ||
1248 | ! PEU UE Interrupt Enable register | |
1249 | ||
1250 | peu_ue_int_enable: | |
1251 | setx PCI_E_PEU_UE_INT_ENB_ADDR, %g1, %g2 | |
1252 | ||
1253 | peu_ue_int_enable_write_1: | |
1254 | subx %g0, 1, %g4 | |
1255 | stx %g4, [%g2] | |
1256 | ||
1257 | peu_ue_int_enable_read_1: | |
1258 | ldx [%g2], %g3 | |
1259 | setx 0x001fffff001fffff, %g1, %g5 | |
1260 | cmp %g3, %g5 | |
1261 | bne test_failed | |
1262 | nop | |
1263 | ||
1264 | peu_ue_int_enable_write_0: | |
1265 | stx %g0, [%g2] | |
1266 | ||
1267 | peu_ue_int_enable_read_0: | |
1268 | ldx [%g2], %g3 | |
1269 | cmp %g3, 0 | |
1270 | bne test_failed | |
1271 | nop | |
1272 | ||
1273 | ! PEU UE Interrupt Status register, RO | |
1274 | ||
1275 | peu_ue_int_status: | |
1276 | setx PCI_E_PEU_UE_INT_STAT_ADDR, %g1, %g2 | |
1277 | ldx [%g2], %g3 | |
1278 | cmp %g3, 0 | |
1279 | bne test_failed | |
1280 | nop | |
1281 | ||
1282 | ! PEU UE Status Clear register, RW1C | |
1283 | ||
1284 | peu_ue_status: | |
1285 | setx PCI_E_PEU_UE_STAT_CL_ADDR, %g1, %g2 | |
1286 | ||
1287 | peu_ue_status_write_1: | |
1288 | subx %g0, 1, %g5 | |
1289 | stx %g5, [%g2] | |
1290 | ||
1291 | peu_ue_status_read_0: | |
1292 | ldx [%g2], %g3 | |
1293 | cmp %g3, 0 | |
1294 | bne test_failed | |
1295 | nop | |
1296 | ||
1297 | ! PEU UE Status Set register, RW1S | |
1298 | ||
1299 | peu_ue_status_set: | |
1300 | setx PCI_E_PEU_UE_STAT_SET_ADDR, %g1, %g2 | |
1301 | ||
1302 | peu_ue_status_set_write_0: | |
1303 | stx %g0, [%g2] | |
1304 | ||
1305 | peu_ue_status_set_read_0: | |
1306 | ldx [%g2], %g4 | |
1307 | cmp %g4, 0 | |
1308 | bne test_failed | |
1309 | nop | |
1310 | ||
1311 | peu_ue_status_set_write_1: | |
1312 | subx %g0, 1, %g1 | |
1313 | stx %g1, [%g2] | |
1314 | ||
1315 | peu_ue_status_set_read_1: | |
1316 | ldx [%g2], %g6 | |
1317 | setx 0x17f0110017f011, %g1, %g5 | |
1318 | cmp %g6, %g5 | |
1319 | bne test_failed | |
1320 | nop | |
1321 | ||
1322 | ! PEU UE Status Clear register, RW1C, | |
1323 | ! status is set in PEU UE Status Set register above | |
1324 | ||
1325 | peu_ue_status_2: | |
1326 | setx PCI_E_PEU_UE_STAT_CL_ADDR, %g1, %g2 | |
1327 | ||
1328 | peu_ue_status_read_1_2: | |
1329 | ldx [%g2], %g6 | |
1330 | setx 0x17f0110017f011, %g1, %g5 | |
1331 | cmp %g6, %g5 | |
1332 | bne test_failed | |
1333 | nop | |
1334 | ||
1335 | peu_ue_status_write_1_2: | |
1336 | subx %g0, 1, %g5 | |
1337 | stx %g5, [%g2] | |
1338 | ||
1339 | peu_ue_status_read_0_2: | |
1340 | ldx [%g2], %g3 | |
1341 | cmp %g3, 0 | |
1342 | bne test_failed | |
1343 | nop | |
1344 | ||
1345 | ! PEU CE Interrupt Enable register | |
1346 | ||
1347 | peu_ce_int_enable: | |
1348 | setx PCI_E_PEU_CE_INT_ENB_ADDR, %g1, %g2 | |
1349 | ||
1350 | peu_ce_int_enable_write_1: | |
1351 | subx %g0, 1, %g4 | |
1352 | stx %g4, [%g2] | |
1353 | ||
1354 | peu_ce_int_enable_read_1: | |
1355 | ldx [%g2], %g3 | |
1356 | setx 0x00001fff00001fff, %g1, %g5 | |
1357 | cmp %g3, %g5 | |
1358 | bne test_failed | |
1359 | nop | |
1360 | ||
1361 | peu_ce_int_enable_write_0: | |
1362 | stx %g0, [%g2] | |
1363 | ||
1364 | peu_ce_int_enable_read_0: | |
1365 | ldx [%g2], %g3 | |
1366 | cmp %g3, 0 | |
1367 | bne test_failed | |
1368 | nop | |
1369 | ||
1370 | ! PEU CE Interrupt Status register, RO | |
1371 | ||
1372 | peu_ce_int_status: | |
1373 | setx PCI_E_PEU_CE_INT_STAT_ADDR, %g1, %g2 | |
1374 | ldx [%g2], %g3 | |
1375 | cmp %g3, 0 | |
1376 | bne test_failed | |
1377 | nop | |
1378 | ||
1379 | ! PEU CE Status Clear register, RW1C | |
1380 | ||
1381 | peu_ce_status: | |
1382 | setx PCI_E_PEU_CE_STAT_CL_ADDR, %g1, %g2 | |
1383 | ||
1384 | peu_ce_status_write_1: | |
1385 | subx %g0, 1, %g5 | |
1386 | stx %g5, [%g2] | |
1387 | ||
1388 | peu_ce_status_read_0: | |
1389 | ldx [%g2], %g3 | |
1390 | cmp %g3, 0 | |
1391 | bne test_failed | |
1392 | nop | |
1393 | ||
1394 | ! PEU CE Status Set register, RW1S | |
1395 | ||
1396 | peu_ce_status_set: | |
1397 | setx PCI_E_PEU_CE_STAT_SET_ADDR, %g1, %g2 | |
1398 | ||
1399 | peu_ce_status_set_write_0: | |
1400 | stx %g0, [%g2] | |
1401 | ||
1402 | peu_ce_status_set_read_0: | |
1403 | ldx [%g2], %g4 | |
1404 | cmp %g4, 0 | |
1405 | bne test_failed | |
1406 | nop | |
1407 | ||
1408 | peu_ce_status_set_write_1: | |
1409 | subx %g0, 1, %g1 | |
1410 | stx %g1, [%g2] | |
1411 | ||
1412 | peu_ce_status_set_read_1: | |
1413 | ldx [%g2], %g6 | |
1414 | setx 0x11c10000000011c1, %g1, %g5 | |
1415 | cmp %g6, %g5 | |
1416 | bne test_failed | |
1417 | nop | |
1418 | ||
1419 | ! PEU CE Status Clear register, RW1C, | |
1420 | ! status is set in PEU CE Status Set register above | |
1421 | ||
1422 | peu_ce_status_2: | |
1423 | setx PCI_E_PEU_CE_STAT_CL_ADDR, %g1, %g2 | |
1424 | ||
1425 | peu_ce_status_read_1_2: | |
1426 | ldx [%g2], %g6 | |
1427 | setx 0x11c10000000011c1, %g1, %g5 | |
1428 | cmp %g6, %g5 | |
1429 | bne test_failed | |
1430 | nop | |
1431 | ||
1432 | peu_ce_status_write_1_2: | |
1433 | subx %g0, 1, %g5 | |
1434 | stx %g5, [%g2] | |
1435 | ||
1436 | peu_ce_status_read_0_2: | |
1437 | ldx [%g2], %g3 | |
1438 | cmp %g3, 0 | |
1439 | bne test_failed | |
1440 | nop | |
1441 | ||
1442 | ! PEU DLPL Interrupt Enable register | |
1443 | ||
1444 | peu_dlpl_int_enable: | |
1445 | setx PCI_E_PEU_DLPL_INT_ENB_ADDR, %g1, %g2 | |
1446 | ||
1447 | peu_dlpl_int_enable_write_1: | |
1448 | subx %g0, 1, %g4 | |
1449 | stx %g4, [%g2] | |
1450 | ||
1451 | peu_dlpl_int_enable_read_1: | |
1452 | ldx [%g2], %g3 | |
1453 | setx 0xff03ffff, %g1, %g5 | |
1454 | cmp %g3, %g5 | |
1455 | bne test_failed | |
1456 | nop | |
1457 | ||
1458 | peu_dlpl_int_enable_write_0: | |
1459 | stx %g0, [%g2] | |
1460 | ||
1461 | peu_dlpl_int_enable_read_0: | |
1462 | ldx [%g2], %g3 | |
1463 | cmp %g3, 0 | |
1464 | bne test_failed | |
1465 | nop | |
1466 | ||
1467 | ! PEU DLPL Interrupt Status register, RO | |
1468 | ||
1469 | peu_dlpl_int_status: | |
1470 | setx PCI_E_PEU_DLPL_INT_STAT_ADDR, %g1, %g2 | |
1471 | ldx [%g2], %g3 | |
1472 | cmp %g3, 0 | |
1473 | bne test_failed | |
1474 | nop | |
1475 | ||
1476 | ! PEU DLPL Status Clear register, RW1C | |
1477 | ||
1478 | peu_dlpl_status: | |
1479 | setx PCI_E_PEU_DLPL_STAT_CL_ADDR, %g1, %g2 | |
1480 | ||
1481 | peu_dlpl_status_write_1: | |
1482 | subx %g0, 1, %g5 | |
1483 | stx %g5, [%g2] | |
1484 | ||
1485 | peu_dlpl_status_read_0: | |
1486 | ldx [%g2], %g3 | |
1487 | cmp %g3, 0 | |
1488 | bne test_failed | |
1489 | nop | |
1490 | ||
1491 | ! PEU DLPL Status Set register, RW1S | |
1492 | ! Note since the link is not being trained some | |
1493 | ! bits in this register can be set. So for the | |
1494 | ! write of zeros just check that the register | |
1495 | ! contents don't change. | |
1496 | ||
1497 | peu_dlpl_status_set: | |
1498 | setx PCI_E_PEU_DLPL_STAT_SET_ADDR, %g1, %g2 | |
1499 | ldx [%g2], %g5 | |
1500 | ||
1501 | peu_dlpl_status_set_write_0: | |
1502 | stx %g0, [%g2] | |
1503 | ||
1504 | peu_dlpl_status_set_read_0: | |
1505 | ldx [%g2], %g4 | |
1506 | cmp %g4, %g5 | |
1507 | bne test_failed | |
1508 | nop | |
1509 | ||
1510 | peu_dlpl_status_set_write_1: | |
1511 | subx %g0, 1, %g1 | |
1512 | stx %g1, [%g2] | |
1513 | ||
1514 | peu_dlpl_status_set_read_1: | |
1515 | ldx [%g2], %g6 | |
1516 | setx 0xff03ffff, %g1, %g5 | |
1517 | cmp %g6, %g5 | |
1518 | bne test_failed | |
1519 | nop | |
1520 | ||
1521 | ! PEU DLPL Status Clear register, RW1C, | |
1522 | ! status is set in PEU DLPL Status Set register above | |
1523 | ||
1524 | peu_dlpl_status_2: | |
1525 | setx PCI_E_PEU_DLPL_STAT_CL_ADDR, %g1, %g2 | |
1526 | ||
1527 | peu_dlpl_status_read_1_2: | |
1528 | ldx [%g2], %g6 | |
1529 | setx 0xff03ffff, %g1, %g5 | |
1530 | cmp %g6, %g5 | |
1531 | bne test_failed | |
1532 | nop | |
1533 | ||
1534 | peu_dlpl_status_write_1_2: | |
1535 | subx %g0, 1, %g5 | |
1536 | stx %g5, [%g2] | |
1537 | ||
1538 | peu_dlpl_status_read_0_2: | |
1539 | setx 0x4000, %g2, %g7 | |
1540 | ldx [%g2], %g3 | |
1541 | andn %g3, %g7, %g3 | |
1542 | cmp %g3, 0 | |
1543 | bne test_failed | |
1544 | nop | |
1545 | ||
1546 | ! Done | |
1547 | ||
1548 | ba test_passed | |
1549 | nop | |
1550 | ||
1551 | test_passed: | |
1552 | EXIT_GOOD | |
1553 | ||
1554 | test_failed: | |
1555 | EXIT_BAD | |
1556 | ||
1557 | ||
1558 | /************************************************************************ | |
1559 | Test case data start | |
1560 | ************************************************************************/ | |
1561 | .data | |
1562 | user_data_start: | |
1563 | .word 0x0 | |
1564 | .word 0x0 | |
1565 | user_data_end: | |
1566 | .end |