xref: /rk3399_rockchip-uboot/make.sh (revision b42b4e116015fcd9d12de730b98aab598f4ba8b5)
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=
94*b42b4e11SJoseph ChenPLATFORM_UBOOT_SIZE=
95*b42b4e11SJoseph ChenPLATFORM_TRUST_SIZE=
96*b42b4e11SJoseph 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"
106*b42b4e11SJoseph Chen	echo "	 - sub-command:  elf*|loader*|spl*|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
157*b42b4e11SJoseph 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				;;
169*b42b4e11SJoseph Chen
170*b42b4e11SJoseph Chen			''|loader|trust|uboot|spl*|debug*|itb|env|nopack|fit*)
171*b42b4e11SJoseph Chen				ARG_CMD=$1
172b768b915SJoseph Chen				shift 1
173b768b915SJoseph Chen				;;
174*b42b4e11SJoseph Chen
175b768b915SJoseph Chen			map|sym|elf*)
176*b42b4e11SJoseph Chen				ARG_CMD=$1
177*b42b4e11SJoseph Chen				if [ "$2" == "spl" -o "$2" == "tpl" ]; then
178b768b915SJoseph Chen					ARG_S_TPL=$2
179b768b915SJoseph Chen					shift 1
180b768b915SJoseph Chen				fi
181b768b915SJoseph Chen				shift 1
182b768b915SJoseph Chen				;;
183*b42b4e11SJoseph Chen
1841ff581bbSJoseph Chen			*.ini)
185b768b915SJoseph Chen				if [ ! -f $1 ]; then
186b768b915SJoseph Chen					echo "ERROR: No $1"
187b768b915SJoseph Chen				fi
188b768b915SJoseph Chen				if grep -q 'CODE471_OPTION' $1 ; then
189b768b915SJoseph Chen					ARG_INI_LOADER=$1
190b768b915SJoseph Chen				elif grep -Eq ''BL31_OPTION'|'TOS'' $1 ; then
191b768b915SJoseph Chen					ARG_INI_TRUST=$1
192b768b915SJoseph Chen				fi
193b768b915SJoseph Chen				shift 1
194b768b915SJoseph Chen				;;
195*b42b4e11SJoseph Chen
196b768b915SJoseph Chen			*)
1971ff581bbSJoseph Chen				# out scripts args
1981ff581bbSJoseph Chen				NUM=$(./scripts/fit-mkimg.sh --p-check $1)
199*b42b4e11SJoseph Chen				if  [ ${NUM} -ne 0 ]; then
200*b42b4e11SJoseph Chen					[ ${NUM} -eq 1 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1"
201*b42b4e11SJoseph Chen					[ ${NUM} -eq 2 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1 $2"
2021ff581bbSJoseph Chen					shift ${NUM}
2031ff581bbSJoseph Chen					continue
204b768b915SJoseph Chen				# FUNC address
2051ff581bbSJoseph Chen				elif [ -z $(echo $1 | sed 's/[0-9,a-f,A-F,x,X,-]//g') ]; then
206b768b915SJoseph Chen					ARG_FUNCADDR=$1
2071ff581bbSJoseph Chen				# xxx_defconfig
208b768b915SJoseph Chen				else
209b768b915SJoseph Chen					ARG_BOARD=$1
210b768b915SJoseph Chen					if [ ! -f configs/${ARG_BOARD}_defconfig ]; then
211b768b915SJoseph Chen						echo -e "\n${SUPPORT_LIST}\n"
212b768b915SJoseph Chen						echo "ERROR: No configs/${ARG_BOARD}_defconfig"
213b768b915SJoseph Chen						exit 1
214b768b915SJoseph Chen					else
215b768b915SJoseph Chen						echo "make for ${ARG_BOARD}_defconfig by -j${JOB}"
216*b42b4e11SJoseph Chen						make ${ARG_BOARD}_defconfig
217b768b915SJoseph Chen					fi
218b768b915SJoseph Chen				fi
219b768b915SJoseph Chen				shift 1
220b768b915SJoseph Chen				;;
221b768b915SJoseph Chen		esac
222b768b915SJoseph Chen	done
223b768b915SJoseph Chen
224b768b915SJoseph Chen	if [ ! -f .config ]; then
225b768b915SJoseph Chen		echo
226b768b915SJoseph Chen		echo "ERROR: No .config"
227b768b915SJoseph Chen		help
228b768b915SJoseph Chen		exit 1
22969b6e590SJoseph Chen	fi
23030b04afcSJoseph Chen}
2317c2526e9SJoseph Chen
2327c3ca500SJoseph Chenfunction select_toolchain()
23327a50c86SAndy Yan{
234d6821889SJoseph Chen	if grep -q '^CONFIG_ARM64=y' .config ; then
235bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM64} ]; then
236bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd)
237bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64}
2380ff0e214SJoseph Chen			TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64}
23953ea5791SJoseph Chen			TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM64}
240bc98b3c8SJoseph Chen		else
2417c3ca500SJoseph Chen			echo "ERROR: No toolchain: ${TOOLCHAIN_ARM64}"
242bc98b3c8SJoseph Chen			exit 1
24327a50c86SAndy Yan		fi
24427a50c86SAndy Yan	else
245bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM32} ]; then
246bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd)
247bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32}
2480ff0e214SJoseph Chen			TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32}
24953ea5791SJoseph Chen			TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32}
250bc98b3c8SJoseph Chen		else
2517c3ca500SJoseph Chen			echo "ERROR: No toolchain: ${TOOLCHAIN_ARM32}"
252bc98b3c8SJoseph Chen			exit 1
25327a50c86SAndy Yan		fi
25427a50c86SAndy Yan	fi
255bc98b3c8SJoseph Chen}
256bc98b3c8SJoseph Chen
2577c3ca500SJoseph Chenfunction sub_commands()
2580ff0e214SJoseph Chen{
259f9afd3dcSJoseph Chen	# skip "--" parameter, such as "--rollback-index-..."
260*b42b4e11SJoseph Chen	if [[ "${ARG_CMD}" != "--*" ]]; then
261*b42b4e11SJoseph Chen		cmd=${ARG_CMD%-*}
262*b42b4e11SJoseph Chen		arg=${ARG_CMD#*-}
263f9afd3dcSJoseph Chen	else
264*b42b4e11SJoseph Chen		cmd=${ARG_CMD}
265f9afd3dcSJoseph Chen	fi
266f9afd3dcSJoseph Chen
267*b42b4e11SJoseph Chen	if [ "${ARG_S_TPL}" == "tpl" -o "${ARG_S_TPL}" == "spl" ]; then
268b768b915SJoseph Chen		elf=`find -name u-boot-${ARG_S_TPL}`
269b768b915SJoseph Chen		map=`find -name u-boot-${ARG_S_TPL}.map`
270b768b915SJoseph Chen		sym=`find -name u-boot-${ARG_S_TPL}.sym`
271b768b915SJoseph Chen	else
2727c3ca500SJoseph Chen		elf=u-boot
2737c3ca500SJoseph Chen		map=u-boot.map
2747c3ca500SJoseph Chen		sym=u-boot.sym
27534bdfea0SJoseph Chen	fi
2760ff0e214SJoseph Chen
277*b42b4e11SJoseph Chen	case ${cmd} in
278b6255198SJoseph Chen		elf)
2797c3ca500SJoseph Chen			if [ ! -f ${elf} ]; then
2807c3ca500SJoseph Chen				echo "ERROR: No elf: ${elf}"
2810ff0e214SJoseph Chen				exit 1
2820ff0e214SJoseph Chen			else
283*b42b4e11SJoseph Chen				if [ "${cmd}" == "elf" -a "${arg}" == "elf" ]; then
284*b42b4e11SJoseph Chen					arg=D # default
2850ff0e214SJoseph Chen				fi
286*b42b4e11SJoseph Chen				${TOOLCHAIN_OBJDUMP} -${arg} ${elf} | less
28707de173aSJoseph Chen				exit 0
28807de173aSJoseph Chen			fi
289b6255198SJoseph Chen			;;
290b6255198SJoseph Chen
2911b6c85a0SJoseph Chen		debug)
292*b42b4e11SJoseph Chen			./scripts/rkpatch.sh ${arg}
2931b6c85a0SJoseph Chen			exit 0
2941b6c85a0SJoseph Chen			;;
2951b6c85a0SJoseph Chen
29669b6e590SJoseph Chen		fit)
297*b42b4e11SJoseph Chen			if [ "${arg}" == "ns" ]; then
2981ff581bbSJoseph Chen				./scripts/fit-mkimg.sh --uboot --boot --no-vboot ${ARG_FIT}
2996cf81e27SJoseph Chen			fi
30069b6e590SJoseph Chen			exit 0
30169b6e590SJoseph Chen			;;
30269b6e590SJoseph Chen
303b6255198SJoseph Chen		map)
30434bdfea0SJoseph Chen			cat ${map} | less
305b6255198SJoseph Chen			exit 0
306b6255198SJoseph Chen			;;
307b6255198SJoseph Chen
308b6255198SJoseph Chen		sym)
30934bdfea0SJoseph Chen			cat ${sym} | less
310b6255198SJoseph Chen			exit 0
311b6255198SJoseph Chen			;;
312b6255198SJoseph Chen
313b6255198SJoseph Chen		trust)
314d6e1155eSJoseph Chen			pack_trust_image
315a43a18b2SJoseph Chen			exit 0
316b6255198SJoseph Chen			;;
317b6255198SJoseph Chen
318b6255198SJoseph Chen		loader)
319d6e1155eSJoseph Chen			pack_loader_image
320a43a18b2SJoseph Chen			exit 0
321b6255198SJoseph Chen			;;
322b6255198SJoseph Chen
323daa3bef5SJoseph Chen		spl)
324*b42b4e11SJoseph Chen			pack_spl_loader_image ${arg}
325daa3bef5SJoseph Chen			exit 0
326daa3bef5SJoseph Chen			;;
327daa3bef5SJoseph Chen
328daa3bef5SJoseph Chen		itb)
329daa3bef5SJoseph Chen			pack_uboot_itb_image
330daa3bef5SJoseph Chen			exit 0
331daa3bef5SJoseph Chen			;;
332daa3bef5SJoseph Chen
333b6255198SJoseph Chen		uboot)
334b768b915SJoseph Chen			pack_uboot_image
335fb90bd1dSJoseph Chen			exit 0
336b6255198SJoseph Chen			;;
337b6255198SJoseph Chen
338398d3e80SJoseph Chen		env)
339398d3e80SJoseph Chen			make CROSS_COMPILE=${TOOLCHAIN_GCC} envtools
340398d3e80SJoseph Chen			exit 0
341398d3e80SJoseph Chen			;;
342398d3e80SJoseph Chen
343f9afd3dcSJoseph Chen		--rollback-index*)
344*b42b4e11SJoseph Chen			pack_fit_image ${ARG_LIST_FIT}
345f9afd3dcSJoseph Chen			exit 0
346f9afd3dcSJoseph Chen			;;
347f9afd3dcSJoseph Chen
3488f53a15cSJoseph Chen		nopack)
349*b42b4e11SJoseph Chen			ARG_NO_PACK="y"
3508f53a15cSJoseph Chen			;;
3518f53a15cSJoseph Chen
352b6255198SJoseph Chen		*)
35353ea5791SJoseph Chen			# Search function and code position of address
354*b42b4e11SJoseph Chen			FUNCADDR=${ARG_FUNCADDR}
355fc99e044SJoseph Chen			RELOC_OFF=${FUNCADDR#*-}
356fc99e044SJoseph Chen			FUNCADDR=${FUNCADDR%-*}
357fc99e044SJoseph Chen			if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then
3587070f875SJoseph Chen				# With prefix: '0x' or '0X'
3597070f875SJoseph Chen				if [ `echo ${FUNCADDR} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ]; then
360*b42b4e11SJoseph Chen					FUNCADDR=`echo ${FUNCADDR} | awk '{ print strtonum($0) }'`
3617070f875SJoseph Chen					FUNCADDR=`echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]'`
3627070f875SJoseph Chen				fi
363fc99e044SJoseph Chen				if [ `echo ${RELOC_OFF} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ] && [ ${RELOC_OFF} ]; then
364*b42b4e11SJoseph Chen					RELOC_OFF=`echo ${RELOC_OFF} | awk '{ print strtonum($0) }'`
365fc99e044SJoseph Chen					RELOC_OFF=`echo "obase=16;${RELOC_OFF}"|bc |tr '[A-Z]' '[a-z]'`
366fc99e044SJoseph Chen				fi
367fc99e044SJoseph Chen
368fc99e044SJoseph Chen				# If reloc address is assigned, do sub
369fc99e044SJoseph Chen				if [ "${FUNCADDR}" != "${RELOC_OFF}" ]; then
370fc99e044SJoseph Chen					# Hex -> Dec -> SUB -> Hex
371fc99e044SJoseph Chen					FUNCADDR=`echo $((16#${FUNCADDR}))`
372fc99e044SJoseph Chen					RELOC_OFF=`echo $((16#${RELOC_OFF}))`
373fc99e044SJoseph Chen					FUNCADDR=$((FUNCADDR-RELOC_OFF))
374fc99e044SJoseph Chen					FUNCADDR=$(echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]')
375fc99e044SJoseph Chen				fi
3767070f875SJoseph Chen
37753ea5791SJoseph Chen				echo
37834bdfea0SJoseph Chen				sed -n "/${FUNCADDR}/p" ${sym}
37934bdfea0SJoseph Chen				${TOOLCHAIN_ADDR2LINE} -e ${elf} ${FUNCADDR}
38053ea5791SJoseph Chen				exit 0
38153ea5791SJoseph Chen			fi
382b6255198SJoseph Chen			;;
383b6255198SJoseph Chen	esac
3840ff0e214SJoseph Chen}
3850ff0e214SJoseph Chen
386*b42b4e11SJoseph Chen#
387de440615SJoseph Chen# We select chip info to do:
388de440615SJoseph Chen#	1. RKCHIP:        fixup platform configure
389de440615SJoseph Chen#	2. RKCHIP_LOADER: search ini file to pack loader
390de440615SJoseph Chen#	3. RKCHIP_TRUST:  search ini file to pack trust
391de440615SJoseph Chen#	4. RKCHIP_LABEL:  show build message
392de440615SJoseph Chen#
3937c3ca500SJoseph Chenfunction select_chip_info()
394bc98b3c8SJoseph Chen{
395de440615SJoseph Chen	# Read RKCHIP firstly from .config
396596700d7SShunqian Zheng	# The regular expression that matching:
397596700d7SShunqian Zheng	#  - PX30, PX3SE
398596700d7SShunqian Zheng	#  - RK????, RK????X
399596700d7SShunqian Zheng	#  - RV????
4007c3ca500SJoseph Chen	chip_pattern='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}'
4017c3ca500SJoseph Chen	RKCHIP=`egrep -o ${chip_pattern} .config`
402d443b7d5SJoseph Chen
4030583701dSJoseph Chen	# default
404d443b7d5SJoseph Chen	RKCHIP=${RKCHIP##*_}
405*b42b4e11SJoseph Chen	# fixup ?
4067c3ca500SJoseph Chen	for item in "${CHIP_TYPE_FIXUP_TABLE[@]}"
407de440615SJoseph Chen	do
408*b42b4e11SJoseph Chen		config_xxx=`echo ${item} | awk '{ print $1 }'`
4097c3ca500SJoseph Chen		if grep  -q "^${config_xxx}=y" .config ; then
410*b42b4e11SJoseph Chen			RKCHIP=`echo ${item} | awk '{ print $2 }'`
411*b42b4e11SJoseph Chen			RKCHIP_LOADER=`echo ${item} | awk '{ print $3 }'`
412*b42b4e11SJoseph Chen			RKCHIP_TRUST=`echo  ${item} | awk '{ print $4 }'`
413*b42b4e11SJoseph Chen			RKCHIP_LABEL=`echo  ${item} | awk '{ print $5 }'`
414de440615SJoseph Chen		fi
4150583701dSJoseph Chen	done
4160583701dSJoseph Chen
417*b42b4e11SJoseph Chen	if [ "${RKCHIP_LOADER}" == "-" ]; then
4180583701dSJoseph Chen		RKCHIP_LOADER=${RKCHIP}
419de440615SJoseph Chen	fi
420*b42b4e11SJoseph Chen	if [ "${RKCHIP_TRUST}" == "-" ]; then
4210583701dSJoseph Chen		RKCHIP_TRUST=${RKCHIP}
4220583701dSJoseph Chen	fi
423*b42b4e11SJoseph Chen	if [ "${RKCHIP_LABEL}" == "-" ]; then
4240583701dSJoseph Chen		RKCHIP_LABEL=${RKCHIP}
4250583701dSJoseph Chen	fi
4260583701dSJoseph Chen}
4270583701dSJoseph Chen
4280583701dSJoseph Chenfunction fixup_platform_configure()
4290583701dSJoseph Chen{
430b768b915SJoseph Chen	u_kb="-" u_num="-" t_kb="-" t_num="-"  sha="-" rsa="-"
4310583701dSJoseph Chen
4327c3ca500SJoseph Chen	for item in "${CHIP_CFG_FIXUP_TABLE[@]}"
4330583701dSJoseph Chen	do
434*b42b4e11SJoseph Chen		config_xxx=`echo ${item} | awk '{ print $1 }'`
4357c3ca500SJoseph Chen		if grep  -q "^${config_xxx}=y" .config ; then
4360583701dSJoseph Chen			# <*> Fixup rsa/sha pack mode for platforms
437*b42b4e11SJoseph Chen			rsa=`echo ${item} | awk '{ print $2 }'`
438*b42b4e11SJoseph Chen			sha=`echo ${item} | awk '{ print $3 }'`
4390583701dSJoseph Chen
4400583701dSJoseph Chen			# <*> Fixup images size pack for platforms, and ini file
4410583701dSJoseph Chen			if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then
442*b42b4e11SJoseph Chen				u_kb=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $1 }'`
443*b42b4e11SJoseph Chen				t_kb=`echo  ${item} | awk '{ print $6 }' | awk -F "," '{ print $2 }'`
444*b42b4e11SJoseph Chen				u_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $1 }'`
445*b42b4e11SJoseph Chen				t_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $2 }'`
446*b42b4e11SJoseph Chen				PADDING=`echo ${item} | awk '{ print $8 }'`
447*b42b4e11SJoseph Chen				if [ "${PADDING}" != "-" ]; then
448*b42b4e11SJoseph Chen					RKCHIP_LOADER=${RKCHIP_LOADER}${PADDING}
4490583701dSJoseph Chen				fi
450*b42b4e11SJoseph Chen				PADDING=`echo  ${item} | awk '{ print $9 }'`
451*b42b4e11SJoseph Chen				if [ "${PADDING}" != "-" ]; then
452*b42b4e11SJoseph Chen					RKCHIP_TRUST=${RKCHIP_TRUST}${PADDING}
4530583701dSJoseph Chen				fi
4540583701dSJoseph Chen				RKCHIP_LABEL=${RKCHIP_LABEL}"AARCH32"
4550583701dSJoseph Chen			else
456*b42b4e11SJoseph Chen				u_kb=`echo  ${item} | awk '{ print $4 }' | awk -F "," '{ print $1 }'`
457*b42b4e11SJoseph Chen				t_kb=`echo  ${item} | awk '{ print $4 }' | awk -F "," '{ print $2 }'`
458*b42b4e11SJoseph Chen				u_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $1 }'`
459*b42b4e11SJoseph Chen				t_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $2 }'`
460de440615SJoseph Chen			fi
461de440615SJoseph Chen		fi
462de440615SJoseph Chen	done
463de440615SJoseph Chen
464*b42b4e11SJoseph Chen	if [ "${sha}" != "-" ]; then
465*b42b4e11SJoseph Chen		PLATFORM_SHA="--sha ${sha}"
4660583701dSJoseph Chen	fi
467*b42b4e11SJoseph Chen	if [ "${rsa}" != "-" ]; then
468*b42b4e11SJoseph Chen		PLATFORM_RSA="--rsa ${rsa}"
4690583701dSJoseph Chen	fi
470*b42b4e11SJoseph Chen	if [ "${u_kb}" != "-" ]; then
471*b42b4e11SJoseph Chen		PLATFORM_UBOOT_SIZE="--size ${u_kb} ${u_num}"
4720583701dSJoseph Chen	fi
473*b42b4e11SJoseph Chen	if [ "${t_kb}" != "-" ]; then
474*b42b4e11SJoseph Chen		PLATFORM_TRUST_SIZE="--size ${t_kb} ${t_num}"
475b768b915SJoseph Chen	fi
476b768b915SJoseph Chen}
477b768b915SJoseph Chen
478b768b915SJoseph Chenfunction select_ini_file()
479b768b915SJoseph Chen{
480b768b915SJoseph Chen	# default
481b768b915SJoseph Chen	INI_LOADER=${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini
482*b42b4e11SJoseph Chen	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
483b768b915SJoseph Chen		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TRUST.ini
484b768b915SJoseph Chen	else
485b768b915SJoseph Chen		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TOS.ini
48641cf5e5aSJoseph Chen	fi
48741cf5e5aSJoseph Chen
488b768b915SJoseph Chen	# args
489*b42b4e11SJoseph Chen	if [ "${ARG_INI_TRUST}" != "" ]; then
490*b42b4e11SJoseph Chen		INI_TRUST=${ARG_INI_TRUST}
491b768b915SJoseph Chen	fi
492*b42b4e11SJoseph Chen	if [ "${ARG_INI_LOADER}" != "" ]; then
493*b42b4e11SJoseph Chen		INI_LOADER=${ARG_INI_LOADER}
494b768b915SJoseph Chen	fi
49527a50c86SAndy Yan}
496de9a6cd2SJoseph Chen
497b6e67ca8SJoseph Chenfunction handle_args_late()
498b6e67ca8SJoseph Chen{
499*b42b4e11SJoseph Chen	ARG_LIST_FIT="${ARG_LIST_FIT} --ini-trust ${INI_TRUST} --ini-loader ${INI_LOADER}"
500b6e67ca8SJoseph Chen}
501b6e67ca8SJoseph Chen
5027c3ca500SJoseph Chenfunction pack_uboot_image()
503de9a6cd2SJoseph Chen{
504*b42b4e11SJoseph Chen	if [ "${PLATFORM_TYPE}" != "RKFW" ]; then
5058f53a15cSJoseph Chen		return
5068f53a15cSJoseph Chen	fi
5078f53a15cSJoseph Chen
508f089d907SJoseph Chen	# Check file size
5097c3ca500SJoseph Chen	head_kb=2
5107c3ca500SJoseph Chen	uboot_kb=`ls -l u-boot.bin | awk '{ print $5 }'`
511*b42b4e11SJoseph Chen	if [ "${PLATFORM_UBOOT_SIZE}" == "" ]; then
5127c3ca500SJoseph Chen		uboot_max_kb=1046528
513f089d907SJoseph Chen	else
514*b42b4e11SJoseph Chen		uboot_max_kb=`echo ${PLATFORM_UBOOT_SIZE} | awk '{print strtonum($2)}'`
5157c3ca500SJoseph Chen		uboot_max_kb=$(((uboot_max_kb-head_kb)*1024))
516f089d907SJoseph Chen	fi
517f089d907SJoseph Chen
518*b42b4e11SJoseph Chen	if [ ${uboot_kb} -gt ${uboot_max_kb} ]; then
519f089d907SJoseph Chen		echo
520*b42b4e11SJoseph Chen		echo "ERROR: pack uboot failed! u-boot.bin actual: ${uboot_kb} bytes, max limit: ${uboot_max_kb} bytes"
521f089d907SJoseph Chen		exit 1
522f089d907SJoseph Chen	fi
523f089d907SJoseph Chen
5247c3ca500SJoseph Chen	# Pack
5257c3ca500SJoseph Chen	uboot_load_addr=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" include/autoconf.mk|tr -d '\r'`
526*b42b4e11SJoseph Chen	if [ -z ${uboot_load_addr} ]; then
5277c3ca500SJoseph Chen		echo "ERROR: No CONFIG_SYS_TEXT_BASE for u-boot";
5287c3ca500SJoseph Chen		exit 1
529daa679a7SKever Yang	fi
530*b42b4e11SJoseph Chen	${RKTOOLS}/loaderimage --pack --uboot u-boot.bin uboot.img ${uboot_load_addr} ${PLATFORM_UBOOT_SIZE}
531a11e2c82SJoseph Chen	rm u-boot.img u-boot-dtb.img -rf
532d6821889SJoseph Chen	echo "pack uboot okay! Input: u-boot.bin"
533de9a6cd2SJoseph Chen}
534de9a6cd2SJoseph Chen
5357c3ca500SJoseph Chenfunction pack_uboot_itb_image()
536daa3bef5SJoseph Chen{
537*b42b4e11SJoseph Chen	ini=${INI_TRUST}
538*b42b4e11SJoseph Chen	if [ ! -f ${INI_TRUST} ]; then
539*b42b4e11SJoseph Chen		echo "pack trust failed! Can't find: ${INI_TRUST}"
5400d0d4395SJoseph Chen		return
5410d0d4395SJoseph Chen	fi
5420d0d4395SJoseph Chen
543*b42b4e11SJoseph Chen	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
544*b42b4e11SJoseph Chen		bl31=`sed -n '/_bl31_/s/PATH=//p' ${ini} |tr -d '\r'`
5457c3ca500SJoseph Chen		cp ${RKBIN}/${bl31} bl31.elf
5467c3ca500SJoseph Chen		make CROSS_COMPILE=${TOOLCHAIN_GCC} u-boot.itb
547*b42b4e11SJoseph Chen		echo "pack u-boot.itb okay! Input: ${ini}"
5480d0d4395SJoseph Chen	else
549*b42b4e11SJoseph Chen		tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'`
550*b42b4e11SJoseph Chen		tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'`
551*b42b4e11SJoseph Chen		if [ ${tosta_image} ]; then
5527c3ca500SJoseph Chen			cp ${RKBIN}/${tosta_image} tee.bin
553*b42b4e11SJoseph Chen		elif [ ${tos_image} ]; then
5547c3ca500SJoseph Chen			cp ${RKBIN}/${tos_image}   tee.bin
5557c3ca500SJoseph Chen		else
5567c3ca500SJoseph Chen			echo "ERROR: No any tee bin"
5570d0d4395SJoseph Chen			exit 1
5580d0d4395SJoseph Chen		fi
5590d0d4395SJoseph Chen
560*b42b4e11SJoseph Chen		tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'`
561*b42b4e11SJoseph Chen		if [ "${tee_offset}" == "" ]; then
5627c3ca500SJoseph Chen			tee_offset=0x8400000
563d13b75e1SJoseph Chen		fi
564d13b75e1SJoseph Chen
565*b42b4e11SJoseph Chen		mcu_enabled=`awk -F"," '/MCU=/ { printf $3 }' ${ini} | tr -d ' '`
566*b42b4e11SJoseph Chen		if [ "${mcu_enabled}" == "enabled" ]; then
567*b42b4e11SJoseph Chen			mcu_image=`awk -F"," '/MCU=/  { printf $1 }' ${ini} | tr -d ' ' | cut -c 5-`
568*b42b4e11SJoseph Chen			mcu_offset=`awk -F"," '/MCU=/ { printf $2 }' ${ini} | tr -d ' '`
56985101532SJoseph Chen			cp ${RKBIN}/${mcu_image} mcu.bin
57085101532SJoseph Chen		fi
57185101532SJoseph Chen
572db3b6a92SJoseph Chen		SPL_FIT_SOURCE=`sed -n "/CONFIG_SPL_FIT_SOURCE=/s/CONFIG_SPL_FIT_SOURCE=//p" .config | tr -d '""'`
573*b42b4e11SJoseph Chen		if [ ! -z ${SPL_FIT_SOURCE} ]; then
574*b42b4e11SJoseph Chen			cp ${SPL_FIT_SOURCE} u-boot.its
575db3b6a92SJoseph Chen		else
576db3b6a92SJoseph Chen			SPL_FIT_GENERATOR=`sed -n "/CONFIG_SPL_FIT_GENERATOR=/s/CONFIG_SPL_FIT_GENERATOR=//p" .config | tr -d '""'`
577*b42b4e11SJoseph Chen			${SPL_FIT_GENERATOR} ${tee_offset} ${mcu_offset} > u-boot.its
578db3b6a92SJoseph Chen		fi
579d13b75e1SJoseph Chen		./tools/mkimage -f u-boot.its -E u-boot.itb
580*b42b4e11SJoseph Chen		echo "pack u-boot.itb okay! Input: ${ini}"
5810d0d4395SJoseph Chen	fi
582b768b915SJoseph Chen	echo
583daa3bef5SJoseph Chen}
584daa3bef5SJoseph Chen
5857c3ca500SJoseph Chenfunction pack_spl_loader_image()
586daa3bef5SJoseph Chen{
5877c3ca500SJoseph Chen	mode=$1
588*b42b4e11SJoseph Chen	tmpdir=${RKBIN}/tmp
589*b42b4e11SJoseph Chen	tmpini=${tmpdir}/${RKCHIP_LOADER}MINIALL.ini
590*b42b4e11SJoseph Chen	ini=${INI_LOADER}
591*b42b4e11SJoseph Chen	if [ ! -f ${INI_LOADER} ]; then
592*b42b4e11SJoseph Chen		echo "pack loader failed! Can't find: ${INI_LOADER}"
593daa3bef5SJoseph Chen		return
594daa3bef5SJoseph Chen	fi
595daa3bef5SJoseph Chen
596*b42b4e11SJoseph Chen	rm ${tmpdir} -rf && mkdir ${tmpdir} -p
597*b42b4e11SJoseph Chen	cp spl/u-boot-spl.bin ${tmpdir}/ && cp ${ini} ${tmpini}
598*b42b4e11SJoseph Chen	if [ "${mode}" == "spl" ]; then	# pack tpl+spl
599daa3bef5SJoseph Chen		label="TPL+SPL"
600*b42b4e11SJoseph Chen		cp tpl/u-boot-tpl.bin ${tmpdir}/
6017c3ca500SJoseph Chen		header=`sed -n '/NAME=/s/NAME=//p' ${ini}`
602*b42b4e11SJoseph Chen		dd if=${tmpdir}/u-boot-tpl.bin of=${tmpdir}/tpl.bin bs=1 skip=4
603*b42b4e11SJoseph Chen		sed -i "1s/^/${header:0:4}/" ${tmpdir}/tpl.bin
604*b42b4e11SJoseph Chen		sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${tmpini}
6057c3ca500SJoseph Chen	else
6067c3ca500SJoseph Chen		label="SPL"
607daa3bef5SJoseph Chen	fi
608*b42b4e11SJoseph Chen	sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${tmpini}
609daa3bef5SJoseph Chen
6107c3ca500SJoseph Chen	cd ${RKBIN}
611*b42b4e11SJoseph Chen	${RKTOOLS}/boot_merger ${tmpini}
6127c3ca500SJoseph Chen
613*b42b4e11SJoseph Chen	rm ${tmpdir} -rf && cd -
614*b42b4e11SJoseph Chen	rm *_loader_*.bin -rf && mv ${RKBIN}/*_loader_*.bin ./
615aa8ddc58SJoseph Chen	filename=`basename *_loader_*.bin`
616*b42b4e11SJoseph Chen	if [[ ${filename} != *spl* ]]; then
617b4e157ffSJoseph Chen		rename 's/loader_/spl_loader_/' *_loader_*.bin
618aa8ddc58SJoseph Chen	fi
619*b42b4e11SJoseph Chen	echo "pack loader(${label}) okay! Input: ${ini}"
620daa3bef5SJoseph Chen}
621daa3bef5SJoseph Chen
6227c3ca500SJoseph Chenfunction pack_loader_image()
623cd7ae718SJoseph Chen{
624*b42b4e11SJoseph Chen	ini=${INI_LOADER}
625*b42b4e11SJoseph Chen	if [ ! -f ${INI_LOADER} ]; then
626*b42b4e11SJoseph Chen		echo "pack loader failed! Can't find: ${INI_LOADER}"
62751441a28SJoseph Chen		return
62851441a28SJoseph Chen	fi
62951441a28SJoseph Chen
630a11e2c82SJoseph Chen	rm *_loader_*.bin -rf
631*b42b4e11SJoseph Chen	numline=`cat ${ini} | wc -l`
632*b42b4e11SJoseph Chen	if [ ${numline} -eq 1 ]; then
633*b42b4e11SJoseph Chen		image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2`
634783f7f6eSJoseph Chen		cp ${RKBIN}/${image} ./
6357c3ca500SJoseph Chen	else
636cd7ae718SJoseph Chen		cd ${RKBIN}
637*b42b4e11SJoseph Chen		${RKTOOLS}/boot_merger ${ini}
638fb90bd1dSJoseph Chen		cd - && mv ${RKBIN}/*_loader_*.bin ./
6397c3ca500SJoseph Chen	fi
6407c3ca500SJoseph Chen
64169b6e590SJoseph Chen	file=`ls *loader*.bin`
642*b42b4e11SJoseph Chen	echo "pack ${file} okay! Input: ${ini}"
643cd7ae718SJoseph Chen}
644cd7ae718SJoseph Chen
6457c3ca500SJoseph Chenfunction pack_arm32_trust_image()
646cd7ae718SJoseph Chen{
6477c3ca500SJoseph Chen	ini=$1
648*b42b4e11SJoseph Chen	tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'`
649*b42b4e11SJoseph Chen	tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'`
650*b42b4e11SJoseph Chen	tee_output=`sed -n "/OUTPUT=/s/OUTPUT=//p" ${ini} |tr -d '\r'`
651*b42b4e11SJoseph Chen	if [ "${tee_output}" == "" ]; then
6527c3ca500SJoseph Chen		tee_output="./trust.img"
65351441a28SJoseph Chen	fi
654*b42b4e11SJoseph Chen	tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'`
655*b42b4e11SJoseph Chen	if [ "${tee_offset}" == "" ]; then
6567c3ca500SJoseph Chen		tee_offset=0x8400000
65751441a28SJoseph Chen	fi
65851441a28SJoseph Chen
659cd7ae718SJoseph Chen	# OP-TEE is 132M(0x8400000) offset from DRAM base.
660eee9fb0aSJoseph Chen	dram_base=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" include/autoconf.mk|tr -d '\r'`
6617c3ca500SJoseph Chen	tee_load_addr=$((dram_base+tee_offset))
6627c3ca500SJoseph Chen	tee_load_addr=$(echo "obase=16;${tee_load_addr}"|bc) # Convert Dec to Hex
6630e90839aSJoseph Chen
664*b42b4e11SJoseph Chen	if [ ${tosta_image} ]; then
665*b42b4e11SJoseph Chen		${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tosta_image} ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE}
666*b42b4e11SJoseph Chen	elif [ ${tos_image} ]; then
667*b42b4e11SJoseph Chen		${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tos_image}   ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE}
668cd7ae718SJoseph Chen	else
6697c3ca500SJoseph Chen		echo "ERROR: No any tee bin"
670a64486b5SJoseph Chen		exit 1
671cd7ae718SJoseph Chen	fi
672*b42b4e11SJoseph Chen	echo "pack trust okay! Input: ${ini}"
67369cce37bSJoseph Chen}
67469cce37bSJoseph Chen
6757c3ca500SJoseph Chenfunction pack_arm64_trust_image()
67669cce37bSJoseph Chen{
6777c3ca500SJoseph Chen	ini=$1
67869cce37bSJoseph Chen	cd ${RKBIN}
679*b42b4e11SJoseph Chen	${RKTOOLS}/trust_merger ${PLATFORM_SHA} ${PLATFORM_RSA} ${PLATFORM_TRUST_SIZE} ${ini}
68069cce37bSJoseph Chen	cd - && mv ${RKBIN}/trust*.img ./
681*b42b4e11SJoseph Chen	echo "pack trust okay! Input: ${ini}"
68269cce37bSJoseph Chen}
68369cce37bSJoseph Chen
6847c3ca500SJoseph Chenfunction pack_trust_image()
68569cce37bSJoseph Chen{
686*b42b4e11SJoseph Chen	if [ "${PLATFORM_TYPE}" != "RKFW" ]; then
6878f53a15cSJoseph Chen		return
6888f53a15cSJoseph Chen	fi
6898f53a15cSJoseph Chen
690a11e2c82SJoseph Chen	rm trust*.img -rf
691*b42b4e11SJoseph Chen	ini=${INI_TRUST}
692*b42b4e11SJoseph Chen	if [ ! -f ${INI_TRUST} ]; then
693*b42b4e11SJoseph Chen		echo "pack trust failed! Can't find: ${INI_TRUST}"
6947c3ca500SJoseph Chen		return
695dd590c93SJoseph Chen	fi
696dd590c93SJoseph Chen
697*b42b4e11SJoseph Chen	numline=`cat ${ini} | wc -l`
698*b42b4e11SJoseph Chen	if [ ${numline} -eq 1 ]; then
699*b42b4e11SJoseph Chen		image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2`
700783f7f6eSJoseph Chen		cp ${RKBIN}/${image} ./trust.img
701*b42b4e11SJoseph Chen		echo "pack trust okay! Input: ${ini}"
702783f7f6eSJoseph Chen		return;
70369cce37bSJoseph Chen	else
704*b42b4e11SJoseph Chen		if [ "${ARM64_TRUSTZONE}" == "y" ]; then
705*b42b4e11SJoseph Chen			pack_arm64_trust_image ${ini}
7067c3ca500SJoseph Chen		else
707*b42b4e11SJoseph Chen			pack_arm32_trust_image ${ini}
708dd590c93SJoseph Chen		fi
709cd7ae718SJoseph Chen	fi
710cd7ae718SJoseph Chen}
711cd7ae718SJoseph Chen
7128f53a15cSJoseph Chenfunction pack_fit_image()
7138f53a15cSJoseph Chen{
7144b4c6841SJoseph Chen	if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then
715*b42b4e11SJoseph Chen		./scripts/fit-mkimg.sh --uboot --boot ${ARG_LIST_FIT}
7164b4c6841SJoseph Chen	else
717a11e2c82SJoseph Chen		rm uboot.img trust*.img -rf
718*b42b4e11SJoseph Chen		./scripts/fit-mkimg.sh --uboot --no-vboot --no-rebuild ${ARG_LIST_FIT}
719*b42b4e11SJoseph Chen		echo "pack uboot.img okay! Input: ${INI_TRUST}"
7204b4c6841SJoseph Chen	fi
7218f53a15cSJoseph Chen}
7228f53a15cSJoseph Chen
7238f53a15cSJoseph Chenfunction pack_images()
7248f53a15cSJoseph Chen{
725*b42b4e11SJoseph Chen	if [ "${ARG_NO_PACK}" != "y" ]; then
726*b42b4e11SJoseph Chen		if [ "${PLATFORM_TYPE}" == "RKFW" ]; then
7278f53a15cSJoseph Chen			pack_uboot_image
7288f53a15cSJoseph Chen			pack_trust_image
7298f53a15cSJoseph Chen			pack_loader_image
730*b42b4e11SJoseph Chen		elif [ "${PLATFORM_TYPE}" == "FIT" ]; then
731*b42b4e11SJoseph Chen			pack_fit_image ${ARG_LIST_FIT}
7328f53a15cSJoseph Chen		fi
7338f53a15cSJoseph Chen	fi
7348f53a15cSJoseph Chen}
7358f53a15cSJoseph Chen
7368f53a15cSJoseph Chenfunction clean_files()
7378f53a15cSJoseph Chen{
738*b42b4e11SJoseph Chen	rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -rf
7398f53a15cSJoseph Chen}
7408f53a15cSJoseph Chen
7417c3ca500SJoseph Chenfunction finish()
74230b04afcSJoseph Chen{
74330b04afcSJoseph Chen	echo
744*b42b4e11SJoseph Chen	if [ "${ARG_BOARD}" == "" ]; then
7455202fe1fSJoseph Chen		echo "Platform ${RKCHIP_LABEL} is build OK, with exist .config"
74630b04afcSJoseph Chen	else
747b768b915SJoseph Chen		echo "Platform ${RKCHIP_LABEL} is build OK, with new .config(make ${ARG_BOARD}_defconfig)"
74830b04afcSJoseph Chen	fi
74930b04afcSJoseph Chen}
75030b04afcSJoseph Chen
751b768b915SJoseph Chenprocess_args $*
752cd7ae718SJoseph Chenprepare
7537c2526e9SJoseph Chenselect_toolchain
754de440615SJoseph Chenselect_chip_info
75541cf5e5aSJoseph Chenfixup_platform_configure
756b768b915SJoseph Chenselect_ini_file
757b6e67ca8SJoseph Chenhandle_args_late
7580ff0e214SJoseph Chensub_commands
7598f53a15cSJoseph Chenclean_files
760*b42b4e11SJoseph Chenmake CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB}
7618f53a15cSJoseph Chenpack_images
76230b04afcSJoseph Chenfinish
7631ff581bbSJoseph Chen
764