NTB: debugfs device entry
Create a debugfs entry for the NTB device to log the basic device info, as well as display the error count on a number of registers. Signed-off-by: Jon Mason <jon.mason@intel.com>
This commit is contained in:
parent
bfe01a5ba2
commit
6465d02ee1
3 changed files with 107 additions and 2 deletions
|
@ -1344,6 +1344,101 @@ static void ntb_free_callbacks(struct ntb_device *ndev)
|
|||
kfree(ndev->db_cb);
|
||||
}
|
||||
|
||||
static ssize_t ntb_debugfs_read(struct file *filp, char __user *ubuf,
|
||||
size_t count, loff_t *offp)
|
||||
{
|
||||
struct ntb_device *ndev;
|
||||
char *buf;
|
||||
ssize_t ret, offset, out_count;
|
||||
|
||||
out_count = 500;
|
||||
|
||||
buf = kmalloc(out_count, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
ndev = filp->private_data;
|
||||
offset = 0;
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"NTB Device Information:\n");
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Connection Type - \t\t%s\n",
|
||||
ndev->conn_type == NTB_CONN_TRANSPARENT ?
|
||||
"Transparent" : (ndev->conn_type == NTB_CONN_B2B) ?
|
||||
"Back to back" : "Root Port");
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Device Type - \t\t\t%s\n",
|
||||
ndev->dev_type == NTB_DEV_USD ?
|
||||
"DSD/USP" : "USD/DSP");
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Max Number of Callbacks - \t%u\n",
|
||||
ntb_max_cbs(ndev));
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Link Status - \t\t\t%s\n",
|
||||
ntb_hw_link_status(ndev) ? "Up" : "Down");
|
||||
if (ntb_hw_link_status(ndev)) {
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Link Speed - \t\t\tPCI-E Gen %u\n",
|
||||
ndev->link_speed);
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Link Width - \t\t\tx%u\n",
|
||||
ndev->link_width);
|
||||
}
|
||||
|
||||
if (ndev->hw_type != BWD_HW) {
|
||||
u32 status32;
|
||||
u16 status16;
|
||||
int rc;
|
||||
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"\nNTB Device Statistics:\n");
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"Upstream Memory Miss - \t%u\n",
|
||||
readw(ndev->reg_base +
|
||||
SNB_USMEMMISS_OFFSET));
|
||||
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"\nNTB Hardware Errors:\n");
|
||||
|
||||
rc = pci_read_config_word(ndev->pdev, SNB_DEVSTS_OFFSET,
|
||||
&status16);
|
||||
if (!rc)
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"DEVSTS - \t%#06x\n", status16);
|
||||
|
||||
rc = pci_read_config_word(ndev->pdev, SNB_LINK_STATUS_OFFSET,
|
||||
&status16);
|
||||
if (!rc)
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"LNKSTS - \t%#06x\n", status16);
|
||||
|
||||
rc = pci_read_config_dword(ndev->pdev, SNB_UNCERRSTS_OFFSET,
|
||||
&status32);
|
||||
if (!rc)
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"UNCERRSTS - \t%#010x\n", status32);
|
||||
|
||||
rc = pci_read_config_dword(ndev->pdev, SNB_CORERRSTS_OFFSET,
|
||||
&status32);
|
||||
if (!rc)
|
||||
offset += snprintf(buf + offset, out_count - offset,
|
||||
"CORERRSTS - \t%#010x\n", status32);
|
||||
}
|
||||
|
||||
if (offset > out_count)
|
||||
offset = out_count;
|
||||
|
||||
ret = simple_read_from_buffer(ubuf, count, offp, buf, offset);
|
||||
kfree(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct file_operations ntb_debugfs_info = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = simple_open,
|
||||
.read = ntb_debugfs_read,
|
||||
};
|
||||
|
||||
static void ntb_setup_debugfs(struct ntb_device *ndev)
|
||||
{
|
||||
if (!debugfs_initialized())
|
||||
|
@ -1354,6 +1449,11 @@ static void ntb_setup_debugfs(struct ntb_device *ndev)
|
|||
|
||||
ndev->debugfs_dir = debugfs_create_dir(pci_name(ndev->pdev),
|
||||
debugfs_dir);
|
||||
if (ndev->debugfs_dir)
|
||||
ndev->debugfs_info = debugfs_create_file("info", S_IRUSR,
|
||||
ndev->debugfs_dir,
|
||||
ndev,
|
||||
&ntb_debugfs_info);
|
||||
}
|
||||
|
||||
static void ntb_free_debugfs(struct ntb_device *ndev)
|
||||
|
@ -1542,4 +1642,5 @@ static struct pci_driver ntb_pci_driver = {
|
|||
.probe = ntb_pci_probe,
|
||||
.remove = ntb_pci_remove,
|
||||
};
|
||||
|
||||
module_pci_driver(ntb_pci_driver);
|
||||
|
|
|
@ -152,6 +152,7 @@ struct ntb_device {
|
|||
struct delayed_work lr_timer;
|
||||
|
||||
struct dentry *debugfs_dir;
|
||||
struct dentry *debugfs_info;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -62,10 +62,13 @@
|
|||
|
||||
#define SNB_DB_HW_LINK 0x8000
|
||||
|
||||
#define SNB_UNCERRSTS_OFFSET 0x014C
|
||||
#define SNB_CORERRSTS_OFFSET 0x0158
|
||||
#define SNB_LINK_STATUS_OFFSET 0x01A2
|
||||
#define SNB_PCICMD_OFFSET 0x0504
|
||||
#define SNB_DEVCTRL_OFFSET 0x0598
|
||||
#define SNB_DEVSTS_OFFSET 0x059A
|
||||
#define SNB_SLINK_STATUS_OFFSET 0x05A2
|
||||
#define SNB_LINK_STATUS_OFFSET 0x01A2
|
||||
|
||||
#define SNB_PBAR2LMT_OFFSET 0x0000
|
||||
#define SNB_PBAR4LMT_OFFSET 0x0008
|
||||
|
@ -84,7 +87,7 @@
|
|||
#define SNB_PDBMSK_OFFSET 0x0062
|
||||
#define SNB_SDOORBELL_OFFSET 0x0064
|
||||
#define SNB_SDBMSK_OFFSET 0x0066
|
||||
#define SNB_USMEMMISS 0x0070
|
||||
#define SNB_USMEMMISS_OFFSET 0x0070
|
||||
#define SNB_SPAD_OFFSET 0x0080
|
||||
#define SNB_SPADSEMA4_OFFSET 0x00c0
|
||||
#define SNB_WCCNTRL_OFFSET 0x00e0
|
||||
|
|
Loading…
Reference in a new issue