mtd-util, flash_erase: MEMGETOOBSEL on davinci based board fail

Brian Norris computersforpeace at gmail.com
Tue Sep 20 16:48:20 EDT 2011


Add Liu Shuo, who was interested in similar problems with `flash_erase -j'.

On Tue, Sep 20, 2011 at 6:27 AM, Heiko Schocher <hs at denx.de> wrote:
> Artem Bityutskiy wrote:
>> Sorry, this is the right link:
>> http://git.infradead.org/mtd-utils.git
>
> with this tree and the brian branch I get:
>
> root at armv5te:/home/hs/bmk/mtd-utils# ./flash_erase -j /dev/mtd7 0 0
> flash_erase: error!: /dev/mtd7: unable to get NAND oobinfo
>             error 22 (Invalid argument)
> root at armv5te:/home/hs/bmk/mtd-utils#
>
> :-(
>
> As I see in mtd-util:flash_erase.c line 197:
>
> if (ioctl(fd, MEMGETOOBSEL, &oobinfo) != 0)
>              ^^^^^^^^^^^^
>              this is the "old" style ... which fails ...

Right, I haven't fixed all uses of MEMGETOOBSEL yet, and I definitely
didn't touch flash_erase yet, although the mechanisms are available
now.

I have provided ioctl(MEMWRITE) which, in addition to simply writing
data, has information about write mode that should replace
MEMGETOOBSEL. Particularly, you would be interested in
MTD_OPS_AUTO_OOB, which should be the only autoplacement routine
necessary. The `brian' branch that Artem mentions provides support in
libmtd for using the MEMWRITE ioctl, but nandwrite is the only utility
that uses it properly right now.

So the next step is for you (Heiko, Liu, or somebody else that wants
`flash_erase -j') to replace:

    `ioctl(MEMGETOOBSEL)' plus `mtd_write_oob()'

with

    `mtd_write()' using mode `MTD_OPS_AUTO_OOB'

I think it shouldn't be too difficult, but I do not have testing for
JFFS2. I recommend trying to cut out all the manual layout stuff from
flash_erase.c and instead making sure that `legacy_auto_oob_layout()'
has up-to-date support for old layout methods (i.e., MEMGETOOBSEL),
then for forward progress, you only need to make sure that the
in-kernel MTD_OPS_AUTO_OOB works as desired. No more duplication of
"auto" layouts in nandwrite, flash_erase, and in-kernel; just
in-kernel handling of "auto" mode and legacy libmtd functions for
supporting the old way.

Let me know if you have questions about my MEMWRITE changes. I would
be happy to clarify if needed.

Brian



More information about the linux-mtd mailing list