Hi Daniel, On 15 November 2014 22:46, Daniel Schwierzeck <[email protected]> wrote: > The MIPS specific setup of the initial stack frame was not > ported to generic board_f. > > Signed-off-by: Daniel Schwierzeck <[email protected]> > > --- > > common/board_f.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/common/board_f.c b/common/board_f.c > index b5bebc9..57e8a67 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -579,7 +579,7 @@ static int reserve_stacks(void) > gd->irq_sp = gd->start_addr_sp; > # endif > #else > -# ifdef CONFIG_PPC > +# if defined(CONFIG_PPC) || defined(CONFIG_MIPS) > ulong *s; > # endif > > @@ -609,6 +609,12 @@ static int reserve_stacks(void) > s = (ulong *) gd->start_addr_sp; > *s = 0; /* Terminate back chain */ > *++s = 0; /* NULL return address */ > +# elif defined(CONFIG_MIPS) > + /* Clear initial stack frame */ > + s = (ulong *) gd->start_addr_sp; > + *s-- = 0; > + *s-- = 0; > + gd->start_addr_sp = (ulong) s; > # endif /* Architecture specific code */
Great to see this happening. There is a comment in the code here: /* * Handle architecture-specific things here * TODO([email protected]): Perhaps create arch_reserve_stack() * to handle this and put in arch/xxx/lib/stack.c */ Perhaps we should do this. You could create a weak function which is called for all archs, and implement it just for MIPS at present. I'm not sure about a good prototype. Perhaps pass it gd and comment that it is allowed to change memory to set up the stack, and adjust gd->start_addr_sp and other stack-related values. Also while I see that PPC writes above the stack pointer, I'm not sure why it is valid. Should you in fact use: *--s = 0; *--s = 0; Regards, Simon _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

