Introduce arch_reserve_stacks() to tailor gd->start_addr_sp and gd->irq_sp to the architecture needs. Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com> Reviewed-by: Simon Glass <sjg@chromium.org>master
parent
4db896236c
commit
68145d4c7b
@ -0,0 +1,42 @@ |
||||
/*
|
||||
* Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com> |
||||
* |
||||
* Copyright (c) 2011 The Chromium OS Authors. |
||||
* (C) Copyright 2002-2006 |
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
||||
* |
||||
* (C) Copyright 2002 |
||||
* Sysgo Real-Time Solutions, GmbH <www.elinos.com> |
||||
* Marius Groeger <mgroeger@sysgo.de> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
#include <common.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
int arch_reserve_stacks(void) |
||||
{ |
||||
#ifdef CONFIG_SPL_BUILD |
||||
gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */ |
||||
gd->irq_sp = gd->start_addr_sp; |
||||
#else |
||||
/* setup stack pointer for exceptions */ |
||||
gd->irq_sp = gd->start_addr_sp; |
||||
|
||||
# if !defined(CONFIG_ARM64) |
||||
# ifdef CONFIG_USE_IRQ |
||||
gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ); |
||||
debug("Reserving %zu Bytes for IRQ stack at: %08lx\n", |
||||
CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp); |
||||
|
||||
/* 8-byte alignment for ARM ABI compliance */ |
||||
gd->start_addr_sp &= ~0x07; |
||||
# endif |
||||
/* leave 3 words for abort-stack, plus 1 for alignment */ |
||||
gd->start_addr_sp -= 16; |
||||
# endif |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,31 @@ |
||||
/*
|
||||
* Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com> |
||||
* |
||||
* Copyright (c) 2011 The Chromium OS Authors. |
||||
* (C) Copyright 2002-2006 |
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
||||
* |
||||
* (C) Copyright 2002 |
||||
* Sysgo Real-Time Solutions, GmbH <www.elinos.com> |
||||
* Marius Groeger <mgroeger@sysgo.de> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
#include <common.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
int arch_reserve_stacks(void) |
||||
{ |
||||
ulong *s; |
||||
|
||||
/* setup stack pointer for exceptions */ |
||||
gd->irq_sp = gd->start_addr_sp; |
||||
|
||||
/* Clear initial stack frame */ |
||||
s = (ulong *)gd->start_addr_sp; |
||||
*s = 0; /* Terminate back chain */ |
||||
*++s = 0; /* NULL return address */ |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in new issue