linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips
@ 2013-03-15  3:00 Huang Shijie
  2013-03-15  3:00 ` [PATCH v6 1/3] mtd: add new fields to nand_flash_dev{} Huang Shijie
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Huang Shijie @ 2013-03-15  3:00 UTC (permalink / raw)
  To: dwmw2
  Cc: artem.bityutskiy, computersforpeace, linux-mtd, linux-kernel,
	Huang Shijie

As time goes on, we begin to meet the situation that we can not
get enough information from some nand chips's id data.
Take some Toshiba's nand chips for example.
I have 4 Toshiba's nand chips in my hand:
	TC58NVG2S0F, TC58NVG3S0F, TC58NVG5D2, TC58NVG6D2

When we read these chips' datasheets, we will get the geometry of these chips:
	TC58NVG2S0F : 4096 + 224
	TC58NVG3S0F : 4096 + 232
	TC58NVG5D2  : 8192 + 640
	TC58NVG6D2  : 8192 + 640

But we can not parse out the correct oob size for these chips from the id data.
So it is time to add some new fields to the nand_flash_dev{},
and update the detection mechanisms.

v5 --> v6:
	[1] add back the id_len as Brian's suggest.
	[2] use id_len to check the full id nand or not.
	[3] change the new fields oob_size/id_len to "uint16_t" type.
	[4] misc

v4 --> v5:
	[1] remove the id_len field.
	[2] based on Artem "mtd: nand: use more reasonable integer types"
	[3] add more comments.

v3 --> v4:
	[1] rewrite the code based on the latest l2-mtd.
	[2] add the full-id nand in the nand_flash_lds.

v2 --> v3:
	[1] remove the duplicated header.
	[2] remove the field "ecc_len" in nand_flash_dev{}.
	[3] fix some coding style warnings.
	[4] add more comments

Huang Shijie (3):
  mtd: add new fields to nand_flash_dev{}
  mtd: add the support to parse out the full-id nand type
  mtd: add 4 Toshiba nand chips for the full-id case

 drivers/mtd/nand/nand_base.c |   35 ++++++++++++++++++++++++++++++++---
 drivers/mtd/nand/nand_ids.c  |   19 +++++++++++++++++++
 include/linux/mtd/nand.h     |    4 ++++
 3 files changed, 55 insertions(+), 3 deletions(-)



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

* [PATCH v6 1/3] mtd: add new fields to nand_flash_dev{}
  2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
@ 2013-03-15  3:00 ` Huang Shijie
  2013-03-15  3:01 ` [PATCH v6 2/3] mtd: add the support to parse out the full-id nand type Huang Shijie
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Huang Shijie @ 2013-03-15  3:00 UTC (permalink / raw)
  To: dwmw2
  Cc: artem.bityutskiy, computersforpeace, linux-mtd, linux-kernel,
	Huang Shijie

As time goes on, we begin to meet the situation that we can not get enough
information from some nand chips's id data. Take some Toshiba's nand chips
for example. I have 4 Toshiba's nand chips in my hand:
	TC58NVG2S0F, TC58NVG3S0F, TC58NVG5D2, TC58NVG6D2

When we read these chips' datasheets, we will get the geometry of these chips:
	TC58NVG2S0F : 4096 + 224
	TC58NVG3S0F : 4096 + 232
	TC58NVG5D2  : 8192 + 640
	TC58NVG6D2  : 8192 + 640

But we can not parse out the correct oob size for these chips from the id data.

This patch adds some new fields to the nand_flash_dev{}:
  @id_len: the valid length of the id data. See the comments in
           nand_id_has_period()
  @oobsize: the oob size.

Signed-off-by: Huang Shijie <b32955@freescale.com>
---
 include/linux/mtd/nand.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 33516eb..4b87815 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -584,6 +584,8 @@ struct nand_chip {
  * @chipsize: total chip size in MiB
  * @erasesize: eraseblock size in bytes (determined from the extended ID if 0)
  * @options: stores various chip bit options
+ * @id_len: The valid length of the @id.
+ * @oobsize: OOB size
  */
 struct nand_flash_dev {
 	char *name;
@@ -598,6 +600,8 @@ struct nand_flash_dev {
 	unsigned int chipsize;
 	unsigned int erasesize;
 	unsigned int options;
+	uint16_t id_len;
+	uint16_t oobsize;
 };
 
 /**
-- 
1.7.1



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

* [PATCH v6 2/3] mtd: add the support to parse out the full-id nand type
  2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
  2013-03-15  3:00 ` [PATCH v6 1/3] mtd: add new fields to nand_flash_dev{} Huang Shijie
@ 2013-03-15  3:01 ` Huang Shijie
  2013-03-15  3:01 ` [PATCH v6 3/3] mtd: add 4 Toshiba nand chips for the full-id case Huang Shijie
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Huang Shijie @ 2013-03-15  3:01 UTC (permalink / raw)
  To: dwmw2
  Cc: artem.bityutskiy, computersforpeace, linux-mtd, linux-kernel,
	Huang Shijie

