NAND with an OOB size of 128
Francesco Lodi - Tecna Srl
francesco.lodi at tecnasrl.com
Sun Feb 8 18:24:39 EST 2009
Hi all,
I am trying to make this Micron NAND flash to work:
http://www.micron.com/products/partdetail?part=MT29F32G08QAAWP
it is a 32 gigabit divided into two 16 gigabit device and now, for
simplicity, I am working only on the first one.
The kernel I am using is the last 2.6.28.4.
The flash has a spare area of 218 bytes so the MTD driver calculate an
OOB size of 128 bytes and then it throws a BUG in the function
nand_scan_tail ("no oob scheme defined for oobsize 128").
I have tried to add this schema at the beginning on nand_base.c:
static struct nand_ecclayout nand_oob_128 = {
.eccbytes = 48,
.eccpos = {
80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127},
.oobfree = {
{.offset = 2,
.length = 78}}
};
and then adding:
case 128:
chip->ecc.layout = &nand_oob_128;
in nand_scan_tail.
Doing that resolve the kernel BUG but flash_eraseall claims that it
can't read oobinfo.
I have resolved also this problem by expanding the array eccpos in the
structure nand_oobinfo to 64 even in the kernel than in the user space
utility.
Now flash_eraseall -j works fine but when I mount the device it ends with:
Cowardly refusing to erase block on filesystem with no valid JFFS2 node
After erasing the flash without the -j option I was able to mount the
device but whenever I copy a file into it I have a kernel BUG at
fs/jffs2/file.c:251
Now I am stuck at this point and I am asking if you have any suggestion
on how to use this flash.
Thanks,
Francesco
More information about the linux-mtd
mailing list