[U-Boot] [PATCH] armv8: aarch64: Fix the warning about x1-x3 nonzero issue
Alison Wang
alison.wang at nxp.com
Fri Jan 13 09:23:12 CET 2017
> > 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]);
}
>
> > ---
> > arch/arm/cpu/armv8/transition.S | 44
> > +++++++++++++++++++++++++++++++++++++----
> > 1 file changed, 40 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm/cpu/armv8/transition.S
> > b/arch/arm/cpu/armv8/transition.S index adb9f35..06b6664 100644
> > --- a/arch/arm/cpu/armv8/transition.S
> > +++ b/arch/arm/cpu/armv8/transition.S
> > @@ -26,9 +26,27 @@ ENTRY(armv8_switch_to_el2)
> > * if CONFIG_ARMV8_SWITCH_TO_EL1 is defined.
> > * When running in EL2 now, jump to the
> > * address saved in x3.
> > + *
> > + * 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. Use x4 instead of x3 as parameter.
> > */
> > - br x3
> > -1: armv8_switch_to_el2_m x3, x4, x5
> > + mov x4, x3
> > + mov x3, #0
> > + br x4
> > +1:
> > + /*
> > + * 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. Use x4, x5, x6 instead of x3, x4,
> > + * x5 as parameters.
> > + */
> > + mov x5, x4
> > + mov x4, x3
> > + mov x3, #0
> > + armv8_switch_to_el2_m x4, x5, x6
> > ENDPROC(armv8_switch_to_el2)
> >
> > ENTRY(armv8_switch_to_el1)
> > @@ -36,9 +54,27 @@ ENTRY(armv8_switch_to_el1)
> > 0:
> > /* x3 is kernel entry point. When running in EL1
> > * now, jump to the address saved in x3.
> > + *
> > + * 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. Use x4 instead of x3 as parameter.
> > + */
> > + mov x4, x3
> > + mov x3, #0
> > + br x4
> > +1:
> > + /*
> > + * 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. Use x4, x5, x6 instead of x3, x4,
> > + * x5 as parameters.
> > */
> > - br x3
> > -1: armv8_switch_to_el1_m x3, x4, x5
> > + mov x5, x4
> > + mov x4, x3
> > + mov x3, #0
> > + armv8_switch_to_el1_m x4, x5, x6
> > ENDPROC(armv8_switch_to_el1)
> >
> > WEAK(armv8_el2_to_aarch32)
> > --
> > 2.1.0.27.g96db324
> >
Best Regards,
Alison Wang
More information about the U-Boot
mailing list