1*1e9dc3b8SJoseph Chen#!/bin/bash 2*1e9dc3b8SJoseph Chen# 3*1e9dc3b8SJoseph Chen# Copyright (c) 2022 Rockchip Electronics Co., Ltd 4*1e9dc3b8SJoseph Chen# 5*1e9dc3b8SJoseph Chen# SPDX-License-Identifier: GPL-2.0 6*1e9dc3b8SJoseph Chen# 7*1e9dc3b8SJoseph Chenset -e 8*1e9dc3b8SJoseph Chen 9*1e9dc3b8SJoseph ChenFIT_DIR="fit" 10*1e9dc3b8SJoseph ChenIMG_UBOOT="uboot.img" 11*1e9dc3b8SJoseph ChenIMG_BOOT="boot.img" 12*1e9dc3b8SJoseph ChenIMG_RECOVERY="recovery.img" 13*1e9dc3b8SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb" 14*1e9dc3b8SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb" 15*1e9dc3b8SJoseph ChenITB_RECOVERY="${FIT_DIR}/recovery.itb" 16*1e9dc3b8SJoseph ChenSIG_BIN="data2sign.bin" 17*1e9dc3b8SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign" 18*1e9dc3b8SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign" 19*1e9dc3b8SJoseph ChenSIG_RECOVERY="${FIT_DIR}/recovery.data2sign" 20*1e9dc3b8SJoseph Chen# offs 21*1e9dc3b8SJoseph ChenOFFS_DATA="0x1000" 22*1e9dc3b8SJoseph Chen# file 23*1e9dc3b8SJoseph ChenCHIP_FILE="arch/arm/lib/.asm-offsets.s.cmd" 24*1e9dc3b8SJoseph Chen# placeholder address 25*1e9dc3b8SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00" 26*1e9dc3b8SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01" 27*1e9dc3b8SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02" 28*1e9dc3b8SJoseph Chen# tools 29*1e9dc3b8SJoseph ChenMKIMAGE="./tools/mkimage" 30*1e9dc3b8SJoseph ChenRK_SIGN_TOOL="../rkbin/tools/rk_sign_tool" 31*1e9dc3b8SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh" 32*1e9dc3b8SJoseph ChenCHECK_SIGN="./tools/fit_check_sign" 33*1e9dc3b8SJoseph Chen# key 34*1e9dc3b8SJoseph ChenKEY_DIR="keys/" 35*1e9dc3b8SJoseph ChenRSA_PRI_KEY="keys/dev.key" 36*1e9dc3b8SJoseph ChenRSA_PUB_KEY="keys/dev.pubkey" 37*1e9dc3b8SJoseph ChenRSA_CRT_KEY="keys/dev.crt" 38*1e9dc3b8SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev" 39*1e9dc3b8SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb" 40*1e9dc3b8SJoseph ChenUBOOT_DTB="u-boot.dtb" 41*1e9dc3b8SJoseph Chen# its 42*1e9dc3b8SJoseph ChenITS_UBOOT="u-boot.its" 43*1e9dc3b8SJoseph ChenITS_BOOT="boot.its" 44*1e9dc3b8SJoseph ChenITS_RECOVERY="recovery.its" 45*1e9dc3b8SJoseph ChenARG_VER_UBOOT="0" 46*1e9dc3b8SJoseph ChenARG_VER_BOOT="0" 47*1e9dc3b8SJoseph ChenARG_VER_RECOVERY="0" 48*1e9dc3b8SJoseph Chen 49*1e9dc3b8SJoseph Chenfunction help() 50*1e9dc3b8SJoseph Chen{ 51*1e9dc3b8SJoseph Chen echo 52*1e9dc3b8SJoseph Chen echo "usage:" 53*1e9dc3b8SJoseph Chen echo " $0 [args]" 54*1e9dc3b8SJoseph Chen echo 55*1e9dc3b8SJoseph Chen echo "args:" 56*1e9dc3b8SJoseph Chen echo " --rollback-index-recovery <decimal integer>" 57*1e9dc3b8SJoseph Chen echo " --rollback-index-boot <decimal integer>" 58*1e9dc3b8SJoseph Chen echo " --rollback-index-uboot <decimal integer>" 59*1e9dc3b8SJoseph Chen echo " --version-recovery <decimal integer>" 60*1e9dc3b8SJoseph Chen echo " --version-boot <decimal integer>" 61*1e9dc3b8SJoseph Chen echo " --version-uboot <decimal integer>" 62*1e9dc3b8SJoseph Chen echo " --boot_img <boot image>" 63*1e9dc3b8SJoseph Chen echo " --recovery_img <recovery image>" 64*1e9dc3b8SJoseph Chen echo " --args <arg>" 65*1e9dc3b8SJoseph Chen echo " --ini-loader <loader ini file>" 66*1e9dc3b8SJoseph Chen echo " --ini-trust <trust ini file>" 67*1e9dc3b8SJoseph Chen echo " --no-check" 68*1e9dc3b8SJoseph Chen echo " --spl-new" 69*1e9dc3b8SJoseph Chen echo 70*1e9dc3b8SJoseph Chen} 71*1e9dc3b8SJoseph Chen 72*1e9dc3b8SJoseph Chenfunction arg_check_decimal() 73*1e9dc3b8SJoseph Chen{ 74*1e9dc3b8SJoseph Chen if [ -z $1 ]; then 75*1e9dc3b8SJoseph Chen help 76*1e9dc3b8SJoseph Chen exit 1 77*1e9dc3b8SJoseph Chen fi 78*1e9dc3b8SJoseph Chen 79*1e9dc3b8SJoseph Chen decimal=`echo $1 |sed 's/[0-9]//g'` 80*1e9dc3b8SJoseph Chen if [ ! -z ${decimal} ]; then 81*1e9dc3b8SJoseph Chen echo "ERROR: $1 is not decimal integer" 82*1e9dc3b8SJoseph Chen help 83*1e9dc3b8SJoseph Chen exit 1 84*1e9dc3b8SJoseph Chen fi 85*1e9dc3b8SJoseph Chen} 86*1e9dc3b8SJoseph Chen 87*1e9dc3b8SJoseph Chenfunction check_its() 88*1e9dc3b8SJoseph Chen{ 89*1e9dc3b8SJoseph Chen cat $1 | while read line 90*1e9dc3b8SJoseph Chen do 91*1e9dc3b8SJoseph Chen file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '` 92*1e9dc3b8SJoseph Chen if [ ! -f ${file} ]; then 93*1e9dc3b8SJoseph Chen echo "ERROR: No ${file}" 94*1e9dc3b8SJoseph Chen exit 1 95*1e9dc3b8SJoseph Chen fi 96*1e9dc3b8SJoseph Chen done 97*1e9dc3b8SJoseph Chen} 98*1e9dc3b8SJoseph Chen 99*1e9dc3b8SJoseph Chenfunction check_rsa_keys() 100*1e9dc3b8SJoseph Chen{ 101*1e9dc3b8SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 102*1e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY} " 103*1e9dc3b8SJoseph Chen exit 1 104*1e9dc3b8SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 105*1e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY} " 106*1e9dc3b8SJoseph Chen exit 1 107*1e9dc3b8SJoseph Chen elif [ ! -f ${RSA_CRT_KEY} ]; then 108*1e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_CRT_KEY} " 109*1e9dc3b8SJoseph Chen exit 1 110*1e9dc3b8SJoseph Chen fi 111*1e9dc3b8SJoseph Chen} 112*1e9dc3b8SJoseph Chen 113*1e9dc3b8SJoseph Chenfunction validate_arg() 114*1e9dc3b8SJoseph Chen{ 115*1e9dc3b8SJoseph Chen case $1 in 116*1e9dc3b8SJoseph Chen --no-check|--spl-new|--burn-key-hash) 117*1e9dc3b8SJoseph Chen shift=1 118*1e9dc3b8SJoseph Chen ;; 119*1e9dc3b8SJoseph Chen --ini-trust|--ini-loader|--rollback-index-boot|--rollback-index-recovery|--rollback-index-uboot|--boot_img|--recovery_img|--version-uboot|--version-boot|--version-recovery|--chip) 120*1e9dc3b8SJoseph Chen shift=2 121*1e9dc3b8SJoseph Chen ;; 122*1e9dc3b8SJoseph Chen *) 123*1e9dc3b8SJoseph Chen shift=0 124*1e9dc3b8SJoseph Chen ;; 125*1e9dc3b8SJoseph Chen esac 126*1e9dc3b8SJoseph Chen echo ${shift} 127*1e9dc3b8SJoseph Chen} 128*1e9dc3b8SJoseph Chen 129*1e9dc3b8SJoseph Chenfunction fit_process_args() 130*1e9dc3b8SJoseph Chen{ 131*1e9dc3b8SJoseph Chen if [ $# -eq 0 ]; then 132*1e9dc3b8SJoseph Chen help 133*1e9dc3b8SJoseph Chen exit 0 134*1e9dc3b8SJoseph Chen fi 135*1e9dc3b8SJoseph Chen 136*1e9dc3b8SJoseph Chen while [ $# -gt 0 ]; do 137*1e9dc3b8SJoseph Chen case $1 in 138*1e9dc3b8SJoseph Chen --args) 139*1e9dc3b8SJoseph Chen ARG_VALIDATE=$2 140*1e9dc3b8SJoseph Chen shift 2 141*1e9dc3b8SJoseph Chen ;; 142*1e9dc3b8SJoseph Chen --boot_img) # boot.img 143*1e9dc3b8SJoseph Chen ARG_BOOT_IMG=$2 144*1e9dc3b8SJoseph Chen shift 2 145*1e9dc3b8SJoseph Chen ;; 146*1e9dc3b8SJoseph Chen --chip) 147*1e9dc3b8SJoseph Chen ARG_CHIP=$2 148*1e9dc3b8SJoseph Chen shift 2 149*1e9dc3b8SJoseph Chen ;; 150*1e9dc3b8SJoseph Chen --recovery_img) # recovery.img 151*1e9dc3b8SJoseph Chen ARG_RECOVERY_IMG=$2 152*1e9dc3b8SJoseph Chen shift 2 153*1e9dc3b8SJoseph Chen ;; 154*1e9dc3b8SJoseph Chen --boot_img_dir) # boot.img components directory 155*1e9dc3b8SJoseph Chen ARG_BOOT_IMG_DIR=$2 156*1e9dc3b8SJoseph Chen shift 2 157*1e9dc3b8SJoseph Chen ;; 158*1e9dc3b8SJoseph Chen --no-check) # No hostcc fit signature check 159*1e9dc3b8SJoseph Chen ARG_NO_CHECK="y" 160*1e9dc3b8SJoseph Chen shift 1 161*1e9dc3b8SJoseph Chen ;; 162*1e9dc3b8SJoseph Chen --ini-trust) # Assign trust ini file 163*1e9dc3b8SJoseph Chen ARG_INI_TRUST=$2 164*1e9dc3b8SJoseph Chen shift 2 165*1e9dc3b8SJoseph Chen ;; 166*1e9dc3b8SJoseph Chen --ini-loader) # Assign loader ini file 167*1e9dc3b8SJoseph Chen ARG_INI_LOADER=$2 168*1e9dc3b8SJoseph Chen shift 2 169*1e9dc3b8SJoseph Chen ;; 170*1e9dc3b8SJoseph Chen --spl-new) # Use current build u-boot-spl.bin to pack loader 171*1e9dc3b8SJoseph Chen ARG_SPL_NEW="y" 172*1e9dc3b8SJoseph Chen shift 1 173*1e9dc3b8SJoseph Chen ;; 174*1e9dc3b8SJoseph Chen --rollback-index-boot) 175*1e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_BOOT=$2 176*1e9dc3b8SJoseph Chen arg_check_decimal $2 177*1e9dc3b8SJoseph Chen shift 2 178*1e9dc3b8SJoseph Chen ;; 179*1e9dc3b8SJoseph Chen --rollback-index-recovery) 180*1e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_RECOVERY=$2 181*1e9dc3b8SJoseph Chen arg_check_decimal $2 182*1e9dc3b8SJoseph Chen shift 2 183*1e9dc3b8SJoseph Chen ;; 184*1e9dc3b8SJoseph Chen --rollback-index-uboot) 185*1e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_UBOOT=$2 186*1e9dc3b8SJoseph Chen arg_check_decimal $2 187*1e9dc3b8SJoseph Chen shift 2 188*1e9dc3b8SJoseph Chen ;; 189*1e9dc3b8SJoseph Chen --version-uboot) 190*1e9dc3b8SJoseph Chen ARG_VER_UBOOT=$2 191*1e9dc3b8SJoseph Chen arg_check_decimal $2 192*1e9dc3b8SJoseph Chen shift 2 193*1e9dc3b8SJoseph Chen ;; 194*1e9dc3b8SJoseph Chen --version-boot) 195*1e9dc3b8SJoseph Chen ARG_VER_BOOT=$2 196*1e9dc3b8SJoseph Chen arg_check_decimal $2 197*1e9dc3b8SJoseph Chen shift 2 198*1e9dc3b8SJoseph Chen ;; 199*1e9dc3b8SJoseph Chen --version-recovery) 200*1e9dc3b8SJoseph Chen ARG_VER_RECOVERY=$2 201*1e9dc3b8SJoseph Chen arg_check_decimal $2 202*1e9dc3b8SJoseph Chen shift 2 203*1e9dc3b8SJoseph Chen ;; 204*1e9dc3b8SJoseph Chen --burn-key-hash) 205*1e9dc3b8SJoseph Chen ARG_BURN_KEY_HASH="y" 206*1e9dc3b8SJoseph Chen shift 1 207*1e9dc3b8SJoseph Chen ;; 208*1e9dc3b8SJoseph Chen *) 209*1e9dc3b8SJoseph Chen help 210*1e9dc3b8SJoseph Chen exit 1 211*1e9dc3b8SJoseph Chen ;; 212*1e9dc3b8SJoseph Chen esac 213*1e9dc3b8SJoseph Chen done 214*1e9dc3b8SJoseph Chen 215*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 216*1e9dc3b8SJoseph Chen ARG_SIGN="y" 217*1e9dc3b8SJoseph Chen fi 218*1e9dc3b8SJoseph Chen} 219*1e9dc3b8SJoseph Chen 220*1e9dc3b8SJoseph Chenfunction fit_raw_compile() 221*1e9dc3b8SJoseph Chen{ 222*1e9dc3b8SJoseph Chen # Verified-boot: should rebuild code but don't need to repack images. 223*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" == "y" ]; then 224*1e9dc3b8SJoseph Chen ./make.sh --raw-compile 225*1e9dc3b8SJoseph Chen fi 226*1e9dc3b8SJoseph Chen rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} 227*1e9dc3b8SJoseph Chen} 228*1e9dc3b8SJoseph Chen 229*1e9dc3b8SJoseph Chenfunction fit_gen_uboot_itb() 230*1e9dc3b8SJoseph Chen{ 231*1e9dc3b8SJoseph Chen # generate u-boot.its file 232*1e9dc3b8SJoseph Chen ./make.sh itb ${ARG_INI_TRUST} 233*1e9dc3b8SJoseph Chen 234*1e9dc3b8SJoseph Chen # check existance of file in its 235*1e9dc3b8SJoseph Chen check_its ${ITS_UBOOT} 236*1e9dc3b8SJoseph Chen 237*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 238*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_DATA} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 239*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 240*1e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 241*1e9dc3b8SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 242*1e9dc3b8SJoseph Chen else 243*1e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 244*1e9dc3b8SJoseph Chen fi 245*1e9dc3b8SJoseph Chen else 246*1e9dc3b8SJoseph Chen check_rsa_keys 247*1e9dc3b8SJoseph Chen 248*1e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then 249*1e9dc3b8SJoseph Chen echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled" 250*1e9dc3b8SJoseph Chen exit 1 251*1e9dc3b8SJoseph Chen fi 252*1e9dc3b8SJoseph Chen 253*1e9dc3b8SJoseph Chen # rollback-index 254*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then 255*1e9dc3b8SJoseph Chen ARG_SPL_ROLLBACK_PROTECT="y" 256*1e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then 257*1e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-uboot <n>\"" 258*1e9dc3b8SJoseph Chen exit 1 259*1e9dc3b8SJoseph Chen fi 260*1e9dc3b8SJoseph Chen fi 261*1e9dc3b8SJoseph Chen 262*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 263*1e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 264*1e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT} 265*1e9dc3b8SJoseph Chen fi 266*1e9dc3b8SJoseph Chen 267*1e9dc3b8SJoseph Chen # Generally, boot.img is signed before uboot.img, so the ras key can be found 268*1e9dc3b8SJoseph Chen # in u-boot.dtb. If not found, let's insert rsa key anyway. 269*1e9dc3b8SJoseph Chen if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then 270*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 271*1e9dc3b8SJoseph Chen echo "## Adding RSA public key into ${UBOOT_DTB}" 272*1e9dc3b8SJoseph Chen fi 273*1e9dc3b8SJoseph Chen 274*1e9dc3b8SJoseph Chen # Pack 275*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 276*1e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_UBOOT} 277*1e9dc3b8SJoseph Chen 278*1e9dc3b8SJoseph Chen # burn-key-hash 279*1e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 280*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 281*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1 282*1e9dc3b8SJoseph Chen else 283*1e9dc3b8SJoseph Chen echo "ERROR: --burn-key-hash requires CONFIG_SPL_FIT_HW_CRYPTO=y" 284*1e9dc3b8SJoseph Chen exit 1 285*1e9dc3b8SJoseph Chen fi 286*1e9dc3b8SJoseph Chen fi 287*1e9dc3b8SJoseph Chen 288*1e9dc3b8SJoseph Chen # rollback-index read back check 289*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 290*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index` 291*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then 292*1e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}"; 293*1e9dc3b8SJoseph Chen exit 1 294*1e9dc3b8SJoseph Chen fi 295*1e9dc3b8SJoseph Chen fi 296*1e9dc3b8SJoseph Chen 297*1e9dc3b8SJoseph Chen # burn-key-hash read back check 298*1e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 299*1e9dc3b8SJoseph Chen if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then 300*1e9dc3b8SJoseph Chen echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}"; 301*1e9dc3b8SJoseph Chen exit 1 302*1e9dc3b8SJoseph Chen fi 303*1e9dc3b8SJoseph Chen fi 304*1e9dc3b8SJoseph Chen 305*1e9dc3b8SJoseph Chen # host check signature 306*1e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 307*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 308*1e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s 309*1e9dc3b8SJoseph Chen else 310*1e9dc3b8SJoseph Chen spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER} |tr -d '\r'` 311*1e9dc3b8SJoseph Chen offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "` 312*1e9dc3b8SJoseph Chen if [ -z ${offs} ]; then 313*1e9dc3b8SJoseph Chen echo "ERROR: invalid ${spl_file} , unable to find fdt blob" 314*1e9dc3b8SJoseph Chen fi 315*1e9dc3b8SJoseph Chen offs=`printf %d ${offs} ` # hex -> dec 316*1e9dc3b8SJoseph Chen dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1 317*1e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s 318*1e9dc3b8SJoseph Chen fi 319*1e9dc3b8SJoseph Chen fi 320*1e9dc3b8SJoseph Chen 321*1e9dc3b8SJoseph Chen # minimize u-boot-spl.dtb: clear as 0 but not remove property. 322*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 323*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 324*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then 325*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 326*1e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 327*1e9dc3b8SJoseph Chen else 328*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 329*1e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 330*1e9dc3b8SJoseph Chen fi 331*1e9dc3b8SJoseph Chen else 332*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 333*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 334*1e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 335*1e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 336*1e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 337*1e9dc3b8SJoseph Chen fi 338*1e9dc3b8SJoseph Chen 339*1e9dc3b8SJoseph Chen # repack spl 340*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 341*1e9dc3b8SJoseph Chen cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin 342*1e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then 343*1e9dc3b8SJoseph Chen cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin 344*1e9dc3b8SJoseph Chen fi 345*1e9dc3b8SJoseph Chen cat ${SPL_DTB} >> spl/u-boot-spl.bin 346*1e9dc3b8SJoseph Chen 347*1e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 348*1e9dc3b8SJoseph Chen echo "## pack loader with new: spl/u-boot-spl.bin" 349*1e9dc3b8SJoseph Chen else 350*1e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 351*1e9dc3b8SJoseph Chen fi 352*1e9dc3b8SJoseph Chen 353*1e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 354*1e9dc3b8SJoseph Chen echo "## ${SPL_DTB}: burn-key-hash=1" 355*1e9dc3b8SJoseph Chen fi 356*1e9dc3b8SJoseph Chen fi 357*1e9dc3b8SJoseph Chen 358*1e9dc3b8SJoseph Chen rm -f u-boot.itb u-boot.img u-boot-dtb.img 359*1e9dc3b8SJoseph Chen mv ${ITS_UBOOT} ${FIT_DIR} 360*1e9dc3b8SJoseph Chen} 361*1e9dc3b8SJoseph Chen 362*1e9dc3b8SJoseph Chenfunction fit_gen_boot_itb() 363*1e9dc3b8SJoseph Chen{ 364*1e9dc3b8SJoseph Chen if [ ! -z ${ARG_BOOT_IMG} ]; then 365*1e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack 366*1e9dc3b8SJoseph Chen ITS_BOOT="${FIT_DIR}/unpack/image.its" 367*1e9dc3b8SJoseph Chen else 368*1e9dc3b8SJoseph Chen compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-` 369*1e9dc3b8SJoseph Chen if [ -z "${compression}" ]; then 370*1e9dc3b8SJoseph Chen compression="none" 371*1e9dc3b8SJoseph Chen fi 372*1e9dc3b8SJoseph Chen ./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT} 373*1e9dc3b8SJoseph Chen check_its ${ITS_BOOT} 374*1e9dc3b8SJoseph Chen fi 375*1e9dc3b8SJoseph Chen 376*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 377*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_DATA} ${ITB_BOOT} -v ${ARG_VER_BOOT} 378*1e9dc3b8SJoseph Chen else 379*1e9dc3b8SJoseph Chen check_rsa_keys 380*1e9dc3b8SJoseph Chen 381*1e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 382*1e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 383*1e9dc3b8SJoseph Chen exit 1 384*1e9dc3b8SJoseph Chen fi 385*1e9dc3b8SJoseph Chen 386*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 387*1e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 388*1e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then 389*1e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-boot <n>\"" 390*1e9dc3b8SJoseph Chen exit 1 391*1e9dc3b8SJoseph Chen fi 392*1e9dc3b8SJoseph Chen fi 393*1e9dc3b8SJoseph Chen 394*1e9dc3b8SJoseph Chen # fixup 395*1e9dc3b8SJoseph Chen COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'` 396*1e9dc3b8SJoseph Chen FDT_ADDR_R=`awk /fdt_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 397*1e9dc3b8SJoseph Chen KERNEL_ADDR_R=`awk /kernel_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 398*1e9dc3b8SJoseph Chen RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 399*1e9dc3b8SJoseph Chen # sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_BOOT} 400*1e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_BOOT} 401*1e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT} 402*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 403*1e9dc3b8SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_BOOT} 404*1e9dc3b8SJoseph Chen fi 405*1e9dc3b8SJoseph Chen 406*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 407*1e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 408*1e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT} 409*1e9dc3b8SJoseph Chen fi 410*1e9dc3b8SJoseph Chen 411*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_BOOT} -v ${ARG_VER_BOOT} 412*1e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_BOOT} 413*1e9dc3b8SJoseph Chen 414*1e9dc3b8SJoseph Chen # rollback-index read back check 415*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 416*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index` 417*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then 418*1e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}"; 419*1e9dc3b8SJoseph Chen exit 1 420*1e9dc3b8SJoseph Chen fi 421*1e9dc3b8SJoseph Chen fi 422*1e9dc3b8SJoseph Chen 423*1e9dc3b8SJoseph Chen # host check signature 424*1e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 425*1e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB} 426*1e9dc3b8SJoseph Chen fi 427*1e9dc3b8SJoseph Chen 428*1e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 429*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 430*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 431*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 432*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 433*1e9dc3b8SJoseph Chen else 434*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 435*1e9dc3b8SJoseph Chen fi 436*1e9dc3b8SJoseph Chen else 437*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 438*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 439*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 440*1e9dc3b8SJoseph Chen fi 441*1e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 442*1e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 443*1e9dc3b8SJoseph Chen fi 444*1e9dc3b8SJoseph Chen 445*1e9dc3b8SJoseph Chen mv ${ITS_BOOT} ${FIT_DIR} 446*1e9dc3b8SJoseph Chen} 447*1e9dc3b8SJoseph Chen 448*1e9dc3b8SJoseph Chenfunction fit_gen_recovery_itb() 449*1e9dc3b8SJoseph Chen{ 450*1e9dc3b8SJoseph Chen if [ ! -z ${ARG_RECOVERY_IMG} ]; then 451*1e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_RECOVERY_IMG} -o ${FIT_DIR}/unpack 452*1e9dc3b8SJoseph Chen ITS_RECOVERY="${FIT_DIR}/unpack/image.its" 453*1e9dc3b8SJoseph Chen else 454*1e9dc3b8SJoseph Chen echo "ERROR: No recovery.img" 455*1e9dc3b8SJoseph Chen exit 1 456*1e9dc3b8SJoseph Chen fi 457*1e9dc3b8SJoseph Chen 458*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 459*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -E -p ${OFFS_DATA} ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 460*1e9dc3b8SJoseph Chen else 461*1e9dc3b8SJoseph Chen check_rsa_keys 462*1e9dc3b8SJoseph Chen 463*1e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 464*1e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 465*1e9dc3b8SJoseph Chen exit 1 466*1e9dc3b8SJoseph Chen fi 467*1e9dc3b8SJoseph Chen 468*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 469*1e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 470*1e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_RECOVERY} ]; then 471*1e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-recovery <n>\"" 472*1e9dc3b8SJoseph Chen exit 1 473*1e9dc3b8SJoseph Chen fi 474*1e9dc3b8SJoseph Chen fi 475*1e9dc3b8SJoseph Chen 476*1e9dc3b8SJoseph Chen # fixup 477*1e9dc3b8SJoseph Chen COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'` 478*1e9dc3b8SJoseph Chen FDT_ADDR_R=`awk /fdt_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 479*1e9dc3b8SJoseph Chen KERNEL_ADDR_R=`awk /kernel_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 480*1e9dc3b8SJoseph Chen RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 481*1e9dc3b8SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_RECOVERY} 482*1e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_RECOVERY} 483*1e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_RECOVERY} 484*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 485*1e9dc3b8SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_RECOVERY} 486*1e9dc3b8SJoseph Chen fi 487*1e9dc3b8SJoseph Chen 488*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 489*1e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_RECOVERY} | awk -F '=' '{ printf $2 }' | tr -d ' '` 490*1e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_RECOVERY}>;/g" ${ITS_RECOVERY} 491*1e9dc3b8SJoseph Chen fi 492*1e9dc3b8SJoseph Chen 493*1e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 494*1e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_RECOVERY} 495*1e9dc3b8SJoseph Chen 496*1e9dc3b8SJoseph Chen # rollback-index read back check 497*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 498*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} /configurations/conf rollback-index` 499*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_RECOVERY}" ]; then 500*1e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_RECOVERY}"; 501*1e9dc3b8SJoseph Chen exit 1 502*1e9dc3b8SJoseph Chen fi 503*1e9dc3b8SJoseph Chen fi 504*1e9dc3b8SJoseph Chen 505*1e9dc3b8SJoseph Chen # host check signature 506*1e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 507*1e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_RECOVERY} -k ${UBOOT_DTB} 508*1e9dc3b8SJoseph Chen fi 509*1e9dc3b8SJoseph Chen 510*1e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 511*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 512*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 513*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 514*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 515*1e9dc3b8SJoseph Chen else 516*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 517*1e9dc3b8SJoseph Chen fi 518*1e9dc3b8SJoseph Chen else 519*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 520*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 521*1e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 522*1e9dc3b8SJoseph Chen fi 523*1e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 524*1e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 525*1e9dc3b8SJoseph Chen fi 526*1e9dc3b8SJoseph Chen 527*1e9dc3b8SJoseph Chen mv ${ITS_RECOVERY} ${FIT_DIR} 528*1e9dc3b8SJoseph Chen} 529*1e9dc3b8SJoseph Chen 530*1e9dc3b8SJoseph Chenfunction fit_gen_uboot_img() 531*1e9dc3b8SJoseph Chen{ 532*1e9dc3b8SJoseph Chen ITB=$1 533*1e9dc3b8SJoseph Chen 534*1e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 535*1e9dc3b8SJoseph Chen ITB=${ITB_UBOOT} 536*1e9dc3b8SJoseph Chen fi 537*1e9dc3b8SJoseph Chen 538*1e9dc3b8SJoseph Chen ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'` 539*1e9dc3b8SJoseph Chen ITB_MAX_KB=`sed -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'` 540*1e9dc3b8SJoseph Chen ITB_MAX_BS=$((ITB_MAX_KB*1024)) 541*1e9dc3b8SJoseph Chen ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'` 542*1e9dc3b8SJoseph Chen 543*1e9dc3b8SJoseph Chen if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then 544*1e9dc3b8SJoseph Chen echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes" 545*1e9dc3b8SJoseph Chen exit 1 546*1e9dc3b8SJoseph Chen fi 547*1e9dc3b8SJoseph Chen 548*1e9dc3b8SJoseph Chen rm -f ${IMG_UBOOT} 549*1e9dc3b8SJoseph Chen for ((i = 0; i < ${ITB_MAX_NUM}; i++)); 550*1e9dc3b8SJoseph Chen do 551*1e9dc3b8SJoseph Chen cat ${ITB} >> ${IMG_UBOOT} 552*1e9dc3b8SJoseph Chen truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT} 553*1e9dc3b8SJoseph Chen done 554*1e9dc3b8SJoseph Chen} 555*1e9dc3b8SJoseph Chen 556*1e9dc3b8SJoseph Chenfunction fit_gen_boot_img() 557*1e9dc3b8SJoseph Chen{ 558*1e9dc3b8SJoseph Chen ITB=$1 559*1e9dc3b8SJoseph Chen 560*1e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 561*1e9dc3b8SJoseph Chen ITB=${ITB_BOOT} 562*1e9dc3b8SJoseph Chen fi 563*1e9dc3b8SJoseph Chen 564*1e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_BOOT}" ]; then 565*1e9dc3b8SJoseph Chen cp ${ITB} ${IMG_BOOT} -f 566*1e9dc3b8SJoseph Chen fi 567*1e9dc3b8SJoseph Chen} 568*1e9dc3b8SJoseph Chen 569*1e9dc3b8SJoseph Chenfunction fit_gen_recovery_img() 570*1e9dc3b8SJoseph Chen{ 571*1e9dc3b8SJoseph Chen ITB=$1 572*1e9dc3b8SJoseph Chen 573*1e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 574*1e9dc3b8SJoseph Chen ITB=${ITB_RECOVERY} 575*1e9dc3b8SJoseph Chen fi 576*1e9dc3b8SJoseph Chen 577*1e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_RECOVERY}" ]; then 578*1e9dc3b8SJoseph Chen cp ${ITB} ${IMG_RECOVERY} -f 579*1e9dc3b8SJoseph Chen fi 580*1e9dc3b8SJoseph Chen} 581*1e9dc3b8SJoseph Chen 582*1e9dc3b8SJoseph Chenfunction fit_gen_loader() 583*1e9dc3b8SJoseph Chen{ 584*1e9dc3b8SJoseph Chen if grep -Eq '^CONFIG_FIT_SIGNATURE=y' .config ; then 585*1e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} cc --chip ${ARG_CHIP: 2: 6} 586*1e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} lk --key ${RSA_PRI_KEY} --pubkey ${RSA_PUB_KEY} 587*1e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 588*1e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *loader*.bin 589*1e9dc3b8SJoseph Chen fi 590*1e9dc3b8SJoseph Chen if ls *download*.bin >/dev/null 2>&1 ; then 591*1e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *download*.bin 592*1e9dc3b8SJoseph Chen fi 593*1e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 594*1e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sb --idb *idblock*.img 595*1e9dc3b8SJoseph Chen fi 596*1e9dc3b8SJoseph Chen fi 597*1e9dc3b8SJoseph Chen} 598*1e9dc3b8SJoseph Chen 599*1e9dc3b8SJoseph Chenfunction fit_msg_uboot() 600*1e9dc3b8SJoseph Chen{ 601*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 602*1e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 603*1e9dc3b8SJoseph Chen else 604*1e9dc3b8SJoseph Chen MSG_SIGN="signed" 605*1e9dc3b8SJoseph Chen fi 606*1e9dc3b8SJoseph Chen 607*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} / version` 608*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 609*1e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 610*1e9dc3b8SJoseph Chen fi 611*1e9dc3b8SJoseph Chen 612*1e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 613*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready" 614*1e9dc3b8SJoseph Chen else 615*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready" 616*1e9dc3b8SJoseph Chen fi 617*1e9dc3b8SJoseph Chen} 618*1e9dc3b8SJoseph Chen 619*1e9dc3b8SJoseph Chenfunction fit_msg_boot() 620*1e9dc3b8SJoseph Chen{ 621*1e9dc3b8SJoseph Chen if [ -z "${ARG_BOOT_IMG}" ]; then 622*1e9dc3b8SJoseph Chen return; 623*1e9dc3b8SJoseph Chen fi 624*1e9dc3b8SJoseph Chen 625*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 626*1e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 627*1e9dc3b8SJoseph Chen else 628*1e9dc3b8SJoseph Chen MSG_SIGN="signed" 629*1e9dc3b8SJoseph Chen fi 630*1e9dc3b8SJoseph Chen 631*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} / version` 632*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 633*1e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 634*1e9dc3b8SJoseph Chen fi 635*1e9dc3b8SJoseph Chen 636*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 637*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready" 638*1e9dc3b8SJoseph Chen else 639*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready" 640*1e9dc3b8SJoseph Chen fi 641*1e9dc3b8SJoseph Chen} 642*1e9dc3b8SJoseph Chen 643*1e9dc3b8SJoseph Chenfunction fit_msg_recovery() 644*1e9dc3b8SJoseph Chen{ 645*1e9dc3b8SJoseph Chen if [ -z "${ARG_RECOVERY_IMG}" ]; then 646*1e9dc3b8SJoseph Chen return; 647*1e9dc3b8SJoseph Chen fi 648*1e9dc3b8SJoseph Chen 649*1e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 650*1e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 651*1e9dc3b8SJoseph Chen else 652*1e9dc3b8SJoseph Chen MSG_SIGN="signed" 653*1e9dc3b8SJoseph Chen fi 654*1e9dc3b8SJoseph Chen 655*1e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} / version` 656*1e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 657*1e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 658*1e9dc3b8SJoseph Chen fi 659*1e9dc3b8SJoseph Chen 660*1e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 661*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_RECOVERY}): ${IMG_RECOVERY} is ready" 662*1e9dc3b8SJoseph Chen else 663*1e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_RECOVERY} (FIT with kernel, fdt, resource...) is ready" 664*1e9dc3b8SJoseph Chen fi 665*1e9dc3b8SJoseph Chen} 666*1e9dc3b8SJoseph Chen 667*1e9dc3b8SJoseph Chenfunction fit_msg_loader() 668*1e9dc3b8SJoseph Chen{ 669*1e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 670*1e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 671*1e9dc3b8SJoseph Chen fi 672*1e9dc3b8SJoseph Chen 673*1e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 674*1e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 675*1e9dc3b8SJoseph Chen fi 676*1e9dc3b8SJoseph Chen 677*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 678*1e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with spl, ddr...) is ready" 679*1e9dc3b8SJoseph Chen else 680*1e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with spl, ddr...) is ready" 681*1e9dc3b8SJoseph Chen fi 682*1e9dc3b8SJoseph Chen} 683*1e9dc3b8SJoseph Chen 684*1e9dc3b8SJoseph Chenfunction fit_msg_u_boot_loader() 685*1e9dc3b8SJoseph Chen{ 686*1e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 687*1e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 688*1e9dc3b8SJoseph Chen fi 689*1e9dc3b8SJoseph Chen 690*1e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 691*1e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 692*1e9dc3b8SJoseph Chen fi 693*1e9dc3b8SJoseph Chen 694*1e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 695*1e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with u-boot, ddr...) is ready" 696*1e9dc3b8SJoseph Chen else 697*1e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with u-boot, ddr...) is ready" 698*1e9dc3b8SJoseph Chen fi 699*1e9dc3b8SJoseph Chen}