[U-Boot] [PATCH v1 8/9] sunxi: non-FEL SPL boot support for sun7i

Tom Rini
2014-03-17T19:33:19Z

On Sun, Mar 16, 2014 at 03:19:40PM +0000, Ian Campbell wrote:
> On Fri, 2014-03-14 at 15:03 -0400, Tom Rini wrote:
> > On 03/14/2014 02:50 PM, Hans de Goede wrote:
> > > Hi,
> > >
> > > On 03/14/2014 03:17 PM, Tom Rini wrote:
> > >> On Fri, Mar 14, 2014 at 10:33:50AM +0000, Ian Campbell wrote:
> > >>
> > >>> Based linux-sunxi#sunxi commit d854c4de2f57 "arm: Handle .gnu.hash section in
> > >>> ldscripts" vs v2014.01.
> > >> [snip]
> > >>> +/* Flat Device Tree (FDT/DT) support */
> > >>> +#define CONFIG_OF_LIBFDT
> > >>> +#define CONFIG_SYS_BOOTMAPSZ (16 << 20)
> > >>
> > >> This seems pretty small. This is to keep things from being relocated
> > >> into highmem right?
> > >
> > > Hmm, this reminds me that we currently need to do a "env set fdt_high ffffffff"
> > > in our boot scripts to get ftd to work at all. Would be nice to fix this for
> > > upstream. I'm afraid I'm clueless as to why we (sunxi) need it, but we do.
> >
> > You want to be setting bootm_low (even for bootz, it's about the
> > underlying boot mechanics that bootz and bootelf and ... hook into) to
> > the amount of lowmem the kernel will have. We do this because we do
> > want to make sure that the device tree isn't overwritten by the kernel
> > BSS or similar. Everyone with more DDR than kernel lowmem needs to be
> > doing something along these lines.
>
> So, I'm confused about what to do here ;-)

And I've not made things clearer with a mis-recollection of things. I
don't know why I keep saying "bootm_low" when I mean "bootm_size" like
I've done in later patches (and thankfully, when poking people on G+).

There's three ways to say "Please ensure that the FDT and if passed initrd
do not relocate above a certain location".
1) In the environment, set bootm_size to kernel lowmem. This means that
boot_start_lmb restricts the pool used by both fdt and initrd to that
value at the top.
2) In the environment, set fdt_high (and if using initrd, initrd_high)
to the top of lowmem. This means that we'll make sure they don't get
relocated above that value.
3) In the environment set initrd_high to top of lowmem and set
bootm_mapsize to lowmem.

In all of the above, lowmem can be replaced with any valid size that's
also smaller than lowmem, such as 256MB. Another option, in the
environment, is to set initrd_high and fdt_high to 0xffffffff and then
relocation is disabled. I would _not_ recommend this in the general
case as one of the points of relocation is to ensure we don't get
overwritten by the kernel BSS.

--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140317/9f81a1ff/attachment.pgp>