
On 01/13/2017 09:23 AM, Alison Wang wrote:
Am 13.01.2017 um 08:50 schrieb Alison Wang b18965@freescale.com:
For 64-bit kernel, there is a warning about x1-x3 nonzero in
violation
of boot protocol. x3 should be reset to zero before jumping to the kernel.
This patch will adjust the parameters to transfer and make sure x3 is zero.
Signed-off-by: Alison Wang alison.wang@nxp.com
If x3 is part of the boot protocol, please treat it as function argument rather than hard code it to 0.
[Alison Wang] I think x3 need to set to 0. Refer to the codes for the warning in kernel,
if (boot_args[1] || boot_args[2] || boot_args[3]) { pr_err("WARNING: x1-x3 nonzero in violation of boot protocol:\n" "\tx1: %016llx\n\tx2: %016llx\n\tx3: %016llx\n" "This indicates a broken bootloader or old kernel\n", boot_args[1], boot_args[2], boot_args[3]); }
Yes, that merely means that the kernel doesn't take 3 arguments, it takes 4. Today args[1..3] have to be 0, but I don't want to iron that out in u-boot code.
So in pseudo-code, what we do today is we call
entry(dt_addr, 0, 0);
and instead we should be calling
entry(dt_addr, 0, 0, 0);
So in U-Boot code that means we should change the prototype for our switch function from
void armv8_switch_to_el2(u64 args, u64 mach_nr, u64 fdt_addr, u64 entry_point, u64 es_flag);
to
void armv8_switch_to_el2(u64 args, u64 mach_nr, u64 fdt_addr, u64 arg4, u64 entry_point, u64 es_flag);
and adapt the macros accordingly to use x5/x6 instead of x4/5.
Alex