[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