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