Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2018-2021 HiSilicon Limited.
3 : : */
4 : :
5 : : #include <ethdev_pci.h>
6 : : #include <rte_io.h>
7 : :
8 : : #include "hns3_ethdev.h"
9 : : #include "hns3_logs.h"
10 : : #include "hns3_rxtx.h"
11 : : #include "hns3_regs.h"
12 : :
13 : : #define HNS3_64_BIT_REG_OUTPUT_SIZE (sizeof(uint64_t) / sizeof(uint32_t))
14 : :
15 : : #define HNS3_MAX_MODULES_LEN 512
16 : :
17 : : struct hns3_dirt_reg_entry {
18 : : const char *name;
19 : : uint32_t addr;
20 : : };
21 : :
22 : : static const struct hns3_dirt_reg_entry cmdq_reg_list[] = {
23 : : {"cmdq_tx_depth", HNS3_CMDQ_TX_DEPTH_REG},
24 : : {"cmdq_tx_tail", HNS3_CMDQ_TX_TAIL_REG},
25 : : {"cmdq_tx_head", HNS3_CMDQ_TX_HEAD_REG},
26 : : {"cmdq_rx_depth", HNS3_CMDQ_RX_DEPTH_REG},
27 : : {"cmdq_rx_tail", HNS3_CMDQ_RX_TAIL_REG},
28 : : {"cmdq_rx_head", HNS3_CMDQ_RX_HEAD_REG},
29 : : {"vector0_cmdq_src", HNS3_VECTOR0_CMDQ_SRC_REG},
30 : : {"cmdq_intr_sts", HNS3_CMDQ_INTR_STS_REG},
31 : : {"cmdq_intr_en", HNS3_CMDQ_INTR_EN_REG},
32 : : {"cmdq_intr_gen", HNS3_CMDQ_INTR_GEN_REG},
33 : : };
34 : :
35 : : static const struct hns3_dirt_reg_entry common_reg_list[] = {
36 : : {"misc_vector_reg_base", HNS3_MISC_VECTOR_REG_BASE},
37 : : {"vector0_oter_en", HNS3_VECTOR0_OTER_EN_REG},
38 : : {"misc_reset_sts", HNS3_MISC_RESET_STS_REG},
39 : : {"vector0_other_int_sts", HNS3_VECTOR0_OTHER_INT_STS_REG},
40 : : {"global_reset", HNS3_GLOBAL_RESET_REG},
41 : : {"fun_rst_ing", HNS3_FUN_RST_ING},
42 : : {"gro_en", HNS3_GRO_EN_REG},
43 : : };
44 : :
45 : : static const struct hns3_dirt_reg_entry common_vf_reg_list[] = {
46 : : {"misc_vector_reg_base", HNS3_MISC_VECTOR_REG_BASE},
47 : : {"fun_rst_ing", HNS3_FUN_RST_ING},
48 : : {"gro_en", HNS3_GRO_EN_REG},
49 : : };
50 : :
51 : : static const struct hns3_dirt_reg_entry ring_reg_list[] = {
52 : : {"ring_rx_bd_num", HNS3_RING_RX_BD_NUM_REG},
53 : : {"ring_rx_bd_len", HNS3_RING_RX_BD_LEN_REG},
54 : : {"ring_rx_en", HNS3_RING_RX_EN_REG},
55 : : {"ring_rx_merge_en", HNS3_RING_RX_MERGE_EN_REG},
56 : : {"ring_rx_tail", HNS3_RING_RX_TAIL_REG},
57 : : {"ring_rx_head", HNS3_RING_RX_HEAD_REG},
58 : : {"ring_rx_fbdnum", HNS3_RING_RX_FBDNUM_REG},
59 : : {"ring_rx_offset", HNS3_RING_RX_OFFSET_REG},
60 : : {"ring_rx_fbd_offset", HNS3_RING_RX_FBD_OFFSET_REG},
61 : : {"ring_rx_stash", HNS3_RING_RX_STASH_REG},
62 : : {"ring_rx_bd_err", HNS3_RING_RX_BD_ERR_REG},
63 : : {"ring_tx_bd_num", HNS3_RING_TX_BD_NUM_REG},
64 : : {"ring_tx_en", HNS3_RING_TX_EN_REG},
65 : : {"ring_tx_priority", HNS3_RING_TX_PRIORITY_REG},
66 : : {"ring_tx_tc", HNS3_RING_TX_TC_REG},
67 : : {"ring_tx_merge_en", HNS3_RING_TX_MERGE_EN_REG},
68 : : {"ring_tx_tail", HNS3_RING_TX_TAIL_REG},
69 : : {"ring_tx_head", HNS3_RING_TX_HEAD_REG},
70 : : {"ring_tx_fbdnum", HNS3_RING_TX_FBDNUM_REG},
71 : : {"ring_tx_offset", HNS3_RING_TX_OFFSET_REG},
72 : : {"ring_tx_ebd_num", HNS3_RING_TX_EBD_NUM_REG},
73 : : {"ring_tx_ebd_offset", HNS3_RING_TX_EBD_OFFSET_REG},
74 : : {"ring_tx_bd_err", HNS3_RING_TX_BD_ERR_REG},
75 : : {"ring_en", HNS3_RING_EN_REG},
76 : : };
77 : :
78 : : static const struct hns3_dirt_reg_entry tqp_intr_reg_list[] = {
79 : : {"tqp_intr_ctrl", HNS3_TQP_INTR_CTRL_REG},
80 : : {"tqp_intr_gl0", HNS3_TQP_INTR_GL0_REG},
81 : : {"tqp_intr_gl1", HNS3_TQP_INTR_GL1_REG},
82 : : {"tqp_intr_gl2", HNS3_TQP_INTR_GL2_REG},
83 : : {"tqp_intr_rl", HNS3_TQP_INTR_RL_REG},
84 : : };
85 : :
86 : : struct hns3_dfx_reg_entry {
87 : : /**
88 : : * name_v1 -- default register name for all platforms (HIP08/HIP09/newer).
89 : : * name_v2 -- register name different from the default for HIP09.
90 : : * If there are more platform with different register name, name_vXX is extended.
91 : : * If the platform is newer than HIP09, use default name.
92 : : */
93 : : const char *name_v1;
94 : : const char *name_v2;
95 : : };
96 : :
97 : : static struct hns3_dfx_reg_entry regs_32_bit_list[] = {
98 : : {"ssu_common_err_int"},
99 : : {"ssu_port_based_err_int"},
100 : : {"ssu_fifo_overflow_int"},
101 : : {"ssu_ets_tcg_int"},
102 : : {"ssu_bp_status_0"},
103 : : {"ssu_bp_status_1"},
104 : :
105 : : {"ssu_bp_status_2"},
106 : : {"ssu_bp_status_3"},
107 : : {"ssu_bp_status_4"},
108 : : {"ssu_bp_status_5"},
109 : : {"ssu_mac_tx_pfc_ind"},
110 : : {"ssu_mac_rx_pfc_ind"},
111 : :
112 : : {"ssu_rx_oq_drop_pkt_cnt"},
113 : : {"ssu_tx_oq_drop_pkt_cnt"},
114 : : };
115 : :
116 : : static struct hns3_dfx_reg_entry regs_64_bit_list[] = {
117 : : {"ppp_get_rx_pkt_cnt_l"},
118 : : {"ppp_get_rx_pkt_cnt_h"},
119 : : {"ppp_get_tx_pkt_cnt_l"},
120 : : {"ppp_get_tx_pkt_cnt_h"},
121 : : {"ppp_send_uc_prt2host_pkt_cnt_l"},
122 : : {"ppp_send_uc_prt2host_pkt_cnt_h"},
123 : :
124 : : {"ppp_send_uc_prt2prt_pkt_cnt_l"},
125 : : {"ppp_send_uc_prt2prt_pkt_cnt_h"},
126 : : {"ppp_send_uc_host2host_pkt_cnt_l"},
127 : : {"ppp_send_uc_host2host_pkt_cnt_h"},
128 : : {"ppp_send_uc_host2prt_pkt_cnt_l"},
129 : : {"ppp_send_uc_host2prt_pkt_cnt_h"},
130 : : {"ppp_send_mc_from_prt_cnt_l"},
131 : : {"ppp_send_mc_from_prt_cnt_h"},
132 : : };
133 : :
134 : : static struct hns3_dfx_reg_entry dfx_bios_common_reg_list[] = {
135 : : {"bios_rsv0"},
136 : : {"bp_cpu_state"},
137 : : {"dfx_msix_info_nic_0"},
138 : : {"dfx_msix_info_nic_1"},
139 : : {"dfx_msix_info_nic_2"},
140 : : {"dfx_msix_info_nic_3"},
141 : :
142 : : {"dfx_msix_info_roce_0"},
143 : : {"dfx_msix_info_roce_1"},
144 : : {"dfx_msix_info_roce_2"},
145 : : {"dfx_msix_info_roce_3"},
146 : : {"bios_rsv1"},
147 : : {"bios_rsv2"},
148 : : };
149 : :
150 : : static struct hns3_dfx_reg_entry dfx_ssu_reg_0_list[] = {
151 : : {"dfx_ssu0_rsv0"},
152 : : {"ssu_ets_port_status"},
153 : : {"ssu_ets_tcg_status"},
154 : : {"dfx_ssu0_rsv1"},
155 : : {"dfx_ssu0_rsv2"},
156 : : {"ssu_bp_status_0"},
157 : :
158 : : {"ssu_bp_status_1"},
159 : : {"ssu_bp_status_2"},
160 : : {"ssu_bp_status_3"},
161 : : {"ssu_bp_status_4"},
162 : : {"ssu_bp_status_5"},
163 : : {"ssu_mac_tx_pfc_ind"},
164 : :
165 : : {"mac_ssu_rx_pfc_ind"},
166 : : {"btmp_ageing_st_b0"},
167 : : {"btmp_ageing_st_b1"},
168 : : {"btmp_ageing_st_b2"},
169 : : {"dfx_ssu0_rsv3"},
170 : : {"dfx_ssu0_rsv4"},
171 : :
172 : : {"ssu_full_drop_num"},
173 : : {"ssu_part_drop_num"},
174 : : {"ppp_key_drop_num"},
175 : : {"ppp_rlt_drop_num"},
176 : : {"lo_pri_unicast_rlt_drop_num"},
177 : : {"hi_pri_multicast_rlt_drop_num"},
178 : :
179 : : {"lo_pri_multicast_rlt_drop_num"},
180 : : {"ncsi_packet_curr_buffer_cnt"},
181 : : {"btmp_ageing_rls_cnt_bank0", "dfx_ssu0_rsv5"},
182 : : {"btmp_ageing_rls_cnt_bank1", "dfx_ssu0_rsv6"},
183 : : {"btmp_ageing_rls_cnt_bank2", "dfx_ssu0_rsv7"},
184 : : {"ssu_mb_rd_rlt_drop_cnt"},
185 : :
186 : : {"ssu_ppp_mac_key_num_l"},
187 : : {"ssu_ppp_mac_key_num_h"},
188 : : {"ssu_ppp_host_key_num_l"},
189 : : {"ssu_ppp_host_key_num_h"},
190 : : {"ppp_ssu_mac_rlt_num_l"},
191 : : {"ppp_ssu_mac_rlt_num_h"},
192 : :
193 : : {"ppp_ssu_host_rlt_num_l"},
194 : : {"ppp_ssu_host_rlt_num_h"},
195 : : {"ncsi_rx_packet_in_cnt_l"},
196 : : {"ncsi_rx_packet_in_cnt_h"},
197 : : {"ncsi_tx_packet_out_cnt_l"},
198 : : {"ncsi_tx_packet_out_cnt_h"},
199 : :
200 : : {"ssu_key_drop_num"},
201 : : {"mb_uncopy_num"},
202 : : {"rx_oq_drop_pkt_cnt"},
203 : : {"tx_oq_drop_pkt_cnt"},
204 : : {"bank_unbalance_drop_cnt"},
205 : : {"bank_unbalance_rx_drop_cnt"},
206 : :
207 : : {"nic_l2_eer_drop_pkt_cnt"},
208 : : {"roc_l2_eer_drop_pkt_cnt"},
209 : : {"nic_l2_eer_drop_pkt_cnt_rx"},
210 : : {"roc_l2_eer_drop_pkt_cnt_rx"},
211 : : {"rx_oq_glb_drop_pkt_cnt"},
212 : : {"dfx_ssu0_rsv8"},
213 : :
214 : : {"lo_pri_unicast_cur_cnt"},
215 : : {"hi_pri_multicast_cur_cnt"},
216 : : {"lo_pri_multicast_cur_cnt"},
217 : : {"dfx_ssu0_rsv9"},
218 : : {"dfx_ssu0_rsv10"},
219 : : {"dfx_ssu0_rsv11"},
220 : : };
221 : :
222 : : static struct hns3_dfx_reg_entry dfx_ssu_reg_1_list[] = {
223 : : {"dfx_ssu1_prt_id"},
224 : : {"packet_tc_curr_buffer_cnt_0"},
225 : : {"packet_tc_curr_buffer_cnt_1"},
226 : : {"packet_tc_curr_buffer_cnt_2"},
227 : : {"packet_tc_curr_buffer_cnt_3"},
228 : : {"packet_tc_curr_buffer_cnt_4"},
229 : :
230 : : {"packet_tc_curr_buffer_cnt_5"},
231 : : {"packet_tc_curr_buffer_cnt_6"},
232 : : {"packet_tc_curr_buffer_cnt_7"},
233 : : {"packet_curr_buffer_cnt"},
234 : : {"dfx_ssu1_rsv0"},
235 : : {"dfx_ssu1_rsv1"},
236 : :
237 : : {"rx_packet_in_cnt_l"},
238 : : {"rx_packet_in_cnt_h"},
239 : : {"rx_packet_out_cnt_l"},
240 : : {"rx_packet_out_cnt_h"},
241 : : {"tx_packet_in_cnt_l"},
242 : : {"tx_packet_in_cnt_h"},
243 : :
244 : : {"tx_packet_out_cnt_l"},
245 : : {"tx_packet_out_cnt_h"},
246 : : {"roc_rx_packet_in_cnt_l"},
247 : : {"roc_rx_packet_in_cnt_h"},
248 : : {"roc_tx_packet_in_cnt_l"},
249 : : {"roc_tx_packet_in_cnt_h"},
250 : :
251 : : {"rx_packet_tc_in_cnt_0_l"},
252 : : {"rx_packet_tc_in_cnt_0_h"},
253 : : {"rx_packet_tc_in_cnt_1_l"},
254 : : {"rx_packet_tc_in_cnt_1_h"},
255 : : {"rx_packet_tc_in_cnt_2_l"},
256 : : {"rx_packet_tc_in_cnt_2_h"},
257 : :
258 : : {"rx_packet_tc_in_cnt_3_l"},
259 : : {"rx_packet_tc_in_cnt_3_h"},
260 : : {"rx_packet_tc_in_cnt_4_l"},
261 : : {"rx_packet_tc_in_cnt_4_h"},
262 : : {"rx_packet_tc_in_cnt_5_l"},
263 : : {"rx_packet_tc_in_cnt_5_h"},
264 : :
265 : : {"rx_packet_tc_in_cnt_6_l"},
266 : : {"rx_packet_tc_in_cnt_6_h"},
267 : : {"rx_packet_tc_in_cnt_7_l"},
268 : : {"rx_packet_tc_in_cnt_7_h"},
269 : : {"rx_packet_tc_out_cnt_0_l"},
270 : : {"rx_packet_tc_out_cnt_0_h"},
271 : :
272 : : {"rx_packet_tc_out_cnt_1_l"},
273 : : {"rx_packet_tc_out_cnt_1_h"},
274 : : {"rx_packet_tc_out_cnt_2_l"},
275 : : {"rx_packet_tc_out_cnt_2_h"},
276 : : {"rx_packet_tc_out_cnt_3_l"},
277 : : {"rx_packet_tc_out_cnt_3_h"},
278 : :
279 : : {"rx_packet_tc_out_cnt_4_l"},
280 : : {"rx_packet_tc_out_cnt_4_h"},
281 : : {"rx_packet_tc_out_cnt_5_l"},
282 : : {"rx_packet_tc_out_cnt_5_h"},
283 : : {"rx_packet_tc_out_cnt_6_l"},
284 : : {"rx_packet_tc_out_cnt_6_h"},
285 : :
286 : : {"rx_packet_tc_out_cnt_7_l"},
287 : : {"rx_packet_tc_out_cnt_7_h"},
288 : : {"tx_packet_tc_in_cnt_0_l"},
289 : : {"tx_packet_tc_in_cnt_0_h"},
290 : : {"tx_packet_tc_in_cnt_1_l"},
291 : : {"tx_packet_tc_in_cnt_1_h"},
292 : :
293 : : {"tx_packet_tc_in_cnt_2_l"},
294 : : {"tx_packet_tc_in_cnt_2_h"},
295 : : {"tx_packet_tc_in_cnt_3_l"},
296 : : {"tx_packet_tc_in_cnt_3_h"},
297 : : {"tx_packet_tc_in_cnt_4_l"},
298 : : {"tx_packet_tc_in_cnt_4_h"},
299 : :
300 : : {"tx_packet_tc_in_cnt_5_l"},
301 : : {"tx_packet_tc_in_cnt_5_h"},
302 : : {"tx_packet_tc_in_cnt_6_l"},
303 : : {"tx_packet_tc_in_cnt_6_h"},
304 : : {"tx_packet_tc_in_cnt_7_l"},
305 : : {"tx_packet_tc_in_cnt_7_h"},
306 : :
307 : : {"tx_packet_tc_out_cnt_0_l"},
308 : : {"tx_packet_tc_out_cnt_0_h"},
309 : : {"tx_packet_tc_out_cnt_1_l"},
310 : : {"tx_packet_tc_out_cnt_1_h"},
311 : : {"tx_packet_tc_out_cnt_2_l"},
312 : : {"tx_packet_tc_out_cnt_2_h"},
313 : :
314 : : {"tx_packet_tc_out_cnt_3_l"},
315 : : {"tx_packet_tc_out_cnt_3_h"},
316 : : {"tx_packet_tc_out_cnt_4_l"},
317 : : {"tx_packet_tc_out_cnt_4_h"},
318 : : {"tx_packet_tc_out_cnt_5_l"},
319 : : {"tx_packet_tc_out_cnt_5_h"},
320 : :
321 : : {"tx_packet_tc_out_cnt_6_l"},
322 : : {"tx_packet_tc_out_cnt_6_h"},
323 : : {"tx_packet_tc_out_cnt_7_l"},
324 : : {"tx_packet_tc_out_cnt_7_h"},
325 : : {"dfx_ssu1_rsv2"},
326 : : {"dfx_ssu1_rsv3"},
327 : : };
328 : :
329 : : static struct hns3_dfx_reg_entry dfx_igu_egu_reg_list[] = {
330 : : {"igu_egu_prt_id"},
331 : : {"igu_rx_err_pkt"},
332 : : {"igu_rx_no_sof_pkt"},
333 : : {"egu_tx_1588_short_pkt"},
334 : : {"egu_tx_1588_pkt"},
335 : : {"egu_tx_1588_err_pkt"},
336 : :
337 : : {"igu_rx_out_l2_pkt"},
338 : : {"igu_rx_out_l3_pkt"},
339 : : {"igu_rx_out_l4_pkt"},
340 : : {"igu_rx_in_l2_pkt"},
341 : : {"igu_rx_in_l3_pkt"},
342 : : {"igu_rx_in_l4_pkt"},
343 : :
344 : : {"igu_rx_el3e_pkt"},
345 : : {"igu_rx_el4e_pkt"},
346 : : {"igu_rx_l3e_pkt"},
347 : : {"igu_rx_l4e_pkt"},
348 : : {"igu_rx_rocee_pkt"},
349 : : {"igu_rx_out_udp0_pkt"},
350 : :
351 : : {"igu_rx_in_udp0_pkt"},
352 : : {"igu_egu_rsv0", "igu_egu_mul_car_drop_pkt_cnt_l"},
353 : : {"igu_egu_rsv1", "igu_egu_mul_car_drop_pkt_cnt_h"},
354 : : {"igu_egu_rsv2", "igu_egu_bro_car_drop_pkt_cnt_l"},
355 : : {"igu_egu_rsv3", "igu_egu_bro_car_drop_pkt_cnt_h"},
356 : : {"igu_egu_rsv4", "igu_egu_rsv0"},
357 : :
358 : : {"igu_rx_oversize_pkt_l"},
359 : : {"igu_rx_oversize_pkt_h"},
360 : : {"igu_rx_undersize_pkt_l"},
361 : : {"igu_rx_undersize_pkt_h"},
362 : : {"igu_rx_out_all_pkt_l"},
363 : : {"igu_rx_out_all_pkt_h"},
364 : :
365 : : {"igu_tx_out_all_pkt_l"},
366 : : {"igu_tx_out_all_pkt_h"},
367 : : {"igu_rx_uni_pkt_l"},
368 : : {"igu_rx_uni_pkt_h"},
369 : : {"igu_rx_multi_pkt_l"},
370 : : {"igu_rx_multi_pkt_h"},
371 : :
372 : : {"igu_rx_broad_pkt_l"},
373 : : {"igu_rx_broad_pkt_h"},
374 : : {"egu_tx_out_all_pkt_l"},
375 : : {"egu_tx_out_all_pkt_h"},
376 : : {"egu_tx_uni_pkt_l"},
377 : : {"egu_tx_uni_pkt_h"},
378 : :
379 : : {"egu_tx_multi_pkt_l"},
380 : : {"egu_tx_multi_pkt_h"},
381 : : {"egu_tx_broad_pkt_l"},
382 : : {"egu_tx_broad_pkt_h"},
383 : : {"igu_tx_key_num_l"},
384 : : {"igu_tx_key_num_h"},
385 : :
386 : : {"igu_rx_non_tun_pkt_l"},
387 : : {"igu_rx_non_tun_pkt_h"},
388 : : {"igu_rx_tun_pkt_l"},
389 : : {"igu_rx_tun_pkt_h"},
390 : : {"igu_egu_rsv5"},
391 : : {"igu_egu_rsv6"},
392 : : };
393 : :
394 : : static struct hns3_dfx_reg_entry dfx_rpu_reg_0_list[] = {
395 : : {"rpu_tc_queue_num", "rpu_currport_tnl_index"},
396 : : {"rpu_fsm_dfx_st0"},
397 : : {"rpu_fsm_dfx_st1"},
398 : : {"rpu_rpu_rx_pkt_drop_cnt"},
399 : : {"rpu_buf_wait_timeout"},
400 : : {"rpu_buf_wait_timeout_qid"},
401 : : };
402 : :
403 : : static struct hns3_dfx_reg_entry dfx_rpu_reg_1_list[] = {
404 : : {"rpu_rsv0"},
405 : : {"rpu_fifo_dfx_st0"},
406 : : {"rpu_fifo_dfx_st1"},
407 : : {"rpu_fifo_dfx_st2"},
408 : : {"rpu_fifo_dfx_st3"},
409 : : {"rpu_fifo_dfx_st4"},
410 : :
411 : : {"rpu_fifo_dfx_st5"},
412 : : {"rpu_rsv1"},
413 : : {"rpu_rsv2"},
414 : : {"rpu_rsv3"},
415 : : {"rpu_rsv4"},
416 : : {"rpu_rsv5"},
417 : : };
418 : :
419 : : static struct hns3_dfx_reg_entry dfx_ncsi_reg_list[] = {
420 : : {"ncsi_rsv0"},
421 : : {"ncsi_egu_tx_fifo_sts"},
422 : : {"ncsi_pause_status"},
423 : : {"ncsi_rx_ctrl_dmac_err_cnt"},
424 : : {"ncsi_rx_ctrl_smac_err_cnt"},
425 : : {"ncsi_rx_ctrl_cks_err_cnt"},
426 : :
427 : : {"ncsi_rx_ctrl_pkt_err_cnt"},
428 : : {"ncsi_rx_pt_dmac_err_cnt"},
429 : : {"ncsi_rx_pt_smac_err_cnt"},
430 : : {"ncsi_rx_pt_pkt_cnt"},
431 : : {"ncsi_rx_fcs_err_cnt"},
432 : : {"ncsi_tx_ctrl_dmac_err_cnt"},
433 : :
434 : : {"ncsi_tx_ctrl_smac_err_cnt"},
435 : : {"ncsi_tx_ctrl_pkt_cnt"},
436 : : {"ncsi_tx_pt_dmac_err_cnt"},
437 : : {"ncsi_tx_pt_smac_err_cnt"},
438 : : {"ncsi_tx_pt_pkt_cnt"},
439 : : {"ncsi_tx_pt_pkt_trun_cnt"},
440 : :
441 : : {"ncsi_tx_pt_pkt_err_cnt"},
442 : : {"ncsi_tx_ctrl_pkt_err_cnt"},
443 : : {"ncsi_rx_ctrl_pkt_trun_cnt"},
444 : : {"ncsi_rx_ctrl_pkt_cflit_cnt"},
445 : : {"ncsi_rsv1"},
446 : : {"ncsi_rsv2"},
447 : :
448 : : {"ncsi_mac_rx_octets_ok"},
449 : : {"ncsi_mac_rx_octets_bad"},
450 : : {"ncsi_mac_rx_uc_pkts"},
451 : : {"ncsi_mac_rx_mc_pkts"},
452 : : {"ncsi_mac_rx_bc_pkts"},
453 : : {"ncsi_mac_rx_pkts_64octets"},
454 : :
455 : : {"ncsi_mac_rx_pkts_64to127_octets"},
456 : : {"ncsi_mac_rx_pkts_128to255_octets"},
457 : : {"ncsi_mac_rx_pkts_256to511_octets"},
458 : : {"ncsi_mac_rx_pkts_512to1023_octets"},
459 : : {"ncsi_mac_rx_pkts_1024to1518_octets"},
460 : : {"ncsi_mac_rx_pkts_1519tomax_octets"},
461 : :
462 : : {"ncsi_mac_rx_fcs_errors"},
463 : : {"ncsi_mac_rx_long_errors"},
464 : : {"ncsi_mac_rx_jabber_errors"},
465 : : {"ncsi_mac_rx_runt_err_cnt"},
466 : : {"ncsi_mac_rx_short_err_cnt"},
467 : : {"ncsi_mac_rx_filt_pkt_cnt"},
468 : :
469 : : {"ncsi_mac_rx_octets_total_filt"},
470 : : {"ncsi_mac_tx_octets_ok"},
471 : : {"ncsi_mac_tx_octets_bad"},
472 : : {"ncsi_mac_tx_uc_pkts"},
473 : : {"ncsi_mac_tx_mc_pkts"},
474 : : {"ncsi_mac_tx_bc_pkts"},
475 : :
476 : : {"ncsi_mac_tx_pkts_64octets"},
477 : : {"ncsi_mac_tx_pkts_64to127_octets"},
478 : : {"ncsi_mac_tx_pkts_128to255_octets"},
479 : : {"ncsi_mac_tx_pkts_256to511_octets"},
480 : : {"ncsi_mac_tx_pkts_512to1023_octets"},
481 : : {"ncsi_mac_tx_pkts_1024to1518_octets"},
482 : :
483 : : {"ncsi_mac_tx_pkts_1519tomax_octets"},
484 : : {"ncsi_mac_tx_underrun"},
485 : : {"ncsi_mac_tx_crc_error"},
486 : : {"ncsi_mac_tx_pause_frames"},
487 : : {"ncsi_mac_rx_pad_pkts"},
488 : : {"ncsi_mac_rx_pause_frames"},
489 : : };
490 : :
491 : : static struct hns3_dfx_reg_entry dfx_rtc_reg_list[] = {
492 : : {"rtc_rsv0"},
493 : : {"lge_igu_afifo_dfx_0"},
494 : : {"lge_igu_afifo_dfx_1"},
495 : : {"lge_igu_afifo_dfx_2"},
496 : : {"lge_igu_afifo_dfx_3"},
497 : : {"lge_igu_afifo_dfx_4"},
498 : :
499 : : {"lge_igu_afifo_dfx_5"},
500 : : {"lge_igu_afifo_dfx_6"},
501 : : {"lge_igu_afifo_dfx_7"},
502 : : {"lge_egu_afifo_dfx_0"},
503 : : {"lge_egu_afifo_dfx_1"},
504 : : {"lge_egu_afifo_dfx_2"},
505 : :
506 : : {"lge_egu_afifo_dfx_3"},
507 : : {"lge_egu_afifo_dfx_4"},
508 : : {"lge_egu_afifo_dfx_5"},
509 : : {"lge_egu_afifo_dfx_6"},
510 : : {"lge_egu_afifo_dfx_7"},
511 : : {"cge_igu_afifo_dfx_0"},
512 : :
513 : : {"cge_igu_afifo_dfx_1"},
514 : : {"cge_egu_afifo_dfx_0"},
515 : : {"cge_egu_afifo_dfx_i"},
516 : : {"rtc_rsv1"},
517 : : {"rtc_rsv2"},
518 : : {"rtc_rsv3"},
519 : : };
520 : :
521 : : static struct hns3_dfx_reg_entry dfx_ppp_reg_list[] = {
522 : : {"ppp_rsv0"},
523 : : {"ppp_drop_from_prt_pkt_cnt"},
524 : : {"ppp_drop_from_host_pkt_cnt"},
525 : : {"ppp_drop_tx_vlan_proc_cnt"},
526 : : {"ppp_drop_mng_cnt"},
527 : : {"ppp_drop_fd_cnt"},
528 : :
529 : : {"ppp_drop_no_dst_cnt"},
530 : : {"ppp_drop_mc_mbid_full_cnt"},
531 : : {"ppp_drop_sc_filtered"},
532 : : {"ppp_ppp_mc_drop_pkt_cnt"},
533 : : {"ppp_drop_pt_cnt"},
534 : : {"ppp_drop_mac_anti_spoof_cnt"},
535 : :
536 : : {"ppp_drop_ig_vfv_cnt"},
537 : : {"ppp_drop_ig_prtv_cnt"},
538 : : {"ppp_drop_cnm_pfc_pause_cnt"},
539 : : {"ppp_drop_torus_tc_cnt"},
540 : : {"ppp_drop_torus_lpbk_cnt"},
541 : : {"ppp_ppp_hfs_sts"},
542 : :
543 : : {"ppp_mc_rslt_sts"},
544 : : {"ppp_p3u_sts"},
545 : : {"ppp_rslt_descr_sts", "ppp_rsv1"},
546 : : {"ppp_umv_sts_0"},
547 : : {"ppp_umv_sts_1"},
548 : : {"ppp_vfv_sts"},
549 : :
550 : : {"ppp_gro_key_cnt"},
551 : : {"ppp_gro_info_cnt"},
552 : : {"ppp_gro_drop_cnt"},
553 : : {"ppp_gro_out_cnt"},
554 : : {"ppp_gro_key_match_data_cnt"},
555 : : {"ppp_gro_key_match_tcam_cnt"},
556 : :
557 : : {"ppp_gro_info_match_cnt"},
558 : : {"ppp_gro_free_entry_cnt"},
559 : : {"ppp_gro_inner_dfx_signal"},
560 : : {"ppp_rsv2"},
561 : : {"ppp_rsv3"},
562 : : {"ppp_rsv4"},
563 : :
564 : : {"ppp_get_rx_pkt_cnt_l"},
565 : : {"ppp_get_rx_pkt_cnt_h"},
566 : : {"ppp_get_tx_pkt_cnt_l"},
567 : : {"ppp_get_tx_pkt_cnt_h"},
568 : : {"ppp_send_uc_prt2host_pkt_cnt_l"},
569 : : {"ppp_send_uc_prt2host_pkt_cnt_h"},
570 : :
571 : : {"ppp_send_uc_prt2prt_pkt_cnt_l"},
572 : : {"ppp_send_uc_prt2prt_pkt_cnt_h"},
573 : : {"ppp_send_uc_host2host_pkt_cnt_l"},
574 : : {"ppp_send_uc_host2host_pkt_cnt_h"},
575 : : {"ppp_send_uc_host2prt_pkt_cnt_l"},
576 : : {"ppp_send_uc_host2prt_pkt_cnt_h"},
577 : :
578 : : {"ppp_send_mc_from_prt_cnt_l"},
579 : : {"ppp_send_mc_from_prt_cnt_h"},
580 : : {"ppp_send_mc_from_host_cnt_l"},
581 : : {"ppp_send_mc_from_host_cnt_h"},
582 : : {"ppp_ssu_mc_rd_cnt_l"},
583 : : {"ppp_ssu_mc_rd_cnt_h"},
584 : :
585 : : {"ppp_ssu_mc_drop_cnt_l"},
586 : : {"ppp_ssu_mc_drop_cnt_h"},
587 : : {"ppp_ssu_mc_rd_pkt_cnt_l"},
588 : : {"ppp_ssu_mc_rd_pkt_cnt_h"},
589 : : {"ppp_mc_2host_pkt_cnt_l"},
590 : : {"ppp_mc_2host_pkt_cnt_h"},
591 : :
592 : : {"ppp_mc_2prt_pkt_cnt_l"},
593 : : {"ppp_mc_2prt_pkt_cnt_h"},
594 : : {"ppp_ntsnos_pkt_cnt_l"},
595 : : {"ppp_ntsnos_pkt_cnt_h"},
596 : : {"ppp_ntup_pkt_cnt_l"},
597 : : {"ppp_ntup_pkt_cnt_h"},
598 : :
599 : : {"ppp_ntlcl_pkt_cnt_l"},
600 : : {"ppp_ntlcl_pkt_cnt_h"},
601 : : {"ppp_nttgt_pkt_cnt_l"},
602 : : {"ppp_nttgt_pkt_cnt_h"},
603 : : {"ppp_rtns_pkt_cnt_l"},
604 : : {"ppp_rtns_pkt_cnt_h"},
605 : :
606 : : {"ppp_rtlpbk_pkt_cnt_l"},
607 : : {"ppp_rtlpbk_pkt_cnt_h"},
608 : : {"ppp_nr_pkt_cnt_l"},
609 : : {"ppp_nr_pkt_cnt_h"},
610 : : {"ppp_rr_pkt_cnt_l"},
611 : : {"ppp_rr_pkt_cnt_h"},
612 : :
613 : : {"ppp_mng_tbl_hit_cnt_l"},
614 : : {"ppp_mng_tbl_hit_cnt_h"},
615 : : {"ppp_fd_tbl_hit_cnt_l"},
616 : : {"ppp_fd_tbl_hit_cnt_h"},
617 : : {"ppp_fd_lkup_cnt_l"},
618 : : {"ppp_fd_lkup_cnt_h"},
619 : :
620 : : {"ppp_bc_hit_cnt"},
621 : : {"ppp_bc_hit_cnt_h"},
622 : : {"ppp_um_tbl_uc_hit_cnt"},
623 : : {"ppp_um_tbl_uc_hit_cnt_h"},
624 : : {"ppp_um_tbl_mc_hit_cnt"},
625 : : {"ppp_um_tbl_mc_hit_cnt_h"},
626 : :
627 : : {"ppp_um_tbl_vmdq1_hit_cnt_l", "ppp_um_tbl_snq_hit_cnt_l"},
628 : : {"ppp_um_tbl_vmdq1_hit_cnt_h", "ppp_um_tbl_snq_hit_cnt_h"},
629 : : {"ppp_mta_tbl_hit_cnt_l", "ppp_rsv5"},
630 : : {"ppp_mta_tbl_hit_cnt_h", "ppp_rsv6"},
631 : : {"ppp_fwd_bonding_hit_cnt_l"},
632 : : {"ppp_fwd_bonding_hit_cnt_h"},
633 : :
634 : : {"ppp_promisc_tbl_hit_cnt_l"},
635 : : {"ppp_promisc_tbl_hit_cnt_h"},
636 : : {"ppp_get_tunl_pkt_cnt_l"},
637 : : {"ppp_get_tunl_pkt_cnt_h"},
638 : : {"ppp_get_bmc_pkt_cnt_l"},
639 : : {"ppp_get_bmc_pkt_cnt_h"},
640 : :
641 : : {"ppp_send_uc_prt2bmc_pkt_cnt_l"},
642 : : {"ppp_send_uc_prt2bmc_pkt_cnt_h"},
643 : : {"ppp_send_uc_host2bmc_pkt_cnt_l"},
644 : : {"ppp_send_uc_host2bmc_pkt_cnt_h"},
645 : : {"ppp_send_uc_bmc2host_pkt_cnt_l"},
646 : : {"ppp_send_uc_bmc2host_pkt_cnt_h"},
647 : :
648 : : {"ppp_send_uc_bmc2prt_pkt_cnt_l"},
649 : : {"ppp_send_uc_bmc2prt_pkt_cnt_h"},
650 : : {"ppp_mc_2bmc_pkt_cnt_l"},
651 : : {"ppp_mc_2bmc_pkt_cnt_h"},
652 : : {"ppp_vlan_mirr_cnt_l", "ppp_rsv7"},
653 : : {"ppp_vlan_mirr_cnt_h", "ppp_rsv8"},
654 : :
655 : : {"ppp_ig_mirr_cnt_l", "ppp_rsv9"},
656 : : {"ppp_ig_mirr_cnt_h", "ppp_rsv10"},
657 : : {"ppp_eg_mirr_cnt_l", "ppp_rsv11"},
658 : : {"ppp_eg_mirr_cnt_h", "ppp_rsv12"},
659 : : {"ppp_rx_default_host_hit_cnt_l"},
660 : : {"ppp_rx_default_host_hit_cnt_h"},
661 : :
662 : : {"ppp_lan_pair_cnt_l"},
663 : : {"ppp_lan_pair_cnt_h"},
664 : : {"ppp_um_tbl_mc_hit_pkt_cnt_l"},
665 : : {"ppp_um_tbl_mc_hit_pkt_cnt_h"},
666 : : {"ppp_mta_tbl_hit_pkt_cnt_l"},
667 : : {"ppp_mta_tbl_hit_pkt_cnt_h"},
668 : :
669 : : {"ppp_promisc_tbl_hit_pkt_cnt_l"},
670 : : {"ppp_promisc_tbl_hit_pkt_cnt_h"},
671 : : {"ppp_rsv13"},
672 : : {"ppp_rsv14"},
673 : : {"ppp_rsv15"},
674 : : {"ppp_rsv16"},
675 : : };
676 : :
677 : : static struct hns3_dfx_reg_entry dfx_rcb_reg_list[] = {
678 : : {"rcb_rsv0"},
679 : : {"rcb_fsm_dfx_st0"},
680 : : {"rcb_fsm_dfx_st1"},
681 : : {"rcb_fsm_dfx_st2"},
682 : : {"rcb_fifo_dfx_st0"},
683 : : {"rcb_fifo_dfx_st1"},
684 : :
685 : : {"rcb_fifo_dfx_st2"},
686 : : {"rcb_fifo_dfx_st3"},
687 : : {"rcb_fifo_dfx_st4"},
688 : : {"rcb_fifo_dfx_st5"},
689 : : {"rcb_fifo_dfx_st6"},
690 : : {"rcb_fifo_dfx_st7"},
691 : :
692 : : {"rcb_fifo_dfx_st8"},
693 : : {"rcb_fifo_dfx_st9"},
694 : : {"rcb_fifo_dfx_st10"},
695 : : {"rcb_fifo_dfx_st11"},
696 : : {"rcb_q_credit_vld_0"},
697 : : {"rcb_q_credit_vld_1"},
698 : :
699 : : {"rcb_q_credit_vld_2"},
700 : : {"rcb_q_credit_vld_3"},
701 : : {"rcb_q_credit_vld_4"},
702 : : {"rcb_q_credit_vld_5"},
703 : : {"rcb_q_credit_vld_6"},
704 : : {"rcb_q_credit_vld_7"},
705 : :
706 : : {"rcb_q_credit_vld_8"},
707 : : {"rcb_q_credit_vld_9"},
708 : : {"rcb_q_credit_vld_10"},
709 : : {"rcb_q_credit_vld_11"},
710 : : {"rcb_q_credit_vld_12"},
711 : : {"rcb_q_credit_vld_13"},
712 : :
713 : : {"rcb_q_credit_vld_14"},
714 : : {"rcb_q_credit_vld_15"},
715 : : {"rcb_q_credit_vld_16"},
716 : : {"rcb_q_credit_vld_17"},
717 : : {"rcb_q_credit_vld_18"},
718 : : {"rcb_q_credit_vld_19"},
719 : :
720 : : {"rcb_q_credit_vld_20"},
721 : : {"rcb_q_credit_vld_21"},
722 : : {"rcb_q_credit_vld_22"},
723 : : {"rcb_q_credit_vld_23"},
724 : : {"rcb_q_credit_vld_24"},
725 : : {"rcb_q_credit_vld_25"},
726 : :
727 : : {"rcb_q_credit_vld_26"},
728 : : {"rcb_q_credit_vld_27"},
729 : : {"rcb_q_credit_vld_28"},
730 : : {"rcb_q_credit_vld_29"},
731 : : {"rcb_q_credit_vld_30"},
732 : : {"rcb_q_credit_vld_31"},
733 : :
734 : : {"rcb_gro_bd_serr_cnt"},
735 : : {"rcb_gro_context_serr_cnt"},
736 : : {"rcb_rx_stash_cfg_serr_cnt"},
737 : : {"rcb_axi_rd_fbd_serr_cnt", "rcb_rcb_tx_mem_serr_cnt"},
738 : : {"rcb_gro_bd_merr_cnt"},
739 : : {"rcb_gro_context_merr_cnt"},
740 : :
741 : : {"rcb_rx_stash_cfg_merr_cnt"},
742 : : {"rcb_axi_rd_fbd_merr_cnt"},
743 : : {"rcb_rsv1"},
744 : : {"rcb_rsv2"},
745 : : {"rcb_rsv3"},
746 : : {"rcb_rsv4"},
747 : : };
748 : :
749 : : static struct hns3_dfx_reg_entry dfx_tqp_reg_list[] = {
750 : : {"dfx_tqp_q_num"},
751 : : {"rcb_cfg_rx_ring_tail"},
752 : : {"rcb_cfg_rx_ring_head"},
753 : : {"rcb_cfg_rx_ring_fbdnum"},
754 : : {"rcb_cfg_rx_ring_offset"},
755 : : {"rcb_cfg_rx_ring_fbdoffset"},
756 : :
757 : : {"rcb_cfg_rx_ring_pktnum_record"},
758 : : {"rcb_cfg_tx_ring_tail"},
759 : : {"rcb_cfg_tx_ring_head"},
760 : : {"rcb_cfg_tx_ring_fbdnum"},
761 : : {"rcb_cfg_tx_ring_offset"},
762 : : {"rcb_cfg_tx_ring_ebdnum"},
763 : : };
764 : :
765 : : static struct hns3_dfx_reg_entry dfx_ssu_reg_2_list[] = {
766 : : {"dfx_ssu2_oq_index"},
767 : : {"dfx_ssu2_queue_cnt"},
768 : : {"dfx_ssu2_rsv0"},
769 : : {"dfx_ssu2_rsv1"},
770 : : {"dfx_ssu2_rsv2"},
771 : : {"dfx_ssu2_rsv3"},
772 : : };
773 : :
774 : : enum hns3_reg_modules {
775 : : HNS3_BIOS_COMMON = 0,
776 : : HNS3_SSU_0,
777 : : HNS3_SSU_1,
778 : : HNS3_IGU_EGU,
779 : : HNS3_RPU_0,
780 : : HNS3_RPU_1,
781 : : HNS3_NCSI,
782 : : HNS3_RTC,
783 : : HNS3_PPP,
784 : : HNS3_RCB,
785 : : HNS3_TQP,
786 : : HNS3_SSU_2,
787 : :
788 : : HNS3_CMDQ = 12,
789 : : HNS3_COMMON_PF,
790 : : HNS3_COMMON_VF,
791 : : HNS3_RING,
792 : : HNS3_TQP_INTR,
793 : :
794 : : HNS3_32_BIT_DFX,
795 : : HNS3_64_BIT_DFX,
796 : : };
797 : :
798 : : #define HNS3_MODULE_MASK(x) RTE_BIT32(x)
799 : : #define HNS3_VF_MODULES (HNS3_MODULE_MASK(HNS3_CMDQ) | HNS3_MODULE_MASK(HNS3_COMMON_VF) | \
800 : : HNS3_MODULE_MASK(HNS3_RING) | HNS3_MODULE_MASK(HNS3_TQP_INTR))
801 : : #define HNS3_VF_ONLY_MODULES HNS3_MODULE_MASK(HNS3_COMMON_VF)
802 : :
803 : : struct hns3_reg_list {
804 : : const void *reg_list;
805 : : uint32_t entry_num;
806 : : };
807 : :
808 : : struct {
809 : : const char *name;
810 : : uint32_t module;
811 : : } hns3_module_name_map[] = {
812 : : { "bios", HNS3_MODULE_MASK(HNS3_BIOS_COMMON) },
813 : : { "ssu", HNS3_MODULE_MASK(HNS3_SSU_0) | HNS3_MODULE_MASK(HNS3_SSU_1) |
814 : : HNS3_MODULE_MASK(HNS3_SSU_2) },
815 : : { "igu_egu", HNS3_MODULE_MASK(HNS3_IGU_EGU) },
816 : : { "rpu", HNS3_MODULE_MASK(HNS3_RPU_0) | HNS3_MODULE_MASK(HNS3_RPU_1) },
817 : : { "ncsi", HNS3_MODULE_MASK(HNS3_NCSI) },
818 : : { "rtc", HNS3_MODULE_MASK(HNS3_RTC) },
819 : : { "ppp", HNS3_MODULE_MASK(HNS3_PPP) },
820 : : { "rcb", HNS3_MODULE_MASK(HNS3_RCB) },
821 : : { "tqp", HNS3_MODULE_MASK(HNS3_TQP) },
822 : : { "cmdq", HNS3_MODULE_MASK(HNS3_CMDQ) },
823 : : { "common_pf", HNS3_MODULE_MASK(HNS3_COMMON_PF) },
824 : : { "common_vf", HNS3_MODULE_MASK(HNS3_COMMON_VF) },
825 : : { "ring", HNS3_MODULE_MASK(HNS3_RING) },
826 : : { "tqp_intr", HNS3_MODULE_MASK(HNS3_TQP_INTR) },
827 : : { "32_bit_dfx", HNS3_MODULE_MASK(HNS3_32_BIT_DFX) },
828 : : { "64_bit_dfx", HNS3_MODULE_MASK(HNS3_64_BIT_DFX) },
829 : : };
830 : :
831 : : static struct hns3_reg_list hns3_reg_lists[] = {
832 : : [HNS3_BIOS_COMMON] = { dfx_bios_common_reg_list, RTE_DIM(dfx_bios_common_reg_list) },
833 : : [HNS3_SSU_0] = { dfx_ssu_reg_0_list, RTE_DIM(dfx_ssu_reg_0_list) },
834 : : [HNS3_SSU_1] = { dfx_ssu_reg_1_list, RTE_DIM(dfx_ssu_reg_1_list) },
835 : : [HNS3_IGU_EGU] = { dfx_igu_egu_reg_list, RTE_DIM(dfx_igu_egu_reg_list) },
836 : : [HNS3_RPU_0] = { dfx_rpu_reg_0_list, RTE_DIM(dfx_rpu_reg_0_list) },
837 : : [HNS3_RPU_1] = { dfx_rpu_reg_1_list, RTE_DIM(dfx_rpu_reg_1_list) },
838 : : [HNS3_NCSI] = { dfx_ncsi_reg_list, RTE_DIM(dfx_ncsi_reg_list) },
839 : : [HNS3_RTC] = { dfx_rtc_reg_list, RTE_DIM(dfx_rtc_reg_list) },
840 : : [HNS3_PPP] = { dfx_ppp_reg_list, RTE_DIM(dfx_ppp_reg_list) },
841 : : [HNS3_RCB] = { dfx_rcb_reg_list, RTE_DIM(dfx_rcb_reg_list) },
842 : : [HNS3_TQP] = { dfx_tqp_reg_list, RTE_DIM(dfx_tqp_reg_list) },
843 : : [HNS3_SSU_2] = { dfx_ssu_reg_2_list, RTE_DIM(dfx_ssu_reg_2_list) },
844 : : [HNS3_CMDQ] = { cmdq_reg_list, RTE_DIM(cmdq_reg_list) },
845 : : [HNS3_COMMON_PF] = { common_reg_list, RTE_DIM(common_reg_list) },
846 : : [HNS3_COMMON_VF] = { common_vf_reg_list, RTE_DIM(common_vf_reg_list) },
847 : : [HNS3_RING] = { ring_reg_list, RTE_DIM(ring_reg_list) },
848 : : [HNS3_TQP_INTR] = { tqp_intr_reg_list, RTE_DIM(tqp_intr_reg_list) },
849 : : [HNS3_32_BIT_DFX] = { regs_32_bit_list, RTE_DIM(regs_32_bit_list) },
850 : : [HNS3_64_BIT_DFX] = { regs_64_bit_list, RTE_DIM(regs_64_bit_list) },
851 : : };
852 : :
853 : : static const uint32_t hns3_dfx_reg_opcode_list[] = {
854 : : [HNS3_BIOS_COMMON] = HNS3_OPC_DFX_BIOS_COMMON_REG,
855 : : [HNS3_SSU_0] = HNS3_OPC_DFX_SSU_REG_0,
856 : : [HNS3_SSU_1] = HNS3_OPC_DFX_SSU_REG_1,
857 : : [HNS3_IGU_EGU] = HNS3_OPC_DFX_IGU_EGU_REG,
858 : : [HNS3_RPU_0] = HNS3_OPC_DFX_RPU_REG_0,
859 : : [HNS3_RPU_1] = HNS3_OPC_DFX_RPU_REG_1,
860 : : [HNS3_NCSI] = HNS3_OPC_DFX_NCSI_REG,
861 : : [HNS3_RTC] = HNS3_OPC_DFX_RTC_REG,
862 : : [HNS3_PPP] = HNS3_OPC_DFX_PPP_REG,
863 : : [HNS3_RCB] = HNS3_OPC_DFX_RCB_REG,
864 : : [HNS3_TQP] = HNS3_OPC_DFX_TQP_REG,
865 : : [HNS3_SSU_2] = HNS3_OPC_DFX_SSU_REG_2
866 : : };
867 : :
868 : : static int
869 : 0 : hns3_get_regs_num(struct hns3_hw *hw, uint32_t *regs_num_32_bit,
870 : : uint32_t *regs_num_64_bit)
871 : : {
872 : : struct hns3_cmd_desc desc;
873 : : int ret;
874 : :
875 : 0 : hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_QUERY_REG_NUM, true);
876 : 0 : ret = hns3_cmd_send(hw, &desc, 1);
877 [ # # ]: 0 : if (ret) {
878 : 0 : hns3_err(hw, "Query register number cmd failed, ret = %d",
879 : : ret);
880 : 0 : return ret;
881 : : }
882 : :
883 : 0 : *regs_num_32_bit = rte_le_to_cpu_32(desc.data[0]);
884 : 0 : *regs_num_64_bit = rte_le_to_cpu_32(desc.data[1]);
885 [ # # ]: 0 : if (*regs_num_32_bit != RTE_DIM(regs_32_bit_list) ||
886 [ # # ]: 0 : *regs_num_64_bit * HNS3_64_BIT_REG_OUTPUT_SIZE != RTE_DIM(regs_64_bit_list)) {
887 : 0 : hns3_err(hw, "Query register number differ from the list!");
888 : 0 : return -EINVAL;
889 : : }
890 : :
891 : : return 0;
892 : : }
893 : :
894 : : static const char *
895 : : hns3_get_name_by_module(enum hns3_reg_modules module)
896 : : {
897 : : size_t i;
898 : :
899 [ # # ]: 0 : for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
900 [ # # ]: 0 : if ((hns3_module_name_map[i].module & HNS3_MODULE_MASK(module)) != 0)
901 : 0 : return hns3_module_name_map[i].name;
902 : : }
903 : : return "unknown";
904 : : }
905 : :
906 : : static void
907 : 0 : hns3_get_module_names(char *names, uint32_t len)
908 : : {
909 : : size_t i;
910 : :
911 [ # # ]: 0 : for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
912 : 0 : strlcat(names, " ", len);
913 : 0 : strlcat(names, hns3_module_name_map[i].name, len);
914 : : }
915 : 0 : }
916 : :
917 : : static uint32_t
918 : 0 : hns3_parse_modules_by_filter(struct hns3_hw *hw, const char *filter)
919 : : {
920 : : struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
921 : 0 : char names[HNS3_MAX_MODULES_LEN] = {0};
922 : : uint32_t modules = 0;
923 : : size_t i;
924 : :
925 [ # # ]: 0 : if (filter == NULL) {
926 : : modules = (1 << RTE_DIM(hns3_reg_lists)) - 1;
927 : : } else {
928 [ # # ]: 0 : for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
929 [ # # ]: 0 : if (strcmp(filter, hns3_module_name_map[i].name) == 0) {
930 : 0 : modules |= hns3_module_name_map[i].module;
931 : 0 : break;
932 : : }
933 : : }
934 : : }
935 : :
936 [ # # ]: 0 : if (hns->is_vf)
937 : 0 : modules &= HNS3_VF_MODULES;
938 : : else
939 : 0 : modules &= ~HNS3_VF_ONLY_MODULES;
940 [ # # ]: 0 : if (modules == 0) {
941 : 0 : hns3_get_module_names(names, HNS3_MAX_MODULES_LEN);
942 : 0 : hns3_err(hw, "mismatched module name! Available names are:%s.",
943 : : names);
944 : : }
945 : 0 : return modules;
946 : : }
947 : :
948 : : static int
949 : 0 : hns3_get_dfx_reg_bd_num(struct hns3_hw *hw, uint32_t *bd_num_list,
950 : : uint32_t list_size)
951 : : {
952 : : #define HNS3_GET_DFX_REG_BD_NUM_SIZE 4
953 : : struct hns3_cmd_desc desc[HNS3_GET_DFX_REG_BD_NUM_SIZE];
954 : : uint32_t index, desc_index;
955 : : uint32_t bd_num;
956 : : uint32_t i;
957 : : int ret;
958 : :
959 [ # # ]: 0 : for (i = 0; i < HNS3_GET_DFX_REG_BD_NUM_SIZE - 1; i++) {
960 : 0 : hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
961 : 0 : desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
962 : : }
963 : : /* The last BD does not need a next flag */
964 : 0 : hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
965 : :
966 : 0 : ret = hns3_cmd_send(hw, desc, HNS3_GET_DFX_REG_BD_NUM_SIZE);
967 [ # # ]: 0 : if (ret) {
968 : 0 : hns3_err(hw, "fail to get dfx bd num, ret = %d.", ret);
969 : 0 : return ret;
970 : : }
971 : :
972 : : /* The first data in the first BD is a reserved field */
973 [ # # ]: 0 : for (i = 1; i <= list_size; i++) {
974 : 0 : desc_index = i / HNS3_CMD_DESC_DATA_NUM;
975 : 0 : index = i % HNS3_CMD_DESC_DATA_NUM;
976 : 0 : bd_num = rte_le_to_cpu_32(desc[desc_index].data[index]);
977 : 0 : bd_num_list[i - 1] = bd_num;
978 : : }
979 : :
980 : : return 0;
981 : : }
982 : :
983 : : static uint32_t
984 : : hns3_get_regs_length(struct hns3_hw *hw, uint32_t modules)
985 : : {
986 : : uint32_t reg_num = 0, length = 0;
987 : : uint32_t i;
988 : :
989 [ # # ]: 0 : for (i = 0; i < RTE_DIM(hns3_reg_lists); i++) {
990 [ # # ]: 0 : if ((RTE_BIT32(i) & modules) == 0)
991 : 0 : continue;
992 : 0 : reg_num = hns3_reg_lists[i].entry_num;
993 [ # # ]: 0 : if (i == HNS3_RING)
994 : 0 : reg_num *= hw->tqps_num;
995 [ # # ]: 0 : else if (i == HNS3_TQP_INTR)
996 : 0 : reg_num *= hw->intr_tqps_num;
997 : :
998 : 0 : length += reg_num;
999 : : }
1000 : :
1001 : : return length;
1002 : : }
1003 : :
1004 : : static void
1005 : 0 : hns3_fill_dfx_regs_name(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
1006 : : const struct hns3_dfx_reg_entry *reg_list, uint32_t reg_num)
1007 : : {
1008 : 0 : uint32_t i, cnt = regs->length;
1009 : : const char *name;
1010 : :
1011 [ # # ]: 0 : if (regs->names == NULL)
1012 : : return;
1013 : :
1014 [ # # ]: 0 : for (i = 0; i < reg_num; i++) {
1015 : 0 : name = reg_list[i].name_v1;
1016 [ # # # # ]: 0 : if (hw->revision == PCI_REVISION_ID_HIP09_A && reg_list[i].name_v2 != NULL)
1017 : : name = reg_list[i].name_v2;
1018 : 0 : snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE, "%s", name);
1019 : : }
1020 : : }
1021 : :
1022 : : static int
1023 : 0 : hns3_get_32_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
1024 : : {
1025 : : #define HNS3_32_BIT_REG_RTN_DATANUM 8
1026 : : #define HNS3_32_BIT_DESC_NODATA_LEN 2
1027 : 0 : uint32_t *reg_val = regs->data;
1028 : : struct hns3_cmd_desc *desc;
1029 : : uint32_t *desc_data;
1030 : : int cmd_num;
1031 : : int i, k, n;
1032 : : int ret;
1033 : :
1034 [ # # ]: 0 : if (regs_num == 0)
1035 : : return 0;
1036 : :
1037 : 0 : cmd_num = DIV_ROUND_UP(regs_num + HNS3_32_BIT_DESC_NODATA_LEN,
1038 : : HNS3_32_BIT_REG_RTN_DATANUM);
1039 : 0 : desc = rte_zmalloc("hns3-32bit-regs",
1040 : : sizeof(struct hns3_cmd_desc) * cmd_num, 0);
1041 [ # # ]: 0 : if (desc == NULL) {
1042 : 0 : hns3_err(hw, "Failed to allocate %zx bytes needed to "
1043 : : "store 32bit regs",
1044 : : sizeof(struct hns3_cmd_desc) * cmd_num);
1045 : 0 : return -ENOMEM;
1046 : : }
1047 : :
1048 : 0 : hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_32_BIT_REG, true);
1049 : 0 : ret = hns3_cmd_send(hw, desc, cmd_num);
1050 [ # # ]: 0 : if (ret) {
1051 : 0 : hns3_err(hw, "Query 32 bit register cmd failed, ret = %d",
1052 : : ret);
1053 : 0 : rte_free(desc);
1054 : 0 : return ret;
1055 : : }
1056 : :
1057 : 0 : hns3_fill_dfx_regs_name(hw, regs, regs_32_bit_list, regs_num);
1058 : 0 : reg_val += regs->length;
1059 : 0 : regs->length += regs_num;
1060 [ # # ]: 0 : for (i = 0; i < cmd_num; i++) {
1061 [ # # ]: 0 : if (i == 0) {
1062 : 0 : desc_data = &desc[i].data[0];
1063 : : n = HNS3_32_BIT_REG_RTN_DATANUM -
1064 : : HNS3_32_BIT_DESC_NODATA_LEN;
1065 : : } else {
1066 : 0 : desc_data = (uint32_t *)(&desc[i]);
1067 : : n = HNS3_32_BIT_REG_RTN_DATANUM;
1068 : : }
1069 [ # # ]: 0 : for (k = 0; k < n; k++) {
1070 : 0 : *reg_val++ = rte_le_to_cpu_32(*desc_data++);
1071 : 0 : regs_num--;
1072 [ # # ]: 0 : if (regs_num == 0)
1073 : : break;
1074 : : }
1075 : : }
1076 : :
1077 : 0 : rte_free(desc);
1078 : 0 : return 0;
1079 : : }
1080 : :
1081 : : static int
1082 : 0 : hns3_get_64_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
1083 : : {
1084 : : #define HNS3_64_BIT_REG_RTN_DATANUM 4
1085 : : #define HNS3_64_BIT_DESC_NODATA_LEN 1
1086 : 0 : uint32_t *reg_val = regs->data;
1087 : : struct hns3_cmd_desc *desc;
1088 : : uint64_t *desc_data;
1089 : : int cmd_num;
1090 : : int i, k, n;
1091 : : int ret;
1092 : :
1093 [ # # ]: 0 : if (regs_num == 0)
1094 : : return 0;
1095 : :
1096 : 0 : cmd_num = DIV_ROUND_UP(regs_num + HNS3_64_BIT_DESC_NODATA_LEN,
1097 : : HNS3_64_BIT_REG_RTN_DATANUM);
1098 : 0 : desc = rte_zmalloc("hns3-64bit-regs",
1099 : : sizeof(struct hns3_cmd_desc) * cmd_num, 0);
1100 [ # # ]: 0 : if (desc == NULL) {
1101 : 0 : hns3_err(hw, "Failed to allocate %zx bytes needed to "
1102 : : "store 64bit regs",
1103 : : sizeof(struct hns3_cmd_desc) * cmd_num);
1104 : 0 : return -ENOMEM;
1105 : : }
1106 : :
1107 : 0 : hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_64_BIT_REG, true);
1108 : 0 : ret = hns3_cmd_send(hw, desc, cmd_num);
1109 [ # # ]: 0 : if (ret) {
1110 : 0 : hns3_err(hw, "Query 64 bit register cmd failed, ret = %d",
1111 : : ret);
1112 : 0 : rte_free(desc);
1113 : 0 : return ret;
1114 : : }
1115 : :
1116 : 0 : hns3_fill_dfx_regs_name(hw, regs, regs_64_bit_list, regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE);
1117 : 0 : reg_val += regs->length;
1118 : 0 : regs->length += regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE;
1119 [ # # ]: 0 : for (i = 0; i < cmd_num; i++) {
1120 [ # # ]: 0 : if (i == 0) {
1121 : 0 : desc_data = (uint64_t *)(&desc[i].data[0]);
1122 : : n = HNS3_64_BIT_REG_RTN_DATANUM -
1123 : : HNS3_64_BIT_DESC_NODATA_LEN;
1124 : : } else {
1125 : 0 : desc_data = (uint64_t *)(&desc[i]);
1126 : : n = HNS3_64_BIT_REG_RTN_DATANUM;
1127 : : }
1128 [ # # ]: 0 : for (k = 0; k < n; k++) {
1129 : 0 : *reg_val++ = rte_le_to_cpu_64(*desc_data++);
1130 : 0 : regs_num--;
1131 [ # # ]: 0 : if (!regs_num)
1132 : : break;
1133 : : }
1134 : : }
1135 : :
1136 : 0 : rte_free(desc);
1137 : 0 : return 0;
1138 : : }
1139 : :
1140 : : static void
1141 : 0 : hns3_direct_access_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
1142 : : uint32_t modules, enum hns3_reg_modules idx)
1143 : : {
1144 : : const struct hns3_dirt_reg_entry *reg_list;
1145 : 0 : uint32_t *data = regs->data;
1146 : : size_t reg_num, i, cnt;
1147 : :
1148 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(idx)) == 0)
1149 : : return;
1150 : :
1151 : 0 : data += regs->length;
1152 : 0 : reg_num = hns3_reg_lists[idx].entry_num;
1153 : 0 : reg_list = hns3_reg_lists[idx].reg_list;
1154 : : cnt = regs->length;
1155 [ # # ]: 0 : for (i = 0; i < reg_num; i++) {
1156 : 0 : *data++ = hns3_read_dev(hw, reg_list[i].addr);
1157 [ # # ]: 0 : if (regs->names != NULL)
1158 : 0 : snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE,
1159 : 0 : "%s", reg_list[i].name);
1160 : : }
1161 : :
1162 : 0 : regs->length += reg_num;
1163 : : }
1164 : :
1165 : : static uint32_t
1166 : 0 : hns3_get_module_tqp_reg_offset(enum hns3_reg_modules idx, uint16_t queue_id)
1167 : : {
1168 [ # # ]: 0 : if (idx == HNS3_RING)
1169 : 0 : return hns3_get_tqp_reg_offset(queue_id);
1170 [ # # ]: 0 : else if (idx == HNS3_TQP_INTR)
1171 : 0 : return hns3_get_tqp_intr_reg_offset(queue_id);
1172 : :
1173 : : return 0;
1174 : : }
1175 : :
1176 : : static void
1177 : 0 : hns3_direct_access_tqp_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
1178 : : uint32_t modules, enum hns3_reg_modules idx)
1179 : : {
1180 : : const struct hns3_dirt_reg_entry *reg_list;
1181 : : uint32_t reg_num, i, j, reg_offset;
1182 : 0 : uint32_t *data = regs->data;
1183 : : uint16_t tqp_num;
1184 : :
1185 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(idx)) == 0)
1186 : : return;
1187 : :
1188 [ # # ]: 0 : tqp_num = (idx == HNS3_RING) ? hw->tqps_num : hw->intr_tqps_num;
1189 : 0 : reg_list = hns3_reg_lists[idx].reg_list;
1190 : 0 : reg_num = hns3_reg_lists[idx].entry_num;
1191 : 0 : data += regs->length;
1192 [ # # ]: 0 : for (i = 0; i < tqp_num; i++) {
1193 : 0 : reg_offset = hns3_get_module_tqp_reg_offset(idx, i);
1194 [ # # ]: 0 : for (j = 0; j < reg_num; j++) {
1195 : 0 : *data++ = hns3_read_dev(hw, reg_list[j].addr + reg_offset);
1196 [ # # ]: 0 : if (regs->names != NULL)
1197 : 0 : snprintf(regs->names[regs->length].name,
1198 : 0 : RTE_ETH_REG_NAME_SIZE, "Q%u_%s", i, reg_list[j].name);
1199 : 0 : regs->length++;
1200 : : }
1201 : : }
1202 : : }
1203 : :
1204 : : static void
1205 : 0 : hns3_direct_access_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1206 : : {
1207 : 0 : hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_VF);
1208 : 0 : hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_PF);
1209 : 0 : hns3_direct_access_regs_help(hw, regs, modules, HNS3_CMDQ);
1210 : 0 : hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_RING);
1211 : 0 : hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_TQP_INTR);
1212 : 0 : }
1213 : :
1214 : : static int
1215 : 0 : hns3_dfx_reg_cmd_send(struct hns3_hw *hw, struct hns3_cmd_desc *desc,
1216 : : int bd_num, uint32_t opcode)
1217 : : {
1218 : : int ret;
1219 : : int i;
1220 : :
1221 [ # # ]: 0 : for (i = 0; i < bd_num - 1; i++) {
1222 : 0 : hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
1223 : 0 : desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
1224 : : }
1225 : : /* The last BD does not need a next flag */
1226 : 0 : hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
1227 : :
1228 : 0 : ret = hns3_cmd_send(hw, desc, bd_num);
1229 [ # # ]: 0 : if (ret)
1230 : 0 : hns3_err(hw, "fail to query dfx registers, opcode = 0x%04X, "
1231 : : "ret = %d.", opcode, ret);
1232 : :
1233 : 0 : return ret;
1234 : : }
1235 : :
1236 : : static int
1237 : : hns3_dfx_reg_fetch_data(struct hns3_cmd_desc *desc, int bd_num, uint32_t *reg)
1238 : : {
1239 : : int desc_index;
1240 : : int reg_num;
1241 : : int index;
1242 : : int i;
1243 : :
1244 : 0 : reg_num = bd_num * HNS3_CMD_DESC_DATA_NUM;
1245 [ # # ]: 0 : for (i = 0; i < reg_num; i++) {
1246 : 0 : desc_index = i / HNS3_CMD_DESC_DATA_NUM;
1247 : 0 : index = i % HNS3_CMD_DESC_DATA_NUM;
1248 : 0 : *reg++ = desc[desc_index].data[index];
1249 : : }
1250 : :
1251 : : return reg_num;
1252 : : }
1253 : :
1254 : : static int
1255 : 0 : hns3_get_dfx_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1256 : 0 : {
1257 : : int opcode_num = RTE_DIM(hns3_dfx_reg_opcode_list);
1258 : : uint32_t max_bd_num, bd_num, opcode, regs_num;
1259 : 0 : uint32_t bd_num_list[opcode_num];
1260 : : struct hns3_cmd_desc *cmd_descs;
1261 : 0 : uint32_t *data = regs->data;
1262 : : int ret;
1263 : : int i;
1264 : :
1265 : 0 : ret = hns3_get_dfx_reg_bd_num(hw, bd_num_list, opcode_num);
1266 [ # # ]: 0 : if (ret)
1267 : : return ret;
1268 : :
1269 : : max_bd_num = 0;
1270 [ # # ]: 0 : for (i = 0; i < opcode_num; i++)
1271 : 0 : max_bd_num = RTE_MAX(bd_num_list[i], max_bd_num);
1272 : :
1273 : 0 : cmd_descs = rte_zmalloc(NULL, sizeof(*cmd_descs) * max_bd_num, 0);
1274 [ # # ]: 0 : if (cmd_descs == NULL)
1275 : : return -ENOMEM;
1276 : :
1277 : 0 : data += regs->length;
1278 [ # # ]: 0 : for (i = 0; i < opcode_num; i++) {
1279 : 0 : opcode = hns3_dfx_reg_opcode_list[i];
1280 : 0 : bd_num = bd_num_list[i];
1281 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(i)) == 0)
1282 : 0 : continue;
1283 [ # # ]: 0 : if (bd_num == 0)
1284 : 0 : continue;
1285 : 0 : ret = hns3_dfx_reg_cmd_send(hw, cmd_descs, bd_num, opcode);
1286 [ # # ]: 0 : if (ret)
1287 : : break;
1288 : :
1289 : 0 : regs_num = hns3_dfx_reg_fetch_data(cmd_descs, bd_num, data);
1290 [ # # ]: 0 : if (regs_num != hns3_reg_lists[i].entry_num) {
1291 : 0 : hns3_err(hw, "Query register number differ from the list for module %s!",
1292 : : hns3_get_name_by_module(i));
1293 : 0 : return -EINVAL;
1294 : : }
1295 : 0 : hns3_fill_dfx_regs_name(hw, regs, hns3_reg_lists[i].reg_list, regs_num);
1296 : 0 : regs->length += regs_num;
1297 : 0 : data += regs_num;
1298 : : }
1299 : 0 : rte_free(cmd_descs);
1300 : :
1301 : 0 : return ret;
1302 : : }
1303 : :
1304 : : static int
1305 : 0 : hns3_get_32_b4_bit_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1306 : : {
1307 : : uint32_t regs_num_32_bit;
1308 : : uint32_t regs_num_64_bit;
1309 : : int ret;
1310 : :
1311 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) == 0 &&
1312 : : (modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) == 0)
1313 : : return 0;
1314 : :
1315 : 0 : ret = hns3_get_regs_num(hw, ®s_num_32_bit, ®s_num_64_bit);
1316 [ # # ]: 0 : if (ret) {
1317 : 0 : hns3_err(hw, "Get register number failed, ret = %d", ret);
1318 : 0 : return ret;
1319 : : }
1320 : :
1321 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) != 0) {
1322 : 0 : ret = hns3_get_32_bit_regs(hw, regs_num_32_bit, regs);
1323 [ # # ]: 0 : if (ret) {
1324 : 0 : hns3_err(hw, "Get 32 bit register failed, ret = %d", ret);
1325 : 0 : return ret;
1326 : : }
1327 : : }
1328 : :
1329 [ # # ]: 0 : if ((modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) != 0) {
1330 : 0 : ret = hns3_get_64_bit_regs(hw, regs_num_64_bit, regs);
1331 [ # # ]: 0 : if (ret) {
1332 : 0 : hns3_err(hw, "Get 64 bit register failed, ret = %d", ret);
1333 : 0 : return ret;
1334 : : }
1335 : : }
1336 : :
1337 : : return 0;
1338 : : }
1339 : :
1340 : : static int
1341 : 0 : hns3_get_regs_from_firmware(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1342 : : {
1343 : : struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
1344 : : int ret;
1345 : :
1346 [ # # ]: 0 : if (hns->is_vf)
1347 : : return 0;
1348 : :
1349 : 0 : ret = hns3_get_32_b4_bit_regs(hw, regs, modules);
1350 [ # # ]: 0 : if (ret != 0)
1351 : : return ret;
1352 : :
1353 : 0 : return hns3_get_dfx_regs(hw, regs, modules);
1354 : : }
1355 : :
1356 : : int
1357 : 0 : hns3_get_regs(struct rte_eth_dev *eth_dev, struct rte_dev_reg_info *regs)
1358 : : {
1359 : 0 : struct hns3_adapter *hns = eth_dev->data->dev_private;
1360 : 0 : struct hns3_hw *hw = &hns->hw;
1361 : : uint32_t modules;
1362 : : uint32_t length;
1363 : :
1364 : 0 : modules = hns3_parse_modules_by_filter(hw, regs->filter);
1365 [ # # ]: 0 : if (modules == 0)
1366 : : return -EINVAL;
1367 : :
1368 : : length = hns3_get_regs_length(hw, modules);
1369 [ # # ]: 0 : if (regs->data == NULL) {
1370 : 0 : regs->length = length;
1371 : 0 : regs->width = sizeof(uint32_t);
1372 : 0 : return 0;
1373 : : }
1374 : :
1375 : : /* Only full register dump is supported */
1376 [ # # # # ]: 0 : if (regs->length && regs->length != length)
1377 : : return -ENOTSUP;
1378 : :
1379 : 0 : regs->version = hw->fw_version;
1380 : : /* to count the number of filled registers */
1381 : 0 : regs->length = 0;
1382 : :
1383 : : /* fetching per-PF registers values from PF PCIe register space */
1384 : 0 : hns3_direct_access_regs(hw, regs, modules);
1385 : :
1386 : : /* fetching PF common registers values from firmware */
1387 : 0 : return hns3_get_regs_from_firmware(hw, regs, modules);
1388 : : }
|