diff options
author | Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | 2016-06-04 14:13:21 (GMT) |
---|---|---|
committer | Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | 2016-11-30 15:11:46 (GMT) |
commit | 924ad86638705fe37db98812f355260669f0f043 (patch) | |
tree | 696292f12a5b94bac8b6daa4606313809e97f019 | |
parent | c3e72ab80135a19ac6eb2585b69de0acf19b87c1 (diff) | |
download | u-boot-924ad86638705fe37db98812f355260669f0f043.tar.xz |
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>
-rw-r--r-- | arch/mips/Kconfig | 11 | ||||
-rw-r--r-- | arch/mips/cpu/start.S | 7 |
2 files changed, 18 insertions, 0 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 709ac5c..d97930e 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 f1040c2..6740fdf 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 |