summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@freescale.com>2015-08-04 17:26:10 +0200
committerBrian Norris <computersforpeace@gmail.com>2015-08-06 19:07:44 +0200
commit8b8319c8b7d0385659c2df6376955cb6a1d918b6 (patch)
treef73965a57d2ad3008346e79b2255e3907b39265a
parentmtd: spi-nor: fsl-quadspi: workaround qspi can't wakeup from wait mode (diff)
downloadlinux-8b8319c8b7d0385659c2df6376955cb6a1d918b6.tar.xz
linux-8b8319c8b7d0385659c2df6376955cb6a1d918b6.zip
mtd: spi-nor: fsl-quadspi: reset the module in the probe
The uboot may run the QuadSpi controler with command: #sf probe So we should reset the module in the probe. This patch also clear the pending interrupts which arised by the uboot code. Signed-off-by: Huang Shijie <shijie8@gmail.com> Signed-off-by: Frank Li <Frank.Li@freescale.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
-rw-r--r--drivers/mtd/spi-nor/fsl-quadspi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 676b36361076..0144821a3692 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -716,6 +716,11 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
if (ret)
return ret;
+ /* Reset the module */
+ writel(QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK,
+ base + QUADSPI_MCR);
+ udelay(1);
+
/* Init the LUT table. */
fsl_qspi_init_lut(q);
@@ -733,6 +738,9 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
writel(QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
base + QUADSPI_MCR);
+ /* clear all interrupt status */
+ writel(0xffffffff, q->iobase + QUADSPI_FR);
+
/* enable the interrupt */
writel(QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER);