On 13 July 2015 at 16:56, Alexander Graf <address@hidden> wrote:
The Linux kernel on aarch64 creates a page table entry at early bootup
that spans the 2MB range on memory spanning the fdt start address:
[ ALIGN_DOWN(fdt, 2MB) ... ALIGN_DOWN(fdt, 2MB) + 2MB ]
This means that when our current 4k alignment happens to fall at the end
of the aligned region, Linux tries to access memory that is not mapped.
The easy fix is to instead increase the alignment to 2MB, making Linux's
logic always succeed.
This is a kernel bug and should be fixed there. The booting
protocol document is pretty clear:
https://www.kernel.org/doc/Documentation/arm64/booting.txt
"The device tree blob (dtb) must be placed on an 8-byte boundary"