On Sat, 2011-08-20 at 08:01 +0200, Albert ARIBAUD wrote:

What exactly prevents ARM Linux from booting when FDT or initrd are 
above 768MB? Can this limitation not be lifter on the Linux side?

I don't think it reasonably can be.

I have to start by saying that I am in no way a Linux VM expert. But...

With Linux HIGHMEM configured the last 1/4GB of the kernel virtual address space is reserved for a few things, including explicitly mapping in parts of the last 1/4GB of physical memory as needed.   I just don't think the VM subsystem is initialized enough to do this remapping so early, even if one wanted to make the calls.  Indeed, I don't see how it could be initialized this early since the FDT can contain information about physical memory.

Some other platforms limit u-boot to accessing the first 8MB of RAM using CONFIG_SYS_BOOTMAPSZ, but that resulted in a failure to boot in my test.  I did not chase down exactly why that approach failed.

>
> +#ifndef CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE
> +#define CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE	(768*1024*1024)
> +#endif

I'd tend to think that if no max size was defined, then we should not limit.

I was just going with the example already in place for powerpc.  I'm reluctant to change this without having more background on why it's this way now.

-dl