blob: 8c79f046a5d8f223cee14ee7ee8123e115e4480a [file] [log] [blame]
Mingyang Suneab7eae2021-09-30 13:06:52 +08001/*
Xinyu Zhang90f08dc2022-01-12 15:55:17 +08002 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
Mingyang Suneab7eae2021-09-30 13:06:52 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8{{utilities.donotedit_warning}}
9
10#ifndef __CONFIG_IMPL_H__
11#define __CONFIG_IMPL_H__
12
Xinyu Zhang90f08dc2022-01-12 15:55:17 +080013{% if partition_statistics['ipc_partition_num'] > 0
14 and partition_statistics['sfn_partition_num'] == 0 %}
Mingyang Sunc2521f72021-08-13 15:03:05 +080015/* IPC model */
Ken Liu82e3eac2021-10-14 16:19:13 +080016#define {{"%-56s"|format("CONFIG_TFM_SPM_BACKEND_IPC")}} 1
Ken Liue07c3b72021-10-14 16:19:13 +080017
Mingyang Sunc2521f72021-08-13 15:03:05 +080018/* Trustzone NS agent working stack size. */
19#define {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}} 1024
20
Ken Liue07c3b72021-10-14 16:19:13 +080021#if TFM_LVL > 1
Ken Liu82e3eac2021-10-14 16:19:13 +080022#define {{"%-56s"|format("CONFIG_TFM_PSA_API_SUPERVISOR_CALL")}} 1
Mingyang Sunc2521f72021-08-13 15:03:05 +080023#else /* TFM_LVL > 1 */
Xinyu Zhanga7ba50b2021-12-27 17:32:53 +080024#define {{"%-56s"|format("CONFIG_TFM_PSA_API_CROSS_CALL")}} 1
Mingyang Sunc2521f72021-08-13 15:03:05 +080025
26/* SPM re-uses Trustzone NS agent stack. */
27#define {{"%-56s"|format("CONFIG_TFM_SPM_THREAD_STACK_SIZE")}} \
28 {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}}
29#endif /* TFM_LVL > 1 */
Ken Liu82e3eac2021-10-14 16:19:13 +080030
Xinyu Zhang90f08dc2022-01-12 15:55:17 +080031{% elif partition_statistics['sfn_partition_num'] > 0
32 and partition_statistics['ipc_partition_num'] == 0 %}
Mingyang Sunc2521f72021-08-13 15:03:05 +080033/* SFN model */
Ken Liue07c3b72021-10-14 16:19:13 +080034#define {{"%-56s"|format("CONFIG_TFM_SPM_BACKEND_SFN")}} 1
Mingyang Sunc2521f72021-08-13 15:03:05 +080035#define {{"%-56s"|format("CONFIG_TFM_PSA_API_SFN_CALL")}} 1
Mingyang Suneab7eae2021-09-30 13:06:52 +080036
37#if TFM_LVL > 1
38#error "High isolation level SFN model is not supported."
39#endif
40
Mingyang Sunc9a96c02021-10-14 10:32:05 +080041 {% set total_stk = namespace(size=0) %}
42 {% for partition in partitions %}
43 {% if "0x" in partition.manifest.stack_size or "0X" in partition.manifest.stack_size %}
44 {% set total_stk.size = total_stk.size + partition.manifest.stack_size|int(base=16) %}
45 {% else %}
46 {% set total_stk.size = total_stk.size + partition.manifest.stack_size|int(base=10) %}
47 {% endif %}
48 {% endfor %}
Mingyang Sunc2521f72021-08-13 15:03:05 +080049/*
50 * In isolation level 1 SFN model, all subsequent components work on NS agent
51 * stack. It is observed that half of the sum of all partition stack sizes is
52 * enough for working. Define a divisor factor
53 * CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR for reference, and allow
54 * modification of the factor based on application situation. The stack size
55 * value is aligned to 8 bytes.
Ken Liuf39d8eb2021-10-07 12:55:33 +080056 * The minimum value is 0x400 to satisfy the SPM functional requirement.
57 * Manifest tool will assure this.
Mingyang Sunc2521f72021-08-13 15:03:05 +080058 */
Ken Liuf39d8eb2021-10-07 12:55:33 +080059 {% if total_stk.size|int < 2048 %}
60 {% set total_stk.size = 2048 %}
61 {% endif %}
Mingyang Sunc2521f72021-08-13 15:03:05 +080062#define CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR 1
Ken Liuf39d8eb2021-10-07 12:55:33 +080063#define {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}} \
Mingyang Sunc2521f72021-08-13 15:03:05 +080064 ((({{"0x%x"|format(total_stk.size)}} >> CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR) + 0x7) & (~0x7))
Mingyang Sunc9a96c02021-10-14 10:32:05 +080065
Xinyu Zhang90f08dc2022-01-12 15:55:17 +080066{% elif partition_statistics['sfn_partition_num'] > 0
67 and partition_statistics['ipc_partition_num'] > 0 %}
Mingyang Suneab7eae2021-09-30 13:06:52 +080068#error "IPC and SFN co-work not supported yet."
69{% else %}
Ken Liu82e3eac2021-10-14 16:19:13 +080070#error "Invalid partition number input, check configurations."
Mingyang Suneab7eae2021-09-30 13:06:52 +080071{% endif %}
Feder Liangb7140792021-11-25 16:07:16 +080072
73#if (CONFIG_TFM_SPE_FP > 0) && (CONFIG_TFM_SPM_BACKEND_SFN == 1)
74#error "FP is not supported for SFN model."
75#endif
76
Mingyang Suneab7eae2021-09-30 13:06:52 +080077#endif /* __CONFIG_IMPL_H__ */