All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Egholm Nielsen <martin@egholm-nielsen.dk>
To: linux-mtd@lists.infradead.org
Subject: Re: [Yaffs1] mkyaffs exits with "MTD Erase failure"
Date: Wed, 06 Jun 2007 14:06:31 +0200	[thread overview]
Message-ID: <f46807$6il$1@sea.gmane.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0706041709100.3966@lnxricardw.se.axis.com>

Hi,

Ricard Wanderlof wrote:
> On Mon, 4 Jun 2007, Martin Egholm Nielsen wrote:
>>>>So, I fixed the timing in the kernel and tried erasing the flash
>>>>again. But with no luck - mkyaffs refuses to erase/program the
>>>>flash:

>>>Mtd refuses to erase blocks that have been marked bad. There is no
>>>workaround on a running kernel, but it is possible to patch the
>>>kernel to do this.

>>But as you see, flash_eraseall on the same device works perfectly fine:
>>flash_eraseall /dev/mtd0
>>....
>>Skipping bad block at 0x0179c000
>>Erasing 16 Kibyte @ 1ffc000 -- 99 % complete.

> flash_eraseall skips bad blocks while erasing. I don't know how mkyaffs 
> works though.

Well, glancing at the code, it should be doing something like it:

==== ORIGINAL mkyaffs.c ====
for(addr = 0; addr < meminfo.size; addr += meminfo.erasesize)
{
   /* Read the OOB data to determine if the block is valid.
    * If the block is damaged, then byte 5 of the OOB data will
    * have at least 2 zero bits.
    */
   oob.start = addr;
   oob.length = 16;
   oob.ptr = oobbuf;
   if (ioctl(fd, MEMREADOOB, &oob) != 0)
   {
     perror("ioctl(MEMREADOOB)");
     close(fd);
     exit(1);
   }

   if(countBits[oobbuf[5]] < 7)
   {
     printf("Block at 0x08%lx is damaged and is not being 
formatted\n",addr);
   }
=======================

However, it doesn't seem to do the trick. So I copied the check from 
"flash_eraseall" and put in, as well:

==== NEW mkyaffs.c ====
for(addr = 0; addr < meminfo.size; addr += meminfo.erasesize)
{
   /* MEN 2007-06-06 */
   loff_t bah = addr;
   int ret = ioctl(fd, MEMGETBADBLOCK, &bah);
   if (ret > 0)
   {
     printf( "Block at 0x08%lx would have been ignored by 
flash_eraseall!\n", addr );
     continue;
   } // if

   // OLD CODE HERE
=======================


And now it seems to work:

# mkyaffs-hacked-2007-06-06 -e /dev/mtd0
argc 3 sh 0 optcnt 2
Erasing and programming NAND
Erasing block at 0x080
Erasing block at 0x084000
...
Erasing block at 0x0898000
Block at 0x089c000 would have been ignored by flash_eraseall!
....


So that's good!? Unless there is a reason why that check was not there 
originally!
Charles Manning, do you care for a comment?


> You can always re-mark the factory bad ones, given that you have written 
> down which they were once... if you are using a flash-based BBT, erasing 
> the BBT blocks would suffice, as the bad block management in jffs2 when 
> using a flash-based BBT doesn't touch bad block markers. I would assume 
> from your reasoning that you are not using a flash-based BBT?

I don't, no. And I didn't write down the factory ones...


BR,
  Martin

  reply	other threads:[~2007-06-06 12:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-04 13:06 [Yaffs1] mkyaffs exits with "MTD Erase failure" Martin Egholm Nielsen
2007-06-04 13:58 ` Ricard Wanderlof
2007-06-04 14:36   ` Martin Egholm Nielsen
2007-06-04 15:12     ` Ricard Wanderlof
2007-06-06 12:06       ` Martin Egholm Nielsen [this message]
     [not found] <mailman.1398.1181133636.2239.linux-mtd@lists.infradead.org>
2007-06-06 16:07 ` Ian McDonnell
2007-06-06 20:38   ` Martin Egholm Nielsen

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='f46807$6il$1@sea.gmane.org' \
    --to=martin@egholm-nielsen.dk \
    --cc=linux-mtd@lists.infradead.org \
    /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.