how to support 4096+224 page size with plat_nand ?

STOTTS Timothy timothy.stotts at transport.alstom.com
Thu Mar 15 12:00:33 EDT 2012


I am looking to add support for the NAND Flash chip MT29F16G08ABABA to a board implementation of the platform NAND driver plat_nand.c .

I have followed the instructions available for my architecture at:
http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:drivers:bfin_async_nand

The chip has a page size of 4096+224.

According to the manufacturer, all blocks come preset as either 0xFF or 0x00. If 0xFF, the block is erased and good. If 0x00, the block was factory-determined to be bad.

It was necessary to make the following changes to the NAND subsystem for OOB of size 224.
=== modified file 'drivers/mtd/nand/nand_base.c'
--- drivers/mtd/nand/nand_base.c        2011-12-28 19:57:41 +0000
+++ drivers/mtd/nand/nand_base.c        2012-03-15 15:08:23 +0000
@@ -3256,6 +3256,11 @@
                case 128:
                        chip->ecc.layout = &nand_oob_128;
                        break;
+               case 224:
+                       chip->ecc.layout = &nand_oob_128;
+                       break;
                default:
                        printk(KERN_WARNING "No oob scheme defined for "
                               "oobsize %d\n", mtd->oobsize);

All kernel MTD Tests (kernel modules) run without error.
MTD nandtest executable runs without error.

Works as expected: ubiformat /dev/mtd4

Does not work as expected: ubiattach /dev/ubi_ctrl -m 4
root:~> ubiattach /dev/ubi_ctrl -m 4
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size:   524288 bytes (512 KiB)
UBI: logical eraseblock size:    520192 bytes
UBI: smallest flash I/O unit:    4096
UBI: sub-page size:              1024
UBI: VID header offset:          1024 (aligned 1024)
UBI: data offset:                4096
uncorrectable error :
uncorrectable error :
...
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
UBI: max. sequence number:       0
UBI: attached mtd4 to ubi0
UBI: MTD device name:            "file system(nand)"
UBI: MTD device size:            2048 MiB
UBI: number of good PEBs:        4096
UBI: number of bad PEBs:         0
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     0
UBI: available PEBs:             4052
UBI: total number of reserved PEBs: 44
UBI: number of PEBs reserved for bad PEB handling: 40
UBI: max/mean erase counter: 0/0
UBI: image sequence number:  760250844
UBI: background thread "ubi_bgt0d" started, PID 482
UBI device number 0, total 4096 LEBs (2130706432 bytes, 2.0 GiB), available 4052 LEBs (2107817984 bytes, 2.0 GiB), LEB size 520192 bytes (508.0 KiB)

I am assuming that the errors are due to an incorrect OOB layout, or the ECC not being written correctly by ubiformat. What can I do to define the correct OOB layout for a chip with OOB size of 224 bytes?

Works as expected: ubimkvol /dev/ubi0 -N nand -m

root:~> ubimkvol /dev/ubi0 -N nand -m
Set volume size to 2107817984
Volume ID 0, size 4052 LEBs (2107817984 bytes, 2.0 GiB), LEB size 520192 bytes (508.0 KiB), dynamic, name "nand", alignment 1

Does not work as expected: mount -t ubifs ubi0:nand /mnt

root:~> mount -t ubifs ubi0:nand /mnt
UBIFS: default file-system created
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
uncorrectable error :
UBIFS: mounted UBI device 0, volume 0, name "nand"
UBIFS: file system size:   2102616064 bytes (2053336 KiB, 2005 MiB, 4042 LEBs)
UBIFS: journal size:       33292288 bytes (32512 KiB, 31 MiB, 64 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  4952683 bytes (4836 KiB)

Regards,
Timothy Stotts


________________________________
CONFIDENTIALITY : This e-mail and any attachments are confidential and may be privileged. If you are not a named recipient, please notify the sender immediately and do not disclose the contents to another person, use it for any purpose or store or copy the information in any medium.



More information about the linux-mtd mailing list