diff mbox series

[v2,2/2] microblaze: start.S: Use board_init_f_alloc/init in early init

Message ID 20200924085437.26867-2-ovidiu.panait@windriver.com
State New
Delegated to: Michal Simek
Headers show
Series [v2,1/2] microblaze: start.S: Factor out exception setup code to __setup_exceptions | expand

Commit Message

Ovidiu Panait Sept. 24, 2020, 8:54 a.m. UTC
Implement early init by calling generic board_init_f_alloc_reserve and
board_init_f_init_reserve functions:
* drop SYS_MALLOC_F_LEN related code, as allocation and gd->malloc_base
  assignment are taken care of by the generic functions
* drop _gd logic

Cc: Michal Simek <monstr@monstr.eu>
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---
v2:
- do not set stack high protection twice
- remove CONFIG_SYS_MALLOC_F_LEN from CONFIG_SPL_STACK_ADDR computation

 arch/microblaze/cpu/start.S          | 46 +++++++++++++---------------
 include/configs/microblaze-generic.h |  3 +-
 2 files changed, 23 insertions(+), 26 deletions(-)

Comments

Michal Simek Sept. 24, 2020, 2:31 p.m. UTC | #1
On 24. 09. 20 10:54, Ovidiu Panait wrote:
> Implement early init by calling generic board_init_f_alloc_reserve and
> board_init_f_init_reserve functions:
> * drop SYS_MALLOC_F_LEN related code, as allocation and gd->malloc_base
>   assignment are taken care of by the generic functions
> * drop _gd logic
> 
> Cc: Michal Simek <monstr@monstr.eu>
> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
> ---
> v2:
> - do not set stack high protection twice
> - remove CONFIG_SYS_MALLOC_F_LEN from CONFIG_SPL_STACK_ADDR computation
> 
>  arch/microblaze/cpu/start.S          | 46 +++++++++++++---------------
>  include/configs/microblaze-generic.h |  3 +-
>  2 files changed, 23 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
> index b9c6ccc912..9479737aa2 100644
> --- a/arch/microblaze/cpu/start.S
> +++ b/arch/microblaze/cpu/start.S
> @@ -17,25 +17,39 @@ _start:
>  
>  	addi	r8, r0, __end
>  	mts	rslr, r8
> -	/* TODO: Redo this code to call board_init_f_*() */
> +
>  #if defined(CONFIG_SPL_BUILD)
>  	addi	r1, r0, CONFIG_SPL_STACK_ADDR
> -	mts	rshr, r1
> -	addi	r1, r1, -4	/* Decrement SP to top of memory */
> -#else
> -#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> -	addi	r1, r0, CONFIG_SYS_INIT_SP_OFFSET - CONFIG_VAL(SYS_MALLOC_F_LEN)
>  #else
>  	addi	r1, r0, CONFIG_SYS_INIT_SP_OFFSET
>  #endif
> -	mts	rshr, r1
> +
>  	addi	r1, r1, -4	/* Decrement SP to top of memory */
>  
> +	/* Call board_init_f_alloc_reserve with the current stack pointer as
> +	 * parameter. */
> +	add	r5, r0, r1
> +	bralid	r15, board_init_f_alloc_reserve
> +	nop
> +
> +	/* board_init_f_alloc_reserve returns a pointer to the allocated area
> +	 * in r3. Set the new stack pointer below this area. */
> +	add	r1, r0, r3
> +	mts	rshr, r1
> +	addi	r1, r1, -4
> +
> +	/* Call board_init_f_init_reserve with the address returned by
> +	 * board_init_f_alloc_reserve as parameter. */
> +	add	r5, r0, r3
> +	bralid	r15, board_init_f_init_reserve
> +	nop
> +
> +#if !defined(CONFIG_SPL_BUILD)
>  	/* Setup vectors with pre-relocation symbols */
>  	or	r5, r0, r0
>  	bralid	r15, __setup_exceptions
>  	nop
> -#endif /* CONFIG_SPL_BUILD */
> +#endif
>  
>  	/* Flush cache before enable cache */
>  	addik	r5, r0, 0
> @@ -48,7 +62,6 @@ _start:
>  	ori	r12, r12, 0x1a0
>  	mts	rmsr, r12
>  
> -	/* TODO: Redo this code to call board_init_f_*() */
>  clear_bss:
>  	/* clear BSS segments */
>  	addi	r5, r0, __bss_start
> @@ -67,27 +80,12 @@ clear_bss:
>  #endif
>  #ifndef CONFIG_SPL_BUILD
>  	or	r5, r0, r0	/* flags - empty */
> -	addi    r31, r0, _gd
> -#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> -	addi	r6, r0, CONFIG_SYS_INIT_SP_OFFSET
> -	swi	r6, r31, GD_MALLOC_BASE
> -#endif
>  	brai	board_init_f
>  #else
> -	addi	r31, r0, _gd
> -#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> -	addi	r6, r0, CONFIG_SPL_STACK_ADDR
> -	swi	r6, r31, GD_MALLOC_BASE
> -#endif
>  	brai	board_init_r
>  #endif
>  1:	bri	1b
>  
> - .section .bss
> -.align 4
> -_gd:
> -         .space  GENERATED_GBL_DATA_SIZE
> -
>  #ifndef CONFIG_SPL_BUILD
>  	.text
>  	.ent	__setup_exceptions
> diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
> index 8ca0e83c78..dfc2cd97d3 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -167,8 +167,7 @@
>  #define CONFIG_SYS_INIT_RAM_SIZE	0x100000
>  
>  # define CONFIG_SPL_STACK_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \
> -					 CONFIG_SYS_INIT_RAM_SIZE - \
> -					 CONFIG_SYS_MALLOC_F_LEN)
> +					 CONFIG_SYS_INIT_RAM_SIZE)
>  
>  /* Just for sure that there is a space for stack */
>  #define CONFIG_SPL_STACK_SIZE		0x100
> 

