blob: 8baf5d334bcfea9dc412f32f76e52c0fba2fcf3c [file] [log] [blame]
#!/bin/bash
EXEC_BASEDIR=$(dirname $(readlink -f $0))
BASEDIR_TOP=$(readlink -f ${EXEC_BASEDIR}/..)
#
# Settings
#
#BASEDIR_BUILD="${BASEDIR_TOP}/output"
BASEDIR_BUILD="${BASEDIR_TOP}/`date +%Y%m%d%H%M%S%N`"
postfix=.signed
declare -a BLX_BIN_SIZE=("150432" "65536" "65536" "2048" "86016" "262144" "524288" "98304")
function process_ddrfw() {
local ddr_input=$1
local ddr_output=$2
local ddr_type=$3
if [ "$ddr_type" == "ddr4" ]; then
dd if=${ddr_input}/ddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864 &> /dev/null
dd if=${ddr_input}/ddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864 &> /dev/null
elif [ "$ddr_type" == "ddr3" ]; then
dd if=${ddr_input}/ddr3_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864 &> /dev/null
dd if=/dev/zero of=${ddr_output}/ddrfw_2d.bin bs=36864 count=1
elif [ "$ddr_type" == "lpddr4" ]; then
dd if=${ddr_input}/lpddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864 &> /dev/null
dd if=${ddr_input}/lpddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864 &> /dev/null
elif [ "$ddr_type" == "lpddr3" ]; then
dd if=${ddr_input}/lpddr3_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864 &> /dev/null
dd if=/dev/zero of=${ddr_output}/ddrfw_2d.bin bs=36864 count=1
else
echo "un-recognized ddr_type: ${ddr_type}"
echo "---- use default ddr4 ----"
dd if=${ddr_input}/ddr4_1d.fw of=${ddr_output}/ddrfw_1d.bin skip=96 bs=1 count=36864 &> /dev/null
dd if=${ddr_input}/ddr4_2d.fw of=${ddr_output}/ddrfw_2d.bin skip=96 bs=1 count=36864 &> /dev/null
fi
piei_size=`stat -c %s ${ddr_input}/piei.fw`
if [ $piei_size -gt 12384 ]; then
dd if=${ddr_input}/piei.fw of=${ddr_output}/ddrfw_piei.bin skip=96 bs=1 count=12288 &> /dev/null
else
dd if=/dev/zero of=${ddr_output}/ddrfw_piei.bin bs=12288 count=1 &> /dev/null
dd if=${ddr_input}/piei.fw of=${ddr_output}/ddrfw_piei.bin skip=96 bs=1 conv=notrunc &> /dev/null
fi
cat ${ddr_output}/ddrfw_1d.bin ${ddr_output}/ddrfw_2d.bin \
${ddr_output}/ddrfw_piei.bin > ${ddr_output}/ddr-fwdata.bin
if [ ! -f ${ddr_output}/ddr-fwdata.bin ]; then
echo "ddr-fwdata payload does not exist in ${ddr_output} !"
exit -1
fi
ddrfw_data_size=`stat -c %s ${ddr_output}/ddr-fwdata.bin`
if [ $ddrfw_data_size -ne 86016 ]; then
echo "ddr-fwdata size is not equal to 84K, $ddrfw_data_size"
exit -1
fi
}
function sign_blx() {
local argv=("$@")
local i=0
# Parse args
while [ $i -lt $# ]; do
arg="${argv[$i]}"
#echo "i=$i argv[$i]=${argv[$i]}"
i=$((i + 1))
case "$arg" in
--blxname)
blxname="${argv[$i]}" ;;
--input)
input="${argv[$i]}" ;;
--output)
output="${argv[$i]}" ;;
--ddr_type)
ddr_type="${argv[$i]}" ;;
--chip_acs)
chip_acs="${argv[$i]}" ;;
--chipset_name)
chipset_name="${argv[$i]}" ;;
--chipset_variant)
chipset_variant="${argv[$i]}" ;;
--key_type)
key_type="${argv[$i]}" ;;
--soc)
soc="${argv[$i]}" ;;
--build_type)
build_type="${argv[$i]}" ;;
--extra_args)
tool_type="${argv[$i]}" ;;
*)
echo "Unknown option $arg"; exit 1
;;
esac
i=$((i + 1))
done
if [ -z ${input} ] || [ ! -f ${input} ]; then
echo "input ${input} invalid"
exit 1
fi
if [ -z ${output} ]; then
echo "output ${output} invalid"
exit 1
fi
if [ -z ${blxname} ]; then
echo "blxname ${blxname} invalid"
exit 1
fi
if [ -z ${chipset_name} ]; then
chipset_name="a113x2"
fi
# select bl2/bl2e sign template
FEAT_BL2_TEMPLATE_TYPE=
FEAT_BL2E_SIGPROT_MODE=0
if [ -z ${chipset_variant} ] || [ ${chipset_variant} == "no_variant" ] || [ ${chipset_variant} == "general" ]; then
chipset_variant_suffix=""
else
chipset_variant_suffix=".${chipset_variant}"
if [[ "${input}" =~ ".sto" ]]; then
FEAT_BL2_TEMPLATE_TYPE=".sto"
if [[ "${chipset_variant}" =~ "nocs" ]]; then
FEAT_BL2E_SIGPROT_MODE=1
fi
elif [[ "${input}" =~ ".usb" ]]; then
FEAT_BL2_TEMPLATE_TYPE=".usb"
else
# for BL2X, it need a default value if chipset_variant
# is set
FEAT_BL2_TEMPLATE_TYPE=".sto"
fi
fi
if [ "fastboot" == "${tool_type}" ]; then
chipset_variant_suffix=""
fi
chipset_name=${chipset_name}".compact-fip"
export FEAT_BL2_TEMPLATE_TYPE
export FEAT_BL2E_SIGPROT_MODE
#special case for c3 fastboot
if [ "fastboot" == "${tool_type}" ]; then
BLX_BIN_SIZE[5]="94208" #bl31 size
BLX_BIN_SIZE[6]="4096" #bl32 size
BLX_BIN_SIZE[7]="4096" #bl40 size
fi
if [ -z ${key_type} ]; then
key_type="dev-keys"
fi
if [ -z ${soc} ]; then
soc="c3"
fi
if [ -z ${build_type} ]; then
build_type=normal
fi
mkdir ${BASEDIR_BUILD}
if [ ${blxname} == "bl2" ] || [ ${blxname} == "bl2e" ] || [ ${blxname} == "bl2x" ]; then
dd if=/dev/zero of=${BASEDIR_BUILD}/bl2-payload.bin bs=${BLX_BIN_SIZE[0]} count=1 &> /dev/null
dd if=/dev/zero of=${BASEDIR_BUILD}/bl2e-payload.bin bs=${BLX_BIN_SIZE[1]} count=1 &> /dev/null
dd if=/dev/zero of=${BASEDIR_BUILD}/bl2x-payload.bin bs=${BLX_BIN_SIZE[2]} count=1 &> /dev/null
dd if=/dev/zero of=${BASEDIR_BUILD}/csinit-params.bin bs=${BLX_BIN_SIZE[3]} count=1 &> /dev/null
#dd if=/dev/zero of=${BASEDIR_BUILD}/ddr-fwdata.bin bs=${BLX_BIN_SIZE[4]} count=1 &> /dev/null
elif [ ${blxname} == "bl31" ]; then
dd if=/dev/zero of=${BASEDIR_BUILD}/${blxname}-payload.bin bs=${BLX_BIN_SIZE[5]} count=1 &> /dev/null
elif [ ${blxname} == "bl32" ]; then
dd if=/dev/zero of=${BASEDIR_BUILD}/${blxname}-payload.bin bs=${BLX_BIN_SIZE[6]} count=1 &> /dev/null
elif [ ${blxname} == "bl40" ]; then
dd if=/dev/zero of=${BASEDIR_BUILD}/${blxname}-payload.bin bs=${BLX_BIN_SIZE[7]} count=1 &> /dev/null
else
echo invalid blxname [$blxname]
exit 1
fi
${EXEC_BASEDIR}/download-keys.sh ${key_type} ${soc} chipset
if [ ${blxname} == "bl2" ] && [ ${build_type} == "normal" ]; then
if [ -z ${chip_acs} ] || [ ! -f ${chip_acs} ]; then
echo "chip_acs ${chip_acs} invalid"
exit 1
fi
dd if=${chip_acs} of=${BASEDIR_BUILD}/csinit-params.bin conv=notrunc &> /dev/null
dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc &> /dev/null
#process_ddrfw ${BASEDIR_TOP} ${BASEDIR_BUILD} ${ddr_type}
${EXEC_BASEDIR}/gen-boot-blobs.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
elif [ ${blxname} == "bl2" ] && [ ${build_type} == "bl2-only" ]; then
dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc &> /dev/null
${EXEC_BASEDIR}/gen-boot-blob-bl2-only.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
elif [ ${blxname} == "bl2" ] && [ ${build_type} == "bl2-final" ]; then
if [ -z ${chip_acs} ] || [ ! -f ${chip_acs} ]; then
echo "chip_acs ${chip_acs} invalid"
exit 1
fi
dd if=${chip_acs} of=${BASEDIR_BUILD}/csinit-params.bin conv=notrunc &> /dev/null
#process_ddrfw ${BASEDIR_TOP} ${BASEDIR_BUILD} ${ddr_type}
dd if=${input} of=${BASEDIR_BUILD}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${chipset_variant_suffix}.bin.bl2-only conv=notrunc &> /dev/null
${EXEC_BASEDIR}/gen-boot-blob-bl2-final.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
elif [ ${blxname} == "bl2e" ] || [ ${blxname} == "bl2x" ]; then
dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc &> /dev/null
${EXEC_BASEDIR}/gen-boot-blobs.sh ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${chipset_variant_suffix}
elif [ ${blxname} == "bl31" ] || [ ${blxname} == "bl32" ] || [ ${blxname} == "bl40" ]; then
dd if=${input} of=${BASEDIR_BUILD}/${blxname}-payload.bin conv=notrunc &> /dev/null
if [ ${blxname} == "bl31" ]; then
${EXEC_BASEDIR}/pack_aucpu_key.sh ${blxname:2:2} ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc}
fi
${EXEC_BASEDIR}/gen-bl3x-blobs.sh ${blxname:2:2} ${BASEDIR_BUILD} ${BASEDIR_BUILD} ${chipset_name} ${key_type} ${soc} ${tool_type}
fi
if [ ${blxname} == "bl2" ]; then
if [ ${build_type} == "bl2-only" ]; then
cp ${BASEDIR_BUILD}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${chipset_variant_suffix}.bin.bl2-only $output
else
cp ${BASEDIR_BUILD}/bb1st${FEAT_BL2_TEMPLATE_TYPE}${chipset_variant_suffix}.bin${postfix} $output
fi
else
cp ${BASEDIR_BUILD}/blob-${blxname}.bin${postfix} $output
fi
}
rm -rf ${BASEDIR_BUILD}
sign_blx $@
rm -rf ${BASEDIR_BUILD}