Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-25 Thread Miquel Raynal
Hi Yoshio,

Yoshio Furuyama  wrote on Wed, 16
Jan 2019 14:53:19 +0900:

> Add device table for Toshiba Memory products.
> Also, generalize OOB layout structure and function names.
> 
> Signed-off-by: Yoshio Furuyama 
> 
> ---

Applied to nand/next with the mathematical operations enclosed in
braces as discussed:

-   region->length = mtd->oobsize / 2 - 2;  
+   region->length = (mtd->oobsize / 2) - 2;  


Thanks,
Miquèl


Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-17 Thread posting test

Hi Schrempf, Miquel,

Thanks a lot.


On 2019年01月16日 21:58, Schrempf Frieder wrote:

On 16.01.19 06:53, Yoshio Furuyama wrote:

Add device table for Toshiba Memory products.
Also, generalize OOB layout structure and function names.

Signed-off-by: Yoshio Furuyama 

Reviewed-by: Frieder Schrempf 


---
   drivers/mtd/nand/spi/toshiba.c |   79 
+---
   1 file changed, 65 insertions(+), 14 deletions(-)

diff --git a/drivers/mtd/nand/spi/toshiba.c b/drivers/mtd/nand/spi/toshiba.c
index 0812655..0916962 100644
--- a/drivers/mtd/nand/spi/toshiba.c
+++ b/drivers/mtd/nand/spi/toshiba.c
@@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
   static SPINAND_OP_VARIANTS(update_cache_variants,
SPINAND_PROG_LOAD(false, 0, NULL, 0));
   
-static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,

+static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
 struct mtd_oob_region *region)
   {
-   if (section > 7)
+   if (section > 0)
return -ERANGE;
   
-	region->offset = 128 + 16 * section;

-   region->length = 16;
+   region->offset = mtd->oobsize / 2;
+   region->length = mtd->oobsize / 2;
   
   	return 0;

   }
   
-static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,

+static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
  struct mtd_oob_region *region)
   {
if (section > 0)
@@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, 
int section,
   
   	/* 2 bytes reserved for BBM */

region->offset = 2;
-   region->length = 126;
+   region->length = mtd->oobsize / 2 - 2;
   
   	return 0;

   }
   
