blob: c4109c43bbec35ae7924f0ca93ee0e4c4b8172b7 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright (c) 2019-2022, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
fetch_tf_resource() {
kernel_type="fvp-tc-kernel" get_kernel
initrd_type="fvp-tc-ramdisk" get_initrd
# Use SCP binary from SCP build if it exists, or fetch pre-built ones.
if [ ! -f "$archive/scp_rom.bin" ]; then
# Pick the appropriate binary based on target platform variant
url="$scp_prebuilts/tc$plat_variant/release/tc$plat_variant-bl1.bin" saveas="scp_rom.bin" fetch_file
archive_file "scp_rom.bin"
fi
# RSS is applicable to TC2
if [ $plat_variant -eq 2 ]; then
# Hold RSS terminal_uart_ap
uart="2" file="hold_uart.exp" track_expect
sign_image() {
# $1 ... host binary name to sign
# $2 ... image load address
# $3 ... signed bin size
local tmpdir="$(mktempdir)"
host_bin="`basename ${1}`"
signed_bin="signed_`basename ${1}`"
host_binary_layout="`basename -s .bin ${1}`_ns"
# development PEM containing a key - use same key which is used for SCP BL1 in pre-built image
url="$tc_prebuilts/tc$plat_variant/root-RSA-3072.pem" saveas="root-RSA-3072.pem" fetch_file
archive_file "root-RSA-3072.pem"
RSS_SIGN_PRIVATE_KEY=$archive/root-RSA-3072.pem
RSS_SEC_CNTR_INIT_VAL=1
RSS_LAYOUT_WRAPPER_VERSION="1.5.0"
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 "https://github.com/mcu-tools/mcuboot.git" $tmpdir/mcuboot
# Fetch wrapper script
saveas="$tmpdir" url="$tc_prebuilts/tc$plat_variant/wrapper_scripts" fetch_directory
echo "Installing dependencies..."
pip3 install cryptography cbor2 intelhex
pushd $tmpdir/mcuboot/scripts
python3 $tmpdir/wrapper_scripts/wrapper/wrapper.py \
-v $RSS_LAYOUT_WRAPPER_VERSION \
--layout $tmpdir/$host_binary_layout \
-k $RSS_SIGN_PRIVATE_KEY \
--public-key-format full \
--align 1 \
--pad \
--pad-header \
-H 0x1000 \
-s $RSS_SEC_CNTR_INIT_VAL \
$archive/$host_bin \
$tmpdir/$signed_bin
echo "created signed_`basename ${1}`"
url="$tmpdir/$signed_bin" saveas="$signed_bin" fetch_file
archive_file "$signed_bin"
popd
}
inject_bl1() {
# Get pre-built rss rom
if [ ! -f "$archive/rss_rom.bin" ]; then
url="$tc_prebuilts/tc$plat_variant/rss_rom.bin" fetch_file
archive_file "rss_rom.bin"
fi
# Get pre-built rss flash
if [ ! -f "$archive/rss_flash.bin" ]; then
url="$tc_prebuilts/tc$plat_variant/rss_flash.bin" fetch_file
archive_file "rss_flash.bin"
fi
# Inject signed AP bl1 into pre-built rss flash image bundle - both at primary and secondary locations.
dd if=$archive/$signed_bin of=$archive/rss_flash.bin bs=1 seek=$((0x240000)) conv=notrunc status=progress
dd if=$archive/$signed_bin of=$archive/rss_flash.bin bs=1 seek=$((0x340000)) conv=notrunc status=progress
}
# sign AP bl1
sign_image bl1.bin $ap_bl1_flash_load_addr $ap_bl1_flash_size
# Inject signed bl1 to pre-built rss flash image
inject_bl1
fi
}
generate_lava_job_template() {
# Hold scp terminal_s0
uart="0" port="5002" file="hold_uart.exp" track_expect
uart="1" port="5003" file="linux-rd-busybox.exp" set_primary="1" \
track_expect
set_uart_port "${archive:?}" 2 5000
set_uart_port "${archive:?}" 3 5001
payload_type="linux" gen_fvp_yaml_template
}