[U-Boot] [PATCH 0/6] Support NAND in fw_printenv/fw_setenv
Guennadi Liakhovetski
lg at denx.de
Tue Sep 2 01:33:50 CEST 2008
On Tue, 2 Sep 2008, Wolfgang Denk wrote:
> In message <Pine.LNX.4.64.0809011028550.4686 at axis700.grange> you wrote:
> >
> > 1. do not use the union
> >
> > well, I would still prefer to use it and I hope I will be allowed to do so
> > in a separate NAND-tool. I agree, it would be better to use the definition
> > from the environment.h directly. But:
>
> There is no such thing as a separate NAND tool - this mkes zero sense.
> There shall be one tool that supports both NOR and NAND (and soon
> probably DataFlash and OneNAND and ... ).
>
> > 2. do not use single.crc in redundant case
> >
> > This is done only at two places, yes, I realise, this is not very clean,
>
> Indeed. But the problem goes away automatically whenyou get rid of the
> union.
I'll try to explain again _why_ i introduced the union and why I still
don't see a good replacement for it.
As you know, in the tool we have to decide at run-time whether we are
dealing with a single environment copy or with current / redundant
configuration. With NAND support when _writing_ environment to NAND you
have to write page at a time, which means, at this point we _must_ have
the image in a contiguous buffer in RAM. And the image can have one of the
two possible formats - with and without the "flags" byte. In principle I
see only three possibilities to implement this:
(a) work with arbitrary non-contiguous data in RAM as before, and copy it
into an additional buffer just before writing to NAND
advantage: can keep the current struct
disadvantage: extra malloc
(b) use a plain data buffer, and, if needed, use the first byte in it for
flags
advantage: no extra malloc, no (explicit) union
disadvantage: confusing, have to work with byte-offsets instead of struct
/ union members, and, in fact, this is the same as using a union, just
implicit, calculating byte-offsets manually, instead of letting the
compiler do it
(c) use a union
advantage: clean access to all environment fields without the use of
byte-offsets
disadvantage: slightly more complex code
Please, just tell me which of these three you would prefer, or maybe there
is a fourth possibility I am still overseeing.
You also asked about the extra "char *data" pointer in the struct
environment, whether there is no danger that a different compiler version
will break it. This pointer uses no magic - it is just a plain simple
pointer, I use it to point to data inside the union to avoid having to
check every time whether we have the redundant environment or not. So, I
check it only once at initialisation time, set this pointer, and then just
use it to access the data buffer inside the image (union). No magic here.
> > 4. fix MTD_OLD
> >
> > Would we still need this with NAND-only tool?
>
> Yes of course we need it. I will not accept such thing as a NAND-only tool.
Ok. But NAND-support is not needed with MTD_OLD? So, if it cannot be
compiled with older kernels, we may just disable it per ifdef?
> > 5. clarify back-up mode
> >
> > This is actually a comment improvement, can do.
>
> Actually the whole implementation needs to be explained.
Ok.
> > Shall I keep support for NOR in the separate NAND version or completely
> > remove it? The "type == MTD_NORFLASH" code is quite small, so, removing it
>
> I don't understand why you come up with such an idea. There shall be
> just the one tool we have now, just with extended functionality. I
> just wanted to get rid of the futile attempts to make the one huge
> change looking like a series af several big but incremental changes.
How would you like to make such a replacement then? If I produce a patch
just from the current state to the final state, I think, it will look
worse than the broken-down patch-series. Otherwise we could remove the
current file and add a new one in two patches? This wouldn't be very good
either - you'd have to change Makefiles etc. to keep the tree compilable.
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
More information about the U-Boot
mailing list