[U-Boot] [PATCH] arm: socfpga: dm: Fix DM initialization failure after warm reset
Marek Vasut
marex at denx.de
Sat Aug 29 16:46:25 CEST 2015
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 at 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 at 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 at 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.
> > > 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
More information about the U-Boot
mailing list