xref: /rk3399_rockchip-uboot/scripts/fit.sh (revision 2a0b9372577646701ccd8873bdf4de4fc935cee3)
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"
124b1cd58cSJoseph ChenIMG_RECOVERY="recovery.img"
13ae33e311SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb"
14ae33e311SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb"
154b1cd58cSJoseph ChenITB_RECOVERY="${FIT_DIR}/recovery.itb"
16ae33e311SJoseph ChenSIG_BIN="data2sign.bin"
17ae33e311SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign"
18ae33e311SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign"
194b1cd58cSJoseph ChenSIG_RECOVERY="${FIT_DIR}/recovery.data2sign"
20ae33e311SJoseph Chen# offs
21ac05169aSJoseph ChenOFFS_DATA="0xE00"
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"
30*2a0b9372SJoseph ChenRK_SIGN_TOOL="../rkbin/tools/rk_sign_tool"
31ae33e311SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh"
32ae33e311SJoseph ChenCHECK_SIGN="./tools/fit_check_sign"
33ae33e311SJoseph Chen# key
34ae33e311SJoseph ChenKEY_DIR="keys/"
35ae33e311SJoseph ChenRSA_PRI_KEY="keys/dev.key"
36ae33e311SJoseph ChenRSA_PUB_KEY="keys/dev.crt"
37ae33e311SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev"
38ae33e311SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb"
39ae33e311SJoseph ChenUBOOT_DTB="u-boot.dtb"
40ae33e311SJoseph Chen# its
41ae33e311SJoseph ChenITS_UBOOT="u-boot.its"
42ae33e311SJoseph ChenITS_BOOT="boot.its"
434b1cd58cSJoseph ChenITS_RECOVERY="recovery.its"
44ae33e311SJoseph ChenARG_VER_UBOOT="0"
45ae33e311SJoseph ChenARG_VER_BOOT="0"
464b1cd58cSJoseph ChenARG_VER_RECOVERY="0"
47ae33e311SJoseph Chen
48ae33e311SJoseph Chenfunction help()
49ae33e311SJoseph Chen{
50ae33e311SJoseph Chen	echo
51ae33e311SJoseph Chen	echo "usage:"
52ae33e311SJoseph Chen	echo "    $0 [args]"
53ae33e311SJoseph Chen	echo
54ae33e311SJoseph Chen	echo "args:"
554b1cd58cSJoseph Chen	echo "    --rollback-index-recovery  <decimal integer>"
56ae33e311SJoseph Chen	echo "    --rollback-index-boot      <decimal integer>"
57ae33e311SJoseph Chen	echo "    --rollback-index-uboot     <decimal integer>"
584b1cd58cSJoseph Chen	echo "    --version-recovery         <decimal integer>"
59ae33e311SJoseph Chen	echo "    --version-boot             <decimal integer>"
604b1cd58cSJoseph Chen	echo "    --version-uboot            <decimal integer>"
614b1cd58cSJoseph Chen	echo "    --boot_img                 <boot image>"
624b1cd58cSJoseph Chen	echo "    --recovery_img             <recovery image>"
634b1cd58cSJoseph Chen	echo "    --args                     <arg>"
644b1cd58cSJoseph Chen	echo "    --ini-loader               <loader ini file>"
654b1cd58cSJoseph Chen	echo "    --ini-trust                <trust ini file>"
66ae33e311SJoseph Chen	echo "    --no-check"
67ae33e311SJoseph Chen	echo "    --spl-new"
68ae33e311SJoseph Chen	echo
69ae33e311SJoseph Chen}
70ae33e311SJoseph Chen
71ae33e311SJoseph Chenfunction arg_check_decimal()
72ae33e311SJoseph Chen{
73ae33e311SJoseph Chen	if [ -z $1 ]; then
74ae33e311SJoseph Chen		help
75ae33e311SJoseph Chen		exit 1
76ae33e311SJoseph Chen	fi
77ae33e311SJoseph Chen
78ae33e311SJoseph Chen	decimal=`echo $1 |sed 's/[0-9]//g'`
79ae33e311SJoseph Chen	if [ ! -z ${decimal} ]; then
80ae33e311SJoseph Chen		echo "ERROR: $1 is not decimal integer"
81ae33e311SJoseph Chen		help
82ae33e311SJoseph Chen		exit 1
83ae33e311SJoseph Chen	fi
84ae33e311SJoseph Chen}
85ae33e311SJoseph Chen
86ae33e311SJoseph Chenfunction check_its()
87ae33e311SJoseph Chen{
88ae33e311SJoseph Chen	cat $1 | while read line
89ae33e311SJoseph Chen	do
90ae33e311SJoseph Chen		file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '`
91ae33e311SJoseph Chen		if [ ! -f ${file} ]; then
92ae33e311SJoseph Chen			echo "ERROR: No ${file}"
93ae33e311SJoseph Chen			exit 1
94ae33e311SJoseph Chen		fi
95ae33e311SJoseph Chen	done
96ae33e311SJoseph Chen}
97ae33e311SJoseph Chen
98ae33e311SJoseph Chenfunction validate_arg()
99ae33e311SJoseph Chen{
100ae33e311SJoseph Chen	case $1 in
10114aa40ffSJoseph Chen		--no-check|--spl-new|--burn-key-hash)
102ae33e311SJoseph Chen			shift=1
103ae33e311SJoseph Chen			;;
104*2a0b9372SJoseph 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)
105ae33e311SJoseph Chen			shift=2
106ae33e311SJoseph Chen			;;
107ae33e311SJoseph Chen		*)
108ae33e311SJoseph Chen			shift=0
109ae33e311SJoseph Chen			;;
110ae33e311SJoseph Chen	esac
111ae33e311SJoseph Chen	echo ${shift}
112ae33e311SJoseph Chen}
113ae33e311SJoseph Chen
114ae33e311SJoseph Chenfunction fit_process_args()
115ae33e311SJoseph Chen{
116ae33e311SJoseph Chen	if [ $# -eq 0 ]; then
117ae33e311SJoseph Chen		help
118ae33e311SJoseph Chen		exit 0
119ae33e311SJoseph Chen	fi
120ae33e311SJoseph Chen
121ae33e311SJoseph Chen	while [ $# -gt 0 ]; do
122ae33e311SJoseph Chen		case $1 in
1232d11b868SJoseph Chen			--args)
124ae33e311SJoseph Chen				ARG_VALIDATE=$2
125ae33e311SJoseph Chen				shift 2
126ae33e311SJoseph Chen				;;
1272d11b868SJoseph Chen			--boot_img)     # boot.img
1282d11b868SJoseph Chen				ARG_BOOT_IMG=$2
1292d11b868SJoseph Chen				shift 2
130ae33e311SJoseph Chen				;;
131*2a0b9372SJoseph Chen			--chip)
132*2a0b9372SJoseph Chen				ARG_CHIP=$2
133*2a0b9372SJoseph Chen				shift 2
134*2a0b9372SJoseph Chen				;;
1354b1cd58cSJoseph Chen			--recovery_img) # recovery.img
1364b1cd58cSJoseph Chen				ARG_RECOVERY_IMG=$2
1374b1cd58cSJoseph Chen				shift 2
1384b1cd58cSJoseph Chen				;;
1392d11b868SJoseph Chen			--boot_img_dir) # boot.img components directory
1402d11b868SJoseph Chen				ARG_BOOT_IMG_DIR=$2
1412d11b868SJoseph Chen				shift 2
142ae33e311SJoseph Chen				;;
143ae33e311SJoseph Chen			--no-check)     # No hostcc fit signature check
144ae33e311SJoseph Chen				ARG_NO_CHECK="y"
145ae33e311SJoseph Chen				shift 1
146ae33e311SJoseph Chen				;;
147ae33e311SJoseph Chen			--ini-trust)    # Assign trust ini file
148ae33e311SJoseph Chen				ARG_INI_TRUST=$2
149ae33e311SJoseph Chen				shift 2
150ae33e311SJoseph Chen				;;
151ae33e311SJoseph Chen			--ini-loader)   # Assign loader ini file
152ae33e311SJoseph Chen				ARG_INI_LOADER=$2
153ae33e311SJoseph Chen				shift 2
154ae33e311SJoseph Chen				;;
155ae33e311SJoseph Chen			--spl-new)      # Use current build u-boot-spl.bin to pack loader
156ae33e311SJoseph Chen				ARG_SPL_NEW="y"
157ae33e311SJoseph Chen				shift 1
158ae33e311SJoseph Chen				;;
159ae33e311SJoseph Chen			--rollback-index-boot)
160ae33e311SJoseph Chen				ARG_ROLLBACK_IDX_BOOT=$2
161ae33e311SJoseph Chen				arg_check_decimal $2
162ae33e311SJoseph Chen				shift 2
163ae33e311SJoseph Chen				;;
1644b1cd58cSJoseph Chen			--rollback-index-recovery)
1654b1cd58cSJoseph Chen				ARG_ROLLBACK_IDX_RECOVERY=$2
1664b1cd58cSJoseph Chen				arg_check_decimal $2
1674b1cd58cSJoseph Chen				shift 2
1684b1cd58cSJoseph Chen				;;
169ae33e311SJoseph Chen			--rollback-index-uboot)
170ae33e311SJoseph Chen				ARG_ROLLBACK_IDX_UBOOT=$2
171ae33e311SJoseph Chen				arg_check_decimal $2
172ae33e311SJoseph Chen				shift 2
173ae33e311SJoseph Chen				;;
174ae33e311SJoseph Chen			--version-uboot)
175ae33e311SJoseph Chen				ARG_VER_UBOOT=$2
176ae33e311SJoseph Chen				arg_check_decimal $2
177ae33e311SJoseph Chen				shift 2
178ae33e311SJoseph Chen				;;
179ae33e311SJoseph Chen			--version-boot)
180ae33e311SJoseph Chen				ARG_VER_BOOT=$2
181ae33e311SJoseph Chen				arg_check_decimal $2
182ae33e311SJoseph Chen				shift 2
183ae33e311SJoseph Chen				;;
1844b1cd58cSJoseph Chen			--version-recovery)
1854b1cd58cSJoseph Chen				ARG_VER_RECOVERY=$2
1864b1cd58cSJoseph Chen				arg_check_decimal $2
1874b1cd58cSJoseph Chen				shift 2
1884b1cd58cSJoseph Chen				;;
18914aa40ffSJoseph Chen			--burn-key-hash)
19014aa40ffSJoseph Chen				ARG_BURN_KEY_HASH="y"
19114aa40ffSJoseph Chen				shift 1
19214aa40ffSJoseph Chen				;;
193ae33e311SJoseph Chen			*)
194ae33e311SJoseph Chen				help
195ae33e311SJoseph Chen				exit 1
196ae33e311SJoseph Chen				;;
197ae33e311SJoseph Chen		esac
198ae33e311SJoseph Chen	done
1992d11b868SJoseph Chen
2002d11b868SJoseph Chen	if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
2012d11b868SJoseph Chen		ARG_SIGN="y"
2022d11b868SJoseph Chen	fi
203ae33e311SJoseph Chen}
204ae33e311SJoseph Chen
2052d11b868SJoseph Chenfunction fit_raw_compile()
206ae33e311SJoseph Chen{
207ae33e311SJoseph Chen	# Verified-boot: should rebuild code but don't need to repack images.
2082d11b868SJoseph Chen	if [ "${ARG_SIGN}" == "y" ]; then
2092d11b868SJoseph Chen		./make.sh --raw-compile
210ae33e311SJoseph Chen	fi
2112d11b868SJoseph Chen	rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR}
212ae33e311SJoseph Chen}
213ae33e311SJoseph Chen
214ae33e311SJoseph Chenfunction fit_gen_uboot_itb()
215ae33e311SJoseph Chen{
216374d2596SJoseph Chen	# generate u-boot.its file
217173a9307SJoseph Chen	./make.sh itb ${ARG_INI_TRUST}
218374d2596SJoseph Chen
219374d2596SJoseph Chen	# check existance of file in its
220ae33e311SJoseph Chen	check_its ${ITS_UBOOT}
221ae33e311SJoseph Chen
2222d11b868SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
223ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_DATA} ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
224ae33e311SJoseph Chen		if [ "${ARG_SPL_NEW}" == "y" ]; then
225ae33e311SJoseph Chen			./make.sh --spl ${ARG_INI_LOADER}
226ae33e311SJoseph Chen			echo "pack loader with new: spl/u-boot-spl.bin"
227ae33e311SJoseph Chen		else
228ae33e311SJoseph Chen			./make.sh loader ${ARG_INI_LOADER}
229ae33e311SJoseph Chen		fi
230ae33e311SJoseph Chen	else
231ae33e311SJoseph Chen		if [ ! -f ${RSA_PRI_KEY} ]; then
232ae33e311SJoseph Chen			echo "ERROR: No ${RSA_PRI_KEY} "
233ae33e311SJoseph Chen			exit 1
234ae33e311SJoseph Chen		elif [ ! -f ${RSA_PUB_KEY} ]; then
235ae33e311SJoseph Chen			echo "ERROR: No ${RSA_PUB_KEY} "
236ae33e311SJoseph Chen			exit 1
237ae33e311SJoseph Chen		fi
238ae33e311SJoseph Chen
239ae33e311SJoseph Chen		if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then
240ae33e311SJoseph Chen			echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled"
241ae33e311SJoseph Chen			exit 1
242ae33e311SJoseph Chen		fi
243ae33e311SJoseph Chen
24441290645SJoseph Chen		# rollback-index
245ae33e311SJoseph Chen		if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then
246ae33e311SJoseph Chen			ARG_SPL_ROLLBACK_PROTECT="y"
247ae33e311SJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then
248ae33e311SJoseph Chen				echo "ERROR: No arg \"--rollback-index-uboot <n>\""
249ae33e311SJoseph Chen				exit 1
250ae33e311SJoseph Chen			fi
251ae33e311SJoseph Chen		fi
252ae33e311SJoseph Chen
253ae33e311SJoseph Chen		if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
25441290645SJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '`
25541290645SJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT}
256ae33e311SJoseph Chen		fi
257ae33e311SJoseph Chen
258374d2596SJoseph Chen		# Generally, boot.img is signed before uboot.img, so the ras key can be found
259374d2596SJoseph Chen		# in u-boot.dtb. If not found, let's insert rsa key anyway.
260ae33e311SJoseph Chen		if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then
261ac05169aSJoseph Chen			${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
2622d11b868SJoseph Chen			echo "## Adding RSA public key into ${UBOOT_DTB}"
263ae33e311SJoseph Chen		fi
264ae33e311SJoseph Chen
265ae33e311SJoseph Chen		# Pack
266ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
267ae33e311SJoseph Chen		mv ${SIG_BIN} ${SIG_UBOOT}
268ae33e311SJoseph Chen
2698d853b06SJoseph Chen		# burn-key-hash
2708d853b06SJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
2718d853b06SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1
2728d853b06SJoseph Chen		fi
273374d2596SJoseph Chen
274ae33e311SJoseph Chen		# rollback-index read back check
275ae33e311SJoseph Chen		if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
276ae33e311SJoseph Chen			VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index`
277ae33e311SJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then
278ae33e311SJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}";
279ae33e311SJoseph Chen				exit 1
280ae33e311SJoseph Chen			fi
281ae33e311SJoseph Chen		fi
282ae33e311SJoseph Chen
28314aa40ffSJoseph Chen		# burn-key-hash read back check
28414aa40ffSJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
2858d853b06SJoseph Chen			if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then
2868d853b06SJoseph Chen				echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}";
28714aa40ffSJoseph Chen				exit 1
28814aa40ffSJoseph Chen			fi
28914aa40ffSJoseph Chen		fi
29014aa40ffSJoseph Chen
291ae33e311SJoseph Chen		# host check signature
292ae33e311SJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
293ae33e311SJoseph Chen			if [ "${ARG_SPL_NEW}" == "y" ]; then
294ae33e311SJoseph Chen				 ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s
295ae33e311SJoseph Chen			else
296ae33e311SJoseph Chen				spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER}  |tr -d '\r'`
297ae33e311SJoseph Chen				offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "`
298ae33e311SJoseph Chen				if [ -z ${offs}  ]; then
299ae33e311SJoseph Chen					echo "ERROR: invalid ${spl_file} , unable to find fdt blob"
300ae33e311SJoseph Chen				fi
301ae33e311SJoseph Chen				offs=`printf %d ${offs} ` # hex -> dec
302ae33e311SJoseph Chen				dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1
303ae33e311SJoseph Chen				${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s
304ae33e311SJoseph Chen			fi
305ae33e311SJoseph Chen		fi
306ae33e311SJoseph Chen
307374d2596SJoseph Chen		# minimize u-boot-spl.dtb: clear as 0 but not remove property.
308ae33e311SJoseph Chen		if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then
309ae33e311SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
310ae33e311SJoseph Chen			if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then
311b800cd5aSJoseph Chen				fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
312134814e5SJoseph Chen				fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
313ae33e311SJoseph Chen			else
314b800cd5aSJoseph Chen				fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
315134814e5SJoseph Chen				fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
316ae33e311SJoseph Chen			fi
317ae33e311SJoseph Chen		else
318b800cd5aSJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
319b800cd5aSJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
320b800cd5aSJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
321134814e5SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
322134814e5SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
323ae33e311SJoseph Chen		fi
324ae33e311SJoseph Chen
325ae33e311SJoseph Chen		# repack spl
326ae33e311SJoseph Chen		rm -f *_loader_*.bin
327ae33e311SJoseph Chen		if [ "${ARG_SPL_NEW}" == "y" ]; then
328ae33e311SJoseph Chen			cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin
329ae33e311SJoseph Chen			if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then
330ae33e311SJoseph Chen				cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin
331ae33e311SJoseph Chen			fi
332ae33e311SJoseph Chen			cat ${SPL_DTB} >> spl/u-boot-spl.bin
333ae33e311SJoseph Chen
334ae33e311SJoseph Chen			./make.sh --spl ${ARG_INI_LOADER}
3358d853b06SJoseph Chen			echo "## pack loader with new: spl/u-boot-spl.bin"
336ae33e311SJoseph Chen		else
337ae33e311SJoseph Chen			./make.sh loader ${ARG_INI_LOADER}
338ae33e311SJoseph Chen		fi
3398d853b06SJoseph Chen
3408d853b06SJoseph Chen		if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
3418d853b06SJoseph Chen			echo "## ${SPL_DTB}: burn-key-hash=1"
3428d853b06SJoseph Chen		fi
343ae33e311SJoseph Chen	fi
344ae33e311SJoseph Chen
345ae33e311SJoseph Chen	rm -f u-boot.itb u-boot.img u-boot-dtb.img
346ae33e311SJoseph Chen	mv ${ITS_UBOOT} ${FIT_DIR}
347ae33e311SJoseph Chen}
348ae33e311SJoseph Chen
349ae33e311SJoseph Chenfunction fit_gen_boot_itb()
350ae33e311SJoseph Chen{
3512d11b868SJoseph Chen	if [ ! -z ${ARG_BOOT_IMG} ]; then
3522d11b868SJoseph Chen		${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack
353ae33e311SJoseph Chen		ITS_BOOT="${FIT_DIR}/unpack/image.its"
354ae33e311SJoseph Chen	else
355ae33e311SJoseph Chen		compression=`awk -F"," '/COMPRESSION=/  { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-`
356ae33e311SJoseph Chen		if [ -z "${compression}" ]; then
357ae33e311SJoseph Chen			compression="none"
358ae33e311SJoseph Chen		fi
359ae33e311SJoseph Chen		./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT}
360ae33e311SJoseph Chen		check_its ${ITS_BOOT}
361ae33e311SJoseph Chen	fi
362ae33e311SJoseph Chen
3632d11b868SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
364ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_DATA} ${ITB_BOOT} -v ${ARG_VER_BOOT}
365ae33e311SJoseph Chen	else
366ae33e311SJoseph Chen		if [ ! -f ${RSA_PRI_KEY}  ]; then
367ae33e311SJoseph Chen			echo "ERROR: No ${RSA_PRI_KEY}"
368ae33e311SJoseph Chen			exit 1
369ae33e311SJoseph Chen		elif [ ! -f ${RSA_PUB_KEY}  ]; then
370ae33e311SJoseph Chen			echo "ERROR: No ${RSA_PUB_KEY}"
371ae33e311SJoseph Chen			exit 1
372ae33e311SJoseph Chen		fi
373ae33e311SJoseph Chen
374ae33e311SJoseph Chen		if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
375ae33e311SJoseph Chen			echo "ERROR: CONFIG_FIT_SIGNATURE is disabled"
376ae33e311SJoseph Chen			exit 1
377ae33e311SJoseph Chen		fi
378ae33e311SJoseph Chen
379ae33e311SJoseph Chen		if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then
380ae33e311SJoseph Chen			ARG_ROLLBACK_PROTECT="y"
381ae33e311SJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then
382ae33e311SJoseph Chen				echo "ERROR: No arg \"--rollback-index-boot <n>\""
383ae33e311SJoseph Chen				exit 1
384ae33e311SJoseph Chen			fi
385ae33e311SJoseph Chen		fi
386ae33e311SJoseph Chen
387ae33e311SJoseph Chen		# fixup
388ae33e311SJoseph Chen		COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'`
389ae33e311SJoseph Chen		FDT_ADDR_R=`awk /fdt_addr_r/         ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
390ae33e311SJoseph Chen		KERNEL_ADDR_R=`awk /kernel_addr_r/   ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
391ae33e311SJoseph Chen		RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
392ae33e311SJoseph Chen		sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g"         ${ITS_BOOT}
393ae33e311SJoseph Chen		sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g"   ${ITS_BOOT}
394ae33e311SJoseph Chen		sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT}
395ae33e311SJoseph Chen		if grep -q '^CONFIG_ARM64=y' .config ; then
396ae33e311SJoseph Chen			sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_BOOT}
397ae33e311SJoseph Chen		fi
398ae33e311SJoseph Chen
399ae33e311SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
40041290645SJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '`
40141290645SJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT}
402ae33e311SJoseph Chen		fi
403ae33e311SJoseph Chen
404ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_BOOT} -v ${ARG_VER_BOOT}
405ae33e311SJoseph Chen		mv ${SIG_BIN} ${SIG_BOOT}
406ae33e311SJoseph Chen
407ae33e311SJoseph Chen		# rollback-index read back check
408ae33e311SJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
409ae33e311SJoseph Chen			VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index`
410ae33e311SJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then
411ae33e311SJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}";
412ae33e311SJoseph Chen				exit 1
413ae33e311SJoseph Chen			fi
414ae33e311SJoseph Chen		fi
415ae33e311SJoseph Chen
416374d2596SJoseph Chen		# host check signature
417ae33e311SJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
418ae33e311SJoseph Chen			 ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB}
419ae33e311SJoseph Chen		fi
420ae33e311SJoseph Chen
421374d2596SJoseph Chen		# minimize u-boot.dtb: clearn as 0 but not remove property.
422ae33e311SJoseph Chen		if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then
423ae33e311SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
424ae33e311SJoseph Chen			if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then
425b800cd5aSJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
426ae33e311SJoseph Chen			else
427b800cd5aSJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
428ae33e311SJoseph Chen			fi
429ae33e311SJoseph Chen		else
430b800cd5aSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
431b800cd5aSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
432b800cd5aSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
433ae33e311SJoseph Chen		fi
434134814e5SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c
435134814e5SJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np
436ae33e311SJoseph Chen	fi
437ae33e311SJoseph Chen
438ae33e311SJoseph Chen	mv ${ITS_BOOT} ${FIT_DIR}
439ae33e311SJoseph Chen}
440ae33e311SJoseph Chen
4414b1cd58cSJoseph Chenfunction fit_gen_recovery_itb()
4424b1cd58cSJoseph Chen{
4434b1cd58cSJoseph Chen	if [ ! -z ${ARG_RECOVERY_IMG} ]; then
4444b1cd58cSJoseph Chen		${FIT_UNPACK} -f ${ARG_RECOVERY_IMG} -o ${FIT_DIR}/unpack
4454b1cd58cSJoseph Chen		ITS_RECOVERY="${FIT_DIR}/unpack/image.its"
4464b1cd58cSJoseph Chen	else
4474b1cd58cSJoseph Chen		echo "ERROR: No recovery.img"
4484b1cd58cSJoseph Chen		exit 1
4494b1cd58cSJoseph Chen	fi
4504b1cd58cSJoseph Chen
4514b1cd58cSJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
452ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_RECOVERY} -E -p ${OFFS_DATA} ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY}
4534b1cd58cSJoseph Chen	else
4544b1cd58cSJoseph Chen		if [ ! -f ${RSA_PRI_KEY}  ]; then
4554b1cd58cSJoseph Chen			echo "ERROR: No ${RSA_PRI_KEY}"
4564b1cd58cSJoseph Chen			exit 1
4574b1cd58cSJoseph Chen		elif [ ! -f ${RSA_PUB_KEY}  ]; then
4584b1cd58cSJoseph Chen			echo "ERROR: No ${RSA_PUB_KEY}"
4594b1cd58cSJoseph Chen			exit 1
4604b1cd58cSJoseph Chen		fi
4614b1cd58cSJoseph Chen
4624b1cd58cSJoseph Chen		if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
4634b1cd58cSJoseph Chen			echo "ERROR: CONFIG_FIT_SIGNATURE is disabled"
4644b1cd58cSJoseph Chen			exit 1
4654b1cd58cSJoseph Chen		fi
4664b1cd58cSJoseph Chen
4674b1cd58cSJoseph Chen		if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then
4684b1cd58cSJoseph Chen			ARG_ROLLBACK_PROTECT="y"
4694b1cd58cSJoseph Chen			if [ -z ${ARG_ROLLBACK_IDX_RECOVERY} ]; then
4704b1cd58cSJoseph Chen				echo "ERROR: No arg \"--rollback-index-recovery <n>\""
4714b1cd58cSJoseph Chen				exit 1
4724b1cd58cSJoseph Chen			fi
4734b1cd58cSJoseph Chen		fi
4744b1cd58cSJoseph Chen
4754b1cd58cSJoseph Chen		# fixup
4764b1cd58cSJoseph Chen		COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'`
4774b1cd58cSJoseph Chen		FDT_ADDR_R=`awk /fdt_addr_r/         ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
4784b1cd58cSJoseph Chen		KERNEL_ADDR_R=`awk /kernel_addr_r/   ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
4794b1cd58cSJoseph Chen		RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'`
4804b1cd58cSJoseph Chen		sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g"         ${ITS_RECOVERY}
4814b1cd58cSJoseph Chen		sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g"   ${ITS_RECOVERY}
4824b1cd58cSJoseph Chen		sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_RECOVERY}
4834b1cd58cSJoseph Chen		if grep -q '^CONFIG_ARM64=y' .config ; then
4844b1cd58cSJoseph Chen			sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_RECOVERY}
4854b1cd58cSJoseph Chen		fi
4864b1cd58cSJoseph Chen
4874b1cd58cSJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
4884b1cd58cSJoseph Chen			VERSION=`grep 'rollback-index' ${ITS_RECOVERY} | awk -F '=' '{ printf $2 }' | tr -d ' '`
4894b1cd58cSJoseph Chen			sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_RECOVERY}>;/g" ${ITS_RECOVERY}
4904b1cd58cSJoseph Chen		fi
4914b1cd58cSJoseph Chen
492ac05169aSJoseph Chen		${MKIMAGE} -f ${ITS_RECOVERY} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY}
4934b1cd58cSJoseph Chen		mv ${SIG_BIN} ${SIG_RECOVERY}
4944b1cd58cSJoseph Chen
4954b1cd58cSJoseph Chen		# rollback-index read back check
4964b1cd58cSJoseph Chen		if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
4974b1cd58cSJoseph Chen			VERSION=`fdtget -ti ${ITB_RECOVERY} /configurations/conf rollback-index`
4984b1cd58cSJoseph Chen			if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_RECOVERY}" ]; then
4994b1cd58cSJoseph Chen				echo "ERROR: Failed to set rollback-index for ${ITB_RECOVERY}";
5004b1cd58cSJoseph Chen				exit 1
5014b1cd58cSJoseph Chen			fi
5024b1cd58cSJoseph Chen		fi
5034b1cd58cSJoseph Chen
5044b1cd58cSJoseph Chen		# host check signature
5054b1cd58cSJoseph Chen		if [ "${ARG_NO_CHECK}" != "y" ]; then
5064b1cd58cSJoseph Chen			 ${CHECK_SIGN} -f ${ITB_RECOVERY} -k ${UBOOT_DTB}
5074b1cd58cSJoseph Chen		fi
5084b1cd58cSJoseph Chen
5094b1cd58cSJoseph Chen		# minimize u-boot.dtb: clearn as 0 but not remove property.
5104b1cd58cSJoseph Chen		if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then
5114b1cd58cSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
5124b1cd58cSJoseph Chen			if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then
5134b1cd58cSJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
5144b1cd58cSJoseph Chen			else
5154b1cd58cSJoseph Chen				fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
5164b1cd58cSJoseph Chen			fi
5174b1cd58cSJoseph Chen		else
5184b1cd58cSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
5194b1cd58cSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
5204b1cd58cSJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
5214b1cd58cSJoseph Chen		fi
5224b1cd58cSJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c
5234b1cd58cSJoseph Chen		fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np
5244b1cd58cSJoseph Chen	fi
5254b1cd58cSJoseph Chen
5264b1cd58cSJoseph Chen	mv ${ITS_RECOVERY} ${FIT_DIR}
5274b1cd58cSJoseph Chen}
5284b1cd58cSJoseph Chen
529ae33e311SJoseph Chenfunction fit_gen_uboot_img()
530ae33e311SJoseph Chen{
531ae33e311SJoseph Chen	ITB=$1
532ae33e311SJoseph Chen
533ae33e311SJoseph Chen	if [ -z ${ITB} ]; then
534ae33e311SJoseph Chen		ITB=${ITB_UBOOT}
535ae33e311SJoseph Chen	fi
536ae33e311SJoseph Chen
537ae33e311SJoseph Chen	ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'`
538ae33e311SJoseph Chen	ITB_MAX_KB=`sed  -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'`
539ae33e311SJoseph Chen	ITB_MAX_BS=$((ITB_MAX_KB*1024))
540ae33e311SJoseph Chen	ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'`
541ae33e311SJoseph Chen
542ae33e311SJoseph Chen	if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then
543ae33e311SJoseph Chen		echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes"
544ae33e311SJoseph Chen		exit 1
545ae33e311SJoseph Chen	fi
546ae33e311SJoseph Chen
547ae33e311SJoseph Chen	rm -f ${IMG_UBOOT}
548ae33e311SJoseph Chen	for ((i = 0; i < ${ITB_MAX_NUM}; i++));
549ae33e311SJoseph Chen	do
550ae33e311SJoseph Chen		cat ${ITB} >> ${IMG_UBOOT}
551ae33e311SJoseph Chen		truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT}
552ae33e311SJoseph Chen	done
553ae33e311SJoseph Chen}
554ae33e311SJoseph Chen
555ae33e311SJoseph Chenfunction fit_gen_boot_img()
556ae33e311SJoseph Chen{
557ae33e311SJoseph Chen	ITB=$1
558ae33e311SJoseph Chen
559ae33e311SJoseph Chen	if [ -z ${ITB} ]; then
560ae33e311SJoseph Chen		ITB=${ITB_BOOT}
561ae33e311SJoseph Chen	fi
562ae33e311SJoseph Chen
563ae33e311SJoseph Chen	if [ "${ITB}" != "${IMG_BOOT}" ]; then
564ae33e311SJoseph Chen		cp ${ITB} ${IMG_BOOT} -f
565ae33e311SJoseph Chen	fi
566ae33e311SJoseph Chen}
567ae33e311SJoseph Chen
5684b1cd58cSJoseph Chenfunction fit_gen_recovery_img()
5694b1cd58cSJoseph Chen{
5704b1cd58cSJoseph Chen	ITB=$1
5714b1cd58cSJoseph Chen
5724b1cd58cSJoseph Chen	if [ -z ${ITB} ]; then
5734b1cd58cSJoseph Chen		ITB=${ITB_RECOVERY}
5744b1cd58cSJoseph Chen	fi
5754b1cd58cSJoseph Chen
5764b1cd58cSJoseph Chen	if [ "${ITB}" != "${IMG_RECOVERY}" ]; then
5774b1cd58cSJoseph Chen		cp ${ITB} ${IMG_RECOVERY} -f
5784b1cd58cSJoseph Chen	fi
5794b1cd58cSJoseph Chen}
5804b1cd58cSJoseph Chen
581*2a0b9372SJoseph Chenfunction fit_gen_loader()
582*2a0b9372SJoseph Chen{
583*2a0b9372SJoseph Chen	if grep -Eq '^CONFIG_FIT_SIGNATURE=y' .config ; then
584*2a0b9372SJoseph Chen		${RK_SIGN_TOOL} cc --chip ${ARG_CHIP: 2: 6}
585*2a0b9372SJoseph Chen		${RK_SIGN_TOOL} sl --key ./keys/dev.key --pubkey ./keys/dev.pubkey --loader *_loader_*.bin
586*2a0b9372SJoseph Chen	fi
587*2a0b9372SJoseph Chen}
588*2a0b9372SJoseph Chen
589ae33e311SJoseph Chenfunction fit_msg_uboot()
590ae33e311SJoseph Chen{
5912d11b868SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
592ae33e311SJoseph Chen		MSG_SIGN="no-signed"
593ae33e311SJoseph Chen	else
594ae33e311SJoseph Chen		MSG_SIGN="signed"
595ae33e311SJoseph Chen	fi
596ae33e311SJoseph Chen
597ae33e311SJoseph Chen	VERSION=`fdtget -ti ${ITB_UBOOT} / version`
598ae33e311SJoseph Chen	if [ "${VERSION}" != "" ]; then
599ae33e311SJoseph Chen		MSG_VER=", version=${VERSION}"
600ae33e311SJoseph Chen	fi
601ae33e311SJoseph Chen
602ae33e311SJoseph Chen	if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
603ae33e311SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}):  ${IMG_UBOOT} (with uboot, trust...) is ready"
604ae33e311SJoseph Chen	else
605ae33e311SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}):  ${IMG_UBOOT} (FIT with uboot, trust...) is ready"
606ae33e311SJoseph Chen	fi
607ae33e311SJoseph Chen}
608ae33e311SJoseph Chen
609ae33e311SJoseph Chenfunction fit_msg_boot()
610ae33e311SJoseph Chen{
6114b1cd58cSJoseph Chen	if [ -z "${ARG_BOOT_IMG}" ]; then
6124b1cd58cSJoseph Chen		return;
6134b1cd58cSJoseph Chen	fi
6144b1cd58cSJoseph Chen
6152d11b868SJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
616ae33e311SJoseph Chen		MSG_SIGN="no-signed"
617ae33e311SJoseph Chen	else
618ae33e311SJoseph Chen		MSG_SIGN="signed"
619ae33e311SJoseph Chen	fi
620ae33e311SJoseph Chen
621ae33e311SJoseph Chen	VERSION=`fdtget -ti ${ITB_BOOT} / version`
622ae33e311SJoseph Chen	if [ "${VERSION}" != "" ]; then
623ae33e311SJoseph Chen		MSG_VER=", version=${VERSION}"
624ae33e311SJoseph Chen	fi
625ae33e311SJoseph Chen
626ae33e311SJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
627ae33e311SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}):  ${IMG_BOOT} is ready"
628ae33e311SJoseph Chen	else
629ae33e311SJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}):  ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready"
630ae33e311SJoseph Chen	fi
631ae33e311SJoseph Chen}
632ae33e311SJoseph Chen
6334b1cd58cSJoseph Chenfunction fit_msg_recovery()
6344b1cd58cSJoseph Chen{
6354b1cd58cSJoseph Chen	if [ -z "${ARG_RECOVERY_IMG}" ]; then
6364b1cd58cSJoseph Chen		return;
6374b1cd58cSJoseph Chen	fi
6384b1cd58cSJoseph Chen
6394b1cd58cSJoseph Chen	if [ "${ARG_SIGN}" != "y" ]; then
6404b1cd58cSJoseph Chen		MSG_SIGN="no-signed"
6414b1cd58cSJoseph Chen	else
6424b1cd58cSJoseph Chen		MSG_SIGN="signed"
6434b1cd58cSJoseph Chen	fi
6444b1cd58cSJoseph Chen
6454b1cd58cSJoseph Chen	VERSION=`fdtget -ti ${ITB_RECOVERY} / version`
6464b1cd58cSJoseph Chen	if [ "${VERSION}" != "" ]; then
6474b1cd58cSJoseph Chen		MSG_VER=", version=${VERSION}"
6484b1cd58cSJoseph Chen	fi
6494b1cd58cSJoseph Chen
6504b1cd58cSJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
6514b1cd58cSJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_RECOVERY}):  ${IMG_RECOVERY} is ready"
6524b1cd58cSJoseph Chen	else
6534b1cd58cSJoseph Chen		echo "Image(${MSG_SIGN}${MSG_VER}):  ${IMG_RECOVERY} (FIT with kernel, fdt, resource...) is ready"
6544b1cd58cSJoseph Chen	fi
6554b1cd58cSJoseph Chen}
6564b1cd58cSJoseph Chen
657ae33e311SJoseph Chenfunction fit_msg_loader()
658ae33e311SJoseph Chen{
659ae33e311SJoseph Chen	LOADER=`ls *loader*.bin`
660*2a0b9372SJoseph Chen
661*2a0b9372SJoseph Chen	if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
662*2a0b9372SJoseph Chen		echo "Image(signed):  ${LOADER} (with spl, ddr, usbplug) is ready"
663*2a0b9372SJoseph Chen	else
664ae33e311SJoseph Chen		echo "Image(no-signed):  ${LOADER} (with spl, ddr, usbplug) is ready"
665*2a0b9372SJoseph Chen	fi
666ae33e311SJoseph Chen}
667ae33e311SJoseph Chen
668ae33e311SJoseph Chenfit_process_args $*
6694b1cd58cSJoseph Chen
670ae33e311SJoseph Chenif [ ! -z "${ARG_VALIDATE}" ]; then
671ae33e311SJoseph Chen	validate_arg ${ARG_VALIDATE}
6722d11b868SJoseph Chenelse
6734b1cd58cSJoseph Chen	fit_raw_compile
6744b1cd58cSJoseph Chen	if [ ! -z "${ARG_RECOVERY_IMG}" ]; then
6754b1cd58cSJoseph Chen		fit_gen_recovery_itb
6764b1cd58cSJoseph Chen		fit_gen_recovery_img
677ae33e311SJoseph Chen	fi
6784b1cd58cSJoseph Chen	# "--boot_img_dir" is for U-Boot debug only
6794b1cd58cSJoseph Chen	if [ ! -z "${ARG_BOOT_IMG}" -o ! -z "${ARG_BOOT_IMG_DIR}" ]; then
6804b1cd58cSJoseph Chen		fit_gen_boot_itb
6814b1cd58cSJoseph Chen		fit_gen_boot_img
6824b1cd58cSJoseph Chen	fi
6834b1cd58cSJoseph Chen	fit_gen_uboot_itb
6844b1cd58cSJoseph Chen	fit_gen_uboot_img
685*2a0b9372SJoseph Chen	fit_gen_loader
686ae33e311SJoseph Chen
6874b1cd58cSJoseph Chen	echo
6884b1cd58cSJoseph Chen	fit_msg_uboot
6894b1cd58cSJoseph Chen	fit_msg_recovery
6904b1cd58cSJoseph Chen	fit_msg_boot
6914b1cd58cSJoseph Chen	fit_msg_loader
6924b1cd58cSJoseph Chenfi
693