When we meet a full-id nand type whose @id_len is not zero, we can use
the find_full_id_nand() to parse out the necessary information for a
nand chip.

If we meet a non full-id nand type, we can handle it in the legacy way.

Signed-off-by: Huang Shijie <b32955@freescale.com>
---
 drivers/mtd/nand/nand_base.c |   35 ++++++++++++++++++++++++++++++++---
 1 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 72eada2..49de9da 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3123,6 +3123,30 @@ static void nand_decode_bbm_options(struct mtd_info *mtd,
 		chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
 }
 
+static inline bool is_full_id_nand(struct nand_flash_dev *type)
+{
+	return type->id_len;
+}
+
+static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+		   struct nand_flash_dev *type, u8 *id_data, int *busw)
+{
+	if (!strncmp(type->id, id_data, type->id_len)) {
+		mtd->writesize = type->pagesize;
+		mtd->erasesize = type->erasesize;
+		mtd->oobsize = type->oobsize;
+
+		chip->cellinfo = id_data[2];
+		chip->chipsize = (uint64_t)type->chipsize << 20;
+		chip->options |= type->options;
+
+		*busw = type->options & NAND_BUSWIDTH_16;
+
+		return true;
+	}
+	return false;
+}
+
 /*
  * Get the flash and manufacturer id and lookup if the type is supported.
  */
@@ -3174,9 +3198,14 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
 	if (!type)
 		type = nand_flash_ids;
 
