#
# Copyright (c) 2019-2025, 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
# Trace unit functionally works in FVP model by enabling ETM/ETE trace
# unit along with its plugin.
# Hence disabled ETM by default, and enable it along with its plugin whenever
# needed.
default_var etm_present 0

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
reset_var cluster_0_num_cores


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+-I -p}

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

${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:?}}

${cluster_0_num_cores+-C cluster0.NUM_CORES=$cluster_0_num_cores}

${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:?}}
${boot_script_bin+--data ${data_instance}=$boot_script_bin@${boot_script_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}}

${disable_visualisation+-C bp.vis.disable_visualisation=1}

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 some OpenCI
# runs. In the latter case, shutdown is required for code coverage
# runs, so that FVP trace log was properly dumped (and parsed by LAVA).
# Don't use it for other OpenCI runs, as it may lead to race condition
# with LAVA's capturing of FVP output.
if echo "$RUN_CONFIG" | grep -Eiq 'tftf|spm'; then
    is_arm_env=0
    if is_arm_jenkins_env; then
        is_arm_env=1
    fi

    if [ "$is_arm_env" == "0" -a "$COVERAGE_ON" == "1" ] || upon "$local_ci"; then
	cat <<EOF >>"$model_param_file"
-C bp.pl011_uart0.shutdown_on_eot=1
EOF
    fi
fi
