All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
@ 2018-08-16 16:05 Stefan Roese
  2018-08-17  8:45 ` Miquel Raynal
  2018-10-04 12:55 ` Jagan Teki
  0 siblings, 2 replies; 7+ messages in thread
From: Stefan Roese @ 2018-08-16 16:05 UTC (permalink / raw)
  To: u-boot

This patch adds support for Gigadevices SPI NAND device to the new SPI
NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
device is supported.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Boris Brezillon <boris.brezillon@bootlin.com>
Cc: Jagan Teki <jagan@openedev.com>
---
Miquel, I somehow always forgot to send this Gigadevice support
patch in my last series versions. This is the chip I'm currently
testing with. Either please fold it into your series, if you
re-send it at a later time. Or we should add it on top. Of course
only if nobody has any objections or change requests.

Thanks,
Stefan

 drivers/mtd/nand/spi/Makefile     |   2 +-
 drivers/mtd/nand/spi/core.c       |   1 +
 drivers/mtd/nand/spi/gigadevice.c | 135 ++++++++++++++++++++++++++++++
 include/linux/mtd/spinand.h       |   1 +
 4 files changed, 138 insertions(+), 1 deletion(-)
 create mode 100644 drivers/mtd/nand/spi/gigadevice.c

diff --git a/drivers/mtd/nand/spi/Makefile b/drivers/mtd/nand/spi/Makefile
index a66edd9199..dd6bacae34 100644
--- a/drivers/mtd/nand/spi/Makefile
+++ b/drivers/mtd/nand/spi/Makefile
@@ -1,4 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
 
