This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Failing mtd pagetest with 2.6.37 on DM3730 board with NAND flash (Micron MT29C4G48MAZAPAKQ-5)

Other Parts Discussed in Thread: DM3730

Hi,

I posted this earlier on the Android forum. Perhaps it is better suited for this Linux forum. I'm using the 2.6.37 kernel that came with rowboat devkit ICS on a DM3730 board (similar to Beagle-XM) which uses Micron MT29C4G48MAZAPAKQ-5) 256MB LPDDR/512MB NAND (same as used in beagleboard C5). I was running into problems with ubifs on this. ( http://permalink.gmane.org/gmane.linux.drivers.mtd/42868 , has kernel console logs, .config, etc)

So I started running the mtd tests. I found that most tests are passing but pagetest, oobtest, and subpagetest are failing. Does this mean I have hardware issues or is it possible I have errors in my configuration/setup or known issue in 2.6.37 ics kernel? I would appreciate any advice/suggestions.

Thanks,

jayakumar

root@android:/mtdtest # cat /proc/mtd

dev:    size   erasesize  name
mtd0: 00080000 00020000 "X-Loader"
mtd1: 001e0000 00020000 "U-Boot"
mtd2: 00020000 00020000 "U-Boot Env"
mtd3: 00500000 00020000 "Kernel"
mtd4: 1f880000 00020000 "File System"

root@android:/mtdtest # insmod mtd_speedtest.ko dev=4

=================================================
mtd_speedtest: MTD device: 4
mtd_speedtest: MTD device size 529006592, eraseblock size 131072, page
size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB
size 64
mtd_speedtest: scanning for bad eraseblocks
mtd_speedtest: scanned 4036 eraseblocks, 0 are bad
mtd_speedtest: testing eraseblock write speed
mtd_speedtest: eraseblock write speed is 6376 KiB/s
mtd_speedtest: testing eraseblock read speed
mtd_speedtest: eraseblock read speed is 11027 KiB/s
mtd_speedtest: testing page write speed
mtd_speedtest: page write speed is 6355 KiB/s
mtd_speedtest: testing page read speed
mtd_speedtest: page read speed is 10983 KiB/s
mtd_speedtest: testing 2 page write speed
mtd_speedtest: 2 page write speed is 6364 KiB/s
mtd_speedtest: testing 2 page read speed
mtd_speedtest: 2 page read speed is 11008 KiB/s
mtd_speedtest: Testing erase speed
mtd_speedtest: erase speed is 156785 KiB/s
mtd_speedtest: finished
=================================================


root@localhost:/mtdtest# insmod mtd_nandecctest.ko
mtd_nandecctest: ok - nand-ecc-256
mtd_nandecctest: ok - nand-ecc-512


root@localhost:/mtdtest# insmod ./mtd_stresstest.ko dev=4 count=100

=================================================
mtd_stresstest: MTD device: 4
mtd_stresstest: MTD device size 529006592, eraseblock size 131072,
page size 2048, count of eraseblocks 4036, pages per eraseblock 64,
OOB size 64
mtd_stresstest: scanning for bad eraseblocks
mtd_stresstest: scanned 4036 eraseblocks, 0 are bad
mtd_stresstest: doing operations
mtd_stresstest: 0 operations done
mtd_stresstest: finished, 100 operations done
=================================================


root@localhost:/mtdtest# insmod ./mtd_readtest.ko dev=4

=================================================
mtd_readtest: MTD device: 4
mtd_readtest: MTD device size 529006592, eraseblock size 131072, page
size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB
size 64
mtd_readtest: scanning for bad eraseblocks
mtd_readtest: scanned 4036 eraseblocks, 0 are bad
mtd_readtest: testing page read
mtd_readtest: finished
=================================================


root@localhost:/mtdtest# insmod ./mtd_pagetest.ko dev=4

=================================================
mtd_pagetest: MTD device: 4
mtd_pagetest: MTD device size 529006592, eraseblock size 131072, page
size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB
size 64
mtd_pagetest: scanning for bad eraseblocks
mtd_pagetest: scanned 4036 eraseblocks, 0 are bad
mtd_pagetest: erasing whole device
mtd_pagetest: erased 4036 eraseblocks
mtd_pagetest: writing whole device
mtd_pagetest: written up to eraseblock 0
mtd_pagetest: written up to eraseblock 256
mtd_pagetest: written up to eraseblock 512
mtd_pagetest: written up to eraseblock 768
mtd_pagetest: written up to eraseblock 1024
mtd_pagetest: written up to eraseblock 1280
mtd_pagetest: written up to eraseblock 1536
mtd_pagetest: written up to eraseblock 1792
mtd_pagetest: written up to eraseblock 2048
mtd_pagetest: written up to eraseblock 2304
mtd_pagetest: written up to eraseblock 2560
mtd_pagetest: written up to eraseblock 2816
mtd_pagetest: written up to eraseblock 3072
mtd_pagetest: written up to eraseblock 3328
mtd_pagetest: written up to eraseblock 3584
mtd_pagetest: written up to eraseblock 3840
mtd_pagetest: written 4036 eraseblocks
mtd_pagetest: verifying all eraseblocks
mtd_pagetest: verified up to eraseblock 0
mtd_pagetest: verified up to eraseblock 256
mtd_pagetest: error: verify failed at 0x2232000
mtd_pagetest: error: verify failed at 0x2232800
mtd_pagetest: verified up to eraseblock 512
mtd_pagetest: verified up to eraseblock 768
mtd_pagetest: error: verify failed at 0x6d3f800
mtd_pagetest: error: verify failed at 0x6d40000
mtd_pagetest: error: verify failed at 0x78bf800
mtd_pagetest: error: verify failed at 0x78c0000
mtd_pagetest: error: verify failed at 0x7a1f800
mtd_pagetest: error: verify failed at 0x7a20000
mtd_pagetest: verified up to eraseblock 1024
mtd_pagetest: error: verify failed at 0x861f800
mtd_pagetest: error: verify failed at 0x8620000
mtd_pagetest: error: read failed at 0x8dbf800
mtd_pagetest: error -74 occurred
=================================================
insmod: can't insert './mtd_pagetest.ko': Bad message


root@localhost:/mtdtest# insmod ./mtd_oobtest.ko  dev=4

