1ae33e311SJoseph Chen#!/bin/bash 2ae33e311SJoseph Chen# 3ae33e311SJoseph Chen# Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd 4ae33e311SJoseph Chen# 5ae33e311SJoseph Chen# SPDX-License-Identifier: GPL-2.0 6ae33e311SJoseph Chen# 7ae33e311SJoseph Chenset -e 8ae33e311SJoseph Chen 9ae33e311SJoseph ChenFIT_DIR="fit" 10ae33e311SJoseph ChenIMG_UBOOT="uboot.img" 11ae33e311SJoseph ChenIMG_BOOT="boot.img" 12ae33e311SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb" 13ae33e311SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb" 14ae33e311SJoseph ChenSIG_BIN="data2sign.bin" 15ae33e311SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign" 16ae33e311SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign" 17ae33e311SJoseph Chen# offs 18ae33e311SJoseph ChenOFFS_NS_UBOOT="0xa00" 19ae33e311SJoseph ChenOFFS_S_UBOOT="0xc00" 20ae33e311SJoseph ChenOFFS_NS_BOOT="0x800" 21ae33e311SJoseph ChenOFFS_S_BOOT="0xc00" 22ae33e311SJoseph Chen# file 23ae33e311SJoseph ChenCHIP_FILE="arch/arm/lib/.asm-offsets.s.cmd" 24ae33e311SJoseph Chen# placeholder address 25ae33e311SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00" 26ae33e311SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01" 27ae33e311SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02" 28ae33e311SJoseph Chen# tools 29ae33e311SJoseph ChenMKIMAGE="./tools/mkimage" 30ae33e311SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh" 31ae33e311SJoseph ChenCHECK_SIGN="./tools/fit_check_sign" 32ae33e311SJoseph Chen# key 33ae33e311SJoseph ChenKEY_DIR="keys/" 34ae33e311SJoseph ChenRSA_PRI_KEY="keys/dev.key" 35ae33e311SJoseph ChenRSA_PUB_KEY="keys/dev.crt" 36ae33e311SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev" 37ae33e311SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb" 38ae33e311SJoseph ChenUBOOT_DTB="u-boot.dtb" 39ae33e311SJoseph Chen# its 40ae33e311SJoseph ChenITS_UBOOT="u-boot.its" 41ae33e311SJoseph ChenITS_BOOT="boot.its" 42ae33e311SJoseph ChenARG_VER_UBOOT="0" 43ae33e311SJoseph ChenARG_VER_BOOT="0" 44ae33e311SJoseph Chen 45ae33e311SJoseph Chenfunction help() 46ae33e311SJoseph Chen{ 47ae33e311SJoseph Chen echo 48ae33e311SJoseph Chen echo "usage:" 49ae33e311SJoseph Chen echo " $0 [args]" 50ae33e311SJoseph Chen echo 51ae33e311SJoseph Chen echo "args:" 52ae33e311SJoseph Chen echo " --rollback-index-boot <decimal integer>" 53ae33e311SJoseph Chen echo " --rollback-index-uboot <decimal integer>" 54ae33e311SJoseph Chen echo " --version-uboot <decimal integer>" 55ae33e311SJoseph Chen echo " --version-boot <decimal integer>" 56ae33e311SJoseph Chen echo " --ini-trust" 57ae33e311SJoseph Chen echo " --ini-loader" 58ae33e311SJoseph Chen echo " --no-check" 59ae33e311SJoseph Chen echo " --spl-new" 60ae33e311SJoseph Chen echo " --boot_img" 612d11b868SJoseph Chen echo " --args" 62ae33e311SJoseph Chen echo 63ae33e311SJoseph Chen} 64ae33e311SJoseph Chen 65ae33e311SJoseph Chenfunction arg_check_decimal() 66ae33e311SJoseph Chen{ 67ae33e311SJoseph Chen if [ -z $1 ]; then 68ae33e311SJoseph Chen help 69ae33e311SJoseph Chen exit 1 70ae33e311SJoseph Chen fi 71ae33e311SJoseph Chen 72ae33e311SJoseph Chen decimal=`echo $1 |sed 's/[0-9]//g'` 73ae33e311SJoseph Chen if [ ! -z ${decimal} ]; then 74ae33e311SJoseph Chen echo "ERROR: $1 is not decimal integer" 75ae33e311SJoseph Chen help 76ae33e311SJoseph Chen exit 1 77ae33e311SJoseph Chen fi 78ae33e311SJoseph Chen} 79ae33e311SJoseph Chen 80ae33e311SJoseph Chenfunction check_its() 81ae33e311SJoseph Chen{ 82ae33e311SJoseph Chen cat $1 | while read line 83ae33e311SJoseph Chen do 84ae33e311SJoseph Chen file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '` 85ae33e311SJoseph Chen if [ ! -f ${file} ]; then 86ae33e311SJoseph Chen echo "ERROR: No ${file}" 87ae33e311SJoseph Chen exit 1 88ae33e311SJoseph Chen fi 89ae33e311SJoseph Chen done 90ae33e311SJoseph Chen} 91ae33e311SJoseph Chen 92ae33e311SJoseph Chenfunction validate_arg() 93ae33e311SJoseph Chen{ 94ae33e311SJoseph Chen case $1 in 9514aa40ffSJoseph Chen --no-check|--spl-new|--burn-key-hash) 96ae33e311SJoseph Chen shift=1 97ae33e311SJoseph Chen ;; 98ae33e311SJoseph Chen --ini-trust|--ini-loader|--rollback-index-boot|--rollback-index-uboot|--boot_img|--version-uboot|--version-boot) 99ae33e311SJoseph Chen shift=2 100ae33e311SJoseph Chen ;; 101ae33e311SJoseph Chen *) 102ae33e311SJoseph Chen shift=0 103ae33e311SJoseph Chen ;; 104ae33e311SJoseph Chen esac 105ae33e311SJoseph Chen echo ${shift} 106ae33e311SJoseph Chen} 107ae33e311SJoseph Chen 108ae33e311SJoseph Chenfunction fit_process_args() 109ae33e311SJoseph Chen{ 110ae33e311SJoseph Chen if [ $# -eq 0 ]; then 111ae33e311SJoseph Chen help 112ae33e311SJoseph Chen exit 0 113ae33e311SJoseph Chen fi 114ae33e311SJoseph Chen 115ae33e311SJoseph Chen while [ $# -gt 0 ]; do 116ae33e311SJoseph Chen case $1 in 1172d11b868SJoseph Chen --args) 118ae33e311SJoseph Chen ARG_VALIDATE=$2 119ae33e311SJoseph Chen shift 2 120ae33e311SJoseph Chen ;; 1212d11b868SJoseph Chen --boot_img) # boot.img 1222d11b868SJoseph Chen ARG_BOOT_IMG=$2 1232d11b868SJoseph Chen shift 2 124ae33e311SJoseph Chen ;; 1252d11b868SJoseph Chen --boot_img_dir) # boot.img components directory 1262d11b868SJoseph Chen ARG_BOOT_IMG_DIR=$2 1272d11b868SJoseph Chen shift 2 128ae33e311SJoseph Chen ;; 129ae33e311SJoseph Chen --no-check) # No hostcc fit signature check 130ae33e311SJoseph Chen ARG_NO_CHECK="y" 131ae33e311SJoseph Chen shift 1 132ae33e311SJoseph Chen ;; 133ae33e311SJoseph Chen --ini-trust) # Assign trust ini file 134ae33e311SJoseph Chen ARG_INI_TRUST=$2 135ae33e311SJoseph Chen shift 2 136ae33e311SJoseph Chen ;; 137ae33e311SJoseph Chen --ini-loader) # Assign loader ini file 138ae33e311SJoseph Chen ARG_INI_LOADER=$2 139ae33e311SJoseph Chen shift 2 140ae33e311SJoseph Chen ;; 141ae33e311SJoseph Chen --spl-new) # Use current build u-boot-spl.bin to pack loader 142ae33e311SJoseph Chen ARG_SPL_NEW="y" 143ae33e311SJoseph Chen shift 1 144ae33e311SJoseph Chen ;; 145ae33e311SJoseph Chen --rollback-index-boot) 146ae33e311SJoseph Chen ARG_ROLLBACK_IDX_BOOT=$2 147ae33e311SJoseph Chen arg_check_decimal $2 148ae33e311SJoseph Chen shift 2 149ae33e311SJoseph Chen ;; 150ae33e311SJoseph Chen --rollback-index-uboot) 151ae33e311SJoseph Chen ARG_ROLLBACK_IDX_UBOOT=$2 152ae33e311SJoseph Chen arg_check_decimal $2 153ae33e311SJoseph Chen shift 2 154ae33e311SJoseph Chen ;; 155ae33e311SJoseph Chen --version-uboot) 156ae33e311SJoseph Chen ARG_VER_UBOOT=$2 157ae33e311SJoseph Chen arg_check_decimal $2 158ae33e311SJoseph Chen shift 2 159ae33e311SJoseph Chen ;; 160ae33e311SJoseph Chen --version-boot) 161ae33e311SJoseph Chen ARG_VER_BOOT=$2 162ae33e311SJoseph Chen arg_check_decimal $2 163ae33e311SJoseph Chen shift 2 164ae33e311SJoseph Chen ;; 16514aa40ffSJoseph Chen --burn-key-hash) 16614aa40ffSJoseph Chen ARG_BURN_KEY_HASH="y" 16714aa40ffSJoseph Chen shift 1 16814aa40ffSJoseph Chen ;; 169ae33e311SJoseph Chen *) 170ae33e311SJoseph Chen help 171ae33e311SJoseph Chen exit 1 172ae33e311SJoseph Chen ;; 173ae33e311SJoseph Chen esac 174ae33e311SJoseph Chen done 1752d11b868SJoseph Chen 1762d11b868SJoseph Chen if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 1772d11b868SJoseph Chen ARG_SIGN="y" 1782d11b868SJoseph Chen fi 179ae33e311SJoseph Chen} 180ae33e311SJoseph Chen 1812d11b868SJoseph Chenfunction fit_raw_compile() 182ae33e311SJoseph Chen{ 183ae33e311SJoseph Chen # Verified-boot: should rebuild code but don't need to repack images. 1842d11b868SJoseph Chen if [ "${ARG_SIGN}" == "y" ]; then 1852d11b868SJoseph Chen ./make.sh --raw-compile 186ae33e311SJoseph Chen fi 1872d11b868SJoseph Chen rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} 188ae33e311SJoseph Chen} 189ae33e311SJoseph Chen 190ae33e311SJoseph Chenfunction fit_gen_uboot_itb() 191ae33e311SJoseph Chen{ 192ae33e311SJoseph Chen ./make.sh itb ${ARG_INI_TRUST} >/dev/null 2>&1 193ae33e311SJoseph Chen check_its ${ITS_UBOOT} 194ae33e311SJoseph Chen 1952d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 196ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_NS_UBOOT} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 197ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 198ae33e311SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 199ae33e311SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 200ae33e311SJoseph Chen else 201ae33e311SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 202ae33e311SJoseph Chen fi 203ae33e311SJoseph Chen else 204ae33e311SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 205ae33e311SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY} " 206ae33e311SJoseph Chen exit 1 207ae33e311SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 208ae33e311SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY} " 209ae33e311SJoseph Chen exit 1 210ae33e311SJoseph Chen fi 211ae33e311SJoseph Chen 212ae33e311SJoseph Chen if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then 213ae33e311SJoseph Chen echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled" 214ae33e311SJoseph Chen exit 1 215ae33e311SJoseph Chen fi 216ae33e311SJoseph Chen 21741290645SJoseph Chen # rollback-index 218ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then 219ae33e311SJoseph Chen ARG_SPL_ROLLBACK_PROTECT="y" 220ae33e311SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then 221ae33e311SJoseph Chen echo "ERROR: No arg \"--rollback-index-uboot <n>\"" 222ae33e311SJoseph Chen exit 1 223ae33e311SJoseph Chen fi 224ae33e311SJoseph Chen fi 225ae33e311SJoseph Chen 226ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 22741290645SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 22841290645SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT} 229ae33e311SJoseph Chen fi 230ae33e311SJoseph Chen 23114aa40ffSJoseph Chen # burn-key-hash 23214aa40ffSJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 23314aa40ffSJoseph Chen sed -i "s/burn-key-hash = <0>;/burn-key-hash = <1>;/g" ${ITS_UBOOT} 23414aa40ffSJoseph Chen fi 23514aa40ffSJoseph Chen 236ae33e311SJoseph Chen # u-boot.dtb must contains rsa key 237ae33e311SJoseph Chen if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then 238ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_S_UBOOT} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 2392d11b868SJoseph Chen echo "## Adding RSA public key into ${UBOOT_DTB}" 240ae33e311SJoseph Chen fi 241ae33e311SJoseph Chen 242ae33e311SJoseph Chen # Pack 243ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_S_UBOOT} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 244ae33e311SJoseph Chen mv ${SIG_BIN} ${SIG_UBOOT} 245ae33e311SJoseph Chen 246ae33e311SJoseph Chen # rollback-index read back check 247ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 248ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index` 249ae33e311SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then 250ae33e311SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}"; 251ae33e311SJoseph Chen exit 1 252ae33e311SJoseph Chen fi 253ae33e311SJoseph Chen fi 254ae33e311SJoseph Chen 25514aa40ffSJoseph Chen # burn-key-hash read back check 25614aa40ffSJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 25714aa40ffSJoseph Chen if [ "`fdtget -ti ${ITB_UBOOT} /configurations/conf burn-key-hash`" != "1" ]; then 25814aa40ffSJoseph Chen echo "ERROR: Failed to set burn-key-hash for ${ITB_UBOOT}"; 25914aa40ffSJoseph Chen exit 1 26014aa40ffSJoseph Chen fi 26114aa40ffSJoseph Chen fi 26214aa40ffSJoseph Chen 263ae33e311SJoseph Chen # host check signature 264ae33e311SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 265ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 266ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s 267ae33e311SJoseph Chen else 268ae33e311SJoseph Chen spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER} |tr -d '\r'` 269ae33e311SJoseph Chen offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "` 270ae33e311SJoseph Chen if [ -z ${offs} ]; then 271ae33e311SJoseph Chen echo "ERROR: invalid ${spl_file} , unable to find fdt blob" 272ae33e311SJoseph Chen fi 273ae33e311SJoseph Chen offs=`printf %d ${offs} ` # hex -> dec 274ae33e311SJoseph Chen dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1 275ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s 276ae33e311SJoseph Chen fi 277ae33e311SJoseph Chen fi 278ae33e311SJoseph Chen 279ae33e311SJoseph Chen # minimize u-boot-spl.dtb 280ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 281ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 282ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then 283*f269c7e9SJoseph Chen fdtput -d ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 284ae33e311SJoseph Chen else 285*f269c7e9SJoseph Chen fdtput -d ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 286ae33e311SJoseph Chen fi 287ae33e311SJoseph Chen else 288*f269c7e9SJoseph Chen fdtput -d ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 289*f269c7e9SJoseph Chen fdtput -d ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 290*f269c7e9SJoseph Chen fdtput -d ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 291ae33e311SJoseph Chen fi 292ae33e311SJoseph Chen 293ae33e311SJoseph Chen # repack spl 294ae33e311SJoseph Chen rm -f *_loader_*.bin 295ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 296ae33e311SJoseph Chen cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin 297ae33e311SJoseph Chen if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then 298ae33e311SJoseph Chen cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin 299ae33e311SJoseph Chen fi 300ae33e311SJoseph Chen cat ${SPL_DTB} >> spl/u-boot-spl.bin 301ae33e311SJoseph Chen 302ae33e311SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 303ae33e311SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 304ae33e311SJoseph Chen else 305ae33e311SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 306ae33e311SJoseph Chen fi 307ae33e311SJoseph Chen fi 308ae33e311SJoseph Chen 309ae33e311SJoseph Chen rm -f u-boot.itb u-boot.img u-boot-dtb.img 310ae33e311SJoseph Chen mv ${ITS_UBOOT} ${FIT_DIR} 311ae33e311SJoseph Chen} 312ae33e311SJoseph Chen 313ae33e311SJoseph Chenfunction fit_gen_boot_itb() 314ae33e311SJoseph Chen{ 3152d11b868SJoseph Chen if [ ! -z ${ARG_BOOT_IMG} ]; then 3162d11b868SJoseph Chen ${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack 317ae33e311SJoseph Chen ITS_BOOT="${FIT_DIR}/unpack/image.its" 318ae33e311SJoseph Chen else 319ae33e311SJoseph Chen compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-` 320ae33e311SJoseph Chen if [ -z "${compression}" ]; then 321ae33e311SJoseph Chen compression="none" 322ae33e311SJoseph Chen fi 323ae33e311SJoseph Chen ./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT} 324ae33e311SJoseph Chen check_its ${ITS_BOOT} 325ae33e311SJoseph Chen fi 326ae33e311SJoseph Chen 3272d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 328ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_NS_BOOT} ${ITB_BOOT} -v ${ARG_VER_BOOT} 329ae33e311SJoseph Chen else 330ae33e311SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 331ae33e311SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY}" 332ae33e311SJoseph Chen exit 1 333ae33e311SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 334ae33e311SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY}" 335ae33e311SJoseph Chen exit 1 336ae33e311SJoseph Chen fi 337ae33e311SJoseph Chen 338ae33e311SJoseph Chen if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 339ae33e311SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 340ae33e311SJoseph Chen exit 1 341ae33e311SJoseph Chen fi 342ae33e311SJoseph Chen 343ae33e311SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 344ae33e311SJoseph Chen ARG_ROLLBACK_PROTECT="y" 345ae33e311SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then 346ae33e311SJoseph Chen echo "ERROR: No arg \"--rollback-index-boot <n>\"" 347ae33e311SJoseph Chen exit 1 348ae33e311SJoseph Chen fi 349ae33e311SJoseph Chen fi 350ae33e311SJoseph Chen 351ae33e311SJoseph Chen # fixup 352ae33e311SJoseph Chen COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'` 353ae33e311SJoseph Chen FDT_ADDR_R=`awk /fdt_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 354ae33e311SJoseph Chen KERNEL_ADDR_R=`awk /kernel_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 355ae33e311SJoseph Chen RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 356ae33e311SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_BOOT} 357ae33e311SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_BOOT} 358ae33e311SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT} 359ae33e311SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 360ae33e311SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_BOOT} 361ae33e311SJoseph Chen fi 362ae33e311SJoseph Chen 363ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 36441290645SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 36541290645SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT} 366ae33e311SJoseph Chen fi 367ae33e311SJoseph Chen 368ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_S_BOOT} -r ${ITB_BOOT} -v ${ARG_VER_BOOT} 369ae33e311SJoseph Chen mv ${SIG_BIN} ${SIG_BOOT} 370ae33e311SJoseph Chen 371ae33e311SJoseph Chen # rollback-index read back check 372ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 373ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index` 374ae33e311SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then 375ae33e311SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}"; 376ae33e311SJoseph Chen exit 1 377ae33e311SJoseph Chen fi 378ae33e311SJoseph Chen fi 379ae33e311SJoseph Chen 380ae33e311SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 381ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB} 382ae33e311SJoseph Chen fi 383ae33e311SJoseph Chen 384ae33e311SJoseph Chen # minimize u-boot.dtb 385ae33e311SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 386ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 387ae33e311SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 388*f269c7e9SJoseph Chen fdtput -d ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 389ae33e311SJoseph Chen else 390*f269c7e9SJoseph Chen fdtput -d ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 391ae33e311SJoseph Chen fi 392ae33e311SJoseph Chen else 393*f269c7e9SJoseph Chen fdtput -d ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 394*f269c7e9SJoseph Chen fdtput -d ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 395*f269c7e9SJoseph Chen fdtput -d ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 396ae33e311SJoseph Chen fi 397ae33e311SJoseph Chen fi 398ae33e311SJoseph Chen 399ae33e311SJoseph Chen mv ${ITS_BOOT} ${FIT_DIR} 400ae33e311SJoseph Chen} 401ae33e311SJoseph Chen 402ae33e311SJoseph Chenfunction fit_gen_uboot_img() 403ae33e311SJoseph Chen{ 404ae33e311SJoseph Chen ITB=$1 405ae33e311SJoseph Chen 406ae33e311SJoseph Chen if [ -z ${ITB} ]; then 407ae33e311SJoseph Chen ITB=${ITB_UBOOT} 408ae33e311SJoseph Chen fi 409ae33e311SJoseph Chen 410ae33e311SJoseph Chen ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'` 411ae33e311SJoseph Chen ITB_MAX_KB=`sed -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'` 412ae33e311SJoseph Chen ITB_MAX_BS=$((ITB_MAX_KB*1024)) 413ae33e311SJoseph Chen ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'` 414ae33e311SJoseph Chen 415ae33e311SJoseph Chen if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then 416ae33e311SJoseph Chen echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes" 417ae33e311SJoseph Chen exit 1 418ae33e311SJoseph Chen fi 419ae33e311SJoseph Chen 420ae33e311SJoseph Chen rm -f ${IMG_UBOOT} 421ae33e311SJoseph Chen for ((i = 0; i < ${ITB_MAX_NUM}; i++)); 422ae33e311SJoseph Chen do 423ae33e311SJoseph Chen cat ${ITB} >> ${IMG_UBOOT} 424ae33e311SJoseph Chen truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT} 425ae33e311SJoseph Chen done 426ae33e311SJoseph Chen} 427ae33e311SJoseph Chen 428ae33e311SJoseph Chenfunction fit_gen_boot_img() 429ae33e311SJoseph Chen{ 430ae33e311SJoseph Chen ITB=$1 431ae33e311SJoseph Chen 432ae33e311SJoseph Chen if [ -z ${ITB} ]; then 433ae33e311SJoseph Chen ITB=${ITB_BOOT} 434ae33e311SJoseph Chen fi 435ae33e311SJoseph Chen 436ae33e311SJoseph Chen if [ "${ITB}" != "${IMG_BOOT}" ]; then 437ae33e311SJoseph Chen cp ${ITB} ${IMG_BOOT} -f 438ae33e311SJoseph Chen fi 439ae33e311SJoseph Chen} 440ae33e311SJoseph Chen 441ae33e311SJoseph Chenfunction fit_msg_uboot() 442ae33e311SJoseph Chen{ 4432d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 444ae33e311SJoseph Chen MSG_SIGN="no-signed" 445ae33e311SJoseph Chen else 446ae33e311SJoseph Chen MSG_SIGN="signed" 447ae33e311SJoseph Chen fi 448ae33e311SJoseph Chen 449ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} / version` 450ae33e311SJoseph Chen if [ "${VERSION}" != "" ]; then 451ae33e311SJoseph Chen MSG_VER=", version=${VERSION}" 452ae33e311SJoseph Chen fi 453ae33e311SJoseph Chen 45414aa40ffSJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 45514aa40ffSJoseph Chen echo "uboot.img: burn-key-hash=1" 45614aa40ffSJoseph Chen echo 45714aa40ffSJoseph Chen fi 45814aa40ffSJoseph Chen 459ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 460ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready" 461ae33e311SJoseph Chen else 462ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready" 463ae33e311SJoseph Chen fi 464ae33e311SJoseph Chen} 465ae33e311SJoseph Chen 466ae33e311SJoseph Chenfunction fit_msg_boot() 467ae33e311SJoseph Chen{ 4682d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 469ae33e311SJoseph Chen MSG_SIGN="no-signed" 470ae33e311SJoseph Chen else 471ae33e311SJoseph Chen MSG_SIGN="signed" 472ae33e311SJoseph Chen fi 473ae33e311SJoseph Chen 474ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} / version` 475ae33e311SJoseph Chen if [ "${VERSION}" != "" ]; then 476ae33e311SJoseph Chen MSG_VER=", version=${VERSION}" 477ae33e311SJoseph Chen fi 478ae33e311SJoseph Chen 479ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 480ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready" 481ae33e311SJoseph Chen else 482ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready" 483ae33e311SJoseph Chen fi 484ae33e311SJoseph Chen} 485ae33e311SJoseph Chen 486ae33e311SJoseph Chenfunction fit_msg_loader() 487ae33e311SJoseph Chen{ 488ae33e311SJoseph Chen LOADER=`ls *loader*.bin` 489ae33e311SJoseph Chen echo "Image(no-signed): ${LOADER} (with spl, ddr, usbplug) is ready" 490ae33e311SJoseph Chen} 491ae33e311SJoseph Chen 4922d11b868SJoseph Chenfunction fit_generate_uboot() 493ae33e311SJoseph Chen{ 4942d11b868SJoseph Chen fit_raw_compile 495ae33e311SJoseph Chen fit_gen_uboot_itb 496ae33e311SJoseph Chen fit_gen_uboot_img 497ae33e311SJoseph Chen echo 498ae33e311SJoseph Chen fit_msg_uboot 499ae33e311SJoseph Chen} 500ae33e311SJoseph Chen 5012d11b868SJoseph Chenfunction fit_generate_uboot_boot() 502ae33e311SJoseph Chen{ 5032d11b868SJoseph Chen fit_raw_compile 504ae33e311SJoseph Chen fit_gen_boot_itb 505ae33e311SJoseph Chen fit_gen_boot_img 506ae33e311SJoseph Chen fit_gen_uboot_itb 507ae33e311SJoseph Chen fit_gen_uboot_img 508ae33e311SJoseph Chen echo 509ae33e311SJoseph Chen 510ae33e311SJoseph Chen fit_msg_uboot 511ae33e311SJoseph Chen fit_msg_boot 512ae33e311SJoseph Chen fit_msg_loader 513ae33e311SJoseph Chen echo 514ae33e311SJoseph Chen} 515ae33e311SJoseph Chen 516ae33e311SJoseph Chenfit_process_args $* 517ae33e311SJoseph Chenif [ ! -z "${ARG_VALIDATE}" ]; then 518ae33e311SJoseph Chen validate_arg ${ARG_VALIDATE} 519d6babb00SJoseph Chenelif [ ! -z "${ARG_BOOT_IMG}" -o ! -z "${ARG_BOOT_IMG_DIR}" ]; then 5202d11b868SJoseph Chen fit_generate_uboot_boot 5212d11b868SJoseph Chenelse 5222d11b868SJoseph Chen fit_generate_uboot 523ae33e311SJoseph Chenfi 524ae33e311SJoseph Chen 525