public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* how to support 4096+224 page size with plat_nand ?
@ 2012-03-16 14:05 Brian Foster
  2012-03-16 23:16 ` Brian Norris
  0 siblings, 1 reply; 5+ messages in thread
From: Brian Foster @ 2012-03-16 14:05 UTC (permalink / raw)
  To: timothy.stotts; +Cc: linux-mtd

Timothy,

 We have also used 4K + 224 NAND (not sure if the
 same part or not) with ‘plat_nand’ (and also with
 our own driver which uses our chip's ECC engine),
 in a v2.6.36-based Linux kernel.  (The kernel's
 version _may_ be important, since I _think_ some
 later kernels directly support 224 (and 218 and
 maybe 256) OOB sizes;  and/or correctly detecting
 the eraseblock size.)

 We didn't bother using the full 224-byts of OOB,
 but instaed are treating the device as having
 only 128-bytes of OOB.  Works fine, albeit we
 did have to add the part to the nand_flash_ids[]
 table since the eraseblock size wasn't correctly
 detected.

cheers!
	-blf-

-- 
Brian Foster
Principal MTS, Software        |  La Ciotat, France
Maxim Integrated Products      |  Web:  http://www.maxim-ic.com/

^ permalink raw reply	[flat|nested] 5+ messages in thread
* how to support 4096+224 page size with plat_nand ?
@ 2012-03-15 16:00 STOTTS Timothy
  0 siblings, 0 replies; 5+ messages in thread
From: STOTTS Timothy @ 2012-03-15 16:00 UTC (permalink / raw)
  To: linux-mtd@lists.infradead.org

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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-03-20  2:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-16 14:05 how to support 4096+224 page size with plat_nand ? Brian Foster
2012-03-16 23:16 ` Brian Norris
2012-03-19 14:40   ` STOTTS Timothy
2012-03-20  2:26     ` Brian Norris
  -- strict thread matches above, loose matches on Subject: below --
2012-03-15 16:00 STOTTS Timothy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox