All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs
@ 2018-09-06 21:30 Marcel Ziswiler
  2018-09-06 21:30 ` [PATCH v2 2/2] mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte Marcel Ziswiler
  2018-09-19 21:24 ` [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Miquel Raynal
  0 siblings, 2 replies; 3+ messages in thread
From: Marcel Ziswiler @ 2018-09-06 21:30 UTC (permalink / raw)
  To: linux-mtd
  Cc: Marcel Ziswiler, Miquel Raynal, linux-kernel, Marek Vasut,
	Brian Norris, Richard Weinberger, David Woodhouse,
	Boris Brezillon

From: Marcel Ziswiler <marcel.ziswiler@toradex.com>

Reorder NAND manufacturer IDs for clarity.

Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>

---

Changes in v2:
- Subject prefix s/nand:/rawnand:/ as well as upper-case: s/nand/NAND/
  and s/id/ID/ in the commit log as suggested by Miquèl.
- Reordering the macro definitions too as suggested by Boris.

 drivers/mtd/nand/raw/nand_ids.c | 20 ++++++++++----------
 include/linux/mtd/rawnand.h     | 28 ++++++++++++++--------------
 2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/drivers/mtd/nand/raw/nand_ids.c b/drivers/mtd/nand/raw/nand_ids.c
index 5423c3bb388e..0851cd86bf19 100644
--- a/drivers/mtd/nand/raw/nand_ids.c
+++ b/drivers/mtd/nand/raw/nand_ids.c
@@ -169,21 +169,21 @@ struct nand_flash_dev nand_flash_ids[] = {
 
 /* Manufacturer IDs */
 static const struct nand_manufacturer nand_manufacturers[] = {
-	{NAND_MFR_TOSHIBA, "Toshiba", &toshiba_nand_manuf_ops},
+	{NAND_MFR_AMD, "AMD/Spansion", &amd_nand_manuf_ops},
+	{NAND_MFR_ATO, "ATO"},
+	{NAND_MFR_EON, "Eon"},
 	{NAND_MFR_ESMT, "ESMT"},
-	{NAND_MFR_SAMSUNG, "Samsung", &samsung_nand_manuf_ops},
 	{NAND_MFR_FUJITSU, "Fujitsu"},
-	{NAND_MFR_NATIONAL, "National"},
-	{NAND_MFR_RENESAS, "Renesas"},
-	{NAND_MFR_STMICRO, "ST Micro"},
 	{NAND_MFR_HYNIX, "Hynix", &hynix_nand_manuf_ops},
-	{NAND_MFR_MICRON, "Micron", &micron_nand_manuf_ops},
-	{NAND_MFR_AMD, "AMD/Spansion", &amd_nand_manuf_ops},
+	{NAND_MFR_INTEL, "Intel"},
 	{NAND_MFR_MACRONIX, "Macronix", &macronix_nand_manuf_ops},
-	{NAND_MFR_EON, "Eon"},
+	{NAND_MFR_MICRON, "Micron", &micron_nand_manuf_ops},
+	{NAND_MFR_NATIONAL, "National"},
+	{NAND_MFR_RENESAS, "Renesas"},
+	{NAND_MFR_SAMSUNG, "Samsung", &samsung_nand_manuf_ops},
 	{NAND_MFR_SANDISK, "SanDisk"},
-	{NAND_MFR_INTEL, "Intel"},
-	{NAND_MFR_ATO, "ATO"},
+	{NAND_MFR_STMICRO, "ST Micro"},
+	{NAND_MFR_TOSHIBA, "Toshiba", &toshiba_nand_manuf_ops},
 	{NAND_MFR_WINBOND, "Winbond"},
 };
 
diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
index efb2345359bb..20516fc28b74 100644
--- a/include/linux/mtd/rawnand.h
+++ b/include/linux/mtd/rawnand.h
@@ -1422,21 +1422,21 @@ static inline void *nand_get_manufacturer_data(struct nand_chip *chip)
 /*
  * NAND Flash Manufacturer ID Codes
  */
-#define NAND_MFR_TOSHIBA	0x98
+#define NAND_MFR_AMD		0x01
+#define NAND_MFR_ATO		0x9b
+#define NAND_MFR_EON		0x92
 #define NAND_MFR_ESMT		0xc8
-#define NAND_MFR_SAMSUNG	0xec
 #define NAND_MFR_FUJITSU	0x04
-#define NAND_MFR_NATIONAL	0x8f
-#define NAND_MFR_RENESAS	0x07
-#define NAND_MFR_STMICRO	0x20
 #define NAND_MFR_HYNIX		0xad
-#define NAND_MFR_MICRON		0x2c
-#define NAND_MFR_AMD		0x01
+#define NAND_MFR_INTEL		0x89
 #define NAND_MFR_MACRONIX	0xc2
-#define NAND_MFR_EON		0x92
+#define NAND_MFR_MICRON		0x2c
+#define NAND_MFR_NATIONAL	0x8f
+#define NAND_MFR_RENESAS	0x07
+#define NAND_MFR_SAMSUNG	0xec
 #define NAND_MFR_SANDISK	0x45
-#define NAND_MFR_INTEL		0x89
-#define NAND_MFR_ATO		0x9b
+#define NAND_MFR_STMICRO	0x20
+#define NAND_MFR_TOSHIBA	0x98
 #define NAND_MFR_WINBOND	0xef
 
 
@@ -1541,12 +1541,12 @@ nand_manufacturer_name(const struct nand_manufacturer *manufacturer)
 
 extern struct nand_flash_dev nand_flash_ids[];
 
-extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops;
-extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;
-extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
-extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
 extern const struct nand_manufacturer_ops amd_nand_manuf_ops;
+extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
 extern const struct nand_manufacturer_ops macronix_nand_manuf_ops;
+extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
+extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;
+extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops;
 
 int nand_create_bbt(struct nand_chip *chip);
 int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);
-- 
2.14.4


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

* [PATCH v2 2/2] mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte
  2018-09-06 21:30 [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Marcel Ziswiler
@ 2018-09-06 21:30 ` Marcel Ziswiler
  2018-09-19 21:24 ` [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Miquel Raynal
  1 sibling, 0 replies; 3+ messages in thread
From: Marcel Ziswiler @ 2018-09-06 21:30 UTC (permalink / raw)
  To: linux-mtd
  Cc: Marcel Ziswiler, Arnd Bergmann, Stefan Agner, linux-kernel,
	Marek Vasut, Dmitry Osipenko, Richard Weinberger,
	David Woodhouse, Greg Kroah-Hartman, Boris Brezillon,
	Miquel Raynal, Brian Norris

From: Marcel Ziswiler <marcel.ziswiler@toradex.com>

This patch enables support to read the ECC level from the NAND flash
using ESMT SLC NAND ID byte 5 information as documented e.g. in the
following data sheet:

https://www.esmt.com.tw/upload/pdf/ESMT/datasheets/F59L1G81LA(2Y).pdf

Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>

---

Changes in v2:
- Also hook the new esmt_nand_manuf_ops to the ESMT entry in the
  nand_manufacturer table as discovered by Boris.
- Also add the Makefile as well as include file changes as required.

 drivers/mtd/nand/raw/Makefile    |  1 +
 drivers/mtd/nand/raw/nand_esmt.c | 46 ++++++++++++++++++++++++++++++++++++++++
 drivers/mtd/nand/raw/nand_ids.c  |  2 +-
 include/linux/mtd/rawnand.h      |  1 +
 4 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 drivers/mtd/nand/raw/nand_esmt.c

diff --git a/drivers/mtd/nand/raw/Makefile b/drivers/mtd/nand/raw/Makefile
index d5a5f9832b88..ecb4d6cde1ee 100644
--- a/drivers/mtd/nand/raw/Makefile
+++ b/drivers/mtd/nand/raw/Makefile
@@ -60,6 +60,7 @@ obj-$(CONFIG_MTD_NAND_TEGRA)		+= tegra_nand.o
 
 nand-objs := nand_base.o nand_bbt.o nand_timings.o nand_ids.o
 nand-objs += nand_amd.o
+nand-objs += nand_esmt.o
 nand-objs += nand_hynix.o
 nand-objs += nand_macronix.o
 nand-objs += nand_micron.o
diff --git a/drivers/mtd/nand/raw/nand_esmt.c b/drivers/mtd/nand/raw/nand_esmt.c
new file mode 100644
index 000000000000..360d351ac043
--- /dev/null
+++ b/drivers/mtd/nand/raw/nand_esmt.c
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018 Toradex AG
+ *
+ * Author: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+ */
+
+#include <linux/mtd/rawnand.h>
+
+static void esmt_nand_decode_id(struct nand_chip *chip)
+{
+	nand_decode_ext_id(chip);
+
+	/* Extract ECC requirements from 5th id byte. */
+	if (chip->id.len >= 5 && nand_is_slc(chip)) {
+		chip->ecc_step_ds = 512;
+		switch (chip->id.data[4] & 0x3) {
+		case 0x0:
+			chip->ecc_strength_ds = 4;
+			break;
+		case 0x1:
+			chip->ecc_strength_ds = 2;
+			break;
+		case 0x2:
+			chip->ecc_strength_ds = 1;
+			break;
+		default:
+			WARN(1, "Could not get ECC info");
+			chip->ecc_step_ds = 0;
+			break;
+		}
+	}
+}
+
+static int esmt_nand_init(struct nand_chip *chip)
+{
+	if (nand_is_slc(chip))
+		chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
+
+	return 0;
+}
+
+const struct nand_manufacturer_ops esmt_nand_manuf_ops = {
+	.detect = esmt_nand_decode_id,
+	.init = esmt_nand_init,
+};
diff --git a/drivers/mtd/nand/raw/nand_ids.c b/drivers/mtd/nand/raw/nand_ids.c
index 0851cd86bf19..f904f8b987e3 100644
--- a/drivers/mtd/nand/raw/nand_ids.c
+++ b/drivers/mtd/nand/raw/nand_ids.c
@@ -172,7 +172,7 @@ static const struct nand_manufacturer nand_manufacturers[] = {
 	{NAND_MFR_AMD, "AMD/Spansion", &amd_nand_manuf_ops},
 	{NAND_MFR_ATO, "ATO"},
 	{NAND_MFR_EON, "Eon"},
-	{NAND_MFR_ESMT, "ESMT"},
+	{NAND_MFR_ESMT, "ESMT", &esmt_nand_manuf_ops},
 	{NAND_MFR_FUJITSU, "Fujitsu"},
 	{NAND_MFR_HYNIX, "Hynix", &hynix_nand_manuf_ops},
 	{NAND_MFR_INTEL, "Intel"},
diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
index 20516fc28b74..c4656e3eeba1 100644
--- a/include/linux/mtd/rawnand.h
+++ b/include/linux/mtd/rawnand.h
@@ -1542,6 +1542,7 @@ nand_manufacturer_name(const struct nand_manufacturer *manufacturer)
 extern struct nand_flash_dev nand_flash_ids[];
 
 extern const struct nand_manufacturer_ops amd_nand_manuf_ops;
+extern const struct nand_manufacturer_ops esmt_nand_manuf_ops;
 extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
 extern const struct nand_manufacturer_ops macronix_nand_manuf_ops;
 extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
-- 
2.14.4


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

* Re: [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs
  2018-09-06 21:30 [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Marcel Ziswiler
  2018-09-06 21:30 ` [PATCH v2 2/2] mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte Marcel Ziswiler
@ 2018-09-19 21:24 ` Miquel Raynal
  1 sibling, 0 replies; 3+ messages in thread
From: Miquel Raynal @ 2018-09-19 21:24 UTC (permalink / raw)
  To: Marcel Ziswiler
  Cc: linux-mtd, Marcel Ziswiler, linux-kernel, Marek Vasut,
	Brian Norris, Richard Weinberger, David Woodhouse,
	Boris Brezillon

Hi Marcel,

Marcel Ziswiler <marcel@ziswiler.com> wrote on Thu,  6 Sep 2018
23:30:19 +0200:

> From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> 
> Reorder NAND manufacturer IDs for clarity.
> 
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> 
> ---

Applied both on nand/next after rebase on top of Boris' recent cleanup.

Thanks,
Miquèl

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

end of thread, other threads:[~2018-09-19 21:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-06 21:30 [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Marcel Ziswiler
2018-09-06 21:30 ` [PATCH v2 2/2] mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte Marcel Ziswiler
2018-09-19 21:24 ` [PATCH v2 1/2] mtd: rawnand: reorder NAND manufacturer IDs Miquel Raynal

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.