Message ID | 20090325150551.GA4414@Chamillionaire.breakpoint.cc |
---|---|
State | Accepted |
Commit | 81ec5364a58c0545b694dee02fe65b9ae48f37b6 |
Headers | show |
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
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