=================================================
mtd_oobtest: MTD device: 4
mtd_oobtest: MTD device size 529006592, eraseblock size 131072, page
size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB
size 64
mtd_oobtest: scanning for bad eraseblocks
mtd_oobtest: scanned 4036 eraseblocks, 0 are bad
mtd_oobtest: test 1 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 4036 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 256
mtd_oobtest: written up to eraseblock 512
mtd_oobtest: written up to eraseblock 768
mtd_oobtest: written up to eraseblock 1024
mtd_oobtest: written up to eraseblock 1280
mtd_oobtest: written up to eraseblock 1536
mtd_oobtest: written up to eraseblock 1792
mtd_oobtest: written up to eraseblock 2048
mtd_oobtest: written up to eraseblock 2304
mtd_oobtest: written up to eraseblock 2560
mtd_oobtest: written up to eraseblock 2816
mtd_oobtest: written up to eraseblock 3072
mtd_oobtest: written up to eraseblock 3328
mtd_oobtest: written up to eraseblock 3584
mtd_oobtest: written up to eraseblock 3840
mtd_oobtest: written 4036 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified up to eraseblock 256
mtd_oobtest: verified up to eraseblock 512
mtd_oobtest: verified up to eraseblock 768
mtd_oobtest: verified up to eraseblock 1024
mtd_oobtest: verified up to eraseblock 1280
mtd_oobtest: verified up to eraseblock 1536
mtd_oobtest: verified up to eraseblock 1792
mtd_oobtest: verified up to eraseblock 2048
mtd_oobtest: verified up to eraseblock 2304
mtd_oobtest: verified up to eraseblock 2560
mtd_oobtest: verified up to eraseblock 2816
mtd_oobtest: verified up to eraseblock 3072
mtd_oobtest: verified up to eraseblock 3328
mtd_oobtest: verified up to eraseblock 3584
mtd_oobtest: verified up to eraseblock 3840
mtd_oobtest: verified 4036 eraseblocks
mtd_oobtest: test 2 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 4036 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 256
mtd_oobtest: written up to eraseblock 512
mtd_oobtest: written up to eraseblock 768
mtd_oobtest: written up to eraseblock 1024
mtd_oobtest: written up to eraseblock 1280
mtd_oobtest: written up to eraseblock 1536
mtd_oobtest: written up to eraseblock 1792
mtd_oobtest: written up to eraseblock 2048
mtd_oobtest: written up to eraseblock 2304
mtd_oobtest: written up to eraseblock 2560
mtd_oobtest: written up to eraseblock 2816
mtd_oobtest: written up to eraseblock 3072
mtd_oobtest: written up to eraseblock 3328
mtd_oobtest: written up to eraseblock 3584
mtd_oobtest: written up to eraseblock 3840
mtd_oobtest: written 4036 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: error: verify failed at 0x1880000
mtd_oobtest: error: verify failed at 0x1a20000
mtd_oobtest: verified up to eraseblock 256
mtd_oobtest: error: verify failed at 0x2700000
mtd_oobtest: error: verify failed at 0x2ea0000
mtd_oobtest: error: verify failed at 0x3100000
mtd_oobtest: verified up to eraseblock 512
mtd_oobtest: error: verify failed at 0x4260000
mtd_oobtest: error: verify failed at 0x4520000
mtd_oobtest: verified up to eraseblock 768
mtd_oobtest: error: verify failed at 0x6a40000
mtd_oobtest: verified up to eraseblock 1024
mtd_oobtest: error: verify failed at 0x8160000
mtd_oobtest: error: verify failed at 0x8280000
mtd_oobtest: error: verify failed at 0x9460000
mtd_oobtest: error: verify failed at 0x95e0000
mtd_oobtest: error: verify failed at 0x9c20000
mtd_oobtest: error: verify failed at 0x9fe0000
mtd_oobtest: verified up to eraseblock 1280
mtd_oobtest: error: verify failed at 0xba60000
mtd_oobtest: verified up to eraseblock 1536
mtd_oobtest: error: verify failed at 0xc1a0000
mtd_oobtest: error: verify failed at 0xc2a0000
mtd_oobtest: error: verify failed at 0xd040000
mtd_oobtest: error: verify failed at 0xd0e0000
mtd_oobtest: error: verify failed at 0xd1e0000
mtd_oobtest: error: verify failed at 0xd820000
mtd_oobtest: verified up to eraseblock 1792
mtd_oobtest: error: verify failed at 0xe5a0000
mtd_oobtest: error: verify failed at 0xea00000
mtd_oobtest: verified up to eraseblock 2048
mtd_oobtest: error: verify failed at 0x104c0000
mtd_oobtest: error: verify failed at 0x10aa0000
mtd_oobtest: error: verify failed at 0x10c60000
mtd_oobtest: error: verify failed at 0x10e40000
mtd_oobtest: error: verify failed at 0x10f20000
mtd_oobtest: error: verify failed at 0x115a0000
mtd_oobtest: error: verify failed at 0x11740000
mtd_oobtest: verified up to eraseblock 2304
mtd_oobtest: error: verify failed at 0x12840000
mtd_oobtest: error: verify failed at 0x13c00000
mtd_oobtest: verified up to eraseblock 2560
mtd_oobtest: error: verify failed at 0x14d00000
mtd_oobtest: error: verify failed at 0x15020000
mtd_oobtest: error: verify failed at 0x15420000
mtd_oobtest: error: verify failed at 0x15640000
mtd_oobtest: error: verify failed at 0x15e80000
mtd_oobtest: verified up to eraseblock 2816
mtd_oobtest: error: verify failed at 0x16520000
mtd_oobtest: error: verify failed at 0x16ea0000
mtd_oobtest: error: verify failed at 0x17620000
mtd_oobtest: verified up to eraseblock 3072
mtd_oobtest: error: verify failed at 0x18900000
mtd_oobtest: error: verify failed at 0x189c0000
mtd_oobtest: error: verify failed at 0x18ce0000
mtd_oobtest: error: verify failed at 0x18d00000
mtd_oobtest: error: verify failed at 0x18f40000
mtd_oobtest: error: verify failed at 0x18fc0000
mtd_oobtest: error: verify failed at 0x18fe0000
mtd_oobtest: error: verify failed at 0x199c0000
mtd_oobtest: error: verify failed at 0x19ce0000
mtd_oobtest: error: verify failed at 0x19d20000
mtd_oobtest: error: verify failed at 0x19f60000
mtd_oobtest: verified up to eraseblock 3328
mtd_oobtest: error: verify failed at 0x1a260000
mtd_oobtest: error: verify failed at 0x1b740000
mtd_oobtest: error: verify failed at 0x1be00000
mtd_oobtest: verified up to eraseblock 3584
mtd_oobtest: error: verify failed at 0x1c3a0000
mtd_oobtest: error: verify failed at 0x1cb40000
mtd_oobtest: error: verify failed at 0x1cc60000
mtd_oobtest: error: verify failed at 0x1cfc0000
mtd_oobtest: error: verify failed at 0x1d500000
mtd_oobtest: error: verify failed at 0x1d8e0000
mtd_oobtest: error: verify failed at 0x1d940000
mtd_oobtest: error: verify failed at 0x1dca0000
mtd_oobtest: verified up to eraseblock 3840
mtd_oobtest: error: verify failed at 0x1eb80000
mtd_oobtest: error: verify failed at 0x1ebc0000
mtd_oobtest: error: verify failed at 0x1ec40000
mtd_oobtest: verified 4036 eraseblocks
mtd_oobtest: test 3 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 4036 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 256
mtd_oobtest: written up to eraseblock 512
mtd_oobtest: written up to eraseblock 768
mtd_oobtest: written up to eraseblock 1024
mtd_oobtest: written up to eraseblock 1280
mtd_oobtest: written up to eraseblock 1536
mtd_oobtest: written up to eraseblock 1792
mtd_oobtest: written up to eraseblock 2048
mtd_oobtest: written up to eraseblock 2304
mtd_oobtest: written up to eraseblock 2560
mtd_oobtest: written up to eraseblock 2816
mtd_oobtest: written up to eraseblock 3072
mtd_oobtest: written up to eraseblock 3328
mtd_oobtest: written up to eraseblock 3584
mtd_oobtest: written up to eraseblock 3840
mtd_oobtest: written 4036 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified up to eraseblock 256
mtd_oobtest: verified up to eraseblock 512
mtd_oobtest: verified up to eraseblock 768
mtd_oobtest: error: verify failed at 0x79bc800
mtd_oobtest: verified up to eraseblock 1024
mtd_oobtest: verified up to eraseblock 1280
mtd_oobtest: verified up to eraseblock 1536
mtd_oobtest: verified up to eraseblock 1792
mtd_oobtest: verified up to eraseblock 2048
mtd_oobtest: error: verify failed at 0x10126000
mtd_oobtest: error: verify failed at 0x10126000
mtd_oobtest: error: verify failed at 0x1019d800
mtd_oobtest: error: verify failed at 0x1019d800
mtd_oobtest: error: verify failed at 0x10ac2800
mtd_oobtest: error: verify failed at 0x10ac2800
mtd_oobtest: verified up to eraseblock 2304
mtd_oobtest: verified up to eraseblock 2560
mtd_oobtest: verified up to eraseblock 2816
mtd_oobtest: verified up to eraseblock 3072
mtd_oobtest: error: verify failed at 0x19319000
mtd_oobtest: error: verify failed at 0x19319000
mtd_oobtest: verified up to eraseblock 3328
mtd_oobtest: error: verify failed at 0x1bd23800
mtd_oobtest: error: verify failed at 0x1bd23800
mtd_oobtest: verified up to eraseblock 3584
mtd_oobtest: error: verify failed at 0x1c2fe000
mtd_oobtest: error: verify failed at 0x1c2fe000
mtd_oobtest: verified up to eraseblock 3840
mtd_oobtest: verified 4036 eraseblocks
mtd_oobtest: test 4 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 4036 eraseblocks
mtd_oobtest: attempting to start write past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to start read past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: test 5 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 4036 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 256
mtd_oobtest: written up to eraseblock 256
mtd_oobtest: written up to eraseblock 512
mtd_oobtest: written up to eraseblock 512
mtd_oobtest: written up to eraseblock 768
mtd_oobtest: written up to eraseblock 768
mtd_oobtest: written up to eraseblock 1024
mtd_oobtest: written up to eraseblock 1024
mtd_oobtest: written up to eraseblock 1280
mtd_oobtest: written up to eraseblock 1280
mtd_oobtest: written up to eraseblock 1536
mtd_oobtest: written up to eraseblock 1536
mtd_oobtest: written up to eraseblock 1792
mtd_oobtest: written up to eraseblock 1792
mtd_oobtest: written up to eraseblock 2048
mtd_oobtest: written up to eraseblock 2048
mtd_oobtest: written up to eraseblock 2304
mtd_oobtest: written up to eraseblock 2304
mtd_oobtest: written up to eraseblock 2560
mtd_oobtest: written up to eraseblock 2560
mtd_oobtest: written up to eraseblock 2816
mtd_oobtest: written up to eraseblock 2816
mtd_oobtest: written up to eraseblock 3072
mtd_oobtest: written up to eraseblock 3072
mtd_oobtest: written up to eraseblock 3328
mtd_oobtest: written up to eraseblock 3328
mtd_oobtest: written up to eraseblock 3584
mtd_oobtest: written up to eraseblock 3584
mtd_oobtest: written up to eraseblock 3840
mtd_oobtest: written up to eraseblock 3840
mtd_oobtest: written 4035 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified up to eraseblock 256
mtd_oobtest: verified up to eraseblock 512
mtd_oobtest: verified up to eraseblock 768
mtd_oobtest: verified up to eraseblock 1024
mtd_oobtest: verified up to eraseblock 1280
mtd_oobtest: verified up to eraseblock 1536
mtd_oobtest: verified up to eraseblock 1792
mtd_oobtest: verified up to eraseblock 2048
mtd_oobtest: verified up to eraseblock 2304
mtd_oobtest: verified up to eraseblock 2560
mtd_oobtest: verified up to eraseblock 2816
mtd_oobtest: verified up to eraseblock 3072
mtd_oobtest: verified up to eraseblock 3328
mtd_oobtest: verified up to eraseblock 3584
mtd_oobtest: verified up to eraseblock 3840
mtd_oobtest: verified 4035 eraseblocks
mtd_oobtest: finished with 78 errors
=================================================


