Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6465d02e authored by Jon Mason's avatar Jon Mason Committed by Jon Mason
Browse files

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: default avatarJon Mason <jon.mason@intel.com>
parent bfe01a5b
Loading
Loading
Loading
Loading
+101 −0
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -152,6 +152,7 @@ struct ntb_device {
	struct delayed_work lr_timer;

	struct dentry *debugfs_dir;
	struct dentry *debugfs_info;
};

/**
+5 −2
Original line number Diff line number Diff line
@@ -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