linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* mtd: spi-nor: fsl-quadspi: add support for ls1021a
@ 2016-01-21  7:53 Yuan Yao
  2016-01-21  7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Yuan Yao @ 2016-01-21  7:53 UTC (permalink / raw)
  To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan

This patch set is used for add the fsl-quadspi support for ls1021a and
ls1043a, so remove the patch:
mtd: spi-nor: fsl-quadspi: extend support for some special requerment.

This patch will be send with anther patch set for add QSPI support on LS2080A.

All the new property are document in anther patch set which is already
send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org.
Here is the patch name:
0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch
0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch
0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch
0004-Documentation-fsl-quadspi-Add-optional-properties.patch

Any extra information you can find them on the patchwork:
https://patchwork.kernel.org/patch/8078931/
https://patchwork.kernel.org/patch/8078951/
https://patchwork.kernel.org/patch/8079091/
https://patchwork.kernel.org/patch/8078941/

Thanks.

Yuan Yao.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support
  2016-01-21  7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
@ 2016-01-21  7:53 ` Yuan Yao
  2016-01-23 21:11   ` Brian Norris
  2016-01-21  7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Yuan Yao @ 2016-01-21  7:53 UTC (permalink / raw)
  To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan

Add R/W functions for big- or little-endian registers:
The qSPI controller's endian is independent of the CPU core's endian.
So far, the qSPI have two versions for big-endian and little-endian.

Signed-off-by: Yuan Yao <yao.yuan@nxp.com>
Acked-by: Han xu <han.xu@freescale.com>
---
Changed in v3:
Update my email to <yao.yuan@nxp.com>

Changed in v2:
Rebase to the lastest code.
---
 drivers/mtd/spi-nor/fsl-quadspi.c | 157 +++++++++++++++++++++++---------------
 1 file changed, 97 insertions(+), 60 deletions(-)

diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 54640f1..04e8a93 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -275,6 +275,7 @@ struct fsl_qspi {
 	u32 clk_rate;
 	unsigned int chip_base_addr; /* We may support two chips. */
 	bool has_second_chip;
+	bool big_endian;
 	struct mutex lock;
 	struct pm_qos_request pm_qos_req;
 };
@@ -300,6 +301,28 @@ static inline int needs_wakeup_wait_mode(struct fsl_qspi *q)
 }
 
 /*
+ * R/W functions for big- or little-endian registers:
+ * The qSPI controller's endian is independent of the CPU core's endian.
+ * So far, although the CPU core is little-endian but the qSPI have two
+ * versions for big-endian and little-endian.
+ */
+static void qspi_writel(struct fsl_qspi *q, u32 val, void __iomem *addr)
+{
+	if (q->big_endian)
+		iowrite32be(val, addr);
+	else
+		iowrite32(val, addr);
+}
+
+static u32 qspi_readl(struct fsl_qspi *q, void __iomem *addr)
+{
+	if (q->big_endian)
+		return ioread32be(addr);
+	else
+		return ioread32(addr);
+}
+
+/*
  * An IC bug makes us to re-arrange the 32-bit data.
  * The following chips, such as IMX6SLX, have fixed this bug.
  */
@@ -310,14 +333,14 @@ static inline u32 fsl_qspi_endian_xchg(struct fsl_qspi *q, u32 a)
 
 static inline void fsl_qspi_unlock_lut(struct fsl_qspi *q)
 {
-	writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
-	writel(QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR);
+	qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
+	qspi_writel(q, QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR);
 }
 
 static inline void fsl_qspi_lock_lut(struct fsl_qspi *q)
 {
-	writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
-	writel(QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR);
+	qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
+	qspi_writel(q, QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR);
 }
 
 static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id)
@@ -326,8 +349,8 @@ static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id)
 	u32 reg;
 
 	/* clear interrupt */
