[U-Boot] armv8: fix gd after relocation

Message ID 1512681367-18205-1-git-send-email-york.sun@nxp.com
State Accepted
Delegated to: Tom Rini
Headers show
Series
  • [U-Boot] armv8: fix gd after relocation
Related show

Commit Message

York Sun Dec. 7, 2017, 9:16 p.m.
Commit 21f4486faa5d ("armv8: update gd after relocate") sets x18
without checking the return value of spl_relocate_stack_gd().

Signed-off-by: York Sun <york.sun@nxp.com>
CC: Kever Yang <kever.yang@rock-chips.com>
CC: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
---

 arch/arm/lib/crt0_64.S | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Stephen Warren Dec. 7, 2017, 9:42 p.m. | #1
On 12/07/2017 02:16 PM, York Sun wrote:
> Commit 21f4486faa5d ("armv8: update gd after relocate") sets x18
> without checking the return value of spl_relocate_stack_gd().

Reviewed-by: Stephen Warren <swarren@nvidia.com>

This matches what the 32-bit ARM code does, so I guess it's right.
Tom Rini Dec. 7, 2017, 10:53 p.m. | #2
On Thu, Dec 07, 2017 at 01:16:07PM -0800, York Sun wrote:

> Commit 21f4486faa5d ("armv8: update gd after relocate") sets x18
> without checking the return value of spl_relocate_stack_gd().
> 
> Signed-off-by: York Sun <york.sun@nxp.com>
> CC: Kever Yang <kever.yang@rock-chips.com>
> CC: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>

Applied to u-boot/master, thanks!

Patch

diff --git a/arch/arm/lib/crt0_64.S b/arch/arm/lib/crt0_64.S
index ccefce0..9cb7055 100644
--- a/arch/arm/lib/crt0_64.S
+++ b/arch/arm/lib/crt0_64.S
@@ -120,8 +120,9 @@  relocation_return:
 #endif /* !CONFIG_SPL_BUILD */
 #if defined(CONFIG_SPL_BUILD)
 	bl	spl_relocate_stack_gd           /* may return NULL */
-	/* set up gd here, outside any C code */
-	mov	x18, x0
+	/* set up gd here, outside any C code, if new stack is returned */
+	cmp	x0, #0
+	csel	x18, x0, x18, ne
 	/*
 	 * Perform 'sp = (x0 != NULL) ? x0 : sp' while working
 	 * around the constraint that conditional moves can not