mips: add a option to support not reserving malloc space on initial stack
authorWeijie Gao <weijie.gao@mediatek.com>
Tue, 21 Apr 2020 07:28:33 +0000 (09:28 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Mon, 27 Apr 2020 18:29:33 +0000 (20:29 +0200)
The initial stack on some platforms is too small to hold a large malloc
space. This patch adds a option to allow these platforms not reserving the
malloc space on initial stack. These platforms should set the malloc base
after DRAM is usable.

Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
arch/mips/Kconfig
arch/mips/cpu/start.S

index f7439c436bbda789cbc049e920adf66747564585..7b9d0072ebb2242c43c1ba88c05a757b44c0c88f 100644 (file)
@@ -317,6 +317,24 @@ config NEW_EXCEPTION_VECTOR_BASE
        help
          The exception vector base to be restored before booting linux kernel
 
+config INIT_STACK_WITHOUT_MALLOC_F
+       bool "Do not reserve malloc space on initial stack"
+       default n
+       help
+         Enable this option if you don't want to reserve malloc space on
+         initial stack. This is useful if the initial stack can't hold large
+         malloc space. Platform should set the malloc_base later when DRAM is
+         ready to use.
+
+config SPL_INIT_STACK_WITHOUT_MALLOC_F
+       bool "Do not reserve malloc space on initial stack in SPL"
+       default n
+       help
+         Enable this option if you don't want to reserve malloc space on
+         initial stack. This is useful if the initial stack can't hold large
+         malloc space. Platform should set the malloc_base later when DRAM is
+         ready to use.
+
 config SPL_LOADER_SUPPORT
        bool
        default n
index dd93df9e4a1ffe6d089ac2f8199cda9b1d1d0388..6de9a2f36243e6e5a815a3de0a2724e039dfcf0b 100644 (file)
@@ -59,7 +59,8 @@
                sp, sp, GD_SIZE         # reserve space for gd
        and     sp, sp, t0              # force 16 byte alignment
        move    k0, sp                  # save gd pointer
-#if CONFIG_VAL(SYS_MALLOC_F_LEN)
+#if CONFIG_VAL(SYS_MALLOC_F_LEN) && \
+    !CONFIG_IS_ENABLED(INIT_STACK_WITHOUT_MALLOC_F)
        li      t2, CONFIG_VAL(SYS_MALLOC_F_LEN)
        PTR_SUBU \
                sp, sp, t2              # reserve space for early malloc
@@ -75,7 +76,8 @@
        blt     t0, t1, 1b
         nop
 
-#if CONFIG_VAL(SYS_MALLOC_F_LEN)
+#if CONFIG_VAL(SYS_MALLOC_F_LEN) && \
+    !CONFIG_IS_ENABLED(INIT_STACK_WITHOUT_MALLOC_F)
        PTR_S   sp, GD_MALLOC_BASE(k0)  # gd->malloc_base offset
 #endif
        .endm