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