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.
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot