diff mbox

[U-Boot,3/3] powerpc: mpc52xx: Clear GD in the main U-Boot stage for SPL usage

Message ID 1416386268-31398-3-git-send-email-sr@denx.de
State Accepted
Headers show

Commit Message

Stefan Roese Nov. 19, 2014, 8:37 a.m. UTC
When an MPC5200 based board is used with SPL support, the main
U-Boot needs to clear the GD (global data) struct again.

Otherwise the generic board init code in board_init_f (when
CONFIG_SYS_GENERIC_BOARD is defined) will not initialize all
GD variables correctly. Resulting in a hangup on the a4m2k
board.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
---
 arch/powerpc/cpu/mpc5xxx/start.S | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

Comments

Wolfgang Denk Nov. 19, 2014, 12:09 p.m. UTC | #1
Dear Stefan Roese,

In message <1416386268-31398-3-git-send-email-sr@denx.de> you wrote:
> When an MPC5200 based board is used with SPL support, the main
> U-Boot needs to clear the GD (global data) struct again.
> 
> Otherwise the generic board init code in board_init_f (when
> CONFIG_SYS_GENERIC_BOARD is defined) will not initialize all
> GD variables correctly. Resulting in a hangup on the a4m2k
> board.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> ---
>  arch/powerpc/cpu/mpc5xxx/start.S | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)

Applied, thanks.

Best regards,

Wolfgang Denk
diff mbox

Patch

diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S
index 02c706e..94eb0d3 100644
--- a/arch/powerpc/cpu/mpc5xxx/start.S
+++ b/arch/powerpc/cpu/mpc5xxx/start.S
@@ -76,6 +76,21 @@  _start:
 	 * been done in the SPL u-boot version.
 	 */
 	GET_GOT			/* initialize GOT access		*/
+
+	/*
+	 * The GD (global data) struct needs to get cleared. Lets do
+	 * this by calling memset().
+	 * This function is called when the platform is build with SPL
+	 * support from the main (full-blown) U-Boot. And the GD needs
+	 * to get cleared (again) so that the following generic
+	 * board support code, defined via CONFIG_SYS_GENERIC_BOARD,
+	 * initializes all variables correctly.
+	 */
+	mr	r3, r2		/* parameter 1:	 GD pointer		*/
+	li	r4,0		/* parameter 2:	 value to fill		*/
+	li	r5,GD_SIZE	/* parameter 3:	 count			*/
+	bl	memset
+
 	bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 	/* NOTREACHED - board_init_f() does not return */
 #else