[PATCH v3 0/3] mtd: nand: gpmi: add proper raw access support

Huang Shijie shijie8 at gmail.com
Fri Oct 10 07:42:51 PDT 2014


On Wed, Oct 08, 2014 at 05:10:34PM +0200, Boris Brezillon wrote:
> On Wed, 8 Oct 2014 22:24:40 +0800
> Huang Shijie <shijie8 at gmail.com> wrote:
> 
> > On Tue, Sep 23, 2014 at 04:07:33PM +0200, Boris BREZILLON wrote:
> > > Hello Huang, Brian,
> > > 
> > > This is just a new proposal to support raw accesses in a more standard way
> > > in the GPMI driver.
> > > This series has been tested on an imx28 board.
> > > 
> > > Any suggestions are welcome.
> > > 
> > > Best Regards,
> > > 
> > > Boris
> > > 
> > > Changes since v2:
> > >  - fixed a bug in gpmi_move_bits
> > >  - add a raw_buffer field to be used when using raw access methods
> > >    (experienced memory corruptions when directly using page_buffer_virt
> > >    buffer)
> > >  - add raw OOB access functions
> > 
> > I tested this patch set today with the imx6dl-sabreauto board.
> > 
> >     NAND: Micron MT29F64G08CBABAWP
> > 	8192MiB, MLC, page size: 8192, OOB size: 744
> > 
> >     ECC: 40bit
> > 
> > The result:
> > 
> > [ 3672.779009] ==================================================
> > [ 3672.784974] mtd_nandbiterrs: MTD device: 0
> > [ 3672.789480] mtd_nandbiterrs: MTD device size 16777216, eraseblock=2097152, page=8192, oob=744
> > [ 3672.798169] mtd_nandbiterrs: Device uses 1 subpages of 8192 bytes
> > [ 3672.804554] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
> > [ 3672.812497] mtd_nandbiterrs: incremental biterrors test
> > [ 3672.818688] mtd_nandbiterrs: write_page
> > [ 3672.825529] mtd_nandbiterrs: rewrite page
> > [ 3672.837290] mtd_nandbiterrs: read_page
> > [ 3672.848407] mtd_nandbiterrs: error: read failed at 0x0
> > [ 3672.853644] mtd_nandbiterrs: After 0 biterrors per subpage, read reported error -74
> > [ 3672.862932] mtd_nandbiterrs: finished successfully.
> > [ 3672.867837] ==================================================
> > 
> > [ 3745.282368] ==================================================
> > [ 3745.288227] mtd_nandbiterrs: MTD device: 0
> > [ 3745.292913] mtd_nandbiterrs: MTD device size 16777216, eraseblock=2097152, page=8192, oob=744
> > [ 3745.301897] mtd_nandbiterrs: Device uses 1 subpages of 8192 bytes
> > [ 3745.308023] mtd_nandbiterrs: Using page=1, offset=8192, eraseblock=0
> > [ 3745.316778] mtd_nandbiterrs: incremental biterrors test
> > [ 3745.323017] mtd_nandbiterrs: write_page
> > [ 3745.328616] mtd_nandbiterrs: rewrite page
> > [ 3745.334191] mtd_nandbiterrs: read_page
> > [ 3745.346878] mtd_nandbiterrs: error: read failed at 0x2000
> > [ 3745.352352] mtd_nandbiterrs: After 0 biterrors per subpage, read reported error -74
> > [ 3745.361281] mtd_nandbiterrs: finished successfully.
> > [ 3745.366173] ==================================================
> > 
> > 
> > Is this okay?
> 
> No, it doesn't seem to be correct.
> But it's an MLC flash, so you'll most probably need to apply this patch
> to nandbiterrs testsuite:
> 
> http://code.bulix.org/f69wuu-87021
> 
> This patch is flashing the block between each bitflip insertion to
> avoid multiple write without erasure (which, AFAIK, is not supported
> by MLC flashes).
After I applied this patch. It seems ok now.

