Synchronize code, Modify the review comments to increase the reliability of the code Signed-off-by: veega2022 <zhuweijia@huawei.com> (cherry picked from commit d2a23f9ffed0201385c7864b9cd58312fb395cb6)
355 lines
12 KiB
Diff
355 lines
12 KiB
Diff
From 217cdce3822eb68343807b80a3bc3c9b1530f9bb Mon Sep 17 00:00:00 2001
|
|
From: Junxian Huang <huangjunxian6@hisilicon.com>
|
|
Date: Sat, 22 Jun 2024 16:23:52 +0800
|
|
Subject: [PATCH 02/27] hikptool/roce: Support exposing names of extend
|
|
registers
|
|
|
|
Add support for exposing names of extend registers through the common
|
|
frame. To use this feature, the new-added input param reg_name should
|
|
be set inside the get_data() callback of each sub modules. For now only
|
|
mdb and qmm are supported.
|
|
|
|
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
|
|
---
|
|
net/roce/roce_bond/hikp_roce_bond.c | 3 +-
|
|
net/roce/roce_caep/hikp_roce_caep.c | 5 +-
|
|
.../roce_ext_common/hikp_roce_ext_common.c | 43 ++++++++------
|
|
.../roce_ext_common/hikp_roce_ext_common.h | 14 ++++-
|
|
.../roce_global_cfg/hikp_roce_global_cfg.c | 3 +-
|
|
net/roce/roce_mdb/hikp_roce_mdb.c | 20 ++++++-
|
|
net/roce/roce_qmm/hikp_roce_qmm.c | 57 ++++++++++++++++++-
|
|
net/roce/roce_rst/hikp_roce_rst.c | 3 +-
|
|
8 files changed, 121 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/net/roce/roce_bond/hikp_roce_bond.c b/net/roce/roce_bond/hikp_roce_bond.c
|
|
index 89f8bab..8434a0b 100644
|
|
--- a/net/roce/roce_bond/hikp_roce_bond.c
|
|
+++ b/net/roce/roce_bond/hikp_roce_bond.c
|
|
@@ -37,7 +37,8 @@ static int hikp_roce_bond_target(struct major_cmd_ctrl *self, const char *argv)
|
|
}
|
|
|
|
static int hikp_roce_bond_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
struct roce_bond_req_param req_data;
|
|
diff --git a/net/roce/roce_caep/hikp_roce_caep.c b/net/roce/roce_caep/hikp_roce_caep.c
|
|
index 126551a..0453bc4 100644
|
|
--- a/net/roce/roce_caep/hikp_roce_caep.c
|
|
+++ b/net/roce/roce_caep/hikp_roce_caep.c
|
|
@@ -40,7 +40,8 @@ static int hikp_roce_caep_target(struct major_cmd_ctrl *self, const char *argv)
|
|
}
|
|
|
|
static int hikp_roce_caep_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct roce_caep_req_param_ext req_data_ext;
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
@@ -80,7 +81,7 @@ static void hikp_roce_caep_execute_origin(struct major_cmd_ctrl *self)
|
|
struct roce_caep_res_param *roce_caep_res;
|
|
struct hikp_cmd_ret *cmd_ret;
|
|
|
|
- self->err_no = hikp_roce_caep_get_data(&cmd_ret, 0);
|
|
+ self->err_no = hikp_roce_caep_get_data(&cmd_ret, 0, NULL);
|
|
if (self->err_no) {
|
|
printf("hikptool roce_caep get data failed.\n");
|
|
goto exec_error;
|
|
diff --git a/net/roce/roce_ext_common/hikp_roce_ext_common.c b/net/roce/roce_ext_common/hikp_roce_ext_common.c
|
|
index 5bc3ce6..c22303f 100644
|
|
--- a/net/roce/roce_ext_common/hikp_roce_ext_common.c
|
|
+++ b/net/roce/roce_ext_common/hikp_roce_ext_common.c
|
|
@@ -89,14 +89,17 @@ static int get_cmd_reg_array_length(enum roce_cmd_type cmd_type)
|
|
|
|
static int hikp_roce_ext_get_res(enum roce_cmd_type cmd_type,
|
|
uint32_t block_id,
|
|
- struct roce_ext_head *res_head,
|
|
- struct reg_data *reg,
|
|
+ struct roce_ext_res_output *output,
|
|
int (*get_data)(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id))
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name))
|
|
{
|
|
int reg_array_length = get_cmd_reg_array_length(cmd_type);
|
|
+ struct roce_ext_reg_name *reg_name = &output->reg_name;
|
|
+ struct roce_ext_head *res_head = &output->res_head;
|
|
const char *cmd_name = get_cmd_name(cmd_type);
|
|
struct roce_ext_res_param *roce_ext_res;
|
|
+ struct reg_data *reg = &output->reg;
|
|
struct hikp_cmd_ret *cmd_ret;
|
|
size_t max_size;
|
|
size_t cur_size;
|
|
@@ -108,7 +111,7 @@ static int hikp_roce_ext_get_res(enum roce_cmd_type cmd_type,
|
|
if (reg_array_length < 0)
|
|
return reg_array_length;
|
|
|
|
- ret = get_data(&cmd_ret, block_id);
|
|
+ ret = get_data(&cmd_ret, block_id, reg_name);
|
|
if (ret) {
|
|
printf("hikptool roce_%s get data failed!\n", cmd_name);
|
|
goto get_data_error;
|
|
@@ -149,37 +152,45 @@ get_data_error:
|
|
return ret;
|
|
}
|
|
|
|
-static void hikp_roce_ext_print(const char *cmd_name, uint32_t total_block_num,
|
|
- const uint32_t *offset, const uint32_t *data)
|
|
+static void hikp_roce_ext_print(enum roce_cmd_type cmd_type,
|
|
+ struct roce_ext_res_output *output)
|
|
{
|
|
+ uint32_t total_block_num = output->res_head.total_block_num;
|
|
+ const char **reg_name = output->reg_name.reg_name;
|
|
+ const char *cmd_name = get_cmd_name(cmd_type);
|
|
+ uint8_t arr_len = output->reg_name.arr_len;
|
|
+ uint32_t *offset = output->reg.offset;
|
|
+ uint32_t *data = output->reg.data;
|
|
int i;
|
|
|
|
printf("**************%s INFO*************\n", cmd_name);
|
|
+ printf("%-40s[addr_offset] : reg_data\n", "reg_name");
|
|
for (i = 0; i < total_block_num; i++)
|
|
- printf("[0x%08X] : 0x%08X\n", offset[i], data[i]);
|
|
+ printf("%-40s[0x%08X] : 0x%08X\n",
|
|
+ i < arr_len ? reg_name[i] : "",
|
|
+ offset[i], data[i]);
|
|
printf("************************************\n");
|
|
}
|
|
|
|
void hikp_roce_ext_execute(struct major_cmd_ctrl *self,
|
|
enum roce_cmd_type cmd_type,
|
|
int (*get_data)(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id))
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name))
|
|
{
|
|
+ struct roce_ext_res_output output = { 0 };
|
|
uint32_t queried_block_id = 0;
|
|
- struct roce_ext_head res_head;
|
|
- struct reg_data reg = { 0 };
|
|
|
|
do {
|
|
self->err_no = hikp_roce_ext_get_res(cmd_type, queried_block_id,
|
|
- &res_head, ®, get_data);
|
|
+ &output, get_data);
|
|
if (self->err_no)
|
|
return;
|
|
|
|
- queried_block_id += res_head.cur_block_num;
|
|
- } while (queried_block_id < res_head.total_block_num);
|
|
+ queried_block_id += output.res_head.cur_block_num;
|
|
+ } while (queried_block_id < output.res_head.total_block_num);
|
|
|
|
- hikp_roce_ext_print(get_cmd_name(cmd_type), res_head.total_block_num,
|
|
- reg.offset, reg.data);
|
|
+ hikp_roce_ext_print(cmd_type, &output);
|
|
|
|
- hikp_roce_ext_reg_data_free(®);
|
|
+ hikp_roce_ext_reg_data_free(&output.reg);
|
|
}
|
|
diff --git a/net/roce/roce_ext_common/hikp_roce_ext_common.h b/net/roce/roce_ext_common/hikp_roce_ext_common.h
|
|
index a600449..4930bed 100644
|
|
--- a/net/roce/roce_ext_common/hikp_roce_ext_common.h
|
|
+++ b/net/roce/roce_ext_common/hikp_roce_ext_common.h
|
|
@@ -47,9 +47,21 @@ struct reg_data {
|
|
uint32_t *data;
|
|
};
|
|
|
|
+struct roce_ext_reg_name {
|
|
+ const char **reg_name;
|
|
+ uint8_t arr_len;
|
|
+};
|
|
+
|
|
+struct roce_ext_res_output {
|
|
+ struct roce_ext_head res_head;
|
|
+ struct reg_data reg;
|
|
+ struct roce_ext_reg_name reg_name;
|
|
+};
|
|
+
|
|
void hikp_roce_ext_execute(struct major_cmd_ctrl *self,
|
|
enum roce_cmd_type cmd_type,
|
|
int (*get_data)(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id));
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name));
|
|
|
|
#endif /* __HIKP_ROCE_EXT_COMMON_H__ */
|
|
diff --git a/net/roce/roce_global_cfg/hikp_roce_global_cfg.c b/net/roce/roce_global_cfg/hikp_roce_global_cfg.c
|
|
index 49a4a2c..18df065 100644
|
|
--- a/net/roce/roce_global_cfg/hikp_roce_global_cfg.c
|
|
+++ b/net/roce/roce_global_cfg/hikp_roce_global_cfg.c
|
|
@@ -40,7 +40,8 @@ static int hikp_roce_global_cfg_target(struct major_cmd_ctrl *self,
|
|
}
|
|
|
|
static int hikp_roce_global_cfg_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
struct roce_global_cfg_req_param req_data;
|
|
diff --git a/net/roce/roce_mdb/hikp_roce_mdb.c b/net/roce/roce_mdb/hikp_roce_mdb.c
|
|
index b2b2c41..e811bec 100644
|
|
--- a/net/roce/roce_mdb/hikp_roce_mdb.c
|
|
+++ b/net/roce/roce_mdb/hikp_roce_mdb.c
|
|
@@ -74,6 +74,16 @@ static const char *g_mdb_reg_name[] = {
|
|
"MDB_STA_5",
|
|
};
|
|
|
|
+static const char *g_mdb_ext_reg_name[] = {
|
|
+ "ROCEE_EQDB_EXEC_CNT",
|
|
+ "MDB_STA_6",
|
|
+ "MDB_DFX_CNT_0",
|
|
+ "MDB_DFX_CNT_1",
|
|
+ "MDB_DFX_CNT_2",
|
|
+ "MDB_DFX_CNT_3",
|
|
+ "MDB_DFX_CNT_4",
|
|
+};
|
|
+
|
|
static void hikp_roce_mdb_print(uint32_t reg_num, struct roce_mdb_rsp_data *mdb_rsp)
|
|
{
|
|
uint8_t arr_len = HIKP_ARRAY_SIZE(g_mdb_reg_name);
|
|
@@ -89,13 +99,19 @@ static void hikp_roce_mdb_print(uint32_t reg_num, struct roce_mdb_rsp_data *mdb_
|
|
}
|
|
|
|
static int hikp_roce_mdb_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct roce_mdb_req_param_ext req_data_ext;
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
uint32_t req_size;
|
|
int ret;
|
|
|
|
+ if (reg_name) {
|
|
+ reg_name->reg_name = g_mdb_ext_reg_name;
|
|
+ reg_name->arr_len = HIKP_ARRAY_SIZE(g_mdb_ext_reg_name);
|
|
+ }
|
|
+
|
|
req_data_ext.origin_param.bdf = g_roce_mdb_param.target.bdf;
|
|
req_data_ext.block_id = block_id;
|
|
|
|
@@ -119,7 +135,7 @@ static void hikp_roce_mdb_execute_origin(struct major_cmd_ctrl *self)
|
|
struct hikp_cmd_ret *cmd_ret = NULL;
|
|
uint32_t reg_num;
|
|
|
|
- self->err_no = hikp_roce_mdb_get_data(&cmd_ret, 0);
|
|
+ self->err_no = hikp_roce_mdb_get_data(&cmd_ret, 0, NULL);
|
|
if (self->err_no) {
|
|
printf("hikptool roce_mdb get data failed\n");
|
|
goto exec_error;
|
|
diff --git a/net/roce/roce_qmm/hikp_roce_qmm.c b/net/roce/roce_qmm/hikp_roce_qmm.c
|
|
index fa4e18a..9189f88 100644
|
|
--- a/net/roce/roce_qmm/hikp_roce_qmm.c
|
|
+++ b/net/roce/roce_qmm/hikp_roce_qmm.c
|
|
@@ -104,6 +104,40 @@ static const char *g_qmm_qpc_reg_name[] = {
|
|
"QPC_WQE_ECC_ERR",
|
|
};
|
|
|
|
+static const char *g_qmm_top_ext_reg_name[] = {
|
|
+ "ROCEE_QMM_SRQC_CACHE_RO",
|
|
+ "ROCEE_QMM_SRQC_DMAE_RO",
|
|
+ "ROCEE_QMM_SRQC_SRH_DFX",
|
|
+ "ROCEE_QMM_SRQC_SRH_REQ_RO",
|
|
+ "ROCEE_QMM_SRQC_RW_REQ_RO",
|
|
+ "ROCEE_QMM_MPT_CACHE_RO",
|
|
+ "ROCEE_QMM_MPT_DMAE_RO",
|
|
+ "ROCEE_QMM_MPT_SRH_DFX",
|
|
+ "ROCEE_QMM_MPT_SRH_REQ_RO",
|
|
+ "QPC_DMAE_INTF_RO",
|
|
+};
|
|
+
|
|
+static const char *g_qmm_cqc_ext_reg_name[] = {
|
|
+ "ROCEE_CQC_SRH_DFX_BK0",
|
|
+ "ROCEE_CQC_SRH_DFX_BK1",
|
|
+ "ROCEE_CQC_EMPTY_RD",
|
|
+ "ROCEE_CQC_FULL_WR",
|
|
+ "ROCEE_CQC_CACHE_RO_BK0",
|
|
+ "ROCEE_CQC_CACHE_RO_BK1",
|
|
+ "ROCEE_CQC_DMAE_RO",
|
|
+};
|
|
+
|
|
+static const char *g_qmm_qpc_ext_reg_name[] = {
|
|
+ "ROCEE_QPC_SRH_DFX_0",
|
|
+ "ROCEE_QPC_SRH_DFX_1",
|
|
+ "ROCEE_QPC_SRH_REQ_RO_0",
|
|
+ "ROCEE_QPC_SRH_REQ_RO_1",
|
|
+ "ROCEE_QMM_QPC_CACHE_RO_0",
|
|
+ "ROCEE_QMM_QPC_CACHE_RO_0",
|
|
+ "QMM_WQE_CACHE_RO",
|
|
+ "IRRL_CACHE_RO",
|
|
+};
|
|
+
|
|
static const struct reg_name_info {
|
|
enum roce_qmm_cmd_type sub_cmd;
|
|
const char **reg_name;
|
|
@@ -112,6 +146,9 @@ static const struct reg_name_info {
|
|
{QMM_SHOW_CQC, g_qmm_cqc_reg_name, HIKP_ARRAY_SIZE(g_qmm_cqc_reg_name)},
|
|
{QMM_SHOW_QPC, g_qmm_qpc_reg_name, HIKP_ARRAY_SIZE(g_qmm_qpc_reg_name)},
|
|
{QMM_SHOW_TOP, g_qmm_top_reg_name, HIKP_ARRAY_SIZE(g_qmm_top_reg_name)},
|
|
+ {QMM_SHOW_CQC_EXT, g_qmm_cqc_ext_reg_name, HIKP_ARRAY_SIZE(g_qmm_cqc_ext_reg_name)},
|
|
+ {QMM_SHOW_QPC_EXT, g_qmm_qpc_ext_reg_name, HIKP_ARRAY_SIZE(g_qmm_qpc_ext_reg_name)},
|
|
+ {QMM_SHOW_TOP_EXT, g_qmm_top_ext_reg_name, HIKP_ARRAY_SIZE(g_qmm_top_ext_reg_name)},
|
|
};
|
|
|
|
static void hikp_roce_qmm_print(struct roce_qmm_rsp_data *qmm_rsp)
|
|
@@ -149,12 +186,26 @@ static void hikp_roce_qmm_print(struct roce_qmm_rsp_data *qmm_rsp)
|
|
}
|
|
|
|
static int hikp_roce_qmm_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct roce_qmm_req_para_ext req_data_ext;
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
uint32_t req_size;
|
|
- int ret;
|
|
+ int ret, i;
|
|
+
|
|
+ if (reg_name) {
|
|
+ for (i = 0; i < HIKP_ARRAY_SIZE(g_qmm_reg_name_info_table); i++) {
|
|
+ if (g_qmm_reg_name_info_table[i].sub_cmd != g_roce_qmm_param.sub_cmd)
|
|
+ continue;
|
|
+ reg_name->arr_len = g_qmm_reg_name_info_table[i].arr_len;
|
|
+ reg_name->reg_name = g_qmm_reg_name_info_table[i].reg_name;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (i == HIKP_ARRAY_SIZE(g_qmm_reg_name_info_table))
|
|
+ return -EINVAL;
|
|
+ }
|
|
|
|
req_data_ext.origin_param.bdf = g_roce_qmm_param.target.bdf;
|
|
req_data_ext.origin_param.bank_id = g_roce_qmm_param.bank_id;
|
|
@@ -179,7 +230,7 @@ static void hikp_roce_qmm_execute_origin(struct major_cmd_ctrl *self)
|
|
struct roce_qmm_rsp_data *roce_qmm_res;
|
|
struct hikp_cmd_ret *cmd_ret;
|
|
|
|
- self->err_no = hikp_roce_qmm_get_data(&cmd_ret, 0);
|
|
+ self->err_no = hikp_roce_qmm_get_data(&cmd_ret, 0, NULL);
|
|
if (self->err_no) {
|
|
printf("hikptool roce_qmm get data failed.\n");
|
|
goto exec_error;
|
|
diff --git a/net/roce/roce_rst/hikp_roce_rst.c b/net/roce/roce_rst/hikp_roce_rst.c
|
|
index ad4dd0c..570e7f4 100644
|
|
--- a/net/roce/roce_rst/hikp_roce_rst.c
|
|
+++ b/net/roce/roce_rst/hikp_roce_rst.c
|
|
@@ -37,7 +37,8 @@ static int hikp_roce_rst_target(struct major_cmd_ctrl *self, const char *argv)
|
|
}
|
|
|
|
static int hikp_roce_rst_get_data(struct hikp_cmd_ret **cmd_ret,
|
|
- uint32_t block_id)
|
|
+ uint32_t block_id,
|
|
+ struct roce_ext_reg_name *reg_name)
|
|
{
|
|
struct hikp_cmd_header req_header = { 0 };
|
|
struct roce_rst_req_param req_data;
|
|
--
|
|
2.45.0.windows.1
|
|
|