ARM: 8830/1: NOMMU: Toggle only bits in EXC_RETURN we are really care of
authorVladimir Murzin <vladimir.murzin@arm.com>
Fri, 25 Jan 2019 14:18:37 +0000 (15:18 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Fri, 1 Feb 2019 21:44:19 +0000 (21:44 +0000)
commit72cd4064fccaae15ab84d40d4be23667402df4ed
treedbd4813fa104ed4e0359e5a546acee47fb5ef613
parenteb7ff9023e4f2998d527b37bffe794759800332a
ARM: 8830/1: NOMMU: Toggle only bits in EXC_RETURN we are really care of

ARMv8M introduces support for Security extension to M class, among
other things it affects exception handling, especially, encoding of
EXC_RETURN.

The new bits have been added:

Bit [6] Secure or Non-secure stack
Bit [5] Default callee register stacking
Bit [0] Exception Secure

which conflicts with hard-coded value of EXC_RETURN:

In fact, we only care of few bits:

Bit [3]  Mode (0 - Handler, 1 - Thread)
Bit [2]  Stack pointer selection (0 - Main, 1 - Process)

We can toggle only those bits and left other bits as they were on
exception entry.

It is basically, what patch does - saves EXC_RETURN when we do
transition form Thread to Handler mode (it is first svc), so later
saved value is used instead of EXC_RET_THREADMODE_PROCESSSTACK.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/v7m.h
arch/arm/kernel/entry-header.S
arch/arm/kernel/entry-v7m.S
arch/arm/mm/proc-v7m.S