microblaze: start.S: Use board_init_f_alloc/init in early init
authorOvidiu Panait <ovidiu.panait@windriver.com>
Thu, 24 Sep 2020 08:54:37 +0000 (11:54 +0300)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 27 Oct 2020 07:01:36 +0000 (08:01 +0100)
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>
arch/microblaze/cpu/start.S
include/configs/microblaze-generic.h

index b9c6ccc..9479737 100644 (file)
@@ -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
index 8ca0e83..dfc2cd9 100644 (file)
 #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