[PATCH v6 0/6] mtd: nand: vf610_nfc: Freescale NFC for VF610

Stefan Agner stefan at agner.ch
Thu Jun 18 15:58:33 PDT 2015


The sixth revision has some minor changes, removing some worthless
optimization and a compatible string.

In the fifth revision some more changes, which have been made in the
U-Boot driver, have been applied to this driver too. The driver now
uses dedicated vf610_nfc_read_page/vf610_nfc_write_page functions
which feel more appropriate for the device. This changes enable raw
page writes, which in turn enables to use the the mtd_nandbiterrs.ko
test.

Beside that, the changes from the reviews have been implemented.

If one is interested in the individual changes, the U-Boot patchset,
which has been applied/adopted and squashed into this driver, is
available in the U-Boot mailing list archive:
http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/220416

The patchset is based on the patchset by Bill Pringlemeir, see:
http://thread.gmane.org/gmane.linux.ports.arm.kernel/295419

The driver passes the MTD tests, the logs are attched inline, below
the change log.

Performance key points on Colibri VF61:
mtd_speedtest: testing eraseblock write speed
mtd_speedtest: eraseblock write speed is 5417 KiB/s
mtd_speedtest: testing eraseblock read speed
mtd_speedtest: eraseblock read speed is 13012 KiB/s
mtd_speedtest: testing page write speed

Changes since v5:
- Removed fsl,mpc5125-nfc compatible string
- Removed readl/writel_relaxed
- Change interface of vf610_nfc_transfer_size to match other accessors

Changes since v4:
- Rebased ontop of l2-mtd/master (v4.1-rc4 based)
- Eliminate unnecessary page read (NAND_CMD_SEQIN) since the driver does
  not support sub-page writes anyway (improves write performance)
- Support ONFI by enabling READID command with offset and parameter page
  reads (CMD_PARAM)
- Change to dedicated read_page/write_page function, enables raw writes
- Use __LITTLE_ENDIAN to distingush between LE/BE relevant statements
- Eliminated vf610_nfc_probe_dt in favor of common DT init code
- Use wait_for_completion_timeout
- Some style fixes (spaces, etc.)

Changes since v3:
- Make the driver selectable when COMPILE_TEST is set
- Fix compile error due to superfluous ECC_STATUS configuration in initial
  patch (without ECC correction ECC_STATUS does not need to be configured)
- Remove custom BBT pattern and switch to in-band BBT in the initial patch
- Include two bug fixes, for details see the corresponding U-Boot patches:
  http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/215802

Changes since v2:
- Updated binding documentation

Changes since v1:
- Nest nfc_config struct within the main nfc struct
- Use assigned clock binding to specify NFC clock
- Rebased ontop of MSCM IR patchset (driver parts have been merged)
- Split out arch Kconfig in a separate config
- Fix module license
- Updated MAINTAINERS

Changes since RFC (Bill Pringlemeir):
- Renamed driver from fsl_nfc to vf610_nfc
- Use readl/writel for all register in accessor functions
- Optimized field accessor functions
- Implemented PM (suspend/resume) functions
- Implemented basic support for ECC strength/ECC step size from dt
- Improved performance of count_written_bits by using hweight32
- Support ECC with 60-bytes to correct up to 32 bit errors
- Changed to in-band BBT (NAND_BBT_NO_OOB) which also allows ECC modes
  which uses up to 60 bytes on 64 byte OOB
- Removed custom (downstream) BBT pattern since BBT table won't be
  compatible anyway (due to the change above)


MTD tests:

