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 122849d4e7Sliuzhongzhu static void hclge_title_idx_print(struct hclge_dev *hdev, bool flag, int index, 132849d4e7Sliuzhongzhu char *title_buf, char *true_buf, 142849d4e7Sliuzhongzhu char *false_buf) 152849d4e7Sliuzhongzhu { 162849d4e7Sliuzhongzhu if (flag) 172849d4e7Sliuzhongzhu dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index, 182849d4e7Sliuzhongzhu true_buf); 192849d4e7Sliuzhongzhu else 202849d4e7Sliuzhongzhu dev_info(&hdev->pdev->dev, "%s(%d): %s\n", title_buf, index, 212849d4e7Sliuzhongzhu false_buf); 222849d4e7Sliuzhongzhu } 232849d4e7Sliuzhongzhu 242849d4e7Sliuzhongzhu static void hclge_dbg_dump_tc(struct hclge_dev *hdev) 252849d4e7Sliuzhongzhu { 262849d4e7Sliuzhongzhu struct hclge_ets_tc_weight_cmd *ets_weight; 272849d4e7Sliuzhongzhu struct hclge_desc desc; 282849d4e7Sliuzhongzhu int i, ret; 292849d4e7Sliuzhongzhu 302849d4e7Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_ETS_TC_WEIGHT, true); 312849d4e7Sliuzhongzhu 322849d4e7Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 332849d4e7Sliuzhongzhu if (ret) { 342849d4e7Sliuzhongzhu dev_err(&hdev->pdev->dev, "dump tc fail, status is %d.\n", ret); 352849d4e7Sliuzhongzhu return; 362849d4e7Sliuzhongzhu } 372849d4e7Sliuzhongzhu 382849d4e7Sliuzhongzhu ets_weight = (struct hclge_ets_tc_weight_cmd *)desc.data; 392849d4e7Sliuzhongzhu 402849d4e7Sliuzhongzhu dev_info(&hdev->pdev->dev, "dump tc\n"); 412849d4e7Sliuzhongzhu dev_info(&hdev->pdev->dev, "weight_offset: %u\n", 422849d4e7Sliuzhongzhu ets_weight->weight_offset); 432849d4e7Sliuzhongzhu 442849d4e7Sliuzhongzhu for (i = 0; i < HNAE3_MAX_TC; i++) 452849d4e7Sliuzhongzhu hclge_title_idx_print(hdev, ets_weight->tc_weight[i], i, 462849d4e7Sliuzhongzhu "tc", "no sp mode", "sp mode"); 472849d4e7Sliuzhongzhu } 482849d4e7Sliuzhongzhu 4996227f4cSliuzhongzhu static void hclge_dbg_dump_tm_pg(struct hclge_dev *hdev) 5096227f4cSliuzhongzhu { 5196227f4cSliuzhongzhu struct hclge_port_shapping_cmd *port_shap_cfg_cmd; 5296227f4cSliuzhongzhu struct hclge_bp_to_qs_map_cmd *bp_to_qs_map_cmd; 5396227f4cSliuzhongzhu struct hclge_pg_shapping_cmd *pg_shap_cfg_cmd; 5496227f4cSliuzhongzhu enum hclge_opcode_type cmd; 5596227f4cSliuzhongzhu struct hclge_desc desc; 5696227f4cSliuzhongzhu int ret; 5796227f4cSliuzhongzhu 5896227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PG_C_SHAPPING; 5996227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 6096227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 6196227f4cSliuzhongzhu if (ret) 6296227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 6396227f4cSliuzhongzhu 6496227f4cSliuzhongzhu pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data; 6596227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_C pg_id: %u\n", pg_shap_cfg_cmd->pg_id); 6696227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_C pg_shapping: 0x%x\n", 6796227f4cSliuzhongzhu pg_shap_cfg_cmd->pg_shapping_para); 6896227f4cSliuzhongzhu 6996227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PG_P_SHAPPING; 7096227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 7196227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7296227f4cSliuzhongzhu if (ret) 7396227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 7496227f4cSliuzhongzhu 7596227f4cSliuzhongzhu pg_shap_cfg_cmd = (struct hclge_pg_shapping_cmd *)desc.data; 7696227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_P pg_id: %u\n", pg_shap_cfg_cmd->pg_id); 7796227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_P pg_shapping: 0x%x\n", 7896227f4cSliuzhongzhu pg_shap_cfg_cmd->pg_shapping_para); 7996227f4cSliuzhongzhu 8096227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PORT_SHAPPING; 8196227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 8296227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 8396227f4cSliuzhongzhu if (ret) 8496227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 8596227f4cSliuzhongzhu 8696227f4cSliuzhongzhu port_shap_cfg_cmd = (struct hclge_port_shapping_cmd *)desc.data; 8796227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PORT port_shapping: 0x%x\n", 8896227f4cSliuzhongzhu port_shap_cfg_cmd->port_shapping_para); 8996227f4cSliuzhongzhu 9096227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PG_SCH_MODE_CFG; 9196227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 9296227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9396227f4cSliuzhongzhu if (ret) 9496227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 9596227f4cSliuzhongzhu 9696227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_SCH pg_id: %u\n", desc.data[0]); 9796227f4cSliuzhongzhu 9896227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PRI_SCH_MODE_CFG; 9996227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 10096227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 10196227f4cSliuzhongzhu if (ret) 10296227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 10396227f4cSliuzhongzhu 10496227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI_SCH pg_id: %u\n", desc.data[0]); 10596227f4cSliuzhongzhu 10696227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_QS_SCH_MODE_CFG; 10796227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 10896227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 10996227f4cSliuzhongzhu if (ret) 11096227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 11196227f4cSliuzhongzhu 11296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS_SCH pg_id: %u\n", desc.data[0]); 11396227f4cSliuzhongzhu 11496227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_BP_TO_QSET_MAPPING; 11596227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 11696227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 11796227f4cSliuzhongzhu if (ret) 11896227f4cSliuzhongzhu goto err_tm_pg_cmd_send; 11996227f4cSliuzhongzhu 12096227f4cSliuzhongzhu bp_to_qs_map_cmd = (struct hclge_bp_to_qs_map_cmd *)desc.data; 12196227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_id: %u\n", 12296227f4cSliuzhongzhu bp_to_qs_map_cmd->tc_id); 12396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "BP_TO_QSET pg_shapping: 0x%x\n", 12496227f4cSliuzhongzhu bp_to_qs_map_cmd->qs_group_id); 12596227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "BP_TO_QSET qs_bit_map: 0x%x\n", 12696227f4cSliuzhongzhu bp_to_qs_map_cmd->qs_bit_map); 12796227f4cSliuzhongzhu return; 12896227f4cSliuzhongzhu 12996227f4cSliuzhongzhu err_tm_pg_cmd_send: 13096227f4cSliuzhongzhu dev_err(&hdev->pdev->dev, "dump tm_pg fail(0x%x), status is %d\n", 13196227f4cSliuzhongzhu cmd, ret); 13296227f4cSliuzhongzhu } 13396227f4cSliuzhongzhu 13496227f4cSliuzhongzhu static void hclge_dbg_dump_tm(struct hclge_dev *hdev) 13596227f4cSliuzhongzhu { 13696227f4cSliuzhongzhu struct hclge_priority_weight_cmd *priority_weight; 13796227f4cSliuzhongzhu struct hclge_pg_to_pri_link_cmd *pg_to_pri_map; 13896227f4cSliuzhongzhu struct hclge_qs_to_pri_link_cmd *qs_to_pri_map; 13996227f4cSliuzhongzhu struct hclge_nq_to_qs_link_cmd *nq_to_qs_map; 14096227f4cSliuzhongzhu struct hclge_pri_shapping_cmd *shap_cfg_cmd; 14196227f4cSliuzhongzhu struct hclge_pg_weight_cmd *pg_weight; 14296227f4cSliuzhongzhu struct hclge_qs_weight_cmd *qs_weight; 14396227f4cSliuzhongzhu enum hclge_opcode_type cmd; 14496227f4cSliuzhongzhu struct hclge_desc desc; 14596227f4cSliuzhongzhu int ret; 14696227f4cSliuzhongzhu 14796227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PG_TO_PRI_LINK; 14896227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 14996227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 15096227f4cSliuzhongzhu if (ret) 15196227f4cSliuzhongzhu goto err_tm_cmd_send; 15296227f4cSliuzhongzhu 15396227f4cSliuzhongzhu pg_to_pri_map = (struct hclge_pg_to_pri_link_cmd *)desc.data; 15496227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "dump tm\n"); 15596227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_TO_PRI gp_id: %u\n", 15696227f4cSliuzhongzhu pg_to_pri_map->pg_id); 15796227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG_TO_PRI map: 0x%x\n", 15896227f4cSliuzhongzhu pg_to_pri_map->pri_bit_map); 15996227f4cSliuzhongzhu 16096227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_QS_TO_PRI_LINK; 16196227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 16296227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 16396227f4cSliuzhongzhu if (ret) 16496227f4cSliuzhongzhu goto err_tm_cmd_send; 16596227f4cSliuzhongzhu 16696227f4cSliuzhongzhu qs_to_pri_map = (struct hclge_qs_to_pri_link_cmd *)desc.data; 16796227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS_TO_PRI qs_id: %u\n", 16896227f4cSliuzhongzhu qs_to_pri_map->qs_id); 16996227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS_TO_PRI priority: %u\n", 17096227f4cSliuzhongzhu qs_to_pri_map->priority); 17196227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS_TO_PRI link_vld: %u\n", 17296227f4cSliuzhongzhu qs_to_pri_map->link_vld); 17396227f4cSliuzhongzhu 17496227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_NQ_TO_QS_LINK; 17596227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 17696227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 17796227f4cSliuzhongzhu if (ret) 17896227f4cSliuzhongzhu goto err_tm_cmd_send; 17996227f4cSliuzhongzhu 18096227f4cSliuzhongzhu nq_to_qs_map = (struct hclge_nq_to_qs_link_cmd *)desc.data; 18196227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "NQ_TO_QS nq_id: %u\n", nq_to_qs_map->nq_id); 18296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "NQ_TO_QS qset_id: %u\n", 18396227f4cSliuzhongzhu nq_to_qs_map->qset_id); 18496227f4cSliuzhongzhu 18596227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PG_WEIGHT; 18696227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 18796227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 18896227f4cSliuzhongzhu if (ret) 18996227f4cSliuzhongzhu goto err_tm_cmd_send; 19096227f4cSliuzhongzhu 19196227f4cSliuzhongzhu pg_weight = (struct hclge_pg_weight_cmd *)desc.data; 19296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG pg_id: %u\n", pg_weight->pg_id); 19396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PG dwrr: %u\n", pg_weight->dwrr); 19496227f4cSliuzhongzhu 19596227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_QS_WEIGHT; 19696227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 19796227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 19896227f4cSliuzhongzhu if (ret) 19996227f4cSliuzhongzhu goto err_tm_cmd_send; 20096227f4cSliuzhongzhu 20196227f4cSliuzhongzhu qs_weight = (struct hclge_qs_weight_cmd *)desc.data; 20296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS qs_id: %u\n", qs_weight->qs_id); 20396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "QS dwrr: %u\n", qs_weight->dwrr); 20496227f4cSliuzhongzhu 20596227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PRI_WEIGHT; 20696227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 20796227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 20896227f4cSliuzhongzhu if (ret) 20996227f4cSliuzhongzhu goto err_tm_cmd_send; 21096227f4cSliuzhongzhu 21196227f4cSliuzhongzhu priority_weight = (struct hclge_priority_weight_cmd *)desc.data; 21296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI pri_id: %u\n", priority_weight->pri_id); 21396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI dwrr: %u\n", priority_weight->dwrr); 21496227f4cSliuzhongzhu 21596227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PRI_C_SHAPPING; 21696227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 21796227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 21896227f4cSliuzhongzhu if (ret) 21996227f4cSliuzhongzhu goto err_tm_cmd_send; 22096227f4cSliuzhongzhu 22196227f4cSliuzhongzhu shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data; 22296227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI_C pri_id: %u\n", shap_cfg_cmd->pri_id); 22396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI_C pri_shapping: 0x%x\n", 22496227f4cSliuzhongzhu shap_cfg_cmd->pri_shapping_para); 22596227f4cSliuzhongzhu 22696227f4cSliuzhongzhu cmd = HCLGE_OPC_TM_PRI_P_SHAPPING; 22796227f4cSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, cmd, true); 22896227f4cSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 22996227f4cSliuzhongzhu if (ret) 23096227f4cSliuzhongzhu goto err_tm_cmd_send; 23196227f4cSliuzhongzhu 23296227f4cSliuzhongzhu shap_cfg_cmd = (struct hclge_pri_shapping_cmd *)desc.data; 23396227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI_P pri_id: %u\n", shap_cfg_cmd->pri_id); 23496227f4cSliuzhongzhu dev_info(&hdev->pdev->dev, "PRI_P pri_shapping: 0x%x\n", 23596227f4cSliuzhongzhu shap_cfg_cmd->pri_shapping_para); 23696227f4cSliuzhongzhu 23796227f4cSliuzhongzhu hclge_dbg_dump_tm_pg(hdev); 23896227f4cSliuzhongzhu 23996227f4cSliuzhongzhu return; 24096227f4cSliuzhongzhu 24196227f4cSliuzhongzhu err_tm_cmd_send: 24296227f4cSliuzhongzhu dev_err(&hdev->pdev->dev, "dump tm fail(0x%x), status is %d\n", 24396227f4cSliuzhongzhu cmd, ret); 24496227f4cSliuzhongzhu } 24596227f4cSliuzhongzhu 246d958919dSliuzhongzhu static void hclge_dbg_dump_qos_pause_cfg(struct hclge_dev *hdev) 247d958919dSliuzhongzhu { 248d958919dSliuzhongzhu struct hclge_cfg_pause_param_cmd *pause_param; 249d958919dSliuzhongzhu struct hclge_desc desc; 250d958919dSliuzhongzhu int ret; 251d958919dSliuzhongzhu 252d958919dSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_MAC_PARA, true); 253d958919dSliuzhongzhu 254d958919dSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 255d958919dSliuzhongzhu if (ret) { 256d958919dSliuzhongzhu dev_err(&hdev->pdev->dev, "dump checksum fail, status is %d.\n", 257d958919dSliuzhongzhu ret); 258d958919dSliuzhongzhu return; 259d958919dSliuzhongzhu } 260d958919dSliuzhongzhu 261d958919dSliuzhongzhu pause_param = (struct hclge_cfg_pause_param_cmd *)desc.data; 262d958919dSliuzhongzhu dev_info(&hdev->pdev->dev, "dump qos pause cfg\n"); 263d958919dSliuzhongzhu dev_info(&hdev->pdev->dev, "pause_trans_gap: 0x%x\n", 264d958919dSliuzhongzhu pause_param->pause_trans_gap); 265d958919dSliuzhongzhu dev_info(&hdev->pdev->dev, "pause_trans_time: 0x%x\n", 266d958919dSliuzhongzhu pause_param->pause_trans_time); 267d958919dSliuzhongzhu } 268d958919dSliuzhongzhu 2696fc22440Sliuzhongzhu static void hclge_dbg_dump_qos_pri_map(struct hclge_dev *hdev) 2706fc22440Sliuzhongzhu { 2716fc22440Sliuzhongzhu struct hclge_qos_pri_map_cmd *pri_map; 2726fc22440Sliuzhongzhu struct hclge_desc desc; 2736fc22440Sliuzhongzhu int ret; 2746fc22440Sliuzhongzhu 2756fc22440Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PRI_TO_TC_MAPPING, true); 2766fc22440Sliuzhongzhu 2776fc22440Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2786fc22440Sliuzhongzhu if (ret) { 2796fc22440Sliuzhongzhu dev_err(&hdev->pdev->dev, 2806fc22440Sliuzhongzhu "dump qos pri map fail, status is %d.\n", ret); 2816fc22440Sliuzhongzhu return; 2826fc22440Sliuzhongzhu } 2836fc22440Sliuzhongzhu 2846fc22440Sliuzhongzhu pri_map = (struct hclge_qos_pri_map_cmd *)desc.data; 2856fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "dump qos pri map\n"); 2866fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "vlan_to_pri: 0x%x\n", pri_map->vlan_pri); 2876fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_0_to_tc: 0x%x\n", pri_map->pri0_tc); 2886fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_1_to_tc: 0x%x\n", pri_map->pri1_tc); 2896fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_2_to_tc: 0x%x\n", pri_map->pri2_tc); 2906fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_3_to_tc: 0x%x\n", pri_map->pri3_tc); 2916fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_4_to_tc: 0x%x\n", pri_map->pri4_tc); 2926fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_5_to_tc: 0x%x\n", pri_map->pri5_tc); 2936fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_6_to_tc: 0x%x\n", pri_map->pri6_tc); 2946fc22440Sliuzhongzhu dev_info(&hdev->pdev->dev, "pri_7_to_tc: 0x%x\n", pri_map->pri7_tc); 2956fc22440Sliuzhongzhu } 2966fc22440Sliuzhongzhu 2977d9d7f88Sliuzhongzhu static void hclge_dbg_dump_qos_buf_cfg(struct hclge_dev *hdev) 2987d9d7f88Sliuzhongzhu { 2997d9d7f88Sliuzhongzhu struct hclge_tx_buff_alloc_cmd *tx_buf_cmd; 3007d9d7f88Sliuzhongzhu struct hclge_rx_priv_buff_cmd *rx_buf_cmd; 3017d9d7f88Sliuzhongzhu struct hclge_rx_priv_wl_buf *rx_priv_wl; 3027d9d7f88Sliuzhongzhu struct hclge_rx_com_wl *rx_packet_cnt; 3037d9d7f88Sliuzhongzhu struct hclge_rx_com_thrd *rx_com_thrd; 3047d9d7f88Sliuzhongzhu struct hclge_rx_com_wl *rx_com_wl; 3057d9d7f88Sliuzhongzhu enum hclge_opcode_type cmd; 3067d9d7f88Sliuzhongzhu struct hclge_desc desc[2]; 3077d9d7f88Sliuzhongzhu int i, ret; 3087d9d7f88Sliuzhongzhu 3097d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_TX_BUFF_ALLOC; 3107d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(desc, cmd, true); 3117d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 1); 3127d9d7f88Sliuzhongzhu if (ret) 3137d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3147d9d7f88Sliuzhongzhu 3157d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "dump qos buf cfg\n"); 3167d9d7f88Sliuzhongzhu 3177d9d7f88Sliuzhongzhu tx_buf_cmd = (struct hclge_tx_buff_alloc_cmd *)desc[0].data; 3187d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM; i++) 3197d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "tx_packet_buf_tc_%d: 0x%x\n", i, 3207d9d7f88Sliuzhongzhu tx_buf_cmd->tx_pkt_buff[i]); 3217d9d7f88Sliuzhongzhu 3227d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_RX_PRIV_BUFF_ALLOC; 3237d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(desc, cmd, true); 3247d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 1); 3257d9d7f88Sliuzhongzhu if (ret) 3267d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3277d9d7f88Sliuzhongzhu 3287d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "\n"); 3297d9d7f88Sliuzhongzhu rx_buf_cmd = (struct hclge_rx_priv_buff_cmd *)desc[0].data; 3307d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM; i++) 3317d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "rx_packet_buf_tc_%d: 0x%x\n", i, 3327d9d7f88Sliuzhongzhu rx_buf_cmd->buf_num[i]); 3337d9d7f88Sliuzhongzhu 3347d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "rx_share_buf: 0x%x\n", 3357d9d7f88Sliuzhongzhu rx_buf_cmd->shared_buf); 3367d9d7f88Sliuzhongzhu 3377d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_RX_PRIV_WL_ALLOC; 3387d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[0], cmd, true); 3397d9d7f88Sliuzhongzhu desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 3407d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[1], cmd, true); 3417d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 2); 3427d9d7f88Sliuzhongzhu if (ret) 3437d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3447d9d7f88Sliuzhongzhu 3457d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "\n"); 3467d9d7f88Sliuzhongzhu rx_priv_wl = (struct hclge_rx_priv_wl_buf *)desc[0].data; 3477d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++) 3487d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, 3497d9d7f88Sliuzhongzhu "rx_priv_wl_tc_%d: high: 0x%x, low: 0x%x\n", i, 3507d9d7f88Sliuzhongzhu rx_priv_wl->tc_wl[i].high, rx_priv_wl->tc_wl[i].low); 3517d9d7f88Sliuzhongzhu 3527d9d7f88Sliuzhongzhu rx_priv_wl = (struct hclge_rx_priv_wl_buf *)desc[1].data; 3537d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++) 3547d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, 3557d9d7f88Sliuzhongzhu "rx_priv_wl_tc_%d: high: 0x%x, low: 0x%x\n", i + 4, 3567d9d7f88Sliuzhongzhu rx_priv_wl->tc_wl[i].high, rx_priv_wl->tc_wl[i].low); 3577d9d7f88Sliuzhongzhu 3587d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_RX_COM_THRD_ALLOC; 3597d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[0], cmd, true); 3607d9d7f88Sliuzhongzhu desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 3617d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[1], cmd, true); 3627d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 2); 3637d9d7f88Sliuzhongzhu if (ret) 3647d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3657d9d7f88Sliuzhongzhu 3667d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "\n"); 3677d9d7f88Sliuzhongzhu rx_com_thrd = (struct hclge_rx_com_thrd *)desc[0].data; 3687d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++) 3697d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, 3707d9d7f88Sliuzhongzhu "rx_com_thrd_tc_%d: high: 0x%x, low: 0x%x\n", i, 3717d9d7f88Sliuzhongzhu rx_com_thrd->com_thrd[i].high, 3727d9d7f88Sliuzhongzhu rx_com_thrd->com_thrd[i].low); 3737d9d7f88Sliuzhongzhu 3747d9d7f88Sliuzhongzhu rx_com_thrd = (struct hclge_rx_com_thrd *)desc[1].data; 3757d9d7f88Sliuzhongzhu for (i = 0; i < HCLGE_TC_NUM_ONE_DESC; i++) 3767d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, 3777d9d7f88Sliuzhongzhu "rx_com_thrd_tc_%d: high: 0x%x, low: 0x%x\n", i + 4, 3787d9d7f88Sliuzhongzhu rx_com_thrd->com_thrd[i].high, 3797d9d7f88Sliuzhongzhu rx_com_thrd->com_thrd[i].low); 3807d9d7f88Sliuzhongzhu 3817d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_RX_COM_WL_ALLOC; 3827d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(desc, cmd, true); 3837d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 1); 3847d9d7f88Sliuzhongzhu if (ret) 3857d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3867d9d7f88Sliuzhongzhu 3877d9d7f88Sliuzhongzhu rx_com_wl = (struct hclge_rx_com_wl *)desc[0].data; 3887d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "\n"); 3897d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, "rx_com_wl: high: 0x%x, low: 0x%x\n", 3907d9d7f88Sliuzhongzhu rx_com_wl->com_wl.high, rx_com_wl->com_wl.low); 3917d9d7f88Sliuzhongzhu 3927d9d7f88Sliuzhongzhu cmd = HCLGE_OPC_RX_GBL_PKT_CNT; 3937d9d7f88Sliuzhongzhu hclge_cmd_setup_basic_desc(desc, cmd, true); 3947d9d7f88Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 1); 3957d9d7f88Sliuzhongzhu if (ret) 3967d9d7f88Sliuzhongzhu goto err_qos_cmd_send; 3977d9d7f88Sliuzhongzhu 3987d9d7f88Sliuzhongzhu rx_packet_cnt = (struct hclge_rx_com_wl *)desc[0].data; 3997d9d7f88Sliuzhongzhu dev_info(&hdev->pdev->dev, 4007d9d7f88Sliuzhongzhu "rx_global_packet_cnt: high: 0x%x, low: 0x%x\n", 4017d9d7f88Sliuzhongzhu rx_packet_cnt->com_wl.high, rx_packet_cnt->com_wl.low); 4027d9d7f88Sliuzhongzhu 4037d9d7f88Sliuzhongzhu return; 4047d9d7f88Sliuzhongzhu 4057d9d7f88Sliuzhongzhu err_qos_cmd_send: 4067d9d7f88Sliuzhongzhu dev_err(&hdev->pdev->dev, 4077d9d7f88Sliuzhongzhu "dump qos buf cfg fail(0x%x), status is %d\n", cmd, ret); 4087d9d7f88Sliuzhongzhu } 4097d9d7f88Sliuzhongzhu 4107737f1fbSliuzhongzhu static void hclge_dbg_dump_mng_table(struct hclge_dev *hdev) 4117737f1fbSliuzhongzhu { 4127737f1fbSliuzhongzhu struct hclge_mac_ethertype_idx_rd_cmd *req0; 4137737f1fbSliuzhongzhu char printf_buf[HCLGE_DBG_BUF_LEN]; 4147737f1fbSliuzhongzhu struct hclge_desc desc; 4157737f1fbSliuzhongzhu int ret, i; 4167737f1fbSliuzhongzhu 4177737f1fbSliuzhongzhu dev_info(&hdev->pdev->dev, "mng tab:\n"); 4187737f1fbSliuzhongzhu memset(printf_buf, 0, HCLGE_DBG_BUF_LEN); 4197737f1fbSliuzhongzhu strncat(printf_buf, 4207737f1fbSliuzhongzhu "entry|mac_addr |mask|ether|mask|vlan|mask", 4217737f1fbSliuzhongzhu HCLGE_DBG_BUF_LEN - 1); 4227737f1fbSliuzhongzhu strncat(printf_buf + strlen(printf_buf), 4237737f1fbSliuzhongzhu "|i_map|i_dir|e_type|pf_id|vf_id|q_id|drop\n", 4247737f1fbSliuzhongzhu HCLGE_DBG_BUF_LEN - strlen(printf_buf) - 1); 4257737f1fbSliuzhongzhu 4267737f1fbSliuzhongzhu dev_info(&hdev->pdev->dev, "%s", printf_buf); 4277737f1fbSliuzhongzhu 4287737f1fbSliuzhongzhu for (i = 0; i < HCLGE_DBG_MNG_TBL_MAX; i++) { 4297737f1fbSliuzhongzhu hclge_cmd_setup_basic_desc(&desc, HCLGE_MAC_ETHERTYPE_IDX_RD, 4307737f1fbSliuzhongzhu true); 4317737f1fbSliuzhongzhu req0 = (struct hclge_mac_ethertype_idx_rd_cmd *)&desc.data; 4327737f1fbSliuzhongzhu req0->index = cpu_to_le16(i); 4337737f1fbSliuzhongzhu 4347737f1fbSliuzhongzhu ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4357737f1fbSliuzhongzhu if (ret) { 4367737f1fbSliuzhongzhu dev_err(&hdev->pdev->dev, 4377737f1fbSliuzhongzhu "call hclge_cmd_send fail, ret = %d\n", ret); 4387737f1fbSliuzhongzhu return; 4397737f1fbSliuzhongzhu } 4407737f1fbSliuzhongzhu 4417737f1fbSliuzhongzhu if (!req0->resp_code) 4427737f1fbSliuzhongzhu continue; 4437737f1fbSliuzhongzhu 4447737f1fbSliuzhongzhu memset(printf_buf, 0, HCLGE_DBG_BUF_LEN); 4457737f1fbSliuzhongzhu snprintf(printf_buf, HCLGE_DBG_BUF_LEN, 4467737f1fbSliuzhongzhu "%02u |%02x:%02x:%02x:%02x:%02x:%02x|", 4477737f1fbSliuzhongzhu req0->index, req0->mac_add[0], req0->mac_add[1], 4487737f1fbSliuzhongzhu req0->mac_add[2], req0->mac_add[3], req0->mac_add[4], 4497737f1fbSliuzhongzhu req0->mac_add[5]); 4507737f1fbSliuzhongzhu 4517737f1fbSliuzhongzhu snprintf(printf_buf + strlen(printf_buf), 4527737f1fbSliuzhongzhu HCLGE_DBG_BUF_LEN - strlen(printf_buf), 4537737f1fbSliuzhongzhu "%x |%04x |%x |%04x|%x |%02x |%02x |", 4547737f1fbSliuzhongzhu !!(req0->flags & HCLGE_DBG_MNG_MAC_MASK_B), 4557737f1fbSliuzhongzhu req0->ethter_type, 4567737f1fbSliuzhongzhu !!(req0->flags & HCLGE_DBG_MNG_ETHER_MASK_B), 4577737f1fbSliuzhongzhu req0->vlan_tag & HCLGE_DBG_MNG_VLAN_TAG, 4587737f1fbSliuzhongzhu !!(req0->flags & HCLGE_DBG_MNG_VLAN_MASK_B), 4597737f1fbSliuzhongzhu req0->i_port_bitmap, req0->i_port_direction); 4607737f1fbSliuzhongzhu 4617737f1fbSliuzhongzhu snprintf(printf_buf + strlen(printf_buf), 4627737f1fbSliuzhongzhu HCLGE_DBG_BUF_LEN - strlen(printf_buf), 4637737f1fbSliuzhongzhu "%d |%d |%02d |%04d|%x\n", 4647737f1fbSliuzhongzhu !!(req0->egress_port & HCLGE_DBG_MNG_E_TYPE_B), 4657737f1fbSliuzhongzhu req0->egress_port & HCLGE_DBG_MNG_PF_ID, 4667737f1fbSliuzhongzhu (req0->egress_port >> 3) & HCLGE_DBG_MNG_VF_ID, 4677737f1fbSliuzhongzhu req0->egress_queue, 4687737f1fbSliuzhongzhu !!(req0->egress_port & HCLGE_DBG_MNG_DROP_B)); 4697737f1fbSliuzhongzhu 4707737f1fbSliuzhongzhu dev_info(&hdev->pdev->dev, "%s", printf_buf); 4717737f1fbSliuzhongzhu } 4727737f1fbSliuzhongzhu } 4737737f1fbSliuzhongzhu 4743c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, u8 stage, 4753c666b58Sliuzhongzhu bool sel_x, u32 loc) 4763c666b58Sliuzhongzhu { 4773c666b58Sliuzhongzhu struct hclge_fd_tcam_config_1_cmd *req1; 4783c666b58Sliuzhongzhu struct hclge_fd_tcam_config_2_cmd *req2; 4793c666b58Sliuzhongzhu struct hclge_fd_tcam_config_3_cmd *req3; 4803c666b58Sliuzhongzhu struct hclge_desc desc[3]; 4813c666b58Sliuzhongzhu int ret, i; 4823c666b58Sliuzhongzhu u32 *req; 4833c666b58Sliuzhongzhu 4843c666b58Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, true); 4853c666b58Sliuzhongzhu desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 4863c666b58Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, true); 4873c666b58Sliuzhongzhu desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 4883c666b58Sliuzhongzhu hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, true); 4893c666b58Sliuzhongzhu 4903c666b58Sliuzhongzhu req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data; 4913c666b58Sliuzhongzhu req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data; 4923c666b58Sliuzhongzhu req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data; 4933c666b58Sliuzhongzhu 4943c666b58Sliuzhongzhu req1->stage = stage; 4953c666b58Sliuzhongzhu req1->xy_sel = sel_x ? 1 : 0; 4963c666b58Sliuzhongzhu req1->index = cpu_to_le32(loc); 4973c666b58Sliuzhongzhu 4983c666b58Sliuzhongzhu ret = hclge_cmd_send(&hdev->hw, desc, 3); 4993c666b58Sliuzhongzhu if (ret) 5003c666b58Sliuzhongzhu return; 5013c666b58Sliuzhongzhu 5023c666b58Sliuzhongzhu dev_info(&hdev->pdev->dev, " read result tcam key %s(%u):\n", 5033c666b58Sliuzhongzhu sel_x ? "x" : "y", loc); 5043c666b58Sliuzhongzhu 5053c666b58Sliuzhongzhu req = (u32 *)req1->tcam_data; 5063c666b58Sliuzhongzhu for (i = 0; i < 2; i++) 5073c666b58Sliuzhongzhu dev_info(&hdev->pdev->dev, "%08x\n", *req++); 5083c666b58Sliuzhongzhu 5093c666b58Sliuzhongzhu req = (u32 *)req2->tcam_data; 5103c666b58Sliuzhongzhu for (i = 0; i < 6; i++) 5113c666b58Sliuzhongzhu dev_info(&hdev->pdev->dev, "%08x\n", *req++); 5123c666b58Sliuzhongzhu 5133c666b58Sliuzhongzhu req = (u32 *)req3->tcam_data; 5143c666b58Sliuzhongzhu for (i = 0; i < 5; i++) 5153c666b58Sliuzhongzhu dev_info(&hdev->pdev->dev, "%08x\n", *req++); 5163c666b58Sliuzhongzhu } 5173c666b58Sliuzhongzhu 5183c666b58Sliuzhongzhu static void hclge_dbg_fd_tcam(struct hclge_dev *hdev) 5193c666b58Sliuzhongzhu { 5203c666b58Sliuzhongzhu u32 i; 5213c666b58Sliuzhongzhu 5223c666b58Sliuzhongzhu for (i = 0; i < hdev->fd_cfg.rule_num[0]; i++) { 5233c666b58Sliuzhongzhu hclge_dbg_fd_tcam_read(hdev, 0, true, i); 5243c666b58Sliuzhongzhu hclge_dbg_fd_tcam_read(hdev, 0, false, i); 5253c666b58Sliuzhongzhu } 5263c666b58Sliuzhongzhu } 5273c666b58Sliuzhongzhu 5283c666b58Sliuzhongzhu int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf) 5293c666b58Sliuzhongzhu { 5303c666b58Sliuzhongzhu struct hclge_vport *vport = hclge_get_vport(handle); 5313c666b58Sliuzhongzhu struct hclge_dev *hdev = vport->back; 5323c666b58Sliuzhongzhu 5333c666b58Sliuzhongzhu if (strncmp(cmd_buf, "dump fd tcam", 12) == 0) { 5343c666b58Sliuzhongzhu hclge_dbg_fd_tcam(hdev); 5352849d4e7Sliuzhongzhu } else if (strncmp(cmd_buf, "dump tc", 7) == 0) { 5362849d4e7Sliuzhongzhu hclge_dbg_dump_tc(hdev); 53796227f4cSliuzhongzhu } else if (strncmp(cmd_buf, "dump tm", 7) == 0) { 53896227f4cSliuzhongzhu hclge_dbg_dump_tm(hdev); 539d958919dSliuzhongzhu } else if (strncmp(cmd_buf, "dump qos pause cfg", 18) == 0) { 540d958919dSliuzhongzhu hclge_dbg_dump_qos_pause_cfg(hdev); 5416fc22440Sliuzhongzhu } else if (strncmp(cmd_buf, "dump qos pri map", 16) == 0) { 5426fc22440Sliuzhongzhu hclge_dbg_dump_qos_pri_map(hdev); 5437d9d7f88Sliuzhongzhu } else if (strncmp(cmd_buf, "dump qos buf cfg", 16) == 0) { 5447d9d7f88Sliuzhongzhu hclge_dbg_dump_qos_buf_cfg(hdev); 5457737f1fbSliuzhongzhu } else if (strncmp(cmd_buf, "dump mng tbl", 12) == 0) { 5467737f1fbSliuzhongzhu hclge_dbg_dump_mng_table(hdev); 5473c666b58Sliuzhongzhu } else { 5483c666b58Sliuzhongzhu dev_info(&hdev->pdev->dev, "unknown command\n"); 5493c666b58Sliuzhongzhu return -EINVAL; 5503c666b58Sliuzhongzhu } 5513c666b58Sliuzhongzhu 5523c666b58Sliuzhongzhu return 0; 5533c666b58Sliuzhongzhu } 554