summaryrefslogtreecommitdiff
path: root/include/lib/aarch32/smcc_macros.S
diff options
context:
space:
mode:
Diffstat (limited to 'include/lib/aarch32/smcc_macros.S')
-rw-r--r--include/lib/aarch32/smcc_macros.S8
1 files changed, 7 insertions, 1 deletions
diff --git a/include/lib/aarch32/smcc_macros.S b/include/lib/aarch32/smcc_macros.S
index c80c3e47..4d329f5d 100644
--- a/include/lib/aarch32/smcc_macros.S
+++ b/include/lib/aarch32/smcc_macros.S
@@ -109,7 +109,13 @@
msr spsr_und, r9
msr sp_und, r10
msr lr_und, r11
- msr spsr, r12
+ /*
+ * Use the `_fsxc` suffix explicitly to instruct the assembler
+ * to update all the 32 bits of SPSR. Else, by default, the
+ * assembler assumes `_fc` suffix which only modifies
+ * f->[31:24] and c->[7:0] bits of SPSR.
+ */
+ msr spsr_fsxc, r12
/* Restore the rest of the general purpose registers */
ldm r0, {r0-r12}