Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1334249 > unrolled thread

[PATCH 0/3] Some rockchip_spi fixes and debug support

Started byShawn Lin <shawn.lin@rock-chips.com>
First post2016-02-15 09:40 +0100
Last post2016-02-16 02:40 +0100
Articles 6 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/3] Some rockchip_spi fixes and debug support Shawn Lin <shawn.lin@rock-chips.com> - 2016-02-15 09:40 +0100
    [PATCH 1/3] spi: rockchip: disable runtime pm when in err case Shawn Lin <shawn.lin@rock-chips.com> - 2016-02-15 09:40 +0100
    [PATCH 2/3] spi: rockchip: add missing spi_master_put Shawn Lin <shawn.lin@rock-chips.com> - 2016-02-15 09:40 +0100
    [PATCH 3/3] spi: rockchip: add debug interface support Shawn Lin <shawn.lin@rock-chips.com> - 2016-02-15 09:40 +0100
      Re: [PATCH 3/3] spi: rockchip: add debug interface support Mark Brown <broonie@kernel.org> - 2016-02-15 18:30 +0100
        Re: [PATCH 3/3] spi: rockchip: add debug interface support Shawn Lin <shawn.lin@rock-chips.com> - 2016-02-16 02:40 +0100

#1334249 — [PATCH 0/3] Some rockchip_spi fixes and debug support

FromShawn Lin <shawn.lin@rock-chips.com>
Date2016-02-15 09:40 +0100
Subject[PATCH 0/3] Some rockchip_spi fixes and debug support
Message-ID<r2mRl-6Rc-25@gated-at.bofh.it>
This patchset fix some missing err handles of rockchip_spi.
And it also add debugfs support for rockchip_spi in order to trace
the driver's and controller's state.



Shawn Lin (3):
  spi: rockchip: disable runtime pm when in err case
  spi: rockchip: add missing spi_master_put
  spi: rockchip: add debug interface support

 drivers/spi/spi-rockchip.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

-- 
2.3.7

[toc] | [next] | [standalone]


#1334251 — [PATCH 1/3] spi: rockchip: disable runtime pm when in err case

FromShawn Lin <shawn.lin@rock-chips.com>
Date2016-02-15 09:40 +0100
Subject[PATCH 1/3] spi: rockchip: disable runtime pm when in err case
Message-ID<r2mRl-6Rc-23@gated-at.bofh.it>
In reply to#1334249
Before registering master, driver enables runtime pm.
This patch  pm_runtime_disable in err case while probing
driver to balance pm reference count.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

---

 drivers/spi/spi-rockchip.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index 79a8bc4..c0f9bae 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -749,6 +749,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
 	return 0;
 
 err_register_master:
+	pm_runtime_disable(&pdev->dev);
 	if (rs->dma_tx.ch)
 		dma_release_channel(rs->dma_tx.ch);
 	if (rs->dma_rx.ch)
-- 
2.3.7

[toc] | [prev] | [next] | [standalone]


#1334252 — [PATCH 2/3] spi: rockchip: add missing spi_master_put

FromShawn Lin <shawn.lin@rock-chips.com>
Date2016-02-15 09:40 +0100
Subject[PATCH 2/3] spi: rockchip: add missing spi_master_put
Message-ID<r2mRl-6Rc-31@gated-at.bofh.it>
In reply to#1334249
Add missing spi_master_put for rockchip_spi_remove since
it calls spi_master_get already.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
---

 drivers/spi/spi-rockchip.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index c0f9bae..7cb1b2d 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -779,6 +779,8 @@ static int rockchip_spi_remove(struct platform_device *pdev)
 	if (rs->dma_rx.ch)
 		dma_release_channel(rs->dma_rx.ch);
 
+	spi_master_put(master);
+
 	return 0;
 }
 
-- 
2.3.7

[toc] | [prev] | [next] | [standalone]


#1334263 — [PATCH 3/3] spi: rockchip: add debug interface support

FromShawn Lin <shawn.lin@rock-chips.com>
Date2016-02-15 09:40 +0100
Subject[PATCH 3/3] spi: rockchip: add debug interface support
Message-ID<r2mRm-6Rc-51@gated-at.bofh.it>
In reply to#1334249
Add debugfs support for user to debug rockchip spi
problems.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
---

 drivers/spi/spi-rockchip.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index 7cb1b2d..e858393 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -28,6 +28,10 @@
 #include <linux/io.h>
 #include <linux/dmaengine.h>
 
+#ifdef CONFIG_DEBUG_FS
+#include <linux/debugfs.h>
+#endif
+
 #define DRIVER_NAME "rockchip-spi"
 
 /* SPI register offsets */
