[U-Boot-Users] NAND drivers bug

Terence Soh Terence.Soh at appliedbiosystems.com
Tue Aug 8 12:08:33 CEST 2006


Hi,

I refer to the nand driver code in the git and wishes to report some bugs.

1) nand erase <start> <end>
The erase operation terminates if a bad block is encountered. It should be 


int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int 
allowbbt)
{
....
        while (len) {
#ifndef NAND_ALLOW_ERASE_ALL
                /* Check if we have a bad block, we do not erase bad 
blocks ! */
                if (nand_block_checkbad(mtd, ((loff_t) page) << 
this->page_shift, 0, allowbbt)) {
#if 0
                        printk (KERN_WARNING "nand_erase: attempt to erase 
a bad block at address 0x%08x\n", page * mtd->oobblock);
                        instr->state = MTD_ERASE_FAILED;
                        goto erase_exit;
#else
                        /* bad block; ignore */
                        page += pages_per_block;
                        len -= (1 << this->phys_erase_shift);
                        continue;
#endif
                }
#endif

2) nand_write_ecc and/or nand_write_page writes to the nand flash without 
checking if the block is bad. I believe that in the linux kernel, this 
checking is taken care of in the fs layer (jffs2/yaffs).

Regards,
Terence.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20060808/6b8c7309/attachment.htm 


More information about the U-Boot mailing list