Patchwork [v5,3/3] mtd: add 4 Toshiba nand chips for the full-id case

login
register
mail settings
Submitter Huang Shijie
Date March 14, 2013, 2:59 a.m.
Message ID <1363229965-13128-4-git-send-email-b32955@freescale.com>
Download mbox | patch
Permalink /patch/227431/
State New
Headers show

Comments

Huang Shijie - March 14, 2013, 2:59 a.m.
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 nand_get_flash_type() scans the full id nands firstly.
If a full-id nand matchs, it will not continue to parse other
non-full-id nand types, else it will continue to parse the non-full-id nands.

Signed-off-by: Huang Shijie <b32955@freescale.com>
---
 drivers/mtd/nand/nand_ids.c |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)
Brian Norris - March 14, 2013, 5:10 a.m.
On Wed, Mar 13, 2013 at 7:59 PM, Huang Shijie <b32955@freescale.com> wrote:
> 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 nand_get_flash_type() scans the full id nands firstly.
> If a full-id nand matchs, it will not continue to parse other
> non-full-id nand types, else it will continue to parse the non-full-id nands.
>
> Signed-off-by: Huang Shijie <b32955@freescale.com>
> ---
>  drivers/mtd/nand/nand_ids.c |   22 ++++++++++++++++++++++
>  1 files changed, 22 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
> index 625bc89..38b8cee 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,27 @@
>   * extended chip ID.
>   */
>  struct nand_flash_dev nand_flash_ids[] = {
> +       /*
> +        * The full-id nands may share the same Device ID with the non-full-id
> +        * nands. In order to distinguish the two type nands, we put the
> +        * full-id nands in the first of the table. So the nand_get_flash_type()
> +        * scans the full id nands firstly. If a full-id nand matchs, it will
> +        * not continue to parse other non-full-id nand types, else it will
> +        * continue to parse the non-full-id nands.
> +        */

There are a few grammar/language issues (nands -> NAND chips, id ->
ID, firstly -> first). Also, I don't think you need to explain the
full search here. I would rewrite this whole paragraph as:

"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, 224},
> +       {"TC58NVG3S0F 8G 3.3V 8-bit",
> +               { .id = {0x98, 0xd3, 0x90, 0x26, 0x76, 0x15, 0x02, 0x08} },
> +                       SZ_4K, SZ_1K, SZ_256K, 0, 232},
> +       {"TC58NVG5D2 32G 3.3V 8-bit",
> +               { .id = {0x98, 0xd7, 0x94, 0x32, 0x76, 0x56, 0x09, 0x00} },
> +                       SZ_8K, SZ_4K, SZ_1M, 0, 640},
> +       {"TC58NVG6D2 64G 3.3V 8-bit",
> +               { .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
> +                       SZ_8K, SZ_8K, SZ_2M, 0, 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),

Brian
Huang Shijie - March 15, 2013, 2:29 a.m.
于 2013年03月14日 01:10, Brian Norris 写道:
> On Wed, Mar 13, 2013 at 7:59 PM, Huang Shijie<b32955@freescale.com>  wrote:
>> 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 nand_get_flash_type() scans the full id nands firstly.
>> If a full-id nand matchs, it will not continue to parse other
>> non-full-id nand types, else it will continue to parse the non-full-id nands.
>>
>> Signed-off-by: Huang Shijie<b32955@freescale.com>
>> ---
>>   drivers/mtd/nand/nand_ids.c |   22 ++++++++++++++++++++++
>>   1 files changed, 22 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
>> index 625bc89..38b8cee 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,27 @@
>>    * extended chip ID.
>>    */
>>   struct nand_flash_dev nand_flash_ids[] = {
>> +       /*
>> +        * The full-id nands may share the same Device ID with the non-full-id
>> +        * nands. In order to distinguish the two type nands, we put the
>> +        * full-id nands in the first of the table. So the nand_get_flash_type()
>> +        * scans the full id nands firstly. If a full-id nand matchs, it will
>> +        * not continue to parse other non-full-id nand types, else it will
>> +        * continue to parse the non-full-id nands.
>> +        */
> There are a few grammar/language issues (nands ->  NAND chips, id ->
> ID, firstly ->  first). Also, I don't think you need to explain the
> full search here. I would rewrite this whole paragraph as:
>
sorry for my poor english.

> "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."
>
thanks. I will use this description.



Huang Shijie
Brian Norris - March 15, 2013, 7:21 a.m.
On 03/14/2013 07:29 PM, Huang Shijie wrote:
> sorry for my poor english.

No need to apologize.

Thanks for braving through the 6 iterations of this! We were going to 
need this eventually anyway. Now that the dust is settling, your v6 is 
looking pretty good. I'll have a closer look later and probably give my 
Acked/Reviewed-by.

Brian

Patch

diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
index 625bc89..38b8cee 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,27 @@ 
  * extended chip ID.
  */
 struct nand_flash_dev nand_flash_ids[] = {
+	/*
+	 * The full-id nands may share the same Device ID with the non-full-id
+	 * nands. In order to distinguish the two type nands, we put the
+	 * full-id nands in the first of the table. So the nand_get_flash_type()
+	 * scans the full id nands firstly. If a full-id nand matchs, it will
+	 * not continue to parse other non-full-id nand types, else it will
+	 * continue to parse the non-full-id nands.
+	 */
+	{"TC58NVG2S0F 4G 3.3V 8-bit",
+		{ .id = {0x98, 0xdc, 0x90, 0x26, 0x76, 0x15, 0x01, 0x08} },
+			SZ_4K, SZ_512, SZ_256K, 0, 224},
+	{"TC58NVG3S0F 8G 3.3V 8-bit",
+		{ .id = {0x98, 0xd3, 0x90, 0x26, 0x76, 0x15, 0x02, 0x08} },
+			SZ_4K, SZ_1K, SZ_256K, 0, 232},
+	{"TC58NVG5D2 32G 3.3V 8-bit",
+		{ .id = {0x98, 0xd7, 0x94, 0x32, 0x76, 0x56, 0x09, 0x00} },
+			SZ_8K, SZ_4K, SZ_1M, 0, 640},
+	{"TC58NVG6D2 64G 3.3V 8-bit",
+		{ .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
+			SZ_8K, SZ_8K, SZ_2M, 0, 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),