diff mbox

[RFC] mtd: nand: Fix bad block identification issue

Message ID 1303906161-24175-1-git-send-email-parth.saxena@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Saxena, Parth April 27, 2011, 12:09 p.m. UTC
Commit e0b58d0 ("mtd: nand: add ->badblockbits for minimum number 
of set bits in bad block byte") by Maxim Levitsky added 
badblockbits to nand_chip to specify minimum number of set bits 
in bad block byte. The patch initialized badblockbits to 8 in 
nand_base.c, but later the initialization line got removed by commit
c7b28e2("mtd: nand: refactor BB marker detection"). After this all 
NAND drivers with NAND_SKIP_BBTSCAN are forced to initialize it to 8.
Otherwise bad block identification will fail.

As a result, mounting of empty jffs2 file system on omap3evm
(having bad blocks) failed giving the following error message -

"mount: mounting /dev/mtdblock4 on /tmp failed: Input/output error"

This patch solves the above issue for omap by initialising
badblockbits. We are working further on this to find a generic fix
to the problem in nand_base.c.

Signed-off-by: Saxena, Parth <parth.saxena@ti.com>
Signed-off-by: Basheer, Mansoor Ahamed <mansoor.ahamed@ti.com>
---
 drivers/mtd/nand/omap2.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

Comments

Grazvydas Ignotas April 27, 2011, 3:45 p.m. UTC | #1
Brian,

did you really intend to remove badblockbits? Maybe it should go back
to nand_base.c?

On Wed, Apr 27, 2011 at 3:09 PM, Saxena, Parth <parth.saxena@ti.com> wrote:
> Commit e0b58d0 ("mtd: nand: add ->badblockbits for minimum number
> of set bits in bad block byte") by Maxim Levitsky added
> badblockbits to nand_chip to specify minimum number of set bits
> in bad block byte. The patch initialized badblockbits to 8 in
> nand_base.c, but later the initialization line got removed by commit
> c7b28e2("mtd: nand: refactor BB marker detection"). After this all
> NAND drivers with NAND_SKIP_BBTSCAN are forced to initialize it to 8.
> Otherwise bad block identification will fail.
>
> As a result, mounting of empty jffs2 file system on omap3evm
> (having bad blocks) failed giving the following error message -
>
> "mount: mounting /dev/mtdblock4 on /tmp failed: Input/output error"
>
> This patch solves the above issue for omap by initialising
> badblockbits. We are working further on this to find a generic fix
> to the problem in nand_base.c.
>
> Signed-off-by: Saxena, Parth <parth.saxena@ti.com>
> Signed-off-by: Basheer, Mansoor Ahamed <mansoor.ahamed@ti.com>
> ---
>  drivers/mtd/nand/omap2.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 454f90c..350c77f 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1005,6 +1005,8 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
>        info->nand.options      = pdata->devsize;
>        info->nand.options      |= NAND_SKIP_BBTSCAN;
>
> +       info->nand.badblockbits = 8;
> +
>        /* NAND write protect off */
>        gpmc_cs_configure(info->gpmc_cs, GPMC_CONFIG_WP, 0);
>
> --
> 1.6.2.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Brian Norris April 28, 2011, 12:45 a.m. UTC | #2
Hi,

On 4/27/2011 8:45 AM, Grazvydas Ignotas wrote:
> Brian,
> 
> did you really intend to remove badblockbits? Maybe it should go back
> to nand_base.c?

No, I had no intention of the sorts! It surely should not have been
removed in the first place. I will "ack" a patch to revert it, or next
time I'm at my work machine I'll write one myself.

As a defense for myself...I think I was relatively new to git + kernel
hacking at the time I sent this patch. Sorry for the messup.

> On Wed, Apr 27, 2011 at 3:09 PM, Saxena, Parth <parth.saxena@ti.com> wrote:
>> Commit e0b58d0 ("mtd: nand: add ->badblockbits for minimum number
>> of set bits in bad block byte") by Maxim Levitsky added
>> badblockbits to nand_chip to specify minimum number of set bits
>> in bad block byte. The patch initialized badblockbits to 8 in
>> nand_base.c, but later the initialization line got removed by commit
>> c7b28e2("mtd: nand: refactor BB marker detection"). After this all
>> NAND drivers with NAND_SKIP_BBTSCAN are forced to initialize it to 8.
>> Otherwise bad block identification will fail.

Brian
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Artem Bityutskiy April 29, 2011, 1:12 p.m. UTC | #3
On Thu, 2011-04-28 at 20:30 +0300, Artem Bityutskiy wrote:
> On Wed, 2011-04-27 at 17:39 +0530, Saxena, Parth wrote:
> > This patch solves the above issue for omap by initialising
> > badblockbits. We are working further on this to find a generic fix
> > to the problem in nand_base.c.
> 
> But it looks like the generic solution is to return the line which was
> accidentally removed, how about this patch
> 
> From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> Date: Thu, 28 Apr 2011 20:26:59 +0300
> Subject: [PATCH] mtd: return badblockbits back
> 
> In commit c7b28e25cb9beb943aead770ff14551b55fa8c79 the initialization of
> the backblockbits was accidentally removed. This patch returns it back,
> because otherwise some NAND drivers are broken.
> 
> This problem was reported by "Saxena, Parth <parth.saxena@ti.com>" here:
> http://lists.infradead.org/pipermail/linux-mtd/2011-April/035221.html
> 
> Reported-by: Saxena, Parth <parth.saxena@ti.com>
> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> Cc: stable@kernel.org [2.6.36+]
> ---
>  drivers/mtd/nand/nand_base.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)

Any ack/nack/tested-by?
Saxena, Parth April 29, 2011, 2:22 p.m. UTC | #4
> -----Original Message-----
> From: Artem Bityutskiy [mailto:dedekind1@gmail.com]
> Sent: Thursday, April 28, 2011 11:01 PM
> To: Saxena, Parth; Brian Norris
> Cc: linux-mtd@lists.infradead.org; Basheer, Mansoor Ahamed; linux-
> omap@vger.kernel.org
> Subject: Re: [RFC] mtd: nand: Fix bad block identification issue
> 
> On Wed, 2011-04-27 at 17:39 +0530, Saxena, Parth wrote:
> > This patch solves the above issue for omap by initialising
> > badblockbits. We are working further on this to find a generic fix
> > to the problem in nand_base.c.
> 
> But it looks like the generic solution is to return the line which was
> accidentally removed, how about this patch
> 
> From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> Date: Thu, 28 Apr 2011 20:26:59 +0300
> Subject: [PATCH] mtd: return badblockbits back
> 
> In commit c7b28e25cb9beb943aead770ff14551b55fa8c79 the initialization of
> the backblockbits was accidentally removed. This patch returns it back,
> because otherwise some NAND drivers are broken.
> 
> This problem was reported by "Saxena, Parth <parth.saxena@ti.com>" here:
> http://lists.infradead.org/pipermail/linux-mtd/2011-April/035221.html
> 
> Reported-by: Saxena, Parth <parth.saxena@ti.com>
> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> Cc: stable@kernel.org [2.6.36+]
> ---
>  drivers/mtd/nand/nand_base.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 15510f2..5a7f817 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -3106,6 +3106,8 @@ ident_done:
>  		chip->chip_shift += 32 - 1;
>  	}
> 
> +	chip->badblockbits = 8;
> +
>  	/* Set the bad block position */
>  	if (mtd->writesize > 512 || (busw & NAND_BUSWIDTH_16))
>  		chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
[Saxena, Parth] 

Tested-By: Saxena, Parth <parth.saxena@ti.com>
Acked By: Saxena, Parth <parth.saxena@ti.com>

> --
> 1.7.2.3
> 
> --
> Best Regards,
> Artem Bityutskiy (????? ????????)

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Artem Bityutskiy April 29, 2011, 5:44 p.m. UTC | #5
On Fri, 2011-04-29 at 19:52 +0530, Saxena, Parth wrote:
> 
> > -----Original Message-----
> > From: Artem Bityutskiy [mailto:dedekind1@gmail.com]
> > Sent: Thursday, April 28, 2011 11:01 PM
> > To: Saxena, Parth; Brian Norris
> > Cc: linux-mtd@lists.infradead.org; Basheer, Mansoor Ahamed; linux-
> > omap@vger.kernel.org
> > Subject: Re: [RFC] mtd: nand: Fix bad block identification issue
> > 
> > On Wed, 2011-04-27 at 17:39 +0530, Saxena, Parth wrote:
> > > This patch solves the above issue for omap by initialising
> > > badblockbits. We are working further on this to find a generic fix
> > > to the problem in nand_base.c.
> > 
> > But it looks like the generic solution is to return the line which was
> > accidentally removed, how about this patch
> > 
> > From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> > Date: Thu, 28 Apr 2011 20:26:59 +0300
> > Subject: [PATCH] mtd: return badblockbits back
> > 
> > In commit c7b28e25cb9beb943aead770ff14551b55fa8c79 the initialization of
> > the backblockbits was accidentally removed. This patch returns it back,
> > because otherwise some NAND drivers are broken.
> > 
> > This problem was reported by "Saxena, Parth <parth.saxena@ti.com>" here:
> > http://lists.infradead.org/pipermail/linux-mtd/2011-April/035221.html
> > 
> > Reported-by: Saxena, Parth <parth.saxena@ti.com>
> > Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
> > Cc: stable@kernel.org [2.6.36+]
> > ---
> >  drivers/mtd/nand/nand_base.c |    2 ++
> >  1 files changed, 2 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> > index 15510f2..5a7f817 100644
> > --- a/drivers/mtd/nand/nand_base.c
> > +++ b/drivers/mtd/nand/nand_base.c
> > @@ -3106,6 +3106,8 @@ ident_done:
> >  		chip->chip_shift += 32 - 1;
> >  	}
> > 
> > +	chip->badblockbits = 8;
> > +
> >  	/* Set the bad block position */
> >  	if (mtd->writesize > 512 || (busw & NAND_BUSWIDTH_16))
> >  		chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
> [Saxena, Parth] 
> 
> Tested-By: Saxena, Parth <parth.saxena@ti.com>
> Acked By: Saxena, Parth <parth.saxena@ti.com>