The test result:
[  244.789900] ==================================================
[  244.795826] mtd_nandbiterrs: MTD device: 1
[  244.799974] mtd_nandbiterrs: MTD device size 16777216, eraseblock=2097152, page=8192, oob=744
[  244.808563] mtd_nandbiterrs: Device uses 1 subpages of 8192 bytes
[  244.814697] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[  244.822622] mtd_nandbiterrs: incremental biterrors test
[  244.828146] mtd_nandbiterrs: write_page
[  244.833341] mtd_nandbiterrs: fill page
[  244.838831] mtd_nandbiterrs: rewrite page
[  244.844353] mtd_nandbiterrs: read_page
[  244.848585] mtd_nandbiterrs: verify_page
[  244.852915] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[  244.859973] mtd_nandbiterrs: Inserted biterror @ 0/5
[  244.866316] mtd_nandbiterrs: rewrite page
[  244.871629] mtd_nandbiterrs: read_page
[  244.875864] mtd_nandbiterrs: verify_page
[  244.880161] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[  244.887247] mtd_nandbiterrs: Inserted biterror @ 0/2
[  244.893499] mtd_nandbiterrs: rewrite page
[  244.898766] mtd_nandbiterrs: read_page
[  244.903071] mtd_nandbiterrs: verify_page
[  244.907369] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[  244.914463] mtd_nandbiterrs: Inserted biterror @ 0/0
[  244.920701] mtd_nandbiterrs: rewrite page
[  244.926109] mtd_nandbiterrs: read_page
[  244.930343] mtd_nandbiterrs: verify_page
[  244.934672] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[  244.941752] mtd_nandbiterrs: Inserted biterror @ 1/7
[  244.947988] mtd_nandbiterrs: rewrite page
[  244.953408] mtd_nandbiterrs: read_page
[  244.957641] mtd_nandbiterrs: verify_page
[  244.961970] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[  244.969029] mtd_nandbiterrs: Inserted biterror @ 1/5
[  244.975357] mtd_nandbiterrs: rewrite page
[  244.980627] mtd_nandbiterrs: read_page
[  244.984931] mtd_nandbiterrs: verify_page
[  244.989229] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[  244.996318] mtd_nandbiterrs: Inserted biterror @ 1/2
[  245.002576] mtd_nandbiterrs: rewrite page
[  245.007843] mtd_nandbiterrs: read_page
[  245.012139] mtd_nandbiterrs: verify_page
[  245.016439] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[  245.023526] mtd_nandbiterrs: Inserted biterror @ 1/0
[  245.029755] mtd_nandbiterrs: rewrite page
[  245.035149] mtd_nandbiterrs: read_page
[  245.039378] mtd_nandbiterrs: verify_page
[  245.043726] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[  245.050787] mtd_nandbiterrs: Inserted biterror @ 2/6
[  245.057123] mtd_nandbiterrs: rewrite page
[  245.062423] mtd_nandbiterrs: read_page
[  245.066654] mtd_nandbiterrs: verify_page
[  245.071001] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[  245.078060] mtd_nandbiterrs: Inserted biterror @ 2/5
[  245.084398] mtd_nandbiterrs: rewrite page
[  245.089673] mtd_nandbiterrs: read_page
[  245.093978] mtd_nandbiterrs: verify_page
[  245.098275] mtd_nandbiterrs: Successfully corrected 9 bit errors per subpage
[  245.105360] mtd_nandbiterrs: Inserted biterror @ 2/2
[  245.111622] mtd_nandbiterrs: rewrite page
[  245.116899] mtd_nandbiterrs: read_page
[  245.121188] mtd_nandbiterrs: verify_page
[  245.125485] mtd_nandbiterrs: Successfully corrected 10 bit errors per subpage
[  245.132658] mtd_nandbiterrs: Inserted biterror @ 2/0
[  245.138895] mtd_nandbiterrs: rewrite page
[  245.144294] mtd_nandbiterrs: read_page
[  245.148524] mtd_nandbiterrs: verify_page
[  245.152853] mtd_nandbiterrs: Successfully corrected 11 bit errors per subpage
[  245.159998] mtd_nandbiterrs: Inserted biterror @ 3/7
[  245.166326] mtd_nandbiterrs: rewrite page
[  245.171620] mtd_nandbiterrs: read_page
[  245.175849] mtd_nandbiterrs: verify_page
[  245.180146] mtd_nandbiterrs: Successfully corrected 12 bit errors per subpage
[  245.187314] mtd_nandbiterrs: Inserted biterror @ 3/6
[  245.193603] mtd_nandbiterrs: rewrite page
[  245.198874] mtd_nandbiterrs: read_page
[  245.203183] mtd_nandbiterrs: verify_page
[  245.207480] mtd_nandbiterrs: Successfully corrected 13 bit errors per subpage
[  245.214657] mtd_nandbiterrs: Inserted biterror @ 3/5
[  245.220958] mtd_nandbiterrs: rewrite page
[  245.226235] mtd_nandbiterrs: read_page
[  245.230462] mtd_nandbiterrs: verify_page
[  245.234787] mtd_nandbiterrs: Successfully corrected 14 bit errors per subpage
[  245.241965] mtd_nandbiterrs: Inserted biterror @ 3/2
[  245.248210] mtd_nandbiterrs: rewrite page
[  245.253614] mtd_nandbiterrs: read_page
[  245.257846] mtd_nandbiterrs: verify_page
[  245.262177] mtd_nandbiterrs: Successfully corrected 15 bit errors per subpage
[  245.269322] mtd_nandbiterrs: Inserted biterror @ 3/0
[  245.275670] mtd_nandbiterrs: rewrite page
[  245.280965] mtd_nandbiterrs: read_page
[  245.285202] mtd_nandbiterrs: verify_page
[  245.289501] mtd_nandbiterrs: Successfully corrected 16 bit errors per subpage
[  245.296677] mtd_nandbiterrs: Inserted biterror @ 4/2
[  245.302952] mtd_nandbiterrs: rewrite page
[  245.308237] mtd_nandbiterrs: read_page
[  245.312548] mtd_nandbiterrs: verify_page
[  245.316846] mtd_nandbiterrs: Successfully corrected 17 bit errors per subpage
[  245.324018] mtd_nandbiterrs: Inserted biterror @ 4/0
[  245.330264] mtd_nandbiterrs: rewrite page
[  245.335672] mtd_nandbiterrs: read_page
[  245.339895] mtd_nandbiterrs: verify_page
[  245.344222] mtd_nandbiterrs: Successfully corrected 18 bit errors per subpage
[  245.351399] mtd_nandbiterrs: Inserted biterror @ 5/7
[  245.357673] mtd_nandbiterrs: rewrite page
[  245.363085] mtd_nandbiterrs: read_page
[  245.367316] mtd_nandbiterrs: verify_page
[  245.371646] mtd_nandbiterrs: Successfully corrected 19 bit errors per subpage
[  245.378792] mtd_nandbiterrs: Inserted biterror @ 5/2
[  245.385136] mtd_nandbiterrs: rewrite page
[  245.390402] mtd_nandbiterrs: read_page
[  245.394704] mtd_nandbiterrs: verify_page
[  245.399002] mtd_nandbiterrs: Successfully corrected 20 bit errors per subpage
[  245.406178] mtd_nandbiterrs: Inserted biterror @ 5/0
[  245.412440] mtd_nandbiterrs: rewrite page
[  245.417711] mtd_nandbiterrs: read_page
[  245.422027] mtd_nandbiterrs: verify_page
[  245.426326] mtd_nandbiterrs: Successfully corrected 21 bit errors per subpage
[  245.433515] mtd_nandbiterrs: Inserted biterror @ 6/6
[  245.439795] mtd_nandbiterrs: rewrite page
[  245.445203] mtd_nandbiterrs: read_page
[  245.449432] mtd_nandbiterrs: verify_page
[  245.453762] mtd_nandbiterrs: Successfully corrected 22 bit errors per subpage
[  245.460927] mtd_nandbiterrs: Inserted biterror @ 6/2
[  245.467160] mtd_nandbiterrs: rewrite page
[  245.472558] mtd_nandbiterrs: read_page
[  245.476788] mtd_nandbiterrs: verify_page
[  245.481133] mtd_nandbiterrs: Successfully corrected 23 bit errors per subpage
[  245.488279] mtd_nandbiterrs: Inserted biterror @ 6/0
[  245.494610] mtd_nandbiterrs: rewrite page
[  245.499888] mtd_nandbiterrs: read_page
[  245.504194] mtd_nandbiterrs: verify_page
[  245.508490] mtd_nandbiterrs: Successfully corrected 24 bit errors per subpage
[  245.515676] mtd_nandbiterrs: Inserted biterror @ 7/7
[  245.522001] mtd_nandbiterrs: rewrite page
[  245.527275] mtd_nandbiterrs: read_page
[  245.531577] mtd_nandbiterrs: verify_page
[  245.535874] mtd_nandbiterrs: Successfully corrected 25 bit errors per subpage
[  245.543049] mtd_nandbiterrs: Inserted biterror @ 7/6
[  245.549291] mtd_nandbiterrs: rewrite page
[  245.554685] mtd_nandbiterrs: read_page
[  245.558916] mtd_nandbiterrs: verify_page
[  245.563252] mtd_nandbiterrs: Successfully corrected 26 bit errors per subpage
[  245.570397] mtd_nandbiterrs: Inserted biterror @ 7/2
[  245.576733] mtd_nandbiterrs: rewrite page
[  245.582124] mtd_nandbiterrs: read_page
[  245.586355] mtd_nandbiterrs: verify_page
[  245.590650] mtd_nandbiterrs: Successfully corrected 27 bit errors per subpage
[  245.597836] mtd_nandbiterrs: Inserted biterror @ 7/0
[  245.604124] mtd_nandbiterrs: rewrite page
[  245.609392] mtd_nandbiterrs: read_page
[  245.613704] mtd_nandbiterrs: verify_page
[  245.618005] mtd_nandbiterrs: Successfully corrected 28 bit errors per subpage
[  245.625179] mtd_nandbiterrs: Inserted biterror @ 8/7
[  245.631417] mtd_nandbiterrs: rewrite page
[  245.636685] mtd_nandbiterrs: read_page
[  245.641007] mtd_nandbiterrs: verify_page
[  245.645308] mtd_nandbiterrs: Successfully corrected 29 bit errors per subpage
[  245.652482] mtd_nandbiterrs: Inserted biterror @ 8/5
[  245.658726] mtd_nandbiterrs: rewrite page
[  245.664125] mtd_nandbiterrs: read_page
[  245.668355] mtd_nandbiterrs: verify_page
[  245.672697] mtd_nandbiterrs: Successfully corrected 30 bit errors per subpage
[  245.679842] mtd_nandbiterrs: Inserted biterror @ 8/4
[  245.686178] mtd_nandbiterrs: rewrite page
[  245.691492] mtd_nandbiterrs: read_page
[  245.695722] mtd_nandbiterrs: verify_page
[  245.700019] mtd_nandbiterrs: Successfully corrected 31 bit errors per subpage
[  245.707193] mtd_nandbiterrs: Inserted biterror @ 8/2
[  245.713444] mtd_nandbiterrs: rewrite page
[  245.718720] mtd_nandbiterrs: read_page
[  245.723022] mtd_nandbiterrs: verify_page
[  245.727319] mtd_nandbiterrs: Successfully corrected 32 bit errors per subpage
[  245.734489] mtd_nandbiterrs: Inserted biterror @ 8/0
[  245.740728] mtd_nandbiterrs: rewrite page
[  245.746126] mtd_nandbiterrs: read_page
[  245.750356] mtd_nandbiterrs: verify_page
[  245.754694] mtd_nandbiterrs: Successfully corrected 33 bit errors per subpage
[  245.761861] mtd_nandbiterrs: Inserted biterror @ 9/5
[  245.768127] mtd_nandbiterrs: rewrite page
[  245.773537] mtd_nandbiterrs: read_page
[  245.777776] mtd_nandbiterrs: verify_page
[  245.782109] mtd_nandbiterrs: Successfully corrected 34 bit errors per subpage
[  245.789253] mtd_nandbiterrs: Inserted biterror @ 9/4
[  245.795584] mtd_nandbiterrs: rewrite page
[  245.800900] mtd_nandbiterrs: read_page
[  245.805137] mtd_nandbiterrs: verify_page
[  245.809434] mtd_nandbiterrs: Successfully corrected 35 bit errors per subpage
[  245.816606] mtd_nandbiterrs: Inserted biterror @ 9/2
[  245.822860] mtd_nandbiterrs: rewrite page
[  245.828129] mtd_nandbiterrs: read_page
[  245.832428] mtd_nandbiterrs: verify_page
[  245.836727] mtd_nandbiterrs: Successfully corrected 36 bit errors per subpage
[  245.843914] mtd_nandbiterrs: Inserted biterror @ 9/0
[  245.850158] mtd_nandbiterrs: rewrite page
[  245.855565] mtd_nandbiterrs: read_page
[  245.859799] mtd_nandbiterrs: verify_page
[  245.864127] mtd_nandbiterrs: Successfully corrected 37 bit errors per subpage
[  245.871294] mtd_nandbiterrs: Inserted biterror @ 10/7
[  245.877618] mtd_nandbiterrs: rewrite page
[  245.883018] mtd_nandbiterrs: read_page
[  245.887249] mtd_nandbiterrs: verify_page
[  245.891575] mtd_nandbiterrs: Successfully corrected 38 bit errors per subpage
[  245.898721] mtd_nandbiterrs: Inserted biterror @ 10/6
[  245.905141] mtd_nandbiterrs: rewrite page
[  245.910420] mtd_nandbiterrs: read_page
[  245.914738] mtd_nandbiterrs: verify_page
[  245.919035] mtd_nandbiterrs: Successfully corrected 39 bit errors per subpage
[  245.926210] mtd_nandbiterrs: Inserted biterror @ 10/5
[  245.932549] mtd_nandbiterrs: rewrite page
[  245.937820] mtd_nandbiterrs: read_page
[  245.942120] mtd_nandbiterrs: Read reported 40 corrected bit errors
[  245.948311] mtd_nandbiterrs: verify_page
[  245.952639] mtd_nandbiterrs: Successfully corrected 40 bit errors per subpage
[  245.959784] mtd_nandbiterrs: Inserted biterror @ 10/4
[  245.966204] mtd_nandbiterrs: rewrite page
[  245.971508] mtd_nandbiterrs: read_page
[  245.981085] mtd_nandbiterrs: error: fill page failed at 0x0 err = -74
[  245.987538] mtd_nandbiterrs: After 41 biterrors per subpage, read reported error -74
[  245.996662] mtd_nandbiterrs: finished successfully.
[  246.001578] ==================================================

I think you can send out the new version.

thanks
Huang Shijie



More information about the linux-arm-kernel mailing list