-	for (; type->name != NULL; type++)
-		if (*dev_id == type->dev_id)
-			break;
+	for (; type->name != NULL; type++) {
+		if (is_full_id_nand(type)) {
+			if (find_full_id_nand(mtd, chip, type, id_data, &busw))
+				goto ident_done;
+		} else if (*dev_id == type->dev_id) {
+				break;
+		}
+	}
 
 	chip->onfi_version = 0;
 	if (!type->name || !type->pagesize) {
-- 
1.7.1



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

* [PATCH v6 3/3] mtd: add 4 Toshiba nand chips for the full-id case
  2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
  2013-03-15  3:00 ` [PATCH v6 1/3] mtd: add new fields to nand_flash_dev{} Huang Shijie
  2013-03-15  3:01 ` [PATCH v6 2/3] mtd: add the support to parse out the full-id nand type Huang Shijie
@ 2013-03-15  3:01 ` Huang Shijie
  2013-03-18  7:34 ` [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Brian Norris
  2013-03-18  8:37 ` Artem Bityutskiy
  4 siblings, 0 replies; 6+ messages in thread
From: Huang Shijie @ 2013-03-15  3:01 UTC (permalink / raw)
  To: dwmw2
  Cc: artem.bityutskiy, computersforpeace, linux-mtd, linux-kernel,
	Huang Shijie

I have 4 Toshiba nand chips which can not be parsed out by the
id data. We can not get the oob size from the id data. So add them
as the full-id nand chips in the first of nand_flash_ids.

The comment for the full-id items is from Brian.

Signed-off-by: Huang Shijie <b32955@freescale.com>
---
 drivers/mtd/nand/nand_ids.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
index 625bc89..1c242cc 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
@@ -10,6 +10,7 @@
  */
 #include <linux/module.h>
 #include <linux/mtd/nand.h>
+#include <linux/sizes.h>
 
 #define LP_OPTIONS NAND_SAMSUNG_LP_OPTIONS
 #define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
@@ -22,6 +23,24 @@
  * extended chip ID.
  */
 struct nand_flash_dev nand_flash_ids[] = {
+	/*
+	 * Some incompatible NAND chips share device ID's and so must be
+	 * listed by full ID. We list them first so that we can easily identify
+	 * the most specific match.
+	 */
+	{"TC58NVG2S0F 4G 3.3V 8-bit",
+		{ .id = {0x98, 0xdc, 0x90, 0x26, 0x76, 0x15, 0x01, 0x08} },
+			SZ_4K, SZ_512, SZ_256K, 0, 8, 224},
+	{"TC58NVG3S0F 8G 3.3V 8-bit",
+		{ .id = {0x98, 0xd3, 0x90, 0x26, 0x76, 0x15, 0x02, 0x08} },
+			SZ_4K, SZ_1K, SZ_256K, 0, 8, 232},
+	{"TC58NVG5D2 32G 3.3V 8-bit",
+		{ .id = {0x98, 0xd7, 0x94, 0x32, 0x76, 0x56, 0x09, 0x00} },
+			SZ_8K, SZ_4K, SZ_1M, 0, 8, 640},
+	{"TC58NVG6D2 64G 3.3V 8-bit",
+		{ .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
+			SZ_8K, SZ_8K, SZ_2M, 0, 8, 640},
+
 	LEGACY_ID_NAND("NAND 4MiB 5V 8-bit",   0x6B, 512, 4, 0x2000, 0),
 	LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE3, 512, 4, 0x2000, 0),
 	LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE5, 512, 4, 0x2000, 0),
-- 
1.7.1



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

* Re: [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips
  2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
                   ` (2 preceding siblings ...)
  2013-03-15  3:01 ` [PATCH v6 3/3] mtd: add 4 Toshiba nand chips for the full-id case Huang Shijie
@ 2013-03-18  7:34 ` Brian Norris
  2013-03-18  8:37 ` Artem Bityutskiy
  4 siblings, 0 replies; 6+ messages in thread
From: Brian Norris @ 2013-03-18  7:34 UTC (permalink / raw)
  To: Huang Shijie; +Cc: dwmw2, artem.bityutskiy, linux-mtd, linux-kernel

On Thu, Mar 14, 2013 at 8:00 PM, Huang Shijie <b32955@freescale.com> wrote:
> As time goes on, we begin to meet the situation that we can not
> get enough information from some nand chips's id data.
> Take some Toshiba's nand chips for example.
> I have 4 Toshiba's nand chips in my hand:
>         TC58NVG2S0F, TC58NVG3S0F, TC58NVG5D2, TC58NVG6D2
>
> When we read these chips' datasheets, we will get the geometry of these chips:
>         TC58NVG2S0F : 4096 + 224
>         TC58NVG3S0F : 4096 + 232
>         TC58NVG5D2  : 8192 + 640
>         TC58NVG6D2  : 8192 + 640
>
> But we can not parse out the correct oob size for these chips from the id data.
> So it is time to add some new fields to the nand_flash_dev{},
> and update the detection mechanisms.
>
> v5 --> v6:
>         [1] add back the id_len as Brian's suggest.
>         [2] use id_len to check the full id nand or not.
>         [3] change the new fields oob_size/id_len to "uint16_t" type.
>         [4] misc
>
> v4 --> v5:
>         [1] remove the id_len field.
>         [2] based on Artem "mtd: nand: use more reasonable integer types"
>         [3] add more comments.
>
> v3 --> v4:
>         [1] rewrite the code based on the latest l2-mtd.
>         [2] add the full-id nand in the nand_flash_lds.
>
> v2 --> v3:
>         [1] remove the duplicated header.
>         [2] remove the field "ecc_len" in nand_flash_dev{}.
>         [3] fix some coding style warnings.
>         [4] add more comments
>
> Huang Shijie (3):
>   mtd: add new fields to nand_flash_dev{}
>   mtd: add the support to parse out the full-id nand type
>   mtd: add 4 Toshiba nand chips for the full-id case
>
>  drivers/mtd/nand/nand_base.c |   35 ++++++++++++++++++++++++++++++++---
>  drivers/mtd/nand/nand_ids.c  |   19 +++++++++++++++++++
>  include/linux/mtd/nand.h     |    4 ++++
>  3 files changed, 55 insertions(+), 3 deletions(-)

Series looks good to me. Thanks Huang!

Reviewed-by: Brian Norris <computersforpeace@gmail.com>

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

* Re: [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips
  2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
                   ` (3 preceding siblings ...)
  2013-03-18  7:34 ` [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Brian Norris
@ 2013-03-18  8:37 ` Artem Bityutskiy
  4 siblings, 0 replies; 6+ messages in thread
From: Artem Bityutskiy @ 2013-03-18  8:37 UTC (permalink / raw)
  To: Huang Shijie; +Cc: dwmw2, computersforpeace, linux-mtd, linux-kernel

On Fri, 2013-03-15 at 11:00 +0800, Huang Shijie wrote:
> As time goes on, we begin to meet the situation that we can not
> get enough information from some nand chips's id data.
> Take some Toshiba's nand chips for example.
> I have 4 Toshiba's nand chips in my hand:
> 	TC58NVG2S0F, TC58NVG3S0F, TC58NVG5D2, TC58NVG6D2

Pushed to l2-mtd.git, thanks!

-- 
Best Regards,
Artem Bityutskiy


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

end of thread, other threads:[~2013-03-18  8:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-15  3:00 [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Huang Shijie
2013-03-15  3:00 ` [PATCH v6 1/3] mtd: add new fields to nand_flash_dev{} Huang Shijie
2013-03-15  3:01 ` [PATCH v6 2/3] mtd: add the support to parse out the full-id nand type Huang Shijie
2013-03-15  3:01 ` [PATCH v6 3/3] mtd: add 4 Toshiba nand chips for the full-id case Huang Shijie
2013-03-18  7:34 ` [PATCH v6 0/3] mtd: use the full-id as the keyword for some nand chips Brian Norris
2013-03-18  8:37 ` Artem Bityutskiy

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).