1*d7d54769SKalesh AP // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause 2*d7d54769SKalesh AP /* 3*d7d54769SKalesh AP * Copyright (c) 2024, Broadcom. All rights reserved. The term 4*d7d54769SKalesh AP * Broadcom refers to Broadcom Limited and/or its subsidiaries. 5*d7d54769SKalesh AP * 6*d7d54769SKalesh AP * Description: Debugfs component of the bnxt_re driver 7*d7d54769SKalesh AP */ 8*d7d54769SKalesh AP 9*d7d54769SKalesh AP #include <linux/debugfs.h> 10*d7d54769SKalesh AP #include <linux/pci.h> 11*d7d54769SKalesh AP #include <rdma/ib_addr.h> 12*d7d54769SKalesh AP 13*d7d54769SKalesh AP #include "bnxt_ulp.h" 14*d7d54769SKalesh AP #include "roce_hsi.h" 15*d7d54769SKalesh AP #include "qplib_res.h" 16*d7d54769SKalesh AP #include "qplib_sp.h" 17*d7d54769SKalesh AP #include "qplib_fp.h" 18*d7d54769SKalesh AP #include "qplib_rcfw.h" 19*d7d54769SKalesh AP #include "bnxt_re.h" 20*d7d54769SKalesh AP #include "ib_verbs.h" 21*d7d54769SKalesh AP #include "debugfs.h" 22*d7d54769SKalesh AP 23*d7d54769SKalesh AP static struct dentry *bnxt_re_debugfs_root; 24*d7d54769SKalesh AP 25*d7d54769SKalesh AP static inline const char *bnxt_re_qp_state_str(u8 state) 26*d7d54769SKalesh AP { 27*d7d54769SKalesh AP switch (state) { 28*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_RESET: 29*d7d54769SKalesh AP return "RST"; 30*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_INIT: 31*d7d54769SKalesh AP return "INIT"; 32*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_RTR: 33*d7d54769SKalesh AP return "RTR"; 34*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_RTS: 35*d7d54769SKalesh AP return "RTS"; 36*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_SQE: 37*d7d54769SKalesh AP return "SQER"; 38*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_SQD: 39*d7d54769SKalesh AP return "SQD"; 40*d7d54769SKalesh AP case CMDQ_MODIFY_QP_NEW_STATE_ERR: 41*d7d54769SKalesh AP return "ERR"; 42*d7d54769SKalesh AP default: 43*d7d54769SKalesh AP return "Invalid QP state"; 44*d7d54769SKalesh AP } 45*d7d54769SKalesh AP } 46*d7d54769SKalesh AP 47*d7d54769SKalesh AP static inline const char *bnxt_re_qp_type_str(u8 type) 48*d7d54769SKalesh AP { 49*d7d54769SKalesh AP switch (type) { 50*d7d54769SKalesh AP case CMDQ_CREATE_QP1_TYPE_GSI: return "QP1"; 51*d7d54769SKalesh AP case CMDQ_CREATE_QP_TYPE_GSI: return "QP1"; 52*d7d54769SKalesh AP case CMDQ_CREATE_QP_TYPE_RC: return "RC"; 53*d7d54769SKalesh AP case CMDQ_CREATE_QP_TYPE_UD: return "UD"; 54*d7d54769SKalesh AP case CMDQ_CREATE_QP_TYPE_RAW_ETHERTYPE: return "RAW_ETHERTYPE"; 55*d7d54769SKalesh AP default: return "Invalid transport type"; 56*d7d54769SKalesh AP } 57*d7d54769SKalesh AP } 58*d7d54769SKalesh AP 59*d7d54769SKalesh AP static ssize_t qp_info_read(struct file *filep, 60*d7d54769SKalesh AP char __user *buffer, 61*d7d54769SKalesh AP size_t count, loff_t *ppos) 62*d7d54769SKalesh AP { 63*d7d54769SKalesh AP struct bnxt_re_qp *qp = filep->private_data; 64*d7d54769SKalesh AP char *buf; 65*d7d54769SKalesh AP int len; 66*d7d54769SKalesh AP 67*d7d54769SKalesh AP if (*ppos) 68*d7d54769SKalesh AP return 0; 69*d7d54769SKalesh AP 70*d7d54769SKalesh AP buf = kasprintf(GFP_KERNEL, 71*d7d54769SKalesh AP "QPN\t\t: %d\n" 72*d7d54769SKalesh AP "transport\t: %s\n" 73*d7d54769SKalesh AP "state\t\t: %s\n" 74*d7d54769SKalesh AP "mtu\t\t: %d\n" 75*d7d54769SKalesh AP "timeout\t\t: %d\n" 76*d7d54769SKalesh AP "remote QPN\t: %d\n", 77*d7d54769SKalesh AP qp->qplib_qp.id, 78*d7d54769SKalesh AP bnxt_re_qp_type_str(qp->qplib_qp.type), 79*d7d54769SKalesh AP bnxt_re_qp_state_str(qp->qplib_qp.state), 80*d7d54769SKalesh AP qp->qplib_qp.mtu, 81*d7d54769SKalesh AP qp->qplib_qp.timeout, 82*d7d54769SKalesh AP qp->qplib_qp.dest_qpn); 83*d7d54769SKalesh AP if (!buf) 84*d7d54769SKalesh AP return -ENOMEM; 85*d7d54769SKalesh AP if (count < strlen(buf)) { 86*d7d54769SKalesh AP kfree(buf); 87*d7d54769SKalesh AP return -ENOSPC; 88*d7d54769SKalesh AP } 89*d7d54769SKalesh AP len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf)); 90*d7d54769SKalesh AP kfree(buf); 91*d7d54769SKalesh AP return len; 92*d7d54769SKalesh AP } 93*d7d54769SKalesh AP 94*d7d54769SKalesh AP static const struct file_operations debugfs_qp_fops = { 95*d7d54769SKalesh AP .owner = THIS_MODULE, 96*d7d54769SKalesh AP .open = simple_open, 97*d7d54769SKalesh AP .read = qp_info_read, 98*d7d54769SKalesh AP }; 99*d7d54769SKalesh AP 100*d7d54769SKalesh AP void bnxt_re_debug_add_qpinfo(struct bnxt_re_dev *rdev, struct bnxt_re_qp *qp) 101*d7d54769SKalesh AP { 102*d7d54769SKalesh AP char resn[32]; 103*d7d54769SKalesh AP 104*d7d54769SKalesh AP sprintf(resn, "0x%x", qp->qplib_qp.id); 105*d7d54769SKalesh AP qp->dentry = debugfs_create_file(resn, 0400, rdev->qp_debugfs, qp, &debugfs_qp_fops); 106*d7d54769SKalesh AP } 107*d7d54769SKalesh AP 108*d7d54769SKalesh AP void bnxt_re_debug_rem_qpinfo(struct bnxt_re_dev *rdev, struct bnxt_re_qp *qp) 109*d7d54769SKalesh AP { 110*d7d54769SKalesh AP debugfs_remove(qp->dentry); 111*d7d54769SKalesh AP } 112*d7d54769SKalesh AP 113*d7d54769SKalesh AP void bnxt_re_debugfs_add_pdev(struct bnxt_re_dev *rdev) 114*d7d54769SKalesh AP { 115*d7d54769SKalesh AP struct pci_dev *pdev = rdev->en_dev->pdev; 116*d7d54769SKalesh AP 117*d7d54769SKalesh AP rdev->dbg_root = debugfs_create_dir(dev_name(&pdev->dev), bnxt_re_debugfs_root); 118*d7d54769SKalesh AP 119*d7d54769SKalesh AP rdev->qp_debugfs = debugfs_create_dir("QPs", rdev->dbg_root); 120*d7d54769SKalesh AP } 121*d7d54769SKalesh AP 122*d7d54769SKalesh AP void bnxt_re_debugfs_rem_pdev(struct bnxt_re_dev *rdev) 123*d7d54769SKalesh AP { 124*d7d54769SKalesh AP debugfs_remove_recursive(rdev->qp_debugfs); 125*d7d54769SKalesh AP 126*d7d54769SKalesh AP debugfs_remove_recursive(rdev->dbg_root); 127*d7d54769SKalesh AP rdev->dbg_root = NULL; 128*d7d54769SKalesh AP } 129*d7d54769SKalesh AP 130*d7d54769SKalesh AP void bnxt_re_register_debugfs(void) 131*d7d54769SKalesh AP { 132*d7d54769SKalesh AP bnxt_re_debugfs_root = debugfs_create_dir("bnxt_re", NULL); 133*d7d54769SKalesh AP } 134*d7d54769SKalesh AP 135*d7d54769SKalesh AP void bnxt_re_unregister_debugfs(void) 136*d7d54769SKalesh AP { 137*d7d54769SKalesh AP debugfs_remove(bnxt_re_debugfs_root); 138*d7d54769SKalesh AP } 139