[RFC] nand_btt : use nand chip->block_bad
Matthieu CASTET
matthieu.castet at parrot.com
Fri Jun 29 04:41:18 EDT 2012
Hi,
Shmulik Ladkani a écrit :
> Hi Matthieu,
>
> On Thu, 28 Jun 2012 17:47:22 +0200 Matthieu CASTET <matthieu.castet at parrot.com> wrote:
>> for (i = startblock; i < numblocks;) {
>> int ret;
>>
>> BUG_ON(bd->options & NAND_BBT_NO_OOB);
>>
>> - if (bd->options & NAND_BBT_SCANALLPAGES)
>> - ret = scan_block_full(mtd, bd, from, buf, readlen,
>> - scanlen, len);
>> - else
>> - ret = scan_block_fast(mtd, bd, from, buf, len);
>> -
>> + ret = this->block_bad(mtd, from, 1);
>> if (ret < 0)
>> return ret;
>>
>
> Hmm, seems elegant, nand_bbt is not supposed to be elegant, what are we
> missing here? ;-))
>
> - I think nand_chip ops are not supposed to be called directly from
> outside nand driver (nand_base et al); instead the mtd interfaces
> should be used.
> OTOH, one might consider nand_bbt to be part of nand_base driver...
Yes but the current driver already used privare nand_base stuff like
"this->bbt_options". There is duplicate stuff like NAND_BBT_SCAN2NDPAGE that are
in this->bbt_options and bd->options
We can't call mtd interface, because it will calling nand_isbad_bbt and not
chip->block_bad. [1]
>
> - The new scheme lacks the potential error correction offered by the
> mtd_read_oob call (invoked from the original scan functions).
> OTOH, currently, AFAIK, it is only offered by an out-of-tree driver.
Could you explain more here ?
The current scheme doesn't handle bitflip in bad block. We don't care about
error correction : bad block are not protected by ecc !
With the new scheme, we can be robust to bad block corruption : all we need to
do is "chip->badblockbits = 4;"
>
> - The original scheme allows validating against an arbitrary
> nand_bbt_descr, whereas 'block_bad' reads the 'badblockpos' byte.
> Don't know if this is a real issue (need to look at the descriptors
> used); and probably, 'block_bad' can be augmented to use a given
> descriptor.
I will be interrested to know why we need to support that.
Are there flash where bad block are not in a fixed position ?
>
> - To preserve all functionality, we need to augment 'block_bad'
> implementors to support NAND_BBT_SCANALLPAGES (e.g. nand_block_bad
> lacks this).
We already support NAND_BBT_SCANLASTPAGE, NAND_BBT_SCAN2NDPAGE.
NAND_BBT_SCANALLPAGES can be added. See the attached patch.
Matthieu
[1]
static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip,
int allowbbt)
{
struct nand_chip *chip = mtd->priv;
if (!chip->bbt)
return chip->block_bad(mtd, ofs, getchip);
/* Return info from the table */
return nand_isbad_bbt(mtd, ofs, allowbbt);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-add-NAND_BBT_SCANALLPAGES-support-to-block_bad.patch
Type: text/x-diff
Size: 1550 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-mtd/attachments/20120629/304c9a2c/attachment.bin>
More information about the linux-mtd
mailing list