mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2017-2019, Arm Limited. All rights reserved.
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * SPDX-License-Identifier: BSD-3-Clause
kenjiArai 0:5b88d5760320 5 *
kenjiArai 0:5b88d5760320 6 */
kenjiArai 0:5b88d5760320 7
kenjiArai 0:5b88d5760320 8 #ifndef __SECURE_UTILITIES_H__
kenjiArai 0:5b88d5760320 9 #define __SECURE_UTILITIES_H__
kenjiArai 0:5b88d5760320 10
kenjiArai 0:5b88d5760320 11 #include <stdio.h>
kenjiArai 0:5b88d5760320 12 #include "cmsis_compiler.h"
kenjiArai 0:5b88d5760320 13 #include "tfm_svc.h"
kenjiArai 0:5b88d5760320 14
kenjiArai 0:5b88d5760320 15 #define EXC_RETURN_INDICATOR (0xF << 28)
kenjiArai 0:5b88d5760320 16 #define EXC_RETURN_SECURITY_STACK_STATUS_MASK (0x3 << 5)
kenjiArai 0:5b88d5760320 17 #define EXC_RETURN_SECURE_STACK (1 << 6)
kenjiArai 0:5b88d5760320 18 #define EXC_RETURN_FPU_FRAME_BASIC (1 << 4)
kenjiArai 0:5b88d5760320 19 #define EXC_RETURN_MODE_THREAD (1 << 3)
kenjiArai 0:5b88d5760320 20 #define EXC_RETURN_STACK_PROCESS (1 << 2)
kenjiArai 0:5b88d5760320 21 #define EXC_RETURN_EXC_SECURE (1)
kenjiArai 0:5b88d5760320 22
kenjiArai 0:5b88d5760320 23 #define EXC_NUM_THREAD_MODE (0)
kenjiArai 0:5b88d5760320 24 #define EXC_NUM_SVCALL (11)
kenjiArai 0:5b88d5760320 25 #define EXC_NUM_PENDSV (14)
kenjiArai 0:5b88d5760320 26 #define EXC_NUM_SYSTICK (15)
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28 #define printf(...)
kenjiArai 0:5b88d5760320 29
kenjiArai 0:5b88d5760320 30 /* Disable NS exceptions by setting NS PRIMASK to 1 */
kenjiArai 0:5b88d5760320 31 #define TFM_NS_EXC_DISABLE() __TZ_set_PRIMASK_NS(1)
kenjiArai 0:5b88d5760320 32 /* Enable NS exceptions by setting NS PRIMASK to 0 */
kenjiArai 0:5b88d5760320 33 #define TFM_NS_EXC_ENABLE() __TZ_set_PRIMASK_NS(0)
kenjiArai 0:5b88d5760320 34
kenjiArai 0:5b88d5760320 35 struct tfm_exc_stack_t {
kenjiArai 0:5b88d5760320 36 uint32_t R0;
kenjiArai 0:5b88d5760320 37 uint32_t R1;
kenjiArai 0:5b88d5760320 38 uint32_t R2;
kenjiArai 0:5b88d5760320 39 uint32_t R3;
kenjiArai 0:5b88d5760320 40 uint32_t R12;
kenjiArai 0:5b88d5760320 41 uint32_t LR;
kenjiArai 0:5b88d5760320 42 uint32_t RetAddr;
kenjiArai 0:5b88d5760320 43 uint32_t XPSR;
kenjiArai 0:5b88d5760320 44 };
kenjiArai 0:5b88d5760320 45
kenjiArai 0:5b88d5760320 46 #ifdef TFM_CORE_DEBUG
kenjiArai 0:5b88d5760320 47 #define LOG_MSG_HDLR(MSG) printf("[Sec Handler] %s\r\n", MSG)
kenjiArai 0:5b88d5760320 48 #else
kenjiArai 0:5b88d5760320 49 /* FixMe: redirect to secure log area */
kenjiArai 0:5b88d5760320 50 #define LOG_MSG_HDLR(MSG) printf("[Sec Handler] %s\r\n", MSG)
kenjiArai 0:5b88d5760320 51 #endif
kenjiArai 0:5b88d5760320 52
kenjiArai 0:5b88d5760320 53 #define LOG_MSG_THR(MSG) \
kenjiArai 0:5b88d5760320 54 __ASM volatile("MOV r0, %0\n" \
kenjiArai 0:5b88d5760320 55 "SVC %1\n" \
kenjiArai 0:5b88d5760320 56 : : "r" (MSG), "I" (TFM_SVC_PRINT))
kenjiArai 0:5b88d5760320 57
kenjiArai 0:5b88d5760320 58 #define LOG_MSG(MSG) \
kenjiArai 0:5b88d5760320 59 do { \
kenjiArai 0:5b88d5760320 60 if (__get_active_exc_num()) { \
kenjiArai 0:5b88d5760320 61 LOG_MSG_HDLR(MSG); \
kenjiArai 0:5b88d5760320 62 } else { \
kenjiArai 0:5b88d5760320 63 LOG_MSG_THR(MSG); \
kenjiArai 0:5b88d5760320 64 } \
kenjiArai 0:5b88d5760320 65 } while (0)
kenjiArai 0:5b88d5760320 66
kenjiArai 0:5b88d5760320 67 #ifdef TFM_CORE_DEBUG
kenjiArai 0:5b88d5760320 68 #define ERROR_MSG(MSG) printf("[Sec Error] %s\r\n", MSG)
kenjiArai 0:5b88d5760320 69 #else
kenjiArai 0:5b88d5760320 70 /* FixMe: redirect to secure log area */
kenjiArai 0:5b88d5760320 71 #define ERROR_MSG(MSG) printf("[Sec Error] %s\r\n", MSG)
kenjiArai 0:5b88d5760320 72 #endif
kenjiArai 0:5b88d5760320 73
kenjiArai 0:5b88d5760320 74 /**
kenjiArai 0:5b88d5760320 75 * \brief Get Link Register
kenjiArai 0:5b88d5760320 76 * \details Returns the value of the Link Register (LR)
kenjiArai 0:5b88d5760320 77 * \return LR value
kenjiArai 0:5b88d5760320 78 */
kenjiArai 0:5b88d5760320 79
kenjiArai 0:5b88d5760320 80 __attribute__ ((always_inline)) __STATIC_INLINE uint32_t __get_LR(void)
kenjiArai 0:5b88d5760320 81 {
kenjiArai 0:5b88d5760320 82 register uint32_t result;
kenjiArai 0:5b88d5760320 83
kenjiArai 0:5b88d5760320 84 __ASM volatile ("MOV %0, LR\n" : "=r" (result));
kenjiArai 0:5b88d5760320 85 return result;
kenjiArai 0:5b88d5760320 86 }
kenjiArai 0:5b88d5760320 87
kenjiArai 0:5b88d5760320 88 __attribute__ ((always_inline))
kenjiArai 0:5b88d5760320 89 __STATIC_INLINE uint32_t __get_active_exc_num(void)
kenjiArai 0:5b88d5760320 90 {
kenjiArai 0:5b88d5760320 91 IPSR_Type IPSR;
kenjiArai 0:5b88d5760320 92
kenjiArai 0:5b88d5760320 93 /* if non-zero, exception is active. NOT banked S/NS */
kenjiArai 0:5b88d5760320 94 IPSR.w = __get_IPSR();
kenjiArai 0:5b88d5760320 95 return IPSR.b.ISR;
kenjiArai 0:5b88d5760320 96 }
kenjiArai 0:5b88d5760320 97
kenjiArai 0:5b88d5760320 98 __attribute__ ((always_inline))
kenjiArai 0:5b88d5760320 99 __STATIC_INLINE void __set_CONTROL_SPSEL(uint32_t SPSEL)
kenjiArai 0:5b88d5760320 100 {
kenjiArai 0:5b88d5760320 101 CONTROL_Type ctrl;
kenjiArai 0:5b88d5760320 102
kenjiArai 0:5b88d5760320 103 ctrl.w = __get_CONTROL();
kenjiArai 0:5b88d5760320 104 ctrl.b.SPSEL = SPSEL;
kenjiArai 0:5b88d5760320 105 __set_CONTROL(ctrl.w);
kenjiArai 0:5b88d5760320 106 __ISB();
kenjiArai 0:5b88d5760320 107 }
kenjiArai 0:5b88d5760320 108
kenjiArai 0:5b88d5760320 109 #endif /* __SECURE_UTILITIES_H__ */