From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] what to do when the uboot can not mark the phisical bad block of nand flash?
Date: Tue, 29 Nov 2011 15:31:18 +0100 [thread overview]
Message-ID: <201111291531.18950.marek.vasut@gmail.com> (raw)
In-Reply-To: <55115875.ca03.133efb6f79a.Coremail.liaohengquan1986@163.com>
> The boot version is 1.3.1. So how the Nand erase mark the bad block into
> BBT in the software?
Ok, please:
1) Stop top-pasting replied
2) Use mainline u-boot or something not prehistoric. please!
M
>
>
> ? 2011-11-26 19:43:40?"Marek Vasut" <marek.vasut@gmail.com> ???
>
> >> OK?guys,I can discribe this question in the other way.
> >> When I download the program image to the nand flash in the uboot.
> >> At firist, I need to erase the nand flash by running the command of
> >> "nand erase" or "nand scrub" in the cmdline. But sometimes this step
> >> will be failed because one block of this flash is bad, and this command
> >> will return "Failed erase".
> >
> >Scrub wont, but it's stupid to use. Nand erase should mark the block bad
> >into BBT. Anyway, what version of uboot do you use?
> >
> >> Guys what would you do when you got this problem? Do I need to mrak this
> >> block as bad block and add it to the bad block table with software? how
> >> to do this ? Thank you !
> >>
> >> At 2011-11-25 16:51:17,"Marek Vasut" <marek.vasut@gmail.com> wrote:
> >> >> 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
prev parent reply other threads:[~2011-11-29 14:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-24 13:36 [U-Boot] what to do when the uboot can not mark the phisical bad block of nand flash? liaohengquan1986
2011-11-25 8:51 ` Marek Vasut
[not found] ` <18a422dc.11f19.133df8c393d.Coremail.liaohengquan1986@163.com>
2011-11-26 11:43 ` Marek Vasut
[not found] ` <55115875.ca03.133efb6f79a.Coremail.liaohengquan1986@163.com>
2011-11-29 14:31 ` Marek Vasut [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201111291531.18950.marek.vasut@gmail.com \
--to=marek.vasut@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.