NAND with an OOB size of 128
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