Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / niu / NIU_Tx_Rx / txrxrand_wrm.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: txrxrand_wrm.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_HV_ALSO
39#define RCRSTAT_A_Addr mpeval(DMC_ADDRESS_RANGE+0x00050)
40#define RBR_STAT_Addr mpeval(DMC_ADDRESS_RANGE+0x00028)
41#define SSYS_RESET_Addr 0x8900000838
42
43#include "hboot.s"
44#include "niu_defines.h"
45.text
46.global main
47main:
48 ta T_CHANGE_HPRIV
49 nop
50! branch to main by comparing thread id.
51
52 ta T_RD_THID
53 mov 0x1, %g2
54
55 setx 0x0000000000000001, %o0, %g3 ! thread-group bits for the template
56 cmp %g2, %o1
57 be _FcN1_main
58 nop
59
60 setx 0x0000000000000010, %o0, %g3 ! thread-group bits for the template
61 brz %o1, _FcN0_main
62 and %o1, %g3, %g1
63 nop
64
65!
66! Thread 0 Start
67!
68!
69_FcN0_main:
70
71Init_flow:
72 nop ! $EV trig_pc_d(1, @VA(.MAIN.Init_flow)) -> pktGenConfig(MAC_ID, FRAME_TYPE, FRAME_CLASS, c8)
73
74P_TxDMAActivate:
75 setx MAC_ID, %g1, %o0
76 setx 0x8000, %g1, %o1
77 call SetTxDMAActive
78 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_TxDMAActivate)) -> NIU_TxDMAActivate (MAC_ID, 8000)
79 setx XMAC0_MAX_addr, %g7, %g2
80
81
82P_AddTxChannels:
83 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_AddTxChannels)) -> NIU_AddTxChannels(MAC_ID, f)
84 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
85 nop
86
87P_SetTxMaxBurst:
88 setx 0xf, %g1, %o0
89 setx SetTxMaxBurst_Data, %g1, %o1
90 call SetTxMaxBurst
91 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_SetTxMaxBurst)) -> NIU_SetTxMaxBurst (MAC_ID, f, TxMaxBurst_Data)
92 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
93 nop
94
95P_InitTxDma:
96 setx 0xf, %g1, %o0
97 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_InitTxDma)) -> NIU_InitTxDma (MAC_ID, f, NIU_Xlate_On)
98 call InitTxDma
99 nop
100 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
101 nop
102
103Gen_Packet:
104 nop ! $EV trig_pc_d(1, @VA(.MAIN.Gen_Packet)) -> TxPktGen(MAC_ID, f, 0x40,0,0,0)
105 nop
106
107 setx 0x5, %g1, %g4
108delay_loop_tmp:
109 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
110 nop
111 nop
112 nop
113 nop
114 dec %g4
115 brnz %g4, delay_loop_tmp
116 nop
117
118SetTxRingKick:
119 setx NIU_PKTGEN_CSR_EV2A_TX_RNG_KICK, %g1, %g2 ! $EV trig_pc_d(1, @VA(.MAIN.SetTxRingKick)) -> NIU_SetTxRingKick(MAC_ID, f)
120 setx 0xf, %g1, %o0
121 ldx [%g2] , %g3
122 nop
123 mulx %o0, 0x200, %g5
124 setx TX_RING_KICK_Addr, %g1, %g2
125 add %g2, %g5, %g2
126 stxa %g3, [%g2]ASI_PRIMARY_LITTLE
127 nop
128
129SetTxCs:
130 setx 0xf, %g1, %o0
131 setx TX_CS_Data, %g1, %g3
132 mulx %o0, 0x200, %g5
133 setx TX_CS_Addr, %g1, %g2
134 add %g2, %g5, %g2
135 stxa %g3, [%g2]ASI_PRIMARY_LITTLE
136 nop
137
138#ifdef JUMBO_FRAME_EN
139 setx loop_count, %g1, %g4
140delay_loop:
141 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
142 nop
143 nop
144 nop
145 nop
146 dec %g4
147 brnz %g4, delay_loop
148 nop
149#endif
150
151
152NIUTx_Pkt_Cnt_Chk:
153 setx MAC_ID, %g1, %o0
154 setx 0x40, %g1, %o1
155 call NiuTx_check_pkt_cnt
156 nop
157
158 setx loop_count, %g1, %g4
159delay_loop_end:
160 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
161 nop
162 nop
163 nop
164 nop
165 dec %g4
166 brnz %g4, delay_loop_end
167 nop
168
169 setx user_data_start, %g1, %g2
170 ldx [%g2], %g3
171 cmp %g3, 0x1
172 nop
173 be test_passed_tx
174 nop
175 setx xmac_config0, %g7, %g2
176niu_warm_reset:
177 ldxa [%g2]ASI_PRIMARY_LITTLE, %g3
178 and 0x00000100, %g3, %g3
179 brnz %g3,niu_warm_reset
180 nop
181 setx SSYS_RESET_Addr, %g7, %g2
182 setx 0x1, %g7, %g3
183 stx %g3, [%g2]
184 setx 0x5, %g1, %g4
185delay_loop_warm:
186 ldx [%g2], %g3
187 dec %g4
188 brnz %g4, delay_loop_warm
189 nop
190 call N2_NIU_INIT
191 nop
192 setx user_data_start, %g1, %g2
193 setx 0x1, %g7, %g3
194 stx %g3, [%g2]
195 #ba _FcN0_main
196 nop
197Init_flow_1:
198 nop ! $EV trig_pc_d(1, @VA(.MAIN.Init_flow_1)) -> pktGenConfig(MAC_ID, FRAME_TYPE, FRAME_CLASS, c8)
199
200P_TxDMAActivate_1:
201 setx MAC_ID, %g1, %o0
202 setx 0x8000, %g1, %o1
203 call SetTxDMAActive
204 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_TxDMAActivate_1)) -> NIU_TxDMAActivate (MAC_ID, 8000)
205
206
207P_AddTxChannels_1:
208 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_AddTxChannels_1)) -> NIU_AddTxChannels(MAC_ID, f)
209 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
210 nop
211
212P_SetTxMaxBurst_1:
213 setx 0xf, %g1, %o0
214 setx SetTxMaxBurst_Data, %g1, %o1
215 call SetTxMaxBurst
216 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_SetTxMaxBurst_1)) -> NIU_SetTxMaxBurst (MAC_ID, f, TxMaxBurst_Data)
217 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
218 nop
219
220P_InitTxDma_1:
221 setx 0xf, %g1, %o0
222 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_InitTxDma_1)) -> NIU_InitTxDma (MAC_ID, f, NIU_Xlate_On)
223 call InitTxDma
224 nop
225 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
226 nop
227
228Gen_Packet_1:
229 nop ! $EV trig_pc_d(1, @VA(.MAIN.Gen_Packet_1)) -> TxPktGen(MAC_ID, f, 0x40,0,0,0)
230 nop
231
232 setx 0x5, %g1, %g4
233delay_loop_tmp_1:
234 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
235 nop
236 nop
237 nop
238 nop
239 dec %g4
240 brnz %g4, delay_loop_tmp_1
241 nop
242
243SetTxRingKick_1:
244 setx NIU_PKTGEN_CSR_EV2A_TX_RNG_KICK, %g1, %g2 ! $EV trig_pc_d(1, @VA(.MAIN.SetTxRingKick_1)) -> NIU_SetTxRingKick(MAC_ID, f)
245 setx 0xf, %g1, %o0
246 ldx [%g2] , %g3
247 nop
248 mulx %o0, 0x200, %g5
249 setx TX_RING_KICK_Addr, %g1, %g2
250 add %g2, %g5, %g2
251 stxa %g3, [%g2]ASI_PRIMARY_LITTLE
252 nop
253
254SetTxCs_1:
255 setx 0xf, %g1, %o0
256 setx TX_CS_Data, %g1, %g3
257 mulx %o0, 0x200, %g5
258 setx TX_CS_Addr, %g1, %g2
259 add %g2, %g5, %g2
260 stxa %g3, [%g2]ASI_PRIMARY_LITTLE
261 nop
262
263#ifdef JUMBO_FRAME_EN
264 setx loop_count, %g1, %g4
265delay_loop_1:
266 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
267 nop
268 nop
269 nop
270 nop
271 dec %g4
272 brnz %g4, delay_loop_1
273 nop
274#endif
275
276
277NIUTx_Pkt_Cnt_Chk_1:
278 setx MAC_ID, %g1, %o0
279 setx 0x40, %g1, %o1
280 call NiuTx_check_pkt_cnt
281 nop
282
283 setx loop_count, %g1, %g4
284delay_loop_end_1:
285 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
286 nop
287 nop
288 nop
289 nop
290 dec %g4
291 brnz %g4, delay_loop_end_1
292 nop
293
294test_passed_tx:
295 nop ! $EV trig_pc_d(1, @VA(.MAIN.test_passed_tx)) -> NIU_EXIT_chk(MAC_ID)
296 EXIT_GOOD
297
298
299_FcN1_main:
300
301P_NIU_RxInitDma:
302 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_NIU_RxInitDma)) -> NIU_InitRxDma(1, RX_DESC_RING_LENGTH, RX_COMPL_RING_LEN, RBR_CONFIG_B_DATA, RX_INITIAL_KICK, NIU_Xlate_On)
303 setx NIU_PKTGEN_CSR_EV2A_RBR_KICK, %g7, %g2
304delay_loop_Rx:
305 ldx [%g2], %g5
306 cmp %g5, RX_INITIAL_KICK
307 bne delay_loop_Rx
308 nop
309
310 setx 0x1, %g1, %o0
311 setx RX_DESC_RING_LENGTH, %g1, %o1
312 setx RX_COMPL_RING_LEN, %g1, %o2
313 setx RBR_CONFIG_B_DATA, %g1, %o3
314 setx RX_INITIAL_KICK, %g1, %o4
315 call NiuInitRxDma
316 nop
317P_NIU_RxPkt_Conf:
318 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_NIU_RxPkt_Conf)) -> NIU_RxPktConf(RXMAC_PKTCNT)
319 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
320 nop
321 setx RXMAC_PKTCNT, %g1, %g6
322 mulx %o0, 0x200, %g5
323 setx RBR_STAT_Addr, %g7, %g2
324 add %g2, %g5, %g2
325P_NIU_Rx_GenPkt:
326 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
327 brz %g5, P_NIU_Rx_GenPkt
328 nop
329#ifdef NIU_SYSTEMC_T2
330 brnz %g5, Rx_pktcnt_loop
331 nop
332#endif
333 cmp %g5, %o4
334 be P_NIU_Rx_GenPkt
335 nop
336Rx_pktcnt_loop:
337 nop ! $EV trig_pc_d(1, @VA(.MAIN.Rx_pktcnt_loop)) -> NIU_RxGenPkt(MAC_ID, 1, RXMAC_PKTCNT, 0x64, 0x0, RX_NIU_MULTI_DMA, 1)
338 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
339 nop
340
341 mulx %o0, 0x200, %g5
342 setx RCRSTAT_A_Addr, %g7, %g2
343 add %g2, %g5, %g2
344delay_loop:
345 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
346 cmp %g5, RXMAC_PKTCNT - RXMAC_PKTCNT%8
347 bne delay_loop
348 nop
349
350disable_mac0:
351 setx xmac_config0, %g7, %g2
352 ldxa [%g2]ASI_PRIMARY_LITTLE, %g3
353 setx 0xfffffeff, %g7, %g4
354 and %g4, %g3, %g3
355 stxa %g3, [%g2]ASI_PRIMARY_LITTLE
356
357 setx user_data_start, %g1, %g2
358 ldx [%g2], %g3
359 cmp %g3, 0x1
360 nop
361 be test_passed
362 nop
363wait_wrm_done:
364 ldx [%g2], %g3
365 cmp %g3, 0x1
366 nop
367 bne wait_wrm_done
368 nop
369# ba _FcN1_main
370# nop
371P_NIU_RxInitDma_1:
372 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_NIU_RxInitDma_1)) -> NIU_InitRxDma(1, RX_DESC_RING_LENGTH, RX_COMPL_RING_LEN, RBR_CONFIG_B_DATA, RX_INITIAL_KICK, NIU_Xlate_On)
373 setx NIU_PKTGEN_CSR_EV2A_RBR_KICK, %g7, %g2
374delay_loop_Rx_1:
375 ldx [%g2], %g5
376 cmp %g5, RX_INITIAL_KICK
377 bne delay_loop_Rx_1
378 nop
379
380 setx 0x1, %g1, %o0
381 setx RX_DESC_RING_LENGTH, %g1, %o1
382 setx RX_COMPL_RING_LEN, %g1, %o2
383 setx RBR_CONFIG_B_DATA, %g1, %o3
384 setx RX_INITIAL_KICK, %g1, %o4
385 call NiuInitRxDma
386 nop
387P_NIU_RxPkt_Conf_1:
388 nop ! $EV trig_pc_d(1, @VA(.MAIN.P_NIU_RxPkt_Conf_1)) -> NIU_RxPktConf(RXMAC_PKTCNT)
389 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
390 nop
391 setx RXMAC_PKTCNT, %g1, %g6
392 mulx %o0, 0x200, %g5
393 setx RBR_STAT_Addr, %g7, %g2
394 add %g2, %g5, %g2
395P_NIU_Rx_GenPkt_1:
396 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
397 brz %g5, P_NIU_Rx_GenPkt_1
398 nop
399 cmp %g5, %o4
400 be P_NIU_Rx_GenPkt_1
401 nop
402Rx_pktcnt_loop_1:
403 nop ! $EV trig_pc_d(1, @VA(.MAIN.Rx_pktcnt_loop_1)) -> NIU_RxGenPkt(MAC_ID, 1, RXMAC_PKTCNT, 0x64, 0x0, RX_NIU_MULTI_DMA, 1)
404 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
405 nop
406
407 mulx %o0, 0x200, %g5
408 setx RCRSTAT_A_Addr, %g7, %g2
409 add %g2, %g5, %g2
410Rxdelay_loop_1:
411 ldxa [%g2]ASI_PRIMARY_LITTLE, %g5
412 cmp %g5, RXMAC_PKTCNT - RXMAC_PKTCNT%8
413 bne Rxdelay_loop_1
414 nop
415
416
417test_passed:
418 nop
419 EXIT_GOOD
420# 247 "diag.j.pp"
421
422#if 0
423#endif
424/************************************************************************
425 Test case data start
426************************************************************************/
427
428.align 1024
429.data
430user_data_start:
431intr_expect:
432 .byte 0x0
433 .byte 0x0
434 .byte 0x0
435 .byte 0x0
436 .byte 0x0
437 .byte 0x0
438 .byte 0x0
439 .byte 0x0
440user_data_end:
441.end