
Hi Marek,
On 29 August 2015 at 08:46, Marek Vasut marex@denx.de wrote:
On Saturday, August 29, 2015 at 04:39:43 PM, Simon Glass wrote:
Hi Marek,
On 29 August 2015 at 01:56, Marek Vasut marex@denx.de wrote:
On Saturday, August 29, 2015 at 01:21:31 AM, Simon Glass wrote:
Hi,
On 28 August 2015 at 02:41, Jian Luo Jian.Luo4@boschrexroth.de wrote:
gd->dm_root is not cleared in SPL after warm reset. This might cause DM initilazation failure.
Signed-off-by: Jian Luo jian.luo4@boschrexroth.de
arch/arm/mach-socfpga/spl.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/arch/arm/mach-socfpga/spl.c b/arch/arm/mach-socfpga/spl.c index 13ec24b..59fe1f2 100644 --- a/arch/arm/mach-socfpga/spl.c +++ b/arch/arm/mach-socfpga/spl.c @@ -181,5 +181,11 @@ void board_init_f(ulong dummy)
/* Configure simple malloc base pointer into RAM. */ gd->malloc_base = CONFIG_SYS_TEXT_BASE + (1024 * 1024);
/*
* gd->dm_root might contain non-zero value after warm reset.
* Clear it to avoid dm_init error
*/
gd->dm_root = NULL;
board_init_r(NULL, 0);
}
-- 1.9.1
This does not look like the root cause to me. global_data is zeroed by crt0.S if CONFIG_SPL_FRAMEWORK is set, which it seems to be for socfpga.
What boot path does 'warm reset' take?
Warm reset resets the CPU core(s) and jumps to 0x0 in SRAM (without re-reading anything from the boot media).
Does that mean it skips crt0.S? How come global_data is not zeroed there?
No, it does not mean it skips crt0.S . After the warm reset, the bootrom jumps onto the reset vector, so crt0.S (_main) must be executed.
Then I don't understand the need for this patch.
Also BTW it would be better if board_init_f() returned rather than calling board_init_r() directly.
I'm all for it, it'd trim down the stack utilisation slightly too.
Sound good.
Done ;-)
:-)
Best regards, Marek Vasut
Regards, Simon