On Tue, Mar 18, 2014 at 09:22:50AM +0100, Maxime Ripard wrote: > On Mon, Mar 17, 2014 at 03:33:19PM -0400, Tom Rini wrote: > > 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. > > IIRC, we added it not to make sure that it was in lowmem, but because > we had issues with large enough kernels (multi_v7_defconfig + embedded > initramfs) that would overwrite the relocated DTB whenever it was > decompressing itself.
Right. The series of problems often goes: 1) Oops, DTB moved into high mem, set fdt_high 0xffffffff to stop that 2) Oops, DTB overwritten by kernel, change fdt load addr. Which is why relocation is a good thing (at least on the device tree which tends to be small enough to not be a noticable thing) in the default case. -- Tom
signature.asc
Description: Digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot