summaryrefslogtreecommitdiff
path: root/arch/mips
diff options
context:
space:
mode:
authorDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2016-06-04 16:13:21 +0200
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2016-11-30 16:11:46 +0100
commit924ad86638705fe37db98812f355260669f0f043 (patch)
tree696292f12a5b94bac8b6daa4606313809e97f019 /arch/mips
parentc3e72ab80135a19ac6eb2585b69de0acf19b87c1 (diff)
downloadu-boot-924ad86638705fe37db98812f355260669f0f043.tar.gz
u-boot-924ad86638705fe37db98812f355260669f0f043.tar.bz2
u-boot-924ad86638705fe37db98812f355260669f0f043.zip
MIPS: add possibility to setup initial stack and global data in SRAM
This adds a new Kconfig option CONFIG_MIPS_INIT_STACK_IN_SRAM which a SoC can select if it supports some kind of SRAM. Together with CONFIG_SYS_INIT_SP_ADDR the initial stack and global data can be set up in that SRAM. This can be used to provide a C environment also for lowlevel_init(). Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/Kconfig11
-rw-r--r--arch/mips/cpu/start.S7
2 files changed, 18 insertions, 0 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 709ac5c0b3..d97930e577 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -302,6 +302,17 @@ config SWAP_IO_SPACE
config SYS_MIPS_CACHE_INIT_RAM_LOAD
bool
+config MIPS_INIT_STACK_IN_SRAM
+ bool
+ default n
+ help
+ Select this if the initial stack frame could be setup in SRAM.
+ Normally the initial stack frame is set up in DRAM which is often
+ only available after lowlevel_init. With this option the initial
+ stack frame and the early C environment is set up before
+ lowlevel_init. Thus lowlevel_init does not need to be implemented
+ in assembler.
+
config SYS_DCACHE_SIZE
int
default 0
diff --git a/arch/mips/cpu/start.S b/arch/mips/cpu/start.S
index f1040c27b6..6740fdf9ed 100644
--- a/arch/mips/cpu/start.S
+++ b/arch/mips/cpu/start.S
@@ -234,6 +234,11 @@ wr_done:
nop
#endif
+#ifdef CONFIG_MIPS_INIT_STACK_IN_SRAM
+ /* Set up initial stack and global data */
+ setup_stack_gd
+#endif
+
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
# ifdef CONFIG_SYS_MIPS_CACHE_INIT_RAM_LOAD
/* Initialize any external memory */
@@ -255,8 +260,10 @@ wr_done:
# endif
#endif
+#ifndef CONFIG_MIPS_INIT_STACK_IN_SRAM
/* Set up initial stack and global data */
setup_stack_gd
+#endif
move a0, zero # a0 <-- boot_flags = 0
PTR_LA t9, board_init_f