Applied.
M
diff mbox series

Patch

diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index b9c6ccc912..9479737aa2 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -17,25 +17,39 @@  _start:
 
 	addi	r8, r0, __end
 	mts	rslr, r8
-	/* TODO: Redo this code to call board_init_f_*() */
+
 #if defined(CONFIG_SPL_BUILD)
 	addi	r1, r0, CONFIG_SPL_STACK_ADDR
-	mts	rshr, r1
-	addi	r1, r1, -4	/* Decrement SP to top of memory */
-#else
-#if CONFIG_VAL(SYS_MALLOC_F_LEN)
-	addi	r1, r0, CONFIG_SYS_INIT_SP_OFFSET - CONFIG_VAL(SYS_MALLOC_F_LEN)
 #else
 	addi	r1, r0, CONFIG_SYS_INIT_SP_OFFSET
 #endif
-	mts	rshr, r1
+
 	addi	r1, r1, -4	/* Decrement SP to top of memory */
 
+	/* Call board_init_f_alloc_reserve with the current stack pointer as
+	 * parameter. */
+	add	r5, r0, r1
+	bralid	r15, board_init_f_alloc_reserve
+	nop
+
+	/* board_init_f_alloc_reserve returns a pointer to the allocated area
+	 * in r3. Set the new stack pointer below this area. */
+	add	r1, r0, r3
+	mts	rshr, r1
+	addi	r1, r1, -4
+
+	/* Call board_init_f_init_reserve with the address returned by
+	 * board_init_f_alloc_reserve as parameter. */
+	add	r5, r0, r3
+	bralid	r15, board_init_f_init_reserve
+	nop
+
+#if !defined(CONFIG_SPL_BUILD)
 	/* Setup vectors with pre-relocation symbols */
 	or	r5, r0, r0
 	bralid	r15, __setup_exceptions
 	nop
-#endif /* CONFIG_SPL_BUILD */
+#endif
 
 	/* Flush cache before enable cache */
 	addik	r5, r0, 0
@@ -48,7 +62,6 @@  _start:
 	ori	r12, r12, 0x1a0
 	mts	rmsr, r12
 
-	/* TODO: Redo this code to call board_init_f_*() */
 clear_bss:
 	/* clear BSS segments */
 	addi	r5, r0, __bss_start
@@ -67,27 +80,12 @@  clear_bss:
 #endif
 #ifndef CONFIG_SPL_BUILD
 	or	r5, r0, r0	/* flags - empty */
-	addi    r31, r0, _gd
-#if CONFIG_VAL(SYS_MALLOC_F_LEN)
-	addi	r6, r0, CONFIG_SYS_INIT_SP_OFFSET
-	swi	r6, r31, GD_MALLOC_BASE
-#endif
 	brai	board_init_f
 #else
-	addi	r31, r0, _gd
-#if CONFIG_VAL(SYS_MALLOC_F_LEN)
-	addi	r6, r0, CONFIG_SPL_STACK_ADDR
-	swi	r6, r31, GD_MALLOC_BASE
-#endif
 	brai	board_init_r
 #endif
 1:	bri	1b
 
- .section .bss
-.align 4
-_gd:
-         .space  GENERATED_GBL_DATA_SIZE
-
 #ifndef CONFIG_SPL_BUILD
 	.text
 	.ent	__setup_exceptions
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 8ca0e83c78..dfc2cd97d3 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -167,8 +167,7 @@ 
 #define CONFIG_SYS_INIT_RAM_SIZE	0x100000
 
 # define CONFIG_SPL_STACK_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \
-					 CONFIG_SYS_INIT_RAM_SIZE - \
-					 CONFIG_SYS_MALLOC_F_LEN)
+					 CONFIG_SYS_INIT_RAM_SIZE)
 
 /* Just for sure that there is a space for stack */
 #define CONFIG_SPL_STACK_SIZE		0x100