public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
From: John Ogness <john.ogness@linutronix.de>
To: dedekind1@gmail.com
Cc: s.hauer@pengutronix.de, linux-mtd@lists.infradead.org
Subject: Re: mxc nand i.mx35: no OOB with HW_ECC
Date: Wed, 11 Nov 2009 10:04:12 +0100	[thread overview]
Message-ID: <80ljid301f.fsf@merkur.tec.linutronix.de> (raw)
In-Reply-To: <1257924123.21596.830.camel@localhost> (Artem Bityutskiy's message of "Wed\, 11 Nov 2009 09\:22\:03 +0200")

On 2009-11-11, Artem Bityutskiy <dedekind1@gmail.com> wrote:
>> The problem is that for page sizes larger than 512 bytes, the i.MX35
>> NANDFC can only write the page and oob data together. When writing
>> the page and oob data, the ECC hardware also writes the ECC codes for
>> it. This is ok if the filesystem driver or userspace application
>> understands that only one write per page+oob is allowed.
>> 
>> But jffs2 and "nandwrite -n -o" assume that they can write the oob
>> data and the page data separately. With the recently posted
>> mxc_nand.c driver, this results in the NANDFC writing the ECC codes
>> to flash twice... with different values. This means the ECC codes
>> that end up on the flash chip are garbage.
>
> Err, the classical model is that you can write whole page (or
> sub-pages), then the driver/HW also generates ECC and stores it in the
> OOB. However, traditionally ECC codes do not occupy whole OOB, so
> there is space left. And you can write separately to that space.

That is the problem. With the i.MX35 you can _not_ write separately to
that leftover space (at some other time) because the hardware ECC codes
are calculated based on the values within that leftover space as
well. The OOB and page data must be written simultaneously, at which
point the ECC codes over the OOB and page data will also be
written. Afterwards, neither the OOB data nor the page data may be
written to again until the block has been erased.

> Your case is confusing. If your ECC occupies whole OOB, your driver
> should simply prohibit writing to the OOB. If it does not, it is your
> drivers' fault.

Perhaps it is the "fault" of the hardware ECC that is including the OOB
data when calculating the ECC codes. If leftover OOB space and page data
are written simultaneously, there is no problem. The problem arises when
they are written separately, which I suppose is the classical model.

> Really, your driver should either correctly support the classical
> model, or it should simply not support OOB writing at all. Not
> something in the middle, right?

Agreed. The i.MX35 NANDFC driver should not support OOB writing (if
hardware ECC is used) because its ECC hardware is not capable of
supporting the classical model.

John Ogness

  reply	other threads:[~2009-11-11  9:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-03 15:25 mxc nand i.mx35: no OOB with HW_ECC John Ogness
2009-11-11  7:22 ` Artem Bityutskiy
2009-11-11  9:04   ` John Ogness [this message]
2009-11-12  9:35 ` Sascha Hauer
2009-11-12 10:28 ` Sascha Hauer

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=80ljid301f.fsf@merkur.tec.linutronix.de \
    --to=john.ogness@linutronix.de \
    --cc=dedekind1@gmail.com \
    --cc=linux-mtd@lists.infradead.org \
    --cc=s.hauer@pengutronix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox