diff options
Diffstat (limited to 'arch/arm/mm/proc-v7m.S')
| -rw-r--r-- | arch/arm/mm/proc-v7m.S | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index 47a5acc64433..acd5a66dfc23 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S | |||
| @@ -139,6 +139,9 @@ __v7m_setup_cont: | |||
| 139 | cpsie i | 139 | cpsie i |
| 140 | svc #0 | 140 | svc #0 |
| 141 | 1: cpsid i | 141 | 1: cpsid i |
| 142 | ldr r0, =exc_ret | ||
| 143 | orr lr, lr, #EXC_RET_THREADMODE_PROCESSSTACK | ||
| 144 | str lr, [r0] | ||
| 142 | ldmia sp, {r0-r3, r12} | 145 | ldmia sp, {r0-r3, r12} |
| 143 | str r5, [r12, #11 * 4] @ restore the original SVC vector entry | 146 | str r5, [r12, #11 * 4] @ restore the original SVC vector entry |
| 144 | mov lr, r6 @ restore LR | 147 | mov lr, r6 @ restore LR |
| @@ -149,10 +152,10 @@ __v7m_setup_cont: | |||
| 149 | 152 | ||
| 150 | @ Configure caches (if implemented) | 153 | @ Configure caches (if implemented) |
| 151 | teq r8, #0 | 154 | teq r8, #0 |
| 152 | stmneia sp, {r0-r6, lr} @ v7m_invalidate_l1 touches r0-r6 | 155 | stmiane sp, {r0-r6, lr} @ v7m_invalidate_l1 touches r0-r6 |
| 153 | blne v7m_invalidate_l1 | 156 | blne v7m_invalidate_l1 |
| 154 | teq r8, #0 @ re-evalutae condition | 157 | teq r8, #0 @ re-evalutae condition |
| 155 | ldmneia sp, {r0-r6, lr} | 158 | ldmiane sp, {r0-r6, lr} |
| 156 | 159 | ||
| 157 | @ Configure the System Control Register to ensure 8-byte stack alignment | 160 | @ Configure the System Control Register to ensure 8-byte stack alignment |
| 158 | @ Note the STKALIGN bit is either RW or RAO. | 161 | @ Note the STKALIGN bit is either RW or RAO. |