-	reg = readl(q->iobase + QUADSPI_FR);
-	writel(reg, q->iobase + QUADSPI_FR);
+	reg = qspi_readl(q, q->iobase + QUADSPI_FR);
+	qspi_writel(q, reg, q->iobase + QUADSPI_FR);
 
 	if (reg & QUADSPI_FR_TFF_MASK)
 		complete(&q->c);
@@ -348,7 +371,7 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 
 	/* Clear all the LUT table */
 	for (i = 0; i < QUADSPI_LUT_NUM; i++)
-		writel(0, base + QUADSPI_LUT_BASE + i * 4);
+		qspi_writel(q, 0, base + QUADSPI_LUT_BASE + i * 4);
 
 	/* Quad Read */
 	lut_base = SEQID_QUAD_READ * 4;
@@ -364,14 +387,15 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 		dummy = 8;
 	}
 
-	writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
-	writel(LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo),
+	qspi_writel(q, LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo),
 			base + QUADSPI_LUT(lut_base + 1));
 
 	/* Write enable */
 	lut_base = SEQID_WREN * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_WREN), base + QUADSPI_LUT(lut_base));
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WREN),
+			base + QUADSPI_LUT(lut_base));
 
 	/* Page Program */
 	lut_base = SEQID_PP * 4;
@@ -385,13 +409,15 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 		addrlen = ADDR32BIT;
 	}
 
-	writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
-	writel(LUT0(FSL_WRITE, PAD1, 0), base + QUADSPI_LUT(lut_base + 1));
+	qspi_writel(q, LUT0(FSL_WRITE, PAD1, 0),
+			base + QUADSPI_LUT(lut_base + 1));
 
 	/* Read Status */
 	lut_base = SEQID_RDSR * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_RDSR) | LUT1(FSL_READ, PAD1, 0x1),
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDSR) |
+			LUT1(FSL_READ, PAD1, 0x1),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Erase a sector */
@@ -400,40 +426,46 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 	cmd = q->nor[0].erase_opcode;
 	addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT;
 
-	writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Erase the whole chip */
 	lut_base = SEQID_CHIP_ERASE * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_CHIP_ERASE),
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_CHIP_ERASE),
 			base + QUADSPI_LUT(lut_base));
 
 	/* READ ID */
 	lut_base = SEQID_RDID * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_RDID) | LUT1(FSL_READ, PAD1, 0x8),
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDID) |
+			LUT1(FSL_READ, PAD1, 0x8),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Write Register */
 	lut_base = SEQID_WRSR * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_WRSR) | LUT1(FSL_WRITE, PAD1, 0x2),
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WRSR) |
+			LUT1(FSL_WRITE, PAD1, 0x2),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Read Configuration Register */
 	lut_base = SEQID_RDCR * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_RDCR) | LUT1(FSL_READ, PAD1, 0x1),
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDCR) |
+			LUT1(FSL_READ, PAD1, 0x1),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Write disable */
 	lut_base = SEQID_WRDI * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_WRDI), base + QUADSPI_LUT(lut_base));
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WRDI),
+			base + QUADSPI_LUT(lut_base));
 
 	/* Enter 4 Byte Mode (Micron) */
 	lut_base = SEQID_EN4B * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_EN4B), base + QUADSPI_LUT(lut_base));
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_EN4B),
+			base + QUADSPI_LUT(lut_base));
 
 	/* Enter 4 Byte Mode (Spansion) */
 	lut_base = SEQID_BRWR * 4;
-	writel(LUT0(CMD, PAD1, SPINOR_OP_BRWR), base + QUADSPI_LUT(lut_base));
+	qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_BRWR),
+			base + QUADSPI_LUT(lut_base));
 
 	fsl_qspi_lock_lut(q);
 }
@@ -488,15 +520,16 @@ fsl_qspi_runcmd(struct fsl_qspi *q, u8 cmd, unsigned int addr, int len)
 			q->chip_base_addr, addr, len, cmd);
 
 	/* save the reg */
-	reg = readl(base + QUADSPI_MCR);
+	reg = qspi_readl(q, base + QUADSPI_MCR);
 
