SPM: Move SPM processing in Library mode to Secure Privileged Thread
This patch moves the bulk of SPM processing in Library mode
to request or return from a secure partition from Handler
to Secure Privileged Thread mode.
Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
Change-Id: I95b61661daa3a8e865b468e91be9a512832607a2
diff --git a/secure_fw/spm/include/tfm_arch.h b/secure_fw/spm/include/tfm_arch.h
index f9b7a3d..8a96d9f 100644
--- a/secure_fw/spm/include/tfm_arch.h
+++ b/secure_fw/spm/include/tfm_arch.h
@@ -36,7 +36,7 @@
uint32_t lr;
uint32_t ra;
uint32_t xpsr;
-};
+} __attribute__ ((aligned(8)));
#define TFM_STATE_RET_VAL(ctx) (((struct tfm_state_context_t *)((ctx)->sp))->r0)
diff --git a/secure_fw/spm/include/tfm_arch_v8m.h b/secure_fw/spm/include/tfm_arch_v8m.h
index 58576d3..a51c8c6 100644
--- a/secure_fw/spm/include/tfm_arch_v8m.h
+++ b/secure_fw/spm/include/tfm_arch_v8m.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -21,6 +21,7 @@
#define EXC_RETURN_FPU_FRAME_BASIC (1 << 4)
#define EXC_RETURN_MODE_THREAD (1 << 3)
#define EXC_RETURN_STACK_PROCESS (1 << 2)
+#define EXC_RETURN_STACK_MAIN (0 << 2)
#define EXC_RETURN_RES0 (0 << 1)
#define EXC_RETURN_EXC_SECURE (1)
@@ -32,6 +33,13 @@
EXC_RETURN_STACK_PROCESS | EXC_RETURN_RES0 | \
EXC_RETURN_EXC_SECURE
+#define EXC_RETURN_THREAD_S_MSP \
+ EXC_RETURN_INDICATOR | EXC_RETURN_RES1 | \
+ EXC_RETURN_SECURE_STACK | EXC_RETURN_STACK_RULE | \
+ EXC_RETURN_FPU_FRAME_BASIC | EXC_RETURN_MODE_THREAD | \
+ EXC_RETURN_STACK_MAIN | EXC_RETURN_RES0 | \
+ EXC_RETURN_EXC_SECURE
+
#if defined(__ARM_ARCH_8_1M_MAIN__) || defined(__ARM_ARCH_8M_MAIN__)
struct tfm_arch_ctx_t {
uint32_t r4;