Add (np)network processor registers read/write interfaces.<br /> <br />Signed-off-by: Bingbin Chen <chen.bingbin@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_np.c | 969 +++++++++++++++++++++++++++++--------<br /> drivers/net/zxdh/zxdh_np.h |  95 +++-<br /> 2 files changed, 845 insertions(+), 219 deletions(-)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index 28c9e4c1c1..946e987a34 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -15,7 +15,6 @@<br /> #include "zxdh_logs.h" <br /> #include "zxdh_msg.h" <br />  <br />-static uint64_t g_np_bar_offset;<br /> static ZXDH_DEV_MGR_T g_dev_mgr;<br /> static ZXDH_SDT_MGR_T g_sdt_mgr;<br /> static uint32_t g_dpp_dtb_int_enable;<br />@@ -23,14 +22,185 @@ static uint32_t g_table_type[ZXDH_DEV_CHANNEL_MAX][ZXDH_DEV_SDT_ID_MAX];<br /> static ZXDH_PPU_CLS_BITMAP_T g_ppu_cls_bit_map[ZXDH_DEV_CHANNEL_MAX];<br /> static ZXDH_DTB_MGR_T *p_dpp_dtb_mgr[ZXDH_DEV_CHANNEL_MAX];<br /> static ZXDH_RISCV_DTB_MGR *p_riscv_dtb_queue_mgr[ZXDH_DEV_CHANNEL_MAX];<br />-static ZXDH_TLB_MGR_T *g_p_dpp_tlb_mgr[ZXDH_DEV_CHANNEL_MAX];<br />-static ZXDH_REG_T g_dpp_reg_info[4];<br />-static ZXDH_DTB_TABLE_T g_dpp_dtb_table_info[4];<br /> static ZXDH_SDT_TBL_DATA_T g_sdt_info[ZXDH_DEV_CHANNEL_MAX][ZXDH_DEV_SDT_ID_MAX];<br />-static ZXDH_PPU_STAT_CFG_T g_ppu_stat_cfg;<br />+static ZXDH_PPU_STAT_CFG_T g_ppu_stat_cfg[ZXDH_DEV_CHANNEL_MAX];<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_cmd_reg[] = {<br />+    {"cpu_ind_rw", ZXDH_FIELD_FLAG_RW, 31, 1, 0x0, 0x0},<br />+    {"cpu_ind_rd_mode", ZXDH_FIELD_FLAG_RW, 30, 1, 0x0, 0x0},<br />+    {"cpu_req_mode", ZXDH_FIELD_FLAG_RW, 27, 2, 0x0, 0x0},<br />+    {"cpu_ind_addr", ZXDH_FIELD_FLAG_RW, 25, 26, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rd_done_reg[] = {<br />+    {"cpu_ind_rd_done", ZXDH_FIELD_FLAG_RO, 0, 1, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat0_reg[] = {<br />+    {"cpu_ind_rdat0", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat1_reg[] = {<br />+    {"cpu_ind_rdat1", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat2_reg[] = {<br />+    {"cpu_ind_rdat2", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat3_reg[] = {<br />+    {"cpu_ind_rdat3", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_smmu0_smmu0_wr_arb_cpu_rdy_reg[] = {<br />+    {"wr_arb_cpu_rdy", ZXDH_FIELD_FLAG_RO, 0, 1, 0x1, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_dtb4k_dtb_enq_info_queue_buf_space_left_0_127_reg[] = {<br />+    {"info_queue_buf_space_left", ZXDH_FIELD_FLAG_RO, 5, 6, 0x20, 0x0},<br />+};<br />+<br />+static ZXDH_FIELD_T g_dtb4k_dtb_enq_cfg_epid_v_func_num_0_127_reg[] = {<br />+    {"dbi_en", ZXDH_FIELD_FLAG_RW, 31, 1, 0x0, 0x0},<br />+    {"queue_en", ZXDH_FIELD_FLAG_RW, 30, 1, 0x0, 0x0},<br />+    {"cfg_epid", ZXDH_FIELD_FLAG_RW, 27, 4, 0x0, 0x0},<br />+    {"cfg_vfunc_num", ZXDH_FIELD_FLAG_RW, 23, 8, 0x0, 0x0},<br />+    {"cfg_vector", ZXDH_FIELD_FLAG_RW, 14, 7, 0x0, 0x0},<br />+    {"cfg_func_num", ZXDH_FIELD_FLAG_RW, 7, 3, 0x0, 0x0},<br />+    {"cfg_vfunc_active", ZXDH_FIELD_FLAG_RW, 0, 1, 0x0, 0x0},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_ddr_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"rw_len", 123, 2},<br />+    {"v46_flag", 121, 1},<br />+    {"lpm_wr_vld", 120, 1},<br />+    {"baddr", 119, 20},<br />+    {"ecc_en", 99, 1},<br />+    {"rw_addr", 29, 30},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_1_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+    {"data_h", 0, 1},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_64_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+    {"data_h", 63, 32},<br />+    {"data_l", 31, 32},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_128_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_zcam_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"ram_reg_flag", 123, 1},<br />+    {"zgroup_id", 122, 2},<br />+    {"zblock_id", 120, 3},<br />+    {"zcell_id", 117, 2},<br />+    {"mask", 115, 4},<br />+    {"sram_addr", 111, 9},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_etcam_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"block_sel", 123, 3},<br />+    {"init_en", 120, 1},<br />+    {"row_or_col_msk", 119, 1},<br />+    {"vben", 118, 1},<br />+    {"reg_tcam_flag", 117, 1},<br />+    {"uload", 116, 8},<br />+    {"rd_wr", 108, 1},<br />+    {"wr_mode", 107, 8},<br />+    {"data_or_mask", 99, 1},<br />+    {"addr", 98, 9},<br />+    {"vbit", 89, 8},<br />+};<br />+<br />+static ZXDH_DTB_FIELD_T g_dtb_mc_hash_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"std_h", 63, 32},<br />+    {"std_l", 31, 32},<br />+};<br />+<br />+static ZXDH_DTB_TABLE_T g_dpp_dtb_table_info[] = {<br />+    {<br />+        "ddr",<br />+        ZXDH_DTB_TABLE_DDR,<br />+        8,<br />+        g_dtb_ddr_table_cmd_info,<br />+    },<br />+    {<br />+        "eram 1 bit",<br />+        ZXDH_DTB_TABLE_ERAM_1,<br />+        8,<br />+        g_dtb_eram_table_cmd_1_info,<br />+    },<br />+    {<br />+        "eram 64 bit",<br />+        ZXDH_DTB_TABLE_ERAM_64,<br />+        9,<br />+        g_dtb_eram_table_cmd_64_info,<br />+    },<br />+    {<br />+        "eram 128 bit",<br />+        ZXDH_DTB_TABLE_ERAM_128,<br />+        7,<br />+        g_dtb_eram_table_cmd_128_info,<br />+    },<br />+    {<br />+        "zcam",<br />+        ZXDH_DTB_TABLE_ZCAM,<br />+        8,<br />+        g_dtb_zcam_table_cmd_info,<br />+    },<br />+    {<br />+        "etcam",<br />+        ZXDH_DTB_TABLE_ETCAM,<br />+        13,<br />+        g_dtb_etcam_table_cmd_info,<br />+    },<br />+    {<br />+        "mc_hash",<br />+        ZXDH_DTB_TABLE_MC_HASH,<br />+        4,<br />+        g_dtb_mc_hash_table_cmd_info<br />+    },<br />+};<br />  <br /> #define ZXDH_SDT_MGR_PTR_GET()    (&g_sdt_mgr)<br /> #define ZXDH_SDT_SOFT_TBL_GET(id) (g_sdt_mgr.sdt_tbl_array[id])<br />+#define ZXDH_DEV_INFO_GET(id) (g_dev_mgr.p_dev_array[id])<br />+<br />+#define ZXDH_DTB_LEN(cmd_type, int_en, data_len) \<br />+    (((data_len) & 0x3ff) | \<br />+    ((int_en) << 29) | \<br />+    ((cmd_type) << 30))<br />  <br /> #define ZXDH_COMM_MASK_BIT(_bitnum_)\<br />     (0x1U << (_bitnum_))<br />@@ -47,8 +217,7 @@ static ZXDH_PPU_STAT_CFG_T g_ppu_stat_cfg;<br /> #define ZXDH_COMM_CHECK_DEV_POINT(dev_id, point)\<br /> do {\<br />     if (NULL == (point)) {\<br />-        PMD_DRV_LOG(ERR, "dev: %d ZXIC %s:%d[Error:POINT NULL] !"\<br />-            "FUNCTION : %s!", (dev_id), __FILE__, __LINE__, __func__);\<br />+        PMD_DRV_LOG(ERR, "dev: %d [POINT NULL]", (dev_id));\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />@@ -56,33 +225,22 @@ do {\<br /> #define ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "dev: %d ZXIC  %s:%d !"\<br />-        "-- %s Call %s Fail!", (dev_id), __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "dev: %d, %s failed!", (dev_id), becall);\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />  <br />-#define ZXDH_COMM_CHECK_POINT_NO_ASSERT(point)\<br />-do {\<br />-    if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] ! FUNCTION : %s!",\<br />-        __FILE__, __LINE__, __func__);\<br />-    } \<br />-} while (0)<br />-<br /> #define ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC  %s:%d !-- %s Call %s"\<br />-        " Fail!", __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "%s failed!", becall);\<br />     } \<br /> } while (0)<br />  <br /> #define ZXDH_COMM_CHECK_RC(rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC  %s:%d!-- %s Call %s "\<br />-        "Fail!", __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "%s failed!", becall);\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />@@ -90,34 +248,28 @@ do {\<br /> #define ZXDH_COMM_CHECK_POINT(point)\<br /> do {\<br />     if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] ! FUNCTION : %s!",\<br />-        __FILE__, __LINE__, __func__);\<br />+        PMD_DRV_LOG(ERR, "[POINT NULL]");\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />  <br />+static inline uint16_t zxdh_np_comm_convert16(uint16_t w_data)<br />+{<br />+    return ((w_data) & 0xff) << 8 | ((w_data) & 0xff00) >> 8;<br />+}<br />  <br />-#define ZXDH_COMM_CHECK_POINT_MEMORY_FREE(point, ptr)\<br />-do {\<br />-    if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] !"\<br />-        "FUNCTION : %s!", __FILE__, __LINE__, __func__);\<br />-        rte_free(ptr);\<br />-        RTE_ASSERT(0);\<br />-    } \<br />-} while (0)<br />-<br />-#define ZXDH_COMM_CHECK_RC_MEMORY_FREE_NO_ASSERT(rc, becall, ptr)\<br />-do {\<br />-    if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXICP  %s:%d, %s Call"\<br />-        " %s Fail!", __FILE__, __LINE__, __func__, becall);\<br />-        rte_free(ptr);\<br />-    } \<br />-} while (0)<br />+static inline uint32_t<br />+zxdh_np_comm_convert32(uint32_t dw_data)<br />+{<br />+    return ((dw_data) & 0xff) << 24 | ((dw_data) & 0xff00) << 8 |<br />+        ((dw_data) & 0xff0000) >> 8 | ((dw_data) & 0xff000000) >> 24;<br />+}<br />  <br /> #define ZXDH_COMM_CONVERT16(w_data) \<br />-            (((w_data) & 0xff) << 8)<br />+            zxdh_np_comm_convert16(w_data)<br />+<br />+#define ZXDH_COMM_CONVERT32(w_data) \<br />+            zxdh_np_comm_convert32(w_data)<br />  <br /> #define ZXDH_DTB_TAB_UP_WR_INDEX_GET(DEV_ID, QUEUE_ID)       \<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.wr_index)<br />@@ -143,7 +295,7 @@ do {\<br /> #define ZXDH_DTB_QUEUE_INIT_FLAG_GET(DEV_ID, QUEUE_ID)       \<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].init_flag)<br />  <br />-ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />+static ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />     {"cara_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"cara_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"cara_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -155,7 +307,7 @@ ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />     {"cara_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />+static ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />     {"carb_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"carb_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"carb_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -167,7 +319,7 @@ ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />     {"carb_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />+static ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />     {"carc_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"carc_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"carc_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -179,7 +331,7 @@ ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />     {"carc_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg[] = {<br />+static ZXDH_FIELD_T g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg[] = {<br />     {"pktrx_glbal_cfg_0", ZXDH_FIELD_FLAG_RW, 31, 32, 0x0, 0x0},<br /> };<br />  <br />@@ -215,7 +367,7 @@ zxdh_np_comm_swap(uint8_t *p_uc_data, uint32_t dw_byte_len)<br />     uc_byte_mode = dw_byte_len % 4 & 0xff;<br />  <br />     for (i = 0; i < dw_byte_num; i++) {<br />-        (*p_dw_tmp) = ZXDH_COMM_CONVERT16(*p_dw_tmp);<br />+        (*p_dw_tmp) = ZXDH_COMM_CONVERT32(*p_dw_tmp);<br />         p_dw_tmp++;<br />     }<br />  <br />@@ -239,6 +391,397 @@ zxdh_np_dev_init(void)<br />     return 0;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dev_read_channel(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_info = ZXDH_DEV_INFO_GET(dev_id);<br />+<br />+    if (p_dev_info == NULL) {<br />+        PMD_DRV_LOG(ERR, "Error: Channel[%d] dev is not exist",<br />+            dev_id);<br />+        return ZXDH_ERR;<br />+    }<br />+    if (p_dev_info->access_type == ZXDH_DEV_ACCESS_TYPE_PCIE) {<br />+        p_dev_info->p_pcie_read_fun(dev_id, addr, size, p_data);<br />+    } else {<br />+        PMD_DRV_LOG(ERR, "Dev access type[ %d ] is invalid",<br />+            p_dev_info->access_type);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_dev_write_channel(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_info = ZXDH_DEV_INFO_GET(dev_id);<br />+<br />+    if (p_dev_info == NULL) {<br />+        PMD_DRV_LOG(ERR, "Error: Channel[%d] dev is not exist",<br />+            dev_id);<br />+        return ZXDH_ERR;<br />+    }<br />+    if (p_dev_info->access_type == ZXDH_DEV_ACCESS_TYPE_PCIE) {<br />+        p_dev_info->p_pcie_write_fun(dev_id, addr, size, p_data);<br />+    } else {<br />+        PMD_DRV_LOG(ERR, "Dev access type[ %d ] is invalid",<br />+            p_dev_info->access_type);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static void<br />+zxdh_np_pci_write32(uint64_t abs_addr, uint32_t *p_data)<br />+{<br />+    uint32_t data = 0;<br />+    uint64_t addr = 0;<br />+<br />+    data = *p_data;<br />+<br />+    if (zxdh_np_comm_is_big_endian())<br />+        data = ZXDH_COMM_CONVERT32(data);<br />+<br />+    addr = abs_addr + ZXDH_SYS_VF_NP_BASE_OFFSET;<br />+    *((volatile uint32_t *)addr) = data;<br />+}<br />+<br />+static void<br />+zxdh_np_pci_read32(uint64_t abs_addr, uint32_t *p_data)<br />+{<br />+    uint32_t data = 0;<br />+    uint64_t addr = 0;<br />+<br />+    addr = abs_addr + ZXDH_SYS_VF_NP_BASE_OFFSET;<br />+    data = *((volatile uint32_t *)addr);<br />+<br />+    if (zxdh_np_comm_is_big_endian())<br />+        data = ZXDH_COMM_CONVERT32(data);<br />+<br />+    *p_data = data;<br />+}<br />+<br />+static uint64_t<br />+zxdh_np_dev_get_pcie_addr(uint32_t dev_id)<br />+{<br />+    ZXDH_DEV_MGR_T *p_dev_mgr = NULL;<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_mgr = &g_dev_mgr;<br />+    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+<br />+    if (p_dev_info == NULL)<br />+        return ZXDH_DEV_TYPE_INVALID;<br />+<br />+    return p_dev_info->pcie_addr;<br />+}<br />+<br />+static void<br />+zxdh_np_dev_pcie_default_write(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    uint32_t i;<br />+    uint64_t abs_addr = 0;<br />+<br />+    abs_addr = zxdh_np_dev_get_pcie_addr(dev_id) + addr;<br />+<br />+    for (i = 0; i < size; i++)<br />+        zxdh_np_pci_write32(abs_addr + 4 * i, p_data + i);<br />+}<br />+<br />+static void<br />+zxdh_np_dev_pcie_default_read(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    uint32_t i;<br />+    uint64_t abs_addr = 0;<br />+<br />+    abs_addr = zxdh_np_dev_get_pcie_addr(dev_id) + addr;<br />+<br />+    for (i = 0; i < size; i++)<br />+        zxdh_np_pci_read32(abs_addr + 4 * i, p_data + i);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_read(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_dev_read_channel(dev_id, addr, 1, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_write(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_dev_write_channel(dev_id, addr, 1, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_se_smmu0_write(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_write(dev_id, addr, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_se_smmu0_read(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_read(dev_id, addr, p_data);<br />+}<br />+<br />+static ZXDH_REG_T g_dpp_reg_info[] = {<br />+    {<br />+        .reg_name = "cpu_ind_cmd",<br />+        .reg_no = 669,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x14,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 4,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_cmd_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rd_done",<br />+        .reg_no = 670,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x40,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rd_done_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat0",<br />+        .reg_no = 671,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x44,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat0_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat1",<br />+        .reg_no = 672,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x48,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat1_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat2",<br />+        .reg_no = 673,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x4c,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat2_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat3",<br />+        .reg_no = 674,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x50,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat3_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "wr_arb_cpu_rdy",<br />+        .reg_no = 676,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x10c,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_wr_arb_cpu_rdy_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "info_queue_buf_space_left_0_127",<br />+        .reg_no = 820,<br />+        .module_no = DTB4K,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = ZXDH_SYS_DTB_BASE_ADDR + ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0xc,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 127 + 1,<br />+        .m_step = 0,<br />+        .n_step = 32,<br />+        .field_num = 1,<br />+        .p_fields = g_dtb4k_dtb_enq_info_queue_buf_space_left_0_127_reg,<br />+        .p_write_fun = zxdh_np_write,<br />+        .p_read_fun = zxdh_np_read,<br />+    },<br />+    {<br />+        .reg_name = "cfg_epid_v_func_num_0_127",<br />+        .reg_no = 821,<br />+        .module_no = DTB4K,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = ZXDH_SYS_DTB_BASE_ADDR + ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x10,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 127 + 1,<br />+        .m_step = 0,<br />+        .n_step = 32,<br />+        .field_num = 7,<br />+        .p_fields = g_dtb4k_dtb_enq_cfg_epid_v_func_num_0_127_reg,<br />+        .p_write_fun = zxdh_np_write,<br />+        .p_read_fun = zxdh_np_read,<br />+    },<br />+    {<br />+        .reg_name = "cara_queue_ram0_159_0",<br />+        .reg_no = 721,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x000000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0x7FFF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_cara_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "carb_queue_ram0_159_0",<br />+        .reg_no = 738,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x100000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0xFFF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_carb_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "carc_queue_ram0_159_0",<br />+        .reg_no = 755,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x200000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0x3FF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_carc_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "pktrx_glbal_cfg_0",<br />+        .reg_no = 448,<br />+        .module_no = NPPU,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_NPPU_BASE_ADDR + ZXDH_MODULE_NPPU_PKTRX_CFG_BASE_ADDR + 0x01f8,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+};<br />+<br />+static uint32_t<br />+zxdh_np_reg_get_reg_addr(uint32_t reg_no, uint32_t m_offset, uint32_t n_offset)<br />+{<br />+    uint32_t     addr        = 0;<br />+    ZXDH_REG_T  *p_reg_info = NULL;<br />+<br />+    p_reg_info = &g_dpp_reg_info[reg_no];<br />+<br />+    addr = p_reg_info->addr;<br />+<br />+    if (p_reg_info->array_type & ZXDH_REG_UNI_ARRAY) {<br />+        if (n_offset > (p_reg_info->n_size - 1))<br />+            PMD_DRV_LOG(ERR, "reg n_offset is out of range, reg_no:%d, n:%d," <br />+                "size:%d", reg_no, n_offset, p_reg_info->n_size - 1);<br />+<br />+        addr += n_offset * p_reg_info->n_step;<br />+    } else if (p_reg_info->array_type & ZXDH_REG_BIN_ARRAY) {<br />+        if ((n_offset > (p_reg_info->n_size - 1)) || (m_offset > (p_reg_info->m_size - 1)))<br />+            PMD_DRV_LOG(ERR, "reg n_offset or m_offset is out of range, reg_no:%d," <br />+                "n:%d, n_size:%d, m:%d, m_size:%d,", reg_no, n_offset,<br />+                p_reg_info->n_size - 1, m_offset, p_reg_info->m_size - 1);<br />+<br />+        addr += m_offset * p_reg_info->m_step + n_offset * p_reg_info->n_step;<br />+    }<br />+<br />+    return addr;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />         ZXDH_DEV_ACCESS_TYPE_E  access_type, uint64_t  pcie_addr,<br />@@ -262,7 +805,10 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />     } else {<br />         /* device is new. */<br />         p_dev_info = rte_malloc(NULL, sizeof(ZXDH_DEV_CFG_T), 0);<br />-        ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_dev_info);<br />+        if (p_dev_info == NULL) {<br />+            PMD_DRV_LOG(ERR, "malloc memory failed");<br />+            return ZXDH_PAR_CHK_POINT_NULL;<br />+        }<br />         p_dev_mgr->p_dev_array[dev_id] = p_dev_info;<br />         p_dev_mgr->device_num++;<br />     }<br />@@ -275,6 +821,9 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />     p_dev_info->dma_vir_addr = dma_vir_addr;<br />     p_dev_info->dma_phy_addr = dma_phy_addr;<br />  <br />+    p_dev_info->p_pcie_write_fun = zxdh_np_dev_pcie_default_write;<br />+    p_dev_info->p_pcie_read_fun  = zxdh_np_dev_pcie_default_read;<br />+<br />     return 0;<br /> }<br />  <br />@@ -323,8 +872,7 @@ zxdh_np_sdt_mgr_create(uint32_t dev_id)<br />  <br />         p_sdt_mgr->channel_num++;<br />     } else {<br />-        PMD_DRV_LOG(ERR, "Error: %s for dev[%d]" <br />-            "is called repeatedly!", __func__, dev_id);<br />+        PMD_DRV_LOG(ERR, "called repeatedly!");<br />         return 1;<br />     }<br />  <br />@@ -376,6 +924,24 @@ zxdh_np_dtb_mgr_get(uint32_t dev_id)<br />         return p_dpp_dtb_mgr[dev_id];<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dtb_mgr_create(uint32_t dev_id)<br />+{<br />+    if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />+        PMD_DRV_LOG(ERR, "ErrorCode[0x%x]: Dma Manager" <br />+            " is exist!!!", ZXDH_RC_DTB_MGR_EXIST);<br />+        return ZXDH_RC_DTB_MGR_EXIST;<br />+    }<br />+<br />+    p_dpp_dtb_mgr[dev_id] = (ZXDH_DTB_MGR_T *)rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />+    if (p_dpp_dtb_mgr[dev_id] == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_soft_init(uint32_t dev_id)<br /> {<br />@@ -386,10 +952,11 @@ zxdh_np_dtb_soft_init(uint32_t dev_id)<br />  <br />     p_dtb_mgr = zxdh_np_dtb_mgr_get(dev_id);<br />     if (p_dtb_mgr == NULL) {<br />-        p_dpp_dtb_mgr[dev_id] = rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />+        zxdh_np_dtb_mgr_create(dev_id);<br />+<br />         p_dtb_mgr = zxdh_np_dtb_mgr_get(dev_id);<br />         if (p_dtb_mgr == NULL)<br />-            return 1;<br />+            return ZXDH_RC_DTB_MGR_NOT_EXIST;<br />     }<br />  <br />     return 0;<br />@@ -469,36 +1036,10 @@ zxdh_np_addr_calc(uint64_t pcie_vir_baddr, uint32_t bar_offset)<br />  <br />     np_addr = ((pcie_vir_baddr + bar_offset) > ZXDH_PCIE_NP_MEM_SIZE)<br />                 ? (pcie_vir_baddr + bar_offset - ZXDH_PCIE_NP_MEM_SIZE) : 0;<br />-    g_np_bar_offset = bar_offset;<br />  <br />     return np_addr;<br /> }<br />  <br />-int<br />-zxdh_np_host_init(uint32_t dev_id,<br />-        ZXDH_DEV_INIT_CTRL_T *p_dev_init_ctrl)<br />-{<br />-    ZXDH_SYS_INIT_CTRL_T sys_init_ctrl = {0};<br />-    uint32_t rc;<br />-    uint64_t agent_addr;<br />-<br />-    ZXDH_COMM_CHECK_POINT_NO_ASSERT(p_dev_init_ctrl);<br />-<br />-    sys_init_ctrl.flags = (ZXDH_DEV_ACCESS_TYPE_PCIE << 0) | (ZXDH_DEV_AGENT_ENABLE << 10);<br />-    sys_init_ctrl.pcie_vir_baddr = zxdh_np_addr_calc(p_dev_init_ctrl->pcie_vir_addr,<br />-        p_dev_init_ctrl->np_bar_offset);<br />-    sys_init_ctrl.device_type = ZXDH_DEV_TYPE_CHIP;<br />-    rc = zxdh_np_base_soft_init(dev_id, &sys_init_ctrl);<br />-    ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_base_soft_init");<br />-<br />-    zxdh_np_dev_vport_set(dev_id, p_dev_init_ctrl->vport);<br />-<br />-    agent_addr = ZXDH_PCIE_AGENT_ADDR_OFFSET + p_dev_init_ctrl->pcie_vir_addr;<br />-    zxdh_np_dev_agent_addr_set(dev_id, agent_addr);<br />-<br />-    return 0;<br />-}<br />-<br /> static ZXDH_RISCV_DTB_MGR *<br /> zxdh_np_riscv_dtb_queue_mgr_get(uint32_t dev_id)<br /> {<br />@@ -611,24 +1152,37 @@ zxdh_np_reg_read(uint32_t dev_id, uint32_t reg_no,<br />         uint32_t m_offset, uint32_t n_offset, void *p_data)<br /> {<br />     uint32_t p_buff[ZXDH_REG_DATA_MAX] = {0};<br />-    ZXDH_REG_T *p_reg_info = NULL;<br />-    ZXDH_FIELD_T *p_field_info = NULL;<br />+    ZXDH_REG_T *p_reg_info = &g_dpp_reg_info[reg_no];<br />+    ZXDH_FIELD_T *p_field_info = p_reg_info->p_fields;<br />     uint32_t rc = 0;<br />     uint32_t i;<br />+    uint32_t addr = 0;<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_buff);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "p_reg_info->p_read_fun");<br />+    }<br />  <br />-    if (reg_no < 4) {<br />-        p_reg_info = &g_dpp_reg_info[reg_no];<br />-        p_field_info = p_reg_info->p_fields;<br />-        for (i = 0; i < p_reg_info->field_num; i++) {<br />-            rc = zxdh_np_comm_read_bits_ex((uint8_t *)p_buff,<br />-                                    p_reg_info->width * 8,<br />-                                    (uint32_t *)p_data + i,<br />-                                    p_field_info[i].msb_pos,<br />-                                    p_field_info[i].len);<br />-            ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxic_comm_read_bits_ex");<br />-            PMD_DRV_LOG(ERR, "dev_id %d(%d)(%d)is ok!", dev_id, m_offset, n_offset);<br />+    if (!zxdh_np_comm_is_big_endian()) {<br />+        for (i = 0; i < p_reg_info->width / 4; i++) {<br />+            PMD_DRV_LOG(DEBUG, "data = 0x%08x.", p_buff[i]);<br />+            p_buff[i] = ZXDH_COMM_CONVERT32(p_buff[i]);<br />         }<br />     }<br />+<br />+    for (i = 0; i < p_reg_info->field_num; i++) {<br />+        rc = zxdh_np_comm_read_bits_ex((uint8_t *)p_buff,<br />+                                p_reg_info->width * 8,<br />+                                (uint32_t *)p_data + i,<br />+                                p_field_info[i].msb_pos,<br />+                                p_field_info[i].len);<br />+        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_np_comm_read_bits_ex");<br />+        PMD_DRV_LOG(ERR, "dev_id %d(%d)(%d)is ok!", dev_id, m_offset, n_offset);<br />+    }<br />+<br />     return rc;<br /> }<br />  <br />@@ -637,20 +1191,21 @@ zxdh_np_dtb_queue_vm_info_get(uint32_t dev_id,<br />         uint32_t queue_id,<br />         ZXDH_DTB_QUEUE_VM_INFO_T *p_vm_info)<br /> {<br />-    ZXDH_DTB4K_DTB_ENQ_CFG_EPID_V_FUNC_NUM_0_127_T vm_info = {0};<br />-    uint32_t rc;<br />+    uint32_t rc = 0;<br />+    uint32_t dtb_epid_v_func_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0010;<br />+    uint32_t epid_v_func = 0;<br />  <br />-    rc = zxdh_np_reg_read(dev_id, ZXDH_DTB_CFG_EPID_V_FUNC_NUM,<br />-                        0, queue_id, &vm_info);<br />-    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_reg_read");<br />+    rc = zxdh_np_dev_read_channel(dev_id, dtb_epid_v_func_reg + queue_id * 32, 1, &epid_v_func);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_read_channel");<br />  <br />-    p_vm_info->dbi_en = vm_info.dbi_en;<br />-    p_vm_info->queue_en = vm_info.queue_en;<br />-    p_vm_info->epid = vm_info.cfg_epid;<br />-    p_vm_info->vector = vm_info.cfg_vector;<br />-    p_vm_info->vfunc_num = vm_info.cfg_vfunc_num;<br />-    p_vm_info->func_num = vm_info.cfg_func_num;<br />-    p_vm_info->vfunc_active = vm_info.cfg_vfunc_active;<br />+    p_vm_info->dbi_en = (epid_v_func >> 31 & 0x1);<br />+    p_vm_info->queue_en = (epid_v_func >> 30 & 0x1);<br />+    p_vm_info->epid = (epid_v_func >> 24 & 0xF);<br />+    p_vm_info->vfunc_num = (epid_v_func >> 16 & 0xFF);<br />+    p_vm_info->vector = (epid_v_func >> 8 & 0x7);<br />+    p_vm_info->func_num = (epid_v_func >> 5 & 0x7);<br />+    p_vm_info->vfunc_active = (epid_v_func & 0x1);<br />  <br />     return rc;<br /> }<br />@@ -733,32 +1288,50 @@ zxdh_np_reg_write(uint32_t dev_id, uint32_t reg_no,<br />             uint32_t m_offset, uint32_t n_offset, void *p_data)<br /> {<br />     uint32_t p_buff[ZXDH_REG_DATA_MAX] = {0};<br />-    ZXDH_REG_T *p_reg_info = NULL;<br />-    ZXDH_FIELD_T *p_field_info = NULL;<br />+    ZXDH_REG_T *p_reg_info = &g_dpp_reg_info[reg_no];<br />+    ZXDH_FIELD_T *p_field_info = p_reg_info->p_fields;<br />     uint32_t temp_data;<br />-    uint32_t rc;<br />+    uint32_t rc = ZXDH_OK;<br />     uint32_t i;<br />+    uint32_t addr = 0;<br />+    uint32_t reg_module = p_reg_info->module_no;<br />+<br />+    for (i = 0; i < p_reg_info->field_num; i++) {<br />+        if (p_field_info[i].len <= 32) {<br />+            temp_data = *((uint32_t *)p_data + i) & ZXDH_COMM_GET_BIT_MASK(uint32_t,<br />+                p_field_info[i].len);<br />+            rc = zxdh_np_comm_write_bits_ex((uint8_t *)p_buff,<br />+                                p_reg_info->width * 8,<br />+                                temp_data,<br />+                                p_field_info[i].msb_pos,<br />+                                p_field_info[i].len);<br />+            ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_comm_write_bits_ex");<br />+        }<br />+    }<br />  <br />-    if (reg_no < 4) {<br />-        p_reg_info = &g_dpp_reg_info[reg_no];<br />-        p_field_info = p_reg_info->p_fields;<br />-<br />-        for (i = 0; i < p_reg_info->field_num; i++) {<br />-            if (p_field_info[i].len <= 32) {<br />-                temp_data = *((uint32_t *)p_data + i);<br />-                rc = zxdh_np_comm_write_bits_ex((uint8_t *)p_buff,<br />-                                    p_reg_info->width * 8,<br />-                                    temp_data,<br />-                                    p_field_info[i].msb_pos,<br />-                                    p_field_info[i].len);<br />-                ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_comm_write_bits_ex");<br />-                PMD_DRV_LOG(ERR, "dev_id %d(%d)(%d)is ok!",<br />-                        dev_id, m_offset, n_offset);<br />-            }<br />+    PMD_DRV_LOG(DEBUG, "zxdh_np_comm_write_bits_ex data = 0x%08x.", p_buff[0]);<br />+<br />+    if (!zxdh_np_comm_is_big_endian()) {<br />+        for (i = 0; i < p_reg_info->width / 4; i++) {<br />+            p_buff[i] = ZXDH_COMM_CONVERT32(p_buff[i]);<br />+<br />+            PMD_DRV_LOG(DEBUG, "ZXDH_COMM_CONVERT32 data = 0x%08x.",<br />+                p_buff[i]);<br />         }<br />     }<br />  <br />-    return 0;<br />+    addr = zxdh_np_reg_get_reg_addr(reg_no, m_offset, n_offset);<br />+<br />+    PMD_DRV_LOG(DEBUG, "reg_no = %d. m_offset = %d n_offset = %d",<br />+        reg_no, m_offset, n_offset);<br />+    PMD_DRV_LOG(DEBUG, "baseaddr = 0x%08x.", addr);<br />+<br />+    if (reg_module == DTB4K) {<br />+        rc = p_reg_info->p_write_fun(dev_id, addr, p_buff);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "p_reg_info->p_write_fun");<br />+    }<br />+<br />+    return rc;<br /> }<br />  <br /> static uint32_t<br />@@ -837,11 +1410,6 @@ zxdh_np_dtb_queue_unused_item_num_get(uint32_t dev_id,<br /> {<br />     uint32_t rc;<br />  <br />-    if (zxdh_np_dev_get_dev_type(dev_id) == ZXDH_DEV_TYPE_SIM) {<br />-        *p_item_num = 32;<br />-        return 0;<br />-    }<br />-<br />     rc = zxdh_np_reg_read(dev_id, ZXDH_DTB_INFO_QUEUE_BUF_SPACE,<br />         0, queue_id, p_item_num);<br />     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_reg_read");<br />@@ -891,20 +1459,11 @@ static void<br /> zxdh_np_dtb_mgr_destroy(uint32_t dev_id)<br /> {<br />     if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />-        free(p_dpp_dtb_mgr[dev_id]);<br />+        rte_free(p_dpp_dtb_mgr[dev_id]);<br />         p_dpp_dtb_mgr[dev_id] = NULL;<br />     }<br /> }<br />  <br />-static void<br />-zxdh_np_tlb_mgr_destroy(uint32_t dev_id)<br />-{<br />-    if (g_p_dpp_tlb_mgr[dev_id] != NULL) {<br />-        free(g_p_dpp_tlb_mgr[dev_id]);<br />-        g_p_dpp_tlb_mgr[dev_id] = NULL;<br />-    }<br />-}<br />-<br /> static void<br /> zxdh_np_sdt_mgr_destroy(uint32_t dev_id)<br /> {<br />@@ -914,7 +1473,7 @@ zxdh_np_sdt_mgr_destroy(uint32_t dev_id)<br />     p_sdt_tbl_temp = ZXDH_SDT_SOFT_TBL_GET(dev_id);<br />     p_sdt_mgr = ZXDH_SDT_MGR_PTR_GET();<br />  <br />-    free(p_sdt_tbl_temp);<br />+    rte_free(p_sdt_tbl_temp);<br />  <br />     ZXDH_SDT_SOFT_TBL_GET(dev_id) = NULL;<br />  <br />@@ -931,7 +1490,7 @@ zxdh_np_dev_del(uint32_t dev_id)<br />     p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />  <br />     if (p_dev_info != NULL) {<br />-        free(p_dev_info);<br />+        rte_free(p_dev_info);<br />         p_dev_mgr->p_dev_array[dev_id] = NULL;<br />         p_dev_mgr->device_num--;<br />     }<br />@@ -946,11 +1505,9 @@ zxdh_np_online_uninit(uint32_t dev_id,<br />  <br />     rc = zxdh_np_dtb_queue_release(dev_id, port_name, queue_id);<br />     if (rc != 0)<br />-        PMD_DRV_LOG(ERR, "%s:dtb release error," <br />-            "port name %s queue id %d", __func__, port_name, queue_id);<br />+        PMD_DRV_LOG(ERR, "dtb release port name %s queue id %d", port_name, queue_id);<br />  <br />     zxdh_np_dtb_mgr_destroy(dev_id);<br />-    zxdh_np_tlb_mgr_destroy(dev_id);<br />     zxdh_np_sdt_mgr_destroy(dev_id);<br />     zxdh_np_dev_del(dev_id);<br />  <br />@@ -965,7 +1522,7 @@ zxdh_np_sdt_tbl_type_get(uint32_t dev_id, uint32_t sdt_no)<br />  <br />  <br /> static ZXDH_DTB_TABLE_T *<br />-zxdh_np_table_info_get(uint32_t table_type)<br />+zxdh_np_dtb_table_info_get(uint32_t table_type)<br /> {<br />     return &g_dpp_dtb_table_info[table_type];<br /> }<br />@@ -984,7 +1541,7 @@ zxdh_np_dtb_write_table_cmd(uint32_t dev_id,<br />  <br />     ZXDH_COMM_CHECK_POINT(p_cmd_data);<br />     ZXDH_COMM_CHECK_POINT(p_cmd_buff);<br />-    p_table_info = zxdh_np_table_info_get(table_type);<br />+    p_table_info = zxdh_np_dtb_table_info_get(table_type);<br />     p_field_info = p_table_info->p_fields;<br />     ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_table_info);<br />  <br />@@ -998,7 +1555,7 @@ zxdh_np_dtb_write_table_cmd(uint32_t dev_id,<br />                     p_field_info[field_cnt].lsb_pos,<br />                     p_field_info[field_cnt].len);<br />  <br />-        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxic_comm_write_bits");<br />+        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_np_comm_write_bits_ex");<br />     }<br />  <br />     return rc;<br />@@ -1062,17 +1619,14 @@ zxdh_np_dtb_se_smmu0_ind_write(uint32_t dev_id,<br />         uint32_t *p_data,<br />         ZXDH_DTB_ENTRY_T *p_entry)<br /> {<br />-    uint32_t temp_idx;<br />+    uint32_t temp_idx = 0;<br />     uint32_t dtb_ind_addr;<br />     uint32_t rc = 0;<br />  <br />     switch (wrt_mode) {<br />     case ZXDH_ERAM128_OPR_128b:<br />         if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />-            PMD_DRV_LOG(ERR, "ICM %s:%d[Error:VALUE[val0=0x%x]" <br />-                "INVALID] [val1=0x%x] FUNCTION :%s", __FILE__, __LINE__,<br />-                base_addr, index, __func__);<br />-<br />+            PMD_DRV_LOG(ERR, "base addr:0x%x, index:0x%x invalid", base_addr, index);<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />         if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />@@ -1095,6 +1649,9 @@ zxdh_np_dtb_se_smmu0_ind_write(uint32_t dev_id,<br />         }<br />  <br />         temp_idx = index;<br />+        break;<br />+    default:<br />+        break;<br />     }<br />  <br />     dtb_ind_addr = ((base_addr << 7) & ZXDH_ERAM128_BADDR_MASK) + temp_idx;<br />@@ -1140,7 +1697,7 @@ zxdh_np_dtb_eram_one_entry(uint32_t dev_id,<br />         ZXDH_DTB_ENTRY_T *p_dtb_one_entry)<br /> {<br />     uint32_t buff[ZXDH_SMMU0_READ_REG_MAX_NUM]      = {0};<br />-    ZXDH_SDTTBL_ERAM_T sdt_eram           = {0};<br />+    ZXDH_SDT_TBL_ERAM_T sdt_eram           = {0};<br />     ZXDH_DTB_ERAM_ENTRY_INFO_T *peramdata = NULL;<br />     uint32_t base_addr;<br />     uint32_t index;<br />@@ -1166,6 +1723,8 @@ zxdh_np_dtb_eram_one_entry(uint32_t dev_id,<br />     case ZXDH_ERAM128_TBL_1b:<br />         opr_mode = ZXDH_ERAM128_OPR_1b;<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />     if (del_en) {<br />@@ -1304,16 +1863,26 @@ zxdh_np_dtb_queue_item_info_set(uint32_t dev_id,<br />         uint32_t queue_id,<br />         ZXDH_DTB_QUEUE_ITEM_INFO_T *p_item_info)<br /> {<br />-    ZXDH_DTB_QUEUE_LEN_T dtb_len = {0};<br />     uint32_t rc;<br />  <br />-    dtb_len.cfg_dtb_cmd_type = p_item_info->cmd_type;<br />-    dtb_len.cfg_dtb_cmd_int_en = p_item_info->int_en;<br />-    dtb_len.cfg_queue_dtb_len = p_item_info->data_len;<br />+    uint32_t dtb_addr_h_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0000;<br />+    uint32_t dtb_addr_l_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0004;<br />+    uint32_t dtb_len_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0008;<br />+    uint32_t dtb_len = 0;<br />+<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_addr_h_reg + queue_id * 32,<br />+        1, &p_item_info->data_hddr);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_addr_l_reg + queue_id * 32,<br />+        1, &p_item_info->data_laddr);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />+    dtb_len = ZXDH_DTB_LEN(p_item_info->cmd_type, p_item_info->int_en, p_item_info->data_len);<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_len_reg + queue_id * 32, 1, &dtb_len);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />  <br />-    rc = zxdh_np_reg_write(dev_id, ZXDH_DTB_CFG_QUEUE_DTB_LEN,<br />-                        0, queue_id, (void *)&dtb_len);<br />-    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_reg_write");<br />     return rc;<br /> }<br />  <br />@@ -1421,7 +1990,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />     uint8_t entry_cmd[ZXDH_DTB_TABLE_CMD_SIZE_BIT] = {0};<br />     uint8_t entry_data[ZXDH_ETCAM_WIDTH_MAX] = {0};<br />     uint8_t *p_data_buff;<br />-    uint8_t *p_data_buff_ex;<br />     uint32_t element_id = 0xff;<br />     uint32_t one_dtb_len = 0;<br />     uint32_t dtb_len = 0;<br />@@ -1435,9 +2003,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />     p_data_buff = rte_zmalloc(NULL, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />     ZXDH_COMM_CHECK_POINT(p_data_buff);<br />  <br />-    p_data_buff_ex = rte_zmalloc(NULL, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />-    ZXDH_COMM_CHECK_POINT_MEMORY_FREE(p_data_buff_ex, p_data_buff);<br />-<br />     dtb_one_entry.cmd = entry_cmd;<br />     dtb_one_entry.data = entry_data;<br />  <br />@@ -1455,7 +2020,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />         default:<br />             PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />             return 1;<br />         }<br />  <br />@@ -1463,9 +2027,7 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />         dtb_len += one_dtb_len;<br />         if (dtb_len > max_size) {<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />-            PMD_DRV_LOG(ERR, "%s error dtb_len>%u!", __func__,<br />-                max_size);<br />+            PMD_DRV_LOG(ERR, "error dtb_len>%u!", max_size);<br />             return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />         }<br />         rc = zxdh_np_dtb_data_write(p_data_buff, addr_offset, &dtb_one_entry);<br />@@ -1475,7 +2037,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />  <br />     if (dtb_len == 0) {<br />         rte_free(p_data_buff);<br />-        rte_free(p_data_buff_ex);<br />         return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />     }<br />  <br />@@ -1485,7 +2046,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />                     p_data_buff,<br />                     &element_id);<br />     rte_free(p_data_buff);<br />-    rte_free(p_data_buff_ex);<br />  <br />     return rc;<br /> }<br />@@ -1509,7 +2069,6 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />     uint8_t entry_cmd[ZXDH_DTB_TABLE_CMD_SIZE_BIT / 8] = {0};<br />     uint8_t entry_data[ZXDH_ETCAM_WIDTH_MAX / 8] = {0};<br />     uint8_t *p_data_buff = NULL;<br />-    uint8_t *p_data_buff_ex = NULL;<br />     uint32_t tbl_type = 0;<br />     uint32_t element_id = 0xff;<br />     uint32_t one_dtb_len = 0;<br />@@ -1525,9 +2084,6 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />     p_data_buff = rte_calloc(NULL, 1, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />     ZXDH_COMM_CHECK_POINT(p_data_buff);<br />  <br />-    p_data_buff_ex = rte_calloc(NULL, 1, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />-    ZXDH_COMM_CHECK_POINT_MEMORY_FREE(p_data_buff_ex, p_data_buff);<br />-<br />     dtb_one_entry.cmd = entry_cmd;<br />     dtb_one_entry.data = entry_data;<br />  <br />@@ -1546,7 +2102,6 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />         default:<br />             PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />             return 1;<br />         }<br />  <br />@@ -1554,9 +2109,7 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />         dtb_len += one_dtb_len;<br />         if (dtb_len > max_size) {<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />-            PMD_DRV_LOG(ERR, "%s error dtb_len>%u!", __func__,<br />-                max_size);<br />+            PMD_DRV_LOG(ERR, "error dtb_len>%u!", max_size);<br />             return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />         }<br />  <br />@@ -1567,21 +2120,17 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />  <br />     if (dtb_len == 0) {<br />         rte_free(p_data_buff);<br />-        rte_free(p_data_buff_ex);<br />         return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />     }<br />  <br />     rc = zxdh_np_dtb_write_down_table_data(dev_id,<br />                 queue_id,<br />                 dtb_len * 16,<br />-                p_data_buff_ex,<br />+                p_data_buff,<br />                 &element_id);<br />     rte_free(p_data_buff);<br />-    ZXDH_COMM_CHECK_RC_MEMORY_FREE_NO_ASSERT(rc,<br />-        "dpp_dtb_write_down_table_data", p_data_buff_ex);<br />  <br />-    rte_free(p_data_buff_ex);<br />-    return 0;<br />+    return rc;<br /> }<br />  <br /> static uint32_t<br />@@ -1590,8 +2139,8 @@ zxdh_np_sdt_tbl_data_parser(uint32_t sdt_hig32, uint32_t sdt_low32, void *p_sdt_<br />     uint32_t tbl_type = 0;<br />     uint32_t clutch_en = 0;<br />  <br />-    ZXDH_SDTTBL_ERAM_T *p_sdt_eram = NULL;<br />-    ZXDH_SDTTBL_PORTTBL_T *p_sdt_porttbl = NULL;<br />+    ZXDH_SDT_TBL_ERAM_T *p_sdt_eram = NULL;<br />+    ZXDH_SDT_TBL_PORTTBL_T *p_sdt_porttbl = NULL;<br />  <br />     ZXDH_COMM_UINT32_GET_BITS(tbl_type, sdt_hig32,<br />         ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />@@ -1599,12 +2148,12 @@ zxdh_np_sdt_tbl_data_parser(uint32_t sdt_hig32, uint32_t sdt_low32, void *p_sdt_<br />  <br />     switch (tbl_type) {<br />     case ZXDH_SDT_TBLT_ERAM:<br />-        p_sdt_eram = (ZXDH_SDTTBL_ERAM_T *)p_sdt_info;<br />+        p_sdt_eram = (ZXDH_SDT_TBL_ERAM_T *)p_sdt_info;<br />         p_sdt_eram->table_type = tbl_type;<br />         p_sdt_eram->eram_clutch_en = clutch_en;<br />         break;<br />     case ZXDH_SDT_TBLT_PORTTBL:<br />-        p_sdt_porttbl = (ZXDH_SDTTBL_PORTTBL_T *)p_sdt_info;<br />+        p_sdt_porttbl = (ZXDH_SDT_TBL_PORTTBL_T *)p_sdt_info;<br />         p_sdt_porttbl->table_type = tbl_type;<br />         p_sdt_porttbl->porttbl_clutch_en = clutch_en;<br />         break;<br />@@ -1650,6 +2199,8 @@ zxdh_np_eram_index_cal(uint32_t eram_mode, uint32_t index,<br />         row_index = (index >> 7);<br />         col_index = index & 0x7F;<br />         break;<br />+    default:<br />+        break;<br />     }<br />     *p_row_index = row_index;<br />     *p_col_index = col_index;<br />@@ -1661,7 +2212,7 @@ zxdh_np_dtb_eram_data_get(uint32_t dev_id, uint32_t queue_id, uint32_t sdt_no,<br /> {<br />     uint32_t index = p_dump_eram_entry->index;<br />     uint32_t *p_data = p_dump_eram_entry->p_data;<br />-    ZXDH_SDTTBL_ERAM_T sdt_eram_info = {0};<br />+    ZXDH_SDT_TBL_ERAM_T sdt_eram_info = {0};<br />     uint32_t temp_data[4] = {0};<br />     uint32_t row_index = 0;<br />     uint32_t col_index = 0;<br />@@ -1685,6 +2236,8 @@ zxdh_np_dtb_eram_data_get(uint32_t dev_id, uint32_t queue_id, uint32_t sdt_no,<br />         ZXDH_COMM_UINT32_GET_BITS(p_data[0], *(temp_data +<br />             (3 - col_index / 32)), (col_index % 32), 1);<br />         break;<br />+    default:<br />+        break;<br />     }<br />     return rc;<br /> }<br />@@ -1727,10 +2280,10 @@ zxdh_np_stat_cfg_soft_get(uint32_t dev_id,<br /> {<br />     ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_stat_cfg);<br />  <br />-    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg.ddr_base_addr;<br />-    p_stat_cfg->eram_baddr = g_ppu_stat_cfg.eram_baddr;<br />-    p_stat_cfg->eram_depth = g_ppu_stat_cfg.eram_depth;<br />-    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg.ppu_addr_offset;<br />+    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg[dev_id].ddr_base_addr;<br />+    p_stat_cfg->eram_baddr = g_ppu_stat_cfg[dev_id].eram_baddr;<br />+    p_stat_cfg->eram_depth = g_ppu_stat_cfg[dev_id].eram_depth;<br />+    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg[dev_id].ppu_addr_offset;<br /> }<br />  <br /> static uint32_t<br />@@ -1945,6 +2498,8 @@ zxdh_np_dtb_se_smmu0_ind_read(uint32_t dev_id,<br />         row_index = (index >> 7);<br />         col_index = index & 0x7F;<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />     eram_dump_base_addr = base_addr + row_index;<br />@@ -1967,6 +2522,8 @@ zxdh_np_dtb_se_smmu0_ind_read(uint32_t dev_id,<br />         ZXDH_COMM_UINT32_GET_BITS(p_data[0], *(temp_data +<br />             (3 - col_index / 32)), (col_index % 32), 1);<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />     return rc;<br />@@ -2035,6 +2592,32 @@ zxdh_np_dtb_stats_get(uint32_t dev_id,<br />     return rc;<br /> }<br />  <br />+int<br />+zxdh_np_host_init(uint32_t dev_id,<br />+        ZXDH_DEV_INIT_CTRL_T *p_dev_init_ctrl)<br />+{<br />+    ZXDH_SYS_INIT_CTRL_T sys_init_ctrl = {0};<br />+    uint32_t rc;<br />+    uint64_t agent_addr;<br />+<br />+    ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_dev_init_ctrl);<br />+<br />+    sys_init_ctrl.flags = (ZXDH_DEV_ACCESS_TYPE_PCIE << 0) | (ZXDH_DEV_AGENT_ENABLE << 10);<br />+    sys_init_ctrl.pcie_vir_baddr = zxdh_np_addr_calc(p_dev_init_ctrl->pcie_vir_addr,<br />+        p_dev_init_ctrl->np_bar_offset);<br />+    sys_init_ctrl.device_type = ZXDH_DEV_TYPE_CHIP;<br />+<br />+    rc = zxdh_np_base_soft_init(dev_id, &sys_init_ctrl);<br />+    ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_base_soft_init");<br />+<br />+    zxdh_np_dev_vport_set(dev_id, p_dev_init_ctrl->vport);<br />+<br />+    agent_addr = ZXDH_PCIE_AGENT_ADDR_OFFSET + p_dev_init_ctrl->pcie_vir_addr;<br />+    zxdh_np_dev_agent_addr_set(dev_id, agent_addr);<br />+<br />+    return 0;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_se_done_status_check(uint32_t dev_id, uint32_t reg_no, uint32_t pos)<br /> {<br />@@ -2177,7 +2760,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />                         0,<br />                         &cpu_ind_cmd);<br />  <br />-    rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_RD_CPU_IND_DONER, 0);<br />+    rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_CPU_IND_RD_DONER, 0);<br />  <br />     p_temp_data = temp_data;<br />     for (i = 0; i < 4; i++) {<br />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index 7ff5c34c73..90847284fe 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -6,14 +6,16 @@<br /> #define ZXDH_NP_H<br />  <br /> #include <stdint.h> <br />+#include <rte_spinlock.h> <br />  <br />+#define ZXDH_OK                               (0)<br />+#define ZXDH_ERR                              (1)<br /> #define ZXDH_DISABLE                          (0)<br /> #define ZXDH_ENABLE                           (1)<br /> #define ZXDH_PORT_NAME_MAX                    (32)<br /> #define ZXDH_DEV_CHANNEL_MAX                  (2)<br /> #define ZXDH_DEV_SDT_ID_MAX                   (256U)<br />  <br />-#define ZXDH_RD_CNT_MAX                       (128)<br />  <br /> /*DTB*/<br /> #define ZXDH_DTB_QUEUE_ITEM_NUM_MAX           (32)<br />@@ -54,11 +56,23 @@<br /> #define ZXDH_INIT_FLAG_TM_IMEM_FLAG     (1 << 9)<br /> #define ZXDH_INIT_FLAG_AGENT_FLAG       (1 << 10)<br />  <br />+#define ZXDH_REG_NUL_ARRAY              (0 << 0)<br />+#define ZXDH_REG_UNI_ARRAY              (1 << 0)<br />+#define ZXDH_REG_BIN_ARRAY              (1 << 1)<br />+#define ZXDH_REG_FLAG_INDIRECT          (1 << 0)<br />+#define ZXDH_REG_FLAG_DIRECT            (0 << 0)<br />+#define ZXDH_FIELD_FLAG_RO              (1 << 0)<br />+#define ZXDH_FIELD_FLAG_RW              (1 << 1)<br />+<br />+#define ZXDH_SYS_NP_BASE_ADDR0          (0x00000000)<br />+#define ZXDH_SYS_NP_BASE_ADDR1          (0x02000000)<br />+<br /> #define ZXDH_ACL_TBL_ID_MIN             (0)<br /> #define ZXDH_ACL_TBL_ID_MAX             (7)<br /> #define ZXDH_ACL_TBL_ID_NUM             (8U)<br /> #define ZXDH_ACL_BLOCK_NUM              (8U)<br />  <br />+#define ZXDH_RD_CNT_MAX                          (100)<br /> #define ZXDH_SMMU0_READ_REG_MAX_NUM              (4)<br />  <br /> #define ZXDH_DTB_ITEM_ACK_SIZE                   (16)<br />@@ -206,11 +220,15 @@ typedef enum zxdh_dev_type_e {<br /> } ZXDH_DEV_TYPE_E;<br />  <br /> typedef enum zxdh_reg_info_e {<br />-    ZXDH_DTB_CFG_QUEUE_DTB_HADDR   = 0,<br />-    ZXDH_DTB_CFG_QUEUE_DTB_LADDR   = 1,<br />-    ZXDH_DTB_CFG_QUEUE_DTB_LEN    = 2,<br />-    ZXDH_DTB_INFO_QUEUE_BUF_SPACE = 3,<br />-    ZXDH_DTB_CFG_EPID_V_FUNC_NUM  = 4,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_CMDR        = 0,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RD_DONER    = 1,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R      = 2,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT1R      = 3,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT2R      = 4,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT3R      = 5,<br />+    ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR     = 6,<br />+    ZXDH_DTB_INFO_QUEUE_BUF_SPACE        = 7,<br />+    ZXDH_DTB_CFG_EPID_V_FUNC_NUM         = 8,<br />     ZXDH_STAT_CAR0_CARA_QUEUE_RAM0       = 9,<br />     ZXDH_STAT_CAR0_CARB_QUEUE_RAM0       = 10,<br />     ZXDH_STAT_CAR0_CARC_QUEUE_RAM0       = 11,<br />@@ -218,6 +236,12 @@ typedef enum zxdh_reg_info_e {<br />     ZXDH_REG_ENUM_MAX_VALUE<br /> } ZXDH_REG_INFO_E;<br />  <br />+typedef enum zxdh_dev_spinlock_type_e {<br />+    ZXDH_DEV_SPINLOCK_T_SMMU0     = 0,<br />+    ZXDH_DEV_SPINLOCK_T_DTB       = 1,<br />+    ZXDH_DEV_SPINLOCK_T_MAX<br />+} ZXDH_DEV_SPINLOCK_TYPE_E;<br />+<br /> typedef enum zxdh_dev_access_type_e {<br />     ZXDH_DEV_ACCESS_TYPE_PCIE = 0,<br />     ZXDH_DEV_ACCESS_TYPE_RISCV = 1,<br />@@ -237,6 +261,29 @@ typedef enum zxdh_acl_pri_mode_e {<br />     ZXDH_ACL_PRI_INVALID,<br /> } ZXDH_ACL_PRI_MODE_E;<br />  <br />+typedef enum zxdh_module_e {<br />+    CFG = 1,<br />+    NPPU,<br />+    PPU,<br />+    ETM,<br />+    STAT,<br />+    CAR,<br />+    SE,<br />+    SMMU0 = SE,<br />+    SMMU1 = SE,<br />+    DTB,<br />+    TRPG,<br />+    TSN,<br />+    AXI,<br />+    PTPTM,<br />+    DTB4K,<br />+    STAT4K,<br />+    PPU4K,<br />+    SE4K,<br />+    SMMU14K,<br />+    MODULE_MAX<br />+} ZXDH_MODULE_E;<br />+<br /> typedef struct zxdh_d_node {<br />     void *data;<br />     struct zxdh_d_node *prev;<br />@@ -301,6 +348,15 @@ typedef struct dpp_sdt_soft_table_t {<br />     ZXDH_SDT_ITEM_T  sdt_array[ZXDH_DEV_SDT_ID_MAX];<br /> } ZXDH_SDT_SOFT_TABLE_T;<br />  <br />+typedef struct zxdh_spin_lock_t {<br />+    rte_spinlock_t spinlock;<br />+} ZXDH_SPINLOCK_T;<br />+<br />+typedef void (*ZXDH_DEV_WRITE_FUNC)(uint32_t dev_id,<br />+        uint32_t addr, uint32_t size, uint32_t *p_data);<br />+typedef void (*ZXDH_DEV_READ_FUNC)(uint32_t dev_id,<br />+        uint32_t addr, uint32_t size, uint32_t *p_data);<br />+<br /> typedef struct zxdh_sys_init_ctrl_t {<br />     ZXDH_DEV_TYPE_E device_type;<br />     uint32_t flags;<br />@@ -327,6 +383,8 @@ typedef struct dpp_dev_cfg_t {<br />     uint64_t dma_phy_addr;<br />     uint64_t agent_addr;<br />     uint32_t init_flags[ZXDH_MODULE_INIT_MAX];<br />+    ZXDH_DEV_WRITE_FUNC p_pcie_write_fun;<br />+    ZXDH_DEV_READ_FUNC  p_pcie_read_fun;<br /> } ZXDH_DEV_CFG_T;<br />  <br /> typedef struct zxdh_dev_mngr_t {<br />@@ -521,7 +579,7 @@ typedef struct zxdh_sdt_tbl_eram_t {<br />     uint32_t eram_base_addr;<br />     uint32_t eram_table_depth;<br />     uint32_t eram_clutch_en;<br />-} ZXDH_SDTTBL_ERAM_T;<br />+} ZXDH_SDT_TBL_ERAM_T;<br />  <br /> typedef union zxdh_endian_u {<br />     unsigned int     a;<br />@@ -550,12 +608,6 @@ typedef struct zxdh_dtb_queue_item_info_t {<br />     uint32_t data_hddr;<br /> } ZXDH_DTB_QUEUE_ITEM_INFO_T;<br />  <br />-typedef struct zxdh_dtb_queue_len_t {<br />-    uint32_t cfg_dtb_cmd_type;<br />-    uint32_t cfg_dtb_cmd_int_en;<br />-    uint32_t cfg_queue_dtb_len;<br />-} ZXDH_DTB_QUEUE_LEN_T;<br />-<br /> typedef struct zxdh_dtb_eram_entry_info_t {<br />     uint32_t index;<br />     uint32_t *p_data;<br />@@ -582,12 +634,12 @@ typedef struct zxdh_sdt_tbl_etcam_t {<br />     uint32_t as_rsp_mode;<br />     uint32_t etcam_table_depth;<br />     uint32_t etcam_clutch_en;<br />-} ZXDH_SDTTBL_ETCAM_T;<br />+} ZXDH_SDT_TBL_ETCAM_T;<br />  <br /> typedef struct zxdh_sdt_tbl_porttbl_t {<br />     uint32_t table_type;<br />     uint32_t porttbl_clutch_en;<br />-} ZXDH_SDTTBL_PORTTBL_T;<br />+} ZXDH_SDT_TBL_PORTTBL_T;<br />  <br /> typedef struct zxdh_dtb_hash_entry_info_t {<br />     uint8_t *p_actu_key;<br />@@ -614,15 +666,6 @@ typedef struct zxdh_smmu0_smmu0_cpu_ind_cmd_t {<br />     uint32_t cpu_ind_addr;<br /> } ZXDH_SMMU0_SMMU0_CPU_IND_CMD_T;<br />  <br />-typedef enum zxdh_smmu0_smmu0_type_e {<br />-    ZXDH_DEV_MUTEX_T_SMMU0             = 0,<br />-    ZXDH_SMMU0_SMMU0_CPU_IND_CMDR      = 1,<br />-    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R    = 2,<br />-    ZXDH_SMMU0_SMMU0_RD_CPU_IND_DONER  = 3,<br />-    ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR   = 4,<br />-    ZXDH_SMMU0_SMMU0_ED_ARB_CPU_RDYR   = 5,<br />-} ZXDH_SEMMU0_SEMMU0_TYPE_E;<br />-<br /> typedef enum zxdh_stat_rd_clr_mode_e {<br />     ZXDH_STAT_RD_CLR_MODE_UNCLR = 0,<br />     ZXDH_STAT_RD_CLR_MODE_CLR   = 1,<br />@@ -635,8 +678,8 @@ typedef enum zxdh_eram128_rd_clr_mode_e {<br /> } ZXDH_ERAM128_RD_CLR_MODE_E;<br />  <br /> typedef enum zxdh_se_opr_mode_e {<br />-    ZXDH_SE_OPR_RD      = 0,<br />-    ZXDH_SE_OPR_WR      = 1,<br />+    ZXDH_SE_OPR_WR      = 0,<br />+    ZXDH_SE_OPR_RD      = 1,<br /> } ZXDH_SE_OPR_MODE_E;<br />  <br /> typedef enum zxdh_stat_car_type_e {<br />--  <br />2.27.0<br />