Thanks, pushing to the l2-mtd-2.6.git.
Brian Norris April 29, 2011, 6:03 p.m. UTC | #6
On 4/29/2011 10:44 AM, Artem Bityutskiy wrote:
> On Fri, 2011-04-29 at 19:52 +0530, Saxena, Parth wrote:
>>
>>> -----Original Message-----
>>> From: Artem Bityutskiy [mailto:dedekind1@gmail.com]
>>> Sent: Thursday, April 28, 2011 11:01 PM
>>> To: Saxena, Parth; Brian Norris
>>> Cc: linux-mtd@lists.infradead.org; Basheer, Mansoor Ahamed; linux-
>>> omap@vger.kernel.org
>>> Subject: Re: [RFC] mtd: nand: Fix bad block identification issue
>>>
>>> On Wed, 2011-04-27 at 17:39 +0530, Saxena, Parth wrote:
>>>> This patch solves the above issue for omap by initialising
>>>> badblockbits. We are working further on this to find a generic fix
>>>> to the problem in nand_base.c.
>>>
>>> But it looks like the generic solution is to return the line which was
>>> accidentally removed, how about this patch
>>>
>>> From: Artem Bityutskiy<Artem.Bityutskiy@nokia.com>
>>> Date: Thu, 28 Apr 2011 20:26:59 +0300
>>> Subject: [PATCH] mtd: return badblockbits back
>>>
>>> In commit c7b28e25cb9beb943aead770ff14551b55fa8c79 the initialization of
>>> the backblockbits was accidentally removed. This patch returns it back,
>>> because otherwise some NAND drivers are broken.
>>>
>>> This problem was reported by "Saxena, Parth<parth.saxena@ti.com>" here:
>>> http://lists.infradead.org/pipermail/linux-mtd/2011-April/035221.html
>>>
>>> Reported-by: Saxena, Parth<parth.saxena@ti.com>
>>> Signed-off-by: Artem Bityutskiy<Artem.Bityutskiy@nokia.com>
>>> Cc: stable@kernel.org [2.6.36+]
>>> ---
>>>   drivers/mtd/nand/nand_base.c |    2 ++
>>>   1 files changed, 2 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
>>> index 15510f2..5a7f817 100644
>>> --- a/drivers/mtd/nand/nand_base.c
>>> +++ b/drivers/mtd/nand/nand_base.c
>>> @@ -3106,6 +3106,8 @@ ident_done:
>>>   		chip->chip_shift += 32 - 1;
>>>   	}
>>>
>>> +	chip->badblockbits = 8;
>>> +
>>>   	/* Set the bad block position */
>>>   	if (mtd->writesize>  512 || (busw&  NAND_BUSWIDTH_16))
>>>   		chip->badblockpos = NAND_LARGE_BADBLOCK_POS;
>> [Saxena, Parth]
>>
>> Tested-By: Saxena, Parth<parth.saxena@ti.com>
>> Acked By: Saxena, Parth<parth.saxena@ti.com>
>
> Thanks, pushing to the l2-mtd-2.6.git.
>

As promised (but too late?):

Acked-by: Brian Norris <computersforpeace@gmail.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Artem Bityutskiy April 29, 2011, 6:05 p.m. UTC | #7
On Fri, 2011-04-29 at 11:03 -0700, Brian Norris wrote:
> As promised (but too late?):
> 
> Acked-by: Brian Norris <computersforpeace@gmail.com>

No, not late, I rebase my l2 tree with no shame :-) But once the patch
hits the real mtd tree, then we never change it. So, I've added you tag,
thanks.
diff mbox

Patch

diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 454f90c..350c77f 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1005,6 +1005,8 @@  static int __devinit omap_nand_probe(struct platform_device *pdev)
 	info->nand.options	= pdata->devsize;
 	info->nand.options	|= NAND_SKIP_BBTSCAN;
 
+	info->nand.badblockbits = 8;
+
 	/* NAND write protect off */
 	gpmc_cs_configure(info->gpmc_cs, GPMC_CONFIG_WP, 0);