root@localhost:/mtdtest# insmod ./mtd_subpagetest.ko dev=4

=================================================
mtd_subpagetest: MTD device: 4
mtd_subpagetest: MTD device size 529006592, eraseblock size 131072,
page size 2048, subpage size 512, count of eraseblocks 0, pages per
eraseblock 0, OOB size 64
mtd_subpagetest: scanning for bad eraseblocks
mtd_subpagetest: scanned 4036 eraseblocks, 0 are bad
mtd_subpagetest: erasing whole device
mtd_subpagetest: erased 4036 eraseblocks
mtd_subpagetest: writing whole device
mtd_subpagetest: written up to eraseblock 0
mtd_subpagetest: written up to eraseblock 256
mtd_subpagetest: written up to eraseblock 512
mtd_subpagetest: written up to eraseblock 768
mtd_subpagetest: written up to eraseblock 1024
mtd_subpagetest: written up to eraseblock 1280
mtd_subpagetest: written up to eraseblock 1536
mtd_subpagetest: written up to eraseblock 1792
mtd_subpagetest: written up to eraseblock 2048
mtd_subpagetest: written up to eraseblock 2304
mtd_subpagetest: written up to eraseblock 2560
mtd_subpagetest: written up to eraseblock 2816
mtd_subpagetest: written up to eraseblock 3072
mtd_subpagetest: written up to eraseblock 3328
mtd_subpagetest: written up to eraseblock 3584
mtd_subpagetest: written up to eraseblock 3840
mtd_subpagetest: written 4036 eraseblocks
mtd_subpagetest: verifying all eraseblocks
mtd_subpagetest: error: read failed at 0x0
mtd_subpagetest: error -74 occurred
=================================================
insmod: can't insert './mtd_subpagetest.ko': Bad message

  • One other thing that I noticed. With the standard Beagleboard-C5 image which uses 2.6.32, the kernel log shows:

    [ 14.375915] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron NAND 512MiB 1,8V 16-bit)

    whereas 2.6.37 shows:

    NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron )

    This message comes from:

    kernel/drivers/mtd/nand/nand_base.c

    printk(KERN_INFO "NAND device: Manufacturer ID:"
    " 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id, *dev_id,
    nand_manuf_ids[maf_idx].name,
    chip->onfi_version ? type->name : chip->onfi_params.model);

    I'm wondering why in 2.6.37, the NAND 512MiB 1,8V 16-bit isn't getting found. 

    Continuing further. In 2.6.32, the ubi mount shows:

    [ 14.637207] UBI: attaching mtd4 to ubi0
    [ 14.641174] UBI: physical eraseblock size: 131072 bytes (128 KiB)
    [ 14.647460] UBI: logical eraseblock size: 129024 bytes
    [ 14.652954] UBI: smallest flash I/O unit: 2048
    [ 14.657714] UBI: sub-page size: 512
    [ 14.662353] UBI: VID header offset: 512 (aligned 512)
    [ 14.668243] UBI: data offset: 2048
    [ 15.663940] UBI: attached mtd4 to ubi0
    [ 15.667816] UBI: MTD device name: "File System"
    [ 15.673370] UBI: MTD device size: 505 MiB
    [ 15.678375] UBI: number of good PEBs: 4044
    [ 15.683135] UBI: number of bad PEBs: 0
    [ 15.687652] UBI: max. allowed volumes: 128
    [ 15.692291] UBI: wear-leveling threshold: 4096
    [ 15.697052] UBI: number of internal volumes: 1
    [ 15.701538] UBI: number of user volumes: 1
    [ 15.706024] UBI: available PEBs: 0
    [ 15.710510] UBI: total number of reserved PEBs: 4044
    [ 15.715515] UBI: number of PEBs reserved for bad PEB handling: 40
    [ 15.721679] UBI: max/mean erase counter: 45/0
    [ 15.726074] UBI: image sequence number: 1857994241

    whereas in 2.6.37, this is:

    UBI: attaching mtd4 to ubi0
    UBI: physical eraseblock size: 131072 bytes (128 KiB)
    UBI: logical eraseblock size: 126976 bytes
    UBI: smallest flash I/O unit: 2048
    UBI: sub-page size: 512
    UBI: VID header offset: 2048 (aligned 2048)
    UBI: data offset: 4096
    UBI: max. sequence number: 0
    UBI: volume 0 ("rootfs") re-sized from 3717 to 3952 LEBs
    UBI: attached mtd4 to ubi0
    UBI: MTD device name: "File System"
    UBI: MTD device size: 504 MiB
    UBI: number of good PEBs: 4036
    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: 1
    UBI: available PEBs: 0
    UBI: total number of reserved PEBs: 4036
    UBI: number of PEBs reserved for bad PEB handling: 80
    UBI: max/mean erase counter: 1/0
    UBI: image sequence number: 245964382

  • This problem is specific to the 2.6.37 ICS kernel and it does not occur with 2.6.39 from OE. I have found that there are several missing patches from the 2.6.37 ics tree and suspect there are more needed. See below for list of missing patches so far. I would welcome TI's feedback on whether they plan to release a 2.6.39 ics tree. Any suggestions on how to move forward?

    mtd: nand: Fix integer overflow in ONFI detection of chips >= 4GiB
    git cherry-pick 4ccb3b4497ce01fab4933704fe21581e30fda1a5
    mtd: nand: rearrange ONFI revision checking, add ONFI 2.3
    git cherry-pick b7b1a29d94c17e4341856381bccb4d17495bea60
    mtd: nand: choose correct chip name (ONFI bug)
    git cherry-pick 0b524fb9314dc852d6a029296545ddbb17709a8b
    test@lucid1004clnoeandroidubifs:~/rowboat-android/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel$
    git am /home/test/oe/setup-scripts/sources/meta-ti/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0025-omap-Fix-mtd-subpage-read-alignment.patch
    Applying: omap: Fix mtd subpage read alignment
    test@lucid1004clnoeandroidubifs:~/rowboat-android/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel$
    git am /home/test/oe/setup-scripts/sources/meta-ti/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0026-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch
    Applying: mtd: nand: omap2: Force all buffer reads to u32 alignment
    test@lucid1004clnoeandroidubifs:~/rowboat-android/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel$
    git am /home/test/oe/setup-scripts/sources/meta-ti/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0027-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch
    Applying: omap : nand : fix subpage ecc issue with prefetch

    After those patches, mtd_pagetest now gives only 2 errors rather than
    the previous 4.

    It looks like a big task to figure out which other difference between
    the failing ics 2.6.37 and working oe 2.6.39 needs to be pulled in to fix the issue completely.

  • Additional data:

    - mtd_pagetest failure on 2.6.37 ics is consistent on both Beagleboard C5 and on a DM3730 board. 

    - mtd_pagetest in same environment (same u-boot, same MLO) passes with 2.6.39oe on both Beagleboard C5 and DM3730 board

    Conclusion: problem is definitely in 2.6.37 ics. 

    I am trying to figure out which patch between 2.6.37 ics and 2.6.39oe needs to be applied in order to fix the issue. I have attached the current diff between the 2 trees. I would appreciate any advice/suggestions from TI since the omap2.c changes all come from TI engineers.

  • Further data and logs here:

    https://groups.google.com/d/msg/rowboat/fvF7laItBOk/iG4XCSnOt4QJ

    After digging, I think the area of code that is suspect is the nand ecc code. The following commit in 2.6.37 ics is not present in 2.6.39oe where bch is completely different.

    commit ac8a028cf0e6db713fb4bcf3389d28799ceebf6c 
    Author: Sukumar Ghorai <s-gh...@ti.com
    Date:   Thu Jan 20 00:18:00 2011 +0000 

        omap3: nand: bch ecc support added 

    It appears Sukumar has left TI. Would really appreciate help on this issue.

  • Hi Jaya,

    You don't say, at least that I saw, whether you're using BCH4 or BCH8.  We're using BCH8, and had to make the following change to get BCH8 to work.  The code, after detecting that a bit correction was needed, made the correction in the wrong byte.  My omap2.c module is a hybrid of TI's distributions for the am35x (Linux 2.6.37) and am335x (Linux 3.2).

      Original code (module omap2.c, function omap_correct_data(), within case OMAP_ECC_BCH8_CODE_HW):
         byte_pos  = (BCH8_ECC_MAX - err_loc[j] - 1) / 8;
      Modified code:
         byte_pos = err_loc[j] / 8;

    This is the second ECC problem I've run into (the first was with Hamming 1 bit) where the problem was so blatant that it was clear that TI had never tested the code properly.  That raises my concern about TI's ECC implementations in general.  No BCH8 correction would work with the code like it was, and the same was true for the Hamming problem I ran into.  Both problems caused verify failures in mtd_pagetest.  I added logs so I could see the path the code was taking, and once I made this change, expected corrections are being made, and mtd_pagetest always passes.

    As a side note, I'm still having some ubifs issues, and don't know if that's related to remaining ECC issues or not.  If I have to get back into BCH code, I'll seriously consider dumping the TI BCH implementation altogether, and switching over to a software based solution.  Others have reported that the software solution works.  Micron has a decent white paper on doing that, and it appears the needed software is present in a later Linux distribution such as 3.3.  You can find the article on the Internet by searching for 'tn2971_software_bch_ecc_on_linux.pdf'.

    Ron

  • Hi Ron,

    Thanks for your reply. Good question on which ECC is being used. I'm testing on Beagleboard-C5, and I've left everything in the 2.6.37 kernel the same as what was in TI's tree. So, I put some debug printks in omap_correct_data() and what I see with 2.6.37 (the failing case) is:

    ecc mode=2, opt=1

    which means:

    info->nand.ecc.mode == NAND_ECC_HW and info->ecc_opt == OMAP_ECC_HAMMING_CODE_HW

    This looks to be the default since omap_nand_probe() sets:

    pdata->ecc_opt = OMAP_ECC_HAMMING_CODE_HW;
    info->ecc_opt = pdata->ecc_opt;

    info->nand.ecc.mode = NAND_ECC_HW;

    I did the same with the working case, 2.6.39, and I see:

    ecc_opt = 0 which is OMAP_ECC_HAMMING_CODE_DEFAULT so ecc.mode == NAND_ECC_SOFT

    In 2.6.39, this appears to come from board-flash.c

    __init board_nand_init(struct mtd_partition *nand_parts,
    u8 nr_parts, u8 cs, int nand_type)
    {...

    board_nand_data.ecc_opt = OMAP_ECC_HAMMING_CODE_DEFAULT;

    whereas in 2.6.37, this is set to use hw:

    if(cpu_is_omap3630())
    board_nand_data.ecc_opt = OMAP_ECC_HAMMING_CODE_HW;

    I think I should just disable this in 2.6.37, and just use software via OMAP_ECC_HAMMING_CODE_DEFAULT. I'll report back on how that goes.

    Thanks,

    jayakumar

  • Just a quick note. I forced ecc_opt to be OMAP_ECC_HAMMING_CODE_DEFAULT and this permits mtd_pagetest to pass cleanly. I haven't measured how much performance impact this has.

  • I still get mtd_oobtest (i think ubi doesn't need oob) failures but the other tests pass. Speedtest reports write/read is 6306/10810KiBps. Previous result was 6364/11008KiBps so seems okay.

    In case it is of value, here are my complete results:

    root@android:/mtdtest # insmod mtd_speedtest.ko dev=4 

    =================================================
    mtd_speedtest: MTD device: 4
    mtd_speedtest: MTD device size 529006592, eraseblock size 131072, page size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB size 64
    mtd_speedtest: scanning for bad eraseblocks
    mtd_speedtest: scanned 4036 eraseblocks, 0 are bad
    mtd_speedtest: testing eraseblock write speed
    mtd_speedtest: eraseblock write speed is 5185 KiB/s
    mtd_speedtest: testing eraseblock read speed
    mtd_speedtest: eraseblock read speed is 10867 KiB/s
    mtd_speedtest: testing page write speed
    mtd_speedtest: page write speed is 6290 KiB/s
    mtd_speedtest: testing page read speed
    mtd_speedtest: page read speed is 10814 KiB/s
    mtd_speedtest: testing 2 page write speed
    mtd_speedtest: 2 page write speed is 6306 KiB/s
    mtd_speedtest: testing 2 page read speed
    mtd_speedtest: 2 page read speed is 10810 KiB/s
    mtd_speedtest: Testing erase speed
    mtd_speedtest: erase speed is 156595 KiB/s
    mtd_speedtest: finished
    =================================================

    root@android:/mtdtest # insmod mtd_nandecctest.ko 

    mtd_nandecctest: ok - nand-ecc-256
    mtd_nandecctest: ok - nand-ecc-512
    root@android:/mtdtest # insmod mtd_stresstest.ko dev=4 count=10

    =================================================
    mtd_stresstest: MTD device: 4
    mtd_stresstest: MTD device size 529006592, eraseblock size 131072, page size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB size 64
    mtd_stresstest: scanning for bad eraseblocks
    mtd_stresstest: scanned 4036 eraseblocks, 0 are bad
    mtd_stresstest: doing operations
    mtd_stresstest: 0 operations done
    mtd_stresstest: finished, 10 operations done
    =================================================
    root@android:/mtdtest # insmod mtd_readtest.ko dev=4

    =================================================
    mtd_readtest: MTD device: 4
    mtd_readtest: MTD device size 529006592, eraseblock size 131072, page size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB size 64
    mtd_readtest: scanning for bad eraseblocks
    mtd_readtest: scanned 4036 eraseblocks, 0 are bad
    mtd_readtest: testing page read
    mtd_readtest: finished
    =================================================
    root@android:/mtdtest # insmod mtd_subpagetest.ko dev=4

    =================================================
    mtd_subpagetest: MTD device: 4
    mtd_subpagetest: MTD device size 529006592, eraseblock size 131072, page size 2048, subpage size 512, count of eraseblocks 0, pages per eraseblock 0, OOB size 64
    mtd_subpagetest: scanning for bad eraseblocks
    mtd_subpagetest: scanned 4036 eraseblocks, 0 are bad
    mtd_subpagetest: erasing whole device
    mtd_subpagetest: erased 4036 eraseblocks
    mtd_subpagetest: writing whole device
    mtd_subpagetest: written up to eraseblock 0
    mtd_subpagetest: written up to eraseblock 256
    mtd_subpagetest: written up to eraseblock 512
    mtd_subpagetest: written up to eraseblock 768
    mtd_subpagetest: written up to eraseblock 1024
    mtd_subpagetest: written up to eraseblock 1280
    mtd_subpagetest: written up to eraseblock 1536
    mtd_subpagetest: written up to eraseblock 1792
    mtd_subpagetest: written up to eraseblock 2048
    mtd_subpagetest: written up to eraseblock 2304
    mtd_subpagetest: written up to eraseblock 2560
    mtd_subpagetest: written up to eraseblock 2816
    mtd_subpagetest: written up to eraseblock 3072
    mtd_subpagetest: written up to eraseblock 3328
    mtd_subpagetest: written up to eraseblock 3584
    mtd_subpagetest: written up to eraseblock 3840
    mtd_subpagetest: written 4036 eraseblocks
    mtd_subpagetest: verifying all eraseblocks
    mtd_subpagetest: verified up to eraseblock 0
    mtd_subpagetest: verified up to eraseblock 256
    mtd_subpagetest: verified up to eraseblock 512
    mtd_subpagetest: verified up to eraseblock 768
    mtd_subpagetest: verified up to eraseblock 1024
    mtd_subpagetest: verified up to eraseblock 1280
    mtd_subpagetest: verified up to eraseblock 1536
    mtd_subpagetest: verified up to eraseblock 1792
    mtd_subpagetest: verified up to eraseblock 2048
    mtd_subpagetest: verified up to eraseblock 2304
    mtd_subpagetest: verified up to eraseblock 2560
    mtd_subpagetest: verified up to eraseblock 2816
    mtd_subpagetest: verified up to eraseblock 3072
    mtd_subpagetest: verified up to eraseblock 3328
    mtd_subpagetest: verified up to eraseblock 3584
    mtd_subpagetest: verified up to eraseblock 3840
    mtd_subpagetest: verified 4036 eraseblocks
    mtd_subpagetest: erasing whole device
    mtd_subpagetest: erased 4036 eraseblocks
    mtd_subpagetest: verifying all eraseblocks for 0xff
    mtd_subpagetest: verified up to eraseblock 0
    mtd_subpagetest: verified up to eraseblock 256
    mtd_subpagetest: verified up to eraseblock 512
    mtd_subpagetest: verified up to eraseblock 768
    mtd_subpagetest: verified up to eraseblock 1024
    mtd_subpagetest: verified up to eraseblock 1280
    mtd_subpagetest: verified up to eraseblock 1536
    mtd_subpagetest: verified up to eraseblock 1792
    mtd_subpagetest: verified up to eraseblock 2048
    mtd_subpagetest: verified up to eraseblock 2304
    mtd_subpagetest: verified up to eraseblock 2560
    mtd_subpagetest: verified up to eraseblock 2816
    mtd_subpagetest: verified up to eraseblock 3072
    mtd_subpagetest: verified up to eraseblock 3328
    mtd_subpagetest: verified up to eraseblock 3584
    mtd_subpagetest: verified up to eraseblock 3840
    mtd_subpagetest: verified 4036 eraseblocks
    mtd_subpagetest: writing whole device
    mtd_subpagetest: written up to eraseblock 0
    mtd_subpagetest: written up to eraseblock 256
    mtd_subpagetest: written up to eraseblock 512
    mtd_subpagetest: written up to eraseblock 768
    mtd_subpagetest: written up to eraseblock 1024
    mtd_subpagetest: written up to eraseblock 1280
    mtd_subpagetest: written up to eraseblock 1536
    mtd_subpagetest: written up to eraseblock 1792
    mtd_subpagetest: written up to eraseblock 2048
    mtd_subpagetest: written up to eraseblock 2304
    mtd_subpagetest: written up to eraseblock 2560
    mtd_subpagetest: written up to eraseblock 2816
    mtd_subpagetest: written up to eraseblock 3072
    mtd_subpagetest: written up to eraseblock 3328
    mtd_subpagetest: written up to eraseblock 3584
    mtd_subpagetest: written up to eraseblock 3840
    mtd_subpagetest: written 4036 eraseblocks
    mtd_subpagetest: verifying all eraseblocks
    mtd_subpagetest: verified up to eraseblock 0
    mtd_subpagetest: verified up to eraseblock 256
    mtd_subpagetest: ECC correction at 0x24e0000
    mtd_subpagetest: ECC correction at 0x2760000
    mtd_subpagetest: ECC correction at 0x2bc0000
    mtd_subpagetest: verified up to eraseblock 512
    mtd_subpagetest: verified up to eraseblock 768
    mtd_subpagetest: ECC correction at 0x6080000
    mtd_subpagetest: ECC correction at 0x6140000
    mtd_subpagetest: ECC correction at 0x7620000
    mtd_subpagetest: verified up to eraseblock 1024
    mtd_subpagetest: ECC correction at 0x81c0000
    mtd_subpagetest: ECC correction at 0x9040200
    mtd_subpagetest: ECC correction at 0x94c0200
    mtd_subpagetest: ECC correction at 0x9740200
    mtd_subpagetest: ECC correction at 0x9a60200
    mtd_subpagetest: ECC correction at 0x9c40200
    mtd_subpagetest: ECC correction at 0x9de0000
    mtd_subpagetest: verified up to eraseblock 1280
    mtd_subpagetest: ECC correction at 0xa4c0000
    mtd_subpagetest: ECC correction at 0xa940000
    mtd_subpagetest: ECC correction at 0xabc0000
    mtd_subpagetest: ECC correction at 0xad40000
    mtd_subpagetest: ECC correction at 0xbd80000
    mtd_subpagetest: ECC correction at 0xbfc0000
    mtd_subpagetest: verified up to eraseblock 1536
    mtd_subpagetest: ECC correction at 0xc200000
    mtd_subpagetest: ECC correction at 0xc586e00
    mtd_subpagetest: ECC correction at 0xd49ce00
    mtd_subpagetest: ECC correction at 0xde40200
    mtd_subpagetest: verified up to eraseblock 1792
    mtd_subpagetest: ECC correction at 0xe5c0000
    mtd_subpagetest: ECC correction at 0xe8e0000
    mtd_subpagetest: ECC correction at 0xead7c00
    mtd_subpagetest: ECC correction at 0xf1c0000
    mtd_subpagetest: ECC correction at 0xf320200
    mtd_subpagetest: verified up to eraseblock 2048
    mtd_subpagetest: ECC correction at 0x10860000
    mtd_subpagetest: ECC correction at 0x115c0000
    mtd_subpagetest: ECC correction at 0x11bc0200
    mtd_subpagetest: verified up to eraseblock 2304
    mtd_subpagetest: ECC correction at 0x12449c00
    mtd_subpagetest: ECC correction at 0x12560000
    mtd_subpagetest: ECC correction at 0x13fc0200
    mtd_subpagetest: verified up to eraseblock 2560
    mtd_subpagetest: ECC correction at 0x15b40000
    mtd_subpagetest: verified up to eraseblock 2816
    mtd_subpagetest: ECC correction at 0x17040000
    mtd_subpagetest: ECC correction at 0x17340000
    mtd_subpagetest: ECC correction at 0x178e0000
    mtd_subpagetest: ECC correction at 0x17b80000
    mtd_subpagetest: verified up to eraseblock 3072
    mtd_subpagetest: ECC correction at 0x18260200
    mtd_subpagetest: ECC correction at 0x18f40000
    mtd_subpagetest: verified up to eraseblock 3328
    mtd_subpagetest: ECC correction at 0x1a0c0000
    mtd_subpagetest: ECC correction at 0x1a220000
    mtd_subpagetest: ECC correction at 0x1a40f000
    mtd_subpagetest: ECC correction at 0x1a960200
    mtd_subpagetest: ECC correction at 0x1b840000
    mtd_subpagetest: verified up to eraseblock 3584
    mtd_subpagetest: ECC correction at 0x1d100200
    mtd_subpagetest: ECC correction at 0x1d640000
    mtd_subpagetest: verified up to eraseblock 3840
    mtd_subpagetest: ECC correction at 0x1e1c0000
    mtd_subpagetest: verified 4036 eraseblocks
    mtd_subpagetest: erasing whole device
    mtd_subpagetest: erased 4036 eraseblocks
    mtd_subpagetest: verifying all eraseblocks for 0xff
    mtd_subpagetest: verified up to eraseblock 0
    mtd_subpagetest: verified up to eraseblock 256
    mtd_subpagetest: verified up to eraseblock 512
    mtd_subpagetest: verified up to eraseblock 768
    mtd_subpagetest: verified up to eraseblock 1024
    mtd_subpagetest: verified up to eraseblock 1280
    mtd_subpagetest: verified up to eraseblock 1536
    mtd_subpagetest: verified up to eraseblock 1792
    mtd_subpagetest: verified up to eraseblock 2048
    mtd_subpagetest: verified up to eraseblock 2304
    mtd_subpagetest: verified up to eraseblock 2560
    mtd_subpagetest: verified up to eraseblock 2816
    mtd_subpagetest: verified up to eraseblock 3072
    mtd_subpagetest: verified up to eraseblock 3328
    mtd_subpagetest: verified up to eraseblock 3584
    mtd_subpagetest: verified up to eraseblock 3840
    mtd_subpagetest: verified 4036 eraseblocks
    mtd_subpagetest: finished with 0 errors
    =================================================
    root@android:/mtdtest # insmod mtd_pagetest.ko dev=4

    =================================================
    mtd_pagetest: MTD device: 4
    mtd_pagetest: MTD device size 529006592, eraseblock size 131072, page size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB size 64
    mtd_pagetest: scanning for bad eraseblocks
    mtd_pagetest: scanned 4036 eraseblocks, 0 are bad
    mtd_pagetest: erasing whole device
    mtd_pagetest: erased 4036 eraseblocks
    mtd_pagetest: writing whole device
    mtd_pagetest: written up to eraseblock 0
    mtd_pagetest: written up to eraseblock 256
    mtd_pagetest: written up to eraseblock 512
    mtd_pagetest: written up to eraseblock 768
    mtd_pagetest: written up to eraseblock 1024
    mtd_pagetest: written up to eraseblock 1280
    mtd_pagetest: written up to eraseblock 1536
    mtd_pagetest: written up to eraseblock 1792
    mtd_pagetest: written up to eraseblock 2048
    mtd_pagetest: written up to eraseblock 2304
    mtd_pagetest: written up to eraseblock 2560
    mtd_pagetest: written up to eraseblock 2816
    mtd_pagetest: written up to eraseblock 3072
    mtd_pagetest: written up to eraseblock 3328
    mtd_pagetest: written up to eraseblock 3584
    mtd_pagetest: written up to eraseblock 3840
    mtd_pagetest: written 4036 eraseblocks
    mtd_pagetest: verifying all eraseblocks
    mtd_pagetest: verified up to eraseblock 0
    mtd_pagetest: verified up to eraseblock 256
    mtd_pagetest: verified up to eraseblock 512
    mtd_pagetest: verified up to eraseblock 768
    mtd_pagetest: verified up to eraseblock 1024
    mtd_pagetest: verified up to eraseblock 1280
    mtd_pagetest: verified up to eraseblock 1536
    mtd_pagetest: verified up to eraseblock 1792
    mtd_pagetest: verified up to eraseblock 2048
    mtd_pagetest: verified up to eraseblock 2304
    mtd_pagetest: verified up to eraseblock 2560
    mtd_pagetest: verified up to eraseblock 2816
    mtd_pagetest: verified up to eraseblock 3072
    mtd_pagetest: verified up to eraseblock 3328
    mtd_pagetest: verified up to eraseblock 3584
    mtd_pagetest: verified up to eraseblock 3840
    mtd_pagetest: verified 4036 eraseblocks
    mtd_pagetest: crosstest
    mtd_pagetest: reading page at 0x0
    mtd_pagetest: reading page at 0x1f87f800
    mtd_pagetest: reading page at 0x0
    mtd_pagetest: verifying pages read at 0x0 match
    mtd_pagetest: crosstest ok
    mtd_pagetest: erasecrosstest
    mtd_pagetest: erasing block 0
    mtd_pagetest: writing 1st page of block 0
    mtd_pagetest: reading 1st page of block 0
    mtd_pagetest: verifying 1st page of block 0
    mtd_pagetest: erasing block 0
    mtd_pagetest: writing 1st page of block 0
    mtd_pagetest: erasing block 4035
    mtd_pagetest: reading 1st page of block 0
    mtd_pagetest: verifying 1st page of block 0
    mtd_pagetest: erasecrosstest ok
    mtd_pagetest: erasetest
    mtd_pagetest: erasing block 0
    mtd_pagetest: writing 1st page of block 0
    mtd_pagetest: erasing block 0
    mtd_pagetest: reading 1st page of block 0
    mtd_pagetest: verifying 1st page of block 0 is all 0xff
    mtd_pagetest: erasetest ok
    mtd_pagetest: finished with 0 errors
    =================================================
    root@android:/mtdtest # insmod mtd_oobtest.ko dev=4

    =================================================
    mtd_oobtest: MTD device: 4
    mtd_oobtest: MTD device size 529006592, eraseblock size 131072, page size 2048, count of eraseblocks 4036, pages per eraseblock 64, OOB size 64
    mtd_oobtest: scanning for bad eraseblocks
    mtd_oobtest: scanned 4036 eraseblocks, 0 are bad
    mtd_oobtest: test 1 of 5
    mtd_oobtest: erasing whole device
    mtd_oobtest: erased 4036 eraseblocks
    mtd_oobtest: writing OOBs of whole device
    mtd_oobtest: written up to eraseblock 0
    mtd_oobtest: written up to eraseblock 256
    mtd_oobtest: written up to eraseblock 512
    mtd_oobtest: written up to eraseblock 768
    mtd_oobtest: written up to eraseblock 1024
    mtd_oobtest: written up to eraseblock 1280
    mtd_oobtest: written up to eraseblock 1536
    mtd_oobtest: written up to eraseblock 1792
    mtd_oobtest: written up to eraseblock 2048
    mtd_oobtest: written up to eraseblock 2304
    mtd_oobtest: written up to eraseblock 2560
    mtd_oobtest: written up to eraseblock 2816
    mtd_oobtest: written up to eraseblock 3072
    mtd_oobtest: written up to eraseblock 3328
    mtd_oobtest: written up to eraseblock 3584
    mtd_oobtest: written up to eraseblock 3840
    mtd_oobtest: written 4036 eraseblocks
    mtd_oobtest: verifying all eraseblocks
    mtd_oobtest: verified up to eraseblock 0
    mtd_oobtest: verified up to eraseblock 256
    mtd_oobtest: verified up to eraseblock 512
    mtd_oobtest: verified up to eraseblock 768
    mtd_oobtest: verified up to eraseblock 1024
    mtd_oobtest: verified up to eraseblock 1280
    mtd_oobtest: verified up to eraseblock 1536
    mtd_oobtest: verified up to eraseblock 1792
    mtd_oobtest: verified up to eraseblock 2048
    mtd_oobtest: verified up to eraseblock 2304
    mtd_oobtest: verified up to eraseblock 2560
    mtd_oobtest: verified up to eraseblock 2816
    mtd_oobtest: verified up to eraseblock 3072
    mtd_oobtest: verified up to eraseblock 3328
    mtd_oobtest: verified up to eraseblock 3584
    mtd_oobtest: verified up to eraseblock 3840
    mtd_oobtest: verified 4036 eraseblocks
    mtd_oobtest: test 2 of 5
    mtd_oobtest: erasing whole device
    mtd_oobtest: erased 4036 eraseblocks
    mtd_oobtest: writing OOBs of whole device
    mtd_oobtest: written up to eraseblock 0
    mtd_oobtest: written up to eraseblock 256
    mtd_oobtest: written up to eraseblock 512
    mtd_oobtest: written up to eraseblock 768
    mtd_oobtest: written up to eraseblock 1024
    mtd_oobtest: written up to eraseblock 1280
    mtd_oobtest: written up to eraseblock 1536
    mtd_oobtest: written up to eraseblock 1792
    mtd_oobtest: written up to eraseblock 2048
    mtd_oobtest: written up to eraseblock 2304
    mtd_oobtest: written up to eraseblock 2560
    mtd_oobtest: written up to eraseblock 2816
    mtd_oobtest: written up to eraseblock 3072
    mtd_oobtest: written up to eraseblock 3328
    mtd_oobtest: written up to eraseblock 3584
    mtd_oobtest: written up to eraseblock 3840
    mtd_oobtest: written 4036 eraseblocks
    mtd_oobtest: verifying all eraseblocks
    mtd_oobtest: verified up to eraseblock 0
    mtd_oobtest: error: verify failed at 0xc60000
    mtd_oobtest: error: verify failed at 0x15c0000
    mtd_oobtest: verified up to eraseblock 256
    mtd_oobtest: error: verify failed at 0x20a0000
    mtd_oobtest: error: verify failed at 0x2cc0000
    mtd_oobtest: error: verify failed at 0x2f00000
    mtd_oobtest: error: verify failed at 0x3260000
    mtd_oobtest: error: verify failed at 0x3a40000
    mtd_oobtest: error: verify failed at 0x3e20000
    mtd_oobtest: error: verify failed at 0x3e80000
    mtd_oobtest: verified up to eraseblock 512
    mtd_oobtest: error: verify failed at 0x49e0000
    mtd_oobtest: error: verify failed at 0x4fc0000
    mtd_oobtest: error: verify failed at 0x54a0000
    mtd_oobtest: error: verify failed at 0x5800000
    mtd_oobtest: error: verify failed at 0x59a0000
    mtd_oobtest: verified up to eraseblock 768
    mtd_oobtest: error: verify failed at 0x7260000
    mtd_oobtest: verified up to eraseblock 1024
    mtd_oobtest: error: verify failed at 0x82e0000
    mtd_oobtest: error: verify failed at 0x93a0000
    mtd_oobtest: error: verify failed at 0x9820000
    mtd_oobtest: verified up to eraseblock 1280
    mtd_oobtest: error: verify failed at 0xa1a0000
    mtd_oobtest: error: verify failed at 0xaaa0000
    mtd_oobtest: error: verify failed at 0xbac0000
    mtd_oobtest: verified up to eraseblock 1536
    mtd_oobtest: error: verify failed at 0xc1a0000
    mtd_oobtest: error: verify failed at 0xc660000
    mtd_oobtest: error: verify failed at 0xd420000
    mtd_oobtest: verified up to eraseblock 1792
    mtd_oobtest: error: verify failed at 0xe1a0000
    mtd_oobtest: error: verify failed at 0xfcc0000
    mtd_oobtest: error: verify failed at 0xfea0000
    mtd_oobtest: verified up to eraseblock 2048
    mtd_oobtest: error: verify failed at 0x105e0000
    mtd_oobtest: error: verify failed at 0x118a0000
    mtd_oobtest: verified up to eraseblock 2304
    mtd_oobtest: error: verify failed at 0x12180000
    mtd_oobtest: verified up to eraseblock 2560
    mtd_oobtest: error: verify failed at 0x14880000
    mtd_oobtest: error: verify failed at 0x14b80000
    mtd_oobtest: error: verify failed at 0x14ca0000
    mtd_oobtest: verified up to eraseblock 2816
    mtd_oobtest: error: verify failed at 0x16520000
    mtd_oobtest: error: verify failed at 0x16780000
    mtd_oobtest: error: verify failed at 0x16e20000
    mtd_oobtest: error: verify failed at 0x17520000
    mtd_oobtest: error: verify failed at 0x178e0000
    mtd_oobtest: verified up to eraseblock 3072
    mtd_oobtest: error: verify failed at 0x190c0000
    mtd_oobtest: verified up to eraseblock 3328
    mtd_oobtest: error: verify failed at 0x1a160000
    mtd_oobtest: error: verify failed at 0x1af60000
    mtd_oobtest: verified up to eraseblock 3584
    mtd_oobtest: error: verify failed at 0x1d700000
    mtd_oobtest: error: verify failed at 0x1dda0000
    mtd_oobtest: error: verify failed at 0x1de20000
    mtd_oobtest: verified up to eraseblock 3840
    mtd_oobtest: error: verify failed at 0x1ee20000
    mtd_oobtest: error: verify failed at 0x1f1c0000
    mtd_oobtest: verified 4036 eraseblocks
    mtd_oobtest: test 3 of 5
    mtd_oobtest: erasing whole device
    mtd_oobtest: erased 4036 eraseblocks
    mtd_oobtest: writing OOBs of whole device
    mtd_oobtest: written up to eraseblock 0
    mtd_oobtest: written up to eraseblock 256
    mtd_oobtest: written up to eraseblock 512
    mtd_oobtest: written up to eraseblock 768
    mtd_oobtest: written up to eraseblock 1024
    mtd_oobtest: written up to eraseblock 1280
    mtd_oobtest: written up to eraseblock 1536
    mtd_oobtest: written up to eraseblock 1792
    mtd_oobtest: written up to eraseblock 2048
    mtd_oobtest: written up to eraseblock 2304
    mtd_oobtest: written up to eraseblock 2560
    mtd_oobtest: written up to eraseblock 2816
    mtd_oobtest: written up to eraseblock 3072
    mtd_oobtest: written up to eraseblock 3328
    mtd_oobtest: written up to eraseblock 3584
    mtd_oobtest: written up to eraseblock 3840
    mtd_oobtest: written 4036 eraseblocks
    mtd_oobtest: verifying all eraseblocks
    mtd_oobtest: verified up to eraseblock 0
    mtd_oobtest: verified up to eraseblock 256
    mtd_oobtest: verified up to eraseblock 512
    mtd_oobtest: verified up to eraseblock 768
    mtd_oobtest: verified up to eraseblock 1024
    mtd_oobtest: verified up to eraseblock 1280
    mtd_oobtest: verified up to eraseblock 1536
    mtd_oobtest: verified up to eraseblock 1792
    mtd_oobtest: verified up to eraseblock 2048
    mtd_oobtest: verified up to eraseblock 2304
    mtd_oobtest: verified up to eraseblock 2560
    mtd_oobtest: verified up to eraseblock 2816
    mtd_oobtest: error: verify failed at 0x172eb000
    mtd_oobtest: error: verify failed at 0x172eb000
    mtd_oobtest: verified up to eraseblock 3072
    mtd_oobtest: verified up to eraseblock 3328
    mtd_oobtest: verified up to eraseblock 3584
    mtd_oobtest: verified up to eraseblock 3840
    mtd_oobtest: verified 4036 eraseblocks
    mtd_oobtest: test 4 of 5
    mtd_oobtest: erasing whole device
    mtd_oobtest: erased 4036 eraseblocks
    mtd_oobtest: attempting to start write past end of OOB
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: attempting to start read past end of OOB
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: attempting to write past end of device
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: attempting to read past end of device
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: attempting to write past end of device
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: attempting to read past end of device
    mtd_oobtest: an error is expected...
    mtd_oobtest: error occurred as expected
    mtd_oobtest: test 5 of 5
    mtd_oobtest: erasing whole device
    mtd_oobtest: erased 4036 eraseblocks
    mtd_oobtest: writing OOBs of whole device
    mtd_oobtest: written up to eraseblock 0
    mtd_oobtest: written up to eraseblock 0
    mtd_oobtest: written up to eraseblock 256
    mtd_oobtest: written up to eraseblock 256
    mtd_oobtest: written up to eraseblock 512
    mtd_oobtest: written up to eraseblock 512
    mtd_oobtest: written up to eraseblock 768
    mtd_oobtest: written up to eraseblock 768
    mtd_oobtest: written up to eraseblock 1024
    mtd_oobtest: written up to eraseblock 1024
    mtd_oobtest: written up to eraseblock 1280
    mtd_oobtest: written up to eraseblock 1280
    mtd_oobtest: written up to eraseblock 1536
    mtd_oobtest: written up to eraseblock 1536
    mtd_oobtest: written up to eraseblock 1792
    mtd_oobtest: written up to eraseblock 1792
    mtd_oobtest: written up to eraseblock 2048
    mtd_oobtest: written up to eraseblock 2048
    mtd_oobtest: written up to eraseblock 2304
    mtd_oobtest: written up to eraseblock 2304
    mtd_oobtest: written up to eraseblock 2560
    mtd_oobtest: written up to eraseblock 2560
    mtd_oobtest: written up to eraseblock 2816
    mtd_oobtest: written up to eraseblock 2816
    mtd_oobtest: written up to eraseblock 3072
    mtd_oobtest: written up to eraseblock 3072
    mtd_oobtest: written up to eraseblock 3328
    mtd_oobtest: written up to eraseblock 3328
    mtd_oobtest: written up to eraseblock 3584
    mtd_oobtest: written up to eraseblock 3584
    mtd_oobtest: written up to eraseblock 3840
    mtd_oobtest: written up to eraseblock 3840
    mtd_oobtest: written 4035 eraseblocks
    mtd_oobtest: verifying all eraseblocks
    mtd_oobtest: verified up to eraseblock 0
    mtd_oobtest: verified up to eraseblock 256
    mtd_oobtest: verified up to eraseblock 512
    mtd_oobtest: verified up to eraseblock 768
    mtd_oobtest: verified up to eraseblock 1024
    mtd_oobtest: verified up to eraseblock 1280
    mtd_oobtest: verified up to eraseblock 1536
    mtd_oobtest: verified up to eraseblock 1792
    mtd_oobtest: verified up to eraseblock 2048
    mtd_oobtest: verified up to eraseblock 2304
    mtd_oobtest: verified up to eraseblock 2560
    mtd_oobtest: verified up to eraseblock 2816
    mtd_oobtest: verified up to eraseblock 3072
    mtd_oobtest: verified up to eraseblock 3328
    mtd_oobtest: verified up to eraseblock 3584
    mtd_oobtest: verified up to eraseblock 3840
    mtd_oobtest: verified 4035 eraseblocks
    mtd_oobtest: finished with 48 errors
    =================================================