[  197.039235] ==================================================
[  197.045208] mtd_nandbiterrs: MTD device: 3
[  197.066559] mtd_nandbiterrs: MTD device size 134217728, eraseblock=131072, page=2048, oob=64
[  197.075314] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
[  197.081506] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[  197.099422] mtd_nandbiterrs: incremental biterrors test
[  197.105002] mtd_nandbiterrs: write_page
[  197.109515] mtd_nandbiterrs: rewrite page
[  197.124398] mtd_nandbiterrs: read_page
[  197.128747] mtd_nandbiterrs: verify_page
[  197.132964] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[  197.140201] mtd_nandbiterrs: Inserted biterror @ 0/5
[  197.145212] mtd_nandbiterrs: rewrite page
[  197.149796] mtd_nandbiterrs: read_page
[  197.162519] mtd_nandbiterrs: verify_page
[  197.166953] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[  197.174109] mtd_nandbiterrs: Inserted biterror @ 0/2
[  197.179117] mtd_nandbiterrs: rewrite page
[  197.183743] mtd_nandbiterrs: read_page
[  197.187931] mtd_nandbiterrs: verify_page
[  197.192239] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[  197.199339] mtd_nandbiterrs: Inserted biterror @ 0/0
[  197.204377] mtd_nandbiterrs: rewrite page
[  197.218883] mtd_nandbiterrs: read_page
[  197.222929] mtd_nandbiterrs: verify_page
[  197.227091] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[  197.234218] mtd_nandbiterrs: Inserted biterror @ 1/7
[  197.239336] mtd_nandbiterrs: rewrite page
[  197.243912] mtd_nandbiterrs: read_page
[  197.257324] mtd_nandbiterrs: verify_page
[  197.261871] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[  197.268975] mtd_nandbiterrs: Inserted biterror @ 1/5
[  197.274024] mtd_nandbiterrs: rewrite page
[  197.278626] mtd_nandbiterrs: read_page
[  197.282638] mtd_nandbiterrs: verify_page
[  197.286909] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[  197.294046] mtd_nandbiterrs: Inserted biterror @ 1/2
[  197.299051] mtd_nandbiterrs: rewrite page
[  197.303646] mtd_nandbiterrs: read_page
[  197.307628] mtd_nandbiterrs: verify_page
[  197.311814] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[  197.319044] mtd_nandbiterrs: Inserted biterror @ 1/0
[  197.324092] mtd_nandbiterrs: rewrite page
[  197.338545] mtd_nandbiterrs: read_page
[  197.342583] mtd_nandbiterrs: verify_page
[  197.346852] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[  197.353989] mtd_nandbiterrs: Inserted biterror @ 2/6
[  197.358993] mtd_nandbiterrs: rewrite page
[  197.363596] mtd_nandbiterrs: read_page
[  197.376554] mtd_nandbiterrs: verify_page
[  197.381268] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[  197.388373] mtd_nandbiterrs: Inserted biterror @ 2/5
[  197.393422] mtd_nandbiterrs: rewrite page
[  197.398104] mtd_nandbiterrs: read_page
[  197.402330] mtd_nandbiterrs: verify_page
[  197.406597] mtd_nandbiterrs: Successfully corrected 9 bit errors per subpage
[  197.413738] mtd_nandbiterrs: Inserted biterror @ 2/2
[  197.418743] mtd_nandbiterrs: rewrite page
[  197.435214] mtd_nandbiterrs: read_page
[  197.439226] mtd_nandbiterrs: verify_page
[  197.443536] mtd_nandbiterrs: Successfully corrected 10 bit errors per subpage
[  197.450760] mtd_nandbiterrs: Inserted biterror @ 2/0
[  197.455764] mtd_nandbiterrs: rewrite page
[  197.460388] mtd_nandbiterrs: read_page
[  197.475201] mtd_nandbiterrs: verify_page
[  197.479639] mtd_nandbiterrs: Successfully corrected 11 bit errors per subpage
[  197.486827] mtd_nandbiterrs: Inserted biterror @ 3/7
[  197.491861] mtd_nandbiterrs: rewrite page
[  197.496462] mtd_nandbiterrs: read_page
[  197.500703] mtd_nandbiterrs: verify_page
[  197.504977] mtd_nandbiterrs: Successfully corrected 12 bit errors per subpage
[  197.512205] mtd_nandbiterrs: Inserted biterror @ 3/6
[  197.517207] mtd_nandbiterrs: rewrite page
[  197.531491] mtd_nandbiterrs: read_page
[  197.535503] mtd_nandbiterrs: verify_page
[  197.539810] mtd_nandbiterrs: Successfully corrected 13 bit errors per subpage
[  197.547003] mtd_nandbiterrs: Inserted biterror @ 3/5
[  197.552042] mtd_nandbiterrs: rewrite page
[  197.556627] mtd_nandbiterrs: read_page
[  197.569904] mtd_nandbiterrs: verify_page
[  197.574460] mtd_nandbiterrs: Successfully corrected 14 bit errors per subpage
[  197.581688] mtd_nandbiterrs: Inserted biterror @ 3/2
[  197.586696] mtd_nandbiterrs: rewrite page
[  197.591390] mtd_nandbiterrs: read_page
[  197.595378] mtd_nandbiterrs: verify_page
[  197.599679] mtd_nandbiterrs: Successfully corrected 15 bit errors per subpage
[  197.606865] mtd_nandbiterrs: Inserted biterror @ 3/0
[  197.611898] mtd_nandbiterrs: rewrite page
[  197.616474] mtd_nandbiterrs: read_page
[  197.629809] mtd_nandbiterrs: verify_page
[  197.633987] mtd_nandbiterrs: Successfully corrected 16 bit errors per subpage
[  197.641212] mtd_nandbiterrs: Inserted biterror @ 4/2
[  197.646221] mtd_nandbiterrs: rewrite page
[  197.650866] mtd_nandbiterrs: read_page
[  197.654851] mtd_nandbiterrs: verify_page
[  197.659010] mtd_nandbiterrs: Successfully corrected 17 bit errors per subpage
[  197.666349] mtd_nandbiterrs: Inserted biterror @ 4/0
[  197.671392] mtd_nandbiterrs: rewrite page
[  197.676019] mtd_nandbiterrs: read_page
[  197.690248] mtd_nandbiterrs: verify_page
[  197.694705] mtd_nandbiterrs: Successfully corrected 18 bit errors per subpage
[  197.701943] mtd_nandbiterrs: Inserted biterror @ 5/7
[  197.706952] mtd_nandbiterrs: rewrite page
[  197.711588] mtd_nandbiterrs: read_page
[  197.715575] mtd_nandbiterrs: verify_page
[  197.719881] mtd_nandbiterrs: Successfully corrected 19 bit errors per subpage
[  197.727070] mtd_nandbiterrs: Inserted biterror @ 5/2
[  197.732108] mtd_nandbiterrs: rewrite page
[  197.736650] mtd_nandbiterrs: read_page
[  197.750836] mtd_nandbiterrs: verify_page
[  197.755261] mtd_nandbiterrs: Successfully corrected 20 bit errors per subpage
[  197.762491] mtd_nandbiterrs: Inserted biterror @ 5/0
[  197.767500] mtd_nandbiterrs: rewrite page
[  197.772081] mtd_nandbiterrs: read_page
[  197.776070] mtd_nandbiterrs: verify_page
[  197.780374] mtd_nandbiterrs: Successfully corrected 21 bit errors per subpage
[  197.787566] mtd_nandbiterrs: Inserted biterror @ 6/6
[  197.792605] mtd_nandbiterrs: rewrite page
[  197.797182] mtd_nandbiterrs: read_page
[  197.811376] mtd_nandbiterrs: verify_page
[  197.815653] mtd_nandbiterrs: Successfully corrected 22 bit errors per subpage
[  197.823023] mtd_nandbiterrs: Inserted biterror @ 6/2
[  197.828034] mtd_nandbiterrs: rewrite page
[  197.832662] mtd_nandbiterrs: read_page
[  197.836647] mtd_nandbiterrs: verify_page
[  197.840949] mtd_nandbiterrs: Successfully corrected 23 bit errors per subpage
[  197.848140] mtd_nandbiterrs: Inserted biterror @ 6/0
[  197.853178] mtd_nandbiterrs: rewrite page
[  197.857762] mtd_nandbiterrs: read_page
[  197.871308] mtd_nandbiterrs: verify_page
[  197.875690] mtd_nandbiterrs: Successfully corrected 24 bit errors per subpage
[  197.882923] mtd_nandbiterrs: Inserted biterror @ 7/7
[  197.887929] mtd_nandbiterrs: rewrite page
[  197.892515] mtd_nandbiterrs: read_page
[  197.896503] mtd_nandbiterrs: verify_page
[  197.900694] mtd_nandbiterrs: Successfully corrected 25 bit errors per subpage
[  197.907994] mtd_nandbiterrs: Inserted biterror @ 7/6
[  197.913038] mtd_nandbiterrs: rewrite page
[  197.917568] mtd_nandbiterrs: read_page
[  197.930384] mtd_nandbiterrs: verify_page
[  197.934712] mtd_nandbiterrs: Successfully corrected 26 bit errors per subpage
[  197.941941] mtd_nandbiterrs: Inserted biterror @ 7/2
[  197.946950] mtd_nandbiterrs: rewrite page
[  197.951529] mtd_nandbiterrs: read_page
[  197.955515] mtd_nandbiterrs: verify_page
[  197.959817] mtd_nandbiterrs: Successfully corrected 27 bit errors per subpage
[  197.967008] mtd_nandbiterrs: Inserted biterror @ 7/0
[  197.972057] mtd_nandbiterrs: rewrite page
[  197.977849] mtd_nandbiterrs: read_page
[  197.992304] mtd_nandbiterrs: verify_page
[  197.996624] mtd_nandbiterrs: Successfully corrected 28 bit errors per subpage
[  198.003858] mtd_nandbiterrs: Inserted biterror @ 8/7
[  198.008862] mtd_nandbiterrs: rewrite page
[  198.013441] mtd_nandbiterrs: read_page
[  198.017424] mtd_nandbiterrs: verify_page
[  198.021644] mtd_nandbiterrs: Successfully corrected 29 bit errors per subpage
[  198.028829] mtd_nandbiterrs: Inserted biterror @ 8/5
[  198.033979] mtd_nandbiterrs: rewrite page
[  198.038616] mtd_nandbiterrs: read_page
[  198.052747] mtd_nandbiterrs: verify_page
[  198.057239] mtd_nandbiterrs: Successfully corrected 30 bit errors per subpage
[  198.064477] mtd_nandbiterrs: Inserted biterror @ 8/4
[  198.069490] mtd_nandbiterrs: rewrite page
[  198.074074] mtd_nandbiterrs: read_page
[  198.078062] mtd_nandbiterrs: verify_page
[  198.082368] mtd_nandbiterrs: Successfully corrected 31 bit errors per subpage
[  198.089597] mtd_nandbiterrs: Inserted biterror @ 8/2
[  198.094603] mtd_nandbiterrs: rewrite page
[  198.099202] mtd_nandbiterrs: read_page
[  198.113451] mtd_nandbiterrs: verify_page
[  198.117846] mtd_nandbiterrs: Successfully corrected 32 bit errors per subpage
[  198.125076] mtd_nandbiterrs: Inserted biterror @ 8/0
[  198.130105] mtd_nandbiterrs: rewrite page
[  198.134705] mtd_nandbiterrs: read_page
[  198.138905] mtd_nandbiterrs: error: read failed at 0x0
[  198.144239] mtd_nandbiterrs: After 33 biterrors per subpage, read reported error -74
[  198.163281] mtd_nandbiterrs: finished successfully.
[  198.168332] ==================================================
[  228.550809] 
[  228.552545] =================================================
[  228.558346] mtd_oobtest: MTD device: 3
[  228.581278] mtd_oobtest: MTD device size 134217728, eraseblock size 131072, page size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[  228.595985] mtd_test: scanning for bad eraseblocks
[  228.611269] mtd_test: block 316 is bad
[  228.615909] mtd_test: block 917 is bad
[  228.619790] mtd_test: scanned 1024 eraseblocks, 2 are bad
[  228.625347] mtd_oobtest: test 1 of 5
[  228.900362] mtd_oobtest: writing OOBs of whole device
[  228.932108] mtd_oobtest: written up to eraseblock 0
[  233.052533] mtd_oobtest: written up to eraseblock 256
[  237.155804] mtd_oobtest: written up to eraseblock 512
[  241.274283] mtd_oobtest: written up to eraseblock 768
[  245.361809] mtd_oobtest: written 1024 eraseblocks
[  245.366613] mtd_oobtest: verifying all eraseblocks
[  245.374180] mtd_oobtest: verified up to eraseblock 0
[  246.223481] mtd_oobtest: verified up to eraseblock 256
[  247.045983] mtd_oobtest: verified up to eraseblock 512
[  247.870732] mtd_oobtest: verified up to eraseblock 768
[  248.683053] mtd_oobtest: verified 1024 eraseblocks
[  248.687936] mtd_oobtest: test 2 of 5
[  249.636996] mtd_oobtest: writing OOBs of whole device
[  249.668742] mtd_oobtest: written up to eraseblock 0
[  253.782380] mtd_oobtest: written up to eraseblock 256
[  257.882626] mtd_oobtest: written up to eraseblock 512
[  261.996761] mtd_oobtest: written up to eraseblock 768
[  266.082061] mtd_oobtest: written 1024 eraseblocks
[  266.086841] mtd_oobtest: verifying all eraseblocks
[  266.105270] mtd_oobtest: verified up to eraseblock 0
[  266.893608] mtd_oobtest: verified up to eraseblock 256
[  267.662111] mtd_oobtest: verified up to eraseblock 512
[  268.437666] mtd_oobtest: verified up to eraseblock 768
[  269.199091] mtd_oobtest: verified 1024 eraseblocks
[  269.203950] mtd_oobtest: test 3 of 5
[  270.153944] mtd_oobtest: writing OOBs of whole device
[  270.184817] mtd_oobtest: written up to eraseblock 0
[  274.253906] mtd_oobtest: written up to eraseblock 256
[  278.304987] mtd_oobtest: written up to eraseblock 512
[  282.377734] mtd_oobtest: written up to eraseblock 768
[  286.420526] mtd_oobtest: written 1024 eraseblocks
[  286.425326] mtd_oobtest: verifying all eraseblocks
[  286.445855] mtd_oobtest: verified up to eraseblock 0
[  287.822691] mtd_oobtest: verified up to eraseblock 256
[  289.182885] mtd_oobtest: verified up to eraseblock 512
[  290.549325] mtd_oobtest: verified up to eraseblock 768
[  291.910018] mtd_oobtest: verified 1024 eraseblocks
[  291.914908] mtd_oobtest: test 4 of 5
[  292.866482] mtd_oobtest: attempting to start write past end of OOB
[  292.872769] mtd_oobtest: an error is expected...
[  292.877437] mtd_oobtest: error occurred as expected
[  292.882388] mtd_oobtest: attempting to start read past end of OOB
[  292.888524] mtd_oobtest: an error is expected...
[  292.893213] mtd_oobtest: error occurred as expected
[  292.898130] mtd_oobtest: attempting to write past end of device
[  292.904117] mtd_oobtest: an error is expected...
[  292.908778] mtd_oobtest: error occurred as expected
[  292.913719] mtd_oobtest: attempting to read past end of device
[  292.919591] mtd_oobtest: an error is expected...
[  292.924275] mtd_oobtest: error occurred as expected
[  292.939108] mtd_oobtest: attempting to write past end of device
[  292.945314] mtd_oobtest: an error is expected...
[  292.949991] mtd_oobtest: error occurred as expected
[  292.954958] mtd_oobtest: attempting to read past end of device
[  292.960832] mtd_oobtest: an error is expected...
[  292.965519] mtd_oobtest: error occurred as expected
[  292.970436] mtd_oobtest: test 5 of 5
[  293.353327] mtd_oobtest: writing OOBs of whole device
[  293.358748] mtd_oobtest: written up to eraseblock 0
[  293.376318] mtd_oobtest: written up to eraseblock 0
[  293.520054] mtd_oobtest: written up to eraseblock 256
[  293.525416] mtd_oobtest: written up to eraseblock 256
[  293.670380] mtd_oobtest: written up to eraseblock 512
[  293.675740] mtd_oobtest: written up to eraseblock 512
[  293.821610] mtd_oobtest: written up to eraseblock 768
[  293.826949] mtd_oobtest: written up to eraseblock 768
[  293.970588] mtd_oobtest: written 1023 eraseblocks
[  293.975401] mtd_oobtest: verifying all eraseblocks
[  293.990560] mtd_oobtest: verified up to eraseblock 0
[  294.044032] mtd_oobtest: verified up to eraseblock 256
[  294.084619] mtd_oobtest: verified up to eraseblock 512
[  294.126433] mtd_oobtest: verified up to eraseblock 768
[  294.165784] mtd_oobtest: verified 1023 eraseblocks
[  294.170639] mtd_oobtest: finished with 0 errors
[  294.183643] =================================================
[  680.940230] 
[  680.941955] =================================================
[  680.947837] mtd_pagetest: MTD device: 3
[  680.963656] mtd_pagetest: MTD device size 134217728, eraseblock size 131072, page size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[  680.979125] mtd_test: scanning for bad eraseblocks
[  680.985544] mtd_test: block 316 is bad
[  681.003039] mtd_test: block 917 is bad
[  681.013254] mtd_test: scanned 1024 eraseblocks, 2 are bad
[  681.018816] mtd_pagetest: erasing whole device
[  681.996061] mtd_pagetest: erased 1024 eraseblocks
[  682.000848] mtd_pagetest: writing whole device
[  682.047637] mtd_pagetest: written up to eraseblock 0
[  688.833017] mtd_pagetest: written up to eraseblock 256
[  695.627467] mtd_pagetest: written up to eraseblock 512
[  702.445828] mtd_pagetest: written up to eraseblock 768
[  709.194956] mtd_pagetest: written 1024 eraseblocks
[  709.199851] mtd_pagetest: verifying all eraseblocks
[  709.293300] mtd_pagetest: verified up to eraseblock 0
[  726.138810] mtd_pagetest: verified up to eraseblock 256
[  742.916639] mtd_pagetest: verified up to eraseblock 512
[  759.762748] mtd_pagetest: verified up to eraseblock 768
[  776.475675] mtd_pagetest: verified 1024 eraseblocks
[  776.480664] mtd_pagetest: crosstest
[  776.484539] mtd_pagetest: reading page at 0x0
[  776.500772] mtd_pagetest: reading page at 0x7fff800
[  776.506272] mtd_pagetest: reading page at 0x0
[  776.510894] mtd_pagetest: verifying pages read at 0x0 match
[  776.516546] mtd_pagetest: crosstest ok
[  776.520480] mtd_pagetest: erasecrosstest
[  776.524452] mtd_pagetest: erasing block 0
[  776.529717] mtd_pagetest: writing 1st page of block 0
[  776.546505] mtd_pagetest: reading 1st page of block 0
[  776.551842] mtd_pagetest: verifying 1st page of block 0
[  776.557266] mtd_pagetest: erasing block 0
[  776.562543] mtd_pagetest: writing 1st page of block 0
[  776.568051] mtd_pagetest: erasing block 1023
[  776.585315] mtd_pagetest: reading 1st page of block 0
[  776.590643] mtd_pagetest: verifying 1st page of block 0
[  776.596064] mtd_pagetest: erasecrosstest ok
[  776.600328] mtd_pagetest: erasetest
[  776.603855] mtd_pagetest: erasing block 0
[  776.609124] mtd_pagetest: writing 1st page of block 0
[  776.624166] mtd_pagetest: erasing block 0
[  776.629215] mtd_pagetest: reading 1st page of block 0
[  776.634752] mtd_pagetest: verifying 1st page of block 0 is all 0xff
[  776.641247] mtd_pagetest: erasetest ok
[  776.645047] mtd_pagetest: finished with 0 errors
[  776.659316] =================================================
[  813.279152] 
[  813.280872] =================================================
[  813.286736] mtd_readtest: MTD device: 3
[  813.304677] mtd_readtest: MTD device size 134217728, eraseblock size 131072, page size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[  813.320133] mtd_test: scanning for bad eraseblocks
[  813.340247] mtd_test: block 316 is bad
[  813.361102] mtd_test: block 917 is bad
[  813.365642] mtd_test: scanned 1024 eraseblocks, 2 are bad
[  813.371236] mtd_readtest: testing page read
[  827.307978] mtd_readtest: finished
[  827.311495] =================================================
[  872.104334] 
[  872.105977] =================================================
[  872.111773] mtd_speedtest: MTD device: 3
[  872.115791] mtd_speedtest: MTD device size 134217728, eraseblock size 131072, page size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[  872.144566] mtd_test: scanning for bad eraseblocks
[  872.150139] mtd_test: block 316 is bad
[  872.154142] mtd_test: block 917 is bad
[  872.158012] mtd_test: scanned 1024 eraseblocks, 2 are bad
[  873.129035] mtd_speedtest: testing eraseblock write speed
[  896.786975] mtd_speedtest: eraseblock write speed is 5531 KiB/s
[  896.793012] mtd_speedtest: testing eraseblock read speed
[  906.852427] mtd_speedtest: eraseblock read speed is 13012 KiB/s
[  907.806007] mtd_speedtest: testing page write speed
[  932.631540] mtd_speedtest: page write speed is 5270 KiB/s
[  932.637025] mtd_speedtest: testing page read speed
[  942.883652] mtd_speedtest: page read speed is 12775 KiB/s
[  943.837307] mtd_speedtest: testing 2 page write speed
[  967.757883] mtd_speedtest: 2 page write speed is 5470 KiB/s
[  967.763571] mtd_speedtest: testing 2 page read speed
[  977.914108] mtd_speedtest: 2 page read speed is 12895 KiB/s
[  977.919763] mtd_speedtest: Testing erase speed
[  978.880217] mtd_speedtest: erase speed is 136836 KiB/s
[  978.885463] mtd_speedtest: Testing 2x multi-block erase speed
[  979.103001] mtd_speedtest: 2x multi-block erase speed is 619981 KiB/s
[  979.109559] mtd_speedtest: Testing 4x multi-block erase speed
[  979.323339] mtd_speedtest: 4x multi-block erase speed is 631961 KiB/s
[  979.329882] mtd_speedtest: Testing 8x multi-block erase speed
[  979.541457] mtd_speedtest: 8x multi-block erase speed is 638126 KiB/s
[  979.547993] mtd_speedtest: Testing 16x multi-block erase speed
[  979.756687] mtd_speedtest: 16x multi-block erase speed is 644413 KiB/s
[  979.763295] mtd_speedtest: Testing 32x multi-block erase speed
[  979.972792] mtd_speedtest: 32x multi-block erase speed is 644413 KiB/s
[  979.979423] mtd_speedtest: Testing 64x multi-block erase speed
[  980.189510] mtd_speedtest: 64x multi-block erase speed is 641254 KiB/s
[  980.196136] mtd_speedtest: finished
[  980.199691] =================================================
[  990.768858] 
[  990.770572] =================================================
[  990.776448] mtd_stresstest: MTD device: 3
[  990.794553] mtd_stresstest: MTD device size 134217728, eraseblock size 131072, page size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[  990.831237] mtd_test: scanning for bad eraseblocks
[  990.837349] mtd_test: block 316 is bad
[  990.842945] mtd_test: block 917 is bad
[  990.858831] mtd_test: scanned 1024 eraseblocks, 2 are bad
[  990.864702] mtd_stresstest: doing operations
[  990.869078] mtd_stresstest: 0 operations done
[ 1006.064161] mtd_stresstest: 1024 operations done
[ 1019.995691] mtd_stresstest: 2048 operations done
[ 1033.373661] mtd_stresstest: 3072 operations done
[ 1047.380562] mtd_stresstest: 4096 operations done
[ 1060.903347] mtd_stresstest: 5120 operations done
[ 1074.271605] mtd_stresstest: 6144 operations done
[ 1088.084848] mtd_stresstest: 7168 operations done
[ 1101.145225] mtd_stresstest: 8192 operations done
[ 1114.460050] mtd_stresstest: 9216 operations done
[ 1124.579963] mtd_stresstest: finished, 10000 operations done
[ 1124.585839] =================================================
[ 1191.017762] 
[ 1191.019488] =================================================
[ 1191.025350] mtd_subpagetest: MTD device: 3
[ 1191.042604] mtd_subpagetest: MTD device size 134217728, eraseblock size 131072, page size 2048, subpage size 2048, count of eraseblocks 1024, pages per eraseblock 64, OOB size 64
[ 1191.060156] mtd_test: scanning for bad eraseblocks
[ 1191.081143] mtd_test: block 316 is bad
[ 1191.090832] mtd_test: block 917 is bad
[ 1191.107359] mtd_test: scanned 1024 eraseblocks, 2 are bad
[ 1192.082790] mtd_subpagetest: writing whole device
[ 1192.088410] mtd_subpagetest: written up to eraseblock 0
[ 1192.316990] mtd_subpagetest: written up to eraseblock 256
[ 1192.534023] mtd_subpagetest: written up to eraseblock 512
[ 1192.749818] mtd_subpagetest: written up to eraseblock 768
[ 1192.966055] mtd_subpagetest: written 1024 eraseblocks
[ 1192.971178] mtd_subpagetest: verifying all eraseblocks
[ 1192.986433] mtd_subpagetest: verified up to eraseblock 0
[ 1193.130746] mtd_subpagetest: verified up to eraseblock 256
[ 1193.264266] mtd_subpagetest: verified up to eraseblock 512
[ 1193.398699] mtd_subpagetest: verified up to eraseblock 768
[ 1193.531363] mtd_subpagetest: verified 1024 eraseblocks
[ 1194.487203] mtd_subpagetest: verifying all eraseblocks for 0xff
[ 1194.520323] mtd_subpagetest: verified up to eraseblock 0
[ 1198.586458] mtd_subpagetest: verified up to eraseblock 256
[ 1202.915264] mtd_subpagetest: verified up to eraseblock 512
[ 1206.980799] mtd_subpagetest: verified up to eraseblock 768
[ 1211.017044] mtd_subpagetest: verified 1024 eraseblocks
[ 1211.022254] mtd_subpagetest: writing whole device
[ 1211.069251] mtd_subpagetest: written up to eraseblock 0
[ 1216.795927] mtd_subpagetest: written up to eraseblock 256
[ 1222.539298] mtd_subpagetest: written up to eraseblock 512
[ 1228.311730] mtd_subpagetest: written up to eraseblock 768
[ 1234.023293] mtd_subpagetest: written 1024 eraseblocks
[ 1234.028418] mtd_subpagetest: verifying all eraseblocks
[ 1234.068746] mtd_subpagetest: verified up to eraseblock 0
[ 1237.300199] mtd_subpagetest: verified up to eraseblock 256
[ 1240.518463] mtd_subpagetest: verified up to eraseblock 512
[ 1243.748402] mtd_subpagetest: verified up to eraseblock 768
[ 1246.954212] mtd_subpagetest: verified 1024 eraseblocks
[ 1247.906580] mtd_subpagetest: verifying all eraseblocks for 0xff
[ 1247.938841] mtd_subpagetest: verified up to eraseblock 0
[ 1252.006415] mtd_subpagetest: verified up to eraseblock 256
[ 1256.056679] mtd_subpagetest: verified up to eraseblock 512
[ 1260.126068] mtd_subpagetest: verified up to eraseblock 768
[ 1264.161988] mtd_subpagetest: verified 1024 eraseblocks
[ 1264.167204] mtd_subpagetest: finished with 0 errors
[ 1264.182901] =================================================



 *** SUBJECT HERE ***

