[U-Boot] [PATCH 4/4 V3] PXA: Adapt Voipac PXA270 to OneNAND SPL
Marek Vasut
marek.vasut at gmail.com
Fri Nov 4 21:07:08 CET 2011
> On 11/03/2011 07:55 PM, Marek Vasut wrote:
> >> On 11/03/2011 04:52 PM, Marek Vasut wrote:
> >> Why do we want to separate them? What is the fundamental difference
> >> between OneNAND, and a high-level NAND controller such as fsl_elbc?
> >
> > Honestly, I'm not the author of the subsystem, but please check the
> > documentation. The way we retrieve data from onenand is different to
> > NAND.
>
> What documentation? How is it different? There are substantial
> differences in how we "retrieve data" between drivers that use the NAND
> subsystem. Surely you've seen that in the mxs_nand driver. :-)
>
> >> Maybe there would be some differences on init if we can't produce
> >> "normal" ID data, but that doesn't justify duplicating the whole
> >> subsystem.
> >
> > Where do you see such duplication? cmd_onenand ?
>
> cmd_onenand and env_onenand are the most irritating, since they're at a
> layer that really shouldn't care about the differences -- we should
> probably have a plain "mtd" command instead, for most of the functionality.
>
> There's also onenand_bbt.c -- what are the hardware-based differences in
> how the bad block table is managed?
>
> nand_base.c/onenand_base.c are less clear. Obviously much of what is in
> onenand_base.c would be in the controller driver if it used the NAND
> subsystem. But it looks like some of it is duplication.
>
> >> Why should the code that just wants to use an API to move data around
> >> need to care which it is? Why should there be behavioral differences
> >> that aren't rooted in the actual hardware? Another approach might be to
> >> use MTD as the common interface, but factor out common code into
> >> libraries that drivers can use, and avoid the main nand_base.c code even
> >> for things like fsl_elbc.
> >
> > I think you're mistaken here. OneNAND != NAND.
>
> Well, last I tried I couldn't find any public documentation, so all I
> have to go on is the code, some marketing-type info, and asking
> questions of people that appear to know more about OneNAND than I do. :-)
>
> From what I can see, it looks like NAND with an integrated controller
> that exposes an unusual command set, but still for the most part
> provides the same operations. Several of our existing NAND-subsystem
> drivers have to fake the command set for the generic layer as well.
> Initialization/identification might be a problem area that current
> drivers don't have to deal with, though. Actually integrating OneNAND
> with NAND would likely involve an already-needed restructuring of the
> subsystem.
>
> If the answer really is that it makes sense to consider OneNAND to be a
> totally different thing from NAND, then it's outside my jurisdiction as
> NAND custodian -- which is fine with me. Frankly, even if it does make
> sense to merge them, I'd rather not be custodian of the OneNAND stuff
> unless someone is actually willing to do the merge. I don't have access
> to hardware or documentation, and it's an entirely separate codebase.
> People just started sending me the patches a few years back.
>
> >> This is not a new complaint -- I've asked for this before but nobody's
> >> put the time into sorting out the mess (and I have neither time nor
> >> hardware nor documentation). The SPL load_image function is a simple
> >> enough interface to start with, though. :-)
> >
> > Well, it seems what you are proposing is way beyond the scope of this
> > patchset.
> >
> >> In fact, it should probably just be spl_load_image() with whatever boot
> >> source has been configured into this SPL build.
> >
> > What if you have two boot sources?
>
> Traditionally SPL has been small and purpose-built to do exactly one
> thing -- so we decide at compile-time things that we might otherwise
> decide at runtime.
>
> If there's a requirement for multiple boot sources decided at runtime,
> then we'll obviously need a runtime mechanism. -- but it seems a bit
> hackish to why does it matter whether it's two different types of
> device, or two of the same type of device (possibly with different
> controller types)? If the answer is that, for example, NAND versus USB
> versus MMC is a likely use case, but two different NANDs is not likely,
> is NAND versus OneNAND any more likely?
>
> Maybe spl_load_image should be a function pointer that board code sets,
> with each implementation being distinctly named (in which case
> nand_spl_load_image would become nand_spl_simple_load_image, unless we
> move it to nand_spl_load.c and make nand_read_page a function pointer).
> If needed to save a few bytes, we could use #defines to eliminate the
> function pointers in a single-target SPL build.
>
> For now, until we decide to do something SPL-wide, call it what you want.
>
Well basically from what I see, you'd like me to do the NAND/OneNAND merge. As I
already said, that's way out of the scope of this patchset so I'm not doing
that. Either way, are you OK with current state of the patch?
M
More information about the U-Boot
mailing list