xref: /rk3399_rockchip-uboot/scripts/fit-core.sh (revision 1e9dc3b87cb0e06e528c0111426773078a304391)
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}