Patchwork [1/2] NAND: Add support for oob size 128

login
register
mail settings
Submitter Sebastian Siewior
Date March 25, 2009, 3:05 p.m.
Message ID <20090325150551.GA4414@Chamillionaire.breakpoint.cc>
Download mbox | patch
Permalink /patch/25089/
State Accepted
Commit 81ec5364a58c0545b694dee02fe65b9ae48f37b6
Headers show

Comments

Sebastian Siewior - March 25, 2009, 3:05 p.m.
* Wolfgang Grandegger | 2009-03-25 11:48:37 [+0100]:

>Signed-off-by: Ilya Yanok <yanok@emcraft.com>
>Acked-by: Wolfgang Grandegger <wg@grandegger.com>

You seem to forgot a few bits (subpage_sft & max page size). I had this
patch in my tree like for ever and forgot post it here. I did however
merge the mtd-utils bits allready :)

From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 12 Dec 2007 17:27:03 +0100
Subject: [PATCH] [MTD] Add support for 4k pages.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
---
 drivers/mtd/nand/nand_base.c |   18 ++++++++++++++++++
 include/linux/mtd/nand.h     |    4 ++--
 2 files changed, 20 insertions(+), 2 deletions(-)
Wolfgang Grandegger - March 30, 2009, 10:57 a.m.
Hi Sebastian,

Sebastian Andrzej Siewior wrote:
> * Wolfgang Grandegger | 2009-03-25 11:48:37 [+0100]:
> 
>> Signed-off-by: Ilya Yanok <yanok@emcraft.com>
>> Acked-by: Wolfgang Grandegger <wg@grandegger.com>
> 
> You seem to forgot a few bits (subpage_sft & max page size). I had this
> patch in my tree like for ever and forgot post it here. I did however
> merge the mtd-utils bits allready :)

I see. Your patch works fine for my board as well and I have added my
"acked-by" line below. David, could you please consider this patch for
kernel inclusion.

Thanks,

Wolfgang.

> From: Thomas Gleixner <tglx@linutronix.de>
> Date: Wed, 12 Dec 2007 17:27:03 +0100
> Subject: [PATCH] [MTD] Add support for 4k pages.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
Acked-by: Wolfgang Grandegger <wg@grandegger.com

> ---
>  drivers/mtd/nand/nand_base.c |   18 ++++++++++++++++++
>  include/linux/mtd/nand.h     |    4 ++--
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 0a9c9cd..c3266fd 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -82,6 +82,20 @@ static struct nand_ecclayout nand_oob_64 = {
>  		 .length = 38}}
>  };
>  
> +static struct nand_ecclayout nand_oob_128 = {
> +	.eccbytes = 48,
> +	.eccpos = {
> +		   80, 81, 82, 83, 84, 85, 86, 87,
> +		   88, 89, 90, 91, 92, 93, 94, 95,
> +		   96, 97, 98, 99, 100, 101, 102, 103,
> +		   104, 105, 106, 107, 108, 109, 110, 111,
> +		   112, 113, 114, 115, 116, 117, 118, 119,
> +		   120, 121, 122, 123, 124, 125, 126, 127},
> +	.oobfree = {
> +		{.offset = 2,
> +		 .length = 78}}
> +};
> +
>  static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd,
>  			   int new_state);
>  
> @@ -2550,6 +2564,9 @@ int nand_scan_tail(struct mtd_info *mtd)
>  		case 64:
>  			chip->ecc.layout = &nand_oob_64;
>  			break;
> +		case 128:
> +			chip->ecc.layout = &nand_oob_128;
> +			break;
>  		default:
>  			printk(KERN_WARNING "No oob scheme defined for "
>  			       "oobsize %d\n", mtd->oobsize);
> @@ -2671,6 +2688,7 @@ int nand_scan_tail(struct mtd_info *mtd)
>  			break;
>  		case 4:
>  		case 8:
> +		case 16:
>  			mtd->subpage_sft = 2;
>  			break;
>  		}
> diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
> index 733d3f3..b90e683 100644
> --- a/include/linux/mtd/nand.h
> +++ b/include/linux/mtd/nand.h
> @@ -43,8 +43,8 @@ extern void nand_wait_ready(struct mtd_info *mtd);
>   * is supported now. If you add a chip with bigger oobsize/page
>   * adjust this accordingly.
>   */
> -#define NAND_MAX_OOBSIZE	64
> -#define NAND_MAX_PAGESIZE	2048
> +#define NAND_MAX_OOBSIZE	128
> +#define NAND_MAX_PAGESIZE	4096
>  
>  /*
>   * Constants for hardware specific CLE/ALE/NCE function

Patch

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 0a9c9cd..c3266fd 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -82,6 +82,20 @@  static struct nand_ecclayout nand_oob_64 = {
 		 .length = 38}}
 };
 
+static struct nand_ecclayout nand_oob_128 = {
+	.eccbytes = 48,
+	.eccpos = {
+		   80, 81, 82, 83, 84, 85, 86, 87,
+		   88, 89, 90, 91, 92, 93, 94, 95,
+		   96, 97, 98, 99, 100, 101, 102, 103,
+		   104, 105, 106, 107, 108, 109, 110, 111,
+		   112, 113, 114, 115, 116, 117, 118, 119,
+		   120, 121, 122, 123, 124, 125, 126, 127},
+	.oobfree = {
+		{.offset = 2,
+		 .length = 78}}
+};
+
 static int nand_get_device(struct nand_chip *chip, struct mtd_info *mtd,
 			   int new_state);
 
@@ -2550,6 +2564,9 @@  int nand_scan_tail(struct mtd_info *mtd)
 		case 64:
 			chip->ecc.layout = &nand_oob_64;
 			break;
+		case 128:
+			chip->ecc.layout = &nand_oob_128;
+			break;
 		default:
 			printk(KERN_WARNING "No oob scheme defined for "
 			       "oobsize %d\n", mtd->oobsize);
@@ -2671,6 +2688,7 @@  int nand_scan_tail(struct mtd_info *mtd)
 			break;
 		case 4:
 		case 8:
+		case 16:
 			mtd->subpage_sft = 2;
 			break;
 		}
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 733d3f3..b90e683 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -43,8 +43,8 @@  extern void nand_wait_ready(struct mtd_info *mtd);
  * is supported now. If you add a chip with bigger oobsize/page
  * adjust this accordingly.
  */
-#define NAND_MAX_OOBSIZE	64
-#define NAND_MAX_PAGESIZE	2048
+#define NAND_MAX_OOBSIZE	128
+#define NAND_MAX_PAGESIZE	4096
 
 /*
  * Constants for hardware specific CLE/ALE/NCE function