From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alison Wang Date: Fri, 13 Jan 2017 08:23:12 +0000 Subject: [U-Boot] [PATCH] armv8: aarch64: Fix the warning about x1-x3 nonzero issue In-Reply-To: <13709292-AF28-404D-9BDE-E7F4CEB00657@suse.de> References: <1484293816-23554-1-git-send-email-b18965@freescale.com> <13709292-AF28-404D-9BDE-E7F4CEB00657@suse.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de > > Am 13.01.2017 um 08:50 schrieb Alison Wang : > > > > 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 > > 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