@@ -199,8 +203,81 @@ struct rockchip_spi {
 	struct sg_table rx_sg;
 	struct rockchip_spi_dma_data dma_rx;
 	struct rockchip_spi_dma_data dma_tx;
+
+	#ifdef CONFIG_DEBUG_FS
+	struct dentry *debugfs;
+	#endif
+};
+
+#ifdef CONFIG_DEBUG_FS
+static int rockchip_spi_dbg_show(struct seq_file *s, void *v)
+{
+	struct rockchip_spi *rs = s->private;
+
+	seq_printf(s, "CTRLR0:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_CTRLR0));
+	seq_printf(s, "CTRLR1:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_CTRLR1));
+	seq_printf(s, "BAUDR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_BAUDR));
+	seq_printf(s, "TXFTLR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_TXFTLR));
+	seq_printf(s, "RXFTLR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_RXFTLR));
+	seq_printf(s, "SR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_SR));
+	seq_printf(s, "ISR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_ISR));
+	seq_printf(s, "DMACR:\t0x%08x\n",
+		   readl_relaxed(rs->regs + ROCKCHIP_SPI_DMACR));
+	seq_printf(s, "rs->state:\t0x%08x\n", rs->state);
+	seq_printf(s, "rs->speed:\t0x%08x\n", rs->speed);
+	seq_printf(s, "rs->tmode:\t0x%08x\n", rs->tmode);
+	seq_printf(s, "rs->mode:\t0x%08x\n", rs->mode);
+
+	return 0;
+}
+
+static int rockchip_spi_dbg_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, rockchip_spi_dbg_show, inode->i_private);
+}
+
+static const struct file_operations rockchip_spi_dbg_ops = {
+	.owner          = THIS_MODULE,
+	.open           = rockchip_spi_dbg_open,
+	.read           = seq_read,
+	.llseek         = seq_lseek,
+	.release        = single_release,
 };
 
+static int rockchip_spi_debugfs_init(struct rockchip_spi *rs)
+{
+	rs->debugfs = debugfs_create_dir("rockchip_spi", NULL);
+	if (!rs->debugfs)
+		return -ENOMEM;
+
+	debugfs_create_file("regs", S_IFREG | S_IRUGO,
+		rs->debugfs, (void *)rs, &rockchip_spi_dbg_ops);
+	return 0;
+}
+
+static void rockchip_spi_debugfs_remove(struct rockchip_spi *rs)
+{
+	debugfs_remove_recursive(rs->debugfs);
+}
+#else
+static inline int rockchip_spi_debugfs_init(struct rockchip_spi *rs)
+{
+	return 0;
+}
+
+static inline void rockchip_spi_debugfs_remove(struct rockchip_spi *rs)
+{
+}
+#endif /* CONFIG_DEBUG_FS */
+
+
 static inline void spi_enable_chip(struct rockchip_spi *rs, int enable)
 {
 	writel_relaxed((enable ? 1 : 0), rs->regs + ROCKCHIP_SPI_SSIENR);
@@ -746,6 +823,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
 		goto err_register_master;
 	}
 
+	rockchip_spi_debugfs_init(rs);
 	return 0;
 
 err_register_master:
@@ -770,6 +848,7 @@ static int rockchip_spi_remove(struct platform_device *pdev)
 	struct rockchip_spi *rs = spi_master_get_devdata(master);
 
 	pm_runtime_disable(&pdev->dev);
+	rockchip_spi_debugfs_remove(rs);
 
 	clk_disable_unprepare(rs->spiclk);
 	clk_disable_unprepare(rs->apb_pclk);
-- 
2.3.7

[toc] | [prev] | [next] | [standalone]


#1334652 — Re: [PATCH 3/3] spi: rockchip: add debug interface support

FromMark Brown <broonie@kernel.org>
Date2016-02-15 18:30 +0100
SubjectRe: [PATCH 3/3] spi: rockchip: add debug interface support
Message-ID<r2v8f-45p-49@gated-at.bofh.it>
In reply to#1334263

[Multipart message — attachments visible in raw view] — view raw

On Mon, Feb 15, 2016 at 04:28:22PM +0800, Shawn Lin wrote:

> +#ifdef CONFIG_DEBUG_FS
> +#include <linux/debugfs.h>
> +#endif

Just include the header.  Only add ifdefs if they do something.

> +static int rockchip_spi_debugfs_init(struct rockchip_spi *rs)
> +{
> +	rs->debugfs = debugfs_create_dir("rockchip_spi", NULL);
> +	if (!rs->debugfs)
> +		return -ENOMEM;
> +
> +	debugfs_create_file("regs", S_IFREG | S_IRUGO,
> +		rs->debugfs, (void *)rs, &rockchip_spi_dbg_ops);
> +	return 0;
> +}

This is completely separate to the core debugfs support for SPI, if
we're adding new debugfs stuff that's per device we should be extending
the core debugfs stuff so everything is in one place.

Your register dump stuff looks like you might want to consider using
regmap, it's got this and other register access diagnostics already.

[toc] | [prev] | [next] | [standalone]


#1334913 — Re: [PATCH 3/3] spi: rockchip: add debug interface support

FromShawn Lin <shawn.lin@rock-chips.com>
Date2016-02-16 02:40 +0100
SubjectRe: [PATCH 3/3] spi: rockchip: add debug interface support
Message-ID<r2CMr-JQ-11@gated-at.bofh.it>
In reply to#1334652
Hi Mark,

On 2016/2/16 1:26, Mark Brown wrote:
> On Mon, Feb 15, 2016 at 04:28:22PM +0800, Shawn Lin wrote:
>
>> +#ifdef CONFIG_DEBUG_FS
>> +#include <linux/debugfs.h>
>> +#endif
>
> Just include the header.  Only add ifdefs if they do something.
>
>> +static int rockchip_spi_debugfs_init(struct rockchip_spi *rs)
>> +{
>> +	rs->debugfs = debugfs_create_dir("rockchip_spi", NULL);
>> +	if (!rs->debugfs)
>> +		return -ENOMEM;
>> +
>> +	debugfs_create_file("regs", S_IFREG | S_IRUGO,
>> +		rs->debugfs, (void *)rs, &rockchip_spi_dbg_ops);
>> +	return 0;
>> +}
>
> This is completely separate to the core debugfs support for SPI, if
> we're adding new debugfs stuff that's per device we should be extending
> the core debugfs stuff so everything is in one place.

yes, I will check the spi core debugfs to see how we can extend it
for per device to dump specific msg.

Thanks.

>
> Your register dump stuff looks like you might want to consider using
> regmap, it's got this and other register access diagnostics already.
>


-- 
Best Regards
Shawn Lin

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web