microblaze: spl: Do not call mem_malloc_init and use early alloc
authorMichal Simek <michal.simek@xilinx.com>
Tue, 3 Feb 2015 15:24:48 +0000 (16:24 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 9 Feb 2015 14:13:12 +0000 (15:13 +0100)
This patch has some parts connected together:
- Use _gd in bss section which is automatically cleared
  Location at SPL_MALLOC_END wasn't cleared at all
- Use MALLOC_F_LEN(early alloc) instead of FULL MALLOC
  (mem_malloc_init is not called at all)
- Simplify malloc and stack init.
  At the end of SPL addr is malloc area and below is stack

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/microblaze/cpu/start.S
include/configs/microblaze-generic.h

index cf9ee7e3e6ada4b1fb85767e722d355e9e9d26d1..953d3a15eef21c391f611bf01b346d187d79246f 100644 (file)
@@ -162,7 +162,11 @@ clear_bss:
 #endif
        brai    board_init_f
 #else
-       addi    r31, r0, CONFIG_SYS_SPL_MALLOC_END
+       addi    r31, r0, _gd
+#if defined(CONFIG_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
index 770acbea691b559edb5e793fa5dc6dae42532001..166ab4f05654e9e1a1a970989cb0be808c7e4c68 100644 (file)
 #endif
 
 #define CONFIG_SYS_MALLOC_LEN  0xC0000
-#define CONFIG_SYS_MALLOC_F_LEN        1024
+#ifndef CONFIG_SPL_BUILD
+# define CONFIG_SYS_MALLOC_F_LEN       1024
+#else
+# define CONFIG_SYS_MALLOC_SIMPLE
+# define CONFIG_SYS_MALLOC_F_LEN       0x150
+#endif
 
 /* Stack location before relocation */
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_TEXT_BASE
 /* BRAM start */
 #define CONFIG_SYS_INIT_RAM_ADDR       0x0
 /* BRAM size - will be generated */
-#define CONFIG_SYS_INIT_RAM_SIZE       0x10000
-/* Stack pointer prior relocation, must situated at on-chip RAM */
-#define CONFIG_SYS_SPL_MALLOC_END      (CONFIG_SYS_INIT_RAM_ADDR + \
-                                        CONFIG_SYS_INIT_RAM_SIZE - \
-                                        GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_RAM_SIZE       0x100000
 
-#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100
-
-/*
- * The main reason to do it in this way is that MALLOC_START
- * can't be defined - common/spl/spl.c
- */
-#if (CONFIG_SYS_SPL_MALLOC_SIZE != 0)
-# define CONFIG_SYS_SPL_MALLOC_START   (CONFIG_SYS_SPL_MALLOC_END - \
-                                        CONFIG_SYS_SPL_MALLOC_SIZE)
-# define CONFIG_SPL_STACK_ADDR         CONFIG_SYS_SPL_MALLOC_START
-#else
-# define CONFIG_SPL_STACK_ADDR         CONFIG_SYS_SPL_MALLOC_END
-#endif
+# define CONFIG_SPL_STACK_ADDR         (CONFIG_SYS_INIT_RAM_ADDR + \
+                                        CONFIG_SYS_INIT_RAM_SIZE - \
+                                        CONFIG_SYS_MALLOC_F_LEN)
 
 /* Just for sure that there is a space for stack */
 #define CONFIG_SPL_STACK_SIZE          0x100
 
 #define CONFIG_SPL_MAX_FOOTPRINT       (CONFIG_SYS_INIT_RAM_SIZE - \
                                         CONFIG_SYS_INIT_RAM_ADDR - \
-                                        GENERATED_GBL_DATA_SIZE - \
-                                        CONFIG_SYS_SPL_MALLOC_SIZE - \
+                                        CONFIG_SYS_MALLOC_F_LEN - \
                                         CONFIG_SPL_STACK_SIZE)
 
 #endif /* __CONFIG_H */