xref: /rk3399_rockchip-uboot/make.sh (revision f9976ae435ba5209eebdfd3f07134a211c5a7210)
1de440615SJoseph Chen#!/bin/bash
2f7bec228SJoseph Chen#
3f7bec228SJoseph Chen# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
4f7bec228SJoseph Chen#
5f7bec228SJoseph Chen# SPDX-License-Identifier: GPL-2.0
6f7bec228SJoseph Chen#
7f7bec228SJoseph Chen
8cd7ae718SJoseph Chenset -e
927a50c86SAndy YanJOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`
10b6255198SJoseph ChenSUPPORT_LIST=`ls configs/*[r,p][x,v,k][0-9][0-9]*_defconfig`
1127a50c86SAndy Yan
120583701dSJoseph Chen# @LOADER: map to $RKCHIP_LOADER for loader ini
130583701dSJoseph Chen# @TRUST:  map to $RKCHIP_TRUST for trust ini
140583701dSJoseph Chen# @LABEL:  map to $RKCHIP_LEBEL for verbose message
150583701dSJoseph Chen# @-:      default state/value
160583701dSJoseph ChenCHIP_TYPE_FIXUP_TABLE=(
170583701dSJoseph Chen	# CONFIG_XXX                         RKCHIP         LOADER       TRUST         LABEL
180583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3368              RK3368H         -            -             -"
190583701dSJoseph Chen	"CONFIG_ROCKCHIP_RV1108              RV110X          -            -             -"
200583701dSJoseph Chen	"CONFIG_ROCKCHIP_PX3SE               PX3SE           -            -             -"
210583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3126              RK3126          -            -             -"
220583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3326              RK3326          -            -             -"
230583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3128X             RK3128X         -            -             -"
240583701dSJoseph Chen	"CONFIG_ROCKCHIP_PX5                 PX5             -            -             -"
250583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3399PRO           RK3399PRO       -            -             -"
260583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK1806              RK1806          -            -             -"
270583701dSJoseph Chen	"CONFIG_TARGET_GVA_RK3229            RK322X          RK322XAT     -             -"
280583701dSJoseph Chen	"CONFIG_COPROCESSOR_RK1808           RKNPU-LION      RKNPULION    RKNPULION     -"
290583701dSJoseph Chen)
300583701dSJoseph Chen
310583701dSJoseph Chen# <*> Fixup rsa/sha pack mode for platforms
320583701dSJoseph Chen#     RSA: RK3308/PX30/RK3326/RK1808 use RSA-PKCS1 V2.1, it's pack magic is "3", and others use default configure.
330583701dSJoseph Chen#     SHA: RK3368 use rk big endian SHA256, it's pack magic is "2", and others use default configure.
340583701dSJoseph Chen# <*> Fixup images size pack for platforms
350583701dSJoseph Chen# <*> Fixup verbose message about AARCH32
36de440615SJoseph Chen#
370583701dSJoseph Chen# @RSA:     rsa mode
380583701dSJoseph Chen# @SHA:     sha mode
390583701dSJoseph Chen# @A64-KB:  arm64 platform image size: [uboot,trust]
400583701dSJoseph Chen# @A64-NUM: arm64 platform image number of total: [uboot,trust]
410583701dSJoseph Chen# @A32-KB:  arm32 platform image size: [uboot,trust]
420583701dSJoseph Chen# @A32-NUM: arm32 platform image number of total: [uboot,trust]
430583701dSJoseph Chen# @LOADER:  map to $RKCHIP_LOADER for loader ini
440583701dSJoseph Chen# @TRUST:   map to $RKCHIP_TRUST for trust ini
450583701dSJoseph Chen# @-:       default state/value
460583701dSJoseph ChenCHIP_CFG_FIXUP_TABLE=(
470583701dSJoseph Chen	# CONFIG_XXX              RSA     SHA     A64-KB      A64-NUM     A32-KB       A32-NUM      LOAER        TRUST
480583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3368    -       2       -,-          -,-        -,-          -,-           -           -"
490583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3036    -       -       512,512      1,1        -,-          -,-           -           -"
500583701dSJoseph Chen	"CONFIG_ROCKCHIP_PX30      3       -       -,-          -,-        -,-          -,-           -           -"
510583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3326    3       -       -,-          -,-        -,-          -,-           AARCH32     -"
520583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK3308    3       -       1024,1024    2,2        512,512      2,2           -           AARCH32"
530583701dSJoseph Chen	"CONFIG_ROCKCHIP_RK1808    3       -       1024,1024    2,2        -,-          -,-           -           -"
542e566761SJoseph Chen	"CONFIG_ROCKCHIP_RV1126    3       -       -,-          -,-        -,-          -,-           -           -"
55de440615SJoseph Chen)
56de440615SJoseph Chen
57fb90bd1dSJoseph Chen########################################### User can modify #############################################
58fb90bd1dSJoseph Chen# User's rkbin tool relative path
59bc98b3c8SJoseph ChenRKBIN_TOOLS=../rkbin/tools
60bc98b3c8SJoseph Chen
61fb90bd1dSJoseph Chen# User's GCC toolchain and relative path
6253ea5791SJoseph ChenADDR2LINE_ARM32=arm-linux-gnueabihf-addr2line
6353ea5791SJoseph ChenADDR2LINE_ARM64=aarch64-linux-gnu-addr2line
64fb90bd1dSJoseph ChenOBJ_ARM32=arm-linux-gnueabihf-objdump
65fb90bd1dSJoseph ChenOBJ_ARM64=aarch64-linux-gnu-objdump
66d8540eacSJoseph ChenGCC_ARM32=arm-linux-gnueabihf-
67d8540eacSJoseph ChenGCC_ARM64=aarch64-linux-gnu-
68d8540eacSJoseph ChenTOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin
69d8540eacSJoseph ChenTOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
70fb90bd1dSJoseph Chen
71fb90bd1dSJoseph Chen########################################### User not touch #############################################
7223ba6841SJoseph ChenRKTOOLS=./tools
7323ba6841SJoseph Chen
74de440615SJoseph Chen# Declare global INI file searching index name for every chip, update in select_chip_info()
750583701dSJoseph ChenRKCHIP="-"
760583701dSJoseph ChenRKCHIP_LABEL="-"
770583701dSJoseph ChenRKCHIP_LOADER="-"
780583701dSJoseph ChenRKCHIP_TRUST="-"
79d443b7d5SJoseph Chen
80b768b915SJoseph ChenINI_TRUST=
81b768b915SJoseph ChenINI_LOADER=
82b768b915SJoseph Chen
8323ba6841SJoseph Chen# Declare rkbin repository path, updated in prepare()
84fb90bd1dSJoseph ChenRKBIN=
85fb90bd1dSJoseph Chen
86fb90bd1dSJoseph Chen# Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain()
87fb90bd1dSJoseph ChenTOOLCHAIN_GCC=
88fb90bd1dSJoseph ChenTOOLCHAIN_OBJDUMP=
8953ea5791SJoseph ChenTOOLCHAIN_ADDR2LINE=
90fb90bd1dSJoseph Chen
9141cf5e5aSJoseph Chen# Declare global plaform configure, updated in fixup_platform_configure()
9241cf5e5aSJoseph ChenPLATFORM_RSA=
9341cf5e5aSJoseph ChenPLATFORM_SHA=
94b42b4e11SJoseph ChenPLATFORM_UBOOT_SIZE=
95b42b4e11SJoseph ChenPLATFORM_TRUST_SIZE=
96b42b4e11SJoseph ChenPLATFORM_TYPE="RKFW"
97aa8ddc58SJoseph Chen
98fb90bd1dSJoseph Chen#########################################################################################################
997c3ca500SJoseph Chenfunction help()
100b6255198SJoseph Chen{
101b6255198SJoseph Chen	echo
1026a764259SJoseph Chen	echo "Usage:"
103b768b915SJoseph Chen	echo "	./make.sh [board|sub-command]"
1046a764259SJoseph Chen	echo
1056a764259SJoseph Chen	echo "	 - board:        board name of defconfig"
10607329002SJoseph Chen	echo "	 - sub-command:  elf*|loader*|spl*|tpl*|itb|trust*|uboot|map|sym|<addr>"
107f3d60245SJoseph Chen	echo "	 - ini:          assigned ini file to pack trust/loader"
108f3d60245SJoseph Chen	echo
109f3d60245SJoseph Chen	echo "Output:"
110f3d60245SJoseph Chen	echo "	 When board built okay, there are uboot/trust/loader images in current directory"
111b6255198SJoseph Chen	echo
112b6255198SJoseph Chen	echo "Example:"
113b6255198SJoseph Chen	echo
114d6821889SJoseph Chen	echo "1. Build:"
115fc99e044SJoseph Chen	echo "	./make.sh evb-rk3399               --- build for evb-rk3399_defconfig"
116fc99e044SJoseph Chen	echo "	./make.sh firefly-rk3288           --- build for firefly-rk3288_defconfig"
117622ccf34SJoseph Chen	echo "	./make.sh EXT_DTB=rk-kernel.dtb    --- build with exist .config and external dtb"
118fc99e044SJoseph Chen	echo "	./make.sh                          --- build with exist .config"
119398d3e80SJoseph Chen	echo "	./make.sh env                      --- build envtools"
120b6255198SJoseph Chen	echo
121d6821889SJoseph Chen	echo "2. Pack:"
1226a764259SJoseph Chen	echo "	./make.sh uboot                    --- pack uboot.img"
12369cce37bSJoseph Chen	echo "	./make.sh trust                    --- pack trust.img"
124f3d60245SJoseph Chen	echo "	./make.sh trust <ini>              --- pack trust img with assigned ini file"
1256a764259SJoseph Chen	echo "	./make.sh loader                   --- pack loader bin"
126f3d60245SJoseph Chen	echo "	./make.sh loader <ini>             --- pack loader img with assigned ini file"
127f3d60245SJoseph Chen	echo "	./make.sh spl                      --- pack loader with u-boot-spl.bin and u-boot-tpl.bin"
128f3d60245SJoseph Chen	echo "	./make.sh spl-s                    --- pack loader only replace miniloader with u-boot-spl.bin"
129f3d60245SJoseph Chen	echo "	./make.sh itb                      --- pack u-boot.itb(TODO: bl32 is not included for ARMv8)"
130b6255198SJoseph Chen	echo
131d6821889SJoseph Chen	echo "3. Debug:"
132b6255198SJoseph Chen	echo "	./make.sh elf                      --- dump elf file with -D(default)"
133b6255198SJoseph Chen	echo "	./make.sh elf-S                    --- dump elf file with -S"
1346a764259SJoseph Chen	echo "	./make.sh elf-d                    --- dump elf file with -d"
135f3d60245SJoseph Chen	echo "	./make.sh elf-*                    --- dump elf file with -*"
136fc99e044SJoseph Chen	echo "	./make.sh <no reloc_addr>          --- dump function symbol and code position of address(no relocated)"
137fc99e044SJoseph Chen	echo "	./make.sh <reloc_addr-reloc_off>   --- dump function symbol and code position of address(relocated)"
138b6255198SJoseph Chen	echo "	./make.sh map                      --- cat u-boot.map"
139b6255198SJoseph Chen	echo "	./make.sh sym                      --- cat u-boot.sym"
140b6255198SJoseph Chen}
14141cf5e5aSJoseph Chen
1427c3ca500SJoseph Chenfunction prepare()
143cd7ae718SJoseph Chen{
144bc98b3c8SJoseph Chen	if [ -d ${RKBIN_TOOLS} ]; then
145bc98b3c8SJoseph Chen		absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd)
146bc98b3c8SJoseph Chen		RKBIN=${absolute_path}
147cd7ae718SJoseph Chen	else
148b768b915SJoseph Chen		echo "ERROR: No ../rkbin repository"
149cd7ae718SJoseph Chen		exit 1
150cd7ae718SJoseph Chen	fi
15169b6e590SJoseph Chen
1527c3ca500SJoseph Chen	if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' .config ; then
1537c3ca500SJoseph Chen		ARM64_TRUSTZONE="y"
1547c3ca500SJoseph Chen	fi
1557c3ca500SJoseph Chen
15669b6e590SJoseph Chen	if grep  -q '^CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y' .config ; then
157b42b4e11SJoseph Chen		PLATFORM_TYPE="FIT"
158b768b915SJoseph Chen	fi
159b768b915SJoseph Chen}
160b768b915SJoseph Chen
161b768b915SJoseph Chenfunction process_args()
162b768b915SJoseph Chen{
163b768b915SJoseph Chen	while [ $# -gt 0 ]; do
164b768b915SJoseph Chen		case $1 in
165b768b915SJoseph Chen			--help|-help|help|--h|-h)
166b768b915SJoseph Chen				help
167b768b915SJoseph Chen				exit 0
168b768b915SJoseph Chen				;;
169b42b4e11SJoseph Chen
170*f9976ae4SJoseph Chen			''|loader|trust|uboot|spl*|tpl*|debug*|itb|env|fit*)
171b42b4e11SJoseph Chen				ARG_CMD=$1
172b768b915SJoseph Chen				shift 1
173b768b915SJoseph Chen				;;
174b42b4e11SJoseph Chen
175*f9976ae4SJoseph Chen			--no-pack)
176*f9976ae4SJoseph Chen				ARG_NO_PACK="y"
177*f9976ae4SJoseph Chen				shift 1
178*f9976ae4SJoseph Chen				;;
179*f9976ae4SJoseph Chen
180*f9976ae4SJoseph Chen			--no-uboot)
181*f9976ae4SJoseph Chen				ARG_NO_UBOOT="y"
182*f9976ae4SJoseph Chen				shift 1
183*f9976ae4SJoseph Chen				;;
184*f9976ae4SJoseph Chen
185b768b915SJoseph Chen			map|sym|elf*)
186b42b4e11SJoseph Chen				ARG_CMD=$1
187b42b4e11SJoseph Chen				if [ "$2" == "spl" -o "$2" == "tpl" ]; then
188b768b915SJoseph Chen					ARG_S_TPL=$2
189b768b915SJoseph Chen					shift 1
190b768b915SJoseph Chen				fi
191b768b915SJoseph Chen				shift 1
192b768b915SJoseph Chen				;;
193b42b4e11SJoseph Chen
1941ff581bbSJoseph Chen			*.ini)
195b768b915SJoseph Chen				if [ ! -f $1 ]; then
196b768b915SJoseph Chen					echo "ERROR: No $1"
197b768b915SJoseph Chen				fi
198b768b915SJoseph Chen				if grep -q 'CODE471_OPTION' $1 ; then
199b768b915SJoseph Chen					ARG_INI_LOADER=$1
200b768b915SJoseph Chen				elif grep -Eq ''BL31_OPTION'|'TOS'' $1 ; then
201b768b915SJoseph Chen					ARG_INI_TRUST=$1
202b768b915SJoseph Chen				fi
203b768b915SJoseph Chen				shift 1
204b768b915SJoseph Chen				;;
205b42b4e11SJoseph Chen
206b768b915SJoseph Chen			*)
2071ff581bbSJoseph Chen				# out scripts args
2081ff581bbSJoseph Chen				NUM=$(./scripts/fit-mkimg.sh --p-check $1)
209b42b4e11SJoseph Chen				if  [ ${NUM} -ne 0 ]; then
210b42b4e11SJoseph Chen					[ ${NUM} -eq 1 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1"
211b42b4e11SJoseph Chen					[ ${NUM} -eq 2 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1 $2"
2121ff581bbSJoseph Chen					shift ${NUM}
2131ff581bbSJoseph Chen					continue
214b768b915SJoseph Chen				# FUNC address
2151ff581bbSJoseph Chen				elif [ -z $(echo $1 | sed 's/[0-9,a-f,A-F,x,X,-]//g') ]; then
216b768b915SJoseph Chen					ARG_FUNCADDR=$1
2171ff581bbSJoseph Chen				# xxx_defconfig
218b768b915SJoseph Chen				else
219b768b915SJoseph Chen					ARG_BOARD=$1
220b768b915SJoseph Chen					if [ ! -f configs/${ARG_BOARD}_defconfig ]; then
221b768b915SJoseph Chen						echo -e "\n${SUPPORT_LIST}\n"
222b768b915SJoseph Chen						echo "ERROR: No configs/${ARG_BOARD}_defconfig"
223b768b915SJoseph Chen						exit 1
224b768b915SJoseph Chen					else
225b768b915SJoseph Chen						echo "make for ${ARG_BOARD}_defconfig by -j${JOB}"
226b42b4e11SJoseph Chen						make ${ARG_BOARD}_defconfig
227b768b915SJoseph Chen					fi
228b768b915SJoseph Chen				fi
229b768b915SJoseph Chen				shift 1
230b768b915SJoseph Chen				;;
231b768b915SJoseph Chen		esac
232b768b915SJoseph Chen	done
233b768b915SJoseph Chen
234b768b915SJoseph Chen	if [ ! -f .config ]; then
235b768b915SJoseph Chen		echo
236b768b915SJoseph Chen		echo "ERROR: No .config"
237b768b915SJoseph Chen		help
238b768b915SJoseph Chen		exit 1
23969b6e590SJoseph Chen	fi
24030b04afcSJoseph Chen}
2417c2526e9SJoseph Chen
2427c3ca500SJoseph Chenfunction select_toolchain()
24327a50c86SAndy Yan{
244d6821889SJoseph Chen	if grep -q '^CONFIG_ARM64=y' .config ; then
245bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM64} ]; then
246bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd)
247bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64}
2480ff0e214SJoseph Chen			TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64}
24953ea5791SJoseph Chen			TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM64}
250bc98b3c8SJoseph Chen		else
2517c3ca500SJoseph Chen			echo "ERROR: No toolchain: ${TOOLCHAIN_ARM64}"
252bc98b3c8SJoseph Chen			exit 1
25327a50c86SAndy Yan		fi
25427a50c86SAndy Yan	else
255bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM32} ]; then
256bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd)
257bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32}
2580ff0e214SJoseph Chen			TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32}
25953ea5791SJoseph Chen			TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32}
260bc98b3c8SJoseph Chen		else
2617c3ca500SJoseph Chen			echo "ERROR: No toolchain: ${TOOLCHAIN_ARM32}"
262bc98b3c8SJoseph Chen			exit 1
26327a50c86SAndy Yan		fi
26427a50c86SAndy Yan	fi
265bc98b3c8SJoseph Chen}
266bc98b3c8SJoseph Chen
2677c3ca500SJoseph Chenfunction sub_commands()
2680ff0e214SJoseph Chen{
269f9afd3dcSJoseph Chen	# skip "--" parameter, such as "--rollback-index-..."
270b42b4e11SJoseph Chen	if [[ "${ARG_CMD}" != "--*" ]]; then
271b42b4e11SJoseph Chen		cmd=${ARG_CMD%-*}
272b42b4e11SJoseph Chen		arg=${ARG_CMD#*-}
273f9afd3dcSJoseph Chen	else
274b42b4e11SJoseph Chen		cmd=${ARG_CMD}
275f9afd3dcSJoseph Chen	fi
276f9afd3dcSJoseph Chen
277b42b4e11SJoseph Chen	if [ "${ARG_S_TPL}" == "tpl" -o "${ARG_S_TPL}" == "spl" ]; then
278b768b915SJoseph Chen		elf=`find -name u-boot-${ARG_S_TPL}`
279b768b915SJoseph Chen		map=`find -name u-boot-${ARG_S_TPL}.map`
280b768b915SJoseph Chen		sym=`find -name u-boot-${ARG_S_TPL}.sym`
281b768b915SJoseph Chen	else
2827c3ca500SJoseph Chen		elf=u-boot
2837c3ca500SJoseph Chen		map=u-boot.map
2847c3ca500SJoseph Chen		sym=u-boot.sym
28534bdfea0SJoseph Chen	fi
2860ff0e214SJoseph Chen
287b42b4e11SJoseph Chen	case ${cmd} in
288b6255198SJoseph Chen		elf)
2897c3ca500SJoseph Chen			if [ ! -f ${elf} ]; then
2907c3ca500SJoseph Chen				echo "ERROR: No elf: ${elf}"
2910ff0e214SJoseph Chen				exit 1
2920ff0e214SJoseph Chen			else
293b42b4e11SJoseph Chen				if [ "${cmd}" == "elf" -a "${arg}" == "elf" ]; then
294b42b4e11SJoseph Chen					arg=D # default
2950ff0e214SJoseph Chen				fi
296b42b4e11SJoseph Chen				${TOOLCHAIN_OBJDUMP} -${arg} ${elf} | less
29707de173aSJoseph Chen				exit 0
29807de173aSJoseph Chen			fi
299b6255198SJoseph Chen			;;
300b6255198SJoseph Chen
3011b6c85a0SJoseph Chen		debug)
302b42b4e11SJoseph Chen			./scripts/rkpatch.sh ${arg}
3031b6c85a0SJoseph Chen			exit 0
3041b6c85a0SJoseph Chen			;;
3051b6c85a0SJoseph Chen
30669b6e590SJoseph Chen		fit)
307b42b4e11SJoseph Chen			if [ "${arg}" == "ns" ]; then
308cc0b1aa3SJoseph Chen				./scripts/fit-mkimg.sh --uboot-itb --boot-itb --no-vboot ${ARG_FIT}
3096cf81e27SJoseph Chen			fi
31069b6e590SJoseph Chen			exit 0
31169b6e590SJoseph Chen			;;
31269b6e590SJoseph Chen
313b6255198SJoseph Chen		map)
31434bdfea0SJoseph Chen			cat ${map} | less
315b6255198SJoseph Chen			exit 0
316b6255198SJoseph Chen			;;
317b6255198SJoseph Chen
318b6255198SJoseph Chen		sym)
31934bdfea0SJoseph Chen			cat ${sym} | less
320b6255198SJoseph Chen			exit 0
321b6255198SJoseph Chen			;;
322b6255198SJoseph Chen
323b6255198SJoseph Chen		trust)
324d6e1155eSJoseph Chen			pack_trust_image
325a43a18b2SJoseph Chen			exit 0
326b6255198SJoseph Chen			;;
327b6255198SJoseph Chen
328b6255198SJoseph Chen		loader)
329d6e1155eSJoseph Chen			pack_loader_image
330a43a18b2SJoseph Chen			exit 0
331b6255198SJoseph Chen			;;
332b6255198SJoseph Chen
33307329002SJoseph Chen		tpl|spl)
33407329002SJoseph Chen			pack_spl_loader_image ${ARG_CMD}
335daa3bef5SJoseph Chen			exit 0
336daa3bef5SJoseph Chen			;;
337daa3bef5SJoseph Chen
338daa3bef5SJoseph Chen		itb)
339daa3bef5SJoseph Chen			pack_uboot_itb_image
340daa3bef5SJoseph Chen			exit 0
341daa3bef5SJoseph Chen			;;
342daa3bef5SJoseph Chen
343b6255198SJoseph Chen		uboot)
344b768b915SJoseph Chen			pack_uboot_image
345fb90bd1dSJoseph Chen			exit 0
346b6255198SJoseph Chen			;;
347b6255198SJoseph Chen
348398d3e80SJoseph Chen		env)
349398d3e80SJoseph Chen			make CROSS_COMPILE=${TOOLCHAIN_GCC} envtools
350398d3e80SJoseph Chen			exit 0
351398d3e80SJoseph Chen			;;
352398d3e80SJoseph Chen
353f9afd3dcSJoseph Chen		--rollback-index*)
354b42b4e11SJoseph Chen			pack_fit_image ${ARG_LIST_FIT}
355f9afd3dcSJoseph Chen			exit 0
356f9afd3dcSJoseph Chen			;;
357b6255198SJoseph Chen		*)
35853ea5791SJoseph Chen			# Search function and code position of address
359b42b4e11SJoseph Chen			FUNCADDR=${ARG_FUNCADDR}
360fc99e044SJoseph Chen			RELOC_OFF=${FUNCADDR#*-}
361fc99e044SJoseph Chen			FUNCADDR=${FUNCADDR%-*}
362fc99e044SJoseph Chen			if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then
3637070f875SJoseph Chen				# With prefix: '0x' or '0X'
3647070f875SJoseph Chen				if [ `echo ${FUNCADDR} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ]; then
365b42b4e11SJoseph Chen					FUNCADDR=`echo ${FUNCADDR} | awk '{ print strtonum($0) }'`
3667070f875SJoseph Chen					FUNCADDR=`echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]'`
3677070f875SJoseph Chen				fi
368fc99e044SJoseph Chen				if [ `echo ${RELOC_OFF} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ] && [ ${RELOC_OFF} ]; then
369b42b4e11SJoseph Chen					RELOC_OFF=`echo ${RELOC_OFF} | awk '{ print strtonum($0) }'`
370fc99e044SJoseph Chen					RELOC_OFF=`echo "obase=16;${RELOC_OFF}"|bc |tr '[A-Z]' '[a-z]'`
371fc99e044SJoseph Chen				fi
372fc99e044SJoseph Chen
373fc99e044SJoseph Chen				# If reloc address is assigned, do sub
374fc99e044SJoseph Chen				if [ "${FUNCADDR}" != "${RELOC_OFF}" ]; then
375fc99e044SJoseph Chen					# Hex -> Dec -> SUB -> Hex
376fc99e044SJoseph Chen					FUNCADDR=`echo $((16#${FUNCADDR}))`
377fc99e044SJoseph Chen					RELOC_OFF=`echo $((16#${RELOC_OFF}))`
378fc99e044SJoseph Chen					FUNCADDR=$((FUNCADDR-RELOC_OFF))
379fc99e044SJoseph Chen					FUNCADDR=$(echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]')
380fc99e044SJoseph Chen				fi
3817070f875SJoseph Chen
38253ea5791SJoseph Chen				echo
38334bdfea0SJoseph Chen				sed -n "/${FUNCADDR}/p" ${sym}
38434bdfea0SJoseph Chen				${TOOLCHAIN_ADDR2LINE} -e ${elf} ${FUNCADDR}
38553ea5791SJoseph Chen				exit 0
38653ea5791SJoseph Chen			fi
387b6255198SJoseph Chen			;;
388b6255198SJoseph Chen	esac
3890ff0e214SJoseph Chen}
3900ff0e214SJoseph Chen
391b42b4e11SJoseph Chen#
392de440615SJoseph Chen# We select chip info to do:
393de440615SJoseph Chen#	1. RKCHIP:        fixup platform configure
394de440615SJoseph Chen#	2. RKCHIP_LOADER: search ini file to pack loader
395de440615SJoseph Chen#	3. RKCHIP_TRUST:  search ini file to pack trust
396de440615SJoseph Chen#	4. RKCHIP_LABEL:  show build message
397de440615SJoseph Chen#
3987c3ca500SJoseph Chenfunction select_chip_info()
399bc98b3c8SJoseph Chen{
400de440615SJoseph Chen	# Read RKCHIP firstly from .config
401596700d7SShunqian Zheng	# The regular expression that matching:
402596700d7SShunqian Zheng	#  - PX30, PX3SE
403596700d7SShunqian Zheng	#  - RK????, RK????X
404596700d7SShunqian Zheng	#  - RV????
4057c3ca500SJoseph Chen	chip_pattern='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}'
4067c3ca500SJoseph Chen	RKCHIP=`egrep -o ${chip_pattern} .config`
407d443b7d5SJoseph Chen
4080583701dSJoseph Chen	# default
409d443b7d5SJoseph Chen	RKCHIP=${RKCHIP##*_}
410b42b4e11SJoseph Chen	# fixup ?
4117c3ca500SJoseph Chen	for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
412de440615SJoseph Chen	do
413b42b4e11SJoseph Chen		config_xxx=`echo ${item} | awk '{ print $1 }'`
4147c3ca500SJoseph Chen		if grep  -q "^${config_xxx}=y" .config ; then
415b42b4e11SJoseph Chen			RKCHIP=`echo ${item} | awk '{ print $2 }'`
416b42b4e11SJoseph Chen			RKCHIP_LOADER=`echo ${item} | awk '{ print $3 }'`
417b42b4e11SJoseph Chen			RKCHIP_TRUST=`echo  ${item} | awk '{ print $4 }'`
418b42b4e11SJoseph Chen			RKCHIP_LABEL=`echo  ${item} | awk '{ print $5 }'`
419de440615SJoseph Chen		fi
4200583701dSJoseph Chen	done
4210583701dSJoseph Chen
422b42b4e11SJoseph Chen	if [ "${RKCHIP_LOADER}" == "-" ]; then
4230583701dSJoseph Chen		RKCHIP_LOADER=${RKCHIP}
424de440615SJoseph Chen	fi
425b42b4e11SJoseph Chen	if [ "${RKCHIP_TRUST}" == "-" ]; then
4260583701dSJoseph Chen		RKCHIP_TRUST=${RKCHIP}
4270583701dSJoseph Chen	fi
428b42b4e11SJoseph Chen	if [ "${RKCHIP_LABEL}" == "-" ]; then
4290583701dSJoseph Chen		RKCHIP_LABEL=${RKCHIP}
4300583701dSJoseph Chen	fi
4310583701dSJoseph Chen}
4320583701dSJoseph Chen
4330583701dSJoseph Chenfunction fixup_platform_configure()
4340583701dSJoseph Chen{
435b768b915SJoseph Chen	u_kb="-" u_num="-" t_kb="-" t_num="-"  sha="-" rsa="-"
4360583701dSJoseph Chen
4377c3ca500SJoseph Chen	for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
4380583701dSJoseph Chen	do
439b42b4e11SJoseph Chen		config_xxx=`echo ${item} | awk '{ print $1 }'`
4407c3ca500SJoseph Chen		if grep  -q "^${config_xxx}=y" .config ; then
4410583701dSJoseph Chen			# <*> Fixup rsa/sha pack mode for platforms
442b42b4e11SJoseph Chen			rsa=`echo ${item} | awk '{ print $2 }'`
443b42b4e11SJoseph Chen			sha=`echo ${item} | awk '{ print $3 }'`
4440583701dSJoseph Chen
4450583701dSJoseph Chen			# <*> Fixup images size pack for platforms, and ini file
4460583701dSJoseph Chen			if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then
447b42b4e11SJoseph Chen				u_kb=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $1 }'`
448b42b4e11SJoseph Chen				t_kb=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $2 }'`
449b42b4e11SJoseph Chen				u_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $1 }'`
450b42b4e11SJoseph Chen				t_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $2 }'`
451b42b4e11SJoseph Chen				PADDING=`echo ${item} | awk '{ print $8 }'`
452b42b4e11SJoseph Chen				if [ "${PADDING}" != "-" ]; then
453b42b4e11SJoseph Chen					RKCHIP_LOADER=${RKCHIP_LOADER}${PADDING}
4540583701dSJoseph Chen				fi
455b42b4e11SJoseph Chen				PADDING=`echo  ${item} | awk '{ print $9 }'`
456b42b4e11SJoseph Chen				if [ "${PADDING}" != "-" ]; then
457b42b4e11SJoseph Chen					RKCHIP_TRUST=${RKCHIP_TRUST}${PADDING}
4580583701dSJoseph Chen				fi
4590583701dSJoseph Chen				RKCHIP_LABEL=${RKCHIP_LABEL}"AARCH32"
4600583701dSJoseph Chen			else
461b42b4e11SJoseph Chen				u_kb=`echo  ${item} | awk '{ print $4 }' | awk -F "," '{ print $1 }'`
462b42b4e11SJoseph Chen				t_kb=`echo  ${item} | awk '{ print $4 }' | awk -F "," '{ print $2 }'`
463b42b4e11SJoseph Chen				u_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $1 }'`
464b42b4e11SJoseph Chen				t_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $2 }'`
465de440615SJoseph Chen			fi
466de440615SJoseph Chen		fi
467de440615SJoseph Chen	done
468de440615SJoseph Chen
469b42b4e11SJoseph Chen	if [ "${sha}" != "-" ]; then
470b42b4e11SJoseph Chen		PLATFORM_SHA="--sha ${sha}"
4710583701dSJoseph Chen	fi
472b42b4e11SJoseph Chen	if [ "${rsa}" != "-" ]; then
473b42b4e11SJoseph Chen		PLATFORM_RSA="--rsa ${rsa}"
4740583701dSJoseph Chen	fi
475b42b4e11SJoseph Chen	if [ "${u_kb}" != "-" ]; then
476b42b4e11SJoseph Chen		PLATFORM_UBOOT_SIZE="--size ${u_kb} ${u_num}"
4770583701dSJoseph Chen	fi
478b42b4e11SJoseph Chen	if [ "${t_kb}" != "-" ]; then
479b42b4e11SJoseph Chen		PLATFORM_TRUST_SIZE="--size ${t_kb} ${t_num}"
480b768b915SJoseph Chen	fi
481b768b915SJoseph Chen}
482b768b915SJoseph Chen
483b768b915SJoseph Chenfunction select_ini_file()
484b768b915SJoseph Chen{
485b768b915SJoseph Chen	# default
486b768b915SJoseph Chen	INI_LOADER=${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini
487b42b4e11SJoseph Chen	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
488b768b915SJoseph Chen		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TRUST.ini
489b768b915SJoseph Chen	else
490b768b915SJoseph Chen		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TOS.ini
49141cf5e5aSJoseph Chen	fi
49241cf5e5aSJoseph Chen
493b768b915SJoseph Chen	# args
494b42b4e11SJoseph Chen	if [ "${ARG_INI_TRUST}" != "" ]; then
495b42b4e11SJoseph Chen		INI_TRUST=${ARG_INI_TRUST}
496b768b915SJoseph Chen	fi
497b42b4e11SJoseph Chen	if [ "${ARG_INI_LOADER}" != "" ]; then
498b42b4e11SJoseph Chen		INI_LOADER=${ARG_INI_LOADER}
499b768b915SJoseph Chen	fi
50027a50c86SAndy Yan}
501de9a6cd2SJoseph Chen
502b6e67ca8SJoseph Chenfunction handle_args_late()
503b6e67ca8SJoseph Chen{
504b42b4e11SJoseph Chen	ARG_LIST_FIT="${ARG_LIST_FIT} --ini-trust ${INI_TRUST} --ini-loader ${INI_LOADER}"
505b6e67ca8SJoseph Chen}
506b6e67ca8SJoseph Chen
5077c3ca500SJoseph Chenfunction pack_uboot_image()
508de9a6cd2SJoseph Chen{
509b42b4e11SJoseph Chen	if [ "${PLATFORM_TYPE}" != "RKFW" ]; then
5108f53a15cSJoseph Chen		return
5118f53a15cSJoseph Chen	fi
5128f53a15cSJoseph Chen
513f089d907SJoseph Chen	# Check file size
5147c3ca500SJoseph Chen	head_kb=2
5157c3ca500SJoseph Chen	uboot_kb=`ls -l u-boot.bin | awk '{ print $5 }'`
516b42b4e11SJoseph Chen	if [ "${PLATFORM_UBOOT_SIZE}" == "" ]; then
5177c3ca500SJoseph Chen		uboot_max_kb=1046528
518f089d907SJoseph Chen	else
519b42b4e11SJoseph Chen		uboot_max_kb=`echo ${PLATFORM_UBOOT_SIZE} | awk '{print strtonum($2)}'`
5207c3ca500SJoseph Chen		uboot_max_kb=$(((uboot_max_kb-head_kb)*1024))
521f089d907SJoseph Chen	fi
522f089d907SJoseph Chen
523b42b4e11SJoseph Chen	if [ ${uboot_kb} -gt ${uboot_max_kb} ]; then
524f089d907SJoseph Chen		echo
525b42b4e11SJoseph Chen		echo "ERROR: pack uboot failed! u-boot.bin actual: ${uboot_kb} bytes, max limit: ${uboot_max_kb} bytes"
526f089d907SJoseph Chen		exit 1
527f089d907SJoseph Chen	fi
528f089d907SJoseph Chen
5297c3ca500SJoseph Chen	# Pack
5307c3ca500SJoseph Chen	uboot_load_addr=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" include/autoconf.mk|tr -d '\r'`
531b42b4e11SJoseph Chen	if [ -z ${uboot_load_addr} ]; then
5327c3ca500SJoseph Chen		echo "ERROR: No CONFIG_SYS_TEXT_BASE for u-boot";
5337c3ca500SJoseph Chen		exit 1
534daa679a7SKever Yang	fi
535b42b4e11SJoseph Chen	${RKTOOLS}/loaderimage --pack --uboot u-boot.bin uboot.img ${uboot_load_addr} ${PLATFORM_UBOOT_SIZE}
536a11e2c82SJoseph Chen	rm u-boot.img u-boot-dtb.img -rf
537d6821889SJoseph Chen	echo "pack uboot okay! Input: u-boot.bin"
538de9a6cd2SJoseph Chen}
539de9a6cd2SJoseph Chen
5407c3ca500SJoseph Chenfunction pack_uboot_itb_image()
541daa3bef5SJoseph Chen{
542b42b4e11SJoseph Chen	ini=${INI_TRUST}
543b42b4e11SJoseph Chen	if [ ! -f ${INI_TRUST} ]; then
544b42b4e11SJoseph Chen		echo "pack trust failed! Can't find: ${INI_TRUST}"
5450d0d4395SJoseph Chen		return
5460d0d4395SJoseph Chen	fi
5470d0d4395SJoseph Chen
548b42b4e11SJoseph Chen	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
549b42b4e11SJoseph Chen		bl31=`sed -n '/_bl31_/s/PATH=//p' ${ini} |tr -d '\r'`
5507c3ca500SJoseph Chen		cp ${RKBIN}/${bl31} bl31.elf
5517c3ca500SJoseph Chen		make CROSS_COMPILE=${TOOLCHAIN_GCC} u-boot.itb
552b42b4e11SJoseph Chen		echo "pack u-boot.itb okay! Input: ${ini}"
5530d0d4395SJoseph Chen	else
554b42b4e11SJoseph Chen		tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'`
555b42b4e11SJoseph Chen		tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'`
556b42b4e11SJoseph Chen		if [ ${tosta_image} ]; then
5577c3ca500SJoseph Chen			cp ${RKBIN}/${tosta_image} tee.bin
558b42b4e11SJoseph Chen		elif [ ${tos_image} ]; then
5597c3ca500SJoseph Chen			cp ${RKBIN}/${tos_image}   tee.bin
5607c3ca500SJoseph Chen		else
5617c3ca500SJoseph Chen			echo "ERROR: No any tee bin"
5620d0d4395SJoseph Chen			exit 1
5630d0d4395SJoseph Chen		fi
5640d0d4395SJoseph Chen
565b42b4e11SJoseph Chen		tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'`
566b42b4e11SJoseph Chen		if [ "${tee_offset}" == "" ]; then
5677c3ca500SJoseph Chen			tee_offset=0x8400000
568d13b75e1SJoseph Chen		fi
569d13b75e1SJoseph Chen
570b42b4e11SJoseph Chen		mcu_enabled=`awk -F"," '/MCU=/ { printf $3 }' ${ini} | tr -d ' '`
571b42b4e11SJoseph Chen		if [ "${mcu_enabled}" == "enabled" ]; then
572b42b4e11SJoseph Chen			mcu_image=`awk -F"," '/MCU=/  { printf $1 }' ${ini} | tr -d ' ' | cut -c 5-`
573b42b4e11SJoseph Chen			mcu_offset=`awk -F"," '/MCU=/ { printf $2 }' ${ini} | tr -d ' '`
57485101532SJoseph Chen			cp ${RKBIN}/${mcu_image} mcu.bin
57585101532SJoseph Chen		fi
57685101532SJoseph Chen
577db3b6a92SJoseph Chen		SPL_FIT_SOURCE=`sed -n "/CONFIG_SPL_FIT_SOURCE=/s/CONFIG_SPL_FIT_SOURCE=//p" .config | tr -d '""'`
578b42b4e11SJoseph Chen		if [ ! -z ${SPL_FIT_SOURCE} ]; then
579b42b4e11SJoseph Chen			cp ${SPL_FIT_SOURCE} u-boot.its
580db3b6a92SJoseph Chen		else
581db3b6a92SJoseph Chen			SPL_FIT_GENERATOR=`sed -n "/CONFIG_SPL_FIT_GENERATOR=/s/CONFIG_SPL_FIT_GENERATOR=//p" .config | tr -d '""'`
582b42b4e11SJoseph Chen			${SPL_FIT_GENERATOR} ${tee_offset} ${mcu_offset} > u-boot.its
583db3b6a92SJoseph Chen		fi
584d13b75e1SJoseph Chen		./tools/mkimage -f u-boot.its -E u-boot.itb
585b42b4e11SJoseph Chen		echo "pack u-boot.itb okay! Input: ${ini}"
5860d0d4395SJoseph Chen	fi
587b768b915SJoseph Chen	echo
588daa3bef5SJoseph Chen}
589daa3bef5SJoseph Chen
5907c3ca500SJoseph Chenfunction pack_spl_loader_image()
591daa3bef5SJoseph Chen{
5927c3ca500SJoseph Chen	mode=$1
593b42b4e11SJoseph Chen	tmpdir=${RKBIN}/tmp
594b42b4e11SJoseph Chen	tmpini=${tmpdir}/${RKCHIP_LOADER}MINIALL.ini
595b42b4e11SJoseph Chen	ini=${INI_LOADER}
596b42b4e11SJoseph Chen	if [ ! -f ${INI_LOADER} ]; then
597b42b4e11SJoseph Chen		echo "pack loader failed! Can't find: ${INI_LOADER}"
598daa3bef5SJoseph Chen		return
599daa3bef5SJoseph Chen	fi
600daa3bef5SJoseph Chen
601b42b4e11SJoseph Chen	rm ${tmpdir} -rf && mkdir ${tmpdir} -p
602b42b4e11SJoseph Chen	cp spl/u-boot-spl.bin ${tmpdir}/ && cp ${ini} ${tmpini}
60307329002SJoseph Chen	if [ "${mode}" == "tpl-spl" ]; then	# pack tpl+spl
604daa3bef5SJoseph Chen		label="TPL+SPL"
605b42b4e11SJoseph Chen		cp tpl/u-boot-tpl.bin ${tmpdir}/
6067c3ca500SJoseph Chen		header=`sed -n '/NAME=/s/NAME=//p' ${ini}`
607b42b4e11SJoseph Chen		dd if=${tmpdir}/u-boot-tpl.bin of=${tmpdir}/tpl.bin bs=1 skip=4
608b42b4e11SJoseph Chen		sed -i "1s/^/${header:0:4}/" ${tmpdir}/tpl.bin
609b42b4e11SJoseph Chen		sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${tmpini}
6107c3ca500SJoseph Chen	else
6117c3ca500SJoseph Chen		label="SPL"
612daa3bef5SJoseph Chen	fi
613b42b4e11SJoseph Chen	sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${tmpini}
614daa3bef5SJoseph Chen
6157c3ca500SJoseph Chen	cd ${RKBIN}
616b42b4e11SJoseph Chen	${RKTOOLS}/boot_merger ${tmpini}
6177c3ca500SJoseph Chen
618b42b4e11SJoseph Chen	rm ${tmpdir} -rf && cd -
619b42b4e11SJoseph Chen	rm *_loader_*.bin -rf && mv ${RKBIN}/*_loader_*.bin ./
620aa8ddc58SJoseph Chen	filename=`basename *_loader_*.bin`
621b42b4e11SJoseph Chen	if [[ ${filename} != *spl* ]]; then
622b4e157ffSJoseph Chen		rename 's/loader_/spl_loader_/' *_loader_*.bin
623aa8ddc58SJoseph Chen	fi
624b42b4e11SJoseph Chen	echo "pack loader(${label}) okay! Input: ${ini}"
625daa3bef5SJoseph Chen}
626daa3bef5SJoseph Chen
6277c3ca500SJoseph Chenfunction pack_loader_image()
628cd7ae718SJoseph Chen{
629b42b4e11SJoseph Chen	ini=${INI_LOADER}
630b42b4e11SJoseph Chen	if [ ! -f ${INI_LOADER} ]; then
631b42b4e11SJoseph Chen		echo "pack loader failed! Can't find: ${INI_LOADER}"
63251441a28SJoseph Chen		return
63351441a28SJoseph Chen	fi
63451441a28SJoseph Chen
635a11e2c82SJoseph Chen	rm *_loader_*.bin -rf
636b42b4e11SJoseph Chen	numline=`cat ${ini} | wc -l`
637b42b4e11SJoseph Chen	if [ ${numline} -eq 1 ]; then
638b42b4e11SJoseph Chen		image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2`
639783f7f6eSJoseph Chen		cp ${RKBIN}/${image} ./
6407c3ca500SJoseph Chen	else
641cd7ae718SJoseph Chen		cd ${RKBIN}
642b42b4e11SJoseph Chen		${RKTOOLS}/boot_merger ${ini}
643fb90bd1dSJoseph Chen		cd - && mv ${RKBIN}/*_loader_*.bin ./
6447c3ca500SJoseph Chen	fi
6457c3ca500SJoseph Chen
64669b6e590SJoseph Chen	file=`ls *loader*.bin`
647b42b4e11SJoseph Chen	echo "pack ${file} okay! Input: ${ini}"
648cd7ae718SJoseph Chen}
649cd7ae718SJoseph Chen
6507c3ca500SJoseph Chenfunction pack_arm32_trust_image()
651cd7ae718SJoseph Chen{
6527c3ca500SJoseph Chen	ini=$1
653b42b4e11SJoseph Chen	tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'`
654b42b4e11SJoseph Chen	tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'`
655b42b4e11SJoseph Chen	tee_output=`sed -n "/OUTPUT=/s/OUTPUT=//p" ${ini} |tr -d '\r'`
656b42b4e11SJoseph Chen	if [ "${tee_output}" == "" ]; then
6577c3ca500SJoseph Chen		tee_output="./trust.img"
65851441a28SJoseph Chen	fi
659b42b4e11SJoseph Chen	tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'`
660b42b4e11SJoseph Chen	if [ "${tee_offset}" == "" ]; then
6617c3ca500SJoseph Chen		tee_offset=0x8400000
66251441a28SJoseph Chen	fi
66351441a28SJoseph Chen
664cd7ae718SJoseph Chen	# OP-TEE is 132M(0x8400000) offset from DRAM base.
665eee9fb0aSJoseph Chen	dram_base=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" include/autoconf.mk|tr -d '\r'`
6667c3ca500SJoseph Chen	tee_load_addr=$((dram_base+tee_offset))
6677c3ca500SJoseph Chen	tee_load_addr=$(echo "obase=16;${tee_load_addr}"|bc) # Convert Dec to Hex
6680e90839aSJoseph Chen
669b42b4e11SJoseph Chen	if [ ${tosta_image} ]; then
670b42b4e11SJoseph Chen		${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tosta_image} ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE}
671b42b4e11SJoseph Chen	elif [ ${tos_image} ]; then
672b42b4e11SJoseph Chen		${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tos_image}   ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE}
673cd7ae718SJoseph Chen	else
6747c3ca500SJoseph Chen		echo "ERROR: No any tee bin"
675a64486b5SJoseph Chen		exit 1
676cd7ae718SJoseph Chen	fi
677b42b4e11SJoseph Chen	echo "pack trust okay! Input: ${ini}"
67869cce37bSJoseph Chen}
67969cce37bSJoseph Chen
6807c3ca500SJoseph Chenfunction pack_arm64_trust_image()
68169cce37bSJoseph Chen{
6827c3ca500SJoseph Chen	ini=$1
68369cce37bSJoseph Chen	cd ${RKBIN}
684b42b4e11SJoseph Chen	${RKTOOLS}/trust_merger ${PLATFORM_SHA} ${PLATFORM_RSA} ${PLATFORM_TRUST_SIZE} ${ini}
68569cce37bSJoseph Chen	cd - && mv ${RKBIN}/trust*.img ./
686b42b4e11SJoseph Chen	echo "pack trust okay! Input: ${ini}"
68769cce37bSJoseph Chen}
68869cce37bSJoseph Chen
6897c3ca500SJoseph Chenfunction pack_trust_image()
69069cce37bSJoseph Chen{
691b42b4e11SJoseph Chen	if [ "${PLATFORM_TYPE}" != "RKFW" ]; then
6928f53a15cSJoseph Chen		return
6938f53a15cSJoseph Chen	fi
6948f53a15cSJoseph Chen
695a11e2c82SJoseph Chen	rm trust*.img -rf
696b42b4e11SJoseph Chen	ini=${INI_TRUST}
697b42b4e11SJoseph Chen	if [ ! -f ${INI_TRUST} ]; then
698b42b4e11SJoseph Chen		echo "pack trust failed! Can't find: ${INI_TRUST}"
6997c3ca500SJoseph Chen		return
700dd590c93SJoseph Chen	fi
701dd590c93SJoseph Chen
702b42b4e11SJoseph Chen	numline=`cat ${ini} | wc -l`
703b42b4e11SJoseph Chen	if [ ${numline} -eq 1 ]; then
704b42b4e11SJoseph Chen		image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2`
705783f7f6eSJoseph Chen		cp ${RKBIN}/${image} ./trust.img
706b42b4e11SJoseph Chen		echo "pack trust okay! Input: ${ini}"
707783f7f6eSJoseph Chen		return;
70869cce37bSJoseph Chen	else
709b42b4e11SJoseph Chen		if [ "${ARM64_TRUSTZONE}" == "y" ]; then
710b42b4e11SJoseph Chen			pack_arm64_trust_image ${ini}
7117c3ca500SJoseph Chen		else
712b42b4e11SJoseph Chen			pack_arm32_trust_image ${ini}
713dd590c93SJoseph Chen		fi
714cd7ae718SJoseph Chen	fi
715cd7ae718SJoseph Chen}
716cd7ae718SJoseph Chen
7178f53a15cSJoseph Chenfunction pack_fit_image()
7188f53a15cSJoseph Chen{
719*f9976ae4SJoseph Chen	if [ "${ARG_NO_UBOOT}" == "y" ]; then
720*f9976ae4SJoseph Chen		rm u-boot-nodtb.bin u-boot.dtb -rf
721*f9976ae4SJoseph Chen		touch u-boot-nodtb.bin u-boot.dtb
722*f9976ae4SJoseph Chen	fi
723*f9976ae4SJoseph Chen
7244b4c6841SJoseph Chen	if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
725cc0b1aa3SJoseph Chen		./scripts/fit-mkimg.sh --uboot-itb --boot-itb ${ARG_LIST_FIT}
7264b4c6841SJoseph Chen	else
727a11e2c82SJoseph Chen		rm uboot.img trust*.img -rf
728cc0b1aa3SJoseph Chen		./scripts/fit-mkimg.sh --uboot-itb --no-vboot --no-rebuild ${ARG_LIST_FIT}
729b42b4e11SJoseph Chen		echo "pack uboot.img okay! Input: ${INI_TRUST}"
7304b4c6841SJoseph Chen	fi
7318f53a15cSJoseph Chen}
7328f53a15cSJoseph Chen
7338f53a15cSJoseph Chenfunction pack_images()
7348f53a15cSJoseph Chen{
735b42b4e11SJoseph Chen	if [ "${ARG_NO_PACK}" != "y" ]; then
736b42b4e11SJoseph Chen		if [ "${PLATFORM_TYPE}" == "RKFW" ]; then
7378f53a15cSJoseph Chen			pack_uboot_image
7388f53a15cSJoseph Chen			pack_trust_image
7398f53a15cSJoseph Chen			pack_loader_image
740b42b4e11SJoseph Chen		elif [ "${PLATFORM_TYPE}" == "FIT" ]; then
741b42b4e11SJoseph Chen			pack_fit_image ${ARG_LIST_FIT}
7428f53a15cSJoseph Chen		fi
7438f53a15cSJoseph Chen	fi
7448f53a15cSJoseph Chen}
7458f53a15cSJoseph Chen
7468f53a15cSJoseph Chenfunction clean_files()
7478f53a15cSJoseph Chen{
748b42b4e11SJoseph Chen	rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -rf
7498f53a15cSJoseph Chen}
7508f53a15cSJoseph Chen
7517c3ca500SJoseph Chenfunction finish()
75230b04afcSJoseph Chen{
75330b04afcSJoseph Chen	echo
754b42b4e11SJoseph Chen	if [ "${ARG_BOARD}" == "" ]; then
7555202fe1fSJoseph Chen		echo "Platform ${RKCHIP_LABEL} is build OK, with exist .config"
75630b04afcSJoseph Chen	else
757b768b915SJoseph Chen		echo "Platform ${RKCHIP_LABEL} is build OK, with new .config(make ${ARG_BOARD}_defconfig)"
75830b04afcSJoseph Chen	fi
75930b04afcSJoseph Chen}
76030b04afcSJoseph Chen
761b768b915SJoseph Chenprocess_args $*
762cd7ae718SJoseph Chenprepare
7637c2526e9SJoseph Chenselect_toolchain
764de440615SJoseph Chenselect_chip_info
76541cf5e5aSJoseph Chenfixup_platform_configure
766b768b915SJoseph Chenselect_ini_file
767b6e67ca8SJoseph Chenhandle_args_late
7680ff0e214SJoseph Chensub_commands
7698f53a15cSJoseph Chenclean_files
770b42b4e11SJoseph Chenmake CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB}
7718f53a15cSJoseph Chenpack_images
77230b04afcSJoseph Chenfinish
7731ff581bbSJoseph Chen
774