mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 1/4] mtd:fsl-quadspi:use the property fields of SPI-NOR
@ 2016-03-03  6:54 Yunhui Cui
  2016-03-03  6:54 ` [PATCH v3 2/4] mtd: fsl-quadspi: Rename SEQID_QUAD_READ to SEQID_READ Yunhui Cui
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Yunhui Cui @ 2016-03-03  6:54 UTC (permalink / raw)
  To: dwmw2, computersforpeace, han.xu
  Cc: linux-kernel, linux-mtd, linux-arm-kernel, yao.yuan, Yunhui Cui

We can get the read/write/erase opcode from the spi nor framework
directly. This patch uses the information stored in the SPI-NOR to
remove the hardcode in the fsl_qspi_init_lut().

Signed-off-by: Yunhui Cui <B56489@freescale.com>
Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
---
 drivers/mtd/spi-nor/fsl-quadspi.c | 40 ++++++++++++---------------------------
 1 file changed, 12 insertions(+), 28 deletions(-)

diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 9ab2b51..517ffe2 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -373,9 +373,13 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 	void __iomem *base = q->iobase;
 	int rxfifo = q->devtype_data->rxfifo;
 	u32 lut_base;
-	u8 cmd, addrlen, dummy;
 	int i;
 
+	struct spi_nor *nor = &q->nor[0];
+	u8 addrlen = (nor->addr_width == 3) ? ADDR24BIT : ADDR32BIT;
+	u8 read_op = nor->read_opcode;
+	u8 read_dm = nor->read_dummy;
+
 	fsl_qspi_unlock_lut(q);
 
 	/* Clear all the LUT table */
@@ -385,20 +389,10 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 	/* Quad Read */
 	lut_base = SEQID_QUAD_READ * 4;
 
-	if (q->nor_size <= SZ_16M) {
-		cmd = SPINOR_OP_READ_1_1_4;
-		addrlen = ADDR24BIT;
-		dummy = 8;
-	} else {
-		/* use the 4-byte address */
-		cmd = SPINOR_OP_READ_1_1_4;
-		addrlen = ADDR32BIT;
-		dummy = 8;
-	}
-
-	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, read_op) | LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
-	qspi_writel(q, LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo),
+	qspi_writel(q, LUT0(DUMMY, PAD1, read_dm) |
+		    LUT1(FSL_READ, PAD4, rxfifo),
 			base + QUADSPI_LUT(lut_base + 1));
 
 	/* Write enable */
@@ -409,16 +403,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 	/* Page Program */
 	lut_base = SEQID_PP * 4;
 
-	if (q->nor_size <= SZ_16M) {
-		cmd = SPINOR_OP_PP;
-		addrlen = ADDR24BIT;
-	} else {
-		/* use the 4-byte address */
-		cmd = SPINOR_OP_PP;
-		addrlen = ADDR32BIT;
-	}
-
-	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, nor->program_opcode) |
+		    LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
 	qspi_writel(q, LUT0(FSL_WRITE, PAD1, 0),
 			base + QUADSPI_LUT(lut_base + 1));
@@ -432,10 +418,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
 	/* Erase a sector */
 	lut_base = SEQID_SE * 4;
 
-	cmd = q->nor[0].erase_opcode;
-	addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT;
-
-	qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
+	qspi_writel(q, LUT0(CMD, PAD1, nor->erase_opcode) |
+		    LUT1(ADDR, PAD1, addrlen),
 			base + QUADSPI_LUT(lut_base));
 
 	/* Erase the whole chip */
-- 
2.1.0.27.g96db324

^ permalink raw reply	[flat|nested] 10+ messages in thread
* Re: [PATCH v3 4/4] mtd: spi-nor: Disable Micron flash HW protection
@ 2016-03-03 13:39 Bean Huo 霍斌斌 (beanhuo)
  2016-03-18 10:08 ` Yunhui Cui
  0 siblings, 1 reply; 10+ messages in thread
