xref: /dpdk/drivers/net/hns3/hns3_regs.c (revision f58fd22240c27ea20cf41dd2aa15810712f518bf)
1936eda25SWei Hu (Xavier) /* SPDX-License-Identifier: BSD-3-Clause
253e6f86cSMin Hu (Connor)  * Copyright(c) 2018-2021 HiSilicon Limited.
3936eda25SWei Hu (Xavier)  */
4936eda25SWei Hu (Xavier) 
5df96fd0dSBruce Richardson #include <ethdev_pci.h>
6936eda25SWei Hu (Xavier) #include <rte_io.h>
7936eda25SWei Hu (Xavier) 
8936eda25SWei Hu (Xavier) #include "hns3_ethdev.h"
9936eda25SWei Hu (Xavier) #include "hns3_logs.h"
10936eda25SWei Hu (Xavier) #include "hns3_rxtx.h"
11936eda25SWei Hu (Xavier) #include "hns3_regs.h"
12936eda25SWei Hu (Xavier) 
137fddd3caSJie Hai #define HNS3_64_BIT_REG_OUTPUT_SIZE (sizeof(uint64_t) / sizeof(uint32_t))
14936eda25SWei Hu (Xavier) 
1599d3bd8bSJie Hai #define HNS3_MAX_MODULES_LEN 512
16ef1fbd35SChengchang Tang 
17dd4b8bbaSJie Hai struct hns3_dirt_reg_entry {
18dd4b8bbaSJie Hai 	const char *name;
19dd4b8bbaSJie Hai 	uint32_t addr;
20dd4b8bbaSJie Hai };
21936eda25SWei Hu (Xavier) 
22dd4b8bbaSJie Hai static const struct hns3_dirt_reg_entry cmdq_reg_list[] = {
23dd4b8bbaSJie Hai 	{"cmdq_tx_depth",		HNS3_CMDQ_TX_DEPTH_REG},
24dd4b8bbaSJie Hai 	{"cmdq_tx_tail",		HNS3_CMDQ_TX_TAIL_REG},
25dd4b8bbaSJie Hai 	{"cmdq_tx_head",		HNS3_CMDQ_TX_HEAD_REG},
26dd4b8bbaSJie Hai 	{"cmdq_rx_depth",		HNS3_CMDQ_RX_DEPTH_REG},
27dd4b8bbaSJie Hai 	{"cmdq_rx_tail",		HNS3_CMDQ_RX_TAIL_REG},
28dd4b8bbaSJie Hai 	{"cmdq_rx_head",		HNS3_CMDQ_RX_HEAD_REG},
29dd4b8bbaSJie Hai 	{"vector0_cmdq_src",		HNS3_VECTOR0_CMDQ_SRC_REG},
30dd4b8bbaSJie Hai 	{"cmdq_intr_sts",		HNS3_CMDQ_INTR_STS_REG},
31dd4b8bbaSJie Hai 	{"cmdq_intr_en",		HNS3_CMDQ_INTR_EN_REG},
32dd4b8bbaSJie Hai 	{"cmdq_intr_gen",		HNS3_CMDQ_INTR_GEN_REG},
33dd4b8bbaSJie Hai };
34936eda25SWei Hu (Xavier) 
35dd4b8bbaSJie Hai static const struct hns3_dirt_reg_entry common_reg_list[] = {
36dd4b8bbaSJie Hai 	{"misc_vector_reg_base",	HNS3_MISC_VECTOR_REG_BASE},
37dd4b8bbaSJie Hai 	{"vector0_oter_en",		HNS3_VECTOR0_OTER_EN_REG},
38dd4b8bbaSJie Hai 	{"misc_reset_sts",		HNS3_MISC_RESET_STS_REG},
39dd4b8bbaSJie Hai 	{"vector0_other_int_sts",	HNS3_VECTOR0_OTHER_INT_STS_REG},
40dd4b8bbaSJie Hai 	{"global_reset",		HNS3_GLOBAL_RESET_REG},
41dd4b8bbaSJie Hai 	{"fun_rst_ing",			HNS3_FUN_RST_ING},
42dd4b8bbaSJie Hai 	{"gro_en",			HNS3_GRO_EN_REG},
43dd4b8bbaSJie Hai };
44936eda25SWei Hu (Xavier) 
45dd4b8bbaSJie Hai static const struct hns3_dirt_reg_entry common_vf_reg_list[] = {
46dd4b8bbaSJie Hai 	{"misc_vector_reg_base",	HNS3_MISC_VECTOR_REG_BASE},
47dd4b8bbaSJie Hai 	{"fun_rst_ing",			HNS3_FUN_RST_ING},
48dd4b8bbaSJie Hai 	{"gro_en",			HNS3_GRO_EN_REG},
49dd4b8bbaSJie Hai };
50936eda25SWei Hu (Xavier) 
51dd4b8bbaSJie Hai static const struct hns3_dirt_reg_entry ring_reg_list[] = {
52dd4b8bbaSJie Hai 	{"ring_rx_bd_num",		HNS3_RING_RX_BD_NUM_REG},
53dd4b8bbaSJie Hai 	{"ring_rx_bd_len",		HNS3_RING_RX_BD_LEN_REG},
54dd4b8bbaSJie Hai 	{"ring_rx_en",			HNS3_RING_RX_EN_REG},
55dd4b8bbaSJie Hai 	{"ring_rx_merge_en",		HNS3_RING_RX_MERGE_EN_REG},
56dd4b8bbaSJie Hai 	{"ring_rx_tail",		HNS3_RING_RX_TAIL_REG},
57dd4b8bbaSJie Hai 	{"ring_rx_head",		HNS3_RING_RX_HEAD_REG},
58dd4b8bbaSJie Hai 	{"ring_rx_fbdnum",		HNS3_RING_RX_FBDNUM_REG},
59dd4b8bbaSJie Hai 	{"ring_rx_offset",		HNS3_RING_RX_OFFSET_REG},
60dd4b8bbaSJie Hai 	{"ring_rx_fbd_offset",		HNS3_RING_RX_FBD_OFFSET_REG},
61dd4b8bbaSJie Hai 	{"ring_rx_stash",		HNS3_RING_RX_STASH_REG},
62dd4b8bbaSJie Hai 	{"ring_rx_bd_err",		HNS3_RING_RX_BD_ERR_REG},
63dd4b8bbaSJie Hai 	{"ring_tx_bd_num",		HNS3_RING_TX_BD_NUM_REG},
64dd4b8bbaSJie Hai 	{"ring_tx_en",			HNS3_RING_TX_EN_REG},
65dd4b8bbaSJie Hai 	{"ring_tx_priority",		HNS3_RING_TX_PRIORITY_REG},
66dd4b8bbaSJie Hai 	{"ring_tx_tc",			HNS3_RING_TX_TC_REG},
67dd4b8bbaSJie Hai 	{"ring_tx_merge_en",		HNS3_RING_TX_MERGE_EN_REG},
68dd4b8bbaSJie Hai 	{"ring_tx_tail",		HNS3_RING_TX_TAIL_REG},
69dd4b8bbaSJie Hai 	{"ring_tx_head",		HNS3_RING_TX_HEAD_REG},
70dd4b8bbaSJie Hai 	{"ring_tx_fbdnum",		HNS3_RING_TX_FBDNUM_REG},
71dd4b8bbaSJie Hai 	{"ring_tx_offset",		HNS3_RING_TX_OFFSET_REG},
72dd4b8bbaSJie Hai 	{"ring_tx_ebd_num",		HNS3_RING_TX_EBD_NUM_REG},
73dd4b8bbaSJie Hai 	{"ring_tx_ebd_offset",		HNS3_RING_TX_EBD_OFFSET_REG},
74dd4b8bbaSJie Hai 	{"ring_tx_bd_err",		HNS3_RING_TX_BD_ERR_REG},
75dd4b8bbaSJie Hai 	{"ring_en",			HNS3_RING_EN_REG},
76dd4b8bbaSJie Hai };
77dd4b8bbaSJie Hai 
78dd4b8bbaSJie Hai static const struct hns3_dirt_reg_entry tqp_intr_reg_list[] = {
79dd4b8bbaSJie Hai 	{"tqp_intr_ctrl",		HNS3_TQP_INTR_CTRL_REG},
80dd4b8bbaSJie Hai 	{"tqp_intr_gl0",		HNS3_TQP_INTR_GL0_REG},
81dd4b8bbaSJie Hai 	{"tqp_intr_gl1",		HNS3_TQP_INTR_GL1_REG},
82dd4b8bbaSJie Hai 	{"tqp_intr_gl2",		HNS3_TQP_INTR_GL2_REG},
83dd4b8bbaSJie Hai 	{"tqp_intr_rl",			HNS3_TQP_INTR_RL_REG},
84dd4b8bbaSJie Hai };
85dd4b8bbaSJie Hai 
86dd4b8bbaSJie Hai struct hns3_dfx_reg_entry {
87dd4b8bbaSJie Hai 	/**
88dd4b8bbaSJie Hai 	 * name_v1 -- default register name for all platforms (HIP08/HIP09/newer).
89dd4b8bbaSJie Hai 	 * name_v2 -- register name different from the default for HIP09.
90dd4b8bbaSJie Hai 	 * If there are more platform with different register name, name_vXX is extended.
91dd4b8bbaSJie Hai 	 * If the platform is newer than HIP09, use default name.
92dd4b8bbaSJie Hai 	 */
93dd4b8bbaSJie Hai 	const char *name_v1;
94dd4b8bbaSJie Hai 	const char *name_v2;
95dd4b8bbaSJie Hai };
96dd4b8bbaSJie Hai 
97dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry regs_32_bit_list[] = {
98dd4b8bbaSJie Hai 	{"ssu_common_err_int"},
99dd4b8bbaSJie Hai 	{"ssu_port_based_err_int"},
100dd4b8bbaSJie Hai 	{"ssu_fifo_overflow_int"},
101dd4b8bbaSJie Hai 	{"ssu_ets_tcg_int"},
102dd4b8bbaSJie Hai 	{"ssu_bp_status_0"},
103dd4b8bbaSJie Hai 	{"ssu_bp_status_1"},
104dd4b8bbaSJie Hai 
105dd4b8bbaSJie Hai 	{"ssu_bp_status_2"},
106dd4b8bbaSJie Hai 	{"ssu_bp_status_3"},
107dd4b8bbaSJie Hai 	{"ssu_bp_status_4"},
108dd4b8bbaSJie Hai 	{"ssu_bp_status_5"},
109dd4b8bbaSJie Hai 	{"ssu_mac_tx_pfc_ind"},
110dd4b8bbaSJie Hai 	{"ssu_mac_rx_pfc_ind"},
111dd4b8bbaSJie Hai 
112dd4b8bbaSJie Hai 	{"ssu_rx_oq_drop_pkt_cnt"},
113dd4b8bbaSJie Hai 	{"ssu_tx_oq_drop_pkt_cnt"},
114dd4b8bbaSJie Hai };
115dd4b8bbaSJie Hai 
116dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry regs_64_bit_list[] = {
117dd4b8bbaSJie Hai 	{"ppp_get_rx_pkt_cnt_l"},
118dd4b8bbaSJie Hai 	{"ppp_get_rx_pkt_cnt_h"},
119dd4b8bbaSJie Hai 	{"ppp_get_tx_pkt_cnt_l"},
120dd4b8bbaSJie Hai 	{"ppp_get_tx_pkt_cnt_h"},
121dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2host_pkt_cnt_l"},
122dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2host_pkt_cnt_h"},
123dd4b8bbaSJie Hai 
124dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2prt_pkt_cnt_l"},
125dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2prt_pkt_cnt_h"},
126dd4b8bbaSJie Hai 	{"ppp_send_uc_host2host_pkt_cnt_l"},
127dd4b8bbaSJie Hai 	{"ppp_send_uc_host2host_pkt_cnt_h"},
128dd4b8bbaSJie Hai 	{"ppp_send_uc_host2prt_pkt_cnt_l"},
129dd4b8bbaSJie Hai 	{"ppp_send_uc_host2prt_pkt_cnt_h"},
130dd4b8bbaSJie Hai 	{"ppp_send_mc_from_prt_cnt_l"},
131dd4b8bbaSJie Hai 	{"ppp_send_mc_from_prt_cnt_h"},
132dd4b8bbaSJie Hai };
133dd4b8bbaSJie Hai 
134dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_bios_common_reg_list[] = {
135dd4b8bbaSJie Hai 	{"bios_rsv0"},
136dd4b8bbaSJie Hai 	{"bp_cpu_state"},
137dd4b8bbaSJie Hai 	{"dfx_msix_info_nic_0"},
138dd4b8bbaSJie Hai 	{"dfx_msix_info_nic_1"},
139dd4b8bbaSJie Hai 	{"dfx_msix_info_nic_2"},
140dd4b8bbaSJie Hai 	{"dfx_msix_info_nic_3"},
141dd4b8bbaSJie Hai 
142dd4b8bbaSJie Hai 	{"dfx_msix_info_roce_0"},
143dd4b8bbaSJie Hai 	{"dfx_msix_info_roce_1"},
144dd4b8bbaSJie Hai 	{"dfx_msix_info_roce_2"},
145dd4b8bbaSJie Hai 	{"dfx_msix_info_roce_3"},
146dd4b8bbaSJie Hai 	{"bios_rsv1"},
147dd4b8bbaSJie Hai 	{"bios_rsv2"},
148dd4b8bbaSJie Hai };
149dd4b8bbaSJie Hai 
150dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_ssu_reg_0_list[] = {
151dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv0"},
152dd4b8bbaSJie Hai 	{"ssu_ets_port_status"},
153dd4b8bbaSJie Hai 	{"ssu_ets_tcg_status"},
154dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv1"},
155dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv2"},
156dd4b8bbaSJie Hai 	{"ssu_bp_status_0"},
157dd4b8bbaSJie Hai 
158dd4b8bbaSJie Hai 	{"ssu_bp_status_1"},
159dd4b8bbaSJie Hai 	{"ssu_bp_status_2"},
160dd4b8bbaSJie Hai 	{"ssu_bp_status_3"},
161dd4b8bbaSJie Hai 	{"ssu_bp_status_4"},
162dd4b8bbaSJie Hai 	{"ssu_bp_status_5"},
163dd4b8bbaSJie Hai 	{"ssu_mac_tx_pfc_ind"},
164dd4b8bbaSJie Hai 
165dd4b8bbaSJie Hai 	{"mac_ssu_rx_pfc_ind"},
166dd4b8bbaSJie Hai 	{"btmp_ageing_st_b0"},
167dd4b8bbaSJie Hai 	{"btmp_ageing_st_b1"},
168dd4b8bbaSJie Hai 	{"btmp_ageing_st_b2"},
169dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv3"},
170dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv4"},
171dd4b8bbaSJie Hai 
172dd4b8bbaSJie Hai 	{"ssu_full_drop_num"},
173dd4b8bbaSJie Hai 	{"ssu_part_drop_num"},
174dd4b8bbaSJie Hai 	{"ppp_key_drop_num"},
175dd4b8bbaSJie Hai 	{"ppp_rlt_drop_num"},
176dd4b8bbaSJie Hai 	{"lo_pri_unicast_rlt_drop_num"},
177dd4b8bbaSJie Hai 	{"hi_pri_multicast_rlt_drop_num"},
178dd4b8bbaSJie Hai 
179dd4b8bbaSJie Hai 	{"lo_pri_multicast_rlt_drop_num"},
180dd4b8bbaSJie Hai 	{"ncsi_packet_curr_buffer_cnt"},
181dd4b8bbaSJie Hai 	{"btmp_ageing_rls_cnt_bank0",		"dfx_ssu0_rsv5"},
182dd4b8bbaSJie Hai 	{"btmp_ageing_rls_cnt_bank1",		"dfx_ssu0_rsv6"},
183dd4b8bbaSJie Hai 	{"btmp_ageing_rls_cnt_bank2",		"dfx_ssu0_rsv7"},
184dd4b8bbaSJie Hai 	{"ssu_mb_rd_rlt_drop_cnt"},
185dd4b8bbaSJie Hai 
186dd4b8bbaSJie Hai 	{"ssu_ppp_mac_key_num_l"},
187dd4b8bbaSJie Hai 	{"ssu_ppp_mac_key_num_h"},
188dd4b8bbaSJie Hai 	{"ssu_ppp_host_key_num_l"},
189dd4b8bbaSJie Hai 	{"ssu_ppp_host_key_num_h"},
190dd4b8bbaSJie Hai 	{"ppp_ssu_mac_rlt_num_l"},
191dd4b8bbaSJie Hai 	{"ppp_ssu_mac_rlt_num_h"},
192dd4b8bbaSJie Hai 
193dd4b8bbaSJie Hai 	{"ppp_ssu_host_rlt_num_l"},
194dd4b8bbaSJie Hai 	{"ppp_ssu_host_rlt_num_h"},
195dd4b8bbaSJie Hai 	{"ncsi_rx_packet_in_cnt_l"},
196dd4b8bbaSJie Hai 	{"ncsi_rx_packet_in_cnt_h"},
197dd4b8bbaSJie Hai 	{"ncsi_tx_packet_out_cnt_l"},
198dd4b8bbaSJie Hai 	{"ncsi_tx_packet_out_cnt_h"},
199dd4b8bbaSJie Hai 
200dd4b8bbaSJie Hai 	{"ssu_key_drop_num"},
201dd4b8bbaSJie Hai 	{"mb_uncopy_num"},
202dd4b8bbaSJie Hai 	{"rx_oq_drop_pkt_cnt"},
203dd4b8bbaSJie Hai 	{"tx_oq_drop_pkt_cnt"},
204dd4b8bbaSJie Hai 	{"bank_unbalance_drop_cnt"},
205dd4b8bbaSJie Hai 	{"bank_unbalance_rx_drop_cnt"},
206dd4b8bbaSJie Hai 
207dd4b8bbaSJie Hai 	{"nic_l2_eer_drop_pkt_cnt"},
208dd4b8bbaSJie Hai 	{"roc_l2_eer_drop_pkt_cnt"},
209dd4b8bbaSJie Hai 	{"nic_l2_eer_drop_pkt_cnt_rx"},
210dd4b8bbaSJie Hai 	{"roc_l2_eer_drop_pkt_cnt_rx"},
211dd4b8bbaSJie Hai 	{"rx_oq_glb_drop_pkt_cnt"},
212dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv8"},
213dd4b8bbaSJie Hai 
214dd4b8bbaSJie Hai 	{"lo_pri_unicast_cur_cnt"},
215dd4b8bbaSJie Hai 	{"hi_pri_multicast_cur_cnt"},
216dd4b8bbaSJie Hai 	{"lo_pri_multicast_cur_cnt"},
217dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv9"},
218dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv10"},
219dd4b8bbaSJie Hai 	{"dfx_ssu0_rsv11"},
220dd4b8bbaSJie Hai };
221dd4b8bbaSJie Hai 
222dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_ssu_reg_1_list[] = {
223dd4b8bbaSJie Hai 	{"dfx_ssu1_prt_id"},
224dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_0"},
225dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_1"},
226dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_2"},
227dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_3"},
228dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_4"},
229dd4b8bbaSJie Hai 
230dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_5"},
231dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_6"},
232dd4b8bbaSJie Hai 	{"packet_tc_curr_buffer_cnt_7"},
233dd4b8bbaSJie Hai 	{"packet_curr_buffer_cnt"},
234dd4b8bbaSJie Hai 	{"dfx_ssu1_rsv0"},
235dd4b8bbaSJie Hai 	{"dfx_ssu1_rsv1"},
236dd4b8bbaSJie Hai 
237dd4b8bbaSJie Hai 	{"rx_packet_in_cnt_l"},
238dd4b8bbaSJie Hai 	{"rx_packet_in_cnt_h"},
239dd4b8bbaSJie Hai 	{"rx_packet_out_cnt_l"},
240dd4b8bbaSJie Hai 	{"rx_packet_out_cnt_h"},
241dd4b8bbaSJie Hai 	{"tx_packet_in_cnt_l"},
242dd4b8bbaSJie Hai 	{"tx_packet_in_cnt_h"},
243dd4b8bbaSJie Hai 
244dd4b8bbaSJie Hai 	{"tx_packet_out_cnt_l"},
245dd4b8bbaSJie Hai 	{"tx_packet_out_cnt_h"},
246dd4b8bbaSJie Hai 	{"roc_rx_packet_in_cnt_l"},
247dd4b8bbaSJie Hai 	{"roc_rx_packet_in_cnt_h"},
248dd4b8bbaSJie Hai 	{"roc_tx_packet_in_cnt_l"},
249dd4b8bbaSJie Hai 	{"roc_tx_packet_in_cnt_h"},
250dd4b8bbaSJie Hai 
251dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_0_l"},
252dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_0_h"},
253dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_1_l"},
254dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_1_h"},
255dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_2_l"},
256dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_2_h"},
257dd4b8bbaSJie Hai 
258dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_3_l"},
259dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_3_h"},
260dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_4_l"},
261dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_4_h"},
262dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_5_l"},
263dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_5_h"},
264dd4b8bbaSJie Hai 
265dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_6_l"},
266dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_6_h"},
267dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_7_l"},
268dd4b8bbaSJie Hai 	{"rx_packet_tc_in_cnt_7_h"},
269dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_0_l"},
270dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_0_h"},
271dd4b8bbaSJie Hai 
272dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_1_l"},
273dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_1_h"},
274dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_2_l"},
275dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_2_h"},
276dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_3_l"},
277dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_3_h"},
278dd4b8bbaSJie Hai 
279dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_4_l"},
280dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_4_h"},
281dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_5_l"},
282dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_5_h"},
283dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_6_l"},
284dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_6_h"},
285dd4b8bbaSJie Hai 
286dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_7_l"},
287dd4b8bbaSJie Hai 	{"rx_packet_tc_out_cnt_7_h"},
288dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_0_l"},
289dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_0_h"},
290dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_1_l"},
291dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_1_h"},
292dd4b8bbaSJie Hai 
293dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_2_l"},
294dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_2_h"},
295dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_3_l"},
296dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_3_h"},
297dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_4_l"},
298dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_4_h"},
299dd4b8bbaSJie Hai 
300dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_5_l"},
301dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_5_h"},
302dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_6_l"},
303dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_6_h"},
304dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_7_l"},
305dd4b8bbaSJie Hai 	{"tx_packet_tc_in_cnt_7_h"},
306dd4b8bbaSJie Hai 
307dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_0_l"},
308dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_0_h"},
309dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_1_l"},
310dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_1_h"},
311dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_2_l"},
312dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_2_h"},
313dd4b8bbaSJie Hai 
314dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_3_l"},
315dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_3_h"},
316dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_4_l"},
317dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_4_h"},
318dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_5_l"},
319dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_5_h"},
320dd4b8bbaSJie Hai 
321dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_6_l"},
322dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_6_h"},
323dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_7_l"},
324dd4b8bbaSJie Hai 	{"tx_packet_tc_out_cnt_7_h"},
325dd4b8bbaSJie Hai 	{"dfx_ssu1_rsv2"},
326dd4b8bbaSJie Hai 	{"dfx_ssu1_rsv3"},
327dd4b8bbaSJie Hai };
328dd4b8bbaSJie Hai 
329dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_igu_egu_reg_list[] = {
330dd4b8bbaSJie Hai 	{"igu_egu_prt_id"},
331dd4b8bbaSJie Hai 	{"igu_rx_err_pkt"},
332dd4b8bbaSJie Hai 	{"igu_rx_no_sof_pkt"},
333dd4b8bbaSJie Hai 	{"egu_tx_1588_short_pkt"},
334dd4b8bbaSJie Hai 	{"egu_tx_1588_pkt"},
335dd4b8bbaSJie Hai 	{"egu_tx_1588_err_pkt"},
336dd4b8bbaSJie Hai 
337dd4b8bbaSJie Hai 	{"igu_rx_out_l2_pkt"},
338dd4b8bbaSJie Hai 	{"igu_rx_out_l3_pkt"},
339dd4b8bbaSJie Hai 	{"igu_rx_out_l4_pkt"},
340dd4b8bbaSJie Hai 	{"igu_rx_in_l2_pkt"},
341dd4b8bbaSJie Hai 	{"igu_rx_in_l3_pkt"},
342dd4b8bbaSJie Hai 	{"igu_rx_in_l4_pkt"},
343dd4b8bbaSJie Hai 
344dd4b8bbaSJie Hai 	{"igu_rx_el3e_pkt"},
345dd4b8bbaSJie Hai 	{"igu_rx_el4e_pkt"},
346dd4b8bbaSJie Hai 	{"igu_rx_l3e_pkt"},
347dd4b8bbaSJie Hai 	{"igu_rx_l4e_pkt"},
348dd4b8bbaSJie Hai 	{"igu_rx_rocee_pkt"},
349dd4b8bbaSJie Hai 	{"igu_rx_out_udp0_pkt"},
350dd4b8bbaSJie Hai 
351dd4b8bbaSJie Hai 	{"igu_rx_in_udp0_pkt"},
352dd4b8bbaSJie Hai 	{"igu_egu_rsv0",		"igu_egu_mul_car_drop_pkt_cnt_l"},
353dd4b8bbaSJie Hai 	{"igu_egu_rsv1",		"igu_egu_mul_car_drop_pkt_cnt_h"},
354dd4b8bbaSJie Hai 	{"igu_egu_rsv2",		"igu_egu_bro_car_drop_pkt_cnt_l"},
355dd4b8bbaSJie Hai 	{"igu_egu_rsv3",		"igu_egu_bro_car_drop_pkt_cnt_h"},
356dd4b8bbaSJie Hai 	{"igu_egu_rsv4",		"igu_egu_rsv0"},
357dd4b8bbaSJie Hai 
358dd4b8bbaSJie Hai 	{"igu_rx_oversize_pkt_l"},
359dd4b8bbaSJie Hai 	{"igu_rx_oversize_pkt_h"},
360dd4b8bbaSJie Hai 	{"igu_rx_undersize_pkt_l"},
361dd4b8bbaSJie Hai 	{"igu_rx_undersize_pkt_h"},
362dd4b8bbaSJie Hai 	{"igu_rx_out_all_pkt_l"},
363dd4b8bbaSJie Hai 	{"igu_rx_out_all_pkt_h"},
364dd4b8bbaSJie Hai 
365dd4b8bbaSJie Hai 	{"igu_tx_out_all_pkt_l"},
366dd4b8bbaSJie Hai 	{"igu_tx_out_all_pkt_h"},
367dd4b8bbaSJie Hai 	{"igu_rx_uni_pkt_l"},
368dd4b8bbaSJie Hai 	{"igu_rx_uni_pkt_h"},
369dd4b8bbaSJie Hai 	{"igu_rx_multi_pkt_l"},
370dd4b8bbaSJie Hai 	{"igu_rx_multi_pkt_h"},
371dd4b8bbaSJie Hai 
372dd4b8bbaSJie Hai 	{"igu_rx_broad_pkt_l"},
373dd4b8bbaSJie Hai 	{"igu_rx_broad_pkt_h"},
374dd4b8bbaSJie Hai 	{"egu_tx_out_all_pkt_l"},
375dd4b8bbaSJie Hai 	{"egu_tx_out_all_pkt_h"},
376dd4b8bbaSJie Hai 	{"egu_tx_uni_pkt_l"},
377dd4b8bbaSJie Hai 	{"egu_tx_uni_pkt_h"},
378dd4b8bbaSJie Hai 
379dd4b8bbaSJie Hai 	{"egu_tx_multi_pkt_l"},
380dd4b8bbaSJie Hai 	{"egu_tx_multi_pkt_h"},
381dd4b8bbaSJie Hai 	{"egu_tx_broad_pkt_l"},
382dd4b8bbaSJie Hai 	{"egu_tx_broad_pkt_h"},
383dd4b8bbaSJie Hai 	{"igu_tx_key_num_l"},
384dd4b8bbaSJie Hai 	{"igu_tx_key_num_h"},
385dd4b8bbaSJie Hai 
386dd4b8bbaSJie Hai 	{"igu_rx_non_tun_pkt_l"},
387dd4b8bbaSJie Hai 	{"igu_rx_non_tun_pkt_h"},
388dd4b8bbaSJie Hai 	{"igu_rx_tun_pkt_l"},
389dd4b8bbaSJie Hai 	{"igu_rx_tun_pkt_h"},
390dd4b8bbaSJie Hai 	{"igu_egu_rsv5"},
391dd4b8bbaSJie Hai 	{"igu_egu_rsv6"},
392dd4b8bbaSJie Hai };
393dd4b8bbaSJie Hai 
394dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_rpu_reg_0_list[] = {
395dd4b8bbaSJie Hai 	{"rpu_tc_queue_num",		"rpu_currport_tnl_index"},
396dd4b8bbaSJie Hai 	{"rpu_fsm_dfx_st0"},
397dd4b8bbaSJie Hai 	{"rpu_fsm_dfx_st1"},
398dd4b8bbaSJie Hai 	{"rpu_rpu_rx_pkt_drop_cnt"},
399dd4b8bbaSJie Hai 	{"rpu_buf_wait_timeout"},
400dd4b8bbaSJie Hai 	{"rpu_buf_wait_timeout_qid"},
401dd4b8bbaSJie Hai };
402dd4b8bbaSJie Hai 
403dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_rpu_reg_1_list[] = {
404dd4b8bbaSJie Hai 	{"rpu_rsv0"},
405dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st0"},
406dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st1"},
407dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st2"},
408dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st3"},
409dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st4"},
410dd4b8bbaSJie Hai 
411dd4b8bbaSJie Hai 	{"rpu_fifo_dfx_st5"},
412dd4b8bbaSJie Hai 	{"rpu_rsv1"},
413dd4b8bbaSJie Hai 	{"rpu_rsv2"},
414dd4b8bbaSJie Hai 	{"rpu_rsv3"},
415dd4b8bbaSJie Hai 	{"rpu_rsv4"},
416dd4b8bbaSJie Hai 	{"rpu_rsv5"},
417dd4b8bbaSJie Hai };
418dd4b8bbaSJie Hai 
419dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_ncsi_reg_list[] = {
420dd4b8bbaSJie Hai 	{"ncsi_rsv0"},
421dd4b8bbaSJie Hai 	{"ncsi_egu_tx_fifo_sts"},
422dd4b8bbaSJie Hai 	{"ncsi_pause_status"},
423dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_dmac_err_cnt"},
424dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_smac_err_cnt"},
425dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_cks_err_cnt"},
426dd4b8bbaSJie Hai 
427dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_pkt_err_cnt"},
428dd4b8bbaSJie Hai 	{"ncsi_rx_pt_dmac_err_cnt"},
429dd4b8bbaSJie Hai 	{"ncsi_rx_pt_smac_err_cnt"},
430dd4b8bbaSJie Hai 	{"ncsi_rx_pt_pkt_cnt"},
431dd4b8bbaSJie Hai 	{"ncsi_rx_fcs_err_cnt"},
432dd4b8bbaSJie Hai 	{"ncsi_tx_ctrl_dmac_err_cnt"},
433dd4b8bbaSJie Hai 
434dd4b8bbaSJie Hai 	{"ncsi_tx_ctrl_smac_err_cnt"},
435dd4b8bbaSJie Hai 	{"ncsi_tx_ctrl_pkt_cnt"},
436dd4b8bbaSJie Hai 	{"ncsi_tx_pt_dmac_err_cnt"},
437dd4b8bbaSJie Hai 	{"ncsi_tx_pt_smac_err_cnt"},
438dd4b8bbaSJie Hai 	{"ncsi_tx_pt_pkt_cnt"},
439dd4b8bbaSJie Hai 	{"ncsi_tx_pt_pkt_trun_cnt"},
440dd4b8bbaSJie Hai 
441dd4b8bbaSJie Hai 	{"ncsi_tx_pt_pkt_err_cnt"},
442dd4b8bbaSJie Hai 	{"ncsi_tx_ctrl_pkt_err_cnt"},
443dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_pkt_trun_cnt"},
444dd4b8bbaSJie Hai 	{"ncsi_rx_ctrl_pkt_cflit_cnt"},
445dd4b8bbaSJie Hai 	{"ncsi_rsv1"},
446dd4b8bbaSJie Hai 	{"ncsi_rsv2"},
447dd4b8bbaSJie Hai 
448dd4b8bbaSJie Hai 	{"ncsi_mac_rx_octets_ok"},
449dd4b8bbaSJie Hai 	{"ncsi_mac_rx_octets_bad"},
450dd4b8bbaSJie Hai 	{"ncsi_mac_rx_uc_pkts"},
451dd4b8bbaSJie Hai 	{"ncsi_mac_rx_mc_pkts"},
452dd4b8bbaSJie Hai 	{"ncsi_mac_rx_bc_pkts"},
453dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_64octets"},
454dd4b8bbaSJie Hai 
455dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_64to127_octets"},
456dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_128to255_octets"},
457dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_256to511_octets"},
458dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_512to1023_octets"},
459dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_1024to1518_octets"},
460dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pkts_1519tomax_octets"},
461dd4b8bbaSJie Hai 
462dd4b8bbaSJie Hai 	{"ncsi_mac_rx_fcs_errors"},
463dd4b8bbaSJie Hai 	{"ncsi_mac_rx_long_errors"},
464dd4b8bbaSJie Hai 	{"ncsi_mac_rx_jabber_errors"},
465dd4b8bbaSJie Hai 	{"ncsi_mac_rx_runt_err_cnt"},
466dd4b8bbaSJie Hai 	{"ncsi_mac_rx_short_err_cnt"},
467dd4b8bbaSJie Hai 	{"ncsi_mac_rx_filt_pkt_cnt"},
468dd4b8bbaSJie Hai 
469dd4b8bbaSJie Hai 	{"ncsi_mac_rx_octets_total_filt"},
470dd4b8bbaSJie Hai 	{"ncsi_mac_tx_octets_ok"},
471dd4b8bbaSJie Hai 	{"ncsi_mac_tx_octets_bad"},
472dd4b8bbaSJie Hai 	{"ncsi_mac_tx_uc_pkts"},
473dd4b8bbaSJie Hai 	{"ncsi_mac_tx_mc_pkts"},
474dd4b8bbaSJie Hai 	{"ncsi_mac_tx_bc_pkts"},
475dd4b8bbaSJie Hai 
476dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_64octets"},
477dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_64to127_octets"},
478dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_128to255_octets"},
479dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_256to511_octets"},
480dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_512to1023_octets"},
481dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_1024to1518_octets"},
482dd4b8bbaSJie Hai 
483dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pkts_1519tomax_octets"},
484dd4b8bbaSJie Hai 	{"ncsi_mac_tx_underrun"},
485dd4b8bbaSJie Hai 	{"ncsi_mac_tx_crc_error"},
486dd4b8bbaSJie Hai 	{"ncsi_mac_tx_pause_frames"},
487dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pad_pkts"},
488dd4b8bbaSJie Hai 	{"ncsi_mac_rx_pause_frames"},
489dd4b8bbaSJie Hai };
490dd4b8bbaSJie Hai 
491dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_rtc_reg_list[] = {
492dd4b8bbaSJie Hai 	{"rtc_rsv0"},
493dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_0"},
494dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_1"},
495dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_2"},
496dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_3"},
497dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_4"},
498dd4b8bbaSJie Hai 
499dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_5"},
500dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_6"},
501dd4b8bbaSJie Hai 	{"lge_igu_afifo_dfx_7"},
502dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_0"},
503dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_1"},
504dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_2"},
505dd4b8bbaSJie Hai 
506dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_3"},
507dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_4"},
508dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_5"},
509dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_6"},
510dd4b8bbaSJie Hai 	{"lge_egu_afifo_dfx_7"},
511dd4b8bbaSJie Hai 	{"cge_igu_afifo_dfx_0"},
512dd4b8bbaSJie Hai 
513dd4b8bbaSJie Hai 	{"cge_igu_afifo_dfx_1"},
514dd4b8bbaSJie Hai 	{"cge_egu_afifo_dfx_0"},
515dd4b8bbaSJie Hai 	{"cge_egu_afifo_dfx_i"},
516dd4b8bbaSJie Hai 	{"rtc_rsv1"},
517dd4b8bbaSJie Hai 	{"rtc_rsv2"},
518dd4b8bbaSJie Hai 	{"rtc_rsv3"},
519dd4b8bbaSJie Hai };
520dd4b8bbaSJie Hai 
521dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_ppp_reg_list[] = {
522dd4b8bbaSJie Hai 	{"ppp_rsv0"},
523dd4b8bbaSJie Hai 	{"ppp_drop_from_prt_pkt_cnt"},
524dd4b8bbaSJie Hai 	{"ppp_drop_from_host_pkt_cnt"},
525dd4b8bbaSJie Hai 	{"ppp_drop_tx_vlan_proc_cnt"},
526dd4b8bbaSJie Hai 	{"ppp_drop_mng_cnt"},
527dd4b8bbaSJie Hai 	{"ppp_drop_fd_cnt"},
528dd4b8bbaSJie Hai 
529dd4b8bbaSJie Hai 	{"ppp_drop_no_dst_cnt"},
530dd4b8bbaSJie Hai 	{"ppp_drop_mc_mbid_full_cnt"},
531dd4b8bbaSJie Hai 	{"ppp_drop_sc_filtered"},
532dd4b8bbaSJie Hai 	{"ppp_ppp_mc_drop_pkt_cnt"},
533dd4b8bbaSJie Hai 	{"ppp_drop_pt_cnt"},
534dd4b8bbaSJie Hai 	{"ppp_drop_mac_anti_spoof_cnt"},
535dd4b8bbaSJie Hai 
536dd4b8bbaSJie Hai 	{"ppp_drop_ig_vfv_cnt"},
537dd4b8bbaSJie Hai 	{"ppp_drop_ig_prtv_cnt"},
538dd4b8bbaSJie Hai 	{"ppp_drop_cnm_pfc_pause_cnt"},
539dd4b8bbaSJie Hai 	{"ppp_drop_torus_tc_cnt"},
540dd4b8bbaSJie Hai 	{"ppp_drop_torus_lpbk_cnt"},
541dd4b8bbaSJie Hai 	{"ppp_ppp_hfs_sts"},
542dd4b8bbaSJie Hai 
543dd4b8bbaSJie Hai 	{"ppp_mc_rslt_sts"},
544dd4b8bbaSJie Hai 	{"ppp_p3u_sts"},
545dd4b8bbaSJie Hai 	{"ppp_rslt_descr_sts",		"ppp_rsv1"},
546dd4b8bbaSJie Hai 	{"ppp_umv_sts_0"},
547dd4b8bbaSJie Hai 	{"ppp_umv_sts_1"},
548dd4b8bbaSJie Hai 	{"ppp_vfv_sts"},
549dd4b8bbaSJie Hai 
550dd4b8bbaSJie Hai 	{"ppp_gro_key_cnt"},
551dd4b8bbaSJie Hai 	{"ppp_gro_info_cnt"},
552dd4b8bbaSJie Hai 	{"ppp_gro_drop_cnt"},
553dd4b8bbaSJie Hai 	{"ppp_gro_out_cnt"},
554dd4b8bbaSJie Hai 	{"ppp_gro_key_match_data_cnt"},
555dd4b8bbaSJie Hai 	{"ppp_gro_key_match_tcam_cnt"},
556dd4b8bbaSJie Hai 
557dd4b8bbaSJie Hai 	{"ppp_gro_info_match_cnt"},
558dd4b8bbaSJie Hai 	{"ppp_gro_free_entry_cnt"},
559dd4b8bbaSJie Hai 	{"ppp_gro_inner_dfx_signal"},
560dd4b8bbaSJie Hai 	{"ppp_rsv2"},
561dd4b8bbaSJie Hai 	{"ppp_rsv3"},
562dd4b8bbaSJie Hai 	{"ppp_rsv4"},
563dd4b8bbaSJie Hai 
564dd4b8bbaSJie Hai 	{"ppp_get_rx_pkt_cnt_l"},
565dd4b8bbaSJie Hai 	{"ppp_get_rx_pkt_cnt_h"},
566dd4b8bbaSJie Hai 	{"ppp_get_tx_pkt_cnt_l"},
567dd4b8bbaSJie Hai 	{"ppp_get_tx_pkt_cnt_h"},
568dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2host_pkt_cnt_l"},
569dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2host_pkt_cnt_h"},
570dd4b8bbaSJie Hai 
571dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2prt_pkt_cnt_l"},
572dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2prt_pkt_cnt_h"},
573dd4b8bbaSJie Hai 	{"ppp_send_uc_host2host_pkt_cnt_l"},
574dd4b8bbaSJie Hai 	{"ppp_send_uc_host2host_pkt_cnt_h"},
575dd4b8bbaSJie Hai 	{"ppp_send_uc_host2prt_pkt_cnt_l"},
576dd4b8bbaSJie Hai 	{"ppp_send_uc_host2prt_pkt_cnt_h"},
577dd4b8bbaSJie Hai 
578dd4b8bbaSJie Hai 	{"ppp_send_mc_from_prt_cnt_l"},
579dd4b8bbaSJie Hai 	{"ppp_send_mc_from_prt_cnt_h"},
580dd4b8bbaSJie Hai 	{"ppp_send_mc_from_host_cnt_l"},
581dd4b8bbaSJie Hai 	{"ppp_send_mc_from_host_cnt_h"},
582dd4b8bbaSJie Hai 	{"ppp_ssu_mc_rd_cnt_l"},
583dd4b8bbaSJie Hai 	{"ppp_ssu_mc_rd_cnt_h"},
584dd4b8bbaSJie Hai 
585dd4b8bbaSJie Hai 	{"ppp_ssu_mc_drop_cnt_l"},
586dd4b8bbaSJie Hai 	{"ppp_ssu_mc_drop_cnt_h"},
587dd4b8bbaSJie Hai 	{"ppp_ssu_mc_rd_pkt_cnt_l"},
588dd4b8bbaSJie Hai 	{"ppp_ssu_mc_rd_pkt_cnt_h"},
589dd4b8bbaSJie Hai 	{"ppp_mc_2host_pkt_cnt_l"},
590dd4b8bbaSJie Hai 	{"ppp_mc_2host_pkt_cnt_h"},
591dd4b8bbaSJie Hai 
592dd4b8bbaSJie Hai 	{"ppp_mc_2prt_pkt_cnt_l"},
593dd4b8bbaSJie Hai 	{"ppp_mc_2prt_pkt_cnt_h"},
594dd4b8bbaSJie Hai 	{"ppp_ntsnos_pkt_cnt_l"},
595dd4b8bbaSJie Hai 	{"ppp_ntsnos_pkt_cnt_h"},
596dd4b8bbaSJie Hai 	{"ppp_ntup_pkt_cnt_l"},
597dd4b8bbaSJie Hai 	{"ppp_ntup_pkt_cnt_h"},
598dd4b8bbaSJie Hai 
599dd4b8bbaSJie Hai 	{"ppp_ntlcl_pkt_cnt_l"},
600dd4b8bbaSJie Hai 	{"ppp_ntlcl_pkt_cnt_h"},
601dd4b8bbaSJie Hai 	{"ppp_nttgt_pkt_cnt_l"},
602dd4b8bbaSJie Hai 	{"ppp_nttgt_pkt_cnt_h"},
603dd4b8bbaSJie Hai 	{"ppp_rtns_pkt_cnt_l"},
604dd4b8bbaSJie Hai 	{"ppp_rtns_pkt_cnt_h"},
605dd4b8bbaSJie Hai 
606dd4b8bbaSJie Hai 	{"ppp_rtlpbk_pkt_cnt_l"},
607dd4b8bbaSJie Hai 	{"ppp_rtlpbk_pkt_cnt_h"},
608dd4b8bbaSJie Hai 	{"ppp_nr_pkt_cnt_l"},
609dd4b8bbaSJie Hai 	{"ppp_nr_pkt_cnt_h"},
610dd4b8bbaSJie Hai 	{"ppp_rr_pkt_cnt_l"},
611dd4b8bbaSJie Hai 	{"ppp_rr_pkt_cnt_h"},
612dd4b8bbaSJie Hai 
613dd4b8bbaSJie Hai 	{"ppp_mng_tbl_hit_cnt_l"},
614dd4b8bbaSJie Hai 	{"ppp_mng_tbl_hit_cnt_h"},
615dd4b8bbaSJie Hai 	{"ppp_fd_tbl_hit_cnt_l"},
616dd4b8bbaSJie Hai 	{"ppp_fd_tbl_hit_cnt_h"},
617dd4b8bbaSJie Hai 	{"ppp_fd_lkup_cnt_l"},
618dd4b8bbaSJie Hai 	{"ppp_fd_lkup_cnt_h"},
619dd4b8bbaSJie Hai 
620dd4b8bbaSJie Hai 	{"ppp_bc_hit_cnt"},
621dd4b8bbaSJie Hai 	{"ppp_bc_hit_cnt_h"},
622dd4b8bbaSJie Hai 	{"ppp_um_tbl_uc_hit_cnt"},
623dd4b8bbaSJie Hai 	{"ppp_um_tbl_uc_hit_cnt_h"},
624dd4b8bbaSJie Hai 	{"ppp_um_tbl_mc_hit_cnt"},
625dd4b8bbaSJie Hai 	{"ppp_um_tbl_mc_hit_cnt_h"},
626dd4b8bbaSJie Hai 
627dd4b8bbaSJie Hai 	{"ppp_um_tbl_vmdq1_hit_cnt_l",	"ppp_um_tbl_snq_hit_cnt_l"},
628dd4b8bbaSJie Hai 	{"ppp_um_tbl_vmdq1_hit_cnt_h",	"ppp_um_tbl_snq_hit_cnt_h"},
629dd4b8bbaSJie Hai 	{"ppp_mta_tbl_hit_cnt_l",	"ppp_rsv5"},
630dd4b8bbaSJie Hai 	{"ppp_mta_tbl_hit_cnt_h",	"ppp_rsv6"},
631dd4b8bbaSJie Hai 	{"ppp_fwd_bonding_hit_cnt_l"},
632dd4b8bbaSJie Hai 	{"ppp_fwd_bonding_hit_cnt_h"},
633dd4b8bbaSJie Hai 
634dd4b8bbaSJie Hai 	{"ppp_promisc_tbl_hit_cnt_l"},
635dd4b8bbaSJie Hai 	{"ppp_promisc_tbl_hit_cnt_h"},
636dd4b8bbaSJie Hai 	{"ppp_get_tunl_pkt_cnt_l"},
637dd4b8bbaSJie Hai 	{"ppp_get_tunl_pkt_cnt_h"},
638dd4b8bbaSJie Hai 	{"ppp_get_bmc_pkt_cnt_l"},
639dd4b8bbaSJie Hai 	{"ppp_get_bmc_pkt_cnt_h"},
640dd4b8bbaSJie Hai 
641dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2bmc_pkt_cnt_l"},
642dd4b8bbaSJie Hai 	{"ppp_send_uc_prt2bmc_pkt_cnt_h"},
643dd4b8bbaSJie Hai 	{"ppp_send_uc_host2bmc_pkt_cnt_l"},
644dd4b8bbaSJie Hai 	{"ppp_send_uc_host2bmc_pkt_cnt_h"},
645dd4b8bbaSJie Hai 	{"ppp_send_uc_bmc2host_pkt_cnt_l"},
646dd4b8bbaSJie Hai 	{"ppp_send_uc_bmc2host_pkt_cnt_h"},
647dd4b8bbaSJie Hai 
648dd4b8bbaSJie Hai 	{"ppp_send_uc_bmc2prt_pkt_cnt_l"},
649dd4b8bbaSJie Hai 	{"ppp_send_uc_bmc2prt_pkt_cnt_h"},
650dd4b8bbaSJie Hai 	{"ppp_mc_2bmc_pkt_cnt_l"},
651dd4b8bbaSJie Hai 	{"ppp_mc_2bmc_pkt_cnt_h"},
652dd4b8bbaSJie Hai 	{"ppp_vlan_mirr_cnt_l",		"ppp_rsv7"},
653dd4b8bbaSJie Hai 	{"ppp_vlan_mirr_cnt_h",		"ppp_rsv8"},
654dd4b8bbaSJie Hai 
655dd4b8bbaSJie Hai 	{"ppp_ig_mirr_cnt_l",		"ppp_rsv9"},
656dd4b8bbaSJie Hai 	{"ppp_ig_mirr_cnt_h",		"ppp_rsv10"},
657dd4b8bbaSJie Hai 	{"ppp_eg_mirr_cnt_l",		"ppp_rsv11"},
658dd4b8bbaSJie Hai 	{"ppp_eg_mirr_cnt_h",		"ppp_rsv12"},
659dd4b8bbaSJie Hai 	{"ppp_rx_default_host_hit_cnt_l"},
660dd4b8bbaSJie Hai 	{"ppp_rx_default_host_hit_cnt_h"},
661dd4b8bbaSJie Hai 
662dd4b8bbaSJie Hai 	{"ppp_lan_pair_cnt_l"},
663dd4b8bbaSJie Hai 	{"ppp_lan_pair_cnt_h"},
664dd4b8bbaSJie Hai 	{"ppp_um_tbl_mc_hit_pkt_cnt_l"},
665dd4b8bbaSJie Hai 	{"ppp_um_tbl_mc_hit_pkt_cnt_h"},
666dd4b8bbaSJie Hai 	{"ppp_mta_tbl_hit_pkt_cnt_l"},
667dd4b8bbaSJie Hai 	{"ppp_mta_tbl_hit_pkt_cnt_h"},
668dd4b8bbaSJie Hai 
669dd4b8bbaSJie Hai 	{"ppp_promisc_tbl_hit_pkt_cnt_l"},
670dd4b8bbaSJie Hai 	{"ppp_promisc_tbl_hit_pkt_cnt_h"},
671dd4b8bbaSJie Hai 	{"ppp_rsv13"},
672dd4b8bbaSJie Hai 	{"ppp_rsv14"},
673dd4b8bbaSJie Hai 	{"ppp_rsv15"},
674dd4b8bbaSJie Hai 	{"ppp_rsv16"},
675dd4b8bbaSJie Hai };
676dd4b8bbaSJie Hai 
677dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_rcb_reg_list[] = {
678dd4b8bbaSJie Hai 	{"rcb_rsv0"},
679dd4b8bbaSJie Hai 	{"rcb_fsm_dfx_st0"},
680dd4b8bbaSJie Hai 	{"rcb_fsm_dfx_st1"},
681dd4b8bbaSJie Hai 	{"rcb_fsm_dfx_st2"},
682dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st0"},
683dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st1"},
684dd4b8bbaSJie Hai 
685dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st2"},
686dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st3"},
687dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st4"},
688dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st5"},
689dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st6"},
690dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st7"},
691dd4b8bbaSJie Hai 
692dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st8"},
693dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st9"},
694dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st10"},
695dd4b8bbaSJie Hai 	{"rcb_fifo_dfx_st11"},
696dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_0"},
697dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_1"},
698dd4b8bbaSJie Hai 
699dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_2"},
700dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_3"},
701dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_4"},
702dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_5"},
703dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_6"},
704dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_7"},
705dd4b8bbaSJie Hai 
706dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_8"},
707dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_9"},
708dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_10"},
709dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_11"},
710dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_12"},
711dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_13"},
712dd4b8bbaSJie Hai 
713dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_14"},
714dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_15"},
715dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_16"},
716dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_17"},
717dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_18"},
718dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_19"},
719dd4b8bbaSJie Hai 
720dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_20"},
721dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_21"},
722dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_22"},
723dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_23"},
724dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_24"},
725dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_25"},
726dd4b8bbaSJie Hai 
727dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_26"},
728dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_27"},
729dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_28"},
730dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_29"},
731dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_30"},
732dd4b8bbaSJie Hai 	{"rcb_q_credit_vld_31"},
733dd4b8bbaSJie Hai 
734dd4b8bbaSJie Hai 	{"rcb_gro_bd_serr_cnt"},
735dd4b8bbaSJie Hai 	{"rcb_gro_context_serr_cnt"},
736dd4b8bbaSJie Hai 	{"rcb_rx_stash_cfg_serr_cnt"},
737dd4b8bbaSJie Hai 	{"rcb_axi_rd_fbd_serr_cnt",	"rcb_rcb_tx_mem_serr_cnt"},
738dd4b8bbaSJie Hai 	{"rcb_gro_bd_merr_cnt"},
739dd4b8bbaSJie Hai 	{"rcb_gro_context_merr_cnt"},
740dd4b8bbaSJie Hai 
741dd4b8bbaSJie Hai 	{"rcb_rx_stash_cfg_merr_cnt"},
742dd4b8bbaSJie Hai 	{"rcb_axi_rd_fbd_merr_cnt"},
743dd4b8bbaSJie Hai 	{"rcb_rsv1"},
744dd4b8bbaSJie Hai 	{"rcb_rsv2"},
745dd4b8bbaSJie Hai 	{"rcb_rsv3"},
746dd4b8bbaSJie Hai 	{"rcb_rsv4"},
747dd4b8bbaSJie Hai };
748dd4b8bbaSJie Hai 
749dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_tqp_reg_list[] = {
750dd4b8bbaSJie Hai 	{"dfx_tqp_q_num"},
751dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_tail"},
752dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_head"},
753dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_fbdnum"},
754dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_offset"},
755dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_fbdoffset"},
756dd4b8bbaSJie Hai 
757dd4b8bbaSJie Hai 	{"rcb_cfg_rx_ring_pktnum_record"},
758dd4b8bbaSJie Hai 	{"rcb_cfg_tx_ring_tail"},
759dd4b8bbaSJie Hai 	{"rcb_cfg_tx_ring_head"},
760dd4b8bbaSJie Hai 	{"rcb_cfg_tx_ring_fbdnum"},
761dd4b8bbaSJie Hai 	{"rcb_cfg_tx_ring_offset"},
762dd4b8bbaSJie Hai 	{"rcb_cfg_tx_ring_ebdnum"},
763dd4b8bbaSJie Hai };
764dd4b8bbaSJie Hai 
765dd4b8bbaSJie Hai static struct hns3_dfx_reg_entry dfx_ssu_reg_2_list[] = {
766dd4b8bbaSJie Hai 	{"dfx_ssu2_oq_index"},
767dd4b8bbaSJie Hai 	{"dfx_ssu2_queue_cnt"},
768dd4b8bbaSJie Hai 	{"dfx_ssu2_rsv0"},
769dd4b8bbaSJie Hai 	{"dfx_ssu2_rsv1"},
770dd4b8bbaSJie Hai 	{"dfx_ssu2_rsv2"},
771dd4b8bbaSJie Hai 	{"dfx_ssu2_rsv3"},
772dd4b8bbaSJie Hai };
773dd4b8bbaSJie Hai 
774dd4b8bbaSJie Hai enum hns3_reg_modules {
775dd4b8bbaSJie Hai 	HNS3_BIOS_COMMON = 0,
776dd4b8bbaSJie Hai 	HNS3_SSU_0,
777dd4b8bbaSJie Hai 	HNS3_SSU_1,
778dd4b8bbaSJie Hai 	HNS3_IGU_EGU,
779dd4b8bbaSJie Hai 	HNS3_RPU_0,
780dd4b8bbaSJie Hai 	HNS3_RPU_1,
781dd4b8bbaSJie Hai 	HNS3_NCSI,
782dd4b8bbaSJie Hai 	HNS3_RTC,
783dd4b8bbaSJie Hai 	HNS3_PPP,
784dd4b8bbaSJie Hai 	HNS3_RCB,
785dd4b8bbaSJie Hai 	HNS3_TQP,
786dd4b8bbaSJie Hai 	HNS3_SSU_2,
787dd4b8bbaSJie Hai 
788dd4b8bbaSJie Hai 	HNS3_CMDQ = 12,
789dd4b8bbaSJie Hai 	HNS3_COMMON_PF,
790dd4b8bbaSJie Hai 	HNS3_COMMON_VF,
791dd4b8bbaSJie Hai 	HNS3_RING,
792dd4b8bbaSJie Hai 	HNS3_TQP_INTR,
793dd4b8bbaSJie Hai 
794dd4b8bbaSJie Hai 	HNS3_32_BIT_DFX,
795dd4b8bbaSJie Hai 	HNS3_64_BIT_DFX,
796dd4b8bbaSJie Hai };
797dd4b8bbaSJie Hai 
79899d3bd8bSJie Hai #define HNS3_MODULE_MASK(x) RTE_BIT32(x)
79999d3bd8bSJie Hai #define HNS3_VF_MODULES (HNS3_MODULE_MASK(HNS3_CMDQ) | HNS3_MODULE_MASK(HNS3_COMMON_VF) | \
80099d3bd8bSJie Hai 			 HNS3_MODULE_MASK(HNS3_RING) | HNS3_MODULE_MASK(HNS3_TQP_INTR))
80199d3bd8bSJie Hai #define HNS3_VF_ONLY_MODULES HNS3_MODULE_MASK(HNS3_COMMON_VF)
80299d3bd8bSJie Hai 
803dd4b8bbaSJie Hai struct hns3_reg_list {
804dd4b8bbaSJie Hai 	const void *reg_list;
805dd4b8bbaSJie Hai 	uint32_t entry_num;
806dd4b8bbaSJie Hai };
807dd4b8bbaSJie Hai 
80899d3bd8bSJie Hai struct {
80999d3bd8bSJie Hai 	const char *name;
81099d3bd8bSJie Hai 	uint32_t module;
81199d3bd8bSJie Hai } hns3_module_name_map[] = {
81299d3bd8bSJie Hai 	{ "bios",	HNS3_MODULE_MASK(HNS3_BIOS_COMMON) },
81399d3bd8bSJie Hai 	{ "ssu",	HNS3_MODULE_MASK(HNS3_SSU_0) | HNS3_MODULE_MASK(HNS3_SSU_1) |
81499d3bd8bSJie Hai 			HNS3_MODULE_MASK(HNS3_SSU_2) },
81599d3bd8bSJie Hai 	{ "igu_egu",	HNS3_MODULE_MASK(HNS3_IGU_EGU) },
81699d3bd8bSJie Hai 	{ "rpu",	HNS3_MODULE_MASK(HNS3_RPU_0) | HNS3_MODULE_MASK(HNS3_RPU_1) },
81799d3bd8bSJie Hai 	{ "ncsi",	HNS3_MODULE_MASK(HNS3_NCSI) },
81899d3bd8bSJie Hai 	{ "rtc",	HNS3_MODULE_MASK(HNS3_RTC) },
81999d3bd8bSJie Hai 	{ "ppp",	HNS3_MODULE_MASK(HNS3_PPP) },
82099d3bd8bSJie Hai 	{ "rcb",	HNS3_MODULE_MASK(HNS3_RCB) },
82199d3bd8bSJie Hai 	{ "tqp",	HNS3_MODULE_MASK(HNS3_TQP) },
82299d3bd8bSJie Hai 	{ "cmdq",	HNS3_MODULE_MASK(HNS3_CMDQ) },
82399d3bd8bSJie Hai 	{ "common_pf",	HNS3_MODULE_MASK(HNS3_COMMON_PF) },
82499d3bd8bSJie Hai 	{ "common_vf",	HNS3_MODULE_MASK(HNS3_COMMON_VF) },
82599d3bd8bSJie Hai 	{ "ring",	HNS3_MODULE_MASK(HNS3_RING) },
82699d3bd8bSJie Hai 	{ "tqp_intr",	HNS3_MODULE_MASK(HNS3_TQP_INTR) },
82799d3bd8bSJie Hai 	{ "32_bit_dfx",	HNS3_MODULE_MASK(HNS3_32_BIT_DFX) },
82899d3bd8bSJie Hai 	{ "64_bit_dfx",	HNS3_MODULE_MASK(HNS3_64_BIT_DFX) },
82999d3bd8bSJie Hai };
83099d3bd8bSJie Hai 
831dd4b8bbaSJie Hai static struct hns3_reg_list hns3_reg_lists[] = {
832dd4b8bbaSJie Hai 	[HNS3_BIOS_COMMON]	= { dfx_bios_common_reg_list,	RTE_DIM(dfx_bios_common_reg_list) },
833dd4b8bbaSJie Hai 	[HNS3_SSU_0]		= { dfx_ssu_reg_0_list,		RTE_DIM(dfx_ssu_reg_0_list) },
834dd4b8bbaSJie Hai 	[HNS3_SSU_1]		= { dfx_ssu_reg_1_list,		RTE_DIM(dfx_ssu_reg_1_list) },
835dd4b8bbaSJie Hai 	[HNS3_IGU_EGU]		= { dfx_igu_egu_reg_list,	RTE_DIM(dfx_igu_egu_reg_list) },
836dd4b8bbaSJie Hai 	[HNS3_RPU_0]		= { dfx_rpu_reg_0_list,		RTE_DIM(dfx_rpu_reg_0_list) },
837dd4b8bbaSJie Hai 	[HNS3_RPU_1]		= { dfx_rpu_reg_1_list,		RTE_DIM(dfx_rpu_reg_1_list) },
838dd4b8bbaSJie Hai 	[HNS3_NCSI]		= { dfx_ncsi_reg_list,		RTE_DIM(dfx_ncsi_reg_list) },
839dd4b8bbaSJie Hai 	[HNS3_RTC]		= { dfx_rtc_reg_list,		RTE_DIM(dfx_rtc_reg_list) },
840dd4b8bbaSJie Hai 	[HNS3_PPP]		= { dfx_ppp_reg_list,		RTE_DIM(dfx_ppp_reg_list) },
841dd4b8bbaSJie Hai 	[HNS3_RCB]		= { dfx_rcb_reg_list,		RTE_DIM(dfx_rcb_reg_list) },
842dd4b8bbaSJie Hai 	[HNS3_TQP]		= { dfx_tqp_reg_list,		RTE_DIM(dfx_tqp_reg_list) },
843dd4b8bbaSJie Hai 	[HNS3_SSU_2]		= { dfx_ssu_reg_2_list,		RTE_DIM(dfx_ssu_reg_2_list) },
844dd4b8bbaSJie Hai 	[HNS3_CMDQ]		= { cmdq_reg_list,		RTE_DIM(cmdq_reg_list) },
845dd4b8bbaSJie Hai 	[HNS3_COMMON_PF]	= { common_reg_list,		RTE_DIM(common_reg_list) },
846dd4b8bbaSJie Hai 	[HNS3_COMMON_VF]	= { common_vf_reg_list,		RTE_DIM(common_vf_reg_list) },
847dd4b8bbaSJie Hai 	[HNS3_RING]		= { ring_reg_list,		RTE_DIM(ring_reg_list) },
848dd4b8bbaSJie Hai 	[HNS3_TQP_INTR]		= { tqp_intr_reg_list,		RTE_DIM(tqp_intr_reg_list) },
849dd4b8bbaSJie Hai 	[HNS3_32_BIT_DFX]	= { regs_32_bit_list,		RTE_DIM(regs_32_bit_list) },
850dd4b8bbaSJie Hai 	[HNS3_64_BIT_DFX]	= { regs_64_bit_list,		RTE_DIM(regs_64_bit_list) },
851dd4b8bbaSJie Hai };
852936eda25SWei Hu (Xavier) 
853ef1fbd35SChengchang Tang static const uint32_t hns3_dfx_reg_opcode_list[] = {
854dd4b8bbaSJie Hai 	[HNS3_BIOS_COMMON]	=	HNS3_OPC_DFX_BIOS_COMMON_REG,
855dd4b8bbaSJie Hai 	[HNS3_SSU_0]		=	HNS3_OPC_DFX_SSU_REG_0,
856dd4b8bbaSJie Hai 	[HNS3_SSU_1]		=	HNS3_OPC_DFX_SSU_REG_1,
857dd4b8bbaSJie Hai 	[HNS3_IGU_EGU]		=	HNS3_OPC_DFX_IGU_EGU_REG,
858dd4b8bbaSJie Hai 	[HNS3_RPU_0]		=	HNS3_OPC_DFX_RPU_REG_0,
859dd4b8bbaSJie Hai 	[HNS3_RPU_1]		=	HNS3_OPC_DFX_RPU_REG_1,
860dd4b8bbaSJie Hai 	[HNS3_NCSI]		=	HNS3_OPC_DFX_NCSI_REG,
861dd4b8bbaSJie Hai 	[HNS3_RTC]		=	HNS3_OPC_DFX_RTC_REG,
862dd4b8bbaSJie Hai 	[HNS3_PPP]		=	HNS3_OPC_DFX_PPP_REG,
863dd4b8bbaSJie Hai 	[HNS3_RCB]		=	HNS3_OPC_DFX_RCB_REG,
864dd4b8bbaSJie Hai 	[HNS3_TQP]		=	HNS3_OPC_DFX_TQP_REG,
865dd4b8bbaSJie Hai 	[HNS3_SSU_2]		=	HNS3_OPC_DFX_SSU_REG_2
866ef1fbd35SChengchang Tang };
867ef1fbd35SChengchang Tang 
868936eda25SWei Hu (Xavier) static int
869936eda25SWei Hu (Xavier) hns3_get_regs_num(struct hns3_hw *hw, uint32_t *regs_num_32_bit,
870936eda25SWei Hu (Xavier) 		  uint32_t *regs_num_64_bit)
871936eda25SWei Hu (Xavier) {
872936eda25SWei Hu (Xavier) 	struct hns3_cmd_desc desc;
873936eda25SWei Hu (Xavier) 	int ret;
874936eda25SWei Hu (Xavier) 
875936eda25SWei Hu (Xavier) 	hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_QUERY_REG_NUM, true);
876936eda25SWei Hu (Xavier) 	ret = hns3_cmd_send(hw, &desc, 1);
877936eda25SWei Hu (Xavier) 	if (ret) {
878936eda25SWei Hu (Xavier) 		hns3_err(hw, "Query register number cmd failed, ret = %d",
879936eda25SWei Hu (Xavier) 			 ret);
880936eda25SWei Hu (Xavier) 		return ret;
881936eda25SWei Hu (Xavier) 	}
882936eda25SWei Hu (Xavier) 
883936eda25SWei Hu (Xavier) 	*regs_num_32_bit = rte_le_to_cpu_32(desc.data[0]);
884936eda25SWei Hu (Xavier) 	*regs_num_64_bit = rte_le_to_cpu_32(desc.data[1]);
885dd4b8bbaSJie Hai 	if (*regs_num_32_bit != RTE_DIM(regs_32_bit_list) ||
886dd4b8bbaSJie Hai 	    *regs_num_64_bit * HNS3_64_BIT_REG_OUTPUT_SIZE != RTE_DIM(regs_64_bit_list)) {
887dd4b8bbaSJie Hai 		hns3_err(hw, "Query register number differ from the list!");
888dd4b8bbaSJie Hai 		return -EINVAL;
889dd4b8bbaSJie Hai 	}
890936eda25SWei Hu (Xavier) 
891936eda25SWei Hu (Xavier) 	return 0;
892936eda25SWei Hu (Xavier) }
893936eda25SWei Hu (Xavier) 
89499d3bd8bSJie Hai static const char *
89599d3bd8bSJie Hai hns3_get_name_by_module(enum hns3_reg_modules module)
8968cdddc25SJie Hai {
89799d3bd8bSJie Hai 	size_t i;
8988cdddc25SJie Hai 
89999d3bd8bSJie Hai 	for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
900*f58fd222SJie Hai 		if ((hns3_module_name_map[i].module & HNS3_MODULE_MASK(module)) != 0)
90199d3bd8bSJie Hai 			return hns3_module_name_map[i].name;
90299d3bd8bSJie Hai 	}
90399d3bd8bSJie Hai 	return "unknown";
9048cdddc25SJie Hai }
9058cdddc25SJie Hai 
90699d3bd8bSJie Hai static void
90799d3bd8bSJie Hai hns3_get_module_names(char *names, uint32_t len)
90899d3bd8bSJie Hai {
90999d3bd8bSJie Hai 	size_t i;
91099d3bd8bSJie Hai 
91199d3bd8bSJie Hai 	for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
91299d3bd8bSJie Hai 		strlcat(names, " ", len);
91399d3bd8bSJie Hai 		strlcat(names, hns3_module_name_map[i].name, len);
91499d3bd8bSJie Hai 	}
91599d3bd8bSJie Hai }
91699d3bd8bSJie Hai 
91799d3bd8bSJie Hai static uint32_t
91899d3bd8bSJie Hai hns3_parse_modules_by_filter(struct hns3_hw *hw, const char *filter)
91999d3bd8bSJie Hai {
92099d3bd8bSJie Hai 	struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
92199d3bd8bSJie Hai 	char names[HNS3_MAX_MODULES_LEN] = {0};
92299d3bd8bSJie Hai 	uint32_t modules = 0;
92399d3bd8bSJie Hai 	size_t i;
92499d3bd8bSJie Hai 
92599d3bd8bSJie Hai 	if (filter == NULL) {
92699d3bd8bSJie Hai 		modules = (1 << RTE_DIM(hns3_reg_lists)) - 1;
92799d3bd8bSJie Hai 	} else {
92899d3bd8bSJie Hai 		for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
92999d3bd8bSJie Hai 			if (strcmp(filter, hns3_module_name_map[i].name) == 0) {
93099d3bd8bSJie Hai 				modules |= hns3_module_name_map[i].module;
93199d3bd8bSJie Hai 				break;
93299d3bd8bSJie Hai 			}
93399d3bd8bSJie Hai 		}
93499d3bd8bSJie Hai 	}
93599d3bd8bSJie Hai 
93699d3bd8bSJie Hai 	if (hns->is_vf)
93799d3bd8bSJie Hai 		modules &= HNS3_VF_MODULES;
93899d3bd8bSJie Hai 	else
93999d3bd8bSJie Hai 		modules &= ~HNS3_VF_ONLY_MODULES;
94099d3bd8bSJie Hai 	if (modules == 0) {
94199d3bd8bSJie Hai 		hns3_get_module_names(names, HNS3_MAX_MODULES_LEN);
94299d3bd8bSJie Hai 		hns3_err(hw, "mismatched module name! Available names are:%s.",
94399d3bd8bSJie Hai 			 names);
94499d3bd8bSJie Hai 	}
94599d3bd8bSJie Hai 	return modules;
9468cdddc25SJie Hai }
9478cdddc25SJie Hai 
9488cdddc25SJie Hai static int
9498cdddc25SJie Hai hns3_get_dfx_reg_bd_num(struct hns3_hw *hw, uint32_t *bd_num_list,
9508cdddc25SJie Hai 			uint32_t list_size)
9518cdddc25SJie Hai {
9528cdddc25SJie Hai #define HNS3_GET_DFX_REG_BD_NUM_SIZE	4
9538cdddc25SJie Hai 	struct hns3_cmd_desc desc[HNS3_GET_DFX_REG_BD_NUM_SIZE];
9548cdddc25SJie Hai 	uint32_t index, desc_index;
9558cdddc25SJie Hai 	uint32_t bd_num;
9568cdddc25SJie Hai 	uint32_t i;
9578cdddc25SJie Hai 	int ret;
9588cdddc25SJie Hai 
9598cdddc25SJie Hai 	for (i = 0; i < HNS3_GET_DFX_REG_BD_NUM_SIZE - 1; i++) {
9608cdddc25SJie Hai 		hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
9618cdddc25SJie Hai 		desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
9628cdddc25SJie Hai 	}
9638cdddc25SJie Hai 	/* The last BD does not need a next flag */
9648cdddc25SJie Hai 	hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
9658cdddc25SJie Hai 
9668cdddc25SJie Hai 	ret = hns3_cmd_send(hw, desc, HNS3_GET_DFX_REG_BD_NUM_SIZE);
9678cdddc25SJie Hai 	if (ret) {
9688cdddc25SJie Hai 		hns3_err(hw, "fail to get dfx bd num, ret = %d.", ret);
9698cdddc25SJie Hai 		return ret;
9708cdddc25SJie Hai 	}
9718cdddc25SJie Hai 
9728cdddc25SJie Hai 	/* The first data in the first BD is a reserved field */
9738cdddc25SJie Hai 	for (i = 1; i <= list_size; i++) {
9748cdddc25SJie Hai 		desc_index = i / HNS3_CMD_DESC_DATA_NUM;
9758cdddc25SJie Hai 		index = i % HNS3_CMD_DESC_DATA_NUM;
9768cdddc25SJie Hai 		bd_num = rte_le_to_cpu_32(desc[desc_index].data[index]);
9778cdddc25SJie Hai 		bd_num_list[i - 1] = bd_num;
9788cdddc25SJie Hai 	}
9798cdddc25SJie Hai 
9808cdddc25SJie Hai 	return 0;
9818cdddc25SJie Hai }
9828cdddc25SJie Hai 
98399d3bd8bSJie Hai static uint32_t
98499d3bd8bSJie Hai hns3_get_regs_length(struct hns3_hw *hw, uint32_t modules)
9858cdddc25SJie Hai {
98699d3bd8bSJie Hai 	uint32_t reg_num = 0, length = 0;
98799d3bd8bSJie Hai 	uint32_t i;
9888cdddc25SJie Hai 
98999d3bd8bSJie Hai 	for (i = 0; i < RTE_DIM(hns3_reg_lists); i++) {
99099d3bd8bSJie Hai 		if ((RTE_BIT32(i) & modules) == 0)
99199d3bd8bSJie Hai 			continue;
99299d3bd8bSJie Hai 		reg_num = hns3_reg_lists[i].entry_num;
99399d3bd8bSJie Hai 		if (i == HNS3_RING)
99499d3bd8bSJie Hai 			reg_num *= hw->tqps_num;
99599d3bd8bSJie Hai 		else if (i == HNS3_TQP_INTR)
99699d3bd8bSJie Hai 			reg_num *= hw->intr_tqps_num;
9978cdddc25SJie Hai 
99899d3bd8bSJie Hai 		length += reg_num;
999dd4b8bbaSJie Hai 	}
10008cdddc25SJie Hai 
100199d3bd8bSJie Hai 	return length;
1002936eda25SWei Hu (Xavier) }
1003936eda25SWei Hu (Xavier) 
1004dd4b8bbaSJie Hai static void
1005dd4b8bbaSJie Hai hns3_fill_dfx_regs_name(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
1006dd4b8bbaSJie Hai 			const struct hns3_dfx_reg_entry *reg_list, uint32_t reg_num)
1007dd4b8bbaSJie Hai {
1008dd4b8bbaSJie Hai 	uint32_t i, cnt = regs->length;
1009dd4b8bbaSJie Hai 	const char *name;
1010dd4b8bbaSJie Hai 
1011dd4b8bbaSJie Hai 	if (regs->names == NULL)
1012dd4b8bbaSJie Hai 		return;
1013dd4b8bbaSJie Hai 
1014dd4b8bbaSJie Hai 	for (i = 0; i < reg_num; i++) {
1015dd4b8bbaSJie Hai 		name = reg_list[i].name_v1;
1016dd4b8bbaSJie Hai 		if (hw->revision == PCI_REVISION_ID_HIP09_A && reg_list[i].name_v2 != NULL)
1017dd4b8bbaSJie Hai 			name = reg_list[i].name_v2;
1018dd4b8bbaSJie Hai 		snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE, "%s", name);
1019dd4b8bbaSJie Hai 	}
1020dd4b8bbaSJie Hai }
1021dd4b8bbaSJie Hai 
1022936eda25SWei Hu (Xavier) static int
1023dd4b8bbaSJie Hai hns3_get_32_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
1024936eda25SWei Hu (Xavier) {
1025936eda25SWei Hu (Xavier) #define HNS3_32_BIT_REG_RTN_DATANUM 8
1026936eda25SWei Hu (Xavier) #define HNS3_32_BIT_DESC_NODATA_LEN 2
1027dd4b8bbaSJie Hai 	uint32_t *reg_val = regs->data;
1028936eda25SWei Hu (Xavier) 	struct hns3_cmd_desc *desc;
1029936eda25SWei Hu (Xavier) 	uint32_t *desc_data;
1030936eda25SWei Hu (Xavier) 	int cmd_num;
1031936eda25SWei Hu (Xavier) 	int i, k, n;
1032936eda25SWei Hu (Xavier) 	int ret;
1033936eda25SWei Hu (Xavier) 
1034936eda25SWei Hu (Xavier) 	if (regs_num == 0)
1035936eda25SWei Hu (Xavier) 		return 0;
1036936eda25SWei Hu (Xavier) 
1037936eda25SWei Hu (Xavier) 	cmd_num = DIV_ROUND_UP(regs_num + HNS3_32_BIT_DESC_NODATA_LEN,
1038936eda25SWei Hu (Xavier) 			       HNS3_32_BIT_REG_RTN_DATANUM);
1039936eda25SWei Hu (Xavier) 	desc = rte_zmalloc("hns3-32bit-regs",
1040936eda25SWei Hu (Xavier) 			   sizeof(struct hns3_cmd_desc) * cmd_num, 0);
1041936eda25SWei Hu (Xavier) 	if (desc == NULL) {
1042936eda25SWei Hu (Xavier) 		hns3_err(hw, "Failed to allocate %zx bytes needed to "
1043936eda25SWei Hu (Xavier) 			 "store 32bit regs",
1044936eda25SWei Hu (Xavier) 			 sizeof(struct hns3_cmd_desc) * cmd_num);
1045936eda25SWei Hu (Xavier) 		return -ENOMEM;
1046936eda25SWei Hu (Xavier) 	}
1047936eda25SWei Hu (Xavier) 
1048936eda25SWei Hu (Xavier) 	hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_32_BIT_REG, true);
1049936eda25SWei Hu (Xavier) 	ret = hns3_cmd_send(hw, desc, cmd_num);
1050936eda25SWei Hu (Xavier) 	if (ret) {
1051936eda25SWei Hu (Xavier) 		hns3_err(hw, "Query 32 bit register cmd failed, ret = %d",
1052936eda25SWei Hu (Xavier) 			 ret);
1053936eda25SWei Hu (Xavier) 		rte_free(desc);
1054936eda25SWei Hu (Xavier) 		return ret;
1055936eda25SWei Hu (Xavier) 	}
1056936eda25SWei Hu (Xavier) 
1057dd4b8bbaSJie Hai 	hns3_fill_dfx_regs_name(hw, regs, regs_32_bit_list, regs_num);
1058dd4b8bbaSJie Hai 	reg_val += regs->length;
1059dd4b8bbaSJie Hai 	regs->length += regs_num;
1060936eda25SWei Hu (Xavier) 	for (i = 0; i < cmd_num; i++) {
1061936eda25SWei Hu (Xavier) 		if (i == 0) {
1062936eda25SWei Hu (Xavier) 			desc_data = &desc[i].data[0];
1063936eda25SWei Hu (Xavier) 			n = HNS3_32_BIT_REG_RTN_DATANUM -
1064936eda25SWei Hu (Xavier) 			    HNS3_32_BIT_DESC_NODATA_LEN;
1065936eda25SWei Hu (Xavier) 		} else {
1066936eda25SWei Hu (Xavier) 			desc_data = (uint32_t *)(&desc[i]);
1067936eda25SWei Hu (Xavier) 			n = HNS3_32_BIT_REG_RTN_DATANUM;
1068936eda25SWei Hu (Xavier) 		}
1069936eda25SWei Hu (Xavier) 		for (k = 0; k < n; k++) {
1070936eda25SWei Hu (Xavier) 			*reg_val++ = rte_le_to_cpu_32(*desc_data++);
1071936eda25SWei Hu (Xavier) 			regs_num--;
1072936eda25SWei Hu (Xavier) 			if (regs_num == 0)
1073936eda25SWei Hu (Xavier) 				break;
1074936eda25SWei Hu (Xavier) 		}
1075936eda25SWei Hu (Xavier) 	}
1076936eda25SWei Hu (Xavier) 
1077936eda25SWei Hu (Xavier) 	rte_free(desc);
1078936eda25SWei Hu (Xavier) 	return 0;
1079936eda25SWei Hu (Xavier) }
1080936eda25SWei Hu (Xavier) 
1081936eda25SWei Hu (Xavier) static int
1082dd4b8bbaSJie Hai hns3_get_64_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
1083936eda25SWei Hu (Xavier) {
1084936eda25SWei Hu (Xavier) #define HNS3_64_BIT_REG_RTN_DATANUM 4
1085936eda25SWei Hu (Xavier) #define HNS3_64_BIT_DESC_NODATA_LEN 1
1086dd4b8bbaSJie Hai 	uint32_t *reg_val = regs->data;
1087936eda25SWei Hu (Xavier) 	struct hns3_cmd_desc *desc;
1088936eda25SWei Hu (Xavier) 	uint64_t *desc_data;
1089936eda25SWei Hu (Xavier) 	int cmd_num;
1090936eda25SWei Hu (Xavier) 	int i, k, n;
1091936eda25SWei Hu (Xavier) 	int ret;
1092936eda25SWei Hu (Xavier) 
1093936eda25SWei Hu (Xavier) 	if (regs_num == 0)
1094936eda25SWei Hu (Xavier) 		return 0;
1095936eda25SWei Hu (Xavier) 
1096936eda25SWei Hu (Xavier) 	cmd_num = DIV_ROUND_UP(regs_num + HNS3_64_BIT_DESC_NODATA_LEN,
1097936eda25SWei Hu (Xavier) 			       HNS3_64_BIT_REG_RTN_DATANUM);
1098936eda25SWei Hu (Xavier) 	desc = rte_zmalloc("hns3-64bit-regs",
1099936eda25SWei Hu (Xavier) 			   sizeof(struct hns3_cmd_desc) * cmd_num, 0);
1100936eda25SWei Hu (Xavier) 	if (desc == NULL) {
1101936eda25SWei Hu (Xavier) 		hns3_err(hw, "Failed to allocate %zx bytes needed to "
1102936eda25SWei Hu (Xavier) 			 "store 64bit regs",
1103936eda25SWei Hu (Xavier) 			 sizeof(struct hns3_cmd_desc) * cmd_num);
1104936eda25SWei Hu (Xavier) 		return -ENOMEM;
1105936eda25SWei Hu (Xavier) 	}
1106936eda25SWei Hu (Xavier) 
1107936eda25SWei Hu (Xavier) 	hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_64_BIT_REG, true);
1108936eda25SWei Hu (Xavier) 	ret = hns3_cmd_send(hw, desc, cmd_num);
1109936eda25SWei Hu (Xavier) 	if (ret) {
1110936eda25SWei Hu (Xavier) 		hns3_err(hw, "Query 64 bit register cmd failed, ret = %d",
1111936eda25SWei Hu (Xavier) 			 ret);
1112936eda25SWei Hu (Xavier) 		rte_free(desc);
1113936eda25SWei Hu (Xavier) 		return ret;
1114936eda25SWei Hu (Xavier) 	}
1115936eda25SWei Hu (Xavier) 
1116dd4b8bbaSJie Hai 	hns3_fill_dfx_regs_name(hw, regs, regs_64_bit_list, regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE);
1117dd4b8bbaSJie Hai 	reg_val += regs->length;
1118dd4b8bbaSJie Hai 	regs->length += regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE;
1119936eda25SWei Hu (Xavier) 	for (i = 0; i < cmd_num; i++) {
1120936eda25SWei Hu (Xavier) 		if (i == 0) {
1121936eda25SWei Hu (Xavier) 			desc_data = (uint64_t *)(&desc[i].data[0]);
1122936eda25SWei Hu (Xavier) 			n = HNS3_64_BIT_REG_RTN_DATANUM -
1123936eda25SWei Hu (Xavier) 			    HNS3_64_BIT_DESC_NODATA_LEN;
1124936eda25SWei Hu (Xavier) 		} else {
1125936eda25SWei Hu (Xavier) 			desc_data = (uint64_t *)(&desc[i]);
1126936eda25SWei Hu (Xavier) 			n = HNS3_64_BIT_REG_RTN_DATANUM;
1127936eda25SWei Hu (Xavier) 		}
1128936eda25SWei Hu (Xavier) 		for (k = 0; k < n; k++) {
1129936eda25SWei Hu (Xavier) 			*reg_val++ = rte_le_to_cpu_64(*desc_data++);
1130936eda25SWei Hu (Xavier) 			regs_num--;
1131936eda25SWei Hu (Xavier) 			if (!regs_num)
1132936eda25SWei Hu (Xavier) 				break;
1133936eda25SWei Hu (Xavier) 		}
1134936eda25SWei Hu (Xavier) 	}
1135936eda25SWei Hu (Xavier) 
1136936eda25SWei Hu (Xavier) 	rte_free(desc);
1137936eda25SWei Hu (Xavier) 	return 0;
1138936eda25SWei Hu (Xavier) }
1139936eda25SWei Hu (Xavier) 
1140dd4b8bbaSJie Hai static void
1141dd4b8bbaSJie Hai hns3_direct_access_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
114299d3bd8bSJie Hai 			     uint32_t modules, enum hns3_reg_modules idx)
1143dd4b8bbaSJie Hai {
1144dd4b8bbaSJie Hai 	const struct hns3_dirt_reg_entry *reg_list;
1145dd4b8bbaSJie Hai 	uint32_t *data = regs->data;
1146dd4b8bbaSJie Hai 	size_t reg_num, i, cnt;
1147dd4b8bbaSJie Hai 
114899d3bd8bSJie Hai 	if ((modules & HNS3_MODULE_MASK(idx)) == 0)
114999d3bd8bSJie Hai 		return;
115099d3bd8bSJie Hai 
1151dd4b8bbaSJie Hai 	data += regs->length;
1152dd4b8bbaSJie Hai 	reg_num = hns3_reg_lists[idx].entry_num;
1153dd4b8bbaSJie Hai 	reg_list = hns3_reg_lists[idx].reg_list;
1154dd4b8bbaSJie Hai 	cnt = regs->length;
1155dd4b8bbaSJie Hai 	for (i = 0; i < reg_num; i++) {
1156dd4b8bbaSJie Hai 		*data++ = hns3_read_dev(hw, reg_list[i].addr);
1157dd4b8bbaSJie Hai 		if (regs->names != NULL)
1158dd4b8bbaSJie Hai 			snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE,
1159dd4b8bbaSJie Hai 				 "%s", reg_list[i].name);
1160dd4b8bbaSJie Hai 	}
1161dd4b8bbaSJie Hai 
1162dd4b8bbaSJie Hai 	regs->length += reg_num;
1163dd4b8bbaSJie Hai }
1164dd4b8bbaSJie Hai 
1165dd4b8bbaSJie Hai static uint32_t
1166dd4b8bbaSJie Hai hns3_get_module_tqp_reg_offset(enum hns3_reg_modules idx, uint16_t queue_id)
1167dd4b8bbaSJie Hai {
1168dd4b8bbaSJie Hai 	if (idx == HNS3_RING)
1169dd4b8bbaSJie Hai 		return hns3_get_tqp_reg_offset(queue_id);
1170dd4b8bbaSJie Hai 	else if (idx == HNS3_TQP_INTR)
1171dd4b8bbaSJie Hai 		return hns3_get_tqp_intr_reg_offset(queue_id);
1172dd4b8bbaSJie Hai 
1173dd4b8bbaSJie Hai 	return 0;
1174dd4b8bbaSJie Hai }
1175dd4b8bbaSJie Hai 
1176dd4b8bbaSJie Hai static void
1177dd4b8bbaSJie Hai hns3_direct_access_tqp_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
117899d3bd8bSJie Hai 				 uint32_t modules, enum hns3_reg_modules idx)
1179dd4b8bbaSJie Hai {
1180dd4b8bbaSJie Hai 	const struct hns3_dirt_reg_entry *reg_list;
1181b1fefe40SJie Hai 	uint32_t reg_num, i, j, reg_offset;
1182dd4b8bbaSJie Hai 	uint32_t *data = regs->data;
1183b1fefe40SJie Hai 	uint16_t tqp_num;
1184dd4b8bbaSJie Hai 
118599d3bd8bSJie Hai 	if ((modules & HNS3_MODULE_MASK(idx)) == 0)
1186dd4b8bbaSJie Hai 		return;
1187dd4b8bbaSJie Hai 
1188dd4b8bbaSJie Hai 	tqp_num = (idx == HNS3_RING) ? hw->tqps_num : hw->intr_tqps_num;
1189dd4b8bbaSJie Hai 	reg_list = hns3_reg_lists[idx].reg_list;
1190dd4b8bbaSJie Hai 	reg_num = hns3_reg_lists[idx].entry_num;
1191dd4b8bbaSJie Hai 	data += regs->length;
1192dd4b8bbaSJie Hai 	for (i = 0; i < tqp_num; i++) {
1193dd4b8bbaSJie Hai 		reg_offset = hns3_get_module_tqp_reg_offset(idx, i);
1194dd4b8bbaSJie Hai 		for (j = 0; j < reg_num; j++) {
1195dd4b8bbaSJie Hai 			*data++ = hns3_read_dev(hw, reg_list[j].addr + reg_offset);
1196dd4b8bbaSJie Hai 			if (regs->names != NULL)
1197dd4b8bbaSJie Hai 				snprintf(regs->names[regs->length].name,
1198dd4b8bbaSJie Hai 					 RTE_ETH_REG_NAME_SIZE, "Q%u_%s", i, reg_list[j].name);
1199dd4b8bbaSJie Hai 			regs->length++;
1200dd4b8bbaSJie Hai 		}
1201dd4b8bbaSJie Hai 	}
1202dd4b8bbaSJie Hai }
1203dd4b8bbaSJie Hai 
1204dd4b8bbaSJie Hai static void
120599d3bd8bSJie Hai hns3_direct_access_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1206936eda25SWei Hu (Xavier) {
120799d3bd8bSJie Hai 	hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_VF);
120899d3bd8bSJie Hai 	hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_PF);
120999d3bd8bSJie Hai 	hns3_direct_access_regs_help(hw, regs, modules, HNS3_CMDQ);
121099d3bd8bSJie Hai 	hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_RING);
121199d3bd8bSJie Hai 	hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_TQP_INTR);
1212936eda25SWei Hu (Xavier) }
1213936eda25SWei Hu (Xavier) 
1214ef1fbd35SChengchang Tang static int
1215ef1fbd35SChengchang Tang hns3_dfx_reg_cmd_send(struct hns3_hw *hw, struct hns3_cmd_desc *desc,
1216ef1fbd35SChengchang Tang 			int bd_num, uint32_t opcode)
1217ef1fbd35SChengchang Tang {
1218ef1fbd35SChengchang Tang 	int ret;
1219ef1fbd35SChengchang Tang 	int i;
1220ef1fbd35SChengchang Tang 
1221ef1fbd35SChengchang Tang 	for (i = 0; i < bd_num - 1; i++) {
1222ef1fbd35SChengchang Tang 		hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
1223ef1fbd35SChengchang Tang 		desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
1224ef1fbd35SChengchang Tang 	}
1225ef1fbd35SChengchang Tang 	/* The last BD does not need a next flag */
1226ef1fbd35SChengchang Tang 	hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
1227ef1fbd35SChengchang Tang 
1228ef1fbd35SChengchang Tang 	ret = hns3_cmd_send(hw, desc, bd_num);
1229dc967f97SDengdui Huang 	if (ret)
1230ef1fbd35SChengchang Tang 		hns3_err(hw, "fail to query dfx registers, opcode = 0x%04X, "
1231f665790aSDavid Marchand 			 "ret = %d.", opcode, ret);
1232ef1fbd35SChengchang Tang 
1233ef1fbd35SChengchang Tang 	return ret;
1234ef1fbd35SChengchang Tang }
1235ef1fbd35SChengchang Tang 
1236ef1fbd35SChengchang Tang static int
1237ef1fbd35SChengchang Tang hns3_dfx_reg_fetch_data(struct hns3_cmd_desc *desc, int bd_num, uint32_t *reg)
1238ef1fbd35SChengchang Tang {
1239ef1fbd35SChengchang Tang 	int desc_index;
1240ef1fbd35SChengchang Tang 	int reg_num;
1241ef1fbd35SChengchang Tang 	int index;
1242ef1fbd35SChengchang Tang 	int i;
1243ef1fbd35SChengchang Tang 
1244ef1fbd35SChengchang Tang 	reg_num = bd_num * HNS3_CMD_DESC_DATA_NUM;
1245ef1fbd35SChengchang Tang 	for (i = 0; i < reg_num; i++) {
1246ef1fbd35SChengchang Tang 		desc_index = i / HNS3_CMD_DESC_DATA_NUM;
1247ef1fbd35SChengchang Tang 		index = i % HNS3_CMD_DESC_DATA_NUM;
1248ef1fbd35SChengchang Tang 		*reg++ = desc[desc_index].data[index];
1249ef1fbd35SChengchang Tang 	}
1250ef1fbd35SChengchang Tang 
1251ef1fbd35SChengchang Tang 	return reg_num;
1252ef1fbd35SChengchang Tang }
1253ef1fbd35SChengchang Tang 
1254ef1fbd35SChengchang Tang static int
125599d3bd8bSJie Hai hns3_get_dfx_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
1256ef1fbd35SChengchang Tang {
1257ef1fbd35SChengchang Tang 	int opcode_num = RTE_DIM(hns3_dfx_reg_opcode_list);
1258dd4b8bbaSJie Hai 	uint32_t max_bd_num, bd_num, opcode, regs_num;
1259ef1fbd35SChengchang Tang 	uint32_t bd_num_list[opcode_num];
1260ef1fbd35SChengchang Tang 	struct hns3_cmd_desc *cmd_descs;
1261dd4b8bbaSJie Hai 	uint32_t *data = regs->data;
1262ef1fbd35SChengchang Tang 	int ret;
1263ef1fbd35SChengchang Tang 	int i;
1264ef1fbd35SChengchang Tang 
1265ef1fbd35SChengchang Tang 	ret = hns3_get_dfx_reg_bd_num(hw, bd_num_list, opcode_num);
1266ef1fbd35SChengchang Tang 	if (ret)
1267ef1fbd35SChengchang Tang 		return ret;
1268ef1fbd35SChengchang Tang 
1269ef1fbd35SChengchang Tang 	max_bd_num = 0;
1270ef1fbd35SChengchang Tang 	for (i = 0; i < opcode_num; i++)
1271ef1fbd35SChengchang Tang 		max_bd_num = RTE_MAX(bd_num_list[i], max_bd_num);
1272ef1fbd35SChengchang Tang 
1273ef1fbd35SChengchang Tang 	cmd_descs = rte_zmalloc(NULL, sizeof(*cmd_descs) * max_bd_num, 0);
1274ef1fbd35SChengchang Tang 	if (cmd_descs == NULL)
1275ef1fbd35SChengchang Tang 		return -ENOMEM;
1276ef1fbd35SChengchang Tang 
1277013fdd2dSJie Hai 	data += regs->length;
1278ef1fbd35SChengchang Tang 	for (i = 0; i < opcode_num; i++) {
1279ef1fbd35SChengchang Tang 		opcode = hns3_dfx_reg_opcode_list[i];
1280ef1fbd35SChengchang Tang 		bd_num = bd_num_list[i];
128199d3bd8bSJie Hai 		if ((modules & HNS3_MODULE_MASK(i)) == 0)
128299d3bd8bSJie Hai 			continue;
1283ef1fbd35SChengchang Tang 		if (bd_num == 0)
1284ef1fbd35SChengchang Tang 			continue;
1285ef1fbd35SChengchang Tang 		ret = hns3_dfx_reg_cmd_send(hw, cmd_descs, bd_num, opcode);
1286ef1fbd35SChengchang Tang 		if (ret)
1287ef1fbd35SChengchang Tang 			break;
1288dd4b8bbaSJie Hai 
1289dd4b8bbaSJie Hai 		regs_num = hns3_dfx_reg_fetch_data(cmd_descs, bd_num, data);
129099d3bd8bSJie Hai 		if (regs_num !=  hns3_reg_lists[i].entry_num) {
129199d3bd8bSJie Hai 			hns3_err(hw, "Query register number differ from the list for module %s!",
129299d3bd8bSJie Hai 				 hns3_get_name_by_module(i));
129399d3bd8bSJie Hai 			return -EINVAL;
129499d3bd8bSJie Hai 		}
1295dd4b8bbaSJie Hai 		hns3_fill_dfx_regs_name(hw, regs, hns3_reg_lists[i].reg_list, regs_num);
1296dd4b8bbaSJie Hai 		regs->length += regs_num;
1297013fdd2dSJie Hai 		data += regs_num;
1298ef1fbd35SChengchang Tang 	}
1299ef1fbd35SChengchang Tang 	rte_free(cmd_descs);
1300ef1fbd35SChengchang Tang 
1301ef1fbd35SChengchang Tang 	return ret;
1302ef1fbd35SChengchang Tang }
1303ef1fbd35SChengchang Tang 
13048cdddc25SJie Hai static int
130599d3bd8bSJie Hai hns3_get_32_b4_bit_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
13068cdddc25SJie Hai {
13078cdddc25SJie Hai 	uint32_t regs_num_32_bit;
13088cdddc25SJie Hai 	uint32_t regs_num_64_bit;
13098cdddc25SJie Hai 	int ret;
13108cdddc25SJie Hai 
131199d3bd8bSJie Hai 	if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) == 0 &&
131299d3bd8bSJie Hai 	    (modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) == 0)
1313dd4b8bbaSJie Hai 		return 0;
1314dd4b8bbaSJie Hai 
13158cdddc25SJie Hai 	ret = hns3_get_regs_num(hw, &regs_num_32_bit, &regs_num_64_bit);
13168cdddc25SJie Hai 	if (ret) {
13178cdddc25SJie Hai 		hns3_err(hw, "Get register number failed, ret = %d", ret);
13188cdddc25SJie Hai 		return ret;
13198cdddc25SJie Hai 	}
13208cdddc25SJie Hai 
132199d3bd8bSJie Hai 	if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) != 0) {
1322dd4b8bbaSJie Hai 		ret = hns3_get_32_bit_regs(hw, regs_num_32_bit, regs);
13238cdddc25SJie Hai 		if (ret) {
13248cdddc25SJie Hai 			hns3_err(hw, "Get 32 bit register failed, ret = %d", ret);
13258cdddc25SJie Hai 			return ret;
13268cdddc25SJie Hai 		}
132799d3bd8bSJie Hai 	}
13288cdddc25SJie Hai 
132999d3bd8bSJie Hai 	if ((modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) != 0) {
1330dd4b8bbaSJie Hai 		ret = hns3_get_64_bit_regs(hw, regs_num_64_bit, regs);
13318cdddc25SJie Hai 		if (ret) {
13328cdddc25SJie Hai 			hns3_err(hw, "Get 64 bit register failed, ret = %d", ret);
13338cdddc25SJie Hai 			return ret;
13348cdddc25SJie Hai 		}
133599d3bd8bSJie Hai 	}
13368cdddc25SJie Hai 
133799d3bd8bSJie Hai 	return 0;
133899d3bd8bSJie Hai }
133999d3bd8bSJie Hai 
134099d3bd8bSJie Hai static int
134199d3bd8bSJie Hai hns3_get_regs_from_firmware(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
134299d3bd8bSJie Hai {
134399d3bd8bSJie Hai 	struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
134499d3bd8bSJie Hai 	int ret;
134599d3bd8bSJie Hai 
134699d3bd8bSJie Hai 	if (hns->is_vf)
134799d3bd8bSJie Hai 		return 0;
134899d3bd8bSJie Hai 
134999d3bd8bSJie Hai 	ret = hns3_get_32_b4_bit_regs(hw, regs, modules);
135099d3bd8bSJie Hai 	if (ret != 0)
135199d3bd8bSJie Hai 		return ret;
135299d3bd8bSJie Hai 
135399d3bd8bSJie Hai 	return hns3_get_dfx_regs(hw, regs, modules);
13548cdddc25SJie Hai }
13558cdddc25SJie Hai 
1356936eda25SWei Hu (Xavier) int
1357936eda25SWei Hu (Xavier) hns3_get_regs(struct rte_eth_dev *eth_dev, struct rte_dev_reg_info *regs)
1358936eda25SWei Hu (Xavier) {
1359936eda25SWei Hu (Xavier) 	struct hns3_adapter *hns = eth_dev->data->dev_private;
1360936eda25SWei Hu (Xavier) 	struct hns3_hw *hw = &hns->hw;
136199d3bd8bSJie Hai 	uint32_t modules;
1362936eda25SWei Hu (Xavier) 	uint32_t length;
1363936eda25SWei Hu (Xavier) 
136499d3bd8bSJie Hai 	modules = hns3_parse_modules_by_filter(hw, regs->filter);
136599d3bd8bSJie Hai 	if (modules == 0)
136699d3bd8bSJie Hai 		return -EINVAL;
1367936eda25SWei Hu (Xavier) 
136899d3bd8bSJie Hai 	length = hns3_get_regs_length(hw, modules);
1369dd4b8bbaSJie Hai 	if (regs->data == NULL) {
1370936eda25SWei Hu (Xavier) 		regs->length = length;
1371936eda25SWei Hu (Xavier) 		regs->width = sizeof(uint32_t);
1372936eda25SWei Hu (Xavier) 		return 0;
1373936eda25SWei Hu (Xavier) 	}
1374936eda25SWei Hu (Xavier) 
1375936eda25SWei Hu (Xavier) 	/* Only full register dump is supported */
1376936eda25SWei Hu (Xavier) 	if (regs->length && regs->length != length)
1377936eda25SWei Hu (Xavier) 		return -ENOTSUP;
1378936eda25SWei Hu (Xavier) 
1379214917f6SChengwen Feng 	regs->version = hw->fw_version;
1380dd4b8bbaSJie Hai 	/* to count the number of filled registers */
1381dd4b8bbaSJie Hai 	regs->length = 0;
1382214917f6SChengwen Feng 
1383936eda25SWei Hu (Xavier) 	/* fetching per-PF registers values from PF PCIe register space */
138499d3bd8bSJie Hai 	hns3_direct_access_regs(hw, regs, modules);
1385fc066e6aSWei Hu (Xavier) 
1386936eda25SWei Hu (Xavier) 	/* fetching PF common registers values from firmware */
138799d3bd8bSJie Hai 	return  hns3_get_regs_from_firmware(hw, regs, modules);
1388936eda25SWei Hu (Xavier) }
1389