xref: /rk3399_rockchip-uboot/scripts/fit-core.sh (revision 60bee396ec03ff5bfce10a0f0efd85e5a5783257)
11e9dc3b8SJoseph Chen#!/bin/bash
21e9dc3b8SJoseph Chen#
31e9dc3b8SJoseph Chen# Copyright (c) 2022 Rockchip Electronics Co., Ltd
41e9dc3b8SJoseph Chen#
51e9dc3b8SJoseph Chen# SPDX-License-Identifier: GPL-2.0
61e9dc3b8SJoseph Chen#
71e9dc3b8SJoseph Chenset -e
81e9dc3b8SJoseph Chen
91e9dc3b8SJoseph ChenFIT_DIR="fit"
101e9dc3b8SJoseph ChenIMG_UBOOT="uboot.img"
111e9dc3b8SJoseph ChenIMG_BOOT="boot.img"
121e9dc3b8SJoseph ChenIMG_RECOVERY="recovery.img"
131e9dc3b8SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb"
141e9dc3b8SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb"
151e9dc3b8SJoseph ChenITB_RECOVERY="${FIT_DIR}/recovery.itb"
161e9dc3b8SJoseph ChenSIG_BIN="data2sign.bin"
171e9dc3b8SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign"
181e9dc3b8SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign"
191e9dc3b8SJoseph ChenSIG_RECOVERY="${FIT_DIR}/recovery.data2sign"
20554ddf99SXuhui LinSIG_CFG_DIR="${FIT_DIR}/fit_signcfg"
21554ddf99SXuhui LinSIG_CONFIG="${SIG_CFG_DIR}/sign.readonly_config"
22554ddf99SXuhui LinMINIALL_INI="${SIG_CFG_DIR}/MINIALL.ini"
231e9dc3b8SJoseph Chen# offs
240644ce13SXuhui LinOFFS_DATA="0x1200"
251e9dc3b8SJoseph Chen# placeholder address
261e9dc3b8SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00"
271e9dc3b8SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01"
281e9dc3b8SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02"
291e9dc3b8SJoseph Chen# tools
301e9dc3b8SJoseph ChenMKIMAGE="./tools/mkimage"
311e9dc3b8SJoseph ChenRK_SIGN_TOOL="../rkbin/tools/rk_sign_tool"
321e9dc3b8SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh"
331e9dc3b8SJoseph ChenCHECK_SIGN="./tools/fit_check_sign"
341e9dc3b8SJoseph Chen# key
351e9dc3b8SJoseph ChenKEY_DIR="keys/"
361e9dc3b8SJoseph ChenRSA_PRI_KEY="keys/dev.key"
371e9dc3b8SJoseph ChenRSA_PUB_KEY="keys/dev.pubkey"
381e9dc3b8SJoseph ChenRSA_CRT_KEY="keys/dev.crt"
39*60bee396SXuhui LinLEGACY_RSA_PRI_KEY="legacy_keys/dev.key"
40*60bee396SXuhui LinLEGACY_RSA_PUB_KEY="legacy_keys/dev.pubkey"
41*60bee396SXuhui LinLEGACY_RSA_CRT_KEY="legacy_keys/dev.crt"
421e9dc3b8SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev"
431e9dc3b8SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb"
441e9dc3b8SJoseph ChenUBOOT_DTB="u-boot.dtb"
451e9dc3b8SJoseph Chen# its
461e9dc3b8SJoseph ChenITS_UBOOT="u-boot.its"
471e9dc3b8SJoseph ChenITS_BOOT="boot.its"
481e9dc3b8SJoseph ChenITS_RECOVERY="recovery.its"
491e9dc3b8SJoseph ChenARG_VER_UBOOT="0"
501e9dc3b8SJoseph ChenARG_VER_BOOT="0"
511e9dc3b8SJoseph ChenARG_VER_RECOVERY="0"
521e9dc3b8SJoseph Chen
531e9dc3b8SJoseph Chenfunction help()
541e9dc3b8SJoseph Chen{
551e9dc3b8SJoseph Chen	echo
561e9dc3b8SJoseph Chen	echo "usage:"
571e9dc3b8SJoseph Chen	echo "    $0 [args]"
581e9dc3b8SJoseph Chen	echo
591e9dc3b8SJoseph Chen	echo "args:"
601e9dc3b8SJoseph Chen	echo "    --rollback-index-recovery  <decimal integer>"
611e9dc3b8SJoseph Chen	echo "    --rollback-index-boot      <decimal integer>"
621e9dc3b8SJoseph Chen	echo "    --rollback-index-uboot     <decimal integer>"
631e9dc3b8SJoseph Chen	echo "    --version-recovery         <decimal integer>"
641e9dc3b8SJoseph Chen	echo "    --version-boot             <decimal integer>"
651e9dc3b8SJoseph Chen	echo "    --version-uboot            <decimal integer>"
661e9dc3b8SJoseph Chen	echo "    --boot_img                 <boot image>"
671e9dc3b8SJoseph Chen	echo "    --recovery_img             <recovery image>"
681e9dc3b8SJoseph Chen	echo "    --args                     <arg>"
691e9dc3b8SJoseph Chen	echo "    --ini-loader               <loader ini file>"
701e9dc3b8SJoseph Chen	echo "    --ini-trust                <trust ini file>"
711e9dc3b8SJoseph Chen	echo "    --no-check"
72cb458c93SXuhui Lin	echo "    --no-sign"
731e9dc3b8SJoseph Chen	echo "    --spl-new"
741e9dc3b8SJoseph Chen	echo
751e9dc3b8SJoseph Chen}
761e9dc3b8SJoseph Chen
771e9dc3b8SJoseph Chenfunction arg_check_decimal()
781e9dc3b8SJoseph Chen{
791e9dc3b8SJoseph Chen	if [ -z $1 ]; then
801e9dc3b8SJoseph Chen		help
811e9dc3b8SJoseph Chen		exit 1
821e9dc3b8SJoseph Chen	fi
831e9dc3b8SJoseph Chen
841e9dc3b8SJoseph Chen	decimal=`echo $1 |sed 's/[0-9]//g'`
851e9dc3b8SJoseph Chen	if [ ! -z ${decimal} ]; then
861e9dc3b8SJoseph Chen		echo "ERROR: $1 is not decimal integer"
871e9dc3b8SJoseph Chen		help
881e9dc3b8SJoseph Chen		exit 1
891e9dc3b8SJoseph Chen	fi
901e9dc3b8SJoseph Chen}
911e9dc3b8SJoseph Chen
921e9dc3b8SJoseph Chenfunction check_its()
931e9dc3b8SJoseph Chen{
941e9dc3b8SJoseph Chen	cat $1 | while read line
951e9dc3b8SJoseph Chen	do
961e9dc3b8SJoseph Chen		file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '`
971e9dc3b8SJoseph Chen		if [ ! -f ${file} ]; then
981e9dc3b8SJoseph Chen			echo "ERROR: No ${file}"
991e9dc3b8SJoseph Chen			exit 1
1001e9dc3b8SJoseph Chen		fi
1011e9dc3b8SJoseph Chen	done
1021e9dc3b8SJoseph Chen}
1031e9dc3b8SJoseph Chen
104ed912199SXuhui Linfunction check_rsa_algo()
105ed912199SXuhui Lin{
106ed912199SXuhui Lin	if grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' .config ; then
107ed912199SXuhui Lin		rsa_algo="rsa4096"
108ed912199SXuhui Lin	else
109ed912199SXuhui Lin		rsa_algo="rsa2048"
110ed912199SXuhui Lin	fi
111ed912199SXuhui Lin	if ! grep -qr ${rsa_algo} $1 ; then
112ed912199SXuhui Lin		echo "ERROR: Wrong rsa_algo in its file. It should be ${rsa_algo}."
113ed912199SXuhui Lin		exit 1
114ed912199SXuhui Lin	fi
115ed912199SXuhui Lin}
116ed912199SXuhui Lin
1171e9dc3b8SJoseph Chenfunction check_rsa_keys()
1181e9dc3b8SJoseph Chen{
1191e9dc3b8SJoseph Chen	if [ ! -f ${RSA_PRI_KEY} ]; then
1201e9dc3b8SJoseph Chen		echo "ERROR: No ${RSA_PRI_KEY} "
1211e9dc3b8SJoseph Chen		exit 1
1221e9dc3b8SJoseph Chen	elif [ ! -f ${RSA_PUB_KEY} ]; then
1231e9dc3b8SJoseph Chen		echo "ERROR: No ${RSA_PUB_KEY} "
1241e9dc3b8SJoseph Chen		exit 1
1251e9dc3b8SJoseph Chen	elif [ ! -f ${RSA_CRT_KEY} ]; then
1261e9dc3b8SJoseph Chen		echo "ERROR: No ${RSA_CRT_KEY} "
1271e9dc3b8SJoseph Chen		exit 1
1281e9dc3b8SJoseph Chen	fi
1291e9dc3b8SJoseph Chen}
1301e9dc3b8SJoseph Chen
1311e9dc3b8SJoseph Chenfunction validate_arg()
1321e9dc3b8SJoseph Chen{
1331e9dc3b8SJoseph Chen	case $1 in
134cb458c93SXuhui Lin		--no-check|--no-sign|--spl-new|--burn-key-hash)
1351e9dc3b8SJoseph Chen			shift=1
1361e9dc3b8SJoseph Chen			;;
1371e9dc3b8SJoseph 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)
1381e9dc3b8SJoseph Chen			shift=2
1391e9dc3b8SJoseph Chen			;;
1401e9dc3b8SJoseph Chen		*)
1411e9dc3b8SJoseph Chen			shift=0
1421e9dc3b8SJoseph Chen			;;
1431e9dc3b8SJoseph Chen	esac
1441e9dc3b8SJoseph Chen	echo ${shift}
1451e9dc3b8SJoseph Chen}
1461e9dc3b8SJoseph Chen
1471e9dc3b8SJoseph Chenfunction fit_process_args()
1481e9dc3b8SJoseph Chen{
1491e9dc3b8SJoseph Chen	if [ $# -eq 0 ]; then
1501e9dc3b8SJoseph Chen		help
1511e9dc3b8SJoseph Chen		exit 0
1521e9dc3b8SJoseph Chen	fi
1531e9dc3b8SJoseph Chen
154cb458c93SXuhui Lin	if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
155cb458c93SXuhui Lin		ARG_SIGN="y"
156cb458c93SXuhui Lin	fi
157cb458c93SXuhui Lin
1581e9dc3b8SJoseph Chen	while [ $# -gt 0 ]; do
1591e9dc3b8SJoseph Chen		case $1 in
1601e9dc3b8SJoseph Chen			--args)
1611e9dc3b8SJoseph Chen				ARG_VALIDATE=$2
1621e9dc3b8SJoseph Chen				shift 2
1631e9dc3b8SJoseph Chen				;;
1641e9dc3b8SJoseph Chen			--boot_img)     # boot.img
1651e9dc3b8SJoseph Chen				ARG_BOOT_IMG=$2
1661e9dc3b8SJoseph Chen				shift 2
1671e9dc3b8SJoseph Chen				;;
1681e9dc3b8SJoseph Chen			--chip)
1691e9dc3b8SJoseph Chen				ARG_CHIP=$2
1701e9dc3b8SJoseph Chen				shift 2
1711e9dc3b8SJoseph Chen				;;
1721e9dc3b8SJoseph Chen			--recovery_img) # recovery.img
1731e9dc3b8SJoseph Chen				ARG_RECOVERY_IMG=$2
1741e9dc3b8SJoseph Chen				shift 2
1751e9dc3b8SJoseph Chen				;;
1761e9dc3b8SJoseph Chen			--boot_img_dir) # boot.img components directory
1771e9dc3b8SJoseph Chen				ARG_BOOT_IMG_DIR=$2
1781e9dc3b8SJoseph Chen				shift 2
1791e9dc3b8SJoseph Chen				;;
1801e9dc3b8SJoseph Chen			--no-check)     # No hostcc fit signature check
1811e9dc3b8SJoseph Chen				ARG_NO_CHECK="y"
1821e9dc3b8SJoseph Chen				shift 1
1831e9dc3b8SJoseph Chen				;;
184cb458c93SXuhui Lin			--no-sign)
185cb458c93SXuhui Lin				ARG_NO_SIGN="y"
186cb458c93SXuhui Lin				ARG_SIGN="n"
187cb458c93SXuhui Lin				shift 1
188cb458c93SXuhui Lin				;;
1891e9dc3b8SJoseph Chen			--ini-trust)    # Assign trust ini file
1901e9dc3b8SJoseph Chen				ARG_INI_TRUST=$2
1911e9dc3b8SJoseph Chen				shift 2
1921e9dc3b8SJoseph Chen				;;
1931e9dc3b8SJoseph Chen			--ini-loader)   # Assign loader ini file
1941e9dc3b8SJoseph Chen				ARG_INI_LOADER=$2
1951e9dc3b8SJoseph Chen				shift 2
1961e9dc3b8SJoseph Chen				;;
1971e9dc3b8SJoseph Chen			--spl-new)      # Use current build u-boot-spl.bin to pack loader
1981e9dc3b8SJoseph Chen				ARG_SPL_NEW="y"
19935e329a4SXuhui Lin				# Whether aarch32 or not, spl only support 64 bits version.
20035e329a4SXuhui Lin				if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then
20135e329a4SXuhui Lin					echo "ERROR: SPL doesn't support 32-bit. Please build 64-bit defconfig and update u-boot-spl.bin to rkbin first."
20235e329a4SXuhui Lin					exit 1
20335e329a4SXuhui Lin				fi
2041e9dc3b8SJoseph Chen				shift 1
2051e9dc3b8SJoseph Chen				;;
2061e9dc3b8SJoseph Chen			--rollback-index-boot)
2071e9dc3b8SJoseph Chen				ARG_ROLLBACK_IDX_BOOT=$2
2081e9dc3b8SJoseph Chen				arg_check_decimal $2
2091e9dc3b8SJoseph Chen				shift 2
2101e9dc3b8SJoseph Chen				;;
2111e9dc3b8SJoseph Chen			--rollback-index-recovery)
2121e9dc3b8SJoseph Chen				ARG_ROLLBACK_IDX_RECOVERY=$2
2131e9dc3b8SJoseph Chen				arg_check_decimal $2
2141e9dc3b8SJoseph Chen				shift 2
2151e9dc3b8SJoseph Chen				;;
2161e9dc3b8SJoseph Chen			--rollback-index-uboot)
2171e9dc3b8SJoseph Chen				ARG_ROLLBACK_IDX_UBOOT=$2
2181e9dc3b8SJoseph Chen				arg_check_decimal $2
2191e9dc3b8SJoseph Chen				shift 2
2201e9dc3b8SJoseph Chen				;;
2211e9dc3b8SJoseph Chen			--version-uboot)
2221e9dc3b8SJoseph Chen				ARG_VER_UBOOT=$2
2231e9dc3b8SJoseph Chen				arg_check_decimal $2
2241e9dc3b8SJoseph Chen				shift 2
2251e9dc3b8SJoseph Chen				;;
2261e9dc3b8SJoseph Chen			--version-boot)
2271e9dc3b8SJoseph Chen				ARG_VER_BOOT=$2
2281e9dc3b8SJoseph Chen				arg_check_decimal $2
2291e9dc3b8SJoseph Chen				shift 2
2301e9dc3b8SJoseph Chen				;;
2311e9dc3b8SJoseph Chen			--version-recovery)
2321e9dc3b8SJoseph Chen				ARG_VER_RECOVERY=$2
2331e9dc3b8SJoseph Chen				arg_check_decimal $2
2341e9dc3b8SJoseph Chen				shift 2
2351e9dc3b8SJoseph Chen				;;
2361e9dc3b8SJoseph Chen			--burn-key-hash)
2371e9dc3b8SJoseph Chen				ARG_BURN_KEY_HASH="y"
2381e9dc3b8SJoseph Chen				shift 1
2391e9dc3b8SJoseph Chen				;;
2406af0d055SJoseph Chen			--spl-fwver)
2416af0d055SJoseph Chen				ARG_FIT_FWVER="${ARG_FIT_FWVER} --spl-fwver $2"
2426af0d055SJoseph Chen				shift 2
2436af0d055SJoseph Chen				;;
2446af0d055SJoseph Chen			--fwver)
2456af0d055SJoseph Chen				ARG_FIT_FWVER="${ARG_FIT_FWVER} --fwver $2"
2466af0d055SJoseph Chen				shift 2
2476af0d055SJoseph Chen				;;
2481e9dc3b8SJoseph Chen			*)
2491e9dc3b8SJoseph Chen				help
2501e9dc3b8SJoseph Chen				exit 1
2511e9dc3b8SJoseph Chen				;;
2521e9dc3b8SJoseph Chen		esac
2531e9dc3b8SJoseph Chen	done
2541e9dc3b8SJoseph Chen}
2551e9dc3b8SJoseph Chen
2561e9dc3b8SJoseph Chenfunction fit_raw_compile()
2571e9dc3b8SJoseph Chen{
2581e9dc3b8SJoseph Chen	# Verified-boot: should rebuild code but don't need to repack images.
2591e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" == "y" ]; then
2606af0d055SJoseph Chen		./make.sh --raw-compile ${ARG_FIT_FWVER}
2611e9dc3b8SJoseph Chen	fi
262554ddf99SXuhui Lin	rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} && mkdir -p ${SIG_CFG_DIR}
2631e9dc3b8SJoseph Chen}
2641e9dc3b8SJoseph Chen
2651e9dc3b8SJoseph Chenfunction fit_gen_uboot_itb()
2661e9dc3b8SJoseph Chen{
2671e9dc3b8SJoseph Chen	# generate u-boot.its file
2681e9dc3b8SJoseph Chen	./make.sh itb ${ARG_INI_TRUST}
2691e9dc3b8SJoseph Chen
2701e9dc3b8SJoseph Chen	# check existance of file in its
2711e9dc3b8SJoseph Chen	check_its ${ITS_UBOOT}
2721e9dc3b8SJoseph Chen
2731e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
2741e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_DATA} ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
2751e9dc3b8SJoseph Chen		if [ "${ARG_SPL_NEW}" == "y" ]; then
2761e9dc3b8SJoseph Chen			./make.sh --spl ${ARG_INI_LOADER}
2771e9dc3b8SJoseph Chen			echo "pack loader with new: spl/u-boot-spl.bin"
2781e9dc3b8SJoseph Chen		else
2791e9dc3b8SJoseph Chen			./make.sh loader ${ARG_INI_LOADER}
2801e9dc3b8SJoseph Chen		fi
2811e9dc3b8SJoseph Chen	else
2821e9dc3b8SJoseph Chen		check_rsa_keys
2831e9dc3b8SJoseph Chen
2841e9dc3b8SJoseph Chen		if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then
2851e9dc3b8SJoseph Chen			echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled"
2861e9dc3b8SJoseph Chen			exit 1
2871e9dc3b8SJoseph Chen		fi
2881e9dc3b8SJoseph Chen
2891e9dc3b8SJoseph Chen		# rollback-index
2901e9dc3b8SJoseph Chen		if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then
2911e9dc3b8SJoseph Chen			ARG_SPL_ROLLBACK_PROTECT="y"
2921e9dc3b8SJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then
2931e9dc3b8SJoseph Chen				echo "ERROR: No arg \"--rollback-index-uboot <n>\""
2941e9dc3b8SJoseph Chen				exit 1
2951e9dc3b8SJoseph Chen			fi
2961e9dc3b8SJoseph Chen		fi
2971e9dc3b8SJoseph Chen
2981e9dc3b8SJoseph Chen		if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
2991e9dc3b8SJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '`
3001e9dc3b8SJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT}
3011e9dc3b8SJoseph Chen		fi
3021e9dc3b8SJoseph Chen
3031e9dc3b8SJoseph Chen		# Generally, boot.img is signed before uboot.img, so the ras key can be found
3041e9dc3b8SJoseph Chen		# in u-boot.dtb. If not found, let's insert rsa key anyway.
3051e9dc3b8SJoseph Chen		if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then
3061e9dc3b8SJoseph Chen			${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
3071e9dc3b8SJoseph Chen			echo "## Adding RSA public key into ${UBOOT_DTB}"
3081e9dc3b8SJoseph Chen		fi
3091e9dc3b8SJoseph Chen
3101e9dc3b8SJoseph Chen		# Pack
3111e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
3121e9dc3b8SJoseph Chen		mv ${SIG_BIN} ${SIG_UBOOT}
3131e9dc3b8SJoseph Chen
3141e9dc3b8SJoseph Chen		# burn-key-hash
3151e9dc3b8SJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
3161e9dc3b8SJoseph Chen			if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then
3171e9dc3b8SJoseph Chen				fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1
3181e9dc3b8SJoseph Chen			else
3191e9dc3b8SJoseph Chen				echo "ERROR: --burn-key-hash requires CONFIG_SPL_FIT_HW_CRYPTO=y"
3201e9dc3b8SJoseph Chen				exit 1
3211e9dc3b8SJoseph Chen			fi
3221e9dc3b8SJoseph Chen		fi
3231e9dc3b8SJoseph Chen
3241e9dc3b8SJoseph Chen		# rollback-index read back check
3251e9dc3b8SJoseph Chen		if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
3261e9dc3b8SJoseph Chen			VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index`
3271e9dc3b8SJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then
3281e9dc3b8SJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}";
3291e9dc3b8SJoseph Chen				exit 1
3301e9dc3b8SJoseph Chen			fi
3311e9dc3b8SJoseph Chen		fi
3321e9dc3b8SJoseph Chen
3331e9dc3b8SJoseph Chen		# burn-key-hash read back check
3341e9dc3b8SJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
3351e9dc3b8SJoseph Chen			if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then
3361e9dc3b8SJoseph Chen				echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}";
3371e9dc3b8SJoseph Chen				exit 1
3381e9dc3b8SJoseph Chen			fi
3391e9dc3b8SJoseph Chen		fi
3401e9dc3b8SJoseph Chen
3411e9dc3b8SJoseph Chen		# host check signature
3421e9dc3b8SJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
3431e9dc3b8SJoseph Chen			if [ "${ARG_SPL_NEW}" == "y" ]; then
3441e9dc3b8SJoseph Chen				 ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s
3451e9dc3b8SJoseph Chen			else
3461e9dc3b8SJoseph Chen				spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER}  |tr -d '\r'`
3471e9dc3b8SJoseph Chen				offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "`
3481e9dc3b8SJoseph Chen				if [ -z ${offs}  ]; then
3491e9dc3b8SJoseph Chen					echo "ERROR: invalid ${spl_file} , unable to find fdt blob"
3501e9dc3b8SJoseph Chen				fi
3511e9dc3b8SJoseph Chen				offs=`printf %d ${offs} ` # hex -> dec
3521e9dc3b8SJoseph Chen				dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1
3531e9dc3b8SJoseph Chen				${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s
3541e9dc3b8SJoseph Chen			fi
3551e9dc3b8SJoseph Chen		fi
3561e9dc3b8SJoseph Chen
3571e9dc3b8SJoseph Chen		# minimize u-boot-spl.dtb: clear as 0 but not remove property.
3581e9dc3b8SJoseph Chen		if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then
3591e9dc3b8SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
3601e9dc3b8SJoseph Chen			if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then
3611e9dc3b8SJoseph Chen				fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
3621e9dc3b8SJoseph Chen				fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
3631e9dc3b8SJoseph Chen			else
3641e9dc3b8SJoseph Chen				fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
3651e9dc3b8SJoseph Chen				fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
3661e9dc3b8SJoseph Chen			fi
3671e9dc3b8SJoseph Chen		else
3681e9dc3b8SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
3691e9dc3b8SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
3701e9dc3b8SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
3711e9dc3b8SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
3721e9dc3b8SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
3731e9dc3b8SJoseph Chen		fi
3741e9dc3b8SJoseph Chen
3751e9dc3b8SJoseph Chen		# repack spl
3761e9dc3b8SJoseph Chen		if [ "${ARG_SPL_NEW}" == "y" ]; then
3771e9dc3b8SJoseph Chen			cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin
3781e9dc3b8SJoseph Chen			if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then
3791e9dc3b8SJoseph Chen				cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin
3801e9dc3b8SJoseph Chen			fi
3811e9dc3b8SJoseph Chen			cat ${SPL_DTB} >> spl/u-boot-spl.bin
3821e9dc3b8SJoseph Chen
3831e9dc3b8SJoseph Chen			./make.sh --spl ${ARG_INI_LOADER}
3841e9dc3b8SJoseph Chen			echo "## pack loader with new: spl/u-boot-spl.bin"
3851e9dc3b8SJoseph Chen		else
3861e9dc3b8SJoseph Chen			./make.sh loader ${ARG_INI_LOADER}
3871e9dc3b8SJoseph Chen		fi
3881e9dc3b8SJoseph Chen
3891e9dc3b8SJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
3901e9dc3b8SJoseph Chen			echo "## ${SPL_DTB}: burn-key-hash=1"
3911e9dc3b8SJoseph Chen		fi
3921e9dc3b8SJoseph Chen	fi
3931e9dc3b8SJoseph Chen
3941e9dc3b8SJoseph Chen	rm -f u-boot.itb u-boot.img u-boot-dtb.img
3951e9dc3b8SJoseph Chen	mv ${ITS_UBOOT} ${FIT_DIR}
3961e9dc3b8SJoseph Chen}
3971e9dc3b8SJoseph Chen
3981e9dc3b8SJoseph Chenfunction fit_gen_boot_itb()
3991e9dc3b8SJoseph Chen{
4001e9dc3b8SJoseph Chen	if [ ! -z ${ARG_BOOT_IMG} ]; then
4011e9dc3b8SJoseph Chen		${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack
4021e9dc3b8SJoseph Chen		ITS_BOOT="${FIT_DIR}/unpack/image.its"
4031e9dc3b8SJoseph Chen	else
4041e9dc3b8SJoseph Chen		compression=`awk -F"," '/COMPRESSION=/  { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-`
4051e9dc3b8SJoseph Chen		if [ -z "${compression}" ]; then
4061e9dc3b8SJoseph Chen			compression="none"
4071e9dc3b8SJoseph Chen		fi
4081e9dc3b8SJoseph Chen		./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT}
4091e9dc3b8SJoseph Chen		check_its ${ITS_BOOT}
4101e9dc3b8SJoseph Chen	fi
4111e9dc3b8SJoseph Chen
4121e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
4131e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_DATA} ${ITB_BOOT} -v ${ARG_VER_BOOT}
4141e9dc3b8SJoseph Chen	else
4151e9dc3b8SJoseph Chen		check_rsa_keys
4161e9dc3b8SJoseph Chen
417ed912199SXuhui Lin		check_rsa_algo ${ITS_BOOT}
418ed912199SXuhui Lin
419cb458c93SXuhui Lin		if [ "${ARG_SIGN}" != "y" ]; then
4201e9dc3b8SJoseph Chen			echo "ERROR: CONFIG_FIT_SIGNATURE is disabled"
4211e9dc3b8SJoseph Chen			exit 1
4221e9dc3b8SJoseph Chen		fi
4231e9dc3b8SJoseph Chen
4241e9dc3b8SJoseph Chen		if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then
4251e9dc3b8SJoseph Chen			ARG_ROLLBACK_PROTECT="y"
4261e9dc3b8SJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then
4271e9dc3b8SJoseph Chen				echo "ERROR: No arg \"--rollback-index-boot <n>\""
4281e9dc3b8SJoseph Chen				exit 1
4291e9dc3b8SJoseph Chen			fi
4301ebfa2d7SJoseph Chen			if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then
4311ebfa2d7SJoseph Chen				echo "ERROR: Don't support \"--rollback-index-boot <n>\""
4321ebfa2d7SJoseph Chen				exit 1
4331ebfa2d7SJoseph Chen			fi
4341e9dc3b8SJoseph Chen		fi
4351e9dc3b8SJoseph Chen
4361e9dc3b8SJoseph Chen		# fixup
437d1627df0SJoseph Chen		FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'`
438d1627df0SJoseph Chen		KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'`
439d1627df0SJoseph Chen		RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'`
440a08b0b01SJoseph Chen		sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g"         ${ITS_BOOT}
4411e9dc3b8SJoseph Chen		sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g"   ${ITS_BOOT}
4421e9dc3b8SJoseph Chen		sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT}
4431e9dc3b8SJoseph Chen
4441e9dc3b8SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
4451e9dc3b8SJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '`
4461e9dc3b8SJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT}
4471e9dc3b8SJoseph Chen		fi
4481e9dc3b8SJoseph Chen
4491e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_BOOT} -v ${ARG_VER_BOOT}
4501e9dc3b8SJoseph Chen		mv ${SIG_BIN} ${SIG_BOOT}
4511e9dc3b8SJoseph Chen
4521e9dc3b8SJoseph Chen		# rollback-index read back check
4531e9dc3b8SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
4541e9dc3b8SJoseph Chen			VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index`
4551e9dc3b8SJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then
4561e9dc3b8SJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}";
4571e9dc3b8SJoseph Chen				exit 1
4581e9dc3b8SJoseph Chen			fi
4591e9dc3b8SJoseph Chen		fi
4601e9dc3b8SJoseph Chen
4611e9dc3b8SJoseph Chen		# host check signature
4621e9dc3b8SJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
4631e9dc3b8SJoseph Chen			 ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB}
4641e9dc3b8SJoseph Chen		fi
4651e9dc3b8SJoseph Chen
4661e9dc3b8SJoseph Chen		# minimize u-boot.dtb: clearn as 0 but not remove property.
4671e9dc3b8SJoseph Chen		if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then
4681e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
4691e9dc3b8SJoseph Chen			if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then
4701e9dc3b8SJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
4711e9dc3b8SJoseph Chen			else
4721e9dc3b8SJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
4731e9dc3b8SJoseph Chen			fi
4741e9dc3b8SJoseph Chen		else
4751e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
4761e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
4771e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
4781e9dc3b8SJoseph Chen		fi
4791e9dc3b8SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c
4801e9dc3b8SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np
4811e9dc3b8SJoseph Chen	fi
4821e9dc3b8SJoseph Chen
4831e9dc3b8SJoseph Chen	mv ${ITS_BOOT} ${FIT_DIR}
4841e9dc3b8SJoseph Chen}
4851e9dc3b8SJoseph Chen
4861e9dc3b8SJoseph Chenfunction fit_gen_recovery_itb()
4871e9dc3b8SJoseph Chen{
4881e9dc3b8SJoseph Chen	if [ ! -z ${ARG_RECOVERY_IMG} ]; then
4891e9dc3b8SJoseph Chen		${FIT_UNPACK} -f ${ARG_RECOVERY_IMG} -o ${FIT_DIR}/unpack
4901e9dc3b8SJoseph Chen		ITS_RECOVERY="${FIT_DIR}/unpack/image.its"
4911e9dc3b8SJoseph Chen	else
4921e9dc3b8SJoseph Chen		echo "ERROR: No recovery.img"
4931e9dc3b8SJoseph Chen		exit 1
4941e9dc3b8SJoseph Chen	fi
4951e9dc3b8SJoseph Chen
4961e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
4971e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_RECOVERY} -E -p ${OFFS_DATA} ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY}
4981e9dc3b8SJoseph Chen	else
4991e9dc3b8SJoseph Chen		check_rsa_keys
5001e9dc3b8SJoseph Chen
501ed912199SXuhui Lin		check_rsa_algo ${ITS_RECOVERY}
502ed912199SXuhui Lin
503cb458c93SXuhui Lin		if [ "${ARG_SIGN}" != "y" ]; then
5041e9dc3b8SJoseph Chen			echo "ERROR: CONFIG_FIT_SIGNATURE is disabled"
5051e9dc3b8SJoseph Chen			exit 1
5061e9dc3b8SJoseph Chen		fi
5071e9dc3b8SJoseph Chen
5081e9dc3b8SJoseph Chen		if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then
5091e9dc3b8SJoseph Chen			ARG_ROLLBACK_PROTECT="y"
5101e9dc3b8SJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_RECOVERY} ]; then
5111e9dc3b8SJoseph Chen				echo "ERROR: No arg \"--rollback-index-recovery <n>\""
5121e9dc3b8SJoseph Chen				exit 1
5131e9dc3b8SJoseph Chen			fi
5141ebfa2d7SJoseph Chen			if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then
5151ebfa2d7SJoseph Chen				echo "ERROR: Don't support \"--rollback-index-recovery <n>\""
5161ebfa2d7SJoseph Chen				exit 1
5171ebfa2d7SJoseph Chen			fi
5181e9dc3b8SJoseph Chen		fi
5191e9dc3b8SJoseph Chen
5201e9dc3b8SJoseph Chen		# fixup
521d1627df0SJoseph Chen		FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'`
522d1627df0SJoseph Chen		KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'`
523d1627df0SJoseph Chen		RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'`
5241e9dc3b8SJoseph Chen		sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g"         ${ITS_RECOVERY}
5251e9dc3b8SJoseph Chen		sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g"   ${ITS_RECOVERY}
5261e9dc3b8SJoseph Chen		sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_RECOVERY}
5271e9dc3b8SJoseph Chen
5281e9dc3b8SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
5291e9dc3b8SJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_RECOVERY} | awk -F '=' '{ printf $2 }' | tr -d ' '`
5301e9dc3b8SJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_RECOVERY}>;/g" ${ITS_RECOVERY}
5311e9dc3b8SJoseph Chen		fi
5321e9dc3b8SJoseph Chen
5331e9dc3b8SJoseph Chen		${MKIMAGE} -f ${ITS_RECOVERY} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY}
5341e9dc3b8SJoseph Chen		mv ${SIG_BIN} ${SIG_RECOVERY}
5351e9dc3b8SJoseph Chen
5361e9dc3b8SJoseph Chen		# rollback-index read back check
5371e9dc3b8SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
5381e9dc3b8SJoseph Chen			VERSION=`fdtget -ti ${ITB_RECOVERY} /configurations/conf rollback-index`
5391e9dc3b8SJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_RECOVERY}" ]; then
5401e9dc3b8SJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_RECOVERY}";
5411e9dc3b8SJoseph Chen				exit 1
5421e9dc3b8SJoseph Chen			fi
5431e9dc3b8SJoseph Chen		fi
5441e9dc3b8SJoseph Chen
5451e9dc3b8SJoseph Chen		# host check signature
5461e9dc3b8SJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
5471e9dc3b8SJoseph Chen			 ${CHECK_SIGN} -f ${ITB_RECOVERY} -k ${UBOOT_DTB}
5481e9dc3b8SJoseph Chen		fi
5491e9dc3b8SJoseph Chen
5501e9dc3b8SJoseph Chen		# minimize u-boot.dtb: clearn as 0 but not remove property.
5511e9dc3b8SJoseph Chen		if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then
5521e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
5531e9dc3b8SJoseph Chen			if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then
5541e9dc3b8SJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
5551e9dc3b8SJoseph Chen			else
5561e9dc3b8SJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
5571e9dc3b8SJoseph Chen			fi
5581e9dc3b8SJoseph Chen		else
5591e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
5601e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
5611e9dc3b8SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
5621e9dc3b8SJoseph Chen		fi
5631e9dc3b8SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c
5641e9dc3b8SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np
5651e9dc3b8SJoseph Chen	fi
5661e9dc3b8SJoseph Chen
5671e9dc3b8SJoseph Chen	mv ${ITS_RECOVERY} ${FIT_DIR}
5681e9dc3b8SJoseph Chen}
5691e9dc3b8SJoseph Chen
5701e9dc3b8SJoseph Chenfunction fit_gen_uboot_img()
5711e9dc3b8SJoseph Chen{
5721e9dc3b8SJoseph Chen	ITB=$1
5731e9dc3b8SJoseph Chen
5741e9dc3b8SJoseph Chen	if [ -z ${ITB} ]; then
5751e9dc3b8SJoseph Chen		ITB=${ITB_UBOOT}
5761e9dc3b8SJoseph Chen	fi
5771e9dc3b8SJoseph Chen
5781e9dc3b8SJoseph Chen	ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'`
5791e9dc3b8SJoseph Chen	ITB_MAX_KB=`sed  -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'`
5801e9dc3b8SJoseph Chen	ITB_MAX_BS=$((ITB_MAX_KB*1024))
5811e9dc3b8SJoseph Chen	ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'`
5821e9dc3b8SJoseph Chen
5831e9dc3b8SJoseph Chen	if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then
5841e9dc3b8SJoseph Chen		echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes"
5851e9dc3b8SJoseph Chen		exit 1
5861e9dc3b8SJoseph Chen	fi
5871e9dc3b8SJoseph Chen
5881e9dc3b8SJoseph Chen	rm -f ${IMG_UBOOT}
5891e9dc3b8SJoseph Chen	for ((i = 0; i < ${ITB_MAX_NUM}; i++));
5901e9dc3b8SJoseph Chen	do
5911e9dc3b8SJoseph Chen		cat ${ITB} >> ${IMG_UBOOT}
5921e9dc3b8SJoseph Chen		truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT}
5931e9dc3b8SJoseph Chen	done
5941e9dc3b8SJoseph Chen}
5951e9dc3b8SJoseph Chen
5961e9dc3b8SJoseph Chenfunction fit_gen_boot_img()
5971e9dc3b8SJoseph Chen{
5981e9dc3b8SJoseph Chen	ITB=$1
5991e9dc3b8SJoseph Chen
6001e9dc3b8SJoseph Chen	if [ -z ${ITB} ]; then
6011e9dc3b8SJoseph Chen		ITB=${ITB_BOOT}
6021e9dc3b8SJoseph Chen	fi
6031e9dc3b8SJoseph Chen
6041e9dc3b8SJoseph Chen	if [ "${ITB}" != "${IMG_BOOT}" ]; then
6051e9dc3b8SJoseph Chen		cp ${ITB} ${IMG_BOOT} -f
6061e9dc3b8SJoseph Chen	fi
6071e9dc3b8SJoseph Chen}
6081e9dc3b8SJoseph Chen
6091e9dc3b8SJoseph Chenfunction fit_gen_recovery_img()
6101e9dc3b8SJoseph Chen{
6111e9dc3b8SJoseph Chen	ITB=$1
6121e9dc3b8SJoseph Chen
6131e9dc3b8SJoseph Chen	if [ -z ${ITB} ]; then
6141e9dc3b8SJoseph Chen		ITB=${ITB_RECOVERY}
6151e9dc3b8SJoseph Chen	fi
6161e9dc3b8SJoseph Chen
6171e9dc3b8SJoseph Chen	if [ "${ITB}" != "${IMG_RECOVERY}" ]; then
6181e9dc3b8SJoseph Chen		cp ${ITB} ${IMG_RECOVERY} -f
6191e9dc3b8SJoseph Chen	fi
6201e9dc3b8SJoseph Chen}
6211e9dc3b8SJoseph Chen
6221e9dc3b8SJoseph Chenfunction fit_gen_loader()
6231e9dc3b8SJoseph Chen{
624cb458c93SXuhui Lin	if [ "${ARG_SIGN}" == "y" ]; then
6251e9dc3b8SJoseph Chen		${RK_SIGN_TOOL} cc --chip ${ARG_CHIP: 2: 6}
626*60bee396SXuhui Lin		if grep -q '^CONFIG_SPL_REVOKE_PUB_KEY=y' .config ; then
627*60bee396SXuhui Lin			${RK_SIGN_TOOL} lk --key ${LEGACY_RSA_PRI_KEY} --pubkey ${LEGACY_RSA_PUB_KEY}
628*60bee396SXuhui Lin			${RK_SIGN_TOOL} ss --flag=0x80
629*60bee396SXuhui Lin		else
6301e9dc3b8SJoseph Chen			${RK_SIGN_TOOL} lk --key ${RSA_PRI_KEY} --pubkey ${RSA_PUB_KEY}
631*60bee396SXuhui Lin		fi
6321e9dc3b8SJoseph Chen		if ls *loader*.bin >/dev/null 2>&1 ; then
6331e9dc3b8SJoseph Chen			${RK_SIGN_TOOL} sl --loader *loader*.bin
6341e9dc3b8SJoseph Chen		fi
6351e9dc3b8SJoseph Chen		if ls *download*.bin >/dev/null 2>&1 ; then
6361e9dc3b8SJoseph Chen			${RK_SIGN_TOOL} sl --loader *download*.bin
6371e9dc3b8SJoseph Chen		fi
6381e9dc3b8SJoseph Chen		if ls *idblock*.img >/dev/null 2>&1 ; then
6391e9dc3b8SJoseph Chen			${RK_SIGN_TOOL} sb --idb *idblock*.img
6401e9dc3b8SJoseph Chen		fi
6411e9dc3b8SJoseph Chen	fi
6421e9dc3b8SJoseph Chen}
6431e9dc3b8SJoseph Chen
6441e9dc3b8SJoseph Chenfunction fit_msg_uboot()
6451e9dc3b8SJoseph Chen{
6461e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
6471e9dc3b8SJoseph Chen		MSG_SIGN="no-signed"
6481e9dc3b8SJoseph Chen	else
6491e9dc3b8SJoseph Chen		MSG_SIGN="signed"
6501e9dc3b8SJoseph Chen	fi
6511e9dc3b8SJoseph Chen
6521e9dc3b8SJoseph Chen	VERSION=`fdtget -ti ${ITB_UBOOT} / version`
6531e9dc3b8SJoseph Chen	if [ "${VERSION}" != "" ]; then
6541e9dc3b8SJoseph Chen		MSG_VER=", version=${VERSION}"
6551e9dc3b8SJoseph Chen	fi
6561e9dc3b8SJoseph Chen
6571e9dc3b8SJoseph Chen	if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
6581e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready"
6591e9dc3b8SJoseph Chen	else
6601e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready"
6611e9dc3b8SJoseph Chen	fi
6621e9dc3b8SJoseph Chen}
6631e9dc3b8SJoseph Chen
6641e9dc3b8SJoseph Chenfunction fit_msg_boot()
6651e9dc3b8SJoseph Chen{
6661e9dc3b8SJoseph Chen	if [ -z "${ARG_BOOT_IMG}" ]; then
6671e9dc3b8SJoseph Chen		return;
6681e9dc3b8SJoseph Chen	fi
6691e9dc3b8SJoseph Chen
6701e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
6711e9dc3b8SJoseph Chen		MSG_SIGN="no-signed"
6721e9dc3b8SJoseph Chen	else
6731e9dc3b8SJoseph Chen		MSG_SIGN="signed"
6741e9dc3b8SJoseph Chen	fi
6751e9dc3b8SJoseph Chen
6761e9dc3b8SJoseph Chen	VERSION=`fdtget -ti ${ITB_BOOT} / version`
6771e9dc3b8SJoseph Chen	if [ "${VERSION}" != "" ]; then
6781e9dc3b8SJoseph Chen		MSG_VER=", version=${VERSION}"
6791e9dc3b8SJoseph Chen	fi
6801e9dc3b8SJoseph Chen
6811e9dc3b8SJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
6821e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready"
6831e9dc3b8SJoseph Chen	else
6841e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready"
6851e9dc3b8SJoseph Chen	fi
6861e9dc3b8SJoseph Chen}
6871e9dc3b8SJoseph Chen
6881e9dc3b8SJoseph Chenfunction fit_msg_recovery()
6891e9dc3b8SJoseph Chen{
6901e9dc3b8SJoseph Chen	if [ -z "${ARG_RECOVERY_IMG}" ]; then
6911e9dc3b8SJoseph Chen		return;
6921e9dc3b8SJoseph Chen	fi
6931e9dc3b8SJoseph Chen
6941e9dc3b8SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
6951e9dc3b8SJoseph Chen		MSG_SIGN="no-signed"
6961e9dc3b8SJoseph Chen	else
6971e9dc3b8SJoseph Chen		MSG_SIGN="signed"
6981e9dc3b8SJoseph Chen	fi
6991e9dc3b8SJoseph Chen
7001e9dc3b8SJoseph Chen	VERSION=`fdtget -ti ${ITB_RECOVERY} / version`
7011e9dc3b8SJoseph Chen	if [ "${VERSION}" != "" ]; then
7021e9dc3b8SJoseph Chen		MSG_VER=", version=${VERSION}"
7031e9dc3b8SJoseph Chen	fi
7041e9dc3b8SJoseph Chen
7051e9dc3b8SJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
7061e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_RECOVERY}): ${IMG_RECOVERY} is ready"
7071e9dc3b8SJoseph Chen	else
7081e9dc3b8SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_RECOVERY} (FIT with kernel, fdt, resource...) is ready"
7091e9dc3b8SJoseph Chen	fi
7101e9dc3b8SJoseph Chen}
7111e9dc3b8SJoseph Chen
7121e9dc3b8SJoseph Chenfunction fit_msg_loader()
7131e9dc3b8SJoseph Chen{
7141e9dc3b8SJoseph Chen	if ls *loader*.bin >/dev/null 2>&1 ; then
7151e9dc3b8SJoseph Chen		LOADER=`ls *loader*.bin`
7161e9dc3b8SJoseph Chen	fi
7171e9dc3b8SJoseph Chen
7181e9dc3b8SJoseph Chen	if ls *idblock*.img >/dev/null 2>&1 ; then
7191e9dc3b8SJoseph Chen		LOADER=`ls *idblock*.img`
7201e9dc3b8SJoseph Chen	fi
7211e9dc3b8SJoseph Chen
722cb458c93SXuhui Lin	if [ "${ARG_SIGN}" == "y" ]; then
7231e9dc3b8SJoseph Chen		echo "Image(signed): ${LOADER} (with spl, ddr...) is ready"
7241e9dc3b8SJoseph Chen	else
7251e9dc3b8SJoseph Chen		echo "Image(no-signed): ${LOADER} (with spl, ddr...) is ready"
7261e9dc3b8SJoseph Chen	fi
7271e9dc3b8SJoseph Chen}
7281e9dc3b8SJoseph Chen
7291e9dc3b8SJoseph Chenfunction fit_msg_u_boot_loader()
7301e9dc3b8SJoseph Chen{
7311e9dc3b8SJoseph Chen	if ls *loader*.bin >/dev/null 2>&1 ; then
7321e9dc3b8SJoseph Chen		LOADER=`ls *loader*.bin`
7331e9dc3b8SJoseph Chen	fi
7341e9dc3b8SJoseph Chen
7351e9dc3b8SJoseph Chen	if ls *idblock*.img >/dev/null 2>&1 ; then
7361e9dc3b8SJoseph Chen		LOADER=`ls *idblock*.img`
7371e9dc3b8SJoseph Chen	fi
7381e9dc3b8SJoseph Chen
739cb458c93SXuhui Lin	if [ "${ARG_SIGN}" == "y" ]; then
7401e9dc3b8SJoseph Chen		echo "Image(signed): ${LOADER} (with u-boot, ddr...) is ready"
7411e9dc3b8SJoseph Chen	else
7421e9dc3b8SJoseph Chen		echo "Image(no-signed): ${LOADER} (with u-boot, ddr...) is ready"
7431e9dc3b8SJoseph Chen	fi
7441e9dc3b8SJoseph Chen}
745554ddf99SXuhui Lin
746554ddf99SXuhui Linfunction fit_signcfg_export()
747554ddf99SXuhui Lin{
748554ddf99SXuhui Lin	if [ "${ARG_NO_SIGN}" == "y" ]; then
749554ddf99SXuhui Lin		if ls *loader*.bin >/dev/null 2>&1 ; then
750554ddf99SXuhui Lin			LOADER=`ls *loader*.bin`
751554ddf99SXuhui Lin		elif ls *download*.bin >/dev/null 2>&1 ; then
752554ddf99SXuhui Lin			LOADER=`ls *download*.bin`
753554ddf99SXuhui Lin		else
754554ddf99SXuhui Lin			echo "ERROR: No loader found"
755554ddf99SXuhui Lin			exit 1
756554ddf99SXuhui Lin		fi
757554ddf99SXuhui Lin		cp ${ARG_INI_LOADER} ${MINIALL_INI}
758554ddf99SXuhui Lin		cp .config ${SIG_CONFIG}
759554ddf99SXuhui Lin
760554ddf99SXuhui Lin		mkdir -p ${SIG_CFG_DIR}/test_images/
761554ddf99SXuhui Lin		cp uboot.img ${SIG_CFG_DIR}/test_images/
762554ddf99SXuhui Lin		cp ${LOADER} ${SIG_CFG_DIR}/test_images/
763554ddf99SXuhui Lin		tar zcvf ${SIG_CFG_DIR}/test_images.tar.gz ${SIG_CFG_DIR}/test_images >/dev/null 2>&1
764554ddf99SXuhui Lin		rm -rf ${SIG_CFG_DIR}/test_images/
765554ddf99SXuhui Lin
766554ddf99SXuhui Lin		FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'`
767554ddf99SXuhui Lin		KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'`
768554ddf99SXuhui Lin		RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'`
769554ddf99SXuhui Lin		echo "fdt_addr_r=${FDT_ADDR_R}" >> ${SIG_CONFIG}
770554ddf99SXuhui Lin		echo "kernel_addr_r=${KERNEL_ADDR_R}" >> ${SIG_CONFIG}
771554ddf99SXuhui Lin		echo "ramdisk_addr_r=${RMADISK_ADDR_R}" >> ${SIG_CONFIG}
772554ddf99SXuhui Lin
773554ddf99SXuhui Lin		CSUM=`sha256sum u-boot-nodtb.bin  | awk '{ print $1 }'`
774554ddf99SXuhui Lin		echo "uboot_sha256sum=${CSUM}" >> ${SIG_CONFIG}
775554ddf99SXuhui Lin		CSUM=`sha256sum spl/u-boot-spl-nodtb.bin  | awk '{ print $1 }'`
776554ddf99SXuhui Lin		echo "spl_sha256sum=${CSUM}" >> ${SIG_CONFIG}
777554ddf99SXuhui Lin		SIZE=`ls -l  spl/u-boot-spl-nodtb.bin | awk '{ print $5 }'`
778554ddf99SXuhui Lin		echo "spl_size=${SIZE}" >> ${SIG_CONFIG}
779554ddf99SXuhui Lin
780554ddf99SXuhui Lin		BUILD_MAIL=`git config --get user.email`
781554ddf99SXuhui Lin		BUILD_HOST=`hostname`
782554ddf99SXuhui Lin		BUILD_USER=${USER}
783554ddf99SXuhui Lin		BUILD_DATE=`date`
784554ddf99SXuhui Lin		echo "BUILD: ${BUILD_MAIL} # ${BUILD_USER}@${BUILD_HOST} # ${BUILD_DATE}" >> ${SIG_CONFIG}
785554ddf99SXuhui Lin	fi
786554ddf99SXuhui Lin}
787