Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 1 | /* |
Ken Liu | c25558c | 2021-05-20 15:31:28 +0800 | [diff] [blame] | 2 | * Copyright (c) 2018-2021, Arm Limited. All rights reserved. |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | * |
| 6 | */ |
| 7 | #ifndef __TFM_UTILS_H__ |
| 8 | #define __TFM_UTILS_H__ |
| 9 | |
Summer Qin | 8321492 | 2020-06-22 15:07:08 +0800 | [diff] [blame] | 10 | #include <stdbool.h> |
Edison Ai | 93dabfd | 2019-12-03 13:44:45 +0800 | [diff] [blame] | 11 | #include <stdio.h> |
Jimmy Brisson | a9052d7 | 2021-06-21 11:46:45 -0500 | [diff] [blame] | 12 | #include "tfm_spm_log.h" |
Edison Ai | 93dabfd | 2019-12-03 13:44:45 +0800 | [diff] [blame] | 13 | |
| 14 | /* |
| 15 | * CPU spin here. |
| 16 | * Note: this function is used to handle PROGRAMMER ERROR. |
| 17 | */ |
Edison Ai | 9059ea0 | 2019-11-28 13:46:14 +0800 | [diff] [blame] | 18 | void tfm_core_panic(void); |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 19 | |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 20 | /* Core assert and spin */ |
| 21 | #ifndef NDEBUG |
| 22 | #define TFM_CORE_ASSERT(cond) \ |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 23 | do { \ |
| 24 | if (!(cond)) { \ |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 25 | while (1) \ |
| 26 | ; \ |
| 27 | } \ |
| 28 | } while (0) |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 29 | #else |
| 30 | #define TFM_CORE_ASSERT(cond) |
| 31 | #endif |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 32 | |
Edison Ai | 1e5822f | 2018-09-21 14:56:08 +0800 | [diff] [blame] | 33 | /* Get container structure start address from member */ |
Ken Liu | c25558c | 2021-05-20 15:31:28 +0800 | [diff] [blame] | 34 | #define TO_CONTAINER(ptr, type, member) \ |
Edison Ai | 1e5822f | 2018-09-21 14:56:08 +0800 | [diff] [blame] | 35 | (type *)((unsigned long)(ptr) - offsetof(type, member)) |
| 36 | |
Antonio de Angelis | fa5d460 | 2021-06-09 16:11:11 +0100 | [diff] [blame] | 37 | /* FixMe: Replace ERROR_MSG() in platform code with a suitable API */ |
| 38 | #define ERROR_MSG(msg) SPMLOG_ERRMSG(msg "\r\n") |
Summer Qin | 8321492 | 2020-06-22 15:07:08 +0800 | [diff] [blame] | 39 | |
Kevin Peng | 300c68d | 2021-08-12 17:40:17 +0800 | [diff] [blame] | 40 | /* Preprocessor to reference C MACRO to string in inline asm */ |
| 41 | #define M2S_HELPER(x) #x |
| 42 | #define M2S(m) M2S_HELPER(m) |
| 43 | |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 44 | #endif /* __TFM_UTILS_H__ */ |