-spinand-objs := core.o macronix.o micron.o winbond.o
+spinand-objs := core.o gigadevice.o macronix.o micron.o winbond.o
 obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 362d104846..cb8ffa3fa9 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -830,6 +830,7 @@ static const struct nand_ops spinand_ops = {
 };
 
 static const struct spinand_manufacturer *spinand_manufacturers[] = {
+	&gigadevice_spinand_manufacturer,
 	&macronix_spinand_manufacturer,
 	&micron_spinand_manufacturer,
 	&winbond_spinand_manufacturer,
diff --git a/drivers/mtd/nand/spi/gigadevice.c b/drivers/mtd/nand/spi/gigadevice.c
new file mode 100644
index 0000000000..0bade20808
--- /dev/null
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018 Stefan Roese <sr@denx.de>
+ *
+ * Derived from drivers/mtd/nand/spi/micron.c
+ *   Copyright (c) 2016-2017 Micron Technology, Inc.
+ */
+
+#ifndef __UBOOT__
+#include <linux/device.h>
+#include <linux/kernel.h>
+#endif
+#include <linux/mtd/spinand.h>
+
+#define SPINAND_MFR_GIGADEVICE			0xc8
+
+#define GIGADEVICE_STATUS_ECC_MASK		GENMASK(5, 4)
+#define GIGADEVICE_STATUS_ECC_NO_BITFLIPS	(0 << 4)
+#define GIGADEVICE_STATUS_ECC_1TO7_BITFLIPS	(1 << 4)
+#define GIGADEVICE_STATUS_ECC_8_BITFLIPS	(3 << 4)
+
+static SPINAND_OP_VARIANTS(read_cache_variants,
+		SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
+		SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+		SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
+		SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
+		SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+		SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
+static SPINAND_OP_VARIANTS(write_cache_variants,
+		SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+		SPINAND_PROG_LOAD(true, 0, NULL, 0));
+
+static SPINAND_OP_VARIANTS(update_cache_variants,
+		SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+		SPINAND_PROG_LOAD(false, 0, NULL, 0));
+
+static int gd5f1gq4u_ooblayout_ecc(struct mtd_info *mtd, int section,
+				   struct mtd_oob_region *region)
+{
+	if (section)
+		return -ERANGE;
+
+	region->offset = 64;
+	region->length = 64;
+
+	return 0;
+}
+
+static int gd5f1gq4u_ooblayout_free(struct mtd_info *mtd, int section,
+				    struct mtd_oob_region *region)
+{
+	if (section)
+		return -ERANGE;
+
+	/* Reserve 2 bytes for the BBM. */
+	region->offset = 2;
+	region->length = 62;
+
+	return 0;
+}
+
+static const struct mtd_ooblayout_ops gd5f1gq4u_ooblayout = {
+	.ecc = gd5f1gq4u_ooblayout_ecc,
+	.free = gd5f1gq4u_ooblayout_free,
+};
+
+static int gd5f1gq4u_ecc_get_status(struct spinand_device *spinand,
+				    u8 status)
+{
+	if (status)
+		debug("%s (%d): status=%02x\n", __func__, __LINE__, status);
+
+	switch (status & GIGADEVICE_STATUS_ECC_MASK) {
+	case STATUS_ECC_NO_BITFLIPS:
+		return 0;
+
+	case GIGADEVICE_STATUS_ECC_1TO7_BITFLIPS:
+		return 7;
+
+	case GIGADEVICE_STATUS_ECC_8_BITFLIPS:
+		return 8;
+
+	case STATUS_ECC_UNCOR_ERROR:
+		return -EBADMSG;
+
+	default:
+		break;
+	}
+
+	return -EINVAL;
+}
+
+static const struct spinand_info gigadevice_spinand_table[] = {
+	SPINAND_INFO("GD5F1GQ4UC", 0xd1,
+		     NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
+		     NAND_ECCREQ(8, 2048),
+		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+					      &write_cache_variants,
+					      &update_cache_variants),
+		     0,
+		     SPINAND_ECCINFO(&gd5f1gq4u_ooblayout,
+				     gd5f1gq4u_ecc_get_status)),
+};
+
+static int gigadevice_spinand_detect(struct spinand_device *spinand)
+{
+	u8 *id = spinand->id.data;
+	int ret;
+
+	/*
+	 * Gigadevice SPI NAND read ID need a dummy byte,
+	 * so the first byte in raw_id is dummy.
+	 */
+	if (id[1] != SPINAND_MFR_GIGADEVICE)
+		return 0;
+
+	ret = spinand_match_and_init(spinand, gigadevice_spinand_table,
+				     ARRAY_SIZE(gigadevice_spinand_table),
+				     id[2]);
+	if (ret)
+		return ret;
+
+	return 1;
+}
+
+static const struct spinand_manufacturer_ops gigadevice_spinand_manuf_ops = {
+	.detect = gigadevice_spinand_detect,
+};
+
+const struct spinand_manufacturer gigadevice_spinand_manufacturer = {
+	.id = SPINAND_MFR_GIGADEVICE,
+	.name = "GigaDevice",
+	.ops = &gigadevice_spinand_manuf_ops,
+};
diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h
index 8c9c756179..be01e1e82e 100644
--- a/include/linux/mtd/spinand.h
+++ b/include/linux/mtd/spinand.h
@@ -201,6 +201,7 @@ struct spinand_manufacturer {
 };
 
 /* SPI NAND manufacturers */
+extern const struct spinand_manufacturer gigadevice_spinand_manufacturer;
 extern const struct spinand_manufacturer macronix_spinand_manufacturer;
 extern const struct spinand_manufacturer micron_spinand_manufacturer;
 extern const struct spinand_manufacturer winbond_spinand_manufacturer;
-- 
2.18.0

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-08-16 16:05 [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support Stefan Roese
@ 2018-08-17  8:45 ` Miquel Raynal
  2018-08-17  9:10   ` Stefan Roese
  2018-10-04 12:55 ` Jagan Teki
  1 sibling, 1 reply; 7+ messages in thread
From: Miquel Raynal @ 2018-08-17  8:45 UTC (permalink / raw)
  To: u-boot

Hi Stefan,

Stefan Roese <sr@denx.de> wrote on Thu, 16 Aug 2018 18:05:08 +0200:

> This patch adds support for Gigadevices SPI NAND device to the new SPI
> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
> device is supported.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
> Cc: Jagan Teki <jagan@openedev.com>
> ---
> Miquel, I somehow always forgot to send this Gigadevice support
> patch in my last series versions. This is the chip I'm currently
> testing with. Either please fold it into your series, if you
> re-send it at a later time. Or we should add it on top. Of course
> only if nobody has any objections or change requests.

No problem, as I don't wan't to resend another series of 30+ patches I
just asked Jagan/Tom if they could take them (up to patch 23 included),
so this one could be applied on top of it, alone.

Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>

BTW, I see #ifndef __UBOOT__ but I don't think it has been contributed
to Linux yet, do you plan to do it?

Thanks,
Miquèl

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-08-17  8:45 ` Miquel Raynal
@ 2018-08-17  9:10   ` Stefan Roese
  2018-10-04  8:03     ` Stefan Roese
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Roese @ 2018-08-17  9:10 UTC (permalink / raw)
  To: u-boot

Hi Miquel,

On 17.08.2018 10:45, Miquel Raynal wrote:
> Stefan Roese <sr@denx.de> wrote on Thu, 16 Aug 2018 18:05:08 +0200:
> 
>> This patch adds support for Gigadevices SPI NAND device to the new SPI
>> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
>> device is supported.
>>
>> Signed-off-by: Stefan Roese <sr@denx.de>
>> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
>> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
>> Cc: Jagan Teki <jagan@openedev.com>
>> ---
>> Miquel, I somehow always forgot to send this Gigadevice support
>> patch in my last series versions. This is the chip I'm currently
>> testing with. Either please fold it into your series, if you
>> re-send it at a later time. Or we should add it on top. Of course
>> only if nobody has any objections or change requests.
> 
> No problem, as I don't wan't to resend another series of 30+ patches I
> just asked Jagan/Tom if they could take them (up to patch 23 included),
> so this one could be applied on top of it, alone.
> 
> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>

Thanks.

> BTW, I see #ifndef __UBOOT__ but I don't think it has been contributed
> to Linux yet, do you plan to do it?

Ah, yes. That ifdef if from a copy-and-paste. Its not been used in Linux
yet (we are still on some older OpenWRT branch that uses an older SPI
NAND infrastructure). But the plan is to move to the new IF soon and
we will definitely push this SPI NAND chip support into mainline.

Thanks,
Stefan

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-08-17  9:10   ` Stefan Roese
@ 2018-10-04  8:03     ` Stefan Roese
  2018-10-04  8:41       ` Miquel Raynal
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Roese @ 2018-10-04  8:03 UTC (permalink / raw)
  To: u-boot

Hi Jagan,

On 17.08.2018 11:10, Stefan Roese wrote:
> Hi Miquel,
> 
> On 17.08.2018 10:45, Miquel Raynal wrote:
>> Stefan Roese <sr@denx.de> wrote on Thu, 16 Aug 2018 18:05:08 +0200:
>>
>>> This patch adds support for Gigadevices SPI NAND device to the new SPI
>>> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
>>> device is supported.
>>>
>>> Signed-off-by: Stefan Roese <sr@denx.de>
>>> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
>>> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
>>> Cc: Jagan Teki <jagan@openedev.com>
>>> ---
>>> Miquel, I somehow always forgot to send this Gigadevice support
>>> patch in my last series versions. This is the chip I'm currently
>>> testing with. Either please fold it into your series, if you
>>> re-send it at a later time. Or we should add it on top. Of course
>>> only if nobody has any objections or change requests.
>>
>> No problem, as I don't wan't to resend another series of 30+ patches I
>> just asked Jagan/Tom if they could take them (up to patch 23 included),
>> so this one could be applied on top of it, alone.
>>
>> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> 
> Thanks.

Could you please add to your upstream queue as well?

Thanks,
Stefan

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-10-04  8:03     ` Stefan Roese
@ 2018-10-04  8:41       ` Miquel Raynal
  2018-10-04  8:44         ` Stefan Roese
  0 siblings, 1 reply; 7+ messages in thread
From: Miquel Raynal @ 2018-10-04  8:41 UTC (permalink / raw)
  To: u-boot

Hi Stefan,

Stefan Roese <sr@denx.de> wrote on Thu, 4 Oct 2018 10:03:54 +0200:

> Hi Jagan,
> 
> On 17.08.2018 11:10, Stefan Roese wrote:
> > Hi Miquel,  
> > > On 17.08.2018 10:45, Miquel Raynal wrote:
> >> Stefan Roese <sr@denx.de> wrote on Thu, 16 Aug 2018 18:05:08 +0200:
> >>  
> >>> This patch adds support for Gigadevices SPI NAND device to the new SPI
> >>> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
> >>> device is supported.
> >>>
> >>> Signed-off-by: Stefan Roese <sr@denx.de>
> >>> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> >>> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
> >>> Cc: Jagan Teki <jagan@openedev.com>
> >>> ---
> >>> Miquel, I somehow always forgot to send this Gigadevice support
> >>> patch in my last series versions. This is the chip I'm currently
> >>> testing with. Either please fold it into your series, if you
> >>> re-send it at a later time. Or we should add it on top. Of course
> >>> only if nobody has any objections or change requests.  
> >>
> >> No problem, as I don't wan't to resend another series of 30+ patches I
> >> just asked Jagan/Tom if they could take them (up to patch 23 included),
> >> so this one could be applied on top of it, alone.
> >>
> >> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > Thanks.  
> 
> Could you please add to your upstream queue as well?

Indeed, I completely forgot about this patch, I should have warned
Jagan about it, sorry for forgetting.

BTW, someone did raise a bug with a raw nand device and the mtd
command, did you have a chance to test it with such device? For now I
just have a SPI-NAND and a parallel NOR to play with. I'll build
another setup to test also parallel NANDs, but while on it...


Thanks,
Miquèl

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-10-04  8:41       ` Miquel Raynal
@ 2018-10-04  8:44         ` Stefan Roese
  0 siblings, 0 replies; 7+ messages in thread
From: Stefan Roese @ 2018-10-04  8:44 UTC (permalink / raw)
  To: u-boot

Hi Miquel,

On 04.10.2018 10:41, Miquel Raynal wrote:
> Hi Stefan,
> 
> Stefan Roese <sr@denx.de> wrote on Thu, 4 Oct 2018 10:03:54 +0200:
> 
>> Hi Jagan,
>>
>> On 17.08.2018 11:10, Stefan Roese wrote:
>>> Hi Miquel,
>>>> On 17.08.2018 10:45, Miquel Raynal wrote:
>>>> Stefan Roese <sr@denx.de> wrote on Thu, 16 Aug 2018 18:05:08 +0200:
>>>>   
>>>>> This patch adds support for Gigadevices SPI NAND device to the new SPI
>>>>> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
>>>>> device is supported.
>>>>>
>>>>> Signed-off-by: Stefan Roese <sr@denx.de>
>>>>> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
>>>>> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
>>>>> Cc: Jagan Teki <jagan@openedev.com>
>>>>> ---
>>>>> Miquel, I somehow always forgot to send this Gigadevice support
>>>>> patch in my last series versions. This is the chip I'm currently
>>>>> testing with. Either please fold it into your series, if you
>>>>> re-send it at a later time. Or we should add it on top. Of course
>>>>> only if nobody has any objections or change requests.
>>>>
>>>> No problem, as I don't wan't to resend another series of 30+ patches I
>>>> just asked Jagan/Tom if they could take them (up to patch 23 included),
>>>> so this one could be applied on top of it, alone.
>>>>
>>>> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
>>>> Thanks.
>>
>> Could you please add to your upstream queue as well?
> 
> Indeed, I completely forgot about this patch, I should have warned
> Jagan about it, sorry for forgetting.
> 
> BTW, someone did raise a bug with a raw nand device and the mtd
> command, did you have a chance to test it with such device?

No, not yet, sorry. My current platforms only have SPI NOR and
SPI NAND.

> For now I
> just have a SPI-NAND and a parallel NOR to play with. I'll build
> another setup to test also parallel NANDs, but while on it...

Once I have such a platform on my desk (again), I'll definitely
will test it with the mtd command.

Thanks,
Stefan

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

* [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support
  2018-08-16 16:05 [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support Stefan Roese
  2018-08-17  8:45 ` Miquel Raynal
@ 2018-10-04 12:55 ` Jagan Teki
  1 sibling, 0 replies; 7+ messages in thread
From: Jagan Teki @ 2018-10-04 12:55 UTC (permalink / raw)
  To: u-boot

On Thu, Aug 16, 2018 at 9:35 PM Stefan Roese <sr@denx.de> wrote:
>
> This patch adds support for Gigadevices SPI NAND device to the new SPI
> NAND infrastructure in U-Boot. Currently only the 128MiB GD5F1GQ4UC
> device is supported.
>
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Boris Brezillon <boris.brezillon@bootlin.com>
> Cc: Jagan Teki <jagan@openedev.com>

Applied to u-boot-spi/master

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

end of thread, other threads:[~2018-10-04 12:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-16 16:05 [U-Boot] [PATCH] mtd: nand: spi: Add Gigadevice SPI NAND support Stefan Roese
2018-08-17  8:45 ` Miquel Raynal
2018-08-17  9:10   ` Stefan Roese
2018-10-04  8:03     ` Stefan Roese
2018-10-04  8:41       ` Miquel Raynal
2018-10-04  8:44         ` Stefan Roese
2018-10-04 12:55 ` Jagan Teki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.