Fix zxdh driver packet sending and receiving errors.<br /> <br />Signed-off-by: Bingbin Chen <chen.bingbin@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_ethdev.c     | 19 +++++----<br /> drivers/net/zxdh/zxdh_ethdev_ops.c | 15 +++----<br /> drivers/net/zxdh/zxdh_msg.c        | 20 ++-------<br /> drivers/net/zxdh/zxdh_msg.h        | 12 +++---<br /> drivers/net/zxdh/zxdh_mtr.c        |  8 ++--<br /> drivers/net/zxdh/zxdh_np.c         | 68 ++++++++++++++++++++++++++----<br /> drivers/net/zxdh/zxdh_np.h         |  8 ++--<br /> drivers/net/zxdh/zxdh_pci.c        | 24 ++++++++++-<br /> drivers/net/zxdh/zxdh_pci.h        |  2 +-<br /> drivers/net/zxdh/zxdh_rxtx.c       | 11 +++--<br /> drivers/net/zxdh/zxdh_tables.c     | 42 +++++++++---------<br /> drivers/net/zxdh/zxdh_tables.h     | 68 +++++++++++++++++++++++-------<br /> 12 files changed, 201 insertions(+), 96 deletions(-)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c<br />index ea8b18e5e1..ba7ea52d20 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev.c<br />@@ -1250,10 +1250,6 @@ zxdh_set_rxtx_funcs(struct rte_eth_dev *eth_dev)<br /> {<br />     struct zxdh_hw *hw = eth_dev->data->dev_private;<br />  <br />-    if (!zxdh_pci_packed_queue(hw)) {<br />-        PMD_DRV_LOG(ERR, "port %u not support packed queue", eth_dev->data->port_id);<br />-        return -1;<br />-    }<br />     if (!zxdh_pci_with_feature(hw, ZXDH_NET_F_MRG_RXBUF)) {<br />         PMD_DRV_LOG(ERR, "port %u not support rx mergeable", eth_dev->data->port_id);<br />         return -1;<br />@@ -1498,6 +1494,8 @@ zxdh_dtb_dump_res_init(struct zxdh_hw *hw, ZXDH_DEV_INIT_CTRL_T *dpp_ctrl)<br />  <br />     struct zxdh_dtb_bulk_dump_info dtb_dump_baseres[] = {<br />         {"sdt_vport_att_table", 4 * 1024 * 1024, ZXDH_SDT_VPORT_ATT_TABLE, NULL},<br />+        {"sdt_vlan_att_table", 4 * 1024 * 1024, ZXDH_SDT_VLAN_ATT_TABLE, NULL},<br />+        {"sdt_rss_table", 4 * 1024 * 1024, ZXDH_SDT_RSS_ATT_TABLE, NULL},<br />         {"sdt_l2_entry_table0", 5 * 1024 * 1024, ZXDH_SDT_L2_ENTRY_TABLE0, NULL},<br />         {"sdt_l2_entry_table1", 5 * 1024 * 1024, ZXDH_SDT_L2_ENTRY_TABLE1, NULL},<br />         {"sdt_l2_entry_table2", 5 * 1024 * 1024, ZXDH_SDT_L2_ENTRY_TABLE2, NULL},<br />@@ -1514,7 +1512,8 @@ zxdh_dtb_dump_res_init(struct zxdh_hw *hw, ZXDH_DEV_INIT_CTRL_T *dpp_ctrl)<br />     for (i = 0; i < (int)RTE_DIM(dtb_dump_baseres); i++) {<br />         struct zxdh_dtb_bulk_dump_info *p = dtb_dump_baseres + i;<br />         char buf[ZXDH_MAX_NAME_LEN] = {0};<br />-<br />+        memset(buf, '\0', sizeof(buf));<br />+        sprintf(buf, "%s_%x", p->mz_name, hw->dev_id);<br />         p->mz_name = buf;<br />  <br />         const struct rte_memzone *generic_dump_mz =<br />@@ -1544,6 +1543,7 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     struct zxdh_hw *hw = dev->data->dev_private;<br />     struct zxdh_bar_offset_params param = {0};<br />     struct zxdh_bar_offset_res res = {0};<br />+    char buf[ZXDH_MAX_NAME_LEN] = {0};<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     int ret = 0;<br />  <br />@@ -1569,7 +1569,7 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     dpp_ctrl->vport = hw->vport.vport;<br />     dpp_ctrl->vector = ZXDH_MSIX_INTR_DTB_VEC;<br />     strlcpy(dpp_ctrl->port_name, dev->device->name, sizeof(dpp_ctrl->port_name));<br />-    dpp_ctrl->pcie_vir_addr = (uint32_t)hw->bar_addr[0];<br />+    dpp_ctrl->pcie_vir_addr = (uint64_t)hw->bar_addr[0];<br />  <br />     param.pcie_id = hw->pcie_id;<br />     param.virt_addr = hw->bar_addr[0] + ZXDH_CTRLCH_OFFSET;<br />@@ -1584,7 +1584,8 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     dpp_ctrl->np_bar_offset = res.bar_offset;<br />  <br />     if (!dtb_data->dtb_table_conf_mz) {<br />-        const struct rte_memzone *conf_mz = rte_memzone_reserve_aligned("zxdh_dtb_table_conf_mz",<br />+        sprintf(buf, "%s_%x", "zxdh_dtb_table_conf_mz", hw->dev_id);<br />+        const struct rte_memzone *conf_mz = rte_memzone_reserve_aligned(buf,<br />                 ZXDH_DTB_TABLE_CONF_SIZE, SOCKET_ID_ANY, 0, RTE_CACHE_LINE_SIZE);<br />  <br />         if (conf_mz == NULL) {<br />@@ -1600,7 +1601,9 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     }<br />  <br />     if (!dtb_data->dtb_table_dump_mz) {<br />-        const struct rte_memzone *dump_mz = rte_memzone_reserve_aligned("zxdh_dtb_table_dump_mz",<br />+        memset(buf, '\0', sizeof(buf));<br />+        sprintf(buf, "%s_%x", "zxdh_dtb_table_dump_mz", hw->dev_id);<br />+        const struct rte_memzone *dump_mz = rte_memzone_reserve_aligned(buf,<br />                 ZXDH_DTB_TABLE_DUMP_SIZE, SOCKET_ID_ANY, 0, RTE_CACHE_LINE_SIZE);<br />  <br />         if (dump_mz == NULL) {<br />diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />index 2b02734c62..aa1001da01 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev_ops.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />@@ -433,7 +433,7 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr)<br />         ret = zxdh_del_mac_table(hw, hw->vport.vport, old_addr,<br />             hw->hash_search_index, 0, 0);<br />         if (ret) {<br />-            PMD_DRV_LOG(ERR, "mac_addr_add failed, code:%d", ret);<br />+            PMD_DRV_LOG(ERR, "mac_addr_del failed, code:%d", ret);<br />             return ret;<br />         }<br />         hw->uc_num--;<br />@@ -467,6 +467,8 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr)<br />         hw->uc_num--;<br />     }<br />     rte_ether_addr_copy(addr, (struct rte_ether_addr *)hw->mac_addr);<br />+    zxdh_pci_write_dev_config(hw, offsetof(struct zxdh_net_config, mac),<br />+                                &hw->mac_addr, RTE_ETHER_ADDR_LEN);<br />     return ret;<br /> }<br />  <br />@@ -566,7 +568,7 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr,<br />  <br /> void zxdh_dev_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)<br /> {<br />-    struct zxdh_hw *hw    = dev->data->dev_private;<br />+    struct zxdh_hw *hw = dev->data->dev_private;<br />     struct zxdh_msg_info msg_info = {0};<br />     struct rte_ether_addr *mac_addr = &dev->data->mac_addrs[index];<br />     uint16_t ret = 0;<br />@@ -2040,11 +2042,6 @@ zxdh_dev_fw_version_get(struct rte_eth_dev *dev,<br />  <br />     zxdh_agent_msg_build(hw, ZXDH_FLASH_FIR_VERSION_GET, &msg_info);<br />  <br />-    struct zxdh_msg_recviver_mem rsp_data = {<br />-            .recv_buffer = (void *)&reply_info,<br />-            .buffer_len = sizeof(struct zxdh_msg_reply_info),<br />-    };<br />-<br />     ret = zxdh_send_msg_to_riscv(dev, &msg_info, sizeof(struct zxdh_msg_info),<br />                 &reply_info, sizeof(struct zxdh_msg_reply_info),<br />                 ZXDH_MODULE_FLASH);<br />@@ -2053,10 +2050,8 @@ zxdh_dev_fw_version_get(struct rte_eth_dev *dev,<br />                 hw->vport.vport, ZXDH_FLASH_FIR_VERSION_GET);<br />         return -1;<br />     }<br />-    struct zxdh_msg_reply_body *ack_msg =<br />-             &(((struct zxdh_msg_reply_info *)rsp_data.recv_buffer)->reply_body);<br />  <br />-    memcpy(fw_ver, ack_msg->flash_msg.firmware_version, ZXDH_FWVERS_LEN);<br />+    memcpy(fw_ver, &reply_info.reply_body.flash_msg, ZXDH_FWVERS_LEN);<br />     snprintf(fw_version, ZXDH_FWVERS_LEN - 1, "%s", fw_ver);<br />  <br />     return 0;<br />diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c<br />index 96ad638e83..fac08fc30c 100644<br />--- a/drivers/net/zxdh/zxdh_msg.c<br />+++ b/drivers/net/zxdh/zxdh_msg.c<br />@@ -695,7 +695,7 @@ static uint16_t<br /> zxdh_bar_chan_sync_msg_reps_get(uint64_t subchan_addr,<br />         uint64_t recv_buffer, uint16_t buffer_len)<br /> {<br />-    struct zxdh_bar_msg_header msg_header = {0};<br />+    struct zxdh_bar_msg_header msg_header;<br />     uint16_t msg_id = 0;<br />     uint16_t msg_len = 0;<br />  <br />@@ -1147,13 +1147,9 @@ zxdh_send_msg_to_riscv(struct rte_eth_dev *dev, void *msg_req,<br />         result.recv_buffer = &reply_info;<br />         result.buffer_len = sizeof(reply_info);<br />     }<br />-    struct zxdh_msg_reply_head *reply_head =<br />-                &(((struct zxdh_msg_reply_info *)result.recv_buffer)->reply_head);<br />-    struct zxdh_msg_reply_body *reply_body =<br />-                &(((struct zxdh_msg_reply_info *)result.recv_buffer)->reply_body);<br />  <br />     struct zxdh_pci_bar_msg in = {<br />-        .payload_addr = &msg_req,<br />+        .payload_addr = msg_req,<br />         .payload_len = msg_req_len,<br />         .virt_addr = (uint64_t)(hw->bar_addr[ZXDH_BAR0_INDEX] + ZXDH_CTRLCH_OFFSET),<br />         .src = hw->is_pf ? ZXDH_MSG_CHAN_END_PF : ZXDH_MSG_CHAN_END_VF,<br />@@ -1166,15 +1162,6 @@ zxdh_send_msg_to_riscv(struct rte_eth_dev *dev, void *msg_req,<br />         PMD_MSG_LOG(ERR, "Failed to send sync messages or receive response");<br />         return -1;<br />     }<br />-    if (reply_head->flag != ZXDH_MSG_REPS_OK) {<br />-        PMD_MSG_LOG(ERR, "vf[%d] get pf reply failed: reply_head flag : 0x%x(0xff is OK).replylen %d",<br />-                hw->vport.vfid, reply_head->flag, reply_head->reps_len);<br />-        return -1;<br />-    }<br />-    if (reply_body->flag != ZXDH_REPS_SUCC) {<br />-        PMD_MSG_LOG(ERR, "vf[%d] msg processing failed", hw->vfid);<br />-        return -1;<br />-    }<br />  <br />     return 0;<br /> }<br />@@ -2043,7 +2030,8 @@ zxdh_vf_mtr_hw_profile_cfg(struct zxdh_hw *pf_hw __rte_unused,<br />         (struct zxdh_plcr_profile_cfg *)cfg_data;<br />     union zxdh_offload_profile_cfg *plcr_param = &zxdh_plcr_profile_cfg->plcr_param;<br />  <br />-    ret = zxdh_np_car_profile_cfg_set(vport,<br />+    ret = zxdh_np_car_profile_cfg_set(pf_hw->dev_id,<br />+        vport,<br />         zxdh_plcr_profile_cfg->car_type,<br />         zxdh_plcr_profile_cfg->packet_mode,<br />         zxdh_plcr_profile_cfg->hw_profile_id,<br />diff --git a/drivers/net/zxdh/zxdh_msg.h b/drivers/net/zxdh/zxdh_msg.h<br />index 58836bb4b7..ffe2c9472f 100644<br />--- a/drivers/net/zxdh/zxdh_msg.h<br />+++ b/drivers/net/zxdh/zxdh_msg.h<br />@@ -384,9 +384,9 @@ struct zxdh_mtr_profile_info {<br /> };<br />  <br /> struct zxdh_msg_reply_body {<br />-    enum zxdh_reps_flag flag;<br />+    uint8_t flag;<br />     union {<br />-        uint8_t reply_data[ZXDH_MSG_REPLY_BODY_MAX_LEN - sizeof(enum zxdh_reps_flag)];<br />+        uint8_t reply_data[ZXDH_MSG_REPLY_BODY_MAX_LEN - sizeof(uint8_t)];<br />         struct zxdh_hw_np_stats np_stats;<br />         struct zxdh_link_info_msg link_msg;<br />         struct zxdh_rss_reta rss_reta;<br />@@ -412,12 +412,12 @@ struct zxdh_vf_init_msg {<br />     uint8_t rss_enable;<br /> };<br />  <br />-struct zxdh_msg_head {<br />-    enum zxdh_msg_type msg_type;<br />+struct __rte_packed_begin zxdh_msg_head {<br />+    uint8_t msg_type;<br />     uint16_t  vport;<br />     uint16_t  vf_id;<br />     uint16_t pcieid;<br />-};<br />+} __rte_packed_end;<br />  <br /> struct zxdh_port_attr_set_msg {<br />     uint32_t mode;<br />@@ -455,7 +455,7 @@ struct zxdh_rss_enable {<br /> };<br />  <br /> struct zxdh_agent_msg_head {<br />-    enum zxdh_agent_msg_type msg_type;<br />+    uint8_t msg_type;<br />     uint8_t panel_id;<br />     uint8_t phyport;<br />     uint8_t rsv;<br />diff --git a/drivers/net/zxdh/zxdh_mtr.c b/drivers/net/zxdh/zxdh_mtr.c<br />index 3797a5b29b..809456d73f 100644<br />--- a/drivers/net/zxdh/zxdh_mtr.c<br />+++ b/drivers/net/zxdh/zxdh_mtr.c<br />@@ -281,7 +281,7 @@ zxdh_hw_profile_free_direct(struct rte_eth_dev *dev, ZXDH_PROFILE_TYPE car_type,<br /> {<br />     struct zxdh_hw *hw = dev->data->dev_private;<br />     uint16_t vport = hw->vport.vport;<br />-    int ret = zxdh_np_car_profile_id_delete(vport, car_type,<br />+    int ret = zxdh_np_car_profile_id_delete(hw->dev_id, vport, car_type,<br />             (uint64_t)hw_profile_id);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "port %u free hw profile %u failed", vport, hw_profile_id);<br />@@ -299,7 +299,7 @@ zxdh_hw_profile_alloc_direct(struct rte_eth_dev *dev, ZXDH_PROFILE_TYPE car_type<br />     uint64_t profile_id = HW_PROFILE_MAX;<br />     struct zxdh_hw *hw = dev->data->dev_private;<br />     uint16_t vport = hw->vport.vport;<br />-    int ret = zxdh_np_car_profile_id_add(vport, car_type, &profile_id);<br />+    int ret = zxdh_np_car_profile_id_add(hw->dev_id, vport, car_type, &profile_id);<br />  <br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "port %u alloc hw profile failed", vport);<br />@@ -551,7 +551,9 @@ zxdh_hw_profile_config_direct(struct rte_eth_dev *dev __rte_unused,<br />     struct zxdh_meter_profile *mp,<br />     struct rte_mtr_error *error)<br /> {<br />-    int ret = zxdh_np_car_profile_cfg_set(mp->hw_profile_owner_vport,<br />+    struct zxdh_hw *hw = dev->data->dev_private;<br />+    int ret = zxdh_np_car_profile_cfg_set(hw->dev_id,<br />+        mp->hw_profile_owner_vport,<br />         car_type, mp->profile.packet_mode,<br />         (uint32_t)hw_profile_id, &mp->plcr_param);<br />     if (ret) {<br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index ab8b3ae688..640c835b8e 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -2350,6 +2350,8 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />  <br />     rte_spinlock_init(&p_dev_info->dtb_spinlock.spinlock);<br />  <br />+    rte_spinlock_init(&p_dev_info->smmu0_spinlock.spinlock);<br />+<br />     for (i = 0; i < ZXDH_DTB_QUEUE_NUM_MAX; i++)<br />         rte_spinlock_init(&p_dev_info->dtb_queue_spinlock[i].spinlock);<br />  <br />@@ -3391,6 +3393,32 @@ zxdh_np_reg_read(uint32_t dev_id, uint32_t reg_no,<br />     return rc;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_reg_read32(uint32_t dev_id, uint32_t reg_no,<br />+    uint32_t m_offset, uint32_t n_offset, uint32_t *p_data)<br />+{<br />+    uint32_t rc = 0;<br />+    uint32_t addr = 0;<br />+    ZXDH_REG_T *p_reg_info = &g_dpp_reg_info[reg_no];<br />+    uint32_t p_buff[ZXDH_REG_DATA_MAX] = {0};<br />+    uint32_t reg_real_no = p_reg_info->reg_no;<br />+    uint32_t reg_type = p_reg_info->flags;<br />+    uint32_t reg_module = p_reg_info->module_no;<br />+<br />+    addr = zxdh_np_reg_get_reg_addr(reg_no, m_offset, n_offset);<br />+<br />+    if (reg_module == DTB4K) {<br />+        rc = p_reg_info->p_read_fun(dev_id, addr, p_data);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "p_reg_info->p_read_fun");<br />+    } else {<br />+        rc = zxdh_np_agent_channel_reg_read(dev_id, reg_type, reg_real_no, 4, addr, p_buff);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_channel_reg_read");<br />+        *p_data = p_buff[0];<br />+    }<br />+<br />+    return rc;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_queue_vm_info_get(uint32_t dev_id,<br />         uint32_t queue_id,<br />@@ -10542,9 +10570,9 @@ zxdh_np_se_done_status_check(uint32_t dev_id, uint32_t reg_no, uint32_t pos)<br />     uint32_t done_flag = 0;<br />  <br />     while (!done_flag) {<br />-        rc = zxdh_np_reg_read(dev_id, reg_no, 0, 0, &data);<br />+        rc = zxdh_np_reg_read32(dev_id, reg_no, 0, 0, &data);<br />         if (rc != 0) {<br />-            PMD_DRV_LOG(ERR, "reg_read fail!");<br />+            PMD_DRV_LOG(ERR, "reg_read32 fail!");<br />             return rc;<br />         }<br />  <br />@@ -10577,10 +10605,17 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />     uint32_t temp_data[4] = {0};<br />     uint32_t *p_temp_data = NULL;<br />     ZXDH_SMMU0_SMMU0_CPU_IND_CMD_T cpu_ind_cmd = {0};<br />+    ZXDH_SPINLOCK_T *p_ind_spinlock = NULL;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, ZXDH_DEV_SPINLOCK_T_SMMU0, &p_ind_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_ind_spinlock->spinlock);<br />  <br />     rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR, 0);<br />     if (rc != ZXDH_OK) {<br />         PMD_DRV_LOG(ERR, "se done status check failed, rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />         return ZXDH_ERR;<br />     }<br />  <br />@@ -10592,11 +10627,13 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         switch (rd_mode) {<br />         case ZXDH_ERAM128_OPR_128b:<br />             if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 PMD_DRV_LOG(ERR, "index 0x%x is invalid!", index);<br />                 return ZXDH_PAR_CHK_INVALID_INDEX;<br />             }<br />             if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 7) & ZXDH_ERAM128_BADDR_MASK;<br />@@ -10604,6 +10641,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_64b:<br />             if ((base_addr + (index >> 1)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 6) & ZXDH_ERAM128_BADDR_MASK;<br />@@ -10612,6 +10650,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_32b:<br />             if ((base_addr + (index >> 2)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 5) & ZXDH_ERAM128_BADDR_MASK;<br />@@ -10620,6 +10659,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_1b:<br />             if ((base_addr + (index >> 7)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = index & ZXDH_ERAM128_BADDR_MASK;<br />@@ -10638,10 +10678,12 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_128b:<br />             if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />                 PMD_DRV_LOG(ERR, "index 0x%x is invalid!", index);<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_PAR_CHK_INVALID_INDEX;<br />             }<br />             if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 7);<br />@@ -10650,6 +10692,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_64b:<br />             if ((base_addr + (index >> 1)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 6);<br />@@ -10658,6 +10701,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_32b:<br />             if ((base_addr + (index >> 2)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />                 PMD_DRV_LOG(ERR, "index out of range!");<br />+                rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />                 return ZXDH_ERR;<br />             }<br />             row_index = (index << 5);<br />@@ -10665,7 +10709,8 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />             break;<br />         case ZXDH_ERAM128_OPR_1b:<br />             PMD_DRV_LOG(ERR, "rd_clr_mode[%u] or rd_mode[%u] error!",<br />-            rd_clr_mode, rd_mode);<br />+                rd_clr_mode, rd_mode);<br />+            rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />             return ZXDH_ERR;<br />         default:<br />             break;<br />@@ -10680,12 +10725,14 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />             &cpu_ind_cmd);<br />     if (rc != ZXDH_OK) {<br />         PMD_DRV_LOG(ERR, "zxdh_np_reg_write failed, rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />         return ZXDH_ERR;<br />     }<br />  <br />     rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_CPU_IND_RD_DONER, 0);<br />     if (rc != ZXDH_OK) {<br />         PMD_DRV_LOG(ERR, "se done status check failed, rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />         return ZXDH_ERR;<br />     }<br />  <br />@@ -10698,6 +10745,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />             p_temp_data + 3 - i);<br />         if (rc != ZXDH_OK) {<br />             PMD_DRV_LOG(ERR, "zxdh_np_reg_write failed, rc=0x%x.", rc);<br />+            rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />             return ZXDH_ERR;<br />         }<br />     }<br />@@ -10736,6 +10784,8 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         }<br />     }<br />  <br />+    rte_spinlock_unlock(&p_ind_spinlock->spinlock);<br />+<br />     return rc;<br /> }<br />  <br />@@ -11012,7 +11062,8 @@ zxdh_np_stat_carc_queue_cfg_set(uint32_t dev_id,<br /> }<br />  <br /> uint32_t<br />-zxdh_np_car_profile_id_add(uint32_t vport_id,<br />+zxdh_np_car_profile_id_add(uint32_t dev_id,<br />+        uint32_t vport_id,<br />         uint32_t flags,<br />         uint64_t *p_profile_id)<br /> {<br />@@ -11027,7 +11078,7 @@ zxdh_np_car_profile_id_add(uint32_t vport_id,<br />         PMD_DRV_LOG(ERR, "profile_id point null!");<br />         return ZXDH_PAR_CHK_POINT_NULL;<br />     }<br />-    ret = zxdh_np_agent_channel_plcr_profileid_request(0, vport_id, flags, profile_id);<br />+    ret = zxdh_np_agent_channel_plcr_profileid_request(dev_id, vport_id, flags, profile_id);<br />  <br />     profile_id_h = *(profile_id + 1);<br />     profile_id_l = *profile_id;<br />@@ -11045,14 +11096,14 @@ zxdh_np_car_profile_id_add(uint32_t vport_id,<br /> }<br />  <br /> uint32_t<br />-zxdh_np_car_profile_cfg_set(uint32_t vport_id __rte_unused,<br />+zxdh_np_car_profile_cfg_set(uint32_t dev_id,<br />+        uint32_t vport_id __rte_unused,<br />         uint32_t car_type,<br />         uint32_t pkt_sign,<br />         uint32_t profile_id,<br />         void *p_car_profile_cfg)<br /> {<br />     uint32_t ret = 0;<br />-    uint32_t dev_id = 0;<br />  <br />     ret = zxdh_np_agent_channel_plcr_car_rate(dev_id, car_type,<br />         pkt_sign, profile_id, p_car_profile_cfg);<br />@@ -11065,11 +11116,10 @@ zxdh_np_car_profile_cfg_set(uint32_t vport_id __rte_unused,<br /> }<br />  <br /> uint32_t<br />-zxdh_np_car_profile_id_delete(uint32_t vport_id,<br />+zxdh_np_car_profile_id_delete(uint32_t dev_id, uint32_t vport_id,<br />     uint32_t flags, uint64_t profile_id)<br /> {<br />     uint32_t ret = 0;<br />-    uint32_t dev_id = 0;<br />     uint32_t profileid = profile_id & 0xFFFF;<br />  <br />     ret = zxdh_np_agent_channel_plcr_profileid_release(dev_id, vport_id, flags, profileid);<br />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index b1d8b1aef8..1b8f17474d 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -1934,15 +1934,17 @@ uint32_t zxdh_np_stat_ppu_cnt_get_ex(uint32_t dev_id,<br />             uint32_t clr_mode,<br />             uint32_t *p_data);<br /> uint32_t<br />-zxdh_np_car_profile_id_add(uint32_t vport_id,<br />+zxdh_np_car_profile_id_add(uint32_t dev_id,<br />+            uint32_t vport_id,<br />             uint32_t flags,<br />             uint64_t *p_profile_id);<br />-uint32_t zxdh_np_car_profile_cfg_set(uint32_t vport_id,<br />+uint32_t zxdh_np_car_profile_cfg_set(uint32_t dev_id,<br />+            uint32_t vport_id,<br />             uint32_t car_type,<br />             uint32_t pkt_sign,<br />             uint32_t profile_id,<br />             void *p_car_profile_cfg);<br />-uint32_t zxdh_np_car_profile_id_delete(uint32_t vport_id,<br />+uint32_t zxdh_np_car_profile_id_delete(uint32_t dev_id, uint32_t vport_id,<br />             uint32_t flags, uint64_t profile_id);<br /> uint32_t zxdh_np_stat_car_queue_cfg_set(uint32_t dev_id,<br />             uint32_t car_type,<br />diff --git a/drivers/net/zxdh/zxdh_pci.c b/drivers/net/zxdh/zxdh_pci.c<br />index 3d1a3ff0dd..4ff0f065df 100644<br />--- a/drivers/net/zxdh/zxdh_pci.c<br />+++ b/drivers/net/zxdh/zxdh_pci.c<br />@@ -27,6 +27,23 @@<br />         1ULL << ZXDH_F_NOTIFICATION_DATA | \<br />         1ULL << ZXDH_NET_F_MAC)<br />  <br />+#define ZXDH_PMD_DEFAULT_HOST_FEATURES   \<br />+    (1ULL << ZXDH_NET_F_MRG_RXBUF | \<br />+     1ULL << ZXDH_NET_F_STATUS    | \<br />+     1ULL << ZXDH_NET_F_MQ        | \<br />+     1ULL << ZXDH_F_ANY_LAYOUT    | \<br />+     1ULL << ZXDH_F_VERSION_1   | \<br />+     1ULL << ZXDH_F_RING_PACKED | \<br />+     1ULL << ZXDH_F_IN_ORDER    | \<br />+     1ULL << ZXDH_F_NOTIFICATION_DATA |\<br />+     1ULL << ZXDH_NET_F_MAC | \<br />+     1ULL << ZXDH_NET_F_CSUM |\<br />+     1ULL << ZXDH_NET_F_GUEST_CSUM |\<br />+     1ULL << ZXDH_NET_F_GUEST_TSO4 |\<br />+     1ULL << ZXDH_NET_F_GUEST_TSO6 |\<br />+     1ULL << ZXDH_NET_F_HOST_TSO4 |\<br />+     1ULL << ZXDH_NET_F_HOST_TSO6)<br />+<br /> static void<br /> zxdh_read_dev_config(struct zxdh_hw *hw, size_t offset,<br />         void *dst, int32_t length)<br />@@ -391,13 +408,18 @@ zxdh_pci_read_dev_config(struct zxdh_hw *hw, size_t offset, void *dst, int32_t l<br />     ZXDH_VTPCI_OPS(hw)->read_dev_cfg(hw, offset, dst, length);<br /> }<br />  <br />+void zxdh_pci_write_dev_config(struct zxdh_hw *hw, size_t offset, const void *src, int32_t length)<br />+{<br />+    ZXDH_VTPCI_OPS(hw)->write_dev_cfg(hw, offset, src, length);<br />+}<br />+<br /> void<br /> zxdh_get_pci_dev_config(struct zxdh_hw *hw)<br /> {<br />     uint64_t guest_features = 0;<br />     uint64_t nego_features = 0;<br />  <br />-    hw->host_features = zxdh_pci_get_features(hw);<br />+    hw->host_features = ZXDH_PMD_DEFAULT_HOST_FEATURES;<br />  <br />     guest_features = (uint64_t)ZXDH_PMD_DEFAULT_GUEST_FEATURES;<br />     nego_features = guest_features & hw->host_features;<br />diff --git a/drivers/net/zxdh/zxdh_pci.h b/drivers/net/zxdh/zxdh_pci.h<br />index 9b8bef6c09..a1834f6615 100644<br />--- a/drivers/net/zxdh/zxdh_pci.h<br />+++ b/drivers/net/zxdh/zxdh_pci.h<br />@@ -162,7 +162,7 @@ void zxdh_pci_read_dev_config(struct zxdh_hw *hw, size_t offset,<br />  <br /> int32_t zxdh_read_pci_caps(struct rte_pci_device *dev, struct zxdh_hw *hw);<br /> void zxdh_get_pci_dev_config(struct zxdh_hw *hw);<br />-<br />+void zxdh_pci_write_dev_config(struct zxdh_hw *hw, size_t offset, const void *src, int32_t length);<br /> uint16_t zxdh_pci_get_features(struct zxdh_hw *hw);<br /> enum zxdh_msix_status zxdh_pci_msix_detect(struct rte_pci_device *dev);<br /> uint8_t zxdh_pci_isr(struct zxdh_hw *hw);<br />diff --git a/drivers/net/zxdh/zxdh_rxtx.c b/drivers/net/zxdh/zxdh_rxtx.c<br />index 1921a23f25..4c79b9e75b 100644<br />--- a/drivers/net/zxdh/zxdh_rxtx.c<br />+++ b/drivers/net/zxdh/zxdh_rxtx.c<br />@@ -818,9 +818,14 @@ zxdh_recv_pkts_packed(void *rx_queue, struct rte_mbuf **rx_pkts,<br />         seg_num  = header->type_hdr.num_buffers;<br />  <br />         /* Private queue only handle type hdr */<br />-        hdr_size = ZXDH_TYPE_HDR_SIZE;<br />-        rxm->pkt_len = ((header->type_hdr.port & 0x7f) << 8) +<br />-                            header->type_hdr.pd_len;<br />+        hdr_size = header->type_hdr.pd_len << 1;<br />+        if (unlikely(hdr_size > lens[i] || hdr_size < ZXDH_TYPE_HDR_SIZE)) {<br />+            PMD_RX_LOG(ERR, "hdr_size:%u is invalid", hdr_size);<br />+            rte_pktmbuf_free(rxm);<br />+            rxvq->stats.errors++;<br />+            rxvq->stats.invalid_hdr_len_err++;<br />+            continue;<br />+        }<br />         rxm->data_off += hdr_size;<br />         rxm->nb_segs = seg_num;<br />         rxm->ol_flags = 0;<br />diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c<br />index 253d9ce438..ab91d51948 100644<br />--- a/drivers/net/zxdh/zxdh_tables.c<br />+++ b/drivers/net/zxdh/zxdh_tables.c<br />@@ -8,14 +8,7 @@<br /> #include "zxdh_tables.h" <br /> #include "zxdh_logs.h" <br />  <br />-#define ZXDH_SDT_VPORT_ATT_TABLE          1<br />-#define ZXDH_SDT_PANEL_ATT_TABLE          2<br />-#define ZXDH_SDT_RSS_ATT_TABLE            3<br />-#define ZXDH_SDT_VLAN_ATT_TABLE           4<br />-#define ZXDH_SDT_BROCAST_ATT_TABLE        6<br />-#define ZXDH_SDT_UNICAST_ATT_TABLE        10<br />-#define ZXDH_SDT_MULTICAST_ATT_TABLE      11<br />-#define ZXDH_SDT_PORT_VLAN_ATT_TABLE      16<br />+<br />  <br /> #define ZXDH_MAC_HASH_INDEX_BASE          64<br /> #define ZXDH_MAC_HASH_INDEX(index)        (ZXDH_MAC_HASH_INDEX_BASE + (index))<br />@@ -40,15 +33,16 @@ zxdh_set_port_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_attr_tab<br /> {<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />     int ret = 0;<br />  <br />-    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vport_num.vfid, (uint32_t *)port_attr};<br />+    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid, (uint32_t *)port_attr};<br />     ZXDH_DTB_USER_ENTRY_T user_entry_write = {ZXDH_SDT_VPORT_ATT_TABLE, (void *)&entry};<br />  <br />     ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />                 dtb_data->queueid, 1, &user_entry_write);<br />     if (ret != 0)<br />-        PMD_DRV_LOG(ERR, "write vport_att failed vfid:%d failed", vport_num.vfid);<br />+        PMD_DRV_LOG(ERR, "write vport_att failed vfid:%d failed", vfid);<br />  <br />     return ret;<br /> }<br />@@ -72,6 +66,7 @@ zxdh_port_attr_init(struct rte_eth_dev *dev)<br />         port_attr.mtu = dev->data->mtu;<br />         port_attr.mtu_enable = 1;<br />         port_attr.is_up = 0;<br />+        port_attr.hash_search_index = hw->hash_search_index;<br />         if (!port_attr.rss_enable)<br />             port_attr.port_base_qid = 0;<br />  <br />@@ -144,6 +139,7 @@ int zxdh_panel_table_init(struct rte_eth_dev *dev)<br />     panel.pf_vfid = zxdh_vport_to_vfid(hw->vport);<br />     panel.mtu_enable = 1;<br />     panel.mtu = dev->data->mtu;<br />+    panel.port_vfid_1588 = panel.pf_vfid;<br />  <br />     ZXDH_DTB_ERAM_ENTRY_INFO_T panel_entry = {<br />         .index = hw->phyport,<br />@@ -212,13 +208,14 @@ zxdh_get_port_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_attr_tab<br /> {<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />-    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vport_num.vfid, (uint32_t *)port_attr};<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />+    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid, (uint32_t *)port_attr};<br />     ZXDH_DTB_USER_ENTRY_T user_entry_get = {ZXDH_SDT_VPORT_ATT_TABLE, &entry};<br />     int ret;<br />  <br />     ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &user_entry_get, 1);<br />     if (ret != 0)<br />-        PMD_DRV_LOG(ERR, "get port_attr vfid:%d failed, ret:%d", vport_num.vfid, ret);<br />+        PMD_DRV_LOG(ERR, "get port_attr vfid:%d failed, ret:%d", vfid, ret);<br />  <br />     return ret;<br /> }<br />@@ -229,7 +226,8 @@ zxdh_delete_port_attr(struct zxdh_hw *hw, uint16_t vport,<br /> {<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />-    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vport_num.vfid, (uint32_t *)port_attr};<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />+    ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid, (uint32_t *)port_attr};<br />     ZXDH_DTB_USER_ENTRY_T user_entry = {<br />         .sdt_no = ZXDH_SDT_VPORT_ATT_TABLE,<br />         .p_entry_data = (void *)&entry<br />@@ -247,9 +245,9 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />     struct zxdh_mac_unicast_table unicast_table = {0};<br />     struct zxdh_mac_multicast_table multicast_table = {0};<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />     uint32_t ret;<br />     uint16_t group_id = 0;<br />-    uint16_t vfid = vport_num.vfid;<br />  <br />     if (rte_is_unicast_ether_addr(addr)) {<br />         rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr));<br />@@ -351,15 +349,17 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />     struct zxdh_mac_unicast_table unicast_table = {0};<br />     struct zxdh_mac_multicast_table multicast_table = {0};<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />-    uint32_t ret, del_flag = 0;<br />-    uint16_t group_id = 0;<br />     union zxdh_virport_num port = (union zxdh_virport_num)vport;<br />     uint16_t vfid = zxdh_vport_to_vfid(port);<br />+    uint32_t ret, del_flag = 0;<br />+    uint16_t group_id = 0;<br />  <br />     if (rte_is_unicast_ether_addr(addr)) {<br />         rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr));<br />         unicast_table.key.sriov_vlan_id = srv_vlanid;<br />         unicast_table.key.sriov_vlan_tpid = srv_tpid;<br />+        unicast_table.entry.hit_flag = 0;<br />+        unicast_table.entry.vfid = rte_cpu_to_be_16(vfid & 0x7ff);<br />  <br />         ZXDH_DTB_HASH_ENTRY_INFO_T dtb_hash_entry = {<br />             .p_actu_key = (uint8_t *)&unicast_table.key,<br />@@ -800,6 +800,7 @@ zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     struct zxdh_rss_to_vqid_table rss_vqid = {0};<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />     int ret = 0;<br />  <br />     for (uint16_t i = 0; i < RTE_ETH_RSS_RETA_SIZE_256 / 8; i++) {<br />@@ -820,7 +821,7 @@ zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />             rss_vqid.vqm_qid[0] |= 0x8000;<br /> #endif<br />         ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {<br />-            .index = vport_num.vfid * 32 + i,<br />+            .index = vfid * 32 + i,<br />             .p_data = (uint32_t *)&rss_vqid<br />         };<br />         ZXDH_DTB_USER_ENTRY_T user_entry_write = {<br />@@ -830,7 +831,7 @@ zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />         ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />                     dtb_data->queueid, 1, &user_entry_write);<br />         if (ret != 0) {<br />-            PMD_DRV_LOG(ERR, "write rss base qid failed vfid:%d", vport_num.vfid);<br />+            PMD_DRV_LOG(ERR, "write rss base qid failed vfid:%d", vfid);<br />             return ret;<br />         }<br />     }<br />@@ -843,16 +844,17 @@ zxdh_rss_table_get(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />     struct zxdh_rss_to_vqid_table rss_vqid = {0};<br />     union zxdh_virport_num vport_num = (union zxdh_virport_num)vport;<br />+    uint16_t vfid = zxdh_vport_to_vfid(vport_num);<br />     int ret = 0;<br />  <br />     for (uint16_t i = 0; i < RTE_ETH_RSS_RETA_SIZE_256 / 8; i++) {<br />-        ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vport_num.vfid * 32 + i, (uint32_t *)&rss_vqid};<br />+        ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid * 32 + i, (uint32_t *)&rss_vqid};<br />         ZXDH_DTB_USER_ENTRY_T user_entry = {ZXDH_SDT_RSS_ATT_TABLE, &entry};<br />  <br />         ret = zxdh_np_dtb_table_entry_get(hw->slot_id,<br />                     dtb_data->queueid, &user_entry, 1);<br />         if (ret != 0) {<br />-            PMD_DRV_LOG(ERR, "get rss tbl failed, vfid:%d", vport_num.vfid);<br />+            PMD_DRV_LOG(ERR, "get rss tbl failed, vfid:%d", vfid);<br />             return -1;<br />         }<br />  <br />diff --git a/drivers/net/zxdh/zxdh_tables.h b/drivers/net/zxdh/zxdh_tables.h<br />index 2f2ada3a9f..cb34e38be8 100644<br />--- a/drivers/net/zxdh/zxdh_tables.h<br />+++ b/drivers/net/zxdh/zxdh_tables.h<br />@@ -9,7 +9,13 @@<br />  <br /> /* eram */<br /> #define ZXDH_SDT_VPORT_ATT_TABLE          1<br />-<br />+#define ZXDH_SDT_PANEL_ATT_TABLE          2<br />+#define ZXDH_SDT_RSS_ATT_TABLE            3<br />+#define ZXDH_SDT_VLAN_ATT_TABLE           4<br />+#define ZXDH_SDT_BROCAST_ATT_TABLE        6<br />+#define ZXDH_SDT_UNICAST_ATT_TABLE        10<br />+#define ZXDH_SDT_MULTICAST_ATT_TABLE      11<br />+#define ZXDH_SDT_PORT_VLAN_ATT_TABLE      16<br /> /* hash */<br /> #define ZXDH_SDT_L2_ENTRY_TABLE0          64<br /> #define ZXDH_SDT_L2_ENTRY_TABLE1          65<br />@@ -80,8 +86,6 @@<br /> #define ZXDH_MTR_STATS_EGRESS_BASE           0x7481<br /> #define ZXDH_MTR_STATS_INGRESS_BASE          0x7C81<br />  <br />-extern struct zxdh_dtb_shared_data g_dtb_data;<br />-<br /> struct zxdh_port_vlan_table {<br /> #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN<br />     uint16_t business_vlan_tpid:16;<br />@@ -233,19 +237,51 @@ struct zxdh_port_attr_table {<br /> };<br />  <br /> struct zxdh_panel_table {<br />-    uint16_t port_vfid_1588 : 11,<br />-             rsv2           : 5;<br />-    uint16_t pf_vfid        : 11,<br />-             rsv1           : 1,<br />-             enable_1588_tc : 2,<br />-             trust_mode     : 1,<br />-             hit_flag       : 1;<br />-    uint32_t mtu            : 16,<br />-             mtu_enable     : 1,<br />-             rsv            : 3,<br />-             tm_base_queue  : 12;<br />-    uint32_t rsv_1;<br />-    uint32_t rsv_2;<br />+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN<br />+    uint16_t port_vfid_1588   : 11,<br />+                rsv2             : 5;<br />+    uint16_t rsv1             : 11,<br />+             tm_shape_enable  : 1,<br />+             enable_1588_tc   : 2,<br />+             trust_mode       : 1,<br />+             hit_flag         : 1;<br />+    uint16_t mtu              : 16;<br />+    uint16_t mtu_enable       : 1,<br />+             rsv              : 3,<br />+             tm_base_queue    : 12;<br />+    uint16_t lacp_pf_qid      : 12,<br />+                rsv5             : 4;<br />+    uint16_t lacp_pf_vfid     : 11,<br />+                rsv6             : 2,<br />+                member_port_up   : 1,<br />+                bond_link_up     : 1,<br />+                hw_bond_enable   : 1;<br />+    uint16_t rsv3             : 16;<br />+    uint16_t pf_vfid          : 11,<br />+                rsv4             : 5;<br />+#else<br />+    uint16_t rsv1             : 11,<br />+                tm_shape_enable  : 1,<br />+                enable_1588_tc   : 2,<br />+                trust_mode       : 1,<br />+                hit_flag         : 1;<br />+    uint16_t port_vfid_1588   : 11,<br />+                rsv2             : 5;<br />+    uint16_t mtu_enable       : 1,<br />+                rsv              : 3,<br />+                tm_base_queue    : 12;<br />+    uint16_t mtu              : 16;<br />+    uint16_t lacp_pf_vfid     : 11,<br />+                rsv6             : 2,<br />+                member_port_up   : 1,<br />+                bond_link_up     : 1,<br />+                hw_bond_enable   : 1;<br />+    uint16_t lacp_pf_qid      : 12,<br />+                rsv5             : 4;<br />+    uint16_t pf_vfid          : 11,<br />+                rsv4             : 5;<br />+    uint16_t rsv3             : 16;<br />+#endif<br /> }; /* 16B */<br />  <br /> struct zxdh_mac_unicast_key {<br />--  <br />2.27.0<br />