@@ -64,8 +64,13 @@ uint32_t TZ_InitContextSystem_S (void)
64
64
ProcessStackFreeSlot = 0U ;
65
65
66
66
// Default process stack pointer and stack limit
67
+ #if defined(__ICCARM__ )
68
+ asm volatile ("MSR PSPLIM, %0" :: "r" ((uint32_t )ProcessStackMemory ));
69
+ asm volatile ("MSR PSP, %0" :: "r" ((uint32_t )ProcessStackMemory ));
70
+ #else
67
71
__set_PSPLIM ((uint32_t )ProcessStackMemory );
68
72
__set_PSP ((uint32_t )ProcessStackMemory );
73
+ #endif
69
74
70
75
// Privileged Thread Mode using PSP
71
76
__set_CONTROL (0x02U );
@@ -154,8 +159,13 @@ uint32_t TZ_LoadContext_S (TZ_MemoryId_t id)
154
159
}
155
160
156
161
// Setup process stack pointer and stack limit
162
+ #if defined(__ICCARM__ )
163
+ asm volatile ("MSR PSPLIM, %0" :: "r" ((uint32_t )ProcessStackInfo [slot ].sp_limit ));
164
+ asm volatile ("MSR PSP, %0" :: "r" ((uint32_t )ProcessStackInfo [slot ].sp ));
165
+ #else
157
166
__set_PSPLIM (ProcessStackInfo [slot ].sp_limit );
158
167
__set_PSP (ProcessStackInfo [slot ].sp );
168
+ #endif
159
169
160
170
return 1U ; // Success
161
171
}
@@ -192,8 +202,13 @@ uint32_t TZ_StoreContext_S (TZ_MemoryId_t id)
192
202
ProcessStackInfo [slot ].sp = sp ;
193
203
194
204
// Default process stack pointer and stack limit
195
- __set_PSPLIM ((uint32_t )ProcessStackMemory );
196
- __set_PSP ((uint32_t )ProcessStackMemory );
205
+ #if defined(__ICCARM__ )
206
+ asm volatile ("MSR PSPLIM, %0" :: "r" ((uint32_t )ProcessStackMemory ));
207
+ asm volatile ("MSR PSP, %0" :: "r" ((uint32_t )ProcessStackMemory ));
208
+ #else
209
+ __set_PSPLIM ((uint32_t )ProcessStackMemory );
210
+ __set_PSP ((uint32_t )ProcessStackMemory );
211
+ #endif
197
212
198
213
return 1U ; // Success
199
214
}
0 commit comments