-	writel(q->memmap_phy + q->chip_base_addr + addr, base + QUADSPI_SFAR);
-	writel(QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS,
+	qspi_writel(q, q->memmap_phy + q->chip_base_addr + addr,
+			base + QUADSPI_SFAR);
+	qspi_writel(q, QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS,
 			base + QUADSPI_RBCT);
-	writel(reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR);
+	qspi_writel(q, reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR);
 
 	do {
-		reg2 = readl(base + QUADSPI_SR);
+		reg2 = qspi_readl(q, base + QUADSPI_SR);
 		if (reg2 & (QUADSPI_SR_IP_ACC_MASK | QUADSPI_SR_AHB_ACC_MASK)) {
 			udelay(1);
 			dev_dbg(q->dev, "The controller is busy, 0x%x\n", reg2);
@@ -507,21 +540,22 @@ fsl_qspi_runcmd(struct fsl_qspi *q, u8 cmd, unsigned int addr, int len)
 
 	/* trigger the LUT now */
 	seqid = fsl_qspi_get_seqid(q, cmd);
-	writel((seqid << QUADSPI_IPCR_SEQID_SHIFT) | len, base + QUADSPI_IPCR);
+	qspi_writel(q, (seqid << QUADSPI_IPCR_SEQID_SHIFT) | len,
+			base + QUADSPI_IPCR);
 
 	/* Wait for the interrupt. */
 	if (!wait_for_completion_timeout(&q->c, msecs_to_jiffies(1000))) {
 		dev_err(q->dev,
 			"cmd 0x%.2x timeout, addr@%.8x, FR:0x%.8x, SR:0x%.8x\n",
-			cmd, addr, readl(base + QUADSPI_FR),
-			readl(base + QUADSPI_SR));
+			cmd, addr, qspi_readl(q, base + QUADSPI_FR),
+			qspi_readl(q, base + QUADSPI_SR));
 		err = -ETIMEDOUT;
 	} else {
 		err = 0;
 	}
 
 	/* restore the MCR */
-	writel(reg, base + QUADSPI_MCR);
+	qspi_writel(q, reg, base + QUADSPI_MCR);
 
 	return err;
 }
@@ -533,7 +567,7 @@ static void fsl_qspi_read_data(struct fsl_qspi *q, int len, u8 *rxbuf)
 	int i = 0;
 
 	while (len > 0) {
-		tmp = readl(q->iobase + QUADSPI_RBDR + i * 4);
+		tmp = qspi_readl(q, q->iobase + QUADSPI_RBDR + i * 4);
 		tmp = fsl_qspi_endian_xchg(q, tmp);
 		dev_dbg(q->dev, "chip addr:0x%.8x, rcv:0x%.8x\n",
 				q->chip_base_addr, tmp);
@@ -561,9 +595,9 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q)
 {
 	u32 reg;
 
-	reg = readl(q->iobase + QUADSPI_MCR);
+	reg = qspi_readl(q, q->iobase + QUADSPI_MCR);
 	reg |= QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK;
-	writel(reg, q->iobase + QUADSPI_MCR);
+	qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
 
 	/*
 	 * The minimum delay : 1 AHB + 2 SFCK clocks.
@@ -572,7 +606,7 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q)
 	udelay(1);
 
 	reg &= ~(QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK);
-	writel(reg, q->iobase + QUADSPI_MCR);
+	qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
 }
 
 static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
@@ -586,20 +620,20 @@ static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
 		q->chip_base_addr, to, count);
 
 	/* clear the TX FIFO. */
-	tmp = readl(q->iobase + QUADSPI_MCR);
-	writel(tmp | QUADSPI_MCR_CLR_TXF_MASK, q->iobase + QUADSPI_MCR);
+	tmp = qspi_readl(q, q->iobase + QUADSPI_MCR);
+	qspi_writel(q, tmp | QUADSPI_MCR_CLR_TXF_MASK, q->iobase + QUADSPI_MCR);
 
 	/* fill the TX data to the FIFO */
 	for (j = 0, i = ((count + 3) / 4); j < i; j++) {
 		tmp = fsl_qspi_endian_xchg(q, *txbuf);
-		writel(tmp, q->iobase + QUADSPI_TBDR);
+		qspi_writel(q, tmp, q->iobase + QUADSPI_TBDR);
 		txbuf++;
 	}
 
 	/* fill the TXFIFO upto 16 bytes for i.MX7d */
 	if (needs_fill_txfifo(q))
 		for (; i < 4; i++)
-			writel(tmp, q->iobase + QUADSPI_TBDR);
+			qspi_writel(q, tmp, q->iobase + QUADSPI_TBDR);
 
 	/* Trigger it */
 	ret = fsl_qspi_runcmd(q, opcode, to, count);
@@ -615,10 +649,10 @@ static void fsl_qspi_set_map_addr(struct fsl_qspi *q)
 	int nor_size = q->nor_size;
 	void __iomem *base = q->iobase;
 
-	writel(nor_size + q->memmap_phy, base + QUADSPI_SFA1AD);
-	writel(nor_size * 2 + q->memmap_phy, base + QUADSPI_SFA2AD);
-	writel(nor_size * 3 + q->memmap_phy, base + QUADSPI_SFB1AD);
-	writel(nor_size * 4 + q->memmap_phy, base + QUADSPI_SFB2AD);
+	qspi_writel(q, nor_size + q->memmap_phy, base + QUADSPI_SFA1AD);
+	qspi_writel(q, nor_size * 2 + q->memmap_phy, base + QUADSPI_SFA2AD);
+	qspi_writel(q, nor_size * 3 + q->memmap_phy, base + QUADSPI_SFB1AD);
+	qspi_writel(q, nor_size * 4 + q->memmap_phy, base + QUADSPI_SFB2AD);
 }
 
 /*
@@ -640,24 +674,26 @@ static void fsl_qspi_init_abh_read(struct fsl_qspi *q)
 	int seqid;
 
 	/* AHB configuration for access buffer 0/1/2 .*/
-	writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF0CR);
-	writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF1CR);
-	writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF2CR);
+	qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF0CR);
+	qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF1CR);
+	qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF2CR);
 	/*
 	 * Set ADATSZ with the maximum AHB buffer size to improve the
 	 * read performance.
 	 */
