ARM: 8451/1: v7-M: Set an early stack for __v7m_setup
authorEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Wed, 4 Nov 2015 16:08:37 +0000 (17:08 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 16 Nov 2015 18:34:38 +0000 (18:34 +0000)
commita4124e7296000242243996e1ae2601cfadf276a5
tree93b53a9c4bedc358c6c53ec0a7b98344bf612c53
parent440ee365d30adbcd9a97fba9cd629cedb7e9b7cb
ARM: 8451/1: v7-M: Set an early stack for __v7m_setup

On ARM v7-M, when PROCINFO_INITFUNC (__v7m_setup) is called,
a stack is needed before calling the supervisor call (SVC),
which is used by the supervisor call to save the context.

Currently, __v7m_setup() prepares a temporary stack in the .text.init
section, which is is broken if the kernel is executing directly from
read-only memory.

In particular, this is the case for LPC43xx, which allows
to execute the kernel in-place from a serial flash through its SPIFI
controller.

This commit fixes the issue by seting an early stack to its usual location.

Also, __v7m_setup() is currently saving and restoring the previous
stack. That was bogus, because there's no stack previously set,
so this commit removes it.

Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/proc-v7m.S