/*
 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *
 */
/***********{{utilities.donotedit_warning}}***********/

#ifndef __CONFIG_IMPL_H__
#define __CONFIG_IMPL_H__

{% if partition_statistics['ipc_partition_num'] > 0
    and partition_statistics['sfn_partition_num'] == 0 %}
/* IPC model */
/* Trustzone NS agent working stack size. */
#define {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}} 1024

/* SPM re-uses Trustzone NS agent stack. */
#define {{"%-56s"|format("CONFIG_TFM_SPM_THREAD_STACK_SIZE")}}     \
            {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}}

{% elif partition_statistics['sfn_partition_num'] > 0
    and partition_statistics['ipc_partition_num'] == 0 %}
/* SFN model */

    {% set total_stk = namespace(size=0) %}
    {% for partition in partitions %}
        {% if "0x" in partition.manifest.stack_size or "0X" in partition.manifest.stack_size %}
            {% set total_stk.size = total_stk.size + partition.manifest.stack_size|int(base=16) %}
        {% else %}
            {% set total_stk.size = total_stk.size + partition.manifest.stack_size|int(base=10) %}
        {% endif %}
    {% endfor %}
/*
 * In isolation level 1 SFN model, all subsequent components work on NS agent
 * stack. It is observed that half of the sum of all partition stack sizes is
 * enough for working. Define a divisor factor
 * CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR for reference, and allow
 * modification of the factor based on application situation. The stack size
 * value is aligned to 8 bytes.
 * The minimum value is 0x400 to satisfy the SPM functional requirement.
 * Manifest tool will assure this.
 */
    {% if total_stk.size|int < 2048 %}
        {% set total_stk.size = 2048 %}
    {% endif %}
#define CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR             1
#define {{"%-56s"|format("CONFIG_TFM_NS_AGENT_TZ_STACK_SIZE")}}  \
    ((({{"0x%x"|format(total_stk.size)}} >> CONFIG_TFM_NS_AGENT_TZ_STK_SIZE_SHIFT_FACTOR) + 0x7) & (~0x7))

{% elif partition_statistics['sfn_partition_num'] > 0
    and partition_statistics['ipc_partition_num'] > 0 %}
#error "IPC and SFN co-work not supported yet."
{% else %}
#error "Invalid partition number input, check configurations."
{% endif %}

#endif /* __CONFIG_IMPL_H__ */
