[U-Boot] what to do when the uboot can not mark the phisical bad block of nand flash?

Marek Vasut
2011-11-25T08:51:17Z

> Hi, guys I got a problem. I move a part of source code of
> linux/driver/mtd/nand to the u-boot. But I found that the u-boot can not
> mark the phsical bad block . when I run nand_erase() or nand_scrub(), it
> return error num as below: linux/driver/mtd/nand/nand_base.c
> 2589 chip->erase_cmd(mtd, page & chip->pagemask); 2590
> status = chip->waitfunc(mtd, chip); 2592 /*
> 2593 * See if operation failed and additional status
> checks are 2594 * available
> 2595 */
> 2596 if ((status & NAND_STATUS_FAIL) &&
> (chip->errstat)) 2597 status = chip->errstat(mtd,
> chip, FL_ERASING, 2598
> status, page); 2600 /* See if block erase succeeded */
> 2601 if (status & NAND_STATUS_FAIL) {
> 2602 DEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase,
> " 2603 "page 0x%08x\n", __func__,
> page); 2604 instr->state = MTD_ERASE_FAILED;
> 2605 instr->fail_addr =
> 2606 ((loff_t)page <<
> chip->page_shift); 2607 goto erase_exit;
> 2608 }
> you can find that if block erase is failed(status==-1), it only
> mark the instr(we will not use the instr later), and go to the erase_exit.
> So there is no code to mark the oob of the phisical bad block, neither add
> it to the bad block table. so ,I add the code of writing oob of the
> phisical bad block when it is erased failed, such as below:
> chip->erase_cmd(mtd, page & chip->pagemask);2589
>
> - Ignored:
> 2590 status = chip->waitfunc(mtd, chip);
> 2592 /*
> 2593 * See if operation failed and additional status
> checks are 2594 * available
> 2595 */
> 2596 if ((status & NAND_STATUS_FAIL) &&
> (chip->errstat)) 2597 status = chip->errstat(mtd,
> chip, FL_ERASING, 2598
> status, page); 2600 /* See if block erase succeeded */
> 2601 if (status & NAND_STATUS_FAIL) {
> 2602 DEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase,
> " 2603 "page 0x%08x\n", __func__,
> page); 2604 instr->state = MTD_ERASE_FAILED;
> 2605 instr->fail_addr =
> 2606 ((loff_t)page <<
> chip->page_shift); nand_write_oob(addr);
> 2607 goto erase_exit;
> 2608 }
>
> Guys, what do you think of it , and what would you to if you got
> this problem.

Can you please fix your mailer and send this stuff again? It's really hard to
decode what you're asking please.

M