summaryrefslogtreecommitdiff
path: root/cpu/arm926ejs/at91/lowlevel_init.S
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-07 16:27:01 -0500
committerScott Wood <scottwood@freescale.com>2009-11-13 16:56:17 -0600
commit7e86661cd777eec1e81c5e57c468e81138fda983 (patch)
tree89fbc4f13474f6cb6de521d312128951ce798358 /cpu/arm926ejs/at91/lowlevel_init.S
parent5df3c2b62cebaa0ddb2817364f93726e5dbe3525 (diff)
downloadu-boot-imx-7e86661cd777eec1e81c5e57c468e81138fda983.zip
u-boot-imx-7e86661cd777eec1e81c5e57c468e81138fda983.tar.gz
u-boot-imx-7e86661cd777eec1e81c5e57c468e81138fda983.tar.bz2
NAND: fix "raw" reads with ECC syndrome layouts
The syndrome based page read/write routines store ECC, and possibly other "OOB" data, right after each chunk of ECC'd data. With ECC chunk size of 512 bytes and a large page (2KiB) NAND, the layout is: data-0 OOB-0 data-1 OOB-1 data-2 OOB-2 data-3 OOB-3 OOB-leftover Where OOBx is (prepad, ECC, postpad). However, the current "raw" routines use a traditional layout -- data OOB, disregarding the prepad and postpad values -- so when they're used with that type of ECC hardware, those calls mix up the data and OOB. Which means, in particular, that bad block tables won't be found on startup, with data corruption and related chaos ensuing. The current syndrome-based drivers in mainline all seem to use one chunk per page; presumably they haven't noticed such bugs. Fix this, by adding read/write page_raw_syndrome() routines as siblings of the existing non-raw routines; "raw" just means to bypass the ECC computations, not change data and OOB layout. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'cpu/arm926ejs/at91/lowlevel_init.S')
0 files changed, 0 insertions, 0 deletions