From: John Ogness <john.ogness@linutronix.de>
To: linux-mtd@lists.infradead.org
Cc: s.hauer@pengutronix.de
Subject: mxc nand i.mx35: no OOB with HW_ECC
Date: Tue, 03 Nov 2009 16:25:10 +0100 [thread overview]
Message-ID: <80bpjj7hrd.fsf@merkur.tec.linutronix.de> (raw)
Hi,
I spent a while trying to figure out why JFFS2 was getting hardware ECC
errors on an i.MX35 NANDFC with 2K pages. The problem also existed when
using nandwrite together with the -n and -o options.
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.
When reading the page back, the ECC hardware uses the garbage ECC codes
to "fix" the data, which results in corrupted data.
ubifs does not touch the oob data, which is probably why nobody cares
about (or has noticed?) this issue.
As someone who is relatively new to the MTD layer, I don't have any
suggestions about how this should be fixed.
A quick tweak to fs/jffs2/wbuf.c:jffs2_nand_flash_setup() will allow
JFFS2 to run without available oob data. Maybe there should be an
official option to allow this.
John Ogness
next reply other threads:[~2009-11-03 15:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-03 15:25 John Ogness [this message]
2009-11-11 7:22 ` mxc nand i.mx35: no OOB with HW_ECC Artem Bityutskiy
2009-11-11 9:04 ` John Ogness
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=80bpjj7hrd.fsf@merkur.tec.linutronix.de \
--to=john.ogness@linutronix.de \
--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