[U-Boot] [PATCH] armv8: aarch64: Fix the warning about x1-x3 nonzero issue

Alexander Graf agraf at suse.de
Fri Jan 13 09:11: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.

Alex

> ---
> 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
> 



More information about the U-Boot mailing list