*** BLURB HERE ***

Stefan Agner (6):
  mtd: nand: vf610_nfc: Freescale NFC for VF610, MPC5125 and others
  mtd: nand: vf610_nfc: add hardware BCH-ECC support
  mtd: nand: vf610_nfc: add device tree bindings
  ARM: vf610: enable NAND Flash Controller
  ARM: dts: vf610twr: add NAND flash controller peripherial
  ARM: dts: vf-colibri: enable NAND flash controller

 .../devicetree/bindings/mtd/vf610-nfc.txt          |  45 ++
 MAINTAINERS                                        |   6 +
 arch/arm/boot/dts/vf-colibri.dtsi                  |  32 +
 arch/arm/boot/dts/vf610-twr.dts                    |  44 ++
 arch/arm/boot/dts/vfxxx.dtsi                       |   8 +
 arch/arm/mach-imx/Kconfig                          |   1 +
 drivers/mtd/nand/Kconfig                           |  14 +
 drivers/mtd/nand/Makefile                          |   1 +
 drivers/mtd/nand/vf610_nfc.c                       | 839 +++++++++++++++++++++
 9 files changed, 990 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mtd/vf610-nfc.txt
 create mode 100644 drivers/mtd/nand/vf610_nfc.c

-- 
2.4.2




More information about the linux-arm-kernel mailing list