feat(rd1ae): Add runtime script for rd1ae platform
This patch adds a runtime script configuration and build
generation scripts, along with the necessary expect logs
and port configuration.
Change-Id: I7a5b2d30c8a17332d347eef781e41dad6d6167ec
Signed-off-by: Divin Raj <divin.raj@arm.com>
diff --git a/arm_auto_solutions_utils.sh b/arm_auto_solutions_utils.sh
new file mode 100644
index 0000000..eee7607
--- /dev/null
+++ b/arm_auto_solutions_utils.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2024, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+source "$ci_root/fvp_utils.sh"
+
+arm_automotive_solutions="${rd1ae_prebuilts:-$tfa_downloads/arm_automotive_solutions}"
+
+# RD-1 AE AP bl2 0x00 is mapped to 0x70083C00 in RSE memory map
+rd1ae_ap_bl2_flash_load_addr=0x70083C00
+rd1ae_ap_bl2_flash_size=0x80000
diff --git a/expect-lava/rd1ae-tf.exp b/expect-lava/rd1ae-tf.exp
new file mode 100644
index 0000000..0fe8790
--- /dev/null
+++ b/expect-lava/rd1ae-tf.exp
@@ -0,0 +1,11 @@
+#
+# Copyright (c) 2024 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Expect script for booting TF-A on RD-1 AE
+#
+
+# RD1AE BL2
+expect_string+=('i;BL2: Built :')
+expect_string+=('i;BL2: Booting BL31')
diff --git a/expect-lava/rd1ae-yocto.exp b/expect-lava/rd1ae-yocto.exp
new file mode 100644
index 0000000..6f18c0f
--- /dev/null
+++ b/expect-lava/rd1ae-yocto.exp
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2024 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Expect script for booting Yocto linux on RD-1 AE
+#
+
+# Uboot
+expect_string+=('i;U-Boot')
+
+# Linux kernel boot section
+source $ci_root/expect-lava/linux.inc
+
+# Yocto
+expect_string+=('i;fvp-rd-kronos login:')
diff --git a/expect/rd1ae-tf.exp b/expect/rd1ae-tf.exp
new file mode 100644
index 0000000..64ac3f6
--- /dev/null
+++ b/expect/rd1ae-tf.exp
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2024 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Expect script for booting Yocto linux on RD-1 AE
+#
+
+source [file join [file dirname [info script]] utils.inc]
+source [file join [file dirname [info script]] handle-arguments.inc]
+
+# RD-1-AE BL2
+expect {
+ "BL2: Built :" {
+ message "Booting BL2"
+ }
+}
+
+expect {
+ "BL2: Booting BL31" {
+ message "Booting BL31"
+ }
+}
diff --git a/expect/rd1ae-yocto.exp b/expect/rd1ae-yocto.exp
new file mode 100644
index 0000000..9f5f084
--- /dev/null
+++ b/expect/rd1ae-yocto.exp
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2024 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Expect script for booting Yocto linux on RD-1 AE
+#
+
+source [file join [file dirname [info script]] utils.inc]
+source [file join [file dirname [info script]] handle-arguments.inc]
+
+# Uboot
+expect {
+ "U-Boot" {
+ message "Entered Uboot"
+ }
+}
+
+# Linux kernel boot section
+source [file join [file dirname [info script]] linux.inc]
+
+# Yocto
+expect {
+ "fvp-rd-kronos login:" {
+ message "Kronos Login Prompt Received"
+ }
+}
diff --git a/fvp_utils.sh b/fvp_utils.sh
index f013fe0..1bd713d 100644
--- a/fvp_utils.sh
+++ b/fvp_utils.sh
@@ -50,6 +50,7 @@
fvp_arm_std_library="fvp:fvp_arm_std_library_${model_version}_${model_build};/opt/model/FVP_ARM_Std_Library/FVP_Base"
fvp_base_revc_2xaemva="fvp:fvp_base_revc-2xaemva_${model_version}_${model_build};/opt/model/Base_RevC_AEMvA_pkg/models/${model_flavour}"
fvp_base_aemv8r="fvp:fvp_base_aemv8r_${model_version}_${model_build};/opt/model/AEMv8R_base_pkg/models/${model_flavour}"
+fvp_rd_1_ae="fvp:fvp_rd_1_ae_11.27_20;/opt/model/FVP_RD_1_AE/models/${model_flavour}"
# CSS model list
fvp_morello="fvp:fvp_morello_0.11_33;/opt/model/FVP_Morello/models/Linux64_GCC-6.4"
@@ -100,6 +101,7 @@
[tc2]="${fvp_tc2};FVP_TC2"
[tc3]="${fvp_tc3};FVP_TC3"
[baser-aemv8r]="${fvp_base_aemv8r};FVP_BaseR_AEMv8R"
+[rd1ae]="${fvp_rd_1_ae};FVP_RD_1_AE"
)
@@ -317,6 +319,7 @@
[romlib]="romlib.bin"
[rootfs]="rootfs.bin"
[host_flash_fip]="host_flash_fip.bin"
+ [rse_flash]="rse_flash.bin"
[rse_rom]="rse_rom.bin"
[rse_encrypted_cm_provisioning_bundle_0]="rse_encrypted_cm_provisioning_bundle_0.bin"
[rse_encrypted_dm_provisioning_bundle]="rse_encrypted_dm_provisioning_bundle.bin"
@@ -368,6 +371,7 @@
[romlib]="$(gen_bin_url romlib.bin)"
[rootfs]="$(gen_bin_url rootfs.bin.gz)"
[host_flash_fip]="$(gen_bin_url host_flash_fip.bin)"
+ [rse_flash]="$(gen_bin_url rse_flash.bin)"
[rse_rom]="$(gen_bin_url rse_rom.bin)"
[rse_encrypted_cm_provisioning_bundle_0]="$(gen_bin_url rse_encrypted_cm_provisioning_bundle_0.bin)"
[rse_encrypted_dm_provisioning_bundle]="$(gen_bin_url rse_encrypted_dm_provisioning_bundle.bin)"
@@ -424,6 +428,7 @@
["[= ]romlib.bin"]="={ROMLIB}"
["[= ]rootfs.bin"]="={ROOTFS}"
["[= ]host_flash_fip.bin"]="={HOST_FLASH_FIP}"
+ ["[= ]rse_flash.bin"]="={RSE_FLASH}"
["[= ]rse_rom.bin"]="={RSE_ROM}"
["[= ]rse_encrypted_cm_provisioning_bundle_0.bin"]="={RSE_ENCRYPTED_CM_PROVISIONING_BUNDLE_0}"
["[= ]rse_encrypted_dm_provisioning_bundle.bin"]="={RSE_ENCRYPTED_DM_PROVISIONING_BUNDLE}"
diff --git a/group/tf-l2-boot-tests-arm-plats/rd1ae-default:fvp-linux.rd1ae b/group/tf-l2-boot-tests-arm-plats/rd1ae-default:fvp-linux.rd1ae
new file mode 100644
index 0000000..b5a3cc6
--- /dev/null
+++ b/group/tf-l2-boot-tests-arm-plats/rd1ae-default:fvp-linux.rd1ae
@@ -0,0 +1,6 @@
+#
+# Copyright (c) 2024 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
diff --git a/model/rd1ae-ports.awk b/model/rd1ae-ports.awk
new file mode 100644
index 0000000..f2be0b6
--- /dev/null
+++ b/model/rd1ae-ports.awk
@@ -0,0 +1,15 @@
+#
+# Copyright (c) 2024, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+/terminal_sec_uart:/ { ports[0] = $NF }
+/terminal_ns_uart0:/ { ports[1] = $NF }
+/terminal_uart_scp:/ { ports[2] = $NF }
+END {
+ for (i = 0; i < num_uarts; i++) {
+ if (ports[i] != "")
+ print "ports[" i "]=" ports[i]
+ }
+}
diff --git a/model/rd1ae.sh b/model/rd1ae.sh
new file mode 100644
index 0000000..e86ffa1
--- /dev/null
+++ b/model/rd1ae.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2024, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+if is_arm_jenkins_env || upon "$local_ci"; then
+ # Internal ARM Jenkins environment path
+ set_model_path "$warehouse/SysGen/Models/$model_version/$model_build/external/models/$model_flavour/FVP_RD_1_AE"
+else
+ source "$ci_root/fvp_utils.sh"
+ # fvp_models variable contains the information for FVP paths, where 2nd field
+ # points to the /opt/model/*/models/${model_flavour}
+ models_dir="$(echo ${fvp_models[$model]} | awk -F ';' '{print $2}')"
+ set_model_path "$models_dir"
+fi
+
+# Write model command line options
+cat <<EOF >"$model_param_file"
+-C css.sysctrl.scp.terminal_uart_scp.start_port=5007
+-C css.ap_periph.terminal_ns_uart0.start_port=5008
+-C css.ap_periph.terminal_sec_uart.start_port=5009
+-C ros.disable_visualisation=1
+-C css.sysctrl.si.disable_visualisation=1
+-C css.sysctrl.rse.rom.raw_image=$rse_rom_bin
+-C css.sysctrl.rse_flashloader.fname=$rse_flash_bin
+-C ros.board.flashloader0.fname=$fip_gpt_bin
+-C ros.board.virtioblockdevice.image_path=$rootfs_bin
+-C ros.board.virtio_net.enabled=1
+-C ros.board.virtio_net.hostbridge.userNetworking=1
+-C ros.board.virtio_net.hostbridge.userNetPorts=2222=22
+-C ros.board.virtio_net.transport=legacy
+-C ros.board.virtio_rng.enabled=1
+-C ros.dram_size=0x100000000
+-C css.sysctrl.rse.DISABLE_GATING=1
+-C css.sysctrl.rse.CMU4_NUM_DB_CH=6
+-C css.sysctrl.si.system_ctrl_regs.cl1_c1_cfgrvbaraddr=0x140000000
+-C css.sysctrl.si.system_ctrl_regs.cl2_c1_cfgrvbaraddr=0x160000000
+-C css.sysctrl.si.system_ctrl_regs.cl2_c2_cfgrvbaraddr=0x160000000
+-C css.sysctrl.si.system_ctrl_regs.cl2_c3_cfgrvbaraddr=0x160000000
+-C 'pcie_group_0.pcie4.hierarchy_file_name=<default>'
+-C pcie_group_0.pcie4.pcie_rc.ahci0.endpoint.ats_supported=true
+-C pcie_group_0.pcie4.pcie_rc.ahci0.ahci.image_path=
+-C pcie_group_0.pcie4.pci_smmuv3.mmu.SMMU_ROOT_IDR0=0
+-C css.sysctrl.rse_flashloader.fnameWrite=$rse_flash_bin
+-C ros.board.flashloader0.fnameWrite=$fip_gpt_bin
+-C css.sysctrl.rse_flashloader.write_flash_after_reset=true
+-C ros.board.flashloader0.write_flash_after_reset=true
+-C css.sysctrl.rse.lcm_nvm.otp_enabled=1
+-C css.sysctrl.rse.lcm_nvm.read_from_file=1
+-C css.sysctrl.rse.lcm_nvm.update_raw_image=1
+-C css.sysctrl.rse.lcm_nvm.use_image_file=1
+-C css.sysctrl.rse.clk_mul.mul=5
+-C css.sysctrl.rse.intchecker.ICBC_RESET_VALUE=0x0000011B
+--data css.sysctrl.rse.cpu=$rse_encrypted_cm_provisioning_bundle_0_bin@0x31000400
+--data css.sysctrl.rse.cpu=$rse_encrypted_dm_provisioning_bundle_bin@0x31080000
+
+EOF
diff --git a/run_config/fvp-linux.rd1ae b/run_config/fvp-linux.rd1ae
new file mode 100644
index 0000000..c0665a0
--- /dev/null
+++ b/run_config/fvp-linux.rd1ae
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2024, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+source "$ci_root/run_config/rd1ae_rse_utils.sh"
+source "$ci_root/arm_auto_solutions_utils.sh"
+
+post_tf_build() {
+ # Download and archive rd1ae u-boot.bin files
+ url="$arm_automotive_solutions/rd1ae/u-boot.bin" saveas="uboot.bin" fetch_file
+ archive_file "uboot.bin"
+
+ build_fip BL33="$archive/uboot.bin"
+}
+
+fetch_tf_resource() {
+ # Sign ap_bl2 image with RSE public key
+ sign_host_ap_bl2_image bl2.bin $rd1ae_ap_bl2_flash_load_addr $rd1ae_ap_bl2_flash_size
+
+ # Update fip image with signed ap_bl2
+ bin_name="tb-fw" src="$archive/$signed_bin" fip_update
+
+ # Download all required images to boot rd1ae
+ downlaod_rd1ae_prebuilt
+
+ # Update ap-flash-image with newly created fip image
+ update_ap_flash_image
+}
+
+generate_lava_job_template() {
+ payload_type="linux" gen_yaml_template
+}
+
+generate_lava_job() {
+ local model="rd1ae"
+ uart="1" set_expect_variable "num_cpus" "8"
+
+ # Hold scp terminal_uart_scp
+ uart="2" port="5007" file="hold_uart.exp" track_expect
+ uart="0" port="5009" file="rd1ae-tf.exp" track_expect
+ uart="1" port="5008" file="rd1ae-yocto.exp" set_primary="1" timeout="1200" track_expect
+
+ set_run_env "ports_script" "$ci_root/model/rd1ae-ports.awk"
+ set_run_env "num_uarts" "3"
+
+ model="$model" \
+ model_build="20" \
+ model_flavour="Linux64_GCC-9.3" \
+ model_version="11.27" \
+ gen_model_params
+
+ model="$model" gen_fvp_yaml
+}
+
diff --git a/run_config/rd1ae_rse_utils.sh b/run_config/rd1ae_rse_utils.sh
new file mode 100644
index 0000000..3aa62a7
--- /dev/null
+++ b/run_config/rd1ae_rse_utils.sh
@@ -0,0 +1,107 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2024, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+sign_host_ap_bl2_image() {
+ # $1 ... host binary name to sign
+ # $2 ... image load address
+ # $3 ... signed bin size
+
+ local tmpdir="$(mktemp -d)"
+ host_bin="`basename ${1}`"
+ signed_bin="signed_`basename ${1}`"
+ host_binary_layout="`basename -s .bin ${1}`_ns"
+
+ # Download the RSE public key
+ url="$arm_automotive_solutions/rd1ae/root-EC-P256.pem" saveas="root-EC-P256.pem" fetch_file
+ archive_file "root-EC-P256.pem"
+
+ RSE_SIGN_PRIVATE_KEY=$archive/root-EC-P256.pem
+ RSE_LAYOUT_WRAPPER_VERSION="0.0.7"
+
+ cat << EOF > $tmpdir/$host_binary_layout
+enum image_attributes {
+ RE_IMAGE_LOAD_ADDRESS = $2,
+ RE_SIGN_BIN_SIZE = $3,
+};
+EOF
+
+ if [ ! -f $archive/$host_bin ]; then
+ echo "$archive/$host_bin does not exist. Aborting...!"
+ exit 1
+ fi
+
+ echo "Signing `basename ${1}`"
+ # Get mcuboot
+ git clone --branch v2.1.0 "https://github.com/mcu-tools/mcuboot.git" $tmpdir/mcuboot
+
+ # Fetch wrapper script
+ saveas="$tmpdir" url="$arm_automotive_solutions/rd1ae/wrapper_scripts" fetch_directory
+
+ pushd $tmpdir/mcuboot/scripts
+ python3 $tmpdir/wrapper_scripts/wrapper/wrapper.py \
+ -v $RSE_LAYOUT_WRAPPER_VERSION \
+ --layout $tmpdir/$host_binary_layout \
+ -k $RSE_SIGN_PRIVATE_KEY \
+ --public-key-format full \
+ --align 1 \
+ --pad \
+ --pad-header \
+ --measured-boot-record \
+ -H 0x400 \
+ -s auto \
+ $archive/$host_bin \
+ $tmpdir/$signed_bin
+
+ echo "Generated signed_`basename ${1}`"
+
+ url="$tmpdir/$signed_bin" saveas="$signed_bin" fetch_file
+ archive_file "$signed_bin"
+ popd
+}
+
+downlaod_rd1ae_prebuilt() {
+ url="$arm_automotive_solutions/rd1ae/core-image-minimal-fvp-rd-kronos.wic" saveas="rootfs.bin" fetch_file
+ archive_file "rootfs.bin"
+
+ # Get pre-built rse encrypted_cm_provisioning_bundle_0 bin
+ url="$arm_automotive_solutions/rd1ae/encrypted_cm_provisioning_bundle_0.bin" \
+ saveas=rse_encrypted_cm_provisioning_bundle_0.bin fetch_file
+ archive_file "rse_encrypted_cm_provisioning_bundle_0.bin"
+
+ # Get pre-built rse encrypted_dm_provisioning_bundle bin
+ url="$arm_automotive_solutions/rd1ae/encrypted_dm_provisioning_bundle_0.bin" \
+ saveas=rse_encrypted_dm_provisioning_bundle.bin fetch_file
+ archive_file "rse_encrypted_dm_provisioning_bundle.bin"
+
+ # Get pre-built rse-rom-image.img
+ url="$arm_automotive_solutions/rd1ae/rse-rom-image.img" saveas=rse_rom.bin fetch_file
+ archive_file "rse_rom.bin"
+
+ # Get pre-built rse-flash-image.img
+ url="$arm_automotive_solutions/rd1ae/rse-flash-image.img" saveas=rse_flash.bin fetch_file
+ archive_file "rse_flash.bin"
+
+ # Get pre-built rse-nvm-image.img
+ url="$arm_automotive_solutions/rd1ae/rse-nvm-image.img" fetch_file
+ archive_file "rse-nvm-image.img"
+}
+
+update_ap_flash_image() {
+ # Downlaod prebuilt ap-flash-image.img
+ url="$arm_automotive_solutions/rd1ae/ap-flash-image.img" saveas=fip_gpt.bin fetch_file
+ archive_file "fip_gpt.bin"
+
+ if [ ! -f "$archive/fip.bin" ]; then
+ echo "$archive/fip.bin does not exist. Aborting...!"
+ exit 1
+ fi
+
+ echo "Updating ap-flash-image..."
+ dd if=$archive/fip.bin of=$archive/fip_gpt.bin bs=1 seek=0 conv=notrunc
+ dd if=$archive/fip.bin of=$archive/fip_gpt.bin bs=1 seek=$((0x200000)) conv=notrunc
+ echo "Succesfully updated."
+}