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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html