diff mbox series

[linux,dev-5.3] fsi: aspeed: Add debugfs entries

Message ID 20191014004433.28180-1-joel@jms.id.au
State Accepted, archived
Headers show
Series [linux,dev-5.3] fsi: aspeed: Add debugfs entries | expand

Commit Message

Joel Stanley Oct. 14, 2019, 12:44 a.m. UTC
From: Eddie James <eajames@linux.ibm.com>

Add debugfs entries for the FSI master registers.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
 drivers/fsi/fsi-master-aspeed.c | 135 ++++++++++++++++++++++++++++++++
 1 file changed, 135 insertions(+)

Comments

Andrew Jeffery Oct. 14, 2019, 12:50 a.m. UTC | #1
On Mon, 14 Oct 2019, at 11:14, Joel Stanley wrote:
> From: Eddie James <eajames@linux.ibm.com>
> 
> Add debugfs entries for the FSI master registers.
> 
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> Signed-off-by: Joel Stanley <joel@jms.id.au>

A bit ugly, but:

Acked-by: Andrew Jeffery <andrew@aj.id.au>
Joel Stanley Oct. 14, 2019, 1:11 a.m. UTC | #2
On Mon, 14 Oct 2019 at 00:49, Andrew Jeffery <andrew@aj.id.au> wrote:
>
>
>
> On Mon, 14 Oct 2019, at 11:14, Joel Stanley wrote:
> > From: Eddie James <eajames@linux.ibm.com>
> >
> > Add debugfs entries for the FSI master registers.
> >
> > Signed-off-by: Eddie James <eajames@linux.ibm.com>
> > Signed-off-by: Joel Stanley <joel@jms.id.au>
>
> A bit ugly, but:
>
> Acked-by: Andrew Jeffery <andrew@aj.id.au>

Yes. We will keep it around for in the 5.3 branch to aid with
debugging, and drop it in 5.4.
Brad Bishop Oct. 14, 2019, 12:48 p.m. UTC | #3
at 9:11 PM, Joel Stanley <joel@jms.id.au> wrote:

> On Mon, 14 Oct 2019 at 00:49, Andrew Jeffery <andrew@aj.id.au> wrote:
>> On Mon, 14 Oct 2019, at 11:14, Joel Stanley wrote:
>>> From: Eddie James <eajames@linux.ibm.com>
>>>
>>> Add debugfs entries for the FSI master registers.
>>>
>>> Signed-off-by: Eddie James <eajames@linux.ibm.com>
>>> Signed-off-by: Joel Stanley <joel@jms.id.au>
>>
>> A bit ugly, but:
>>
>> Acked-by: Andrew Jeffery <andrew@aj.id.au>
>
> Yes. We will keep it around for in the 5.3 branch to aid with
> debugging, and drop it in 5.4.

I’m just curious.  Does the need for code like this go away after FSI  
bringup is done or when 5.4 rolls in?  Is this just a statement on how it  
was done or that it was done at all?

thx - brad
Andrew Jeffery Oct. 15, 2019, 12:18 a.m. UTC | #4
On Mon, 14 Oct 2019, at 23:18, Brad Bishop wrote:
> at 9:11 PM, Joel Stanley <joel@jms.id.au> wrote:
> 
> > On Mon, 14 Oct 2019 at 00:49, Andrew Jeffery <andrew@aj.id.au> wrote:
> >> On Mon, 14 Oct 2019, at 11:14, Joel Stanley wrote:
> >>> From: Eddie James <eajames@linux.ibm.com>
> >>>
> >>> Add debugfs entries for the FSI master registers.
> >>>
> >>> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> >>> Signed-off-by: Joel Stanley <joel@jms.id.au>
> >>
> >> A bit ugly, but:
> >>
> >> Acked-by: Andrew Jeffery <andrew@aj.id.au>
> >
> > Yes. We will keep it around for in the 5.3 branch to aid with
> > debugging, and drop it in 5.4.
> 
> I’m just curious.  Does the need for code like this go away after FSI  
> bringup is done or when 5.4 rolls in?  Is this just a statement on how it  
> was done or that it was done at all?

I think it's just a statement that there's no plan to carry it indefinitely.

However I think it's fine to keep it, but a) it needs to evolve a little to fix up
bugs in the face of multiple masters as pointed out by Jeremy and b) we
might be able to make it less tedious. And with that it could go upstream.

Hopefully we won't need it much after bringup is done.

Andrew
diff mbox series

Patch

diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
index dce61f08425e..6496d2972944 100644
--- a/drivers/fsi/fsi-master-aspeed.c
+++ b/drivers/fsi/fsi-master-aspeed.c
@@ -3,6 +3,7 @@ 
 // FSI master driver for AST2600
 
 #include <linux/clk.h>
+#include <linux/debugfs.h>
 #include <linux/delay.h>
 #include <linux/fsi.h>
 #include <linux/io.h>
