[U-Boot] Some notes and status on porting U-Boot to the Cavium 64-bit Octeon MIPS Processor
Wolfgang Denk
wd at denx.de
Tue Feb 8 09:53:27 CET 2011
Dear Aaron Williams,
In message <201102071524.17440.Aaron.Williams at caviumnetworks.com> you wrote:
>
> > these. I understand that you are using a 64 bit port of U-Boot?
>
> No. We are using a 32-bit port since I think trying to make a 64-bit port of
> U-Boot would be far more involved. We do have support for loading and
> executing 64-bit ELF images, however. We use special memcpy/memset functions
> for 64-bit memory addressing in these cases.
OK, let's discuss this when we see your code.
> > Existing U-Boot deals with this by mapping just the lower and the
> > upper parts of available physical memory. See the CONFIG_VERY_BIG_RAM
> > config option.
> >
> I just looked at this and this. The only place I see this used is in
> arch/powerpc/lib/board.c and it looks like it just limits the effective memory
> size to CONFIG_MAX_MEM_MAPPED. This won't work for us. As I said, we need to
> move it out of the lower 4GB when there's more memory involved. We also don't
Why?
> want there being holes in the middle of the memory if we can help it, nor do
> we want to place u-boot at the lower end of memory. At least on MIPS the TLB
The question is what is the lesser of two evils: not mapping all of
the available memory and stick with a total of mapped memory that is
addressable in 32 bit adress space, or adding the complexity to deal
with 64 bit address spaces - which will require changes in _lots_ of
places.
But again I suggst to defer the discussion until we see your code.
> Would using virt_to_bus to convert pointers to DMA addresses be appropriate
> instead of the current assumption that pointers can be used as DMA addresses
> directly? This seems like a portable solution since on platforms where the
> pointer and DMA address are the same the macro would just do nothing. Even if
> we didn't use virtual addresses and were using, say, KSEG1 the pointer and
> physical address don't match.
Yes, I think this would indeed be a better approach.
> > Do I understand correctly t hat this SDK (whatever that might be) will
> > then have to be included with the U-Boot distribution?
> >
> > What would be alternatives to static linking, such as to avoid adding
> > all this code?
> >
> It would have to be included only for the Octeon processors. It is statically
I don't undertsand what you mean. Either it is part of the U-Boot
source tree, or it is not. You cannot add it "only for the Octeon
processors" - either it's there, or it ain't.
Given that we are talking about code in the order of 30% of the total
U-Boot code, probably not conforming to U-Boot coding standards, I am
anything but happy about such an addition. Assume ever SoC vendor
comes up with similar ideas...
> linked and we don't want to get away from this. Also, some of our u-boot files
> are in turn statically linked against some of our utilities, such as our
I understand that you do not _want_ to change this. My question is:
what would you do if you _had_ to change it?
> Also note that u-boot for Octeon can only be compiled with our toolchain,
> since there is some dependency on some of the include files from our GCC
> distribution as well, plus our toolchain distribution includes support for
> some of the extensions we make use of.
Can this be fixed? I mean, copying some header files should probably
be a solvable problem. What about of these "extensions" - are they
absolutely needed in U-Boot? Usually such extensions are either
performance optimizations which are not really needed in U-Boot, or
other well-localized operations that can b ehandlef with small
assembler stubs.
> > Such general changes should then NOT use CONFIG_OCTEON, but some
> > generic variable name.
> >
> I agree, though some many cases they are not general, such as some of the
> support for our compact flash in cmd_ide.c and a few other areas.
In general we do not want to see board or SoC specific changes to
common code.
> > Many boards use board specific commands; I see no problem with having
> > SoC specific commands either.
>
> I am placing these commands under arch/mips/cpu/octeon/commands rather than
> clutter up the common code, unless you feel it's better to put all the
> commands under the common code.
This sounds OK with me.
> > > I don't think I can include our SDK as a series of patches on the mailing
> > > list since it is about 26MB with some of the hardware generated files
> > > being hundreds of kilobytes to 12MB for our register database file
> > > (which fortunately isn't needed by u-boot!) It's available under the
> > > LGPL but not easily accessible through our open-source web site without
> > > registration :(
> >
> > U-Boot is supposed to be self-sufficient, i. e. to contain all parts
> > that are required to build a working U-Boot image. I see a potential
> > area of conflicts here.
>
> We don't have any problem including our SDK with U-Boot. I can work on trying
But we probably will have problems adding tons of such code which is
of no use to anybody else.
> The biggest portions of our SDK are generated files for dealing with errors,
> a register database (12MB!) and include files which define access functions to
I'd expect that only a tiny percentage of this is actually needed /
used in U-Boot. We should restric it to these actually used parts.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"We don't have to protect the environment -- the Second Coming is at
hand." - James Watt
More information about the U-Boot
mailing list