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, ®s_num_32_bit, ®s_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