From 924ad86638705fe37db98812f355260669f0f043 Mon Sep 17 00:00:00 2001 From: Daniel Schwierzeck Date: Sat, 4 Jun 2016 16:13:21 +0200 Subject: [PATCH] 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 --- arch/mips/Kconfig | 11 +++++++++++ arch/mips/cpu/start.S | 7 +++++++ 2 files changed, 18 insertions(+) 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