From: Eddie James <eajames@linux.ibm.com>
To: linux-aspeed@lists.ozlabs.org
Subject: [PATCH 5/6] drivers/misc: xdma: Add debugfs entries
Date: Mon, 4 Mar 2019 15:36:59 -0600 [thread overview]
Message-ID: <1551735420-16202-6-git-send-email-eajames@linux.ibm.com> (raw)
In-Reply-To: <1551735420-16202-1-git-send-email-eajames@linux.ibm.com>
Add debugfs entries for the relevant XDMA engine registers and for
dumping the AST2500 reserved memory space.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/misc/aspeed-xdma.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/drivers/misc/aspeed-xdma.c b/drivers/misc/aspeed-xdma.c
index 0a1a093..a645a5f 100644
--- a/drivers/misc/aspeed-xdma.c
+++ b/drivers/misc/aspeed-xdma.c
@@ -142,6 +142,12 @@ struct aspeed_xdma {
struct list_head vga_blks_free;
struct miscdevice misc;
+ struct dentry *debugfs_dir;
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+ struct debugfs_regset32 regset;
+ struct debugfs_reg32 regs[XDMA_NUM_DEBUGFS_REGS];
+#endif /* IS_ENABLED(CONFIG_DEBUG_FS) */
};
struct aspeed_xdma_client {
@@ -634,6 +640,92 @@ static int aspeed_xdma_init_mem(struct aspeed_xdma *ctx)
return 0;
}
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+static ssize_t aspeed_xdma_debugfs_vga_read(struct file *file,
+ char __user *buf, size_t len,
+ loff_t *offset)
+{
+ int rc;
+ struct inode *inode = file_inode(file);
+ struct aspeed_xdma *ctx = inode->i_private;
+ void __iomem *vga = ioremap(ctx->vga_phys, ctx->vga_size);
+ loff_t offs = *offset;
+ void *tmp;
+
+ if (!vga)
+ return -ENOMEM;
+
+ if (len + offs > ctx->vga_size) {
+ iounmap(vga);
+ return -EINVAL;
+ }
+
+ tmp = kzalloc(len, GFP_KERNEL);
+ if (!tmp) {
+ iounmap(vga);
+ return -ENOMEM;
+ }
+
+ memcpy_fromio(tmp, vga + offs, len);
+
+ rc = copy_to_user(buf, tmp, len);
+ if (rc) {
+ iounmap(vga);
+ kfree(tmp);
+ return rc;
+ }
+
+ *offset = offs + len;
+
+ kfree(tmp);
+ iounmap(vga);
+
+ return len;
+}
+
+static const struct file_operations aspeed_xdma_debugfs_vga_fops = {
+ .owner = THIS_MODULE,
+ .llseek = generic_file_llseek,
+ .read = aspeed_xdma_debugfs_vga_read,
+};
+
+static void aspeed_xdma_init_debugfs(struct aspeed_xdma *ctx)
+{
+ ctx->debugfs_dir = debugfs_create_dir(DEVICE_NAME, NULL);
+ if (IS_ERR_OR_NULL(ctx->debugfs_dir)) {
+ dev_warn(ctx->dev, "Failed to create debugfs directory.\n");
+ return;
+ }
+
+ debugfs_create_file("vga", 0444, ctx->debugfs_dir, ctx,
+ &aspeed_xdma_debugfs_vga_fops);
+
+ ctx->regs[0].name = "addr";
+ ctx->regs[0].offset = XDMA_BMC_CMD_QUEUE_ADDR;
+ ctx->regs[1].name = "endp";
+ ctx->regs[1].offset = XDMA_BMC_CMD_QUEUE_ENDP;
+ ctx->regs[2].name = "writep";
+ ctx->regs[2].offset = XDMA_BMC_CMD_QUEUE_WRITEP;
+ ctx->regs[3].name = "readp";
+ ctx->regs[3].offset = XDMA_BMC_CMD_QUEUE_READP;
+ ctx->regs[4].name = "control";
+ ctx->regs[4].offset = XDMA_CTRL;
+ ctx->regs[5].name = "status";
+ ctx->regs[5].offset = XDMA_STATUS;
+
+ ctx->regset.regs = ctx->regs;
+ ctx->regset.nregs = XDMA_NUM_DEBUGFS_REGS;
+ ctx->regset.base = ctx->base;
+
+ debugfs_create_regset32("regs", 0444, ctx->debugfs_dir, &ctx->regset);
+}
+#else
+static void aspeed_xdma_init_debugfs(struct aspeed_xdma *ctx)
+{
+}
+
+#endif /* IS_ENABLED(CONFIG_DEBUG_FS) */
+
static void aspeed_xdma_free_vga_blks(struct aspeed_xdma *ctx)
{
struct aspeed_xdma_vga_blk *free;
@@ -786,6 +878,8 @@ static int aspeed_xdma_probe(struct platform_device *pdev)
device_create_file(dev, &dev_attr_use_bmc);
device_create_file(dev, &dev_attr_use_vga);
+ aspeed_xdma_init_debugfs(ctx);
+
return 0;
}
@@ -793,6 +887,8 @@ static int aspeed_xdma_remove(struct platform_device *pdev)
{
struct aspeed_xdma *ctx = platform_get_drvdata(pdev);
+ debugfs_remove_recursive(ctx->debugfs_dir);
+
device_remove_file(ctx->dev, &dev_attr_use_vga);
device_remove_file(ctx->dev, &dev_attr_use_bmc);
--
1.8.3.1
WARNING: multiple messages have this Message-ID (diff)
From: Eddie James <eajames@linux.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: linux-aspeed@lists.ozlabs.org, devicetree@vger.kernel.org,
robh+dt@kernel.org, mark.rutland@arm.com, joel@jms.id.au,
andrew@aj.id.au, arnd@arndb.de, gregkh@linuxfoundation.org,
jk@ozlabs.org, openbmc@lists.ozlabs.org,
Eddie James <eajames@linux.ibm.com>
Subject: [PATCH 5/6] drivers/misc: xdma: Add debugfs entries
Date: Mon, 4 Mar 2019 15:36:59 -0600 [thread overview]
Message-ID: <1551735420-16202-6-git-send-email-eajames@linux.ibm.com> (raw)
In-Reply-To: <1551735420-16202-1-git-send-email-eajames@linux.ibm.com>
Add debugfs entries for the relevant XDMA engine registers and for
dumping the AST2500 reserved memory space.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/misc/aspeed-xdma.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/drivers/misc/aspeed-xdma.c b/drivers/misc/aspeed-xdma.c
index 0a1a093..a645a5f 100644
--- a/drivers/misc/aspeed-xdma.c
+++ b/drivers/misc/aspeed-xdma.c
@@ -142,6 +142,12 @@ struct aspeed_xdma {
struct list_head vga_blks_free;
struct miscdevice misc;
+ struct dentry *debugfs_dir;
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+ struct debugfs_regset32 regset;
+ struct debugfs_reg32 regs[XDMA_NUM_DEBUGFS_REGS];
+#endif /* IS_ENABLED(CONFIG_DEBUG_FS) */
};
struct aspeed_xdma_client {
@@ -634,6 +640,92 @@ static int aspeed_xdma_init_mem(struct aspeed_xdma *ctx)
return 0;
}
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+static ssize_t aspeed_xdma_debugfs_vga_read(struct file *file,
+ char __user *buf, size_t len,
+ loff_t *offset)
+{
+ int rc;
+ struct inode *inode = file_inode(file);
+ struct aspeed_xdma *ctx = inode->i_private;
+ void __iomem *vga = ioremap(ctx->vga_phys, ctx->vga_size);
+ loff_t offs = *offset;
+ void *tmp;
+
+ if (!vga)
+ return -ENOMEM;
+
+ if (len + offs > ctx->vga_size) {
+ iounmap(vga);
+ return -EINVAL;
+ }
+
+ tmp = kzalloc(len, GFP_KERNEL);
+ if (!tmp) {
+ iounmap(vga);
+ return -ENOMEM;
+ }
+
+ memcpy_fromio(tmp, vga + offs, len);
+
+ rc = copy_to_user(buf, tmp, len);
+ if (rc) {
+ iounmap(vga);
+ kfree(tmp);
+ return rc;
+ }
+
+ *offset = offs + len;
+
+ kfree(tmp);
+ iounmap(vga);
+
+ return len;
+}
+
+static const struct file_operations aspeed_xdma_debugfs_vga_fops = {
+ .owner = THIS_MODULE,
+ .llseek = generic_file_llseek,
+ .read = aspeed_xdma_debugfs_vga_read,
+};
+
+static void aspeed_xdma_init_debugfs(struct aspeed_xdma *ctx)
+{
+ ctx->debugfs_dir = debugfs_create_dir(DEVICE_NAME, NULL);
+ if (IS_ERR_OR_NULL(ctx->debugfs_dir)) {
+ dev_warn(ctx->dev, "Failed to create debugfs directory.\n");
+ return;
+ }
+
+ debugfs_create_file("vga", 0444, ctx->debugfs_dir, ctx,
+ &aspeed_xdma_debugfs_vga_fops);
+
+ ctx->regs[0].name = "addr";
+ ctx->regs[0].offset = XDMA_BMC_CMD_QUEUE_ADDR;
+ ctx->regs[1].name = "endp";
+ ctx->regs[1].offset = XDMA_BMC_CMD_QUEUE_ENDP;
+ ctx->regs[2].name = "writep";
+ ctx->regs[2].offset = XDMA_BMC_CMD_QUEUE_WRITEP;
+ ctx->regs[3].name = "readp";
+ ctx->regs[3].offset = XDMA_BMC_CMD_QUEUE_READP;
+ ctx->regs[4].name = "control";
+ ctx->regs[4].offset = XDMA_CTRL;
+ ctx->regs[5].name = "status";
+ ctx->regs[5].offset = XDMA_STATUS;
+
+ ctx->regset.regs = ctx->regs;
+ ctx->regset.nregs = XDMA_NUM_DEBUGFS_REGS;
+ ctx->regset.base = ctx->base;
+
+ debugfs_create_regset32("regs", 0444, ctx->debugfs_dir, &ctx->regset);
+}
+#else
+static void aspeed_xdma_init_debugfs(struct aspeed_xdma *ctx)
+{
+}
+
+#endif /* IS_ENABLED(CONFIG_DEBUG_FS) */
+
static void aspeed_xdma_free_vga_blks(struct aspeed_xdma *ctx)
{
struct aspeed_xdma_vga_blk *free;
@@ -786,6 +878,8 @@ static int aspeed_xdma_probe(struct platform_device *pdev)
device_create_file(dev, &dev_attr_use_bmc);
device_create_file(dev, &dev_attr_use_vga);
+ aspeed_xdma_init_debugfs(ctx);
+
return 0;
}
@@ -793,6 +887,8 @@ static int aspeed_xdma_remove(struct platform_device *pdev)
{
struct aspeed_xdma *ctx = platform_get_drvdata(pdev);
+ debugfs_remove_recursive(ctx->debugfs_dir);
+
device_remove_file(ctx->dev, &dev_attr_use_vga);
device_remove_file(ctx->dev, &dev_attr_use_bmc);
--
1.8.3.1
next prev parent reply other threads:[~2019-03-04 21:36 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-04 21:36 [PATCH 0/6] drivers/misc: Add XDMA engine driver Eddie James
2019-03-04 21:36 ` Eddie James
2019-03-04 21:36 ` [PATCH 1/6] dt-bindings: misc: Add Aspeed XDMA engine binding documentation Eddie James
2019-03-04 21:36 ` Eddie James
2019-03-04 21:36 ` [PATCH 2/6] drivers/misc: Add Aspeed XDMA engine driver Eddie James
2019-03-04 21:36 ` Eddie James
2019-03-05 8:01 ` Arnd Bergmann
2019-03-05 8:01 ` Arnd Bergmann
2019-03-05 21:45 ` Eddie James
2019-03-05 21:45 ` Eddie James
2019-03-06 0:00 ` Andrew Jeffery
2019-03-06 0:00 ` Andrew Jeffery
2019-03-06 10:48 ` Arnd Bergmann
2019-03-06 10:48 ` Arnd Bergmann
2019-03-12 18:46 ` Eddie James
2019-03-12 18:46 ` Eddie James
2019-03-04 21:36 ` [PATCH 3/6] drivers/misc: xdma: Add user interface Eddie James
2019-03-04 21:36 ` Eddie James
2019-03-04 21:36 ` [PATCH 4/6] drivers/misc: xdma: Add PCI device configuration sysfs Eddie James
2019-03-04 21:36 ` Eddie James
2019-03-04 21:36 ` Eddie James [this message]
2019-03-04 21:36 ` [PATCH 5/6] drivers/misc: xdma: Add debugfs entries Eddie James
2019-03-04 21:37 ` [PATCH 6/6] ARM: dts: aspeed: Add XDMA engine Eddie James
2019-03-04 21:37 ` Eddie James
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1551735420-16202-6-git-send-email-eajames@linux.ibm.com \
--to=eajames@linux.ibm.com \
--cc=linux-aspeed@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.