-	writel(QUADSPI_BUF3CR_ALLMST_MASK | ((q->devtype_data->ahb_buf_size / 8)
-			<< QUADSPI_BUF3CR_ADATSZ_SHIFT), base + QUADSPI_BUF3CR);
+	qspi_writel(q, QUADSPI_BUF3CR_ALLMST_MASK |
+			((q->devtype_data->ahb_buf_size / 8)
+			<< QUADSPI_BUF3CR_ADATSZ_SHIFT),
+			base + QUADSPI_BUF3CR);
 
 	/* We only use the buffer3 */
-	writel(0, base + QUADSPI_BUF0IND);
-	writel(0, base + QUADSPI_BUF1IND);
-	writel(0, base + QUADSPI_BUF2IND);
+	qspi_writel(q, 0, base + QUADSPI_BUF0IND);
+	qspi_writel(q, 0, base + QUADSPI_BUF1IND);
+	qspi_writel(q, 0, base + QUADSPI_BUF2IND);
 
 	/* Set the default lut sequence for AHB Read. */
 	seqid = fsl_qspi_get_seqid(q, q->nor[0].read_opcode);
-	writel(seqid << QUADSPI_BFGENCR_SEQID_SHIFT,
+	qspi_writel(q, seqid << QUADSPI_BFGENCR_SEQID_SHIFT,
 		q->iobase + QUADSPI_BFGENCR);
 }
 
@@ -713,7 +749,7 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
 		return ret;
 
 	/* Reset the module */
