[U-Boot] [PATCH 1/7] common/board_f: add setup of initial stack frame for MIPS
Simon Glass
sjg at chromium.org
Mon Nov 17 07:24:46 CET 2014
Hi Daniel,
On 15 November 2014 22:46, Daniel Schwierzeck
<daniel.schwierzeck at 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 at 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 at 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
More information about the U-Boot
mailing list