@@ -28,6 +29,7 @@ 
 #define FSI_MCENP0		0x20		/* C: Clear enable */
 #define FSI_MAEB		0x70		/* R: Error address */
 #define FSI_MVER		0x74		/* R: master version/type */
+#define FSI_MSTAP0		0xd0		/* R: Port status */
 #define FSI_MRESP0		0xd0		/* W: Port reset */
 #define FSI_MESRB0		0x1d0		/* R: Master error status */
 #define FSI_MRESB0		0x1d0		/* W: Reset bridge */
@@ -68,11 +70,23 @@ 
 
 #define FSI_LINK_ENABLE_SETUP_TIME	10	/* in mS */
 
+#define FSI_NUM_DEBUGFS_ENTRIES		14
+
+struct fsi_master_aspeed;
+
+struct fsi_master_aspeed_debugfs_entry {
+	struct fsi_master_aspeed *aspeed;
+	uint32_t addr;
+};
+
 struct fsi_master_aspeed {
 	struct fsi_master	master;
 	struct device		*dev;
 	void __iomem		*base;
 	struct clk		*clk;
+
+	struct dentry		*debugfs_dir;
+	struct fsi_master_aspeed_debugfs_entry debugfs[FSI_NUM_DEBUGFS_ENTRIES];
 };
 
 #define to_fsi_master_aspeed(m) \
@@ -428,6 +442,35 @@  static int aspeed_master_init(struct fsi_master_aspeed *aspeed)
 	return 0;
 }
 
+static int fsi_master_aspeed_debugfs_get(void *data, u64 *val)
+{
+	int rc;
+	u32 out;
+	struct fsi_master_aspeed_debugfs_entry *entry = data;
+
+	rc = opb_read(entry->aspeed->base, ctrl_base + entry->addr, 4, &out);
+	if (rc)
+		return rc;
+
+	*val = (u64)be32_to_cpu(out);
+	return 0;
+}
+static int fsi_master_aspeed_debugfs_set(void *data, u64 val)
+{
+	u32 rc;
+	u32 in = cpu_to_be32((u32)(val & 0xFFFFFFFFULL));
+	struct fsi_master_aspeed_debugfs_entry *entry = data;
+
+	rc = opb_write(entry->aspeed->base, ctrl_base + entry->addr, in, 4);
+	if (rc)
+		return rc;
+
+	return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(fsi_master_aspeed_debugfs_ops,
+			 fsi_master_aspeed_debugfs_get,
+			 fsi_master_aspeed_debugfs_set, "0x%08llx\n");
+
 static int fsi_master_aspeed_probe(struct platform_device *pdev)
 {
 	struct fsi_master_aspeed *aspeed;
@@ -499,6 +542,96 @@  static int fsi_master_aspeed_probe(struct platform_device *pdev)
 
 	aspeed_master_init(aspeed);
 
+	aspeed->debugfs_dir = debugfs_create_dir("fsi-master-aspeed", NULL);
+	if (aspeed->debugfs_dir) {
+		int idx = 0;
+		struct fsi_master_aspeed_debugfs_entry *etrs = aspeed->debugfs;
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MMODE;
+		debugfs_create_file("mmode", 0644, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MDLYR;
+		debugfs_create_file("mdlyr", 0644, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MCRSP;
+		debugfs_create_file("mcrsp0", 0644, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MENP0;
+		debugfs_create_file("menp0", 0644, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MLEVP0;
+		debugfs_create_file("mlevp0", 0444, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MSENP0;
+		debugfs_create_file("msenp0", 0200, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MCENP0;
+		debugfs_create_file("mcenp0", 0200, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MAEB;
+		debugfs_create_file("maeb", 0444, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MVER;
+		debugfs_create_file("mver", 0444, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MSTAP0;
+		debugfs_create_file("mstap0", 0444, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MRESP0;
+		debugfs_create_file("mresp0", 0200, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MESRB0;
+		debugfs_create_file("mesrb0", 0444, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MRESB0;
+		debugfs_create_file("mresb0", 0200, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+
+		etrs[idx].aspeed = aspeed;
+		etrs[idx].addr = FSI_MECTRL;
+		debugfs_create_file("mectrl", 0644, aspeed->debugfs_dir,
+				    &etrs[idx++],
+				    &fsi_master_aspeed_debugfs_ops);
+	}
+
 	rc = fsi_master_register(&aspeed->master);
 	if (rc)
 		goto err_release;
@@ -522,6 +655,8 @@  static int fsi_master_aspeed_remove(struct platform_device *pdev)
 {
 	struct fsi_master_aspeed *aspeed = platform_get_drvdata(pdev);
 
+	debugfs_remove_recursive(aspeed->debugfs_dir);
+
 	fsi_master_unregister(&aspeed->master);
 	clk_disable_unprepare(aspeed->clk);