#
# Copyright (c) 2019-2021, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

# This file contains common model controls and parameters across *ALL* FVP
# models.

default_var pctl_startup 0.0.0.0
default_var quantum 1000
default_var data_instance cluster0.cpu0
default_var cache_state_modelled 1
default_var print_stat 1

reset_var has_bl1
reset_var has_fip
reset_var preload_bl33
reset_var reset_to_bl31
reset_var reset_to_spmin
reset_var secure_memory
reset_var secure_ram_fill
reset_var wait_debugger


if [ "$bl2_at_el3" ]; then
	has_fip=1
elif [ "$fip_as_gpt" ]; then
	has_bl1=1
elif [ -z "$reset_to_spmin" -a -z "$reset_to_bl31" ]; then
	has_bl1=1
	has_fip=1
fi

cat <<EOF >"$model_param_file"

-C bp.ve_sysregs.exit_on_shutdown=1
-C pctl.startup=$pctl_startup

${wait_debugger+-S}

${secure_memory+-C bp.secure_memory=$secure_memory}
${cache_state_modelled+-C cache_state_modelled=$cache_state_modelled}

${secure_ram_fill+-C bp.secureSRAM.fill1=0x00000000}
${secure_ram_fill+-C bp.secureSRAM.fill2=0x00000000}

${bl2_at_el3+--data ${data_instance}=$bl2_bin@${bl2_addr:?}}

${reset_to_bl31+--data ${data_instance}=$bl31_bin@${bl31_addr:?}}
${preload_bl33+--data ${data_instance}=$preload_bl33_bin@${bl33_addr:?}}

${reset_to_spmin+--data ${data_instance}=$bl32_bin@${bl32_addr:?}}
${reset_to_spmin+--data ${data_instance}=$uboot_bin@${bl33_addr:?}}

${memprotect+--data ${data_instance}=$memprotect@${memprotect_addr:?}}
${romlib_bin+--data ${data_instance}=$romlib_bin@${romlib_addr:?}}

${has_bl1+-C bp.secureflashloader.fname=$bl1_bin}
${has_fip+-C bp.flashloader0.fname=$fip_bin}
${fip_as_gpt+-C bp.flashloader0.fname=$fip_gpt_bin}

${dtb_bin+--data ${data_instance}=$dtb_bin@${dtb_addr:?}}
${kernel_bin+--data ${data_instance}=$kernel_bin@${kernel_addr:?}}
${initrd_bin+--data ${data_instance}=$initrd_bin@${initrd_addr:?}}

${spm_bin+--data ${data_instance}=$spm_bin@${spm_addr:?}}
${spmc_manifest+--data ${data_instance}=$spmc_manifest@${spmc_manifest_addr:?}}
${sp1_pkg+--data ${data_instance}=$sp1_pkg@${sp1_addr:?}}
${sp2_pkg+--data ${data_instance}=$sp2_pkg@${sp2_addr:?}}
${sp3_pkg+--data ${data_instance}=$sp3_pkg@${sp3_addr:?}}
${sp4_pkg+--data ${data_instance}=$sp4_pkg@${sp4_addr:?}}

${ns_bl1u_bin+--data ${data_instance}=$ns_bl1u_bin@$ns_bl1u_addr}
${fwu_fip_bin+--data ${data_instance}=$fwu_fip_bin@$fwu_fip_addr}
${backup_fip_bin+--data ${data_instance}=$backup_fip_bin@$backup_fip_addr}

${flashloader1_bin+-C bp.flashloader1.fname=$flashloader1_bin}
${rootfs_bin+-C bp.virtioblockdevice.image_path=$rootfs_bin}

${uart0_out+-C bp.pl011_uart0.out_file=$uart0_out}
${uart0_out+-C bp.pl011_uart0.unbuffered_output=1}
${uart1_out+-C bp.pl011_uart1.out_file=$uart1_out}

${no_quantum--Q ${quantum}}

EOF

# OpenCI uses LAVA to launch models, the latter requiring (uart) unbuffered output,
# otherwise these may get full and models hang.
if ! is_arm_jenkins_env && not_upon "$local_ci"; then
	cat <<EOF >>"$model_param_file"
-C bp.pl011_uart0.unbuffered_output=1
-C bp.pl011_uart1.unbuffered_output=1
-C bp.pl011_uart2.unbuffered_output=1
-C bp.pl011_uart3.unbuffered_output=1
EOF
fi

if [ "$print_stat" = "1" ]; then
	cat <<EOF >>"$model_param_file"
--stat
EOF
fi

# TFTF: There are two scenarions where simulation should be shutdown
# when a EOT (ASCII 4) char is transmitted: on local or Open CI runs.
# For the latter case, shutdown is required so further commands parse
# or transfer any produced files during execution, i.e. trace code
# coverage logs
if echo "$RUN_CONFIG" | grep -iq 'tftf'; then
    if ! is_arm_jenkins_env || upon "$local_ci"; then
	cat <<EOF >>"$model_param_file"
-C bp.pl011_uart0.shutdown_on_eot=1
EOF
    fi
fi