-static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = {

-   .ecc = tc58cvg2s0h_ooblayout_ecc,
-   .free = tc58cvg2s0h_ooblayout_free,
+static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = {
+   .ecc = tc58cxgxsx_ooblayout_ecc,
+   .free = tc58cxgxsx_ooblayout_free,
   };
   
-static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand,

+static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand,
  u8 status)
   {
struct nand_device *nand = spinand_to_nand(spinand);
@@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(struct spinand_device 
*spinand,
   }
   
   static const struct spinand_info toshiba_spinand_table[] = {

-   SPINAND_INFO("TC58CVG2S0H", 0xCD,
+   /* 3.3V 1Gb */
+   SPINAND_INFO("TC58CVG0S3", 0xC2,
+NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 3.3V 2Gb */
+   SPINAND_INFO("TC58CVG1S3", 0xCB,
+NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 3.3V 4Gb */
+   SPINAND_INFO("TC58CVG2S0", 0xCD,
+NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 1.8V 1Gb */
+   SPINAND_INFO("TC58CYG0S3", 0xB2,
+NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 1.8V 2Gb */
+   SPINAND_INFO("TC58CYG1S3", 0xBB,
+NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+

Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-16 Thread Schrempf Frieder
On 16.01.19 06:53, Yoshio Furuyama wrote:
> Add device table for Toshiba Memory products.
> Also, generalize OOB layout structure and function names.
> 
> Signed-off-by: Yoshio Furuyama 

Reviewed-by: Frieder Schrempf 

> 
> ---
>   drivers/mtd/nand/spi/toshiba.c |   79 
> +---
>   1 file changed, 65 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mtd/nand/spi/toshiba.c b/drivers/mtd/nand/spi/toshiba.c
> index 0812655..0916962 100644
> --- a/drivers/mtd/nand/spi/toshiba.c
> +++ b/drivers/mtd/nand/spi/toshiba.c
> @@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
>   static SPINAND_OP_VARIANTS(update_cache_variants,
>   SPINAND_PROG_LOAD(false, 0, NULL, 0));
>   
> -static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
>struct mtd_oob_region *region)
>   {
> - if (section > 7)
> + if (section > 0)
>   return -ERANGE;
>   
> - region->offset = 128 + 16 * section;
> - region->length = 16;
> + region->offset = mtd->oobsize / 2;
> + region->length = mtd->oobsize / 2;
>   
>   return 0;
>   }
>   
> -static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
> struct mtd_oob_region *region)
>   {
>   if (section > 0)
> @@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct mtd_info 
> *mtd, int section,
>   
>   /* 2 bytes reserved for BBM */
>   region->offset = 2;
> - region->length = 126;
> + region->length = mtd->oobsize / 2 - 2;
>   
>   return 0;
>   }
>   
> -static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = {
> - .ecc = tc58cvg2s0h_ooblayout_ecc,
> - .free = tc58cvg2s0h_ooblayout_free,
> +static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = {
> + .ecc = tc58cxgxsx_ooblayout_ecc,
> + .free = tc58cxgxsx_ooblayout_free,
>   };
>   
> -static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand,
> +static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand,
> u8 status)
>   {
>   struct nand_device *nand = spinand_to_nand(spinand);
> @@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(struct 
> spinand_device *spinand,
>   }
>   
>   static const struct spinand_info toshiba_spinand_table[] = {
> - SPINAND_INFO("TC58CVG2S0H", 0xCD,
> + /* 3.3V 1Gb */
> + SPINAND_INFO("TC58CVG0S3", 0xC2,
> +  NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 3.3V 2Gb */
> + SPINAND_INFO("TC58CVG1S3", 0xCB,
> +  NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 3.3V 4Gb */
> + SPINAND_INFO("TC58CVG2S0", 0xCD,
> +  NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 1.8V 1Gb */
> + SPINAND_INFO("TC58CYG0S3", 0xB2,
> +  NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 1.8V 2Gb */
> + SPINAND_INFO("TC58CYG1S3", 0xBB,
> +  NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  

Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-16 Thread Schrempf Frieder
On 16.01.19 11:42, Frieder Schrempf wrote:
> Hi Yoshio,
> 
> On 16.01.19 06:53, Yoshio Furuyama wrote:
>> Add device table for Toshiba Memory products.
>> Also, generalize OOB layout structure and function names.
>>
>> Signed-off-by: Yoshio Furuyama 
>>
>> ---
>>   drivers/mtd/nand/spi/toshiba.c |   79 
>> +---
>>   1 file changed, 65 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/mtd/nand/spi/toshiba.c 
>> b/drivers/mtd/nand/spi/toshiba.c
>> index 0812655..0916962 100644
>> --- a/drivers/mtd/nand/spi/toshiba.c
>> +++ b/drivers/mtd/nand/spi/toshiba.c
>> @@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
>>   static SPINAND_OP_VARIANTS(update_cache_variants,
>>   SPINAND_PROG_LOAD(false, 0, NULL, 0));
>> -static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,
>> +static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
>>    struct mtd_oob_region *region)
>>   {
>> -    if (section > 7)
>> +    if (section > 0)
>>   return -ERANGE;
>> -    region->offset = 128 + 16 * section;
>> -    region->length = 16;
>> +    region->offset = mtd->oobsize / 2;
>> +    region->length = mtd->oobsize / 2;
>>   return 0;
>>   }
>> -static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,
>> +static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
>>     struct mtd_oob_region *region)
>>   {
>>   if (section > 0)
>> @@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct 
>> mtd_info *mtd, int section,
>>   /* 2 bytes reserved for BBM */
>>   region->offset = 2;
>> -    region->length = 126;
>> +    region->length = mtd->oobsize / 2 - 2;
>>   return 0;
>>   }
>> -static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = {
>> -    .ecc = tc58cvg2s0h_ooblayout_ecc,
>> -    .free = tc58cvg2s0h_ooblayout_free,
>> +static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = {
>> +    .ecc = tc58cxgxsx_ooblayout_ecc,
>> +    .free = tc58cxgxsx_ooblayout_free,
>>   };
>> -static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand,
>> +static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand,
>>     u8 status)
>>   {
>>   struct nand_device *nand = spinand_to_nand(spinand);
>> @@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(struct 
>> spinand_device *spinand,
>>   }
>>   static const struct spinand_info toshiba_spinand_table[] = {
>> -    SPINAND_INFO("TC58CVG2S0H", 0xCD,
>> +    /* 3.3V 1Gb */
>> +    SPINAND_INFO("TC58CVG0S3", 0xC2,
>> + NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
>> + NAND_ECCREQ(8, 512),
>> + SPINAND_INFO_OP_VARIANTS(_cache_variants,
>> +  _cache_variants,
>> +  _cache_variants),
>> + 0,
>> + SPINAND_ECCINFO(_ooblayout,
>> + tc58cxgxsx_ecc_get_status)),
>> +    /* 3.3V 2Gb */
>> +    SPINAND_INFO("TC58CVG1S3", 0xCB,
>> + NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
>> + NAND_ECCREQ(8, 512),
>> + SPINAND_INFO_OP_VARIANTS(_cache_variants,
>> +  _cache_variants,
>> +  _cache_variants),
>> + 0,
>> + SPINAND_ECCINFO(_ooblayout,
>> + tc58cxgxsx_ecc_get_status)),
>> +    /* 3.3V 4Gb */
>> +    SPINAND_INFO("TC58CVG2S0", 0xCD,
>> + NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
>> + NAND_ECCREQ(8, 512),
>> + SPINAND_INFO_OP_VARIANTS(_cache_variants,
>> +  _cache_variants,
>> +  _cache_variants),
>> + 0,
>> + SPINAND_ECCINFO(_ooblayout,
>> + tc58cxgxsx_ecc_get_status)),
>> +    /* 1.8V 1Gb */
>> +    SPINAND_INFO("TC58CYG0S3", 0xB2,
>> + NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
>> + NAND_ECCREQ(8, 512),
>> + SPINAND_INFO_OP_VARIANTS(_cache_variants,
>> +  _cache_variants,
>> +  _cache_variants),
>> + 0,
>> + SPINAND_ECCINFO(_ooblayout,
>> + tc58cxgxsx_ecc_get_status)),
>> +    /* 1.8V 2Gb */
>> +    SPINAND_INFO("TC58CYG1S3", 0xBB,
>> + NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
>> + NAND_ECCREQ(8, 512),
>> + SPINAND_INFO_OP_VARIANTS(_cache_variants,
>> +  _cache_variants,
>> +  _cache_variants),
>> + 0,
>> + SPINAND_ECCINFO(_ooblayout,
>> + tc58cxgxsx_ecc_get_status)),
>> +    /* 1.8V 4Gb */
>> +    SPINAND_INFO("TC58CYG2S0", 0xBD,
>>    NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
>>    NAND_ECCREQ(8, 512),
>>    SPINAND_INFO_OP_VARIANTS(_cache_variants,
>>  

Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-16 Thread Schrempf Frieder
Hi Yoshio,

On 16.01.19 06:53, Yoshio Furuyama wrote:
> Add device table for Toshiba Memory products.
> Also, generalize OOB layout structure and function names.
> 
> Signed-off-by: Yoshio Furuyama 
> 
> ---
>   drivers/mtd/nand/spi/toshiba.c |   79 
> +---
>   1 file changed, 65 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mtd/nand/spi/toshiba.c b/drivers/mtd/nand/spi/toshiba.c
> index 0812655..0916962 100644
> --- a/drivers/mtd/nand/spi/toshiba.c
> +++ b/drivers/mtd/nand/spi/toshiba.c
> @@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
>   static SPINAND_OP_VARIANTS(update_cache_variants,
>   SPINAND_PROG_LOAD(false, 0, NULL, 0));
>   
> -static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
>struct mtd_oob_region *region)
>   {
> - if (section > 7)
> + if (section > 0)
>   return -ERANGE;
>   
> - region->offset = 128 + 16 * section;
> - region->length = 16;
> + region->offset = mtd->oobsize / 2;
> + region->length = mtd->oobsize / 2;
>   
>   return 0;
>   }
>   
> -static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
> struct mtd_oob_region *region)
>   {
>   if (section > 0)
> @@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct mtd_info 
> *mtd, int section,
>   
>   /* 2 bytes reserved for BBM */
>   region->offset = 2;
> - region->length = 126;
> + region->length = mtd->oobsize / 2 - 2;
>   
>   return 0;
>   }
>   
> -static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = {
> - .ecc = tc58cvg2s0h_ooblayout_ecc,
> - .free = tc58cvg2s0h_ooblayout_free,
> +static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = {
> + .ecc = tc58cxgxsx_ooblayout_ecc,
> + .free = tc58cxgxsx_ooblayout_free,
>   };
>   
> -static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand,
> +static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand,
> u8 status)
>   {
>   struct nand_device *nand = spinand_to_nand(spinand);
> @@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(struct 
> spinand_device *spinand,
>   }
>   
>   static const struct spinand_info toshiba_spinand_table[] = {
> - SPINAND_INFO("TC58CVG2S0H", 0xCD,
> + /* 3.3V 1Gb */
> + SPINAND_INFO("TC58CVG0S3", 0xC2,
> +  NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 3.3V 2Gb */
> + SPINAND_INFO("TC58CVG1S3", 0xCB,
> +  NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 3.3V 4Gb */
> + SPINAND_INFO("TC58CVG2S0", 0xCD,
> +  NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 1.8V 1Gb */
> + SPINAND_INFO("TC58CYG0S3", 0xB2,
> +  NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  tc58cxgxsx_ecc_get_status)),
> + /* 1.8V 2Gb */
> + SPINAND_INFO("TC58CYG1S3", 0xBB,
> +  NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
> +  NAND_ECCREQ(8, 512),
> +  SPINAND_INFO_OP_VARIANTS(_cache_variants,
> +   _cache_variants,
> +   _cache_variants),
> +  0,
> +  SPINAND_ECCINFO(_ooblayout,
> +  

Re: [PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-16 Thread Miquel Raynal
Hi Yoshio,

Yoshio Furuyama  wrote on Wed, 16
Jan 2019 14:53:19 +0900:

> Add device table for Toshiba Memory products.
> Also, generalize OOB layout structure and function names.
> 
> Signed-off-by: Yoshio Furuyama 
> 
> ---
>  drivers/mtd/nand/spi/toshiba.c |   79 
> +---
>  1 file changed, 65 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mtd/nand/spi/toshiba.c b/drivers/mtd/nand/spi/toshiba.c
> index 0812655..0916962 100644
> --- a/drivers/mtd/nand/spi/toshiba.c
> +++ b/drivers/mtd/nand/spi/toshiba.c
> @@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
>  static SPINAND_OP_VARIANTS(update_cache_variants,
>   SPINAND_PROG_LOAD(false, 0, NULL, 0));
>  
> -static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
>struct mtd_oob_region *region)
>  {
> - if (section > 7)
> + if (section > 0)
>   return -ERANGE;
>  
> - region->offset = 128 + 16 * section;
> - region->length = 16;
> + region->offset = mtd->oobsize / 2;
> + region->length = mtd->oobsize / 2;
>  
>   return 0;
>  }
>  
> -static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,
> +static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
> struct mtd_oob_region *region)
>  {
>   if (section > 0)
> @@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct mtd_info 
> *mtd, int section,
>  
>   /* 2 bytes reserved for BBM */
>   region->offset = 2;
> - region->length = 126;
> + region->length = mtd->oobsize / 2 - 2;

I know this is valid C but I am always puzzled when reading such
mathematical operation, I would prefer (mtd->oobsize / 2) - 2.

I'm fine with the rest so if there is no other comment I will fix when
applying.


Thanks,
Miquèl


[PATCH] mtd: spinand: Add support for all Toshiba Memory products

2019-01-15 Thread Yoshio Furuyama
Add device table for Toshiba Memory products.
Also, generalize OOB layout structure and function names.

Signed-off-by: Yoshio Furuyama 

---
 drivers/mtd/nand/spi/toshiba.c |   79 +---
 1 file changed, 65 insertions(+), 14 deletions(-)

diff --git a/drivers/mtd/nand/spi/toshiba.c b/drivers/mtd/nand/spi/toshiba.c
index 0812655..0916962 100644
--- a/drivers/mtd/nand/spi/toshiba.c
+++ b/drivers/mtd/nand/spi/toshiba.c
@@ -25,19 +25,19 @@ static SPINAND_OP_VARIANTS(write_cache_variants,
 static SPINAND_OP_VARIANTS(update_cache_variants,
SPINAND_PROG_LOAD(false, 0, NULL, 0));
 
-static int tc58cvg2s0h_ooblayout_ecc(struct mtd_info *mtd, int section,
+static int tc58cxgxsx_ooblayout_ecc(struct mtd_info *mtd, int section,
 struct mtd_oob_region *region)
 {
-   if (section > 7)
+   if (section > 0)
return -ERANGE;
 
-   region->offset = 128 + 16 * section;
-   region->length = 16;
+   region->offset = mtd->oobsize / 2;
+   region->length = mtd->oobsize / 2;
 
return 0;
 }
 
-static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, int section,
+static int tc58cxgxsx_ooblayout_free(struct mtd_info *mtd, int section,
  struct mtd_oob_region *region)
 {
if (section > 0)
@@ -45,17 +45,17 @@ static int tc58cvg2s0h_ooblayout_free(struct mtd_info *mtd, 
int section,
 
/* 2 bytes reserved for BBM */
region->offset = 2;
-   region->length = 126;
+   region->length = mtd->oobsize / 2 - 2;
 
return 0;
 }
 
-static const struct mtd_ooblayout_ops tc58cvg2s0h_ooblayout = {
-   .ecc = tc58cvg2s0h_ooblayout_ecc,
-   .free = tc58cvg2s0h_ooblayout_free,
+static const struct mtd_ooblayout_ops tc58cxgxsx_ooblayout = {
+   .ecc = tc58cxgxsx_ooblayout_ecc,
+   .free = tc58cxgxsx_ooblayout_free,
 };
 
-static int tc58cvg2s0h_ecc_get_status(struct spinand_device *spinand,
+static int tc58cxgxsx_ecc_get_status(struct spinand_device *spinand,
  u8 status)
 {
struct nand_device *nand = spinand_to_nand(spinand);
@@ -94,15 +94,66 @@ static int tc58cvg2s0h_ecc_get_status(struct spinand_device 
*spinand,
 }
 
 static const struct spinand_info toshiba_spinand_table[] = {
-   SPINAND_INFO("TC58CVG2S0H", 0xCD,
+   /* 3.3V 1Gb */
+   SPINAND_INFO("TC58CVG0S3", 0xC2,
+NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 3.3V 2Gb */
+   SPINAND_INFO("TC58CVG1S3", 0xCB,
+NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 3.3V 4Gb */
+   SPINAND_INFO("TC58CVG2S0", 0xCD,
+NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 1.8V 1Gb */
+   SPINAND_INFO("TC58CYG0S3", 0xB2,
+NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 1.8V 2Gb */
+   SPINAND_INFO("TC58CYG1S3", 0xBB,
+NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
+NAND_ECCREQ(8, 512),
+SPINAND_INFO_OP_VARIANTS(_cache_variants,
+ _cache_variants,
+ _cache_variants),
+0,
+SPINAND_ECCINFO(_ooblayout,
+tc58cxgxsx_ecc_get_status)),
+   /* 1.8V 4Gb */
+   SPINAND_INFO("TC58CYG2S0", 0xBD,
 NAND_MEMORG(1,