[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-mtd
mailing list