From: Bean Huo 霍斌斌 (beanhuo) @ 2016-03-03 13:39 UTC (permalink / raw)
  To: Yunhui Cui
  Cc: linux-mtd, dwmw2, computersforpeace, han.xu, linux-kernel,
	linux-mtd, linux-arm-kernel, yao.yuan, yunhui.cui

> From: Yunhui Cui <B56489@freescale.com>
> To: <dwmw2@infradead.org>, <computersforpeace@gmail.com>,
> 	<han.xu@freescale.com>
> Cc: <linux-kernel@vger.kernel.org>, <linux-mtd@lists.infradead.org>,
> 	<linux-arm-kernel@lists.infradead.org>, <yao.yuan@nxp.com>, Yunhui
> Cui
> 	<yunhui.cui@nxp.com>
> Subject: [PATCH v3 4/4] mtd: spi-nor: Disable Micron flash HW
> 	protection
> Message-ID: <1456988044-37061-4-git-send-email-B56489@freescale.com>
> Content-Type: text/plain
> 
> From: Yunhui Cui <yunhui.cui@nxp.com>
> 
> For Micron family ,The status register write enable/disable bit, provides
> hardware data protection for the device.
> When the enable/disable bit is set to 1, the status register nonvolatile bits
> become read-only and the WRITE STATUS REGISTER operation will not
> execute.
> 
> Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
> ---
>  drivers/mtd/spi-nor/spi-nor.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
> index ed0c19c..917f814 100644
> --- a/drivers/mtd/spi-nor/spi-nor.c
> +++ b/drivers/mtd/spi-nor/spi-nor.c
> @@ -39,6 +39,7 @@
> 
>  #define SPI_NOR_MAX_ID_LEN	6
>  #define SPI_NOR_MAX_ADDR_WIDTH	4
> +#define SPI_NOR_MICRON_WRITE_ENABLE	0x7f
> 
>  struct flash_info {
>  	char		*name;
> @@ -1238,6 +1239,14 @@ int spi_nor_scan(struct spi_nor *nor, const char
> *name, enum read_mode mode)
>  		write_sr(nor, 0);
>  	}
> 
> +	if (JEDEC_MFR(info) == SNOR_MFR_MICRON) {
> +		ret = read_sr(nor);
> +		ret &= SPI_NOR_MICRON_WRITE_ENABLE;
> +
For Micron the status register write enable/disable bit, its default/factory value is disable.
Can here first check ,then program?
> +		write_enable(nor);
> +		write_sr(nor, ret);
> +	}
> +
>  	if (!mtd->name)
>  		mtd->name = dev_name(dev);
>  	mtd->priv = nor;

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

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

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-03  6:54 [PATCH v3 1/4] mtd:fsl-quadspi:use the property fields of SPI-NOR Yunhui Cui
2016-03-03  6:54 ` [PATCH v3 2/4] mtd: fsl-quadspi: Rename SEQID_QUAD_READ to SEQID_READ Yunhui Cui
2016-03-03  6:54 ` [PATCH v3 3/4] mtd: spi-nor: fsl-quadspi: add fast-read mode support Yunhui Cui
2016-03-03  6:54 ` [PATCH v3 4/4] mtd: spi-nor: Disable Micron flash HW protection Yunhui Cui
2016-03-10  9:24 ` [PATCH v3 1/4] mtd:fsl-quadspi:use the property fields of SPI-NOR Yunhui Cui
2016-03-03 13:39 [PATCH v3 4/4] mtd: spi-nor: Disable Micron flash HW protection Bean Huo 霍斌斌 (beanhuo)
2016-03-18 10:08 ` Yunhui Cui
2016-03-21  2:55   ` Bean Huo 霍斌斌 (beanhuo)
2016-03-21  8:08     ` Yunhui Cui
2016-04-14  3:45     ` Yunhui Cui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®