From patchwork Wed May 27 10:00:54 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: mtd: Nand Atmel: add On Flash BBT support Date: Wed, 27 May 2009 00:00:54 -0000 From: simon polette X-Patchwork-Id: 27723 Message-Id: <72795ccb0905270300p7ac111fduba8d656a8031a96c@mail.gmail.com> To: dedekind@infradead.org Cc: linux-mtd , linux-arm-kernel@lists.arm.linux.org.uk, spolette@adetelgroup.com 2009/5/27 Artem Bityutskiy : > On Tue, 2009-05-26 at 13:55 +0200, simon polette wrote: >> 2009/5/26 simon polette : >> > 2009/5/26 simon polette : >> >> 2009/5/26 Artem Bityutskiy : >> >>> On Tue, 2009-05-26 at 11:40 +0200, simon polette wrote: >> >>>> 2009/5/26 Artem Bityutskiy : >> >>>> > On Mon, 2009-05-25 at 17:44 +0200, simon polette wrote: >> >>>> >> +config       MTD_NAND_ATMEL_FLASH_BBT >> >>>> >> +     bool "Use On-Flash Bad Block Table" >> >>>> >> +     depends on MTD_NAND_ATMEL >> >>>> >> +     help >> >>>> >> +       This enables the On-Flash BBT, which mean that the bad blocks >> >>>> >> +       will be scanned one time then the BBT will be stored >> >>>> >> +       in flash, so scanning Nand flash for bad blocks will be no more >> >>>> >> +       necessary for the next boots. >> >>>> >> + >> >>>> > >> >>>> > I do not think you need a config option for this. It should be >> >>>> > a module parameter instead. >> >>>> > >> >>>> > -- >> >>>> > Best regards, >> >>>> > Artem Bityutskiy (Битюцкий Артём) >> >>>> > >> >>>> > >> >>>> >> >>>> Yes, good idea, but do you think that I can keep a config option to >> >>>> define the default state of that param, it means doing something like >> >>>> : >> >>>> #ifdef CONFIG_MTD_NAND_ATMEL_FLASH_BBT >> >>>> static int use_on_flash_bbt = 1; >> >>>> #else >> >>>> static int use_on_flash_bbt = 0; >> >>>> #endif >> >>>> module_param(use_on_flash_bbt, int, 0); >> >>> >> >>> I think it is generally bad idea if each nand driver will >> >>> introduce a separate config option for this kind of stuff. >> >>> >> >>> You may always boot your kernel with something like >> >>> atmel_nand.on_flash_bbt=1 in the kernel parameters. >> >>> >> >>> -- >> >>> Best regards, >> >>> Artem Bityutskiy (Битюцкий Артём) >> >>> >> >>> >> >> >> >> Ok, I asked this question cause it's what have been done in the nand >> >> diskonchip driver. >> >> I'll send you a new patch soon. >> >> >> >> Best regards, >> >> >> >> Simon Polette >> >> Adeneo - Adetelgroup >> >> >> > >> > So here is the new patch : >> > >> > Signed-off-by: Simon Polette >> > --- >> >  drivers/mtd/nand/atmel_nand.c |    9 +++++++++ >> >  1 files changed, 9 insertions(+), 0 deletions(-) >> > >> > diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c >> > index 47a33ce..e113594 100644 >> > --- a/drivers/mtd/nand/atmel_nand.c >> > +++ b/drivers/mtd/nand/atmel_nand.c >> > @@ -24,6 +24,7 @@ >> > >> >  #include >> >  #include >> > +#include >> >  #include >> >  #include >> >  #include Signed-off-by: Simon Polette >> > >> > @@ -47,6 +48,9 @@ >> >  #define no_ecc         0 >> >  #endif >> > >> > +static int on_flash_bbt = 0; >> > +module_param(on_flash_bbt, int, 0); >> > + >> >  /* Register access macros */ >> >  #define ecc_readl(add, reg)                            \ >> >        __raw_readl(add + ATMEL_ECC_##reg) >> > @@ -465,6 +469,11 @@ static int __init atmel_nand_probe(struct >> > platform_device *pdev) >> >                } >> >        } >> > >> > +       if (on_flash_bbt) { >> > +               printk("atmel_nand: Use On Flash BBT\n"); >> > +               nand_chip->options |= NAND_USE_FLASH_BBT; >> > +       } >> > + >> >        /* first scan to find the device and get the page size */ >> >        if (nand_scan_ident(mtd, 1)) { >> >                res = -ENXIO; >> > -- >> > 1.6.0.4 >> > >> > -- >> > Best regards, >> > >> > Simon Polette >> > Adeneo - Adetelgroup >> > >> A line have been mistakenly inserted into the patch, probably by a >> middle click, sorry for the inconvenience. >> >> >> Signed-off-by: Simon Polette >> --- >>  drivers/mtd/nand/atmel_nand.c |    9 +++++++++ >>  1 files changed, 9 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c >> index 47a33ce..e113594 100644 >> --- a/drivers/mtd/nand/atmel_nand.c >> +++ b/drivers/mtd/nand/atmel_nand.c >> @@ -24,6 +24,7 @@ >> >>  #include >>  #include >> +#include >>  #include >>  #include >>  #include >> @@ -47,6 +48,9 @@ >>  #define no_ecc               0 >>  #endif >> >> +static int on_flash_bbt = 0; >> +module_param(on_flash_bbt, int, 0); >> + >>  /* Register access macros */ >>  #define ecc_readl(add, reg)                          \ >>       __raw_readl(add + ATMEL_ECC_##reg) >> @@ -465,6 +469,11 @@ static int __init atmel_nand_probe(struct >> platform_device *pdev) >>               } >>       } >> >> +     if (on_flash_bbt) { >> +             printk("atmel_nand: Use On Flash BBT\n"); >> +             nand_chip->options |= NAND_USE_FLASH_BBT; >> +     } > > Is it please also possible to add KERN_INFO to the 'printk()' > please. And also add it to the already existing 'printk()' in > the driver: printk("No SmartMedia card inserted.\n"); > > -- > Best regards, > Artem Bityutskiy (Битюцкий Артём) > > Hoping the patch is correct now : Signed-off-by: Simon Polette --- drivers/mtd/nand/atmel_nand.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index 47a33ce..2802992 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,9 @@ #define no_ecc 0 #endif +static int on_flash_bbt = 0; +module_param(on_flash_bbt, int, 0); + /* Register access macros */ #define ecc_readl(add, reg) \ __raw_readl(add + ATMEL_ECC_##reg) @@ -459,12 +463,17 @@ static int __init atmel_nand_probe(struct platform_device *pdev) if (host->board->det_pin) { if (gpio_get_value(host->board->det_pin)) { - printk("No SmartMedia card inserted.\n"); + printk(KERN_INFO "No SmartMedia card inserted.\n"); res = ENXIO; goto err_no_card; } } + if (on_flash_bbt) { + printk(KERN_INFO "atmel_nand: Use On Flash BBT\n"); + nand_chip->options |= NAND_USE_FLASH_BBT; + } + /* first scan to find the device and get the page size */ if (nand_scan_ident(mtd, 1)) { res = -ENXIO; -- 1.6.0.4