-	writel(QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK,
+	qspi_writel(q, QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK,
 		base + QUADSPI_MCR);
 	udelay(1);
 
@@ -721,24 +757,24 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
 	fsl_qspi_init_lut(q);
 
 	/* Disable the module */
-	writel(QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK,
+	qspi_writel(q, QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK,
 			base + QUADSPI_MCR);
 
-	reg = readl(base + QUADSPI_SMPR);
-	writel(reg & ~(QUADSPI_SMPR_FSDLY_MASK
+	reg = qspi_readl(q, base + QUADSPI_SMPR);
+	qspi_writel(q, reg & ~(QUADSPI_SMPR_FSDLY_MASK
 			| QUADSPI_SMPR_FSPHS_MASK
 			| QUADSPI_SMPR_HSENA_MASK
 			| QUADSPI_SMPR_DDRSMP_MASK), base + QUADSPI_SMPR);
 
 	/* Enable the module */
-	writel(QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
+	qspi_writel(q, QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
 			base + QUADSPI_MCR);
 
 	/* clear all interrupt status */
-	writel(0xffffffff, q->iobase + QUADSPI_FR);
+	qspi_writel(q, 0xffffffff, q->iobase + QUADSPI_FR);
 
 	/* enable the interrupt */
-	writel(QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER);
+	qspi_writel(q, QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER);
 
 	return 0;
 }
@@ -954,6 +990,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)
 	if (IS_ERR(q->iobase))
 		return PTR_ERR(q->iobase);
 
+	q->big_endian = of_property_read_bool(np, "big-endian");
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
 					"QuadSPI-memory");
 	if (!devm_request_mem_region(dev, res->start, resource_size(res),
@@ -1101,8 +1138,8 @@ static int fsl_qspi_remove(struct platform_device *pdev)
 	}
 
 	/* disable the hardware */
-	writel(QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR);
-	writel(0x0, q->iobase + QUADSPI_RSER);
+	qspi_writel(q, QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR);
+	qspi_writel(q, 0x0, q->iobase + QUADSPI_RSER);
 
 	mutex_destroy(&q->lock);
 
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-21  7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
  2016-01-21  7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao
@ 2016-01-21  7:53 ` Yuan Yao
  2016-01-21  7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao
  2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu
  3 siblings, 0 replies; 10+ messages in thread
From: Yuan Yao @ 2016-01-21  7:53 UTC (permalink / raw)
  To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan

LS1021a also support Freescale Quad SPI controller.
Add fsl-quadspi support for ls1021a chip and make SPI_FSL_QUADSPI
selectable for LS1021A SOC hardwares.

Signed-off-by: Yuan Yao <yao.yuan@nxp.com>
Acked-by: Han xu <han.xu@freescale.com>
---
Changed in v3:
No changes.

Changed in v2:
Update my email to <yao.yuan@nxp.com>
---
 drivers/mtd/spi-nor/Kconfig       |  2 +-
 drivers/mtd/spi-nor/fsl-quadspi.c | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig
index 0dc9275..a28c278 100644
--- a/drivers/mtd/spi-nor/Kconfig
+++ b/drivers/mtd/spi-nor/Kconfig
@@ -30,7 +30,7 @@ config MTD_SPI_NOR_USE_4K_SECTORS
 
 config SPI_FSL_QUADSPI
 	tristate "Freescale Quad SPI controller"
-	depends on ARCH_MXC || COMPILE_TEST
+	depends on ARCH_MXC || SOC_LS1021A || COMPILE_TEST
 	depends on HAS_IOMEM
 	help
 	  This enables support for the Quad SPI controller in master mode.
diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 04e8a93..9ab2b51 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -213,6 +213,7 @@ enum fsl_qspi_devtype {
 	FSL_QUADSPI_IMX6SX,
 	FSL_QUADSPI_IMX7D,
 	FSL_QUADSPI_IMX6UL,
+	FSL_QUADSPI_LS1021A,
 };
 
 struct fsl_qspi_devtype_data {
@@ -258,6 +259,14 @@ static struct fsl_qspi_devtype_data imx6ul_data = {
 		       | QUADSPI_QUIRK_4X_INT_CLK,
 };
 
+static struct fsl_qspi_devtype_data ls1021a_data = {
+	.devtype = FSL_QUADSPI_LS1021A,
+	.rxfifo = 128,
+	.txfifo = 64,
+	.ahb_buf_size = 1024,
+	.driver_data = 0,
+};
+
 #define FSL_QSPI_MAX_CHIP	4
 struct fsl_qspi {
 	struct spi_nor nor[FSL_QSPI_MAX_CHIP];
@@ -812,6 +821,7 @@ static const struct of_device_id fsl_qspi_dt_ids[] = {
 	{ .compatible = "fsl,imx6sx-qspi", .data = (void *)&imx6sx_data, },
 	{ .compatible = "fsl,imx7d-qspi", .data = (void *)&imx7d_data, },
 	{ .compatible = "fsl,imx6ul-qspi", .data = (void *)&imx6ul_data, },
+	{ .compatible = "fsl,ls1021a-qspi", .data = (void *)&ls1021a_data, },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids);
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape
  2016-01-21  7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
  2016-01-21  7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao
  2016-01-21  7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
@ 2016-01-21  7:53 ` Yuan Yao
  2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu
  3 siblings, 0 replies; 10+ messages in thread
From: Yuan Yao @ 2016-01-21  7:53 UTC (permalink / raw)
  To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan

LS1043a and LS2080A in the Layerscape family also support Freescale Quad
SPI, make Quad SPI selectable for these hardwares.

Signed-off-by: Yuan Yao <yao.yuan@nxp.com>
---
Changed in v3:
No changes.

Changed in v2:
Update my email to <yao.yuan@nxp.com>
---
 drivers/mtd/spi-nor/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig
index a28c278..6b53deb 100644
--- a/drivers/mtd/spi-nor/Kconfig
+++ b/drivers/mtd/spi-nor/Kconfig
@@ -30,7 +30,7 @@ config MTD_SPI_NOR_USE_4K_SECTORS
 
 config SPI_FSL_QUADSPI
 	tristate "Freescale Quad SPI controller"
-	depends on ARCH_MXC || SOC_LS1021A || COMPILE_TEST
+	depends on ARCH_MXC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
 	depends on HAS_IOMEM
 	help
 	  This enables support for the Quad SPI controller in master mode.
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-21  7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
                   ` (2 preceding siblings ...)
  2016-01-21  7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao
@ 2016-01-21 15:42 ` Han Xu
  2016-01-22  9:01   ` Yao Yuan
  3 siblings, 1 reply; 10+ messages in thread
From: Han Xu @ 2016-01-21 15:42 UTC (permalink / raw)
  To: Yuan Yao
  Cc: David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel, yao.yuan

On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote:
> This patch set is used for add the fsl-quadspi support for ls1021a and
> ls1043a, so remove the patch:
> mtd: spi-nor: fsl-quadspi: extend support for some special requerment.

Please use --cover-letter to generate cover letter.

>
> This patch will be send with anther patch set for add QSPI support on LS2080A.
>
> All the new property are document in anther patch set which is already
> send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org.
> Here is the patch name:
> 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch
> 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch
> 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch
> 0004-Documentation-fsl-quadspi-Add-optional-properties.patch
>
> Any extra information you can find them on the patchwork:
> https://patchwork.kernel.org/patch/8078931/
> https://patchwork.kernel.org/patch/8078951/
> https://patchwork.kernel.org/patch/8079091/
> https://patchwork.kernel.org/patch/8078941/

Please send all patches in one patch set, this is not acceptable.

>
> Thanks.
>
> Yuan Yao.
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu
@ 2016-01-22  9:01   ` Yao Yuan
  2016-01-22 17:30     ` Han Xu
  0 siblings, 1 reply; 10+ messages in thread
From: Yao Yuan @ 2016-01-22  9:01 UTC (permalink / raw)
  To: Han Xu, Yuan Yao
  Cc: David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel

On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote:
> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote:
> > This patch set is used for add the fsl-quadspi support for ls1021a and
> > ls1043a, so remove the patch:
> > mtd: spi-nor: fsl-quadspi: extend support for some special requerment.
> 
> Please use --cover-letter to generate cover letter.
> 
> >
> > This patch will be send with anther patch set for add QSPI support on LS2080A.
> >
> > All the new property are document in anther patch set which is already
> > send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org.
> > Here is the patch name:
> > 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch
> > 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch
> > 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch
> > 0004-Documentation-fsl-quadspi-Add-optional-properties.patch
> >
> > Any extra information you can find them on the patchwork:
> > https://patchwork.kernel.org/patch/8078931/
> > https://patchwork.kernel.org/patch/8078951/
> > https://patchwork.kernel.org/patch/8079091/
> > https://patchwork.kernel.org/patch/8078941/
> 
> Please send all patches in one patch set, this is not acceptable.
> 

Thanks for your review.
But those patches are dts binding patch. And will send to  devicetree@vger.kernel.org and some corresponding maintainer.

Those two patch sets will send to different mail-list and maintainers separately.

So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer.

How about your think?

Thanks.

Yuan Yao.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-22  9:01   ` Yao Yuan
@ 2016-01-22 17:30     ` Han Xu
  2016-01-23 21:17       ` Brian Norris
  0 siblings, 1 reply; 10+ messages in thread
From: Han Xu @ 2016-01-22 17:30 UTC (permalink / raw)
  To: Yao Yuan
  Cc: Yuan Yao, David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel

On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote:
> On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote:
>> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote:
>> > This patch set is used for add the fsl-quadspi support for ls1021a and
>> > ls1043a, so remove the patch:
>> > mtd: spi-nor: fsl-quadspi: extend support for some special requerment.
>>
>> Please use --cover-letter to generate cover letter.
>>
>> >
>> > This patch will be send with anther patch set for add QSPI support on LS2080A.
>> >
>> > All the new property are document in anther patch set which is already
>> > send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org.
>> > Here is the patch name:
>> > 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch
>> > 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch
>> > 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch
>> > 0004-Documentation-fsl-quadspi-Add-optional-properties.patch
>> >
>> > Any extra information you can find them on the patchwork:
>> > https://patchwork.kernel.org/patch/8078931/
>> > https://patchwork.kernel.org/patch/8078951/
>> > https://patchwork.kernel.org/patch/8079091/
>> > https://patchwork.kernel.org/patch/8078941/
>>
>> Please send all patches in one patch set, this is not acceptable.
>>
>
> Thanks for your review.
> But those patches are dts binding patch. And will send to  devicetree@vger.kernel.org and some corresponding maintainer.
>
> Those two patch sets will send to different mail-list and maintainers separately.
>
> So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer.
>
> How about your think?

Send the complete patch set to maintainer and cc all related
sub-module groups, so everybody could understand the whole story.

> Thanks.
>
> Yuan Yao.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support
  2016-01-21  7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao
@ 2016-01-23 21:11   ` Brian Norris
  0 siblings, 0 replies; 10+ messages in thread
From: Brian Norris @ 2016-01-23 21:11 UTC (permalink / raw)
  To: Yuan Yao; +Cc: dwmw2, han.xu, linux-kernel, linux-mtd, yao.yuan

On Thu, Jan 21, 2016 at 03:53:54PM +0800, Yuan Yao wrote:
> Add R/W functions for big- or little-endian registers:
> The qSPI controller's endian is independent of the CPU core's endian.
> So far, the qSPI have two versions for big-endian and little-endian.
> 
> Signed-off-by: Yuan Yao <yao.yuan@nxp.com>
> Acked-by: Han xu <han.xu@freescale.com>
> ---

...

> @@ -954,6 +990,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)
>  	if (IS_ERR(q->iobase))
>  		return PTR_ERR(q->iobase);
>  
> +	q->big_endian = of_property_read_bool(np, "big-endian");
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
>  					"QuadSPI-memory");
>  	if (!devm_request_mem_region(dev, res->start, resource_size(res),

Still no documentation for this property?? You're trying my patience.
We've had the same request since November, and you haven't managed to
satisfy it.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-22 17:30     ` Han Xu
@ 2016-01-23 21:17       ` Brian Norris
  2016-01-24  4:16         ` Yao Yuan
  0 siblings, 1 reply; 10+ messages in thread
From: Brian Norris @ 2016-01-23 21:17 UTC (permalink / raw)
  To: Han Xu
  Cc: Yao Yuan, Yuan Yao, David Woodhouse, han.xu, linux-mtd, linux-kernel

On Fri, Jan 22, 2016 at 11:30:55AM -0600, Han Xu wrote:
> On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote:
> > On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote:
> >> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote:
> >> > Any extra information you can find them on the patchwork:
> >> > https://patchwork.kernel.org/patch/8078931/
> >> > https://patchwork.kernel.org/patch/8078951/
> >> > https://patchwork.kernel.org/patch/8079091/
> >> > https://patchwork.kernel.org/patch/8078941/
> >>
> >> Please send all patches in one patch set, this is not acceptable.
> >>
> >
> > Thanks for your review.
> > But those patches are dts binding patch. And will send to  devicetree@vger.kernel.org and some corresponding maintainer.
> >
> > Those two patch sets will send to different mail-list and maintainers separately.
> >
> > So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer.
> >
> > How about your think?
> 
> Send the complete patch set to maintainer and cc all related
> sub-module groups, so everybody could understand the whole story.

Agreed. You apparently did not read the suggested documentation from
last time:

  Documentation/devicetree/bindings/submitting-patches.txt

Particularly, points 2 and 3.

Subsystem maintainers merge binding patches, so please send them as part
of the regular series.

Brian

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a
  2016-01-23 21:17       ` Brian Norris
@ 2016-01-24  4:16         ` Yao Yuan
  0 siblings, 0 replies; 10+ messages in thread
From: Yao Yuan @ 2016-01-24  4:16 UTC (permalink / raw)
  To: Brian Norris, Han Xu
  Cc: Yuan Yao, David Woodhouse, han.xu, linux-mtd, linux-kernel

On Sun, Jan 24, 2016 05:17 AM +0800, Brian Norris wrote:
On Fri, Jan 22, 2016 at 11:30:55AM -0600, Han Xu wrote:
> On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote:
> > On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote:
> >> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote:
> >> > Any extra information you can find them on the patchwork:
> >> > https://patchwork.kernel.org/patch/8078931/
> >> > https://patchwork.kernel.org/patch/8078951/
> >> > https://patchwork.kernel.org/patch/8079091/
> >> > https://patchwork.kernel.org/patch/8078941/
> >>
> >> Please send all patches in one patch set, this is not acceptable.
> >>
> >
> > Thanks for your review.
> > But those patches are dts binding patch. And will send to  devicetree@vger.kernel.org and some corresponding maintainer.
> >
> > Those two patch sets will send to different mail-list and maintainers separately.
> >
> > So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer.
> >
> > How about your think?
>
> Send the complete patch set to maintainer and cc all related
> sub-module groups, so everybody could understand the whole story.

Agreed. You apparently did not read the suggested documentation from
last time:

  Documentation/devicetree/bindings/submitting-patches.txt

Particularly, points 2 and 3.

Subsystem maintainers merge binding patches, so please send them as part
of the regular series.

OK, Got it.
Thanks Han Xu and  Brian Norris.

I will resend them as a complete patch set.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-01-24  4:50 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-21  7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
2016-01-21  7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao
2016-01-23 21:11   ` Brian Norris
2016-01-21  7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao
2016-01-21  7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao
2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu
2016-01-22  9:01   ` Yao Yuan
2016-01-22 17:30     ` Han Xu
2016-01-23 21:17       ` Brian Norris
2016-01-24  4:16         ` Yao Yuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).