
Hi Daniel,
On 15 November 2014 22:46, Daniel Schwierzeck daniel.schwierzeck@gmail.com wrote:
The MIPS specific setup of the initial stack frame was not ported to generic board_f.
Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com
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(sjg@chromium.org): 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