1f856f099SNavdeep Parhar /*-
2f856f099SNavdeep Parhar * Copyright (c) 2017 Chelsio Communications, Inc.
3f856f099SNavdeep Parhar * All rights reserved.
4f856f099SNavdeep Parhar *
5f856f099SNavdeep Parhar * Redistribution and use in source and binary forms, with or without
6f856f099SNavdeep Parhar * modification, are permitted provided that the following conditions
7f856f099SNavdeep Parhar * are met:
8f856f099SNavdeep Parhar * 1. Redistributions of source code must retain the above copyright
9f856f099SNavdeep Parhar * notice, this list of conditions and the following disclaimer.
10f856f099SNavdeep Parhar * 2. Redistributions in binary form must reproduce the above copyright
11f856f099SNavdeep Parhar * notice, this list of conditions and the following disclaimer in the
12f856f099SNavdeep Parhar * documentation and/or other materials provided with the distribution.
13f856f099SNavdeep Parhar *
14f856f099SNavdeep Parhar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15f856f099SNavdeep Parhar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16f856f099SNavdeep Parhar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17f856f099SNavdeep Parhar * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18f856f099SNavdeep Parhar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19f856f099SNavdeep Parhar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20f856f099SNavdeep Parhar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21f856f099SNavdeep Parhar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22f856f099SNavdeep Parhar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23f856f099SNavdeep Parhar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24f856f099SNavdeep Parhar * SUCH DAMAGE.
25f856f099SNavdeep Parhar */
26f856f099SNavdeep Parhar
27f856f099SNavdeep Parhar #include <sys/types.h>
28f856f099SNavdeep Parhar #include <sys/param.h>
29f856f099SNavdeep Parhar
30f856f099SNavdeep Parhar #include "common/common.h"
31f856f099SNavdeep Parhar #include "common/t4_regs.h"
32f856f099SNavdeep Parhar #include "cudbg.h"
33f856f099SNavdeep Parhar #include "cudbg_lib_common.h"
34f856f099SNavdeep Parhar #include "cudbg_entity.h"
35f856f099SNavdeep Parhar
36f856f099SNavdeep Parhar int collect_wtp_data(struct cudbg_init *pdbg_init,
37f856f099SNavdeep Parhar struct cudbg_buffer *dbg_buff,
38f856f099SNavdeep Parhar struct cudbg_error *cudbg_err);
39f856f099SNavdeep Parhar /*SGE_DEBUG Registers.*/
40f856f099SNavdeep Parhar #define TP_MIB_SIZE 0x5e
41f856f099SNavdeep Parhar
42f856f099SNavdeep Parhar struct sge_debug_reg_data {
43f856f099SNavdeep Parhar /*indx0*/
44f856f099SNavdeep Parhar u32 reserved1:4;
45f856f099SNavdeep Parhar u32 reserved2:4;
46f856f099SNavdeep Parhar u32 debug_uP_SOP_cnt:4;
47f856f099SNavdeep Parhar u32 debug_uP_EOP_cnt:4;
48f856f099SNavdeep Parhar u32 debug_CIM_SOP1_cnt:4;
49f856f099SNavdeep Parhar u32 debug_CIM_EOP1_cnt:4;
50f856f099SNavdeep Parhar u32 debug_CIM_SOP0_cnt:4;
51f856f099SNavdeep Parhar u32 debug_CIM_EOP0_cnt:4;
52f856f099SNavdeep Parhar
53f856f099SNavdeep Parhar /*indx1*/
54f856f099SNavdeep Parhar u32 reserved3:32;
55f856f099SNavdeep Parhar
56f856f099SNavdeep Parhar /*indx2*/
57f856f099SNavdeep Parhar u32 debug_T_Rx_SOP1_cnt:4;
58f856f099SNavdeep Parhar u32 debug_T_Rx_EOP1_cnt:4;
59f856f099SNavdeep Parhar u32 debug_T_Rx_SOP0_cnt:4;
60f856f099SNavdeep Parhar u32 debug_T_Rx_EOP0_cnt:4;
61f856f099SNavdeep Parhar u32 debug_U_Rx_SOP1_cnt:4;
62f856f099SNavdeep Parhar u32 debug_U_Rx_EOP1_cnt:4;
63f856f099SNavdeep Parhar u32 debug_U_Rx_SOP0_cnt:4;
64f856f099SNavdeep Parhar u32 debug_U_Rx_EOP0_cnt:4;
65f856f099SNavdeep Parhar
66f856f099SNavdeep Parhar /*indx3*/
67f856f099SNavdeep Parhar u32 reserved4:32;
68f856f099SNavdeep Parhar
69f856f099SNavdeep Parhar /*indx4*/
70f856f099SNavdeep Parhar u32 debug_UD_Rx_SOP3_cnt:4;
71f856f099SNavdeep Parhar u32 debug_UD_Rx_EOP3_cnt:4;
72f856f099SNavdeep Parhar u32 debug_UD_Rx_SOP2_cnt:4;
73f856f099SNavdeep Parhar u32 debug_UD_Rx_EOP2_cnt:4;
74f856f099SNavdeep Parhar u32 debug_UD_Rx_SOP1_cnt:4;
75f856f099SNavdeep Parhar u32 debug_UD_Rx_EOP1_cnt:4;
76f856f099SNavdeep Parhar u32 debug_UD_Rx_SOP0_cnt:4;
77f856f099SNavdeep Parhar u32 debug_UD_Rx_EOP0_cnt:4;
78f856f099SNavdeep Parhar
79f856f099SNavdeep Parhar /*indx5*/
80f856f099SNavdeep Parhar u32 reserved5:32;
81f856f099SNavdeep Parhar
82f856f099SNavdeep Parhar /*indx6*/
83f856f099SNavdeep Parhar u32 debug_U_Tx_SOP3_cnt:4;
84f856f099SNavdeep Parhar u32 debug_U_Tx_EOP3_cnt:4;
85f856f099SNavdeep Parhar u32 debug_U_Tx_SOP2_cnt:4;
86f856f099SNavdeep Parhar u32 debug_U_Tx_EOP2_cnt:4;
87f856f099SNavdeep Parhar u32 debug_U_Tx_SOP1_cnt:4;
88f856f099SNavdeep Parhar u32 debug_U_Tx_EOP1_cnt:4;
89f856f099SNavdeep Parhar u32 debug_U_Tx_SOP0_cnt:4;
90f856f099SNavdeep Parhar u32 debug_U_Tx_EOP0_cnt:4;
91f856f099SNavdeep Parhar
92f856f099SNavdeep Parhar /*indx7*/
93f856f099SNavdeep Parhar u32 reserved6:32;
94f856f099SNavdeep Parhar
95f856f099SNavdeep Parhar /*indx8*/
96f856f099SNavdeep Parhar u32 debug_PC_Rsp_SOP1_cnt:4;
97f856f099SNavdeep Parhar u32 debug_PC_Rsp_EOP1_cnt:4;
98f856f099SNavdeep Parhar u32 debug_PC_Rsp_SOP0_cnt:4;
99f856f099SNavdeep Parhar u32 debug_PC_Rsp_EOP0_cnt:4;
100f856f099SNavdeep Parhar u32 debug_PC_Req_SOP1_cnt:4;
101f856f099SNavdeep Parhar u32 debug_PC_Req_EOP1_cnt:4;
102f856f099SNavdeep Parhar u32 debug_PC_Req_SOP0_cnt:4;
103f856f099SNavdeep Parhar u32 debug_PC_Req_EOP0_cnt:4;
104f856f099SNavdeep Parhar
105f856f099SNavdeep Parhar /*indx9*/
106f856f099SNavdeep Parhar u32 reserved7:32;
107f856f099SNavdeep Parhar
108f856f099SNavdeep Parhar /*indx10*/
109f856f099SNavdeep Parhar u32 debug_PD_Req_SOP3_cnt:4;
110f856f099SNavdeep Parhar u32 debug_PD_Req_EOP3_cnt:4;
111f856f099SNavdeep Parhar u32 debug_PD_Req_SOP2_cnt:4;
112f856f099SNavdeep Parhar u32 debug_PD_Req_EOP2_cnt:4;
113f856f099SNavdeep Parhar u32 debug_PD_Req_SOP1_cnt:4;
114f856f099SNavdeep Parhar u32 debug_PD_Req_EOP1_cnt:4;
115f856f099SNavdeep Parhar u32 debug_PD_Req_SOP0_cnt:4;
116f856f099SNavdeep Parhar u32 debug_PD_Req_EOP0_cnt:4;
117f856f099SNavdeep Parhar
118f856f099SNavdeep Parhar /*indx11*/
119f856f099SNavdeep Parhar u32 reserved8:32;
120f856f099SNavdeep Parhar
121f856f099SNavdeep Parhar /*indx12*/
122f856f099SNavdeep Parhar u32 debug_PD_Rsp_SOP3_cnt:4;
123f856f099SNavdeep Parhar u32 debug_PD_Rsp_EOP3_cnt:4;
124f856f099SNavdeep Parhar u32 debug_PD_Rsp_SOP2_cnt:4;
125f856f099SNavdeep Parhar u32 debug_PD_Rsp_EOP2_cnt:4;
126f856f099SNavdeep Parhar u32 debug_PD_Rsp_SOP1_cnt:4;
127f856f099SNavdeep Parhar u32 debug_PD_Rsp_EOP1_cnt:4;
128f856f099SNavdeep Parhar u32 debug_PD_Rsp_SOP0_cnt:4;
129f856f099SNavdeep Parhar u32 debug_PD_Rsp_EOP0_cnt:4;
130f856f099SNavdeep Parhar
131f856f099SNavdeep Parhar /*indx13*/
132f856f099SNavdeep Parhar u32 reserved9:32;
133f856f099SNavdeep Parhar
134f856f099SNavdeep Parhar /*indx14*/
135f856f099SNavdeep Parhar u32 debug_CPLSW_TP_Rx_SOP1_cnt:4;
136f856f099SNavdeep Parhar u32 debug_CPLSW_TP_Rx_EOP1_cnt:4;
137f856f099SNavdeep Parhar u32 debug_CPLSW_TP_Rx_SOP0_cnt:4;
138f856f099SNavdeep Parhar u32 debug_CPLSW_TP_Rx_EOP0_cnt:4;
139f856f099SNavdeep Parhar u32 debug_CPLSW_CIM_SOP1_cnt:4;
140f856f099SNavdeep Parhar u32 debug_CPLSW_CIM_EOP1_cnt:4;
141f856f099SNavdeep Parhar u32 debug_CPLSW_CIM_SOP0_cnt:4;
142f856f099SNavdeep Parhar u32 debug_CPLSW_CIM_EOP0_cnt:4;
143f856f099SNavdeep Parhar
144f856f099SNavdeep Parhar /*indx15*/
145f856f099SNavdeep Parhar u32 reserved10:32;
146f856f099SNavdeep Parhar
147f856f099SNavdeep Parhar /*indx16*/
148f856f099SNavdeep Parhar u32 debug_PD_Req_Rd3_cnt:4;
149f856f099SNavdeep Parhar u32 debug_PD_Req_Rd2_cnt:4;
150f856f099SNavdeep Parhar u32 debug_PD_Req_Rd1_cnt:4;
151f856f099SNavdeep Parhar u32 debug_PD_Req_Rd0_cnt:4;
152f856f099SNavdeep Parhar u32 debug_PD_Req_Int3_cnt:4;
153f856f099SNavdeep Parhar u32 debug_PD_Req_Int2_cnt:4;
154f856f099SNavdeep Parhar u32 debug_PD_Req_Int1_cnt:4;
155f856f099SNavdeep Parhar u32 debug_PD_Req_Int0_cnt:4;
156f856f099SNavdeep Parhar
157f856f099SNavdeep Parhar };
158f856f099SNavdeep Parhar
159f856f099SNavdeep Parhar struct tp_mib_type tp_mib[] = {
160f856f099SNavdeep Parhar {"tp_mib_mac_in_err_0", 0x0},
161f856f099SNavdeep Parhar {"tp_mib_mac_in_err_1", 0x1},
162f856f099SNavdeep Parhar {"tp_mib_mac_in_err_2", 0x2},
163f856f099SNavdeep Parhar {"tp_mib_mac_in_err_3", 0x3},
164f856f099SNavdeep Parhar {"tp_mib_hdr_in_err_0", 0x4},
165f856f099SNavdeep Parhar {"tp_mib_hdr_in_err_1", 0x5},
166f856f099SNavdeep Parhar {"tp_mib_hdr_in_err_2", 0x6},
167f856f099SNavdeep Parhar {"tp_mib_hdr_in_err_3", 0x7},
168f856f099SNavdeep Parhar {"tp_mib_tcp_in_err_0", 0x8},
169f856f099SNavdeep Parhar {"tp_mib_tcp_in_err_1", 0x9},
170f856f099SNavdeep Parhar {"tp_mib_tcp_in_err_2", 0xa},
171f856f099SNavdeep Parhar {"tp_mib_tcp_in_err_3", 0xb},
172f856f099SNavdeep Parhar {"tp_mib_tcp_out_rst", 0xc},
173f856f099SNavdeep Parhar {"tp_mib_tcp_in_seg_hi", 0x10},
174f856f099SNavdeep Parhar {"tp_mib_tcp_in_seg_lo", 0x11},
175f856f099SNavdeep Parhar {"tp_mib_tcp_out_seg_hi", 0x12},
176f856f099SNavdeep Parhar {"tp_mib_tcp_out_seg_lo", 0x13},
177f856f099SNavdeep Parhar {"tp_mib_tcp_rxt_seg_hi", 0x14},
178f856f099SNavdeep Parhar {"tp_mib_tcp_rxt_seg_lo", 0x15},
179f856f099SNavdeep Parhar {"tp_mib_tnl_cng_drop_0", 0x18},
180f856f099SNavdeep Parhar {"tp_mib_tnl_cng_drop_1", 0x19},
181f856f099SNavdeep Parhar {"tp_mib_tnl_cng_drop_2", 0x1a},
182f856f099SNavdeep Parhar {"tp_mib_tnl_cng_drop_3", 0x1b},
183f856f099SNavdeep Parhar {"tp_mib_ofd_chn_drop_0", 0x1c},
184f856f099SNavdeep Parhar {"tp_mib_ofd_chn_drop_1", 0x1d},
185f856f099SNavdeep Parhar {"tp_mib_ofd_chn_drop_2", 0x1e},
186f856f099SNavdeep Parhar {"tp_mib_ofd_chn_drop_3", 0x1f},
187f856f099SNavdeep Parhar {"tp_mib_tnl_out_pkt_0", 0x20},
188f856f099SNavdeep Parhar {"tp_mib_tnl_out_pkt_1", 0x21},
189f856f099SNavdeep Parhar {"tp_mib_tnl_out_pkt_2", 0x22},
190f856f099SNavdeep Parhar {"tp_mib_tnl_out_pkt_3", 0x23},
191f856f099SNavdeep Parhar {"tp_mib_tnl_in_pkt_0", 0x24},
192f856f099SNavdeep Parhar {"tp_mib_tnl_in_pkt_1", 0x25},
193f856f099SNavdeep Parhar {"tp_mib_tnl_in_pkt_2", 0x26},
194f856f099SNavdeep Parhar {"tp_mib_tnl_in_pkt_3", 0x27},
195f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_err_0", 0x28},
196f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_err_1", 0x29},
197f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_err_2", 0x2a},
198f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_err_3", 0x2b},
199f856f099SNavdeep Parhar {"tp_mib_tcp_v6out_rst", 0x2c},
200f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_seg_hi", 0x30},
201f856f099SNavdeep Parhar {"tp_mib_tcp_v6in_seg_lo", 0x31},
202f856f099SNavdeep Parhar {"tp_mib_tcp_v6out_seg_hi", 0x32},
203f856f099SNavdeep Parhar {"tp_mib_tcp_v6out_seg_lo", 0x33},
204f856f099SNavdeep Parhar {"tp_mib_tcp_v6rxt_seg_hi", 0x34},
205f856f099SNavdeep Parhar {"tp_mib_tcp_v6rxt_seg_lo", 0x35},
206f856f099SNavdeep Parhar {"tp_mib_ofd_arp_drop", 0x36},
207f856f099SNavdeep Parhar {"tp_mib_ofd_dfr_drop", 0x37},
208f856f099SNavdeep Parhar {"tp_mib_cpl_in_req_0", 0x38},
209f856f099SNavdeep Parhar {"tp_mib_cpl_in_req_1", 0x39},
210f856f099SNavdeep Parhar {"tp_mib_cpl_in_req_2", 0x3a},
211f856f099SNavdeep Parhar {"tp_mib_cpl_in_req_3", 0x3b},
212f856f099SNavdeep Parhar {"tp_mib_cpl_out_rsp_0", 0x3c},
213f856f099SNavdeep Parhar {"tp_mib_cpl_out_rsp_1", 0x3d},
214f856f099SNavdeep Parhar {"tp_mib_cpl_out_rsp_2", 0x3e},
215f856f099SNavdeep Parhar {"tp_mib_cpl_out_rsp_3", 0x3f},
216f856f099SNavdeep Parhar {"tp_mib_tnl_lpbk_0", 0x40},
217f856f099SNavdeep Parhar {"tp_mib_tnl_lpbk_1", 0x41},
218f856f099SNavdeep Parhar {"tp_mib_tnl_lpbk_2", 0x42},
219f856f099SNavdeep Parhar {"tp_mib_tnl_lpbk_3", 0x43},
220f856f099SNavdeep Parhar {"tp_mib_tnl_drop_0", 0x44},
221f856f099SNavdeep Parhar {"tp_mib_tnl_drop_1", 0x45},
222f856f099SNavdeep Parhar {"tp_mib_tnl_drop_2", 0x46},
223f856f099SNavdeep Parhar {"tp_mib_tnl_drop_3", 0x47},
224f856f099SNavdeep Parhar {"tp_mib_fcoe_ddp_0", 0x48},
225f856f099SNavdeep Parhar {"tp_mib_fcoe_ddp_1", 0x49},
226f856f099SNavdeep Parhar {"tp_mib_fcoe_ddp_2", 0x4a},
227f856f099SNavdeep Parhar {"tp_mib_fcoe_ddp_3", 0x4b},
228f856f099SNavdeep Parhar {"tp_mib_fcoe_drop_0", 0x4c},
229f856f099SNavdeep Parhar {"tp_mib_fcoe_drop_1", 0x4d},
230f856f099SNavdeep Parhar {"tp_mib_fcoe_drop_2", 0x4e},
231f856f099SNavdeep Parhar {"tp_mib_fcoe_drop_3", 0x4f},
232f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_0_hi", 0x50},
233f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_0_lo", 0x51},
234f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_1_hi", 0x52},
235f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_1_lo", 0x53},
236f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_2_hi", 0x54},
237f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_2_lo", 0x55},
238f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_3_hi", 0x56},
239f856f099SNavdeep Parhar {"tp_mib_fcoe_byte_3_lo", 0x57},
240f856f099SNavdeep Parhar {"tp_mib_ofd_vln_drop_0", 0x58},
241f856f099SNavdeep Parhar {"tp_mib_ofd_vln_drop_1", 0x59},
242f856f099SNavdeep Parhar {"tp_mib_ofd_vln_drop_2", 0x5a},
243f856f099SNavdeep Parhar {"tp_mib_ofd_vln_drop_3", 0x5b},
244f856f099SNavdeep Parhar {"tp_mib_usm_pkts", 0x5c},
245f856f099SNavdeep Parhar {"tp_mib_usm_drop", 0x5d},
246f856f099SNavdeep Parhar {"tp_mib_usm_bytes_hi", 0x5e},
247f856f099SNavdeep Parhar {"tp_mib_usm_bytes_lo", 0x5f},
248f856f099SNavdeep Parhar {"tp_mib_tid_del", 0x60},
249f856f099SNavdeep Parhar {"tp_mib_tid_inv", 0x61},
250f856f099SNavdeep Parhar {"tp_mib_tid_act", 0x62},
251f856f099SNavdeep Parhar {"tp_mib_tid_pas", 0x63},
252f856f099SNavdeep Parhar {"tp_mib_rqe_dfr_mod", 0x64},
253f856f099SNavdeep Parhar {"tp_mib_rqe_dfr_pkt", 0x65}
254f856f099SNavdeep Parhar };
255f856f099SNavdeep Parhar
read_sge_debug_data(struct cudbg_init * pdbg_init,u32 * sge_dbg_reg)256f856f099SNavdeep Parhar static u32 read_sge_debug_data(struct cudbg_init *pdbg_init, u32 *sge_dbg_reg)
257f856f099SNavdeep Parhar {
258f856f099SNavdeep Parhar struct adapter *padap = pdbg_init->adap;
259f856f099SNavdeep Parhar u32 value;
260f856f099SNavdeep Parhar int i = 0;
261f856f099SNavdeep Parhar
262f856f099SNavdeep Parhar for (i = 0; i <= 15; i++) {
263f856f099SNavdeep Parhar t4_write_reg(padap, A_SGE_DEBUG_INDEX, (u32)i);
264f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_LOW);
265f856f099SNavdeep Parhar /*printf("LOW 0x%08x\n", value);*/
266f856f099SNavdeep Parhar sge_dbg_reg[(i << 1) | 1] = HTONL_NIBBLE(value);
267f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH);
268f856f099SNavdeep Parhar /*printf("HIGH 0x%08x\n", value);*/
269f856f099SNavdeep Parhar sge_dbg_reg[(i << 1)] = HTONL_NIBBLE(value);
270f856f099SNavdeep Parhar }
271f856f099SNavdeep Parhar return 0;
272f856f099SNavdeep Parhar }
273f856f099SNavdeep Parhar
read_tp_mib_data(struct cudbg_init * pdbg_init,struct tp_mib_data ** ppTp_Mib)274f856f099SNavdeep Parhar static u32 read_tp_mib_data(struct cudbg_init *pdbg_init,
275f856f099SNavdeep Parhar struct tp_mib_data **ppTp_Mib)
276f856f099SNavdeep Parhar {
277f856f099SNavdeep Parhar struct adapter *padap = pdbg_init->adap;
278f856f099SNavdeep Parhar u32 i = 0;
279f856f099SNavdeep Parhar
280f856f099SNavdeep Parhar for (i = 0; i < TP_MIB_SIZE; i++) {
281f856f099SNavdeep Parhar t4_tp_mib_read(padap, &tp_mib[i].value, 1,
282f856f099SNavdeep Parhar (u32)tp_mib[i].addr, true);
283f856f099SNavdeep Parhar }
284f856f099SNavdeep Parhar *ppTp_Mib = (struct tp_mib_data *)&tp_mib[0];
285f856f099SNavdeep Parhar
286f856f099SNavdeep Parhar return 0;
287f856f099SNavdeep Parhar }
288f856f099SNavdeep Parhar
t5_wtp_data(struct cudbg_init * pdbg_init,struct cudbg_buffer * dbg_buff,struct cudbg_error * cudbg_err)289f856f099SNavdeep Parhar static int t5_wtp_data(struct cudbg_init *pdbg_init,
290f856f099SNavdeep Parhar struct cudbg_buffer *dbg_buff,
291f856f099SNavdeep Parhar struct cudbg_error *cudbg_err)
292f856f099SNavdeep Parhar {
293f856f099SNavdeep Parhar struct adapter *padap = pdbg_init->adap;
294f856f099SNavdeep Parhar struct sge_debug_reg_data *sge_dbg_reg = NULL;
295f856f099SNavdeep Parhar struct cudbg_buffer scratch_buff;
296f856f099SNavdeep Parhar struct tp_mib_data *ptp_mib = NULL;
297f856f099SNavdeep Parhar struct wtp_data *wtp;
298f856f099SNavdeep Parhar u32 Sge_Dbg[32] = {0};
299f856f099SNavdeep Parhar u32 value = 0;
300f856f099SNavdeep Parhar u32 i = 0;
301f856f099SNavdeep Parhar u32 drop = 0;
302f856f099SNavdeep Parhar u32 err = 0;
303f856f099SNavdeep Parhar u32 offset;
304f856f099SNavdeep Parhar int rc = 0;
305f856f099SNavdeep Parhar
306f856f099SNavdeep Parhar rc = get_scratch_buff(dbg_buff, sizeof(struct wtp_data), &scratch_buff);
307f856f099SNavdeep Parhar
308f856f099SNavdeep Parhar if (rc)
309f856f099SNavdeep Parhar goto err;
310f856f099SNavdeep Parhar
311f856f099SNavdeep Parhar offset = scratch_buff.offset;
312f856f099SNavdeep Parhar wtp = (struct wtp_data *)((char *)scratch_buff.data + offset);
313f856f099SNavdeep Parhar
314f856f099SNavdeep Parhar read_sge_debug_data(pdbg_init, Sge_Dbg);
315f856f099SNavdeep Parhar read_tp_mib_data(pdbg_init, &ptp_mib);
316f856f099SNavdeep Parhar
317f856f099SNavdeep Parhar sge_dbg_reg = (struct sge_debug_reg_data *) &Sge_Dbg[0];
318f856f099SNavdeep Parhar
319f856f099SNavdeep Parhar /*#######################################################################*/
320f856f099SNavdeep Parhar /*# TX PATH, starting from pcie*/
321f856f099SNavdeep Parhar /*#######################################################################*/
322f856f099SNavdeep Parhar
323*f273b456SGordon Bergling /* Get Requests of commands from SGE to PCIE*/
324f856f099SNavdeep Parhar
325f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.sop[0] = sge_dbg_reg->debug_PC_Req_SOP0_cnt;
326f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.sop[1] = sge_dbg_reg->debug_PC_Req_SOP1_cnt;
327f856f099SNavdeep Parhar
328f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.eop[0] = sge_dbg_reg->debug_PC_Req_EOP0_cnt;
329f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.eop[1] = sge_dbg_reg->debug_PC_Req_EOP1_cnt;
330f856f099SNavdeep Parhar
331*f273b456SGordon Bergling /* Get Requests of commands from PCIE to core*/
332f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_CMDR_REQ_CNT);
333f856f099SNavdeep Parhar
334f856f099SNavdeep Parhar wtp->pcie_core_cmd_req.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
335f856f099SNavdeep Parhar wtp->pcie_core_cmd_req.sop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
336f856f099SNavdeep Parhar /* there is no EOP for this, so we fake it.*/
337f856f099SNavdeep Parhar wtp->pcie_core_cmd_req.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
338f856f099SNavdeep Parhar wtp->pcie_core_cmd_req.eop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
339f856f099SNavdeep Parhar
340f856f099SNavdeep Parhar /* Get DMA stats*/
341f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
342f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_DMA_STAT3 + (i * 0x10));
343f856f099SNavdeep Parhar wtp->pcie_t5_dma_stat3.sop[i] = value & 0xFF;
344f856f099SNavdeep Parhar wtp->pcie_t5_dma_stat3.eop[i] = ((value >> 16) & 0xFF);
345f856f099SNavdeep Parhar }
346f856f099SNavdeep Parhar
347f856f099SNavdeep Parhar /* Get SGE debug data high index 6*/
348f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_6);
349f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.sop[0] = ((value >> 4) & 0x0F);
350f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.eop[0] = ((value >> 0) & 0x0F);
351f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.sop[1] = ((value >> 12) & 0x0F);
352f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.eop[1] = ((value >> 8) & 0x0F);
353f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.sop[2] = ((value >> 20) & 0x0F);
354f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.eop[2] = ((value >> 16) & 0x0F);
355f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.sop[3] = ((value >> 28) & 0x0F);
356f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_6.eop[3] = ((value >> 24) & 0x0F);
357f856f099SNavdeep Parhar
358f856f099SNavdeep Parhar /* Get SGE debug data high index 3*/
359f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_3);
360f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.sop[0] = ((value >> 4) & 0x0F);
361f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.eop[0] = ((value >> 0) & 0x0F);
362f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.sop[1] = ((value >> 12) & 0x0F);
363f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.eop[1] = ((value >> 8) & 0x0F);
364f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.sop[2] = ((value >> 20) & 0x0F);
365f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.eop[2] = ((value >> 16) & 0x0F);
366f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.sop[3] = ((value >> 28) & 0x0F);
367f856f099SNavdeep Parhar wtp->sge_debug_data_high_index_3.eop[3] = ((value >> 24) & 0x0F);
368f856f099SNavdeep Parhar
369f856f099SNavdeep Parhar /* Get ULP SE CNT CHx*/
370f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
371f856f099SNavdeep Parhar value = t4_read_reg(padap, A_ULP_TX_SE_CNT_CH0 + (i * 4));
372f856f099SNavdeep Parhar wtp->ulp_se_cnt_chx.sop[i] = ((value >> 28) & 0x0F);
373f856f099SNavdeep Parhar wtp->ulp_se_cnt_chx.eop[i] = ((value >> 24) & 0x0F);
374f856f099SNavdeep Parhar }
375f856f099SNavdeep Parhar
376f856f099SNavdeep Parhar /* Get MAC PORTx PKT COUNT*/
377f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
378f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x3081c + ((i * 4) << 12));
379f856f099SNavdeep Parhar wtp->mac_portx_pkt_count.sop[i] = ((value >> 24) & 0xFF);
380f856f099SNavdeep Parhar wtp->mac_portx_pkt_count.eop[i] = ((value >> 16) & 0xFF);
381f856f099SNavdeep Parhar wtp->mac_porrx_pkt_count.sop[i] = ((value >> 8) & 0xFF);
382f856f099SNavdeep Parhar wtp->mac_porrx_pkt_count.eop[i] = ((value >> 0) & 0xFF);
383f856f099SNavdeep Parhar }
384f856f099SNavdeep Parhar
385f856f099SNavdeep Parhar /* Get mac portx aFramesTransmittedok*/
386f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
387f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30a80 + ((i * 4) << 12));
388f856f099SNavdeep Parhar wtp->mac_portx_aframestra_ok.sop[i] = (value & 0xFF);
389f856f099SNavdeep Parhar wtp->mac_portx_aframestra_ok.eop[i] = (value & 0xFF);
390f856f099SNavdeep Parhar }
391f856f099SNavdeep Parhar
392f856f099SNavdeep Parhar /* Get command respones from core to PCIE*/
393f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_CMDR_RSP_CNT);
394f856f099SNavdeep Parhar
395f856f099SNavdeep Parhar wtp->core_pcie_cmd_rsp.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
396f856f099SNavdeep Parhar wtp->core_pcie_cmd_rsp.sop[1] = ((value >> 16) & 0xFF); /*bit 16:23*/
397f856f099SNavdeep Parhar
398f856f099SNavdeep Parhar wtp->core_pcie_cmd_rsp.eop[0] = ((value >> 8) & 0xFF); /*bit 8:15*/
399f856f099SNavdeep Parhar wtp->core_pcie_cmd_rsp.eop[1] = ((value >> 24) & 0xFF); /*bit 24:31*/
400f856f099SNavdeep Parhar
401f856f099SNavdeep Parhar /*Get command Resposes from PCIE to SGE*/
402f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.sop[0] = sge_dbg_reg->debug_PC_Rsp_SOP0_cnt;
403f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.sop[1] = sge_dbg_reg->debug_PC_Rsp_SOP1_cnt;
404f856f099SNavdeep Parhar
405f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.eop[0] = sge_dbg_reg->debug_PC_Rsp_EOP0_cnt;
406f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.eop[1] = sge_dbg_reg->debug_PC_Rsp_EOP1_cnt;
407f856f099SNavdeep Parhar
408f856f099SNavdeep Parhar /* Get commands sent from SGE to CIM/uP*/
409f856f099SNavdeep Parhar wtp->sge_cim.sop[0] = sge_dbg_reg->debug_CIM_SOP0_cnt;
410f856f099SNavdeep Parhar wtp->sge_cim.sop[1] = sge_dbg_reg->debug_CIM_SOP1_cnt;
411f856f099SNavdeep Parhar
412f856f099SNavdeep Parhar wtp->sge_cim.eop[0] = sge_dbg_reg->debug_CIM_EOP0_cnt;
413f856f099SNavdeep Parhar wtp->sge_cim.eop[1] = sge_dbg_reg->debug_CIM_EOP1_cnt;
414f856f099SNavdeep Parhar
415*f273b456SGordon Bergling /* Get Requests of data from PCIE by SGE*/
416f856f099SNavdeep Parhar wtp->utx_sge_dma_req.sop[0] = sge_dbg_reg->debug_UD_Rx_SOP0_cnt;
417f856f099SNavdeep Parhar wtp->utx_sge_dma_req.sop[1] = sge_dbg_reg->debug_UD_Rx_SOP1_cnt;
418f856f099SNavdeep Parhar wtp->utx_sge_dma_req.sop[2] = sge_dbg_reg->debug_UD_Rx_SOP2_cnt;
419f856f099SNavdeep Parhar wtp->utx_sge_dma_req.sop[3] = sge_dbg_reg->debug_UD_Rx_SOP3_cnt;
420f856f099SNavdeep Parhar
421f856f099SNavdeep Parhar wtp->utx_sge_dma_req.eop[0] = sge_dbg_reg->debug_UD_Rx_EOP0_cnt;
422f856f099SNavdeep Parhar wtp->utx_sge_dma_req.eop[1] = sge_dbg_reg->debug_UD_Rx_EOP1_cnt;
423f856f099SNavdeep Parhar wtp->utx_sge_dma_req.eop[2] = sge_dbg_reg->debug_UD_Rx_EOP2_cnt;
424f856f099SNavdeep Parhar wtp->utx_sge_dma_req.eop[3] = sge_dbg_reg->debug_UD_Rx_EOP3_cnt;
425f856f099SNavdeep Parhar
426*f273b456SGordon Bergling /* Get Requests of data from PCIE by SGE*/
427f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.sop[0] = sge_dbg_reg->debug_PD_Req_Rd0_cnt;
428f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.sop[1] = sge_dbg_reg->debug_PD_Req_Rd1_cnt;
429f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.sop[2] = sge_dbg_reg->debug_PD_Req_Rd2_cnt;
430f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.sop[3] = sge_dbg_reg->debug_PD_Req_Rd3_cnt;
431f856f099SNavdeep Parhar /*no EOP's, so fake it.*/
432f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.eop[0] = sge_dbg_reg->debug_PD_Req_Rd0_cnt;
433f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.eop[1] = sge_dbg_reg->debug_PD_Req_Rd1_cnt;
434f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.eop[2] = sge_dbg_reg->debug_PD_Req_Rd2_cnt;
435f856f099SNavdeep Parhar wtp->sge_pcie_dma_req.eop[3] = sge_dbg_reg->debug_PD_Req_Rd3_cnt;
436f856f099SNavdeep Parhar
437*f273b456SGordon Bergling /* Get Requests of data from PCIE to core*/
438f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAR_REQ_CNT);
439f856f099SNavdeep Parhar
440f856f099SNavdeep Parhar wtp->pcie_core_dma_req.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
441f856f099SNavdeep Parhar wtp->pcie_core_dma_req.sop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
442f856f099SNavdeep Parhar wtp->pcie_core_dma_req.sop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
443f856f099SNavdeep Parhar wtp->pcie_core_dma_req.sop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
444f856f099SNavdeep Parhar /* There is no eop so fake it.*/
445f856f099SNavdeep Parhar wtp->pcie_core_dma_req.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
446f856f099SNavdeep Parhar wtp->pcie_core_dma_req.eop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
447f856f099SNavdeep Parhar wtp->pcie_core_dma_req.eop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
448f856f099SNavdeep Parhar wtp->pcie_core_dma_req.eop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
449f856f099SNavdeep Parhar
450f856f099SNavdeep Parhar /* Get data responses from core to PCIE*/
451f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAR_RSP_SOP_CNT);
452f856f099SNavdeep Parhar
453f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
454f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.sop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
455f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.sop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
456f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.sop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
457f856f099SNavdeep Parhar
458f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAR_RSP_EOP_CNT);
459f856f099SNavdeep Parhar
460f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
461f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.eop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
462f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.eop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
463f856f099SNavdeep Parhar wtp->core_pcie_dma_rsp.eop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
464f856f099SNavdeep Parhar
465f856f099SNavdeep Parhar /* Get PCIE_DATA to SGE*/
466f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.sop[0] = sge_dbg_reg->debug_PD_Rsp_SOP0_cnt;
467f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.sop[1] = sge_dbg_reg->debug_PD_Rsp_SOP1_cnt;
468f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.sop[2] = sge_dbg_reg->debug_PD_Rsp_SOP2_cnt;
469f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.sop[3] = sge_dbg_reg->debug_PD_Rsp_SOP3_cnt;
470f856f099SNavdeep Parhar
471f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.eop[0] = sge_dbg_reg->debug_PD_Rsp_EOP0_cnt;
472f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.eop[1] = sge_dbg_reg->debug_PD_Rsp_EOP1_cnt;
473f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.eop[2] = sge_dbg_reg->debug_PD_Rsp_EOP2_cnt;
474f856f099SNavdeep Parhar wtp->pcie_sge_dma_rsp.eop[3] = sge_dbg_reg->debug_PD_Rsp_EOP3_cnt;
475f856f099SNavdeep Parhar
476f856f099SNavdeep Parhar /*Get SGE to ULP_TX*/
477f856f099SNavdeep Parhar wtp->sge_utx.sop[0] = sge_dbg_reg->debug_U_Tx_SOP0_cnt;
478f856f099SNavdeep Parhar wtp->sge_utx.sop[1] = sge_dbg_reg->debug_U_Tx_SOP1_cnt;
479f856f099SNavdeep Parhar wtp->sge_utx.sop[2] = sge_dbg_reg->debug_U_Tx_SOP2_cnt;
480f856f099SNavdeep Parhar wtp->sge_utx.sop[3] = sge_dbg_reg->debug_U_Tx_SOP3_cnt;
481f856f099SNavdeep Parhar
482f856f099SNavdeep Parhar wtp->sge_utx.eop[0] = sge_dbg_reg->debug_U_Tx_EOP0_cnt;
483f856f099SNavdeep Parhar wtp->sge_utx.eop[1] = sge_dbg_reg->debug_U_Tx_EOP1_cnt;
484f856f099SNavdeep Parhar wtp->sge_utx.eop[2] = sge_dbg_reg->debug_U_Tx_EOP2_cnt;
485f856f099SNavdeep Parhar wtp->sge_utx.eop[3] = sge_dbg_reg->debug_U_Tx_EOP3_cnt;
486f856f099SNavdeep Parhar
487f856f099SNavdeep Parhar /* Get ULP_TX to TP*/
488f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
489f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_ULP_TX_SE_CNT_CH0 + (i*4)));
490f856f099SNavdeep Parhar
491f856f099SNavdeep Parhar wtp->utx_tp.sop[i] = ((value >> 28) & 0xF); /*bits 28:31*/
492f856f099SNavdeep Parhar wtp->utx_tp.eop[i] = ((value >> 24) & 0xF); /*bits 24:27*/
493f856f099SNavdeep Parhar }
494f856f099SNavdeep Parhar
495f856f099SNavdeep Parhar /* Get TP_DBG_CSIDE registers*/
496f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
497f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_CSIDE_RX0 + i),
498f856f099SNavdeep Parhar true);
499f856f099SNavdeep Parhar
500f856f099SNavdeep Parhar wtp->utx_tpcside.sop[i] = ((value >> 28) & 0xF);/*bits 28:31*/
501f856f099SNavdeep Parhar wtp->utx_tpcside.eop[i] = ((value >> 24) & 0xF);/*bits 24:27*/
502f856f099SNavdeep Parhar wtp->tpcside_rxpld.sop[i] = ((value >> 20) & 0xF);/*bits 20:23*/
503f856f099SNavdeep Parhar wtp->tpcside_rxpld.eop[i] = ((value >> 16) & 0xF);/*bits 16:19*/
504f856f099SNavdeep Parhar wtp->tpcside_rxarb.sop[i] = ((value >> 12) & 0xF);/*bits 12:15*/
505f856f099SNavdeep Parhar wtp->tpcside_rxarb.eop[i] = ((value >> 8) & 0xF); /*bits 8:11*/
506f856f099SNavdeep Parhar wtp->tpcside_rxcpl.sop[i] = ((value >> 4) & 0xF); /*bits 4:7*/
507f856f099SNavdeep Parhar wtp->tpcside_rxcpl.eop[i] = ((value >> 0) & 0xF); /*bits 0:3*/
508f856f099SNavdeep Parhar }
509f856f099SNavdeep Parhar
510f856f099SNavdeep Parhar /* TP_DBG_ESIDE*/
511f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
512f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_ESIDE_PKT0 + i),
513f856f099SNavdeep Parhar true);
514f856f099SNavdeep Parhar
515f856f099SNavdeep Parhar wtp->tpeside_mps.sop[i] = ((value >> 28) & 0xF); /*bits 28:31*/
516f856f099SNavdeep Parhar wtp->tpeside_mps.eop[i] = ((value >> 24) & 0xF); /*bits 24:27*/
517f856f099SNavdeep Parhar wtp->tpeside_pm.sop[i] = ((value >> 20) & 0xF); /*bits 20:23*/
518f856f099SNavdeep Parhar wtp->tpeside_pm.eop[i] = ((value >> 16) & 0xF); /*bits 16:19*/
519f856f099SNavdeep Parhar wtp->mps_tpeside.sop[i] = ((value >> 12) & 0xF); /*bits 12:15*/
520f856f099SNavdeep Parhar wtp->mps_tpeside.eop[i] = ((value >> 8) & 0xF); /*bits 8:11*/
521f856f099SNavdeep Parhar wtp->tpeside_pld.sop[i] = ((value >> 4) & 0xF); /*bits 4:7*/
522f856f099SNavdeep Parhar wtp->tpeside_pld.eop[i] = ((value >> 0) & 0xF); /*bits 0:3*/
523f856f099SNavdeep Parhar
524f856f099SNavdeep Parhar }
525f856f099SNavdeep Parhar
526f856f099SNavdeep Parhar /*PCIE CMD STAT2*/
527f856f099SNavdeep Parhar for (i = 0; i < 3; i++) {
528f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x5988 + (i * 0x10));
529f856f099SNavdeep Parhar wtp->pcie_cmd_stat2.sop[i] = value & 0xFF;
530f856f099SNavdeep Parhar wtp->pcie_cmd_stat2.eop[i] = value & 0xFF;
531f856f099SNavdeep Parhar }
532f856f099SNavdeep Parhar
533f856f099SNavdeep Parhar /*PCIE cmd stat3*/
534f856f099SNavdeep Parhar for (i = 0; i < 3; i++) {
535f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x598c + (i * 0x10));
536f856f099SNavdeep Parhar wtp->pcie_cmd_stat3.sop[i] = value & 0xFF;
537f856f099SNavdeep Parhar wtp->pcie_cmd_stat3.eop[i] = value & 0xFF;
538f856f099SNavdeep Parhar }
539f856f099SNavdeep Parhar
540f856f099SNavdeep Parhar /* ULP_RX input/output*/
541f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
542f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_ULP_RX_SE_CNT_CH0 + (i*4)));
543f856f099SNavdeep Parhar
544f856f099SNavdeep Parhar wtp->pmrx_ulprx.sop[i] = ((value >> 4) & 0xF); /*bits 4:7*/
545f856f099SNavdeep Parhar wtp->pmrx_ulprx.eop[i] = ((value >> 0) & 0xF); /*bits 0:3*/
546f856f099SNavdeep Parhar wtp->ulprx_tpcside.sop[i] = ((value >> 28) & 0xF);/*bits 28:31*/
547f856f099SNavdeep Parhar wtp->ulprx_tpcside.eop[i] = ((value >> 24) & 0xF);/*bits 24:27*/
548f856f099SNavdeep Parhar }
549f856f099SNavdeep Parhar
550f856f099SNavdeep Parhar /* Get the MPS input from TP*/
551f856f099SNavdeep Parhar drop = 0;
552f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
553f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_TX_SE_CNT_TP01 + (i << 2)));
554f856f099SNavdeep Parhar wtp->tp_mps.sop[(i*2)] = ((value >> 8) & 0xFF); /*bit 8:15*/
555f856f099SNavdeep Parhar wtp->tp_mps.eop[(i*2)] = ((value >> 0) & 0xFF); /*bit 0:7*/
556f856f099SNavdeep Parhar wtp->tp_mps.sop[(i*2) + 1] = ((value >> 24) & 0xFF);/*bit 24:31
557f856f099SNavdeep Parhar */
558f856f099SNavdeep Parhar wtp->tp_mps.eop[(i*2) + 1] = ((value >> 16) & 0xFF);/*bit 16:23
559f856f099SNavdeep Parhar */
560f856f099SNavdeep Parhar }
561f856f099SNavdeep Parhar drop = ptp_mib->TP_MIB_OFD_ARP_DROP.value;
562f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_DFR_DROP.value;
563f856f099SNavdeep Parhar
564f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_DROP_0.value;
565f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_DROP_1.value;
566f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_DROP_2.value;
567f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_DROP_3.value;
568f856f099SNavdeep Parhar
569f856f099SNavdeep Parhar wtp->tp_mps.drops = drop;
570f856f099SNavdeep Parhar
571f856f099SNavdeep Parhar /* Get the MPS output to the MAC's*/
572f856f099SNavdeep Parhar drop = 0;
573f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
574f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_TX_SE_CNT_MAC01 + (i << 2)));
575f856f099SNavdeep Parhar wtp->mps_xgm.sop[(i*2)] = ((value >> 8) & 0xFF);/*bit 8:15*/
576f856f099SNavdeep Parhar wtp->mps_xgm.eop[(i*2)] = ((value >> 0) & 0xFF);/*bit 0:7*/
577f856f099SNavdeep Parhar wtp->mps_xgm.sop[(i*2) + 1] = ((value >> 24) & 0xFF);/*bit 24:31
578f856f099SNavdeep Parhar */
579f856f099SNavdeep Parhar wtp->mps_xgm.eop[(i*2) + 1] = ((value >> 16) & 0xFF);/*bit 16:23
580f856f099SNavdeep Parhar */
581f856f099SNavdeep Parhar }
582f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
583f856f099SNavdeep Parhar value = t4_read_reg(padap,
584f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_TX_PORT_DROP_L) +
585f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
586f856f099SNavdeep Parhar drop += value;
587f856f099SNavdeep Parhar }
588f856f099SNavdeep Parhar wtp->mps_xgm.drops = (drop & 0xFF);
589f856f099SNavdeep Parhar
590f856f099SNavdeep Parhar /* Get the SOP/EOP counters into and out of MAC. [JHANEL] I think this
591f856f099SNavdeep Parhar * is*/
592f856f099SNavdeep Parhar /* clear on read, so you have to read both TX and RX path at same
593f856f099SNavdeep Parhar * time.*/
594f856f099SNavdeep Parhar drop = 0;
595f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
596f856f099SNavdeep Parhar value = t4_read_reg(padap,
597f856f099SNavdeep Parhar (T5_PORT0_REG(A_MAC_PORT_PKT_COUNT) +
598f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
599f856f099SNavdeep Parhar
600f856f099SNavdeep Parhar wtp->tx_xgm_xgm.sop[i] = ((value >> 24) & 0xFF); /*bit 24:31*/
601f856f099SNavdeep Parhar wtp->tx_xgm_xgm.eop[i] = ((value >> 16) & 0xFF); /*bit 16:23*/
602f856f099SNavdeep Parhar wtp->rx_xgm_xgm.sop[i] = ((value >> 8) & 0xFF); /*bit 8:15*/
603f856f099SNavdeep Parhar wtp->rx_xgm_xgm.eop[i] = ((value >> 0) & 0xFF); /*bit 0:7*/
604f856f099SNavdeep Parhar }
605f856f099SNavdeep Parhar
606f856f099SNavdeep Parhar /* Get the MAC's output to the wire*/
607f856f099SNavdeep Parhar drop = 0;
608f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
609f856f099SNavdeep Parhar value = t4_read_reg(padap,
610f856f099SNavdeep Parhar (T5_PORT0_REG(A_MAC_PORT_AFRAMESTRANSMITTEDOK) +
611f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
612f856f099SNavdeep Parhar wtp->xgm_wire.sop[i] = (value);
613f856f099SNavdeep Parhar wtp->xgm_wire.eop[i] = (value); /* No EOP for XGMAC, so fake
614f856f099SNavdeep Parhar it.*/
615f856f099SNavdeep Parhar }
616f856f099SNavdeep Parhar
617f856f099SNavdeep Parhar /*########################################################################*/
618f856f099SNavdeep Parhar /*# RX PATH, starting from wire*/
619f856f099SNavdeep Parhar /*########################################################################*/
620f856f099SNavdeep Parhar
621f856f099SNavdeep Parhar /* Add up the wire input to the MAC*/
622f856f099SNavdeep Parhar drop = 0;
623f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
624f856f099SNavdeep Parhar value = t4_read_reg(padap,
625f856f099SNavdeep Parhar (T5_PORT0_REG(A_MAC_PORT_AFRAMESRECEIVEDOK) +
626f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
627f856f099SNavdeep Parhar
628f856f099SNavdeep Parhar wtp->wire_xgm.sop[i] = (value);
629f856f099SNavdeep Parhar wtp->wire_xgm.eop[i] = (value); /* No EOP for XGMAC, so fake
630f856f099SNavdeep Parhar it.*/
631f856f099SNavdeep Parhar }
632f856f099SNavdeep Parhar
633f856f099SNavdeep Parhar /* Already read the rx_xgm_xgm when reading TX path.*/
634f856f099SNavdeep Parhar
635f856f099SNavdeep Parhar /* Add up SOP/EOP's on all 8 MPS buffer channels*/
636f856f099SNavdeep Parhar drop = 0;
637f856f099SNavdeep Parhar for (i = 0; i < 8; i++) {
638f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_SE_CNT_IN0 + (i << 2)));
639f856f099SNavdeep Parhar
640f856f099SNavdeep Parhar wtp->xgm_mps.sop[i] = ((value >> 8) & 0xFF); /*bits 8:15*/
641f856f099SNavdeep Parhar wtp->xgm_mps.eop[i] = ((value >> 0) & 0xFF); /*bits 0:7*/
642f856f099SNavdeep Parhar }
643f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
644f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_CLS_DROP_CNT0 + (i << 2)));
645f856f099SNavdeep Parhar /* typo in JHANEL's code.*/
646f856f099SNavdeep Parhar drop += (value & 0xFFFF) + ((value >> 16) & 0xFFFF);
647f856f099SNavdeep Parhar }
648f856f099SNavdeep Parhar wtp->xgm_mps.cls_drop = drop & 0xFF;
649f856f099SNavdeep Parhar
650f856f099SNavdeep Parhar /* Add up the overflow drops on all 4 ports.*/
651f856f099SNavdeep Parhar drop = 0;
652f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
653f856f099SNavdeep Parhar value = t4_read_reg(padap,
654f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
655f856f099SNavdeep Parhar (i << 3)));
656f856f099SNavdeep Parhar drop += value;
657f856f099SNavdeep Parhar value = t4_read_reg(padap,
658f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
659f856f099SNavdeep Parhar (i << 2)));
660f856f099SNavdeep Parhar value = t4_read_reg(padap,
661f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_LB_DROP_FRAME_L +
662f856f099SNavdeep Parhar (i << 3)));
663f856f099SNavdeep Parhar drop += value;
664f856f099SNavdeep Parhar value = t4_read_reg(padap,
665f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
666f856f099SNavdeep Parhar (i << 2)));
667f856f099SNavdeep Parhar
668f856f099SNavdeep Parhar value = t4_read_reg(padap,
669f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
670f856f099SNavdeep Parhar (i << 3)));
671f856f099SNavdeep Parhar drop += value;
672f856f099SNavdeep Parhar value = t4_read_reg(padap,
673f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
674f856f099SNavdeep Parhar (i << 3)));
675f856f099SNavdeep Parhar value = t4_read_reg(padap,
676f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_LB_TRUNC_FRAME_L +
677f856f099SNavdeep Parhar (i << 3)));
678f856f099SNavdeep Parhar drop += value;
679f856f099SNavdeep Parhar value = t4_read_reg(padap,
680f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
681f856f099SNavdeep Parhar (i << 3)));
682f856f099SNavdeep Parhar
683f856f099SNavdeep Parhar value = t4_read_reg(padap,
684f856f099SNavdeep Parhar T5_PORT0_REG(A_MPS_PORT_STAT_LB_PORT_DROP_FRAMES) +
685f856f099SNavdeep Parhar (i * T5_PORT_STRIDE));
686f856f099SNavdeep Parhar drop += value;
687f856f099SNavdeep Parhar }
688f856f099SNavdeep Parhar wtp->xgm_mps.drop = (drop & 0xFF);
689f856f099SNavdeep Parhar
690f856f099SNavdeep Parhar /* Add up the MPS errors that should result in dropped packets*/
691f856f099SNavdeep Parhar err = 0;
692f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
693f856f099SNavdeep Parhar
694f856f099SNavdeep Parhar value = t4_read_reg(padap,
695f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_ERROR_L) +
696f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
697f856f099SNavdeep Parhar err += value;
698f856f099SNavdeep Parhar value = t4_read_reg(padap,
699f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_ERROR_L) +
700f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
701f856f099SNavdeep Parhar
702f856f099SNavdeep Parhar value = t4_read_reg(padap,
703f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L) +
704f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
705f856f099SNavdeep Parhar err += value;
706f856f099SNavdeep Parhar value = t4_read_reg(padap,
707f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L) +
708f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
709f856f099SNavdeep Parhar
710f856f099SNavdeep Parhar value = t4_read_reg(padap,
711f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_CRC_ERROR_L) +
712f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
713f856f099SNavdeep Parhar err += value;
714f856f099SNavdeep Parhar value = t4_read_reg(padap,
715f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_CRC_ERROR_L) +
716f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
717f856f099SNavdeep Parhar
718f856f099SNavdeep Parhar value = t4_read_reg(padap,
719f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LEN_ERROR_L) +
720f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
721f856f099SNavdeep Parhar err += value;
722f856f099SNavdeep Parhar value = t4_read_reg(padap,
723f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LEN_ERROR_L) +
724f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
725f856f099SNavdeep Parhar
726f856f099SNavdeep Parhar value = t4_read_reg(padap,
727f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_SYM_ERROR_L) +
728f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
729f856f099SNavdeep Parhar err += value;
730f856f099SNavdeep Parhar value = t4_read_reg(padap,
731f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_SYM_ERROR_L) +
732f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
733f856f099SNavdeep Parhar
734f856f099SNavdeep Parhar value = t4_read_reg(padap,
735f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LESS_64B_L) +
736f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
737f856f099SNavdeep Parhar err += value;
738f856f099SNavdeep Parhar value = t4_read_reg(padap,
739f856f099SNavdeep Parhar (T5_PORT0_REG((A_MPS_PORT_STAT_RX_PORT_LESS_64B_L) +
740f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4)));
741f856f099SNavdeep Parhar }
742f856f099SNavdeep Parhar wtp->xgm_mps.err = (err & 0xFF);
743f856f099SNavdeep Parhar
744f856f099SNavdeep Parhar drop = 0;
745f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
746f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_SE_CNT_OUT01 + (i << 2)));
747f856f099SNavdeep Parhar
748f856f099SNavdeep Parhar wtp->mps_tp.sop[(i*2)] = ((value >> 8) & 0xFF); /*bit 8:15*/
749f856f099SNavdeep Parhar wtp->mps_tp.eop[(i*2)] = ((value >> 0) & 0xFF); /*bit 0:7*/
750f856f099SNavdeep Parhar wtp->mps_tp.sop[(i*2) + 1] = ((value >> 24) & 0xFF);/*bit 24:31
751f856f099SNavdeep Parhar */
752f856f099SNavdeep Parhar wtp->mps_tp.eop[(i*2) + 1] = ((value >> 16) & 0xFF);/*bit 16:23
753f856f099SNavdeep Parhar */
754f856f099SNavdeep Parhar }
755f856f099SNavdeep Parhar drop = ptp_mib->TP_MIB_TNL_CNG_DROP_0.value;
756f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_CNG_DROP_1.value;
757f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_CNG_DROP_2.value;
758f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_CNG_DROP_3.value;
759f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_0.value;
760f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_1.value;
761f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_2.value;
762f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_3.value;
763f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_0.value;
764f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_1.value;
765f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_2.value;
766f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_3.value;
767f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_0.value;
768f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_1.value;
769f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_2.value;
770f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_3.value;
771f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_USM_DROP.value;
772f856f099SNavdeep Parhar
773f856f099SNavdeep Parhar wtp->mps_tp.drops = drop;
774f856f099SNavdeep Parhar
775f856f099SNavdeep Parhar /* Get TP_DBG_CSIDE_TX registers*/
776f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
777f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_CSIDE_RX0 + i),
778f856f099SNavdeep Parhar true);
779f856f099SNavdeep Parhar
780f856f099SNavdeep Parhar wtp->tpcside_csw.sop[i] = ((value >> 28) & 0xF);/*bits 28:31*/
781f856f099SNavdeep Parhar wtp->tpcside_csw.eop[i] = ((value >> 24) & 0xF);/*bits 24:27*/
782f856f099SNavdeep Parhar wtp->tpcside_pm.sop[i] = ((value >> 20) & 0xF);/*bits 20:23*/
783f856f099SNavdeep Parhar wtp->tpcside_pm.eop[i] = ((value >> 16) & 0xF);/*bits 16:19*/
784f856f099SNavdeep Parhar wtp->tpcside_uturn.sop[i] = ((value >> 12) & 0xF);/*bits 12:15*/
785f856f099SNavdeep Parhar wtp->tpcside_uturn.eop[i] = ((value >> 8) & 0xF); /*bits 8:11*/
786f856f099SNavdeep Parhar wtp->tpcside_txcpl.sop[i] = ((value >> 4) & 0xF); /*bits 4:7*/
787f856f099SNavdeep Parhar wtp->tpcside_txcpl.eop[i] = ((value >> 0) & 0xF); /*bits 0:3*/
788f856f099SNavdeep Parhar }
789f856f099SNavdeep Parhar
790f856f099SNavdeep Parhar /* TP to CPL_SWITCH*/
791f856f099SNavdeep Parhar wtp->tp_csw.sop[0] = sge_dbg_reg->debug_CPLSW_TP_Rx_SOP0_cnt;
792f856f099SNavdeep Parhar wtp->tp_csw.sop[1] = sge_dbg_reg->debug_CPLSW_TP_Rx_SOP1_cnt;
793f856f099SNavdeep Parhar
794f856f099SNavdeep Parhar wtp->tp_csw.eop[0] = sge_dbg_reg->debug_CPLSW_TP_Rx_EOP0_cnt;
795f856f099SNavdeep Parhar wtp->tp_csw.eop[1] = sge_dbg_reg->debug_CPLSW_TP_Rx_EOP1_cnt;
796f856f099SNavdeep Parhar
797f856f099SNavdeep Parhar /* TP/CPL_SWITCH to SGE*/
798f856f099SNavdeep Parhar wtp->csw_sge.sop[0] = sge_dbg_reg->debug_T_Rx_SOP0_cnt;
799f856f099SNavdeep Parhar wtp->csw_sge.sop[1] = sge_dbg_reg->debug_T_Rx_SOP1_cnt;
800f856f099SNavdeep Parhar
801f856f099SNavdeep Parhar wtp->csw_sge.eop[0] = sge_dbg_reg->debug_T_Rx_EOP0_cnt;
802f856f099SNavdeep Parhar wtp->csw_sge.eop[1] = sge_dbg_reg->debug_T_Rx_EOP1_cnt;
803f856f099SNavdeep Parhar
804f856f099SNavdeep Parhar wtp->sge_pcie.sop[0] = sge_dbg_reg->debug_PD_Req_SOP0_cnt;
805f856f099SNavdeep Parhar wtp->sge_pcie.sop[1] = sge_dbg_reg->debug_PD_Req_SOP1_cnt;
806f856f099SNavdeep Parhar wtp->sge_pcie.sop[2] = sge_dbg_reg->debug_PD_Req_SOP2_cnt;
807f856f099SNavdeep Parhar wtp->sge_pcie.sop[3] = sge_dbg_reg->debug_PD_Req_SOP3_cnt;
808f856f099SNavdeep Parhar
809f856f099SNavdeep Parhar wtp->sge_pcie.eop[0] = sge_dbg_reg->debug_PD_Req_EOP0_cnt;
810f856f099SNavdeep Parhar wtp->sge_pcie.eop[1] = sge_dbg_reg->debug_PD_Req_EOP1_cnt;
811f856f099SNavdeep Parhar wtp->sge_pcie.eop[2] = sge_dbg_reg->debug_PD_Req_EOP2_cnt;
812f856f099SNavdeep Parhar wtp->sge_pcie.eop[3] = sge_dbg_reg->debug_PD_Req_EOP3_cnt;
813f856f099SNavdeep Parhar
814f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[0] = sge_dbg_reg->debug_PD_Req_Int0_cnt;
815f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[1] = sge_dbg_reg->debug_PD_Req_Int1_cnt;
816f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[2] = sge_dbg_reg->debug_PD_Req_Int2_cnt;
817f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[3] = sge_dbg_reg->debug_PD_Req_Int3_cnt;
818f856f099SNavdeep Parhar /* NO EOP, so fake it.*/
819f856f099SNavdeep Parhar wtp->sge_pcie_ints.eop[0] = sge_dbg_reg->debug_PD_Req_Int0_cnt;
820f856f099SNavdeep Parhar wtp->sge_pcie_ints.eop[1] = sge_dbg_reg->debug_PD_Req_Int1_cnt;
821f856f099SNavdeep Parhar wtp->sge_pcie_ints.eop[2] = sge_dbg_reg->debug_PD_Req_Int2_cnt;
822f856f099SNavdeep Parhar wtp->sge_pcie_ints.eop[3] = sge_dbg_reg->debug_PD_Req_Int3_cnt;
823f856f099SNavdeep Parhar
824f856f099SNavdeep Parhar /*Get PCIE DMA1 STAT2*/
825f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
826f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_DMA_STAT2 + (i * 0x10));
827f856f099SNavdeep Parhar wtp->pcie_dma1_stat2.sop[i] = ((value >> 8) & 0x0F);
828f856f099SNavdeep Parhar wtp->pcie_dma1_stat2.eop[i] = ((value >> 8) & 0x0F);
829f856f099SNavdeep Parhar wtp->pcie_dma1_stat2_core.sop[i] += value & 0x0F;
830f856f099SNavdeep Parhar wtp->pcie_dma1_stat2_core.eop[i] += value & 0x0F;
831f856f099SNavdeep Parhar }
832f856f099SNavdeep Parhar
833f856f099SNavdeep Parhar /* Get mac porrx aFramesTransmittedok*/
834f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
835f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30a88 + ((i * 4) << 12));
836f856f099SNavdeep Parhar wtp->mac_porrx_aframestra_ok.sop[i] = (value & 0xFF);
837f856f099SNavdeep Parhar wtp->mac_porrx_aframestra_ok.eop[i] = (value & 0xFF);
838f856f099SNavdeep Parhar }
839f856f099SNavdeep Parhar
840f856f099SNavdeep Parhar /*Get SGE debug data high index 7*/
841f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_7);
842f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[0] = ((value >> 4) & 0x0F);
843f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[0] = ((value >> 0) & 0x0F);
844f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[1] = ((value >> 12) & 0x0F);
845f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[1] = ((value >> 8) & 0x0F);
846f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[2] = ((value >> 20) & 0x0F);
847f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[2] = ((value >> 16) & 0x0F);
848f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[3] = ((value >> 28) & 0x0F);
849f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[3] = ((value >> 24) & 0x0F);
850f856f099SNavdeep Parhar
851f856f099SNavdeep Parhar /*Get SGE debug data high index 1*/
852f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_1);
853f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.sop[0] = ((value >> 20) & 0x0F);
854f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.eop[0] = ((value >> 16) & 0x0F);
855f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.sop[1] = ((value >> 28) & 0x0F);
856f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.eop[1] = ((value >> 24) & 0x0F);
857f856f099SNavdeep Parhar
858f856f099SNavdeep Parhar /*Get TP debug CSIDE Tx registers*/
859f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
860f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_CSIDE_TX0 + i),
861f856f099SNavdeep Parhar true);
862f856f099SNavdeep Parhar
863f856f099SNavdeep Parhar wtp->utx_tpcside_tx.sop[i] = ((value >> 28) & 0xF);/*bits 28:31
864f856f099SNavdeep Parhar */
865f856f099SNavdeep Parhar wtp->utx_tpcside_tx.eop[i] = ((value >> 24) & 0xF);
866f856f099SNavdeep Parhar }
867f856f099SNavdeep Parhar
868f856f099SNavdeep Parhar /*Get SGE debug data high index 9*/
869f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_9);
870f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.sop[0] = ((value >> 20) & 0x0F);
871f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.sop[1] = ((value >> 28) & 0x0F);
872f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.eop[0] = ((value >> 16) & 0x0F);
873f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.eop[1] = ((value >> 24) & 0x0F);
874f856f099SNavdeep Parhar wtp->sge_work_req_pkt.sop[0] = ((value >> 4) & 0x0F);
875f856f099SNavdeep Parhar wtp->sge_work_req_pkt.sop[1] = ((value >> 12) & 0x0F);
876f856f099SNavdeep Parhar
877f856f099SNavdeep Parhar /*Get LE DB response count*/
878f856f099SNavdeep Parhar value = t4_read_reg(padap, A_LE_DB_REQ_RSP_CNT);
879f856f099SNavdeep Parhar wtp->le_db_rsp_cnt.sop = value & 0xF;
880f856f099SNavdeep Parhar wtp->le_db_rsp_cnt.eop = (value >> 16) & 0xF;
881f856f099SNavdeep Parhar
882f856f099SNavdeep Parhar /*Get TP debug Eside PKTx*/
883f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
884f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_ESIDE_PKT0 + i),
885f856f099SNavdeep Parhar true);
886f856f099SNavdeep Parhar
887f856f099SNavdeep Parhar wtp->tp_dbg_eside_pktx.sop[i] = ((value >> 12) & 0xF);
888f856f099SNavdeep Parhar wtp->tp_dbg_eside_pktx.eop[i] = ((value >> 8) & 0xF);
889f856f099SNavdeep Parhar }
890f856f099SNavdeep Parhar
891f856f099SNavdeep Parhar /* Get data responses from core to PCIE*/
892f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAW_SOP_CNT);
893f856f099SNavdeep Parhar
894f856f099SNavdeep Parhar wtp->pcie_core_dmaw.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
895f856f099SNavdeep Parhar wtp->pcie_core_dmaw.sop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
896f856f099SNavdeep Parhar wtp->pcie_core_dmaw.sop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
897f856f099SNavdeep Parhar wtp->pcie_core_dmaw.sop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
898f856f099SNavdeep Parhar
899f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAW_EOP_CNT);
900f856f099SNavdeep Parhar
901f856f099SNavdeep Parhar wtp->pcie_core_dmaw.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
902f856f099SNavdeep Parhar wtp->pcie_core_dmaw.eop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
903f856f099SNavdeep Parhar wtp->pcie_core_dmaw.eop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
904f856f099SNavdeep Parhar wtp->pcie_core_dmaw.eop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
905f856f099SNavdeep Parhar
906f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_DMAI_CNT);
907f856f099SNavdeep Parhar
908f856f099SNavdeep Parhar wtp->pcie_core_dmai.sop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
909f856f099SNavdeep Parhar wtp->pcie_core_dmai.sop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
910f856f099SNavdeep Parhar wtp->pcie_core_dmai.sop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
911f856f099SNavdeep Parhar wtp->pcie_core_dmai.sop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
912f856f099SNavdeep Parhar /* no eop for interrups, just fake it.*/
913f856f099SNavdeep Parhar wtp->pcie_core_dmai.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
914f856f099SNavdeep Parhar wtp->pcie_core_dmai.eop[1] = ((value >> 8) & 0xFF); /*bit 8:15*/
915f856f099SNavdeep Parhar wtp->pcie_core_dmai.eop[2] = ((value >> 16) & 0xFF); /*bit 16:23*/
916f856f099SNavdeep Parhar wtp->pcie_core_dmai.eop[3] = ((value >> 24) & 0xFF); /*bit 24:31*/
917f856f099SNavdeep Parhar
918f856f099SNavdeep Parhar rc = write_compression_hdr(&scratch_buff, dbg_buff);
919f856f099SNavdeep Parhar
920f856f099SNavdeep Parhar if (rc)
921f856f099SNavdeep Parhar goto err1;
922f856f099SNavdeep Parhar
923f856f099SNavdeep Parhar rc = compress_buff(&scratch_buff, dbg_buff);
924f856f099SNavdeep Parhar
925f856f099SNavdeep Parhar err1:
926f856f099SNavdeep Parhar release_scratch_buff(&scratch_buff, dbg_buff);
927f856f099SNavdeep Parhar err:
928f856f099SNavdeep Parhar return rc;
929f856f099SNavdeep Parhar }
930f856f099SNavdeep Parhar
t6_wtp_data(struct cudbg_init * pdbg_init,struct cudbg_buffer * dbg_buff,struct cudbg_error * cudbg_err)931f856f099SNavdeep Parhar static int t6_wtp_data(struct cudbg_init *pdbg_init,
932f856f099SNavdeep Parhar struct cudbg_buffer *dbg_buff,
933f856f099SNavdeep Parhar struct cudbg_error *cudbg_err)
934f856f099SNavdeep Parhar {
935f856f099SNavdeep Parhar struct adapter *padap = pdbg_init->adap;
936f856f099SNavdeep Parhar struct sge_debug_reg_data *sge_dbg_reg = NULL;
937f856f099SNavdeep Parhar struct cudbg_buffer scratch_buff;
938f856f099SNavdeep Parhar struct tp_mib_data *ptp_mib = NULL;
939f856f099SNavdeep Parhar struct wtp_data *wtp;
940f856f099SNavdeep Parhar u32 Sge_Dbg[32] = {0};
941f856f099SNavdeep Parhar u32 value = 0;
942f856f099SNavdeep Parhar u32 i = 0;
943f856f099SNavdeep Parhar u32 drop = 0;
944f856f099SNavdeep Parhar u32 err = 0;
945f856f099SNavdeep Parhar u32 offset;
946f856f099SNavdeep Parhar int rc = 0;
947f856f099SNavdeep Parhar
948f856f099SNavdeep Parhar rc = get_scratch_buff(dbg_buff, sizeof(struct wtp_data), &scratch_buff);
949f856f099SNavdeep Parhar
950f856f099SNavdeep Parhar if (rc)
951f856f099SNavdeep Parhar goto err;
952f856f099SNavdeep Parhar
953f856f099SNavdeep Parhar offset = scratch_buff.offset;
954f856f099SNavdeep Parhar wtp = (struct wtp_data *)((char *)scratch_buff.data + offset);
955f856f099SNavdeep Parhar
956f856f099SNavdeep Parhar read_sge_debug_data(pdbg_init, Sge_Dbg);
957f856f099SNavdeep Parhar read_tp_mib_data(pdbg_init, &ptp_mib);
958f856f099SNavdeep Parhar
959f856f099SNavdeep Parhar sge_dbg_reg = (struct sge_debug_reg_data *) &Sge_Dbg[0];
960f856f099SNavdeep Parhar
961f856f099SNavdeep Parhar /*# TX PATH*/
962f856f099SNavdeep Parhar
963f856f099SNavdeep Parhar /*PCIE CMD STAT2*/
964f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_CMD_STAT2);
965f856f099SNavdeep Parhar wtp->pcie_cmd_stat2.sop[0] = value & 0xFF;
966f856f099SNavdeep Parhar wtp->pcie_cmd_stat2.eop[0] = value & 0xFF;
967f856f099SNavdeep Parhar
968f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_7);
969f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.sop[0] = ((value >> 20) & 0x0F);
970f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.eop[0] = ((value >> 16) & 0x0F);
971f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.sop[1] = ((value >> 28) & 0x0F);
972f856f099SNavdeep Parhar wtp->sge_pcie_cmd_req.eop[1] = ((value >> 24) & 0x0F);
973f856f099SNavdeep Parhar
974f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_CMD_STAT3);
975f856f099SNavdeep Parhar wtp->pcie_cmd_stat3.sop[0] = value & 0xFF;
976f856f099SNavdeep Parhar wtp->pcie_cmd_stat3.eop[0] = value & 0xFF;
977f856f099SNavdeep Parhar
978f856f099SNavdeep Parhar /*Get command Resposes from PCIE to SGE*/
979f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.sop[0] = sge_dbg_reg->debug_PC_Rsp_SOP0_cnt;
980f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.eop[0] = sge_dbg_reg->debug_PC_Rsp_EOP0_cnt;
981f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.sop[1] = sge_dbg_reg->debug_PC_Rsp_SOP1_cnt;
982f856f099SNavdeep Parhar wtp->pcie_sge_cmd_rsp.eop[1] = sge_dbg_reg->debug_PC_Rsp_EOP0_cnt;
983f856f099SNavdeep Parhar
984f856f099SNavdeep Parhar /* Get commands sent from SGE to CIM/uP*/
985f856f099SNavdeep Parhar wtp->sge_cim.sop[0] = sge_dbg_reg->debug_CIM_SOP0_cnt;
986f856f099SNavdeep Parhar wtp->sge_cim.sop[1] = sge_dbg_reg->debug_CIM_SOP1_cnt;
987f856f099SNavdeep Parhar
988f856f099SNavdeep Parhar wtp->sge_cim.eop[0] = sge_dbg_reg->debug_CIM_EOP0_cnt;
989f856f099SNavdeep Parhar wtp->sge_cim.eop[1] = sge_dbg_reg->debug_CIM_EOP1_cnt;
990f856f099SNavdeep Parhar
991f856f099SNavdeep Parhar /*Get SGE debug data high index 9*/
992f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_9);
993f856f099SNavdeep Parhar wtp->sge_work_req_pkt.sop[0] = ((value >> 4) & 0x0F);
994f856f099SNavdeep Parhar wtp->sge_work_req_pkt.eop[0] = ((value >> 0) & 0x0F);
995f856f099SNavdeep Parhar
996f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
997f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_DMA_STAT2 + (i * 0x10));
998f856f099SNavdeep Parhar wtp->pcie_dma1_stat2.sop[i] = ((value >> 8) & 0x0F);
999f856f099SNavdeep Parhar wtp->pcie_dma1_stat2.eop[i] = ((value >> 8) & 0x0F);
1000f856f099SNavdeep Parhar wtp->pcie_dma1_stat2_core.sop[i] = value & 0x0F;
1001f856f099SNavdeep Parhar wtp->pcie_dma1_stat2_core.eop[i] = value & 0x0F;
1002f856f099SNavdeep Parhar }
1003f856f099SNavdeep Parhar
1004f856f099SNavdeep Parhar /* Get DMA0 stats3*/
1005f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1006f856f099SNavdeep Parhar value = t4_read_reg(padap, A_PCIE_T5_DMA_STAT3 + (i * 0x10));
1007f856f099SNavdeep Parhar wtp->pcie_t5_dma_stat3.sop[i] = value & 0xFF;
1008f856f099SNavdeep Parhar wtp->pcie_t5_dma_stat3.eop[i] = ((value >> 16) & 0xFF);
1009f856f099SNavdeep Parhar }
1010f856f099SNavdeep Parhar
1011f856f099SNavdeep Parhar /* Get ULP SE CNT CHx*/
1012f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
1013f856f099SNavdeep Parhar value = t4_read_reg(padap, A_ULP_TX_SE_CNT_CH0 + (i * 4));
1014f856f099SNavdeep Parhar wtp->ulp_se_cnt_chx.sop[i] = ((value >> 28) & 0x0F);
1015f856f099SNavdeep Parhar wtp->ulp_se_cnt_chx.eop[i] = ((value >> 24) & 0x0F);
1016f856f099SNavdeep Parhar }
1017f856f099SNavdeep Parhar
1018f856f099SNavdeep Parhar /* Get TP_DBG_CSIDE registers*/
1019f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
1020f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_CSIDE_RX0 + i),
1021f856f099SNavdeep Parhar true);
1022f856f099SNavdeep Parhar
1023f856f099SNavdeep Parhar wtp->utx_tpcside.sop[i] = ((value >> 28) & 0xF);/*bits 28:31*/
1024f856f099SNavdeep Parhar wtp->utx_tpcside.eop[i] = ((value >> 24) & 0xF);/*bits 24:27*/
1025f856f099SNavdeep Parhar wtp->tpcside_rxarb.sop[i] = ((value >> 12) & 0xF);/*bits 12:15*/
1026f856f099SNavdeep Parhar wtp->tpcside_rxarb.eop[i] = ((value >> 8) & 0xF); /*bits 8:11*/
1027f856f099SNavdeep Parhar }
1028f856f099SNavdeep Parhar
1029f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
1030f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_ESIDE_PKT0 + i),
1031f856f099SNavdeep Parhar true);
1032f856f099SNavdeep Parhar
1033f856f099SNavdeep Parhar
1034f856f099SNavdeep Parhar wtp->tpeside_mps.sop[i] = ((value >> 28) & 0xF); /*bits 28:31*/
1035f856f099SNavdeep Parhar wtp->tpeside_mps.eop[i] = ((value >> 24) & 0xF); /*bits 24:27*/
1036f856f099SNavdeep Parhar }
1037f856f099SNavdeep Parhar
1038f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1039f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_TX_SE_CNT_TP01 + (i << 2)));
1040f856f099SNavdeep Parhar wtp->tp_mps.sop[(i*2)] = ((value >> 8) & 0xFF); /*bit 8:15*/
1041f856f099SNavdeep Parhar wtp->tp_mps.eop[(i*2)] = ((value >> 0) & 0xFF); /*bit 0:7*/
1042f856f099SNavdeep Parhar wtp->tp_mps.sop[(i*2) + 1] = ((value >> 24) & 0xFF);/*bit 24:31
1043f856f099SNavdeep Parhar */
1044f856f099SNavdeep Parhar wtp->tp_mps.eop[(i*2) + 1] = ((value >> 16) & 0xFF);/*bit 16:23
1045f856f099SNavdeep Parhar */
1046f856f099SNavdeep Parhar }
1047f856f099SNavdeep Parhar
1048f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1049f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_TX_SE_CNT_MAC01 + (i << 2)));
1050f856f099SNavdeep Parhar wtp->mps_xgm.sop[(i*2)] = ((value >> 8) & 0xFF);/*bit 8:15*/
1051f856f099SNavdeep Parhar wtp->mps_xgm.eop[(i*2)] = ((value >> 0) & 0xFF); /*bit 0:7*/
1052f856f099SNavdeep Parhar wtp->mps_xgm.sop[(i*2) + 1] = ((value >> 24) & 0xFF);/*bit 24:31
1053f856f099SNavdeep Parhar */
1054f856f099SNavdeep Parhar wtp->mps_xgm.eop[(i*2) + 1] = ((value >> 16) & 0xFF);/*bit 16:23
1055f856f099SNavdeep Parhar */
1056f856f099SNavdeep Parhar }
1057f856f099SNavdeep Parhar
1058f856f099SNavdeep Parhar /* Get MAC PORTx PKT COUNT*/
1059f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1060f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x3081c + ((i * 4) << 12));
1061f856f099SNavdeep Parhar wtp->mac_portx_pkt_count.sop[i] = ((value >> 24) & 0xFF);
1062f856f099SNavdeep Parhar wtp->mac_portx_pkt_count.eop[i] = ((value >> 16) & 0xFF);
1063f856f099SNavdeep Parhar wtp->mac_porrx_pkt_count.sop[i] = ((value >> 8) & 0xFF);
1064f856f099SNavdeep Parhar wtp->mac_porrx_pkt_count.eop[i] = ((value >> 0) & 0xFF);
1065f856f099SNavdeep Parhar }
1066f856f099SNavdeep Parhar
1067f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1068f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30f20 + ((i * 4) << 12));
1069f856f099SNavdeep Parhar wtp->mac_portx_aframestra_ok.sop[i] = value & 0xff;
1070f856f099SNavdeep Parhar wtp->mac_portx_aframestra_ok.eop[i] = value & 0xff;
1071f856f099SNavdeep Parhar }
1072f856f099SNavdeep Parhar
1073f856f099SNavdeep Parhar /*MAC_PORT_MTIP_1G10G_TX_etherStatsPkts*/
1074f856f099SNavdeep Parhar
1075f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1076f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30f60 + ((i * 4) << 12));
1077f856f099SNavdeep Parhar wtp->mac_portx_etherstatspkts.sop[i] = value & 0xff;
1078f856f099SNavdeep Parhar wtp->mac_portx_etherstatspkts.eop[i] = value & 0xff;
1079f856f099SNavdeep Parhar }
1080f856f099SNavdeep Parhar
1081f856f099SNavdeep Parhar /*RX path*/
1082f856f099SNavdeep Parhar
1083f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_7);
1084f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[0] = ((value >> 4) & 0x0F);
1085f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[0] = ((value >> 0) & 0x0F);
1086f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.sop[1] = ((value >> 12) & 0x0F);
1087f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx7.eop[1] = ((value >> 8) & 0x0F);
1088f856f099SNavdeep Parhar
1089f856f099SNavdeep Parhar /*Get SGE debug data high index 1*/
1090f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_1);
1091f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.sop[0] = ((value >> 20) & 0x0F);
1092f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.eop[0] = ((value >> 16) & 0x0F);
1093f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.sop[1] = ((value >> 28) & 0x0F);
1094f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx1.eop[1] = ((value >> 24) & 0x0F);
1095f856f099SNavdeep Parhar
1096f856f099SNavdeep Parhar value = t4_read_reg(padap, A_SGE_DEBUG_DATA_HIGH_INDEX_9);
1097f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.sop[0] = ((value >> 20) & 0x0F);
1098f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.sop[1] = ((value >> 28) & 0x0F);
1099f856f099SNavdeep Parhar
1100f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.eop[0] = ((value >> 16) & 0x0F);
1101f856f099SNavdeep Parhar wtp->sge_debug_data_high_indx9.eop[1] = ((value >> 24) & 0x0F);
1102f856f099SNavdeep Parhar
1103f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1104f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_CSIDE_TX0 + i),
1105f856f099SNavdeep Parhar true);
1106f856f099SNavdeep Parhar
1107f856f099SNavdeep Parhar wtp->utx_tpcside_tx.sop[i] = ((value >> 28) & 0xF);/*bits 28:31
1108f856f099SNavdeep Parhar */
1109f856f099SNavdeep Parhar wtp->utx_tpcside_tx.eop[i] = ((value >> 24) & 0xF);
1110f856f099SNavdeep Parhar }
1111f856f099SNavdeep Parhar
1112f856f099SNavdeep Parhar /*ULP_RX input/output*/
1113f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1114f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_ULP_RX_SE_CNT_CH0 + (i*4)));
1115f856f099SNavdeep Parhar
1116f856f099SNavdeep Parhar wtp->pmrx_ulprx.sop[i] = ((value >> 4) & 0xF); /*bits 4:7*/
1117f856f099SNavdeep Parhar wtp->pmrx_ulprx.eop[i] = ((value >> 0) & 0xF); /*bits 0:3*/
1118f856f099SNavdeep Parhar wtp->ulprx_tpcside.sop[i] = ((value >> 28) & 0xF);/*bits 28:31*/
1119f856f099SNavdeep Parhar wtp->ulprx_tpcside.eop[i] = ((value >> 24) & 0xF);/*bits 24:27*/
1120f856f099SNavdeep Parhar }
1121f856f099SNavdeep Parhar
1122f856f099SNavdeep Parhar /*Get LE DB response count*/
1123f856f099SNavdeep Parhar value = t4_read_reg(padap, A_LE_DB_REQ_RSP_CNT);
1124f856f099SNavdeep Parhar wtp->le_db_rsp_cnt.sop = value & 0xF;
1125f856f099SNavdeep Parhar wtp->le_db_rsp_cnt.eop = (value >> 16) & 0xF;
1126f856f099SNavdeep Parhar
1127f856f099SNavdeep Parhar /*Get TP debug Eside PKTx*/
1128f856f099SNavdeep Parhar for (i = 0; i < 4; i++) {
1129f856f099SNavdeep Parhar t4_tp_pio_read(padap, &value, 1, (u32)(A_TP_DBG_ESIDE_PKT0 + i),
1130f856f099SNavdeep Parhar true);
1131f856f099SNavdeep Parhar
1132f856f099SNavdeep Parhar wtp->tp_dbg_eside_pktx.sop[i] = ((value >> 12) & 0xF);
1133f856f099SNavdeep Parhar wtp->tp_dbg_eside_pktx.eop[i] = ((value >> 8) & 0xF);
1134f856f099SNavdeep Parhar }
1135f856f099SNavdeep Parhar
1136f856f099SNavdeep Parhar drop = 0;
1137f856f099SNavdeep Parhar /*MPS_RX_SE_CNT_OUT01*/
1138f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_SE_CNT_OUT01 + (i << 2)));
1139f856f099SNavdeep Parhar wtp->mps_tp.sop[0] = ((value >> 8) & 0xFF); /*bit 8:15*/
1140f856f099SNavdeep Parhar wtp->mps_tp.eop[0] = ((value >> 0) & 0xFF); /*bit 0:7*/
1141f856f099SNavdeep Parhar wtp->mps_tp.sop[1] = ((value >> 24) & 0xFF); /*bit 24:31*/
1142f856f099SNavdeep Parhar wtp->mps_tp.eop[1] = ((value >> 16) & 0xFF); /*bit 16:23*/
1143f856f099SNavdeep Parhar
1144f856f099SNavdeep Parhar drop = ptp_mib->TP_MIB_TNL_CNG_DROP_0.value;
1145f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_TNL_CNG_DROP_1.value;
1146f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_0.value;
1147f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_CHN_DROP_1.value;
1148f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_0.value;
1149f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_FCOE_DROP_1.value;
1150f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_0.value;
1151f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_OFD_VLN_DROP_1.value;
1152f856f099SNavdeep Parhar drop += ptp_mib->TP_MIB_USM_DROP.value;
1153f856f099SNavdeep Parhar
1154f856f099SNavdeep Parhar wtp->mps_tp.drops = drop;
1155f856f099SNavdeep Parhar
1156f856f099SNavdeep Parhar drop = 0;
1157f856f099SNavdeep Parhar for (i = 0; i < 8; i++) {
1158f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_SE_CNT_IN0 + (i << 2)));
1159f856f099SNavdeep Parhar
1160f856f099SNavdeep Parhar wtp->xgm_mps.sop[i] = ((value >> 8) & 0xFF); /*bits 8:15*/
1161f856f099SNavdeep Parhar wtp->xgm_mps.eop[i] = ((value >> 0) & 0xFF); /*bits 0:7*/
1162f856f099SNavdeep Parhar }
1163f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1164f856f099SNavdeep Parhar value = t4_read_reg(padap, (A_MPS_RX_CLS_DROP_CNT0 + (i << 2)));
1165f856f099SNavdeep Parhar drop += (value & 0xFFFF) + ((value >> 16) & 0xFFFF);
1166f856f099SNavdeep Parhar }
1167f856f099SNavdeep Parhar wtp->xgm_mps.cls_drop = drop & 0xFF;
1168f856f099SNavdeep Parhar
1169f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1170f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30e20 + ((i * 4) << 12));
1171f856f099SNavdeep Parhar wtp->mac_porrx_aframestra_ok.sop[i] = value & 0xff;
1172f856f099SNavdeep Parhar wtp->mac_porrx_aframestra_ok.eop[i] = value & 0xff;
1173f856f099SNavdeep Parhar }
1174f856f099SNavdeep Parhar
1175f856f099SNavdeep Parhar /*MAC_PORT_MTIP_1G10G_RX_etherStatsPkts*/
1176f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1177f856f099SNavdeep Parhar value = t4_read_reg(padap, 0x30e60 + ((i * 4) << 12));
1178f856f099SNavdeep Parhar wtp->mac_porrx_etherstatspkts.sop[i] = value & 0xff;
1179f856f099SNavdeep Parhar wtp->mac_porrx_etherstatspkts.eop[i] = value & 0xff;
1180f856f099SNavdeep Parhar }
1181f856f099SNavdeep Parhar
1182f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[0] = sge_dbg_reg->debug_PD_Req_Int0_cnt;
1183f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[1] = sge_dbg_reg->debug_PD_Req_Int1_cnt;
1184f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[2] = sge_dbg_reg->debug_PD_Req_Int2_cnt;
1185f856f099SNavdeep Parhar wtp->sge_pcie_ints.sop[3] = sge_dbg_reg->debug_PD_Req_Int3_cnt;
1186f856f099SNavdeep Parhar
1187f856f099SNavdeep Parhar /* Add up the overflow drops on all 4 ports.*/
1188f856f099SNavdeep Parhar drop = 0;
1189f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1190f856f099SNavdeep Parhar value = t4_read_reg(padap,
1191f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
1192f856f099SNavdeep Parhar (i << 3)));
1193f856f099SNavdeep Parhar drop += value;
1194f856f099SNavdeep Parhar value = t4_read_reg(padap,
1195f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
1196f856f099SNavdeep Parhar (i << 2)));
1197f856f099SNavdeep Parhar value = t4_read_reg(padap,
1198f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_LB_DROP_FRAME_L +
1199f856f099SNavdeep Parhar (i << 3)));
1200f856f099SNavdeep Parhar drop += value;
1201f856f099SNavdeep Parhar value = t4_read_reg(padap,
1202f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_DROP_FRAME_L +
1203f856f099SNavdeep Parhar (i << 2)));
1204f856f099SNavdeep Parhar
1205f856f099SNavdeep Parhar value = t4_read_reg(padap,
1206f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
1207f856f099SNavdeep Parhar (i << 3)));
1208f856f099SNavdeep Parhar drop += value;
1209f856f099SNavdeep Parhar value = t4_read_reg(padap,
1210f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
1211f856f099SNavdeep Parhar (i << 3)));
1212f856f099SNavdeep Parhar value = t4_read_reg(padap,
1213f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_LB_TRUNC_FRAME_L +
1214f856f099SNavdeep Parhar (i << 3)));
1215f856f099SNavdeep Parhar drop += value;
1216f856f099SNavdeep Parhar value = t4_read_reg(padap,
1217f856f099SNavdeep Parhar (A_MPS_STAT_RX_BG_0_MAC_TRUNC_FRAME_L +
1218f856f099SNavdeep Parhar (i << 3)));
1219f856f099SNavdeep Parhar
1220f856f099SNavdeep Parhar value = t4_read_reg(padap,
1221f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_LB_PORT_DROP_FRAMES) +
1222f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1223f856f099SNavdeep Parhar drop += value;
1224f856f099SNavdeep Parhar }
1225f856f099SNavdeep Parhar wtp->xgm_mps.drop = (drop & 0xFF);
1226f856f099SNavdeep Parhar
1227f856f099SNavdeep Parhar /* Add up the MPS errors that should result in dropped packets*/
1228f856f099SNavdeep Parhar err = 0;
1229f856f099SNavdeep Parhar for (i = 0; i < 2; i++) {
1230f856f099SNavdeep Parhar
1231f856f099SNavdeep Parhar value = t4_read_reg(padap,
1232f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_ERROR_L) +
1233f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1234f856f099SNavdeep Parhar err += value;
1235f856f099SNavdeep Parhar value = t4_read_reg(padap,
1236f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_ERROR_L) +
1237f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1238f856f099SNavdeep Parhar
1239f856f099SNavdeep Parhar value = t4_read_reg(padap,
1240f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L) +
1241f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1242f856f099SNavdeep Parhar err += value;
1243f856f099SNavdeep Parhar value = t4_read_reg(padap,
1244f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_MTU_CRC_ERROR_L) +
1245f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1246f856f099SNavdeep Parhar
1247f856f099SNavdeep Parhar value = t4_read_reg(padap,
1248f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_CRC_ERROR_L) +
1249f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1250f856f099SNavdeep Parhar err += value;
1251f856f099SNavdeep Parhar value = t4_read_reg(padap,
1252f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_CRC_ERROR_L) +
1253f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1254f856f099SNavdeep Parhar
1255f856f099SNavdeep Parhar value = t4_read_reg(padap,
1256f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LEN_ERROR_L) +
1257f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1258f856f099SNavdeep Parhar err += value;
1259f856f099SNavdeep Parhar value = t4_read_reg(padap,
1260f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LEN_ERROR_L) +
1261f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1262f856f099SNavdeep Parhar
1263f856f099SNavdeep Parhar value = t4_read_reg(padap,
1264f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_SYM_ERROR_L) +
1265f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1266f856f099SNavdeep Parhar err += value;
1267f856f099SNavdeep Parhar value = t4_read_reg(padap,
1268f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_SYM_ERROR_L) +
1269f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1270f856f099SNavdeep Parhar
1271f856f099SNavdeep Parhar value = t4_read_reg(padap,
1272f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LESS_64B_L) +
1273f856f099SNavdeep Parhar (i * T5_PORT_STRIDE)));
1274f856f099SNavdeep Parhar err += value;
1275f856f099SNavdeep Parhar value = t4_read_reg(padap,
1276f856f099SNavdeep Parhar (T5_PORT0_REG(A_MPS_PORT_STAT_RX_PORT_LESS_64B_L) +
1277f856f099SNavdeep Parhar (i * T5_PORT_STRIDE) + 4));
1278f856f099SNavdeep Parhar }
1279f856f099SNavdeep Parhar wtp->xgm_mps.err = (err & 0xFF);
1280f856f099SNavdeep Parhar
1281f856f099SNavdeep Parhar rc = write_compression_hdr(&scratch_buff, dbg_buff);
1282f856f099SNavdeep Parhar
1283f856f099SNavdeep Parhar if (rc)
1284f856f099SNavdeep Parhar goto err1;
1285f856f099SNavdeep Parhar
1286f856f099SNavdeep Parhar rc = compress_buff(&scratch_buff, dbg_buff);
1287f856f099SNavdeep Parhar
1288f856f099SNavdeep Parhar err1:
1289f856f099SNavdeep Parhar release_scratch_buff(&scratch_buff, dbg_buff);
1290f856f099SNavdeep Parhar err:
1291f856f099SNavdeep Parhar return rc;
1292f856f099SNavdeep Parhar }
1293f856f099SNavdeep Parhar
collect_wtp_data(struct cudbg_init * pdbg_init,struct cudbg_buffer * dbg_buff,struct cudbg_error * cudbg_err)1294f856f099SNavdeep Parhar int collect_wtp_data(struct cudbg_init *pdbg_init,
1295f856f099SNavdeep Parhar struct cudbg_buffer *dbg_buff,
1296f856f099SNavdeep Parhar struct cudbg_error *cudbg_err)
1297f856f099SNavdeep Parhar {
1298f856f099SNavdeep Parhar struct adapter *padap = pdbg_init->adap;
1299f856f099SNavdeep Parhar int rc = -1;
1300f856f099SNavdeep Parhar
1301f856f099SNavdeep Parhar if (is_t5(padap))
1302f856f099SNavdeep Parhar rc = t5_wtp_data(pdbg_init, dbg_buff, cudbg_err);
1303f856f099SNavdeep Parhar else if (is_t6(padap))
1304f856f099SNavdeep Parhar rc = t6_wtp_data(pdbg_init, dbg_buff, cudbg_err);
1305f856f099SNavdeep Parhar
1306f856f099SNavdeep Parhar return rc;
1307f856f099SNavdeep Parhar }
1308