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