13c666b58Sliuzhongzhu // SPDX-License-Identifier: GPL-2.0+
23c666b58Sliuzhongzhu /* Copyright (c) 2018-2019 Hisilicon Limited. */
33c666b58Sliuzhongzhu 
43c666b58Sliuzhongzhu #include <linux/device.h>
53c666b58Sliuzhongzhu 
66fc22440Sliuzhongzhu #include "hclge_debugfs.h"
73c666b58Sliuzhongzhu #include "hclge_cmd.h"
83c666b58Sliuzhongzhu #include "hclge_main.h"
92849d4e7Sliuzhongzhu #include "hclge_tm.h"
103c666b58Sliuzhongzhu #include "hnae3.h"
113c666b58Sliuzhongzhu 
1227cf979aSliuzhongzhu static int hclge_dbg_get_dfx_bd_num(struct hclge_dev *hdev, int offset)
1327cf979aSliuzhongzhu {
1427cf979aSliuzhongzhu 	struct hclge_desc desc[4];
1527cf979aSliuzhongzhu 	int ret;
1627cf979aSliuzhongzhu 
1727cf979aSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_DFX_BD_NUM, true);
1827cf979aSliuzhongzhu 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
1927cf979aSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_DFX_BD_NUM, true);
2027cf979aSliuzhongzhu 	desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2127cf979aSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_DFX_BD_NUM, true);
2227cf979aSliuzhongzhu 	desc[2].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2327cf979aSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[3], HCLGE_OPC_DFX_BD_NUM, true);
2427cf979aSliuzhongzhu 
2527cf979aSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 4);
2627cf979aSliuzhongzhu 	if (ret != HCLGE_CMD_EXEC_SUCCESS) {
2727cf979aSliuzhongzhu 		dev_err(&hdev->pdev->dev,
2827cf979aSliuzhongzhu 			"get dfx bdnum fail, status is %d.\n", ret);
2927cf979aSliuzhongzhu 		return ret;
3027cf979aSliuzhongzhu 	}
3127cf979aSliuzhongzhu 
3227cf979aSliuzhongzhu 	return (int)desc[offset / 6].data[offset % 6];
3327cf979aSliuzhongzhu }
3427cf979aSliuzhongzhu 
3527cf979aSliuzhongzhu static int hclge_dbg_cmd_send(struct hclge_dev *hdev,
3627cf979aSliuzhongzhu 			      struct hclge_desc *desc_src,
3727cf979aSliuzhongzhu 			      int index, int bd_num,
3827cf979aSliuzhongzhu 			      enum hclge_opcode_type cmd)
3927cf979aSliuzhongzhu {
4027cf979aSliuzhongzhu 	struct hclge_desc *desc = desc_src;
4127cf979aSliuzhongzhu 	int ret, i;
4227cf979aSliuzhongzhu 
4327cf979aSliuzhongzhu 	hclge_cmd_setup_basic_desc(desc, cmd, true);
4427cf979aSliuzhongzhu 	desc->data[0] = cpu_to_le32(index);
4527cf979aSliuzhongzhu 
4627cf979aSliuzhongzhu 	for (i = 1; i < bd_num; i++) {
4727cf979aSliuzhongzhu 		desc->flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
4827cf979aSliuzhongzhu 		desc++;
4927cf979aSliuzhongzhu 		hclge_cmd_setup_basic_desc(desc, cmd, true);
5027cf979aSliuzhongzhu 	}
5127cf979aSliuzhongzhu 
5227cf979aSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc_src, bd_num);
5327cf979aSliuzhongzhu 	if (ret) {
5427cf979aSliuzhongzhu 		dev_err(&hdev->pdev->dev,
5527cf979aSliuzhongzhu 			"read reg cmd send fail, status is %d.\n", ret);
5627cf979aSliuzhongzhu 		return ret;
5727cf979aSliuzhongzhu 	}
5827cf979aSliuzhongzhu 
5927cf979aSliuzhongzhu 	return ret;
6027cf979aSliuzhongzhu }
6127cf979aSliuzhongzhu 
6227cf979aSliuzhongzhu static void hclge_dbg_dump_reg_common(struct hclge_dev *hdev,
6327cf979aSliuzhongzhu 				      struct hclge_dbg_dfx_message *dfx_message,
6427cf979aSliuzhongzhu 				      char *cmd_buf, int msg_num, int offset,
6527cf979aSliuzhongzhu 				      enum hclge_opcode_type cmd)
6627cf979aSliuzhongzhu {
6727cf979aSliuzhongzhu 	struct hclge_desc *desc_src;
6827cf979aSliuzhongzhu 	struct hclge_desc *desc;
6927cf979aSliuzhongzhu 	int bd_num, buf_len;
7027cf979aSliuzhongzhu 	int ret, i;
7127cf979aSliuzhongzhu 	int index;
7227cf979aSliuzhongzhu 	int max;
7327cf979aSliuzhongzhu 
7427cf979aSliuzhongzhu 	ret = kstrtouint(cmd_buf, 10, &index);
7527cf979aSliuzhongzhu 	index = (ret != 0) ? 0 : index;
7627cf979aSliuzhongzhu 
7727cf979aSliuzhongzhu 	bd_num = hclge_dbg_get_dfx_bd_num(hdev, offset);
7827cf979aSliuzhongzhu 	if (bd_num <= 0)
7927cf979aSliuzhongzhu 		return;
8027cf979aSliuzhongzhu 
8127cf979aSliuzhongzhu 	buf_len	 = sizeof(struct hclge_desc) * bd_num;
8227cf979aSliuzhongzhu 	desc_src = kzalloc(buf_len, GFP_KERNEL);
8327cf979aSliuzhongzhu 	if (!desc_src) {
8427cf979aSliuzhongzhu 		dev_err(&hdev->pdev->dev, "call kzalloc failed\n");
8527cf979aSliuzhongzhu 		return;
8627cf979aSliuzhongzhu 	}
8727cf979aSliuzhongzhu 
8827cf979aSliuzhongzhu 	desc = desc_src;
8927cf979aSliuzhongzhu 	ret  = hclge_dbg_cmd_send(hdev, desc, index, bd_num, cmd);
9027cf979aSliuzhongzhu 	if (ret != HCLGE_CMD_EXEC_SUCCESS) {
9127cf979aSliuzhongzhu 		kfree(desc_src);
9227cf979aSliuzhongzhu 		return;
9327cf979aSliuzhongzhu 	}
9427cf979aSliuzhongzhu 
9527cf979aSliuzhongzhu 	max = (bd_num * 6) <= msg_num ? (bd_num * 6) : msg_num;
9627cf979aSliuzhongzhu 
9727cf979aSliuzhongzhu 	desc = desc_src;
9827cf979aSliuzhongzhu 	for (i = 0; i < max; i++) {
9927cf979aSliuzhongzhu 		(((i / 6) > 0) && ((i % 6) == 0)) ? desc++ : desc;
10027cf979aSliuzhongzhu 		if (dfx_message->flag)
10127cf979aSliuzhongzhu 			dev_info(&hdev->pdev->dev, "%s: 0x%x\n",
10227cf979aSliuzhongzhu 				 dfx_message->message, desc->data[i % 6]);
10327cf979aSliuzhongzhu 
10427cf979aSliuzhongzhu 		dfx_message++;
10527cf979aSliuzhongzhu 	}
10627cf979aSliuzhongzhu 
10727cf979aSliuzhongzhu 	kfree(desc_src);
10827cf979aSliuzhongzhu }
10927cf979aSliuzhongzhu 
110c0ebebb9Sliuzhongzhu static void hclge_dbg_dump_dcb(struct hclge_dev *hdev, char *cmd_buf)
111c0ebebb9Sliuzhongzhu {
112c0ebebb9Sliuzhongzhu 	struct device *dev = &hdev->pdev->dev;
113c0ebebb9Sliuzhongzhu 	struct hclge_dbg_bitmap_cmd *bitmap;
114c0ebebb9Sliuzhongzhu 	int rq_id, pri_id, qset_id;
115c0ebebb9Sliuzhongzhu 	int port_id, nq_id, pg_id;
116c0ebebb9Sliuzhongzhu 	struct hclge_desc desc[2];
117c0ebebb9Sliuzhongzhu 
118c0ebebb9Sliuzhongzhu 	int cnt, ret;
119c0ebebb9Sliuzhongzhu 
120c0ebebb9Sliuzhongzhu 	cnt = sscanf(cmd_buf, "%i %i %i %i %i %i",
121c0ebebb9Sliuzhongzhu 		     &port_id, &pri_id, &pg_id, &rq_id, &nq_id, &qset_id);
122c0ebebb9Sliuzhongzhu 	if (cnt != 6) {
123c0ebebb9Sliuzhongzhu 		dev_err(&hdev->pdev->dev,
124c0ebebb9Sliuzhongzhu 			"dump dcb: bad command parameter, cnt=%d\n", cnt);
125c0ebebb9Sliuzhongzhu 		return;
126c0ebebb9Sliuzhongzhu 	}
127c0ebebb9Sliuzhongzhu 
128c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, qset_id, 1,
129c0ebebb9Sliuzhongzhu 				 HCLGE_OPC_QSET_DFX_STS);
130c0ebebb9Sliuzhongzhu 	if (ret)
131c0ebebb9Sliuzhongzhu 		return;
132c0ebebb9Sliuzhongzhu 
133c0ebebb9Sliuzhongzhu 	bitmap = (struct hclge_dbg_bitmap_cmd *)&desc[0].data[1];
134c0ebebb9Sliuzhongzhu 	dev_info(dev, "roce_qset_mask: 0x%x\n", bitmap->bit0);
135c0ebebb9Sliuzhongzhu 	dev_info(dev, "nic_qs_mask: 0x%x\n", bitmap->bit1);
136c0ebebb9Sliuzhongzhu 	dev_info(dev, "qs_shaping_pass: 0x%x\n", bitmap->bit2);
137c0ebebb9Sliuzhongzhu 	dev_info(dev, "qs_bp_sts: 0x%x\n", bitmap->bit3);
138c0ebebb9Sliuzhongzhu 
139c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, pri_id, 1, HCLGE_OPC_PRI_DFX_STS);
140c0ebebb9Sliuzhongzhu 	if (ret)
141c0ebebb9Sliuzhongzhu 		return;
142c0ebebb9Sliuzhongzhu 
143c0ebebb9Sliuzhongzhu 	bitmap = (struct hclge_dbg_bitmap_cmd *)&desc[0].data[1];
144c0ebebb9Sliuzhongzhu 	dev_info(dev, "pri_mask: 0x%x\n", bitmap->bit0);
145c0ebebb9Sliuzhongzhu 	dev_info(dev, "pri_cshaping_pass: 0x%x\n", bitmap->bit1);
146c0ebebb9Sliuzhongzhu 	dev_info(dev, "pri_pshaping_pass: 0x%x\n", bitmap->bit2);
147c0ebebb9Sliuzhongzhu 
148c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, pg_id, 1, HCLGE_OPC_PG_DFX_STS);
149c0ebebb9Sliuzhongzhu 	if (ret)
150c0ebebb9Sliuzhongzhu 		return;
151c0ebebb9Sliuzhongzhu 
152c0ebebb9Sliuzhongzhu 	bitmap = (struct hclge_dbg_bitmap_cmd *)&desc[0].data[1];
153c0ebebb9Sliuzhongzhu 	dev_info(dev, "pg_mask: 0x%x\n", bitmap->bit0);
154c0ebebb9Sliuzhongzhu 	dev_info(dev, "pg_cshaping_pass: 0x%x\n", bitmap->bit1);
155c0ebebb9Sliuzhongzhu 	dev_info(dev, "pg_pshaping_pass: 0x%x\n", bitmap->bit2);
156c0ebebb9Sliuzhongzhu 
157c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, port_id, 1,
158c0ebebb9Sliuzhongzhu 				 HCLGE_OPC_PORT_DFX_STS);
159c0ebebb9Sliuzhongzhu 	if (ret)
160c0ebebb9Sliuzhongzhu 		return;
161c0ebebb9Sliuzhongzhu 
162c0ebebb9Sliuzhongzhu 	bitmap = (struct hclge_dbg_bitmap_cmd *)&desc[0].data[1];
163c0ebebb9Sliuzhongzhu 	dev_info(dev, "port_mask: 0x%x\n", bitmap->bit0);
164c0ebebb9Sliuzhongzhu 	dev_info(dev, "port_shaping_pass: 0x%x\n", bitmap->bit1);
165c0ebebb9Sliuzhongzhu 
166c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, nq_id, 1, HCLGE_OPC_SCH_NQ_CNT);
167c0ebebb9Sliuzhongzhu 	if (ret)
168c0ebebb9Sliuzhongzhu 		return;
169c0ebebb9Sliuzhongzhu 
170c0ebebb9Sliuzhongzhu 	dev_info(dev, "sch_nq_cnt: 0x%x\n", desc[0].data[1]);
171c0ebebb9Sliuzhongzhu 
172c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, nq_id, 1, HCLGE_OPC_SCH_RQ_CNT);
173c0ebebb9Sliuzhongzhu 	if (ret)
174c0ebebb9Sliuzhongzhu 		return;
175c0ebebb9Sliuzhongzhu 
176c0ebebb9Sliuzhongzhu 	dev_info(dev, "sch_rq_cnt: 0x%x\n", desc[0].data[1]);
177c0ebebb9Sliuzhongzhu 
178c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, 0, 2, HCLGE_OPC_TM_INTERNAL_STS);
179c0ebebb9Sliuzhongzhu 	if (ret)
180c0ebebb9Sliuzhongzhu 		return;
181c0ebebb9Sliuzhongzhu 
182c0ebebb9Sliuzhongzhu 	dev_info(dev, "pri_bp: 0x%x\n", desc[0].data[1]);
183c0ebebb9Sliuzhongzhu 	dev_info(dev, "fifo_dfx_info: 0x%x\n", desc[0].data[2]);
184c0ebebb9Sliuzhongzhu 	dev_info(dev, "sch_roce_fifo_afull_gap: 0x%x\n", desc[0].data[3]);
185c0ebebb9Sliuzhongzhu 	dev_info(dev, "tx_private_waterline: 0x%x\n", desc[0].data[4]);
186c0ebebb9Sliuzhongzhu 	dev_info(dev, "tm_bypass_en: 0x%x\n", desc[0].data[5]);
187c0ebebb9Sliuzhongzhu 	dev_info(dev, "SSU_TM_BYPASS_EN: 0x%x\n", desc[1].data[0]);
188c0ebebb9Sliuzhongzhu 	dev_info(dev, "SSU_RESERVE_CFG: 0x%x\n", desc[1].data[1]);
189c0ebebb9Sliuzhongzhu 
190c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, port_id, 1,
191c0ebebb9Sliuzhongzhu 				 HCLGE_OPC_TM_INTERNAL_CNT);
192c0ebebb9Sliuzhongzhu 	if (ret)
193c0ebebb9Sliuzhongzhu 		return;
194c0ebebb9Sliuzhongzhu 
195c0ebebb9Sliuzhongzhu 	dev_info(dev, "SCH_NIC_NUM: 0x%x\n", desc[0].data[1]);
196c0ebebb9Sliuzhongzhu 	dev_info(dev, "SCH_ROCE_NUM: 0x%x\n", desc[0].data[2]);
197c0ebebb9Sliuzhongzhu 
198c0ebebb9Sliuzhongzhu 	ret = hclge_dbg_cmd_send(hdev, desc, port_id, 1,
199c0ebebb9Sliuzhongzhu 				 HCLGE_OPC_TM_INTERNAL_STS_1);
200c0ebebb9Sliuzhongzhu 	if (ret)
201c0ebebb9Sliuzhongzhu 		return;
202c0ebebb9Sliuzhongzhu 
203c0ebebb9Sliuzhongzhu 	dev_info(dev, "TC_MAP_SEL: 0x%x\n", desc[0].data[1]);
204c0ebebb9Sliuzhongzhu 	dev_info(dev, "IGU_PFC_PRI_EN: 0x%x\n", desc[0].data[2]);
205c0ebebb9Sliuzhongzhu 	dev_info(dev, "MAC_PFC_PRI_EN: 0x%x\n", desc[0].data[3]);
206c0ebebb9Sliuzhongzhu 	dev_info(dev, "IGU_PRI_MAP_TC_CFG: 0x%x\n", desc[0].data[4]);
207c0ebebb9Sliuzhongzhu 	dev_info(dev, "IGU_TX_PRI_MAP_TC_CFG: 0x%x\n", desc[0].data[5]);
208c0ebebb9Sliuzhongzhu }
209c0ebebb9Sliuzhongzhu 
21027cf979aSliuzhongzhu static void hclge_dbg_dump_reg_cmd(struct hclge_dev *hdev, char *cmd_buf)
21127cf979aSliuzhongzhu {
21227cf979aSliuzhongzhu 	int msg_num;
21327cf979aSliuzhongzhu 
21427cf979aSliuzhongzhu 	if (strncmp(&cmd_buf[9], "bios common", 11) == 0) {
21527cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_bios_common_reg) /
21627cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
21727cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_bios_common_reg,
21827cf979aSliuzhongzhu 					  &cmd_buf[21], msg_num,
21927cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_BIOS_OFFSET,
22027cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_BIOS_COMMON_REG);
22127cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "ssu", 3) == 0) {
22227cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_ssu_reg_0) /
22327cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
22427cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_ssu_reg_0,
22527cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
22627cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_SSU_0_OFFSET,
22727cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_SSU_REG_0);
22827cf979aSliuzhongzhu 
22927cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_ssu_reg_1) /
23027cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
23127cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_ssu_reg_1,
23227cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
23327cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_SSU_1_OFFSET,
23427cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_SSU_REG_1);
23527cf979aSliuzhongzhu 
23627cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_ssu_reg_2) /
23727cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
23827cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_ssu_reg_2,
23927cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
24027cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_SSU_2_OFFSET,
24127cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_SSU_REG_2);
24227cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "igu egu", 7) == 0) {
24327cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_igu_egu_reg) /
24427cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
24527cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_igu_egu_reg,
24627cf979aSliuzhongzhu 					  &cmd_buf[17], msg_num,
24727cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_IGU_OFFSET,
24827cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_IGU_EGU_REG);
24927cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "rpu", 3) == 0) {
25027cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_rpu_reg_0) /
25127cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
25227cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_rpu_reg_0,
25327cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
25427cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_RPU_0_OFFSET,
25527cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_RPU_REG_0);
25627cf979aSliuzhongzhu 
25727cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_rpu_reg_1) /
25827cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
25927cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_rpu_reg_1,
26027cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
26127cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_RPU_1_OFFSET,
26227cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_RPU_REG_1);
26327cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "ncsi", 4) == 0) {
26427cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_ncsi_reg) /
26527cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
26627cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_ncsi_reg,
26727cf979aSliuzhongzhu 					  &cmd_buf[14], msg_num,
26827cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_NCSI_OFFSET,
26927cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_NCSI_REG);
27027cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "rtc", 3) == 0) {
27127cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_rtc_reg) /
27227cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
27327cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_rtc_reg,
27427cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
27527cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_RTC_OFFSET,
27627cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_RTC_REG);
27727cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "ppp", 3) == 0) {
27827cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_ppp_reg) /
27927cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
28027cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_ppp_reg,
28127cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
28227cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_PPP_OFFSET,
28327cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_PPP_REG);
28427cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "rcb", 3) == 0) {
28527cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_rcb_reg) /
28627cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
28727cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_rcb_reg,
28827cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
28927cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_RCB_OFFSET,
29027cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_RCB_REG);
29127cf979aSliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "tqp", 3) == 0) {
29227cf979aSliuzhongzhu 		msg_num = sizeof(hclge_dbg_tqp_reg) /
29327cf979aSliuzhongzhu 			  sizeof(struct hclge_dbg_dfx_message);
29427cf979aSliuzhongzhu 		hclge_dbg_dump_reg_common(hdev, hclge_dbg_tqp_reg,
29527cf979aSliuzhongzhu 					  &cmd_buf[13], msg_num,
29627cf979aSliuzhongzhu 					  HCLGE_DBG_DFX_TQP_OFFSET,
29727cf979aSliuzhongzhu 					  HCLGE_OPC_DFX_TQP_REG);
298c0ebebb9Sliuzhongzhu 	} else if (strncmp(&cmd_buf[9], "dcb", 3) == 0) {
299c0ebebb9Sliuzhongzhu 		hclge_dbg_dump_dcb(hdev, &cmd_buf[13]);
30027cf979aSliuzhongzhu 	} else {
30127cf979aSliuzhongzhu 		dev_info(&hdev->pdev->dev, "unknown command\n");
30227cf979aSliuzhongzhu 		return;
30327cf979aSliuzhongzhu 	}
30427cf979aSliuzhongzhu }
30527cf979aSliuzhongzhu 
3062849d4e7Sliuzhongzhu static void hclge_title_idx_print(struct hclge_dev *hdev, bool flag, int index,
3072849d4e7Sliuzhongzhu 				  char *title_buf, char *true_buf,
3082849d4e7Sliuzhongzhu 				  char *false_buf)
3092849d4e7Sliuzhongzhu {
3102849d4e7Sliuzhongzhu 	if (flag)
3112849d4e7Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index,
3122849d4e7Sliuzhongzhu 			 true_buf);
3132849d4e7Sliuzhongzhu 	else
3142849d4e7Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index,
3152849d4e7Sliuzhongzhu 			 false_buf);
3162849d4e7Sliuzhongzhu }
3172849d4e7Sliuzhongzhu 
3182849d4e7Sliuzhongzhu static void hclge_dbg_dump_tc(struct hclge_dev *hdev)
3192849d4e7Sliuzhongzhu {
3202849d4e7Sliuzhongzhu 	struct hclge_ets_tc_weight_cmd *ets_weight;
3212849d4e7Sliuzhongzhu 	struct hclge_desc desc;
3222849d4e7Sliuzhongzhu 	int i, ret;
3232849d4e7Sliuzhongzhu 
3242849d4e7Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_ETS_TC_WEIGHT, true);
3252849d4e7Sliuzhongzhu 
3262849d4e7Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3272849d4e7Sliuzhongzhu 	if (ret) {
3282849d4e7Sliuzhongzhu 		dev_err(&hdev->pdev->dev, "dump tc fail, status is %d.\n", ret);
3292849d4e7Sliuzhongzhu 		return;
3302849d4e7Sliuzhongzhu 	}
3312849d4e7Sliuzhongzhu 
3322849d4e7Sliuzhongzhu 	ets_weight = (struct hclge_ets_tc_weight_cmd *)desc.data;
3332849d4e7Sliuzhongzhu 
3342849d4e7Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump tc\n");
3352849d4e7Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "weight_offset: %u\n",
3362849d4e7Sliuzhongzhu 		 ets_weight->weight_offset);
3372849d4e7Sliuzhongzhu 
3382849d4e7Sliuzhongzhu 	for (i = 0; i < HNAE3_MAX_TC; i++)
3392849d4e7Sliuzhongzhu 		hclge_title_idx_print(hdev, ets_weight->tc_weight[i], i,
3402849d4e7Sliuzhongzhu 				      "tc", "no sp mode", "sp mode");
3412849d4e7Sliuzhongzhu }
3422849d4e7Sliuzhongzhu 
34396227f4cSliuzhongzhu static void hclge_dbg_dump_tm_pg(struct hclge_dev *hdev)
34496227f4cSliuzhongzhu {
34596227f4cSliuzhongzhu 	struct hclge_port_shapping_cmd *port_shap_cfg_cmd;
34696227f4cSliuzhongzhu 	struct hclge_bp_to_qs_map_cmd *bp_to_qs_map_cmd;
34796227f4cSliuzhongzhu 	struct hclge_pg_shapping_cmd *pg_shap_cfg_cmd;
34896227f4cSliuzhongzhu 	enum hclge_opcode_type cmd;
34996227f4cSliuzhongzhu 	struct hclge_desc desc;
35096227f4cSliuzhongzhu 	int ret;
35196227f4cSliuzhongzhu 
35296227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_C_SHAPPING;
35396227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
35496227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
35596227f4cSliuzhongzhu 	if (ret)
35696227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
35796227f4cSliuzhongzhu 
35896227f4cSliuzhongzhu 	pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data;
35996227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_C pg_id: %u\n", pg_shap_cfg_cmd->pg_id);
36096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_C pg_shapping: 0x%x\n",
36196227f4cSliuzhongzhu 		 pg_shap_cfg_cmd->pg_shapping_para);
36296227f4cSliuzhongzhu 
36396227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_P_SHAPPING;
36496227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
36596227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
36696227f4cSliuzhongzhu 	if (ret)
36796227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
36896227f4cSliuzhongzhu 
36996227f4cSliuzhongzhu 	pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data;
37096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_P pg_id: %u\n", pg_shap_cfg_cmd->pg_id);
37196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_P pg_shapping: 0x%x\n",
37296227f4cSliuzhongzhu 		 pg_shap_cfg_cmd->pg_shapping_para);
37396227f4cSliuzhongzhu 
37496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PORT_SHAPPING;
37596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
37696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
37796227f4cSliuzhongzhu 	if (ret)
37896227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
37996227f4cSliuzhongzhu 
38096227f4cSliuzhongzhu 	port_shap_cfg_cmd = (struct hclge_port_shapping_cmd *)desc.data;
38196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PORT port_shapping: 0x%x\n",
38296227f4cSliuzhongzhu 		 port_shap_cfg_cmd->port_shapping_para);
38396227f4cSliuzhongzhu 
38496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_SCH_MODE_CFG;
38596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
38696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
38796227f4cSliuzhongzhu 	if (ret)
38896227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
38996227f4cSliuzhongzhu 
39096227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_SCH pg_id: %u\n", desc.data[0]);
39196227f4cSliuzhongzhu 
39296227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_SCH_MODE_CFG;
39396227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
39496227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
39596227f4cSliuzhongzhu 	if (ret)
39696227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
39796227f4cSliuzhongzhu 
39896227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_SCH pg_id: %u\n", desc.data[0]);
39996227f4cSliuzhongzhu 
40096227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_SCH_MODE_CFG;
40196227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
40296227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
40396227f4cSliuzhongzhu 	if (ret)
40496227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
40596227f4cSliuzhongzhu 
40696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_SCH pg_id: %u\n", desc.data[0]);
40796227f4cSliuzhongzhu 
40896227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_BP_TO_QSET_MAPPING;
40996227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
41096227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
41196227f4cSliuzhongzhu 	if (ret)
41296227f4cSliuzhongzhu 		goto err_tm_pg_cmd_send;
41396227f4cSliuzhongzhu 
41496227f4cSliuzhongzhu 	bp_to_qs_map_cmd = (struct hclge_bp_to_qs_map_cmd *)desc.data;
41596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_id: %u\n",
41696227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->tc_id);
41796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_shapping: 0x%x\n",
41896227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->qs_group_id);
41996227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "BP_TO_QSET qs_bit_map: 0x%x\n",
42096227f4cSliuzhongzhu 		 bp_to_qs_map_cmd->qs_bit_map);
42196227f4cSliuzhongzhu 	return;
42296227f4cSliuzhongzhu 
42396227f4cSliuzhongzhu err_tm_pg_cmd_send:
42496227f4cSliuzhongzhu 	dev_err(&hdev->pdev->dev, "dump tm_pg fail(0x%x), status is %d\n",
42596227f4cSliuzhongzhu 		cmd, ret);
42696227f4cSliuzhongzhu }
42796227f4cSliuzhongzhu 
42896227f4cSliuzhongzhu static void hclge_dbg_dump_tm(struct hclge_dev *hdev)
42996227f4cSliuzhongzhu {
43096227f4cSliuzhongzhu 	struct hclge_priority_weight_cmd *priority_weight;
43196227f4cSliuzhongzhu 	struct hclge_pg_to_pri_link_cmd *pg_to_pri_map;
43296227f4cSliuzhongzhu 	struct hclge_qs_to_pri_link_cmd *qs_to_pri_map;
43396227f4cSliuzhongzhu 	struct hclge_nq_to_qs_link_cmd *nq_to_qs_map;
43496227f4cSliuzhongzhu 	struct hclge_pri_shapping_cmd *shap_cfg_cmd;
43596227f4cSliuzhongzhu 	struct hclge_pg_weight_cmd *pg_weight;
43696227f4cSliuzhongzhu 	struct hclge_qs_weight_cmd *qs_weight;
43796227f4cSliuzhongzhu 	enum hclge_opcode_type cmd;
43896227f4cSliuzhongzhu 	struct hclge_desc desc;
43996227f4cSliuzhongzhu 	int ret;
44096227f4cSliuzhongzhu 
44196227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_TO_PRI_LINK;
44296227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
44396227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
44496227f4cSliuzhongzhu 	if (ret)
44596227f4cSliuzhongzhu 		goto err_tm_cmd_send;
44696227f4cSliuzhongzhu 
44796227f4cSliuzhongzhu 	pg_to_pri_map = (struct hclge_pg_to_pri_link_cmd *)desc.data;
44896227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump tm\n");
44996227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_TO_PRI gp_id: %u\n",
45096227f4cSliuzhongzhu 		 pg_to_pri_map->pg_id);
45196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG_TO_PRI map: 0x%x\n",
45296227f4cSliuzhongzhu 		 pg_to_pri_map->pri_bit_map);
45396227f4cSliuzhongzhu 
45496227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_TO_PRI_LINK;
45596227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
45696227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
45796227f4cSliuzhongzhu 	if (ret)
45896227f4cSliuzhongzhu 		goto err_tm_cmd_send;
45996227f4cSliuzhongzhu 
46096227f4cSliuzhongzhu 	qs_to_pri_map = (struct hclge_qs_to_pri_link_cmd *)desc.data;
46196227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI qs_id: %u\n",
46296227f4cSliuzhongzhu 		 qs_to_pri_map->qs_id);
46396227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI priority: %u\n",
46496227f4cSliuzhongzhu 		 qs_to_pri_map->priority);
46596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS_TO_PRI link_vld: %u\n",
46696227f4cSliuzhongzhu 		 qs_to_pri_map->link_vld);
46796227f4cSliuzhongzhu 
46896227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_NQ_TO_QS_LINK;
46996227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
47096227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
47196227f4cSliuzhongzhu 	if (ret)
47296227f4cSliuzhongzhu 		goto err_tm_cmd_send;
47396227f4cSliuzhongzhu 
47496227f4cSliuzhongzhu 	nq_to_qs_map = (struct hclge_nq_to_qs_link_cmd *)desc.data;
47596227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "NQ_TO_QS nq_id: %u\n", nq_to_qs_map->nq_id);
47696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "NQ_TO_QS qset_id: %u\n",
47796227f4cSliuzhongzhu 		 nq_to_qs_map->qset_id);
47896227f4cSliuzhongzhu 
47996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PG_WEIGHT;
48096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
48196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
48296227f4cSliuzhongzhu 	if (ret)
48396227f4cSliuzhongzhu 		goto err_tm_cmd_send;
48496227f4cSliuzhongzhu 
48596227f4cSliuzhongzhu 	pg_weight = (struct hclge_pg_weight_cmd *)desc.data;
48696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG pg_id: %u\n", pg_weight->pg_id);
48796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PG dwrr: %u\n", pg_weight->dwrr);
48896227f4cSliuzhongzhu 
48996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_WEIGHT;
49096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
49196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
49296227f4cSliuzhongzhu 	if (ret)
49396227f4cSliuzhongzhu 		goto err_tm_cmd_send;
49496227f4cSliuzhongzhu 
49596227f4cSliuzhongzhu 	qs_weight = (struct hclge_qs_weight_cmd *)desc.data;
49696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS qs_id: %u\n", qs_weight->qs_id);
49796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "QS dwrr: %u\n", qs_weight->dwrr);
49896227f4cSliuzhongzhu 
49996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_WEIGHT;
50096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
50196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
50296227f4cSliuzhongzhu 	if (ret)
50396227f4cSliuzhongzhu 		goto err_tm_cmd_send;
50496227f4cSliuzhongzhu 
50596227f4cSliuzhongzhu 	priority_weight = (struct hclge_priority_weight_cmd *)desc.data;
50696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI pri_id: %u\n", priority_weight->pri_id);
50796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI dwrr: %u\n", priority_weight->dwrr);
50896227f4cSliuzhongzhu 
50996227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_C_SHAPPING;
51096227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
51196227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
51296227f4cSliuzhongzhu 	if (ret)
51396227f4cSliuzhongzhu 		goto err_tm_cmd_send;
51496227f4cSliuzhongzhu 
51596227f4cSliuzhongzhu 	shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data;
51696227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_C pri_id: %u\n", shap_cfg_cmd->pri_id);
51796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_C pri_shapping: 0x%x\n",
51896227f4cSliuzhongzhu 		 shap_cfg_cmd->pri_shapping_para);
51996227f4cSliuzhongzhu 
52096227f4cSliuzhongzhu 	cmd = HCLGE_OPC_TM_PRI_P_SHAPPING;
52196227f4cSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
52296227f4cSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
52396227f4cSliuzhongzhu 	if (ret)
52496227f4cSliuzhongzhu 		goto err_tm_cmd_send;
52596227f4cSliuzhongzhu 
52696227f4cSliuzhongzhu 	shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data;
52796227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_P pri_id: %u\n", shap_cfg_cmd->pri_id);
52896227f4cSliuzhongzhu 	dev_info(&hdev->pdev->dev, "PRI_P pri_shapping: 0x%x\n",
52996227f4cSliuzhongzhu 		 shap_cfg_cmd->pri_shapping_para);
53096227f4cSliuzhongzhu 
53196227f4cSliuzhongzhu 	hclge_dbg_dump_tm_pg(hdev);
53296227f4cSliuzhongzhu 
53396227f4cSliuzhongzhu 	return;
53496227f4cSliuzhongzhu 
53596227f4cSliuzhongzhu err_tm_cmd_send:
53696227f4cSliuzhongzhu 	dev_err(&hdev->pdev->dev, "dump tm fail(0x%x), status is %d\n",
53796227f4cSliuzhongzhu 		cmd, ret);
53896227f4cSliuzhongzhu }
53996227f4cSliuzhongzhu 
54082e00b86Sliuzhongzhu static void hclge_dbg_dump_tm_map(struct hclge_dev *hdev, char *cmd_buf)
54182e00b86Sliuzhongzhu {
54282e00b86Sliuzhongzhu 	struct hclge_bp_to_qs_map_cmd *bp_to_qs_map_cmd;
54382e00b86Sliuzhongzhu 	struct hclge_nq_to_qs_link_cmd *nq_to_qs_map;
54482e00b86Sliuzhongzhu 	struct hclge_qs_to_pri_link_cmd *map;
54582e00b86Sliuzhongzhu 	struct hclge_tqp_tx_queue_tc_cmd *tc;
54682e00b86Sliuzhongzhu 	enum hclge_opcode_type cmd;
54782e00b86Sliuzhongzhu 	struct hclge_desc desc;
54882e00b86Sliuzhongzhu 	int queue_id, group_id;
54982e00b86Sliuzhongzhu 	u32 qset_maping[32];
55082e00b86Sliuzhongzhu 	int tc_id, qset_id;
55182e00b86Sliuzhongzhu 	int pri_id, ret;
55282e00b86Sliuzhongzhu 	u32 i;
55382e00b86Sliuzhongzhu 
55482e00b86Sliuzhongzhu 	ret = kstrtouint(&cmd_buf[12], 10, &queue_id);
55582e00b86Sliuzhongzhu 	queue_id = (ret != 0) ? 0 : queue_id;
55682e00b86Sliuzhongzhu 
55782e00b86Sliuzhongzhu 	cmd = HCLGE_OPC_TM_NQ_TO_QS_LINK;
55882e00b86Sliuzhongzhu 	nq_to_qs_map = (struct hclge_nq_to_qs_link_cmd *)desc.data;
55982e00b86Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
56082e00b86Sliuzhongzhu 	nq_to_qs_map->nq_id = cpu_to_le16(queue_id);
56182e00b86Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
56282e00b86Sliuzhongzhu 	if (ret)
56382e00b86Sliuzhongzhu 		goto err_tm_map_cmd_send;
56482e00b86Sliuzhongzhu 	qset_id = nq_to_qs_map->qset_id & 0x3FF;
56582e00b86Sliuzhongzhu 
56682e00b86Sliuzhongzhu 	cmd = HCLGE_OPC_TM_QS_TO_PRI_LINK;
56782e00b86Sliuzhongzhu 	map = (struct hclge_qs_to_pri_link_cmd *)desc.data;
56882e00b86Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
56982e00b86Sliuzhongzhu 	map->qs_id = cpu_to_le16(qset_id);
57082e00b86Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
57182e00b86Sliuzhongzhu 	if (ret)
57282e00b86Sliuzhongzhu 		goto err_tm_map_cmd_send;
57382e00b86Sliuzhongzhu 	pri_id = map->priority;
57482e00b86Sliuzhongzhu 
57582e00b86Sliuzhongzhu 	cmd = HCLGE_OPC_TQP_TX_QUEUE_TC;
57682e00b86Sliuzhongzhu 	tc = (struct hclge_tqp_tx_queue_tc_cmd *)desc.data;
57782e00b86Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, cmd, true);
57882e00b86Sliuzhongzhu 	tc->queue_id = cpu_to_le16(queue_id);
57982e00b86Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
58082e00b86Sliuzhongzhu 	if (ret)
58182e00b86Sliuzhongzhu 		goto err_tm_map_cmd_send;
58282e00b86Sliuzhongzhu 	tc_id = tc->tc_id & 0x7;
58382e00b86Sliuzhongzhu 
58482e00b86Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "queue_id | qset_id | pri_id | tc_id\n");
58582e00b86Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "%04d     | %04d    | %02d     | %02d\n",
58682e00b86Sliuzhongzhu 		 queue_id, qset_id, pri_id, tc_id);
58782e00b86Sliuzhongzhu 
58882e00b86Sliuzhongzhu 	cmd = HCLGE_OPC_TM_BP_TO_QSET_MAPPING;
58982e00b86Sliuzhongzhu 	bp_to_qs_map_cmd = (struct hclge_bp_to_qs_map_cmd *)desc.data;
59082e00b86Sliuzhongzhu 	for (group_id = 0; group_id < 32; group_id++) {
59182e00b86Sliuzhongzhu 		hclge_cmd_setup_basic_desc(&desc, cmd, true);
59282e00b86Sliuzhongzhu 		bp_to_qs_map_cmd->tc_id = tc_id;
59382e00b86Sliuzhongzhu 		bp_to_qs_map_cmd->qs_group_id = group_id;
59482e00b86Sliuzhongzhu 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
59582e00b86Sliuzhongzhu 		if (ret)
59682e00b86Sliuzhongzhu 			goto err_tm_map_cmd_send;
59782e00b86Sliuzhongzhu 
59882e00b86Sliuzhongzhu 		qset_maping[group_id] = bp_to_qs_map_cmd->qs_bit_map;
59982e00b86Sliuzhongzhu 	}
60082e00b86Sliuzhongzhu 
60182e00b86Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "index | tm bp qset maping:\n");
60282e00b86Sliuzhongzhu 
60382e00b86Sliuzhongzhu 	i = 0;
60482e00b86Sliuzhongzhu 	for (group_id = 0; group_id < 4; group_id++) {
60582e00b86Sliuzhongzhu 		dev_info(&hdev->pdev->dev,
60682e00b86Sliuzhongzhu 			 "%04d  | %08x:%08x:%08x:%08x:%08x:%08x:%08x:%08x\n",
60782e00b86Sliuzhongzhu 			 group_id * 256, qset_maping[(u32)(i + 7)],
60882e00b86Sliuzhongzhu 			 qset_maping[(u32)(i + 6)], qset_maping[(u32)(i + 5)],
60982e00b86Sliuzhongzhu 			 qset_maping[(u32)(i + 4)], qset_maping[(u32)(i + 3)],
61082e00b86Sliuzhongzhu 			 qset_maping[(u32)(i + 2)], qset_maping[(u32)(i + 1)],
61182e00b86Sliuzhongzhu 			 qset_maping[i]);
61282e00b86Sliuzhongzhu 		i += 8;
61382e00b86Sliuzhongzhu 	}
61482e00b86Sliuzhongzhu 
61582e00b86Sliuzhongzhu 	return;
61682e00b86Sliuzhongzhu 
61782e00b86Sliuzhongzhu err_tm_map_cmd_send:
61882e00b86Sliuzhongzhu 	dev_err(&hdev->pdev->dev, "dump tqp map fail(0x%x), status is %d\n",
61982e00b86Sliuzhongzhu 		cmd, ret);
62082e00b86Sliuzhongzhu }
62182e00b86Sliuzhongzhu 
622d958919dSliuzhongzhu static void hclge_dbg_dump_qos_pause_cfg(struct hclge_dev *hdev)
623d958919dSliuzhongzhu {
624d958919dSliuzhongzhu 	struct hclge_cfg_pause_param_cmd *pause_param;
625d958919dSliuzhongzhu 	struct hclge_desc desc;
626d958919dSliuzhongzhu 	int ret;
627d958919dSliuzhongzhu 
628d958919dSliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_MAC_PARA, true);
629d958919dSliuzhongzhu 
630d958919dSliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
631d958919dSliuzhongzhu 	if (ret) {
632d958919dSliuzhongzhu 		dev_err(&hdev->pdev->dev, "dump checksum fail, status is %d.\n",
633d958919dSliuzhongzhu 			ret);
634d958919dSliuzhongzhu 		return;
635d958919dSliuzhongzhu 	}
636d958919dSliuzhongzhu 
637d958919dSliuzhongzhu 	pause_param = (struct hclge_cfg_pause_param_cmd *)desc.data;
638d958919dSliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump qos pause cfg\n");
639d958919dSliuzhongzhu 	dev_info(&hdev->pdev->dev, "pause_trans_gap: 0x%x\n",
640d958919dSliuzhongzhu 		 pause_param->pause_trans_gap);
641d958919dSliuzhongzhu 	dev_info(&hdev->pdev->dev, "pause_trans_time: 0x%x\n",
642d958919dSliuzhongzhu 		 pause_param->pause_trans_time);
643d958919dSliuzhongzhu }
644d958919dSliuzhongzhu 
6456fc22440Sliuzhongzhu static void hclge_dbg_dump_qos_pri_map(struct hclge_dev *hdev)
6466fc22440Sliuzhongzhu {
6476fc22440Sliuzhongzhu 	struct hclge_qos_pri_map_cmd *pri_map;
6486fc22440Sliuzhongzhu 	struct hclge_desc desc;
6496fc22440Sliuzhongzhu 	int ret;
6506fc22440Sliuzhongzhu 
6516fc22440Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PRI_TO_TC_MAPPING, true);
6526fc22440Sliuzhongzhu 
6536fc22440Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
6546fc22440Sliuzhongzhu 	if (ret) {
6556fc22440Sliuzhongzhu 		dev_err(&hdev->pdev->dev,
6566fc22440Sliuzhongzhu 			"dump qos pri map fail, status is %d.\n", ret);
6576fc22440Sliuzhongzhu 		return;
6586fc22440Sliuzhongzhu 	}
6596fc22440Sliuzhongzhu 
6606fc22440Sliuzhongzhu 	pri_map = (struct hclge_qos_pri_map_cmd *)desc.data;
6616fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump qos pri map\n");
6626fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "vlan_to_pri: 0x%x\n", pri_map->vlan_pri);
6636fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_0_to_tc: 0x%x\n", pri_map->pri0_tc);
6646fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_1_to_tc: 0x%x\n", pri_map->pri1_tc);
6656fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_2_to_tc: 0x%x\n", pri_map->pri2_tc);
6666fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_3_to_tc: 0x%x\n", pri_map->pri3_tc);
6676fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_4_to_tc: 0x%x\n", pri_map->pri4_tc);
6686fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_5_to_tc: 0x%x\n", pri_map->pri5_tc);
6696fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_6_to_tc: 0x%x\n", pri_map->pri6_tc);
6706fc22440Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "pri_7_to_tc: 0x%x\n", pri_map->pri7_tc);
6716fc22440Sliuzhongzhu }
6726fc22440Sliuzhongzhu 
6737d9d7f88Sliuzhongzhu static void hclge_dbg_dump_qos_buf_cfg(struct hclge_dev *hdev)
6747d9d7f88Sliuzhongzhu {
6757d9d7f88Sliuzhongzhu 	struct hclge_tx_buff_alloc_cmd *tx_buf_cmd;
6767d9d7f88Sliuzhongzhu 	struct hclge_rx_priv_buff_cmd *rx_buf_cmd;
6777d9d7f88Sliuzhongzhu 	struct hclge_rx_priv_wl_buf *rx_priv_wl;
6787d9d7f88Sliuzhongzhu 	struct hclge_rx_com_wl *rx_packet_cnt;
6797d9d7f88Sliuzhongzhu 	struct hclge_rx_com_thrd *rx_com_thrd;
6807d9d7f88Sliuzhongzhu 	struct hclge_rx_com_wl *rx_com_wl;
6817d9d7f88Sliuzhongzhu 	enum hclge_opcode_type cmd;
6827d9d7f88Sliuzhongzhu 	struct hclge_desc desc[2];
6837d9d7f88Sliuzhongzhu 	int i, ret;
6847d9d7f88Sliuzhongzhu 
6857d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_TX_BUFF_ALLOC;
6867d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(desc, cmd, true);
6877d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 1);
6887d9d7f88Sliuzhongzhu 	if (ret)
6897d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
6907d9d7f88Sliuzhongzhu 
6917d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "dump qos buf cfg\n");
6927d9d7f88Sliuzhongzhu 
6937d9d7f88Sliuzhongzhu 	tx_buf_cmd = (struct hclge_tx_buff_alloc_cmd *)desc[0].data;
694f9f07091Sliuzhongzhu 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
6957d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "tx_packet_buf_tc_%d: 0x%x\n", i,
6967d9d7f88Sliuzhongzhu 			 tx_buf_cmd->tx_pkt_buff[i]);
6977d9d7f88Sliuzhongzhu 
6987d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_RX_PRIV_BUFF_ALLOC;
6997d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(desc, cmd, true);
7007d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 1);
7017d9d7f88Sliuzhongzhu 	if (ret)
7027d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
7037d9d7f88Sliuzhongzhu 
7047d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "\n");
7057d9d7f88Sliuzhongzhu 	rx_buf_cmd = (struct hclge_rx_priv_buff_cmd *)desc[0].data;
706f9f07091Sliuzhongzhu 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
7077d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "rx_packet_buf_tc_%d: 0x%x\n", i,
7087d9d7f88Sliuzhongzhu 			 rx_buf_cmd->buf_num[i]);
7097d9d7f88Sliuzhongzhu 
7107d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "rx_share_buf: 0x%x\n",
7117d9d7f88Sliuzhongzhu 		 rx_buf_cmd->shared_buf);
7127d9d7f88Sliuzhongzhu 
7137d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_RX_PRIV_WL_ALLOC;
7147d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[0], cmd, true);
7157d9d7f88Sliuzhongzhu 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7167d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[1], cmd, true);
7177d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
7187d9d7f88Sliuzhongzhu 	if (ret)
7197d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
7207d9d7f88Sliuzhongzhu 
7217d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "\n");
7227d9d7f88Sliuzhongzhu 	rx_priv_wl = (struct hclge_rx_priv_wl_buf *)desc[0].data;
7237d9d7f88Sliuzhongzhu 	for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++)
7247d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev,
7257d9d7f88Sliuzhongzhu 			 "rx_priv_wl_tc_%d: high: 0x%x, low: 0x%x\n", i,
7267d9d7f88Sliuzhongzhu 			 rx_priv_wl->tc_wl[i].high, rx_priv_wl->tc_wl[i].low);
7277d9d7f88Sliuzhongzhu 
7287d9d7f88Sliuzhongzhu 	rx_priv_wl = (struct hclge_rx_priv_wl_buf *)desc[1].data;
7297d9d7f88Sliuzhongzhu 	for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++)
7307d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev,
7317d9d7f88Sliuzhongzhu 			 "rx_priv_wl_tc_%d: high: 0x%x, low: 0x%x\n", i + 4,
7327d9d7f88Sliuzhongzhu 			 rx_priv_wl->tc_wl[i].high, rx_priv_wl->tc_wl[i].low);
7337d9d7f88Sliuzhongzhu 
7347d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_RX_COM_THRD_ALLOC;
7357d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[0], cmd, true);
7367d9d7f88Sliuzhongzhu 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
7377d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[1], cmd, true);
7387d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
7397d9d7f88Sliuzhongzhu 	if (ret)
7407d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
7417d9d7f88Sliuzhongzhu 
7427d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "\n");
7437d9d7f88Sliuzhongzhu 	rx_com_thrd = (struct hclge_rx_com_thrd *)desc[0].data;
7447d9d7f88Sliuzhongzhu 	for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++)
7457d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev,
7467d9d7f88Sliuzhongzhu 			 "rx_com_thrd_tc_%d: high: 0x%x, low: 0x%x\n", i,
7477d9d7f88Sliuzhongzhu 			 rx_com_thrd->com_thrd[i].high,
7487d9d7f88Sliuzhongzhu 			 rx_com_thrd->com_thrd[i].low);
7497d9d7f88Sliuzhongzhu 
7507d9d7f88Sliuzhongzhu 	rx_com_thrd = (struct hclge_rx_com_thrd *)desc[1].data;
7517d9d7f88Sliuzhongzhu 	for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++)
7527d9d7f88Sliuzhongzhu 		dev_info(&hdev->pdev->dev,
7537d9d7f88Sliuzhongzhu 			 "rx_com_thrd_tc_%d: high: 0x%x, low: 0x%x\n", i + 4,
7547d9d7f88Sliuzhongzhu 			 rx_com_thrd->com_thrd[i].high,
7557d9d7f88Sliuzhongzhu 			 rx_com_thrd->com_thrd[i].low);
7567d9d7f88Sliuzhongzhu 
7577d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_RX_COM_WL_ALLOC;
7587d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(desc, cmd, true);
7597d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 1);
7607d9d7f88Sliuzhongzhu 	if (ret)
7617d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
7627d9d7f88Sliuzhongzhu 
7637d9d7f88Sliuzhongzhu 	rx_com_wl = (struct hclge_rx_com_wl *)desc[0].data;
7647d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "\n");
7657d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev, "rx_com_wl: high: 0x%x, low: 0x%x\n",
7667d9d7f88Sliuzhongzhu 		 rx_com_wl->com_wl.high, rx_com_wl->com_wl.low);
7677d9d7f88Sliuzhongzhu 
7687d9d7f88Sliuzhongzhu 	cmd = HCLGE_OPC_RX_GBL_PKT_CNT;
7697d9d7f88Sliuzhongzhu 	hclge_cmd_setup_basic_desc(desc, cmd, true);
7707d9d7f88Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 1);
7717d9d7f88Sliuzhongzhu 	if (ret)
7727d9d7f88Sliuzhongzhu 		goto err_qos_cmd_send;
7737d9d7f88Sliuzhongzhu 
7747d9d7f88Sliuzhongzhu 	rx_packet_cnt = (struct hclge_rx_com_wl *)desc[0].data;
7757d9d7f88Sliuzhongzhu 	dev_info(&hdev->pdev->dev,
7767d9d7f88Sliuzhongzhu 		 "rx_global_packet_cnt: high: 0x%x, low: 0x%x\n",
7777d9d7f88Sliuzhongzhu 		 rx_packet_cnt->com_wl.high, rx_packet_cnt->com_wl.low);
7787d9d7f88Sliuzhongzhu 
7797d9d7f88Sliuzhongzhu 	return;
7807d9d7f88Sliuzhongzhu 
7817d9d7f88Sliuzhongzhu err_qos_cmd_send:
7827d9d7f88Sliuzhongzhu 	dev_err(&hdev->pdev->dev,
7837d9d7f88Sliuzhongzhu 		"dump qos buf cfg fail(0x%x), status is %d\n", cmd, ret);
7847d9d7f88Sliuzhongzhu }
7857d9d7f88Sliuzhongzhu 
7867737f1fbSliuzhongzhu static void hclge_dbg_dump_mng_table(struct hclge_dev *hdev)
7877737f1fbSliuzhongzhu {
7887737f1fbSliuzhongzhu 	struct hclge_mac_ethertype_idx_rd_cmd *req0;
7897737f1fbSliuzhongzhu 	char printf_buf[HCLGE_DBG_BUF_LEN];
7907737f1fbSliuzhongzhu 	struct hclge_desc desc;
7917737f1fbSliuzhongzhu 	int ret, i;
7927737f1fbSliuzhongzhu 
7937737f1fbSliuzhongzhu 	dev_info(&hdev->pdev->dev, "mng tab:\n");
7947737f1fbSliuzhongzhu 	memset(printf_buf, 0, HCLGE_DBG_BUF_LEN);
7957737f1fbSliuzhongzhu 	strncat(printf_buf,
7967737f1fbSliuzhongzhu 		"entry|mac_addr         |mask|ether|mask|vlan|mask",
7977737f1fbSliuzhongzhu 		HCLGE_DBG_BUF_LEN - 1);
7987737f1fbSliuzhongzhu 	strncat(printf_buf + strlen(printf_buf),
7997737f1fbSliuzhongzhu 		"|i_map|i_dir|e_type|pf_id|vf_id|q_id|drop\n",
8007737f1fbSliuzhongzhu 		HCLGE_DBG_BUF_LEN - strlen(printf_buf) - 1);
8017737f1fbSliuzhongzhu 
8027737f1fbSliuzhongzhu 	dev_info(&hdev->pdev->dev, "%s", printf_buf);
8037737f1fbSliuzhongzhu 
8047737f1fbSliuzhongzhu 	for (i = 0; i < HCLGE_DBG_MNG_TBL_MAX; i++) {
8057737f1fbSliuzhongzhu 		hclge_cmd_setup_basic_desc(&desc, HCLGE_MAC_ETHERTYPE_IDX_RD,
8067737f1fbSliuzhongzhu 					   true);
8077737f1fbSliuzhongzhu 		req0 = (struct hclge_mac_ethertype_idx_rd_cmd *)&desc.data;
8087737f1fbSliuzhongzhu 		req0->index = cpu_to_le16(i);
8097737f1fbSliuzhongzhu 
8107737f1fbSliuzhongzhu 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8117737f1fbSliuzhongzhu 		if (ret) {
8127737f1fbSliuzhongzhu 			dev_err(&hdev->pdev->dev,
8137737f1fbSliuzhongzhu 				"call hclge_cmd_send fail, ret = %d\n", ret);
8147737f1fbSliuzhongzhu 			return;
8157737f1fbSliuzhongzhu 		}
8167737f1fbSliuzhongzhu 
8177737f1fbSliuzhongzhu 		if (!req0->resp_code)
8187737f1fbSliuzhongzhu 			continue;
8197737f1fbSliuzhongzhu 
8207737f1fbSliuzhongzhu 		memset(printf_buf, 0, HCLGE_DBG_BUF_LEN);
8217737f1fbSliuzhongzhu 		snprintf(printf_buf, HCLGE_DBG_BUF_LEN,
8227737f1fbSliuzhongzhu 			 "%02u   |%02x:%02x:%02x:%02x:%02x:%02x|",
8237737f1fbSliuzhongzhu 			 req0->index, req0->mac_add[0], req0->mac_add[1],
8247737f1fbSliuzhongzhu 			 req0->mac_add[2], req0->mac_add[3], req0->mac_add[4],
8257737f1fbSliuzhongzhu 			 req0->mac_add[5]);
8267737f1fbSliuzhongzhu 
8277737f1fbSliuzhongzhu 		snprintf(printf_buf + strlen(printf_buf),
8287737f1fbSliuzhongzhu 			 HCLGE_DBG_BUF_LEN - strlen(printf_buf),
8297737f1fbSliuzhongzhu 			 "%x   |%04x |%x   |%04x|%x   |%02x   |%02x   |",
8307737f1fbSliuzhongzhu 			 !!(req0->flags & HCLGE_DBG_MNG_MAC_MASK_B),
8317737f1fbSliuzhongzhu 			 req0->ethter_type,
8327737f1fbSliuzhongzhu 			 !!(req0->flags & HCLGE_DBG_MNG_ETHER_MASK_B),
8337737f1fbSliuzhongzhu 			 req0->vlan_tag & HCLGE_DBG_MNG_VLAN_TAG,
8347737f1fbSliuzhongzhu 			 !!(req0->flags & HCLGE_DBG_MNG_VLAN_MASK_B),
8357737f1fbSliuzhongzhu 			 req0->i_port_bitmap, req0->i_port_direction);
8367737f1fbSliuzhongzhu 
8377737f1fbSliuzhongzhu 		snprintf(printf_buf + strlen(printf_buf),
8387737f1fbSliuzhongzhu 			 HCLGE_DBG_BUF_LEN - strlen(printf_buf),
8397737f1fbSliuzhongzhu 			 "%d     |%d    |%02d   |%04d|%x\n",
8407737f1fbSliuzhongzhu 			 !!(req0->egress_port & HCLGE_DBG_MNG_E_TYPE_B),
8417737f1fbSliuzhongzhu 			 req0->egress_port & HCLGE_DBG_MNG_PF_ID,
8427737f1fbSliuzhongzhu 			 (req0->egress_port >> 3) & HCLGE_DBG_MNG_VF_ID,
8437737f1fbSliuzhongzhu 			 req0->egress_queue,
8447737f1fbSliuzhongzhu 			 !!(req0->egress_port & HCLGE_DBG_MNG_DROP_B));
8457737f1fbSliuzhongzhu 
8467737f1fbSliuzhongzhu 		dev_info(&hdev->pdev->dev, "%s", printf_buf);
8477737f1fbSliuzhongzhu 	}
8487737f1fbSliuzhongzhu }
8497737f1fbSliuzhongzhu 
8503c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, u8 stage,
8513c666b58Sliuzhongzhu 				   bool sel_x, u32 loc)
8523c666b58Sliuzhongzhu {
8533c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_1_cmd *req1;
8543c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_2_cmd *req2;
8553c666b58Sliuzhongzhu 	struct hclge_fd_tcam_config_3_cmd *req3;
8563c666b58Sliuzhongzhu 	struct hclge_desc desc[3];
8573c666b58Sliuzhongzhu 	int ret, i;
8583c666b58Sliuzhongzhu 	u32 *req;
8593c666b58Sliuzhongzhu 
8603c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, true);
8613c666b58Sliuzhongzhu 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8623c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, true);
8633c666b58Sliuzhongzhu 	desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8643c666b58Sliuzhongzhu 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, true);
8653c666b58Sliuzhongzhu 
8663c666b58Sliuzhongzhu 	req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data;
8673c666b58Sliuzhongzhu 	req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data;
8683c666b58Sliuzhongzhu 	req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data;
8693c666b58Sliuzhongzhu 
8703c666b58Sliuzhongzhu 	req1->stage  = stage;
8713c666b58Sliuzhongzhu 	req1->xy_sel = sel_x ? 1 : 0;
8723c666b58Sliuzhongzhu 	req1->index  = cpu_to_le32(loc);
8733c666b58Sliuzhongzhu 
8743c666b58Sliuzhongzhu 	ret = hclge_cmd_send(&hdev->hw, desc, 3);
8753c666b58Sliuzhongzhu 	if (ret)
8763c666b58Sliuzhongzhu 		return;
8773c666b58Sliuzhongzhu 
8783c666b58Sliuzhongzhu 	dev_info(&hdev->pdev->dev, " read result tcam key %s(%u):\n",
8793c666b58Sliuzhongzhu 		 sel_x ? "x" : "y", loc);
8803c666b58Sliuzhongzhu 
8813c666b58Sliuzhongzhu 	req = (u32 *)req1->tcam_data;
8823c666b58Sliuzhongzhu 	for (i = 0; i < 2; i++)
8833c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
8843c666b58Sliuzhongzhu 
8853c666b58Sliuzhongzhu 	req = (u32 *)req2->tcam_data;
8863c666b58Sliuzhongzhu 	for (i = 0; i < 6; i++)
8873c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
8883c666b58Sliuzhongzhu 
8893c666b58Sliuzhongzhu 	req = (u32 *)req3->tcam_data;
8903c666b58Sliuzhongzhu 	for (i = 0; i < 5; i++)
8913c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "%08x\n", *req++);
8923c666b58Sliuzhongzhu }
8933c666b58Sliuzhongzhu 
8943c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam(struct hclge_dev *hdev)
8953c666b58Sliuzhongzhu {
8963c666b58Sliuzhongzhu 	u32 i;
8973c666b58Sliuzhongzhu 
8983c666b58Sliuzhongzhu 	for (i = 0; i < hdev->fd_cfg.rule_num[0]; i++) {
8993c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam_read(hdev, 0, true, i);
9003c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam_read(hdev, 0, false, i);
9013c666b58Sliuzhongzhu 	}
9023c666b58Sliuzhongzhu }
9033c666b58Sliuzhongzhu 
904f02eb82dSHuazhong Tan static void hclge_dbg_dump_rst_info(struct hclge_dev *hdev)
905f02eb82dSHuazhong Tan {
906f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "PF reset count: %d\n",
907f02eb82dSHuazhong Tan 		 hdev->rst_stats.pf_rst_cnt);
908f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "FLR reset count: %d\n",
909f02eb82dSHuazhong Tan 		 hdev->rst_stats.flr_rst_cnt);
910f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "CORE reset count: %d\n",
911f02eb82dSHuazhong Tan 		 hdev->rst_stats.core_rst_cnt);
912f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "GLOBAL reset count: %d\n",
913f02eb82dSHuazhong Tan 		 hdev->rst_stats.global_rst_cnt);
914f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "IMP reset count: %d\n",
915f02eb82dSHuazhong Tan 		 hdev->rst_stats.imp_rst_cnt);
916f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "reset done count: %d\n",
917f02eb82dSHuazhong Tan 		 hdev->rst_stats.reset_done_cnt);
918f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "HW reset done count: %d\n",
919f02eb82dSHuazhong Tan 		 hdev->rst_stats.hw_reset_done_cnt);
920f02eb82dSHuazhong Tan 	dev_info(&hdev->pdev->dev, "reset count: %d\n",
921f02eb82dSHuazhong Tan 		 hdev->rst_stats.reset_cnt);
922f02eb82dSHuazhong Tan }
923f02eb82dSHuazhong Tan 
9243c666b58Sliuzhongzhu int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf)
9253c666b58Sliuzhongzhu {
9263c666b58Sliuzhongzhu 	struct hclge_vport *vport = hclge_get_vport(handle);
9273c666b58Sliuzhongzhu 	struct hclge_dev *hdev = vport->back;
9283c666b58Sliuzhongzhu 
9293c666b58Sliuzhongzhu 	if (strncmp(cmd_buf, "dump fd tcam", 12) == 0) {
9303c666b58Sliuzhongzhu 		hclge_dbg_fd_tcam(hdev);
9312849d4e7Sliuzhongzhu 	} else if (strncmp(cmd_buf, "dump tc", 7) == 0) {
9322849d4e7Sliuzhongzhu 		hclge_dbg_dump_tc(hdev);
93382e00b86Sliuzhongzhu 	} else if (strncmp(cmd_buf, "dump tm map", 11) == 0) {
93482e00b86Sliuzhongzhu 		hclge_dbg_dump_tm_map(hdev, cmd_buf);
93596227f4cSliuzhongzhu 	} else if (strncmp(cmd_buf, "dump tm", 7) == 0) {
93696227f4cSliuzhongzhu 		hclge_dbg_dump_tm(hdev);
937d958919dSliuzhongzhu 	} else if (strncmp(cmd_buf, "dump qos pause cfg", 18) == 0) {
938d958919dSliuzhongzhu 		hclge_dbg_dump_qos_pause_cfg(hdev);
9396fc22440Sliuzhongzhu 	} else if (strncmp(cmd_buf, "dump qos pri map", 16) == 0) {
9406fc22440Sliuzhongzhu 		hclge_dbg_dump_qos_pri_map(hdev);
9417d9d7f88Sliuzhongzhu 	} else if (strncmp(cmd_buf, "dump qos buf cfg", 16) == 0) {
9427d9d7f88Sliuzhongzhu 		hclge_dbg_dump_qos_buf_cfg(hdev);
9437737f1fbSliuzhongzhu 	} else if (strncmp(cmd_buf, "dump mng tbl", 12) == 0) {
9447737f1fbSliuzhongzhu 		hclge_dbg_dump_mng_table(hdev);
94527cf979aSliuzhongzhu 	} else if (strncmp(cmd_buf, "dump reg", 8) == 0) {
94627cf979aSliuzhongzhu 		hclge_dbg_dump_reg_cmd(hdev, cmd_buf);
947f02eb82dSHuazhong Tan 	} else if (strncmp(cmd_buf, "dump reset info", 15) == 0) {
948f02eb82dSHuazhong Tan 		hclge_dbg_dump_rst_info(hdev);
9493c666b58Sliuzhongzhu 	} else {
9503c666b58Sliuzhongzhu 		dev_info(&hdev->pdev->dev, "unknown command\n");
9513c666b58Sliuzhongzhu 		return -EINVAL;
9523c666b58Sliuzhongzhu 	}
9533c666b58Sliuzhongzhu 
9543c666b58Sliuzhongzhu 	return 0;
9553c666b58Sliuzhongzhu }
956