
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 03/07/2014 11:41 AM, Andrianov, Vitaly wrote:
Hi Tom,
[snip]
- "fdt_high=0xffffffff\0" \
Please don't do this, set it to the top of kernel low mem.
The EVM may have up to 8GB of DDR and u-boot can see the first 2GB with physical address range 0x80000000-0xffffffff. If we don't use the "fdt_high" environment variable, u-boot relocates the dtb to the end of that memory, which is outside of the lowmem.
[snip]
But K2 lowmem VA starts from 0xc0000000 and has size ~760MB. That corresponds to the physical range 0x80000000-0xaf800000. That is why we have to use the "fdt_high=0xffffffff" environment
variable.
Have I missed something I u-boot memory configuration? Is there a way to tell u-boot to relocate fdt to the end lowmem?
Yes, set fdt_high to 0xaf800000 instead :)
I think there is a bug in the lmb_alloc_base() and this approach doesn't work.
else if (lmbbase < max_addr) { base = min(lmbbase + lmbsize, max_addr); base = lmb_align_down(base - size, align); } else
For boards that have DDR at the end of 32 bit address space the (lmbbase + lmbsize) = 0 which is < max_addr. So, base becomes 0, and moved to the "end of DDR" - size on the next line.
I tried a quick fix in the __lmb_alloc_base() and got the fdt relocated correctly. As I'm not sure that is only one buggy place in the lmb.c I don't want to commit the quick fix. Let's leave the "fdt_high=0xffffffff" in the Keystone2 for awhile and change it later when we fix the bug.
If you're committing to look at this later then yes.
- -- Tom