[PATCH 10/11] spi: add more debug prints in s3c64xx
Michal Suchanek
hramrach at gmail.com
Wed Jun 3 14:26:42 PDT 2015
The SPI NOR transfers mysteriously fail so add more debug prints about
SPI transactions.
Signed-off-by: Michal Suchanek <hramrach at gmail.com>
---
drivers/spi/spi-s3c64xx.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 2a90705..0574f0e 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -18,6 +18,7 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/clk.h>
+#include <linux/clk-provider.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/platform_device.h>
@@ -469,6 +470,7 @@ static int wait_for_dma(struct s3c64xx_spi_driver_data *sdd,
{
void __iomem *regs = sdd->regs;
unsigned long val;
+ unsigned long start, end;
u32 status;
int ms;
@@ -477,8 +479,20 @@ static int wait_for_dma(struct s3c64xx_spi_driver_data *sdd,
ms += 10; /* some tolerance */
ms *= 10;
+ pr_debug("%s %s %s waiting for %ims transferring %zubytes@%iHz",
+ __func__, sdd->pdev ? dev_name(&sdd->pdev->dev) : NULL,
+ dev_name(&sdd->master->dev),
+ ms, xfer->len, sdd->cur_speed);
+
val = msecs_to_jiffies(ms) + 10;
+ start = jiffies;
val = wait_for_completion_timeout(&sdd->xfer_completion, val);
+ end = jiffies;
+
+ pr_debug("%s %s %s waited %u ms",
+ __func__, sdd->pdev ? dev_name(&sdd->pdev->dev) : NULL,
+ dev_name(&sdd->master->dev),
+ jiffies_to_msecs(end - start));
/*
* If the previous xfer was completed within timeout, then
@@ -577,6 +591,14 @@ static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
void __iomem *regs = sdd->regs;
u32 val;
+ pr_debug("%s %s %s clk_from_cmu %i src_clk %s mode%s%s bpw %i",
+ __func__, sdd->pdev ? dev_name(&sdd->pdev->dev) : NULL,
+ dev_name(&sdd->master->dev), sdd->port_conf->clk_from_cmu,
+ sdd->src_clk ? __clk_get_name(sdd->src_clk) : NULL,
+ (sdd->cur_mode & SPI_CPOL) ? " SPI_CPOL" : "",
+ (sdd->cur_mode & SPI_CPHA) ? " SPI_CPHA" : "",
+ sdd->cur_bpw);
+
/* Disable Clock */
if (sdd->port_conf->clk_from_cmu) {
clk_disable_unprepare(sdd->src_clk);
@@ -679,6 +701,10 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master,
unsigned long flags;
int use_dma;
+ pr_debug("%s %s %s %s xfer bpw %i speed %i",
+ __func__, sdd->pdev ? dev_name(&sdd->pdev->dev) : NULL,
+ dev_name(&master->dev), dev_name(&spi->dev),
+ xfer->bits_per_word, xfer->speed_hz);
reinit_completion(&sdd->xfer_completion);
/* Only BPW and Speed may change across transfers */
@@ -697,6 +723,10 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master,
(sdd->rx_dma.ch && sdd->tx_dma.ch &&
(xfer->len > ((FIFO_LVL_MASK(sdd) >> 1) + 1))))
use_dma = 1;
+ pr_debug("%s %s %s %s %susing dma",
+ __func__, sdd->pdev ? dev_name(&sdd->pdev->dev) : NULL,
+ dev_name(&master->dev), dev_name(&spi->dev),
+ use_dma ? "" : "not ");
spin_lock_irqsave(&sdd->lock, flags);
--
2.1.4
More information about the linux-arm-kernel
mailing list