[U-Boot] [PATCH] armv8: aarch64: Fix the warning about x1-x3 nonzero issue
Alexander Graf
agraf at suse.de
Fri Jan 13 09:33:36 CET 2017
On 01/13/2017 09:23 AM, Alison Wang wrote:
>>> Am 13.01.2017 um 08:50 schrieb Alison Wang <b18965 at 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 at 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
More information about the U-Boot
mailing list