Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
#endif

#if ( configENABLE_MPU == 1 )
#define SECURE_CONTEXT_OFFSET -20
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -590,15 +596,16 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" adds r2, r2, %0 \n" /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
" ldr r1, [r2] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" bne free_secure_context \n" /* Branch if r1 != 0. */
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
" free_secure_context: \n"
" svc %0 \n" /* Secure context is freed in the supervisor call. */
" svc %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
11 changes: 9 additions & 2 deletions portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portasm.s
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
#define configUSE_MPU_WRAPPERS_V1 0
#endif

#if ( configENABLE_MPU == 1 )
#define SECURE_CONTEXT_OFFSET -20
#else
#define SECURE_CONTEXT_OFFSET 0
#endif


EXTERN pxCurrentTCB
EXTERN xSecureContext
Expand Down Expand Up @@ -512,8 +518,9 @@ SVC_Handler:
/*-----------------------------------------------------------*/

vPortFreeSecureContext:
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
adds r2, r2, #SECURE_CONTEXT_OFFSET /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
ldr r1, [r2] /* Read xSecureContext from the task's context. */
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
bne free_secure_context /* Branch if r1 != 0. */
bx lr /* There is no secure context (xSecureContext is NULL). */
Expand Down
14 changes: 12 additions & 2 deletions portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portasm.s
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ files (__ICCARM__ is defined by the IAR C compiler but not by the IAR assembler.
#define configUSE_MPU_WRAPPERS_V1 0
#endif

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

EXTERN pxCurrentTCB
EXTERN xSecureContext
EXTERN vTaskSwitchContext
Expand Down Expand Up @@ -532,8 +542,8 @@ SVC_Handler:

vPortFreeSecureContext:
/* r0 = uint32_t *pulTCB. */
ldr r2, [r0] /* The first item in the TCB is the top of the stack. */
ldr r1, [r2] /* The first item on the stack is the task's xSecureContext. */
ldr r2, [r0] /* The first item in the TCB is the stored context location. */
ldr r1, [r2, #SECURE_CONTEXT_OFFSET] /* Read xSecureContext from the task's context. */
cmp r1, #0 /* Raise svc if task's xSecureContext is not NULL. */
it ne
svcne 101 /* Secure context is freed in the supervisor call. portSVC_FREE_SECURE_CONTEXT = 101. */
Expand Down
15 changes: 11 additions & 4 deletions portable/GCC/ARM_CM23/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
#error Cortex-M23 does not have a Floating Point Unit (FPU) and therefore configENABLE_FPU must be set to 0.
#endif

#if ( configENABLE_MPU == 1 )
#define SECURE_CONTEXT_OFFSET -20
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -590,15 +596,16 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" adds r2, r2, %0 \n" /* r2 = r2 + SECURE_CONTEXT_OFFSET. */
" ldr r1, [r2] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" bne free_secure_context \n" /* Branch if r1 != 0. */
" bx lr \n" /* There is no secure context (xSecureContext is NULL). */
" free_secure_context: \n"
" svc %0 \n" /* Secure context is freed in the supervisor call. */
" svc %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_CM33/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_CM35P/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_CM52/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_CM55/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_CM85/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
18 changes: 14 additions & 4 deletions portable/GCC/ARM_STAR_MC3/non_secure/portasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@
* header files. */
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

#if ( configENABLE_MPU == 1 )
#if ( configENABLE_PAC == 1 )
#define SECURE_CONTEXT_OFFSET -36
#else
#define SECURE_CONTEXT_OFFSET -20
#endif
#else
#define SECURE_CONTEXT_OFFSET 0
#endif

#if ( configENABLE_MPU == 1 )

void vRestoreContextOfFirstTask( void ) /* __attribute__ (( naked )) PRIVILEGED_FUNCTION */
Expand Down Expand Up @@ -609,13 +619,13 @@ void vPortFreeSecureContext( uint32_t * pulTCB ) /* __attribute__ (( naked )) PR
(
" .syntax unified \n"
" \n"
" ldr r2, [r0] \n" /* The first item in the TCB is the top of the stack. */
" ldr r1, [r2] \n" /* The first item on the stack is the task's xSecureContext. */
" ldr r2, [r0] \n" /* The first item in the TCB is the stored context location. */
" ldr r1, [r2, %0] \n" /* Read xSecureContext from the task's context. */
" cmp r1, #0 \n" /* Raise svc if task's xSecureContext is not NULL. */
" it ne \n"
" svcne %0 \n" /* Secure context is freed in the supervisor call. */
" svcne %1 \n" /* Secure context is freed in the supervisor call. */
" bx lr \n" /* Return. */
::"i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
::"i" ( SECURE_CONTEXT_OFFSET ), "i" ( portSVC_FREE_SECURE_CONTEXT ) : "memory"
);
}
/*-----------------------------------------------------------*/
Loading
Loading