13c666b58Sliuzhongzhu // SPDX-License-Identifier: GPL-2.0+
23c666b58Sliuzhongzhu /* Copyright (c) 2018-2019 Hisilicon Limited. */
33c666b58Sliuzhongzhu 
43c666b58Sliuzhongzhu #include <linux/device.h>
53c666b58Sliuzhongzhu 
63c666b58Sliuzhongzhu #include "hclge_cmd.h"
73c666b58Sliuzhongzhu #include "hclge_main.h"
82849d4e7Sliuzhongzhu #include "hclge_tm.h"
93c666b58Sliuzhongzhu #include "hnae3.h"
103c666b58Sliuzhongzhu 
112849d4e7Sliuzhongzhu static void hclge_title_idx_print(struct hclge_dev *hdev, bool flag, int index,
122849d4e7Sliuzhongzhu 				  char *title_buf, char *true_buf,
132849d4e7Sliuzhongzhu 				  char *false_buf)
142849d4e7Sliuzhongzhu {
152849d4e7Sliuzhongzhu 	if (flag)
162849d4e7Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index,
172849d4e7Sliuzhongzhu 			 true_buf);
182849d4e7Sliuzhongzhu 	else
192849d4e7Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index,
202849d4e7Sliuzhongzhu 			 false_buf);
212849d4e7Sliuzhongzhu }
222849d4e7Sliuzhongzhu 
232849d4e7Sliuzhongzhu static void hclge_dbg_dump_tc(struct hclge_dev *hdev)
242849d4e7Sliuzhongzhu {
252849d4e7Sliuzhongzhu 	struct hclge_ets_tc_weight_cmd *ets_weight;
262849d4e7Sliuzhongzhu 	struct hclge_desc desc;
272849d4e7Sliuzhongzhu 	int i, ret;
282849d4e7Sliuzhongzhu 
292849d4e7Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_ETS_TC_WEIGHT, true);
302849d4e7Sliuzhongzhu 
312849d4e7Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
322849d4e7Sliuzhongzhu 	if (ret) {
332849d4e7Sliuzhongzhu 		dev_err(&hdev->pdev->dev, "dump tc fail, status is %d.\n", ret);
342849d4e7Sliuzhongzhu 		return;
352849d4e7Sliuzhongzhu 	}
362849d4e7Sliuzhongzhu 
372849d4e7Sliuzhongzhu 	ets_weight = (struct hclge_ets_tc_weight_cmd *)desc.data;
382849d4e7Sliuzhongzhu 
392849d4e7Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump tc\n");
402849d4e7Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "weight_offset: %u\n",
412849d4e7Sliuzhongzhu 		 ets_weight->weight_offset);
422849d4e7Sliuzhongzhu 
432849d4e7Sliuzhongzhu 	for (i = 0; i < HNAE3_MAX_TC; i++)
442849d4e7Sliuzhongzhu 		hclge_title_idx_print(hdev, ets_weight->tc_weight[i], i,
452849d4e7Sliuzhongzhu 				      "tc", "no sp mode", "sp mode");
462849d4e7Sliuzhongzhu }
472849d4e7Sliuzhongzhu 
4896227f4cSliuzhongzhu static void hclge_dbg_dump_tm_pg(struct hclge_dev *hdev)
4996227f4cSliuzhongzhu {
5096227f4cSliuzhongzhu 	struct hclge_port_shapping_cmd *port_shap_cfg_cmd;
5196227f4cSliuzhongzhu 	struct hclge_bp_to_qs_map_cmd *bp_to_qs_map_cmd;
5296227f4cSliuzhongzhu 	struct hclge_pg_shapping_cmd *pg_shap_cfg_cmd;
5396227f4cSliuzhongzhu 	enum hclge_opcode_type cmd;
5496227f4cSliuzhongzhu 	struct hclge_desc desc;
5596227f4cSliuzhongzhu 	int ret;
5696227f4cSliuzhongzhu 
5796227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_C_SHAPPING;
5896227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
5996227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
6096227f4cSliuzhongzhu 	if (ret)
6196227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
6296227f4cSliuzhongzhu 
6396227f4cSliuzhongzhu 	pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data;
6496227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_C pg_id: %u\n", pg_shap_cfg_cmd->pg_id);
6596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_C pg_shapping: 0x%x\n",
6696227f4cSliuzhongzhu 		 pg_shap_cfg_cmd->pg_shapping_para);
6796227f4cSliuzhongzhu 
6896227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_P_SHAPPING;
6996227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
7096227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7196227f4cSliuzhongzhu 	if (ret)
7296227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
7396227f4cSliuzhongzhu 
7496227f4cSliuzhongzhu 	pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data;
7596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_P pg_id: %u\n", pg_shap_cfg_cmd->pg_id);
7696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_P pg_shapping: 0x%x\n",
7796227f4cSliuzhongzhu 		 pg_shap_cfg_cmd->pg_shapping_para);
7896227f4cSliuzhongzhu 
7996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PORT_SHAPPING;
8096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
8196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8296227f4cSliuzhongzhu 	if (ret)
8396227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
8496227f4cSliuzhongzhu 
8596227f4cSliuzhongzhu 	port_shap_cfg_cmd = (struct hclge_port_shapping_cmd *)desc.data;
8696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PORT port_shapping: 0x%x\n",
8796227f4cSliuzhongzhu 		 port_shap_cfg_cmd->port_shapping_para);
8896227f4cSliuzhongzhu 
8996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_SCH_MODE_CFG;
9096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
9196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9296227f4cSliuzhongzhu 	if (ret)
9396227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
9496227f4cSliuzhongzhu 
9596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_SCH pg_id: %u\n", desc.data[0]);
9696227f4cSliuzhongzhu 
9796227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_SCH_MODE_CFG;
9896227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
9996227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
10096227f4cSliuzhongzhu 	if (ret)
10196227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
10296227f4cSliuzhongzhu 
10396227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_SCH pg_id: %u\n", desc.data[0]);
10496227f4cSliuzhongzhu 
10596227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_SCH_MODE_CFG;
10696227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
10796227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
10896227f4cSliuzhongzhu 	if (ret)
10996227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
11096227f4cSliuzhongzhu 
11196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_SCH pg_id: %u\n", desc.data[0]);
11296227f4cSliuzhongzhu 
11396227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_BP_TO_QSET_MAPPING;
11496227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
11596227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
11696227f4cSliuzhongzhu 	if (ret)
11796227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
11896227f4cSliuzhongzhu 
11996227f4cSliuzhongzhu 	bp_to_qs_map_cmd = (struct hclge_bp_to_qs_map_cmd *)desc.data;
12096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_id: %u\n",
12196227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->tc_id);
12296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_shapping: 0x%x\n",
12396227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->qs_group_id);
12496227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET qs_bit_map: 0x%x\n",
12596227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->qs_bit_map);
12696227f4cSliuzhongzhu 	return;
12796227f4cSliuzhongzhu 
12896227f4cSliuzhongzhu err_tm_pg_cmd_send:
12996227f4cSliuzhongzhu 	dev_err(&hdev->pdev->dev, "dump tm_pg fail(0x%x), status is %d\n",
13096227f4cSliuzhongzhu 		cmd, ret);
13196227f4cSliuzhongzhu }
13296227f4cSliuzhongzhu 
13396227f4cSliuzhongzhu static void hclge_dbg_dump_tm(struct hclge_dev *hdev)
13496227f4cSliuzhongzhu {
13596227f4cSliuzhongzhu 	struct hclge_priority_weight_cmd *priority_weight;
13696227f4cSliuzhongzhu 	struct hclge_pg_to_pri_link_cmd *pg_to_pri_map;
13796227f4cSliuzhongzhu 	struct hclge_qs_to_pri_link_cmd *qs_to_pri_map;
13896227f4cSliuzhongzhu 	struct hclge_nq_to_qs_link_cmd *nq_to_qs_map;
13996227f4cSliuzhongzhu 	struct hclge_pri_shapping_cmd *shap_cfg_cmd;
14096227f4cSliuzhongzhu 	struct hclge_pg_weight_cmd *pg_weight;
14196227f4cSliuzhongzhu 	struct hclge_qs_weight_cmd *qs_weight;
14296227f4cSliuzhongzhu 	enum hclge_opcode_type cmd;
14396227f4cSliuzhongzhu 	struct hclge_desc desc;
14496227f4cSliuzhongzhu 	int ret;
14596227f4cSliuzhongzhu 
14696227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_TO_PRI_LINK;
14796227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
14896227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
14996227f4cSliuzhongzhu 	if (ret)
15096227f4cSliuzhongzhu 		goto err_tm_cmd_send;
15196227f4cSliuzhongzhu 
15296227f4cSliuzhongzhu 	pg_to_pri_map = (struct hclge_pg_to_pri_link_cmd *)desc.data;
15396227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump tm\n");
15496227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_TO_PRI gp_id: %u\n",
15596227f4cSliuzhongzhu 		 pg_to_pri_map->pg_id);
15696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_TO_PRI map: 0x%x\n",
15796227f4cSliuzhongzhu 		 pg_to_pri_map->pri_bit_map);
15896227f4cSliuzhongzhu 
15996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_TO_PRI_LINK;
16096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
16196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
16296227f4cSliuzhongzhu 	if (ret)
16396227f4cSliuzhongzhu 		goto err_tm_cmd_send;
16496227f4cSliuzhongzhu 
16596227f4cSliuzhongzhu 	qs_to_pri_map = (struct hclge_qs_to_pri_link_cmd *)desc.data;
16696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI qs_id: %u\n",
16796227f4cSliuzhongzhu 		 qs_to_pri_map->qs_id);
16896227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI priority: %u\n",
16996227f4cSliuzhongzhu 		 qs_to_pri_map->priority);
17096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI link_vld: %u\n",
17196227f4cSliuzhongzhu 		 qs_to_pri_map->link_vld);
17296227f4cSliuzhongzhu 
17396227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_NQ_TO_QS_LINK;
17496227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
17596227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
17696227f4cSliuzhongzhu 	if (ret)
17796227f4cSliuzhongzhu 		goto err_tm_cmd_send;
17896227f4cSliuzhongzhu 
17996227f4cSliuzhongzhu 	nq_to_qs_map = (struct hclge_nq_to_qs_link_cmd *)desc.data;
18096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "NQ_TO_QS nq_id: %u\n", nq_to_qs_map->nq_id);
18196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "NQ_TO_QS qset_id: %u\n",
18296227f4cSliuzhongzhu 		 nq_to_qs_map->qset_id);
18396227f4cSliuzhongzhu 
18496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_WEIGHT;
18596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
18696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
18796227f4cSliuzhongzhu 	if (ret)
18896227f4cSliuzhongzhu 		goto err_tm_cmd_send;
18996227f4cSliuzhongzhu 
19096227f4cSliuzhongzhu 	pg_weight = (struct hclge_pg_weight_cmd *)desc.data;
19196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG pg_id: %u\n", pg_weight->pg_id);
19296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG dwrr: %u\n", pg_weight->dwrr);
19396227f4cSliuzhongzhu 
19496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_WEIGHT;
19596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
19696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
19796227f4cSliuzhongzhu 	if (ret)
19896227f4cSliuzhongzhu 		goto err_tm_cmd_send;
19996227f4cSliuzhongzhu 
20096227f4cSliuzhongzhu 	qs_weight = (struct hclge_qs_weight_cmd *)desc.data;
20196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS qs_id: %u\n", qs_weight->qs_id);
20296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS dwrr: %u\n", qs_weight->dwrr);
20396227f4cSliuzhongzhu 
20496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_WEIGHT;
20596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
20696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
20796227f4cSliuzhongzhu 	if (ret)
20896227f4cSliuzhongzhu 		goto err_tm_cmd_send;
20996227f4cSliuzhongzhu 
21096227f4cSliuzhongzhu 	priority_weight = (struct hclge_priority_weight_cmd *)desc.data;
21196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI pri_id: %u\n", priority_weight->pri_id);
21296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI dwrr: %u\n", priority_weight->dwrr);
21396227f4cSliuzhongzhu 
21496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_C_SHAPPING;
21596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
21696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
21796227f4cSliuzhongzhu 	if (ret)
21896227f4cSliuzhongzhu 		goto err_tm_cmd_send;
21996227f4cSliuzhongzhu 
22096227f4cSliuzhongzhu 	shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data;
22196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_C pri_id: %u\n", shap_cfg_cmd->pri_id);
22296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_C pri_shapping: 0x%x\n",
22396227f4cSliuzhongzhu 		 shap_cfg_cmd->pri_shapping_para);
22496227f4cSliuzhongzhu 
22596227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_P_SHAPPING;
22696227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
22796227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
22896227f4cSliuzhongzhu 	if (ret)
22996227f4cSliuzhongzhu 		goto err_tm_cmd_send;
23096227f4cSliuzhongzhu 
23196227f4cSliuzhongzhu 	shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data;
23296227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_P pri_id: %u\n", shap_cfg_cmd->pri_id);
23396227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_P pri_shapping: 0x%x\n",
23496227f4cSliuzhongzhu 		 shap_cfg_cmd->pri_shapping_para);
23596227f4cSliuzhongzhu 
23696227f4cSliuzhongzhu 	hclge_dbg_dump_tm_pg(hdev);
23796227f4cSliuzhongzhu 
23896227f4cSliuzhongzhu 	return;
23996227f4cSliuzhongzhu 
24096227f4cSliuzhongzhu err_tm_cmd_send:
24196227f4cSliuzhongzhu 	dev_err(&hdev->pdev->dev, "dump tm fail(0x%x), status is %d\n",
24296227f4cSliuzhongzhu 		cmd, ret);
24396227f4cSliuzhongzhu }
24496227f4cSliuzhongzhu 
2453c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, u8 stage,
2463c666b58Sliuzhongzhu 				   bool sel_x, u32 loc)
2473c666b58Sliuzhongzhu {
2483c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_1_cmd *req1;
2493c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_2_cmd *req2;
2503c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_3_cmd *req3;
2513c666b58Sliuzhongzhu 	struct hclge_desc desc[3];
2523c666b58Sliuzhongzhu 	int ret, i;
2533c666b58Sliuzhongzhu 	u32 *req;
2543c666b58Sliuzhongzhu 
2553c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, true);
2563c666b58Sliuzhongzhu 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2573c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, true);
2583c666b58Sliuzhongzhu 	desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2593c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, true);
2603c666b58Sliuzhongzhu 
2613c666b58Sliuzhongzhu 	req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data;
2623c666b58Sliuzhongzhu 	req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data;
2633c666b58Sliuzhongzhu 	req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data;
2643c666b58Sliuzhongzhu 
2653c666b58Sliuzhongzhu 	req1->stage  = stage;
2663c666b58Sliuzhongzhu 	req1->xy_sel = sel_x ? 1 : 0;
2673c666b58Sliuzhongzhu 	req1->index  = cpu_to_le32(loc);
2683c666b58Sliuzhongzhu 
2693c666b58Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 3);
2703c666b58Sliuzhongzhu 	if (ret)
2713c666b58Sliuzhongzhu 		return;
2723c666b58Sliuzhongzhu 
2733c666b58Sliuzhongzhu 	dev_info(&hdev->pdev->dev, " read result tcam key %s(%u):\n",
2743c666b58Sliuzhongzhu 		 sel_x ? "x" : "y", loc);
2753c666b58Sliuzhongzhu 
2763c666b58Sliuzhongzhu 	req = (u32 *)req1->tcam_data;
2773c666b58Sliuzhongzhu 	for (i = 0; i < 2; i++)
2783c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
2793c666b58Sliuzhongzhu 
2803c666b58Sliuzhongzhu 	req = (u32 *)req2->tcam_data;
2813c666b58Sliuzhongzhu 	for (i = 0; i < 6; i++)
2823c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
2833c666b58Sliuzhongzhu 
2843c666b58Sliuzhongzhu 	req = (u32 *)req3->tcam_data;
2853c666b58Sliuzhongzhu 	for (i = 0; i < 5; i++)
2863c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
2873c666b58Sliuzhongzhu }
2883c666b58Sliuzhongzhu 
2893c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam(struct hclge_dev *hdev)
2903c666b58Sliuzhongzhu {
2913c666b58Sliuzhongzhu 	u32 i;
2923c666b58Sliuzhongzhu 
2933c666b58Sliuzhongzhu 	for (i = 0; i < hdev->fd_cfg.rule_num[0]; i++) {
2943c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam_read(hdev, 0, true, i);
2953c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam_read(hdev, 0, false, i);
2963c666b58Sliuzhongzhu 	}
2973c666b58Sliuzhongzhu }
2983c666b58Sliuzhongzhu 
2993c666b58Sliuzhongzhu int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf)
3003c666b58Sliuzhongzhu {
3013c666b58Sliuzhongzhu 	struct hclge_vport *vport = hclge_get_vport(handle);
3023c666b58Sliuzhongzhu 	struct hclge_dev *hdev = vport->back;
3033c666b58Sliuzhongzhu 
3043c666b58Sliuzhongzhu 	if (strncmp(cmd_buf, "dump fd tcam", 12) == 0) {
3053c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam(hdev);
3062849d4e7Sliuzhongzhu 	} else if (strncmp(cmd_buf, "dump tc", 7) == 0) {
3072849d4e7Sliuzhongzhu 		hclge_dbg_dump_tc(hdev);
30896227f4cSliuzhongzhu 	} else if (strncmp(cmd_buf, "dump tm", 7) == 0) {
30996227f4cSliuzhongzhu 		hclge_dbg_dump_tm(hdev);
3103c666b58Sliuzhongzhu 	} else {
3113c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "unknown command\n");
3123c666b58Sliuzhongzhu 		return -EINVAL;
3133c666b58Sliuzhongzhu 	}
3143c666b58Sliuzhongzhu 
3153c666b58Sliuzhongzhu 	return 0;
3163c666b58Sliuzhongzhu }
317