18d6344f9Sopenharmony_ci#!/bin/bash
28d6344f9Sopenharmony_ci
38d6344f9Sopenharmony_ci# Copyright (c) 2021 HiHope Open Source Organization .
48d6344f9Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
58d6344f9Sopenharmony_ci# you may not use this file except in compliance with the License.
68d6344f9Sopenharmony_ci# You may obtain a copy of the License at
78d6344f9Sopenharmony_ci#
88d6344f9Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
98d6344f9Sopenharmony_ci#
108d6344f9Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
118d6344f9Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
128d6344f9Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d6344f9Sopenharmony_ci# See the License for the specific language governing permissions and
148d6344f9Sopenharmony_ci# limitations under the License.
158d6344f9Sopenharmony_ci
168d6344f9Sopenharmony_ciset -e
178d6344f9Sopenharmony_ciJOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`
188d6344f9Sopenharmony_ciSUPPORT_LIST=`ls configs/*[r,p][x,v,k][0-9][0-9]*_defconfig`
198d6344f9Sopenharmony_ciCMD_ARGS=$1
208d6344f9Sopenharmony_ci
218d6344f9Sopenharmony_ci########################################### User can modify #############################################
228d6344f9Sopenharmony_ciRKBIN_TOOLS=./rkbin/tools
238d6344f9Sopenharmony_ciCROSS_COMPILE_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
248d6344f9Sopenharmony_ci#CROSS_COMPILE_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
258d6344f9Sopenharmony_ciCROSS_COMPILE_ARM64=../../../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
268d6344f9Sopenharmony_ci########################################### User not touch #############################################
278d6344f9Sopenharmony_ci# Declare global INI file searching index name for every chip, update in select_chip_info()
288d6344f9Sopenharmony_ciRKCHIP=
298d6344f9Sopenharmony_ciRKCHIP_LABEL=
308d6344f9Sopenharmony_ciRKCHIP_LOADER=
318d6344f9Sopenharmony_ciRKCHIP_TRUST=
328d6344f9Sopenharmony_ciINI_TRUST=
338d6344f9Sopenharmony_ciINI_LOADER=
348d6344f9Sopenharmony_ci
358d6344f9Sopenharmony_ci# Declare rkbin repository path, updated in prepare()
368d6344f9Sopenharmony_ciRKBIN=
378d6344f9Sopenharmony_ci
388d6344f9Sopenharmony_ci# Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain()
398d6344f9Sopenharmony_ciTOOLCHAIN=
408d6344f9Sopenharmony_ciTOOLCHAIN_NM=
418d6344f9Sopenharmony_ciTOOLCHAIN_OBJDUMP=
428d6344f9Sopenharmony_ciTOOLCHAIN_ADDR2LINE=
438d6344f9Sopenharmony_ci
448d6344f9Sopenharmony_ci# Declare global plaform configure, updated in fixup_platform_configure()
458d6344f9Sopenharmony_ciPLAT_RSA=
468d6344f9Sopenharmony_ciPLAT_SHA=
478d6344f9Sopenharmony_ciPLAT_UBOOT_SIZE=
488d6344f9Sopenharmony_ciPLAT_TRUST_SIZE=
498d6344f9Sopenharmony_ciPLAT_TYPE="RKFW" # default
508d6344f9Sopenharmony_ci
518d6344f9Sopenharmony_ciSRCTREE=`pwd`
528d6344f9Sopenharmony_ciSCRIPT_FIT="${SRCTREE}/scripts/fit.sh"
538d6344f9Sopenharmony_ci
548d6344f9Sopenharmony_ciSCRIPT_ATF="${SRCTREE}/scripts/atf.sh"
558d6344f9Sopenharmony_ciSCRIPT_TOS="${SRCTREE}/scripts/tos.sh"
568d6344f9Sopenharmony_ciSCRIPT_SPL="${SRCTREE}/scripts/spl.sh"
578d6344f9Sopenharmony_ciSCRIPT_UBOOT="${SRCTREE}/scripts/uboot.sh"
588d6344f9Sopenharmony_ciSCRIPT_LOADER="${SRCTREE}/scripts/loader.sh"
598d6344f9Sopenharmony_ciSCRIPT_DECOMP="${SRCTREE}/scripts/decomp.sh"
608d6344f9Sopenharmony_ciCC_FILE=".cc"
618d6344f9Sopenharmony_ciREP_DIR="./rep"
628d6344f9Sopenharmony_ci#########################################################################################################
638d6344f9Sopenharmony_cifunction help()
648d6344f9Sopenharmony_ci{
658d6344f9Sopenharmony_ci	echo
668d6344f9Sopenharmony_ci	echo "Usage:"
678d6344f9Sopenharmony_ci	echo "	./make.sh [board|sub-command]"
688d6344f9Sopenharmony_ci	echo
698d6344f9Sopenharmony_ci	echo "	 - board:        board name of defconfig"
708d6344f9Sopenharmony_ci	echo "	 - sub-command:  elf*|loader|trust|uboot|--spl|--tpl|itb|map|sym|<addr>"
718d6344f9Sopenharmony_ci	echo "	 - ini:          ini file to pack trust/loader"
728d6344f9Sopenharmony_ci	echo
738d6344f9Sopenharmony_ci	echo "Output:"
748d6344f9Sopenharmony_ci	echo "	 When board built okay, there are uboot/trust/loader images in current directory"
758d6344f9Sopenharmony_ci	echo
768d6344f9Sopenharmony_ci	echo "Example:"
778d6344f9Sopenharmony_ci	echo
788d6344f9Sopenharmony_ci	echo "1. Build:"
798d6344f9Sopenharmony_ci	echo "	./make.sh evb-rk3399               --- build for evb-rk3399_defconfig"
808d6344f9Sopenharmony_ci	echo "	./make.sh firefly-rk3288           --- build for firefly-rk3288_defconfig"
818d6344f9Sopenharmony_ci	echo "	./make.sh EXT_DTB=rk-kernel.dtb    --- build with exist .config and external dtb"
828d6344f9Sopenharmony_ci	echo "	./make.sh                          --- build with exist .config"
838d6344f9Sopenharmony_ci	echo "	./make.sh env                      --- build envtools"
848d6344f9Sopenharmony_ci	echo
858d6344f9Sopenharmony_ci	echo "2. Pack:"
868d6344f9Sopenharmony_ci	echo "	./make.sh uboot                    --- pack uboot.img"
878d6344f9Sopenharmony_ci	echo "	./make.sh trust                    --- pack trust.img"
888d6344f9Sopenharmony_ci	echo "	./make.sh trust <ini>              --- pack trust img with assigned ini file"
898d6344f9Sopenharmony_ci	echo "	./make.sh loader                   --- pack loader bin"
908d6344f9Sopenharmony_ci	echo "	./make.sh loader <ini>             --- pack loader img with assigned ini file"
918d6344f9Sopenharmony_ci	echo "	./make.sh --spl                    --- pack loader with u-boot-spl.bin"
928d6344f9Sopenharmony_ci	echo "	./make.sh --tpl                    --- pack loader with u-boot-tpl.bin"
938d6344f9Sopenharmony_ci	echo "	./make.sh --tpl --spl              --- pack loader with u-boot-tpl.bin and u-boot-spl.bin"
948d6344f9Sopenharmony_ci	echo
958d6344f9Sopenharmony_ci	echo "3. Debug:"
968d6344f9Sopenharmony_ci	echo "	./make.sh elf                      --- dump elf file with -D(default)"
978d6344f9Sopenharmony_ci	echo "	./make.sh elf-S                    --- dump elf file with -S"
988d6344f9Sopenharmony_ci	echo "	./make.sh elf-d                    --- dump elf file with -d"
998d6344f9Sopenharmony_ci	echo "	./make.sh elf-*                    --- dump elf file with -*"
1008d6344f9Sopenharmony_ci	echo "	./make.sh <no reloc_addr>          --- unwind address(no relocated)"
1018d6344f9Sopenharmony_ci	echo "	./make.sh <reloc_addr-reloc_off>   --- unwind address(relocated)"
1028d6344f9Sopenharmony_ci	echo "	./make.sh map                      --- cat u-boot.map"
1038d6344f9Sopenharmony_ci	echo "	./make.sh sym                      --- cat u-boot.sym"
1048d6344f9Sopenharmony_ci}
1058d6344f9Sopenharmony_ci
1068d6344f9Sopenharmony_cifunction filt_val()
1078d6344f9Sopenharmony_ci{
1088d6344f9Sopenharmony_ci	sed -n "/${1}=/s/${1}=//p" $2 | tr -d '\r' | tr -d '"'
1098d6344f9Sopenharmony_ci}
1108d6344f9Sopenharmony_ci
1118d6344f9Sopenharmony_cifunction prepare()
1128d6344f9Sopenharmony_ci{
1138d6344f9Sopenharmony_ci	if [ -d ${RKBIN_TOOLS} ]; then
1148d6344f9Sopenharmony_ci		absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd)
1158d6344f9Sopenharmony_ci		RKBIN=${absolute_path}
1168d6344f9Sopenharmony_ci	else
1178d6344f9Sopenharmony_ci		echo "ERROR: No ../rkbin repository"
1188d6344f9Sopenharmony_ci		exit 1
1198d6344f9Sopenharmony_ci	fi
1208d6344f9Sopenharmony_ci
1218d6344f9Sopenharmony_ci	if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' .config ; then
1228d6344f9Sopenharmony_ci		ARM64_TRUSTZONE="y"
1238d6344f9Sopenharmony_ci	fi
1248d6344f9Sopenharmony_ci
1258d6344f9Sopenharmony_ci	if grep  -q '^CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y' .config ; then
1268d6344f9Sopenharmony_ci		PLAT_TYPE="FIT"
1278d6344f9Sopenharmony_ci	elif grep  -q '^CONFIG_SPL_DECOMP_HEADER=y' .config ; then
1288d6344f9Sopenharmony_ci		PLAT_TYPE="DECOMP"
1298d6344f9Sopenharmony_ci	fi
1308d6344f9Sopenharmony_ci}
1318d6344f9Sopenharmony_ci
1328d6344f9Sopenharmony_cifunction process_args()
1338d6344f9Sopenharmony_ci{
1348d6344f9Sopenharmony_ci	while [ $# -gt 0 ]; do
1358d6344f9Sopenharmony_ci		case $1 in
1368d6344f9Sopenharmony_ci			*help|--h|-h)
1378d6344f9Sopenharmony_ci				help
1388d6344f9Sopenharmony_ci				exit 0
1398d6344f9Sopenharmony_ci				;;
1408d6344f9Sopenharmony_ci			CROSS_COMPILE=*)  # set CROSS_COMPILE
1418d6344f9Sopenharmony_ci				ARG_COMPILE="y"
1428d6344f9Sopenharmony_ci				CROSS_COMPILE_ARM32=${1#*=}
1438d6344f9Sopenharmony_ci				CROSS_COMPILE_ARM64=${1#*=}
1448d6344f9Sopenharmony_ci				if [ ${CMD_ARGS} == $1 ]; then
1458d6344f9Sopenharmony_ci					shift 1
1468d6344f9Sopenharmony_ci					CMD_ARGS=$1
1478d6344f9Sopenharmony_ci				else
1488d6344f9Sopenharmony_ci					shift 1
1498d6344f9Sopenharmony_ci				fi
1508d6344f9Sopenharmony_ci				;;
1518d6344f9Sopenharmony_ci			# '': build with exist .config
1528d6344f9Sopenharmony_ci			# loader|trust|uboot: pack image
1538d6344f9Sopenharmony_ci			# debug*|map|sym|elf*|nm: debug command
1548d6344f9Sopenharmony_ci			# env: build env tool
1558d6344f9Sopenharmony_ci			# itb: pack itb image
1568d6344f9Sopenharmony_ci			# fit: pack non-secure uboot.img && boot.img
1578d6344f9Sopenharmony_ci			''|loader|trust|uboot|debug*|itb|env|fit|map|sym|elf*|nm)
1588d6344f9Sopenharmony_ci				if [ "$2" == "spl" -o "$2" == "tpl" ]; then
1598d6344f9Sopenharmony_ci					ARG_TSPL=$2
1608d6344f9Sopenharmony_ci					shift 1
1618d6344f9Sopenharmony_ci				fi
1628d6344f9Sopenharmony_ci				shift 1
1638d6344f9Sopenharmony_ci				;;
1648d6344f9Sopenharmony_ci			# trust/loader ini files for packing trust.img/loader.img
1658d6344f9Sopenharmony_ci			*.ini|*.INI)
1668d6344f9Sopenharmony_ci				if [ ! -f $1 ]; then
1678d6344f9Sopenharmony_ci					echo "ERROR: No $1"
1688d6344f9Sopenharmony_ci				fi
1698d6344f9Sopenharmony_ci				if grep -q 'CODE471_OPTION' $1 ; then
1708d6344f9Sopenharmony_ci					ARG_INI_LOADER=$1
1718d6344f9Sopenharmony_ci				elif grep -Eq ''BL31_OPTION'|'TOS'' $1 ; then
1728d6344f9Sopenharmony_ci					ARG_INI_TRUST=$1
1738d6344f9Sopenharmony_ci				fi
1748d6344f9Sopenharmony_ci				shift 1
1758d6344f9Sopenharmony_ci				;;
1768d6344f9Sopenharmony_ci			--sz-trust) # set trust size
1778d6344f9Sopenharmony_ci				ARG_TRUST_SIZE="--size $2 $3"
1788d6344f9Sopenharmony_ci				shift 3
1798d6344f9Sopenharmony_ci				;;
1808d6344f9Sopenharmony_ci			--sz-uboot) # set uboot size
1818d6344f9Sopenharmony_ci				ARG_UBOOT_SIZE="--size $2 $3"
1828d6344f9Sopenharmony_ci				shift 3
1838d6344f9Sopenharmony_ci				;;
1848d6344f9Sopenharmony_ci			--raw-compile)  # FIT: build but not pack image
1858d6344f9Sopenharmony_ci				ARG_RAW_COMPILE="y"
1868d6344f9Sopenharmony_ci				shift 1
1878d6344f9Sopenharmony_ci				;;
1888d6344f9Sopenharmony_ci			--no-uboot) # FIT: pack uboot.img without u-boot
1898d6344f9Sopenharmony_ci				ARG_NO_UBOOT="y"
1908d6344f9Sopenharmony_ci				shift 1
1918d6344f9Sopenharmony_ci				;;
1928d6344f9Sopenharmony_ci			--idblock)  # pack idblock.bin
1938d6344f9Sopenharmony_ci				shift 1
1948d6344f9Sopenharmony_ci				;;
1958d6344f9Sopenharmony_ci			--tpl|tpl)  # use tpl file
1968d6344f9Sopenharmony_ci				ARG_TPL_BIN="tpl/u-boot-tpl.bin"
1978d6344f9Sopenharmony_ci				shift 1
1988d6344f9Sopenharmony_ci				;;
1998d6344f9Sopenharmony_ci			--spl|spl*) # use spl file
2008d6344f9Sopenharmony_ci				ARG_SPL_BIN="spl/u-boot-spl.bin"
2018d6344f9Sopenharmony_ci				shift 1
2028d6344f9Sopenharmony_ci				;;
2038d6344f9Sopenharmony_ci			--uboot|--fdt|--optee|--mcu|--bl31) # uboot.img components
2048d6344f9Sopenharmony_ci				mkdir -p ${REP_DIR}
2058d6344f9Sopenharmony_ci				if [ ! -f $2 ]; then
2068d6344f9Sopenharmony_ci					echo "ERROR: No $2"
2078d6344f9Sopenharmony_ci					exit 1
2088d6344f9Sopenharmony_ci				fi
2098d6344f9Sopenharmony_ci				if [ "$1" == "--uboot" ]; then
2108d6344f9Sopenharmony_ci					cp $2 ${REP_DIR}/u-boot-nodtb.bin
2118d6344f9Sopenharmony_ci				elif [ "$1" == "--fdt" ]; then
2128d6344f9Sopenharmony_ci					cp $2 ${REP_DIR}/u-boot.dtb
2138d6344f9Sopenharmony_ci				elif [ "$1" == "--optee" ]; then
2148d6344f9Sopenharmony_ci					cp $2 ${REP_DIR}/tee.bin
2158d6344f9Sopenharmony_ci				elif [ "$1" == "--mcu" ]; then
2168d6344f9Sopenharmony_ci					cp $2 ${REP_DIR}/mcu.bin
2178d6344f9Sopenharmony_ci				elif [ "$1" == "--bl31" ]; then
2188d6344f9Sopenharmony_ci					if ! file $2 | grep 'ELF ' >/dev/null 2>&1 ; then
2198d6344f9Sopenharmony_ci						echo "ERROR: $2 is not a bl31.elf file"
2208d6344f9Sopenharmony_ci						exit 1
2218d6344f9Sopenharmony_ci					fi
2228d6344f9Sopenharmony_ci					cp $2 ${REP_DIR}/bl31.elf
2238d6344f9Sopenharmony_ci				fi
2248d6344f9Sopenharmony_ci				shift 2
2258d6344f9Sopenharmony_ci				;;
2268d6344f9Sopenharmony_ci			*)
2278d6344f9Sopenharmony_ci				#1. FIT scripts args
2288d6344f9Sopenharmony_ci				NUM=$(${SCRIPT_FIT} --args $1)
2298d6344f9Sopenharmony_ci				if  [ ${NUM} -ne 0 ]; then
2308d6344f9Sopenharmony_ci					[ ${NUM} -eq 1 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1"
2318d6344f9Sopenharmony_ci					[ ${NUM} -eq 2 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1 $2"
2328d6344f9Sopenharmony_ci					shift ${NUM}
2338d6344f9Sopenharmony_ci					continue
2348d6344f9Sopenharmony_ci				#2. unwind function address
2358d6344f9Sopenharmony_ci				elif [ -z $(echo $1 | sed 's/[0-9,a-f,A-F,x,X,-]//g') ]; then
2368d6344f9Sopenharmony_ci					ARG_FUNCADDR=$1
2378d6344f9Sopenharmony_ci				#3. make defconfig
2388d6344f9Sopenharmony_ci				else
2398d6344f9Sopenharmony_ci					ARG_BOARD=$1
2408d6344f9Sopenharmony_ci					if [ ! -f configs/${ARG_BOARD}_defconfig -a ! -f configs/${ARG_BOARD}.config ]; then
2418d6344f9Sopenharmony_ci						echo -e "\n${SUPPORT_LIST}\n"
2428d6344f9Sopenharmony_ci						echo "ERROR: No configs/${ARG_BOARD}_defconfig"
2438d6344f9Sopenharmony_ci						exit 1
2448d6344f9Sopenharmony_ci					elif [ -f configs/${ARG_BOARD}.config ]; then
2458d6344f9Sopenharmony_ci						BASE1_DEFCONFIG=`filt_val "CONFIG_BASE_DEFCONFIG" configs/${ARG_BOARD}.config`
2468d6344f9Sopenharmony_ci						BASE0_DEFCONFIG=`filt_val "CONFIG_BASE_DEFCONFIG" configs/${BASE1_DEFCONFIG}`
2478d6344f9Sopenharmony_ci						MAKE_CMD="make ${BASE0_DEFCONFIG} ${BASE1_DEFCONFIG} ${ARG_BOARD}.config -j${JOB}"
2488d6344f9Sopenharmony_ci						echo "## ${MAKE_CMD}"
2498d6344f9Sopenharmony_ci						make ${BASE0_DEFCONFIG} ${BASE1_DEFCONFIG} ${ARG_BOARD}.config ${OPTION}
2508d6344f9Sopenharmony_ci						rm -f ${CC_FILE}
2518d6344f9Sopenharmony_ci					else
2528d6344f9Sopenharmony_ci						MAKE_CMD="make ${ARG_BOARD}_defconfig -j${JOB}"
2538d6344f9Sopenharmony_ci						echo "## ${MAKE_CMD}"
2548d6344f9Sopenharmony_ci						make ${ARG_BOARD}_defconfig ${OPTION}
2558d6344f9Sopenharmony_ci						rm -f ${CC_FILE}
2568d6344f9Sopenharmony_ci					fi
2578d6344f9Sopenharmony_ci				fi
2588d6344f9Sopenharmony_ci				shift 1
2598d6344f9Sopenharmony_ci				;;
2608d6344f9Sopenharmony_ci		esac
2618d6344f9Sopenharmony_ci	done
2628d6344f9Sopenharmony_ci
2638d6344f9Sopenharmony_ci	if [ ! -f .config ]; then
2648d6344f9Sopenharmony_ci		echo
2658d6344f9Sopenharmony_ci		echo "ERROR: No .config"
2668d6344f9Sopenharmony_ci		help
2678d6344f9Sopenharmony_ci		exit 1
2688d6344f9Sopenharmony_ci	fi
2698d6344f9Sopenharmony_ci}
2708d6344f9Sopenharmony_ci
2718d6344f9Sopenharmony_cifunction select_toolchain()
2728d6344f9Sopenharmony_ci{
2738d6344f9Sopenharmony_ci	# If no outer CROSS_COMPILE, look for it from CC_FILE.
2748d6344f9Sopenharmony_ci	if [ "${ARG_COMPILE}" != "y" ]; then
2758d6344f9Sopenharmony_ci		if [ -f ${CC_FILE} ]; then
2768d6344f9Sopenharmony_ci			CROSS_COMPILE_ARM32=`cat ${CC_FILE}`
2778d6344f9Sopenharmony_ci			CROSS_COMPILE_ARM64=`cat ${CC_FILE}`
2788d6344f9Sopenharmony_ci		else
2798d6344f9Sopenharmony_ci			if grep -q '^CONFIG_ARM64=y' .config ; then
2808d6344f9Sopenharmony_ci				CROSS_COMPILE_ARM64=$(cd `dirname ${CROSS_COMPILE_ARM64}`; pwd)"/aarch64-linux-gnu-"
2818d6344f9Sopenharmony_ci			else
2828d6344f9Sopenharmony_ci				CROSS_COMPILE_ARM32=$(cd `dirname ${CROSS_COMPILE_ARM32}`; pwd)"/arm-linux-gnueabihf-"
2838d6344f9Sopenharmony_ci			fi
2848d6344f9Sopenharmony_ci		fi
2858d6344f9Sopenharmony_ci	fi
2868d6344f9Sopenharmony_ci
2878d6344f9Sopenharmony_ci	if grep -q '^CONFIG_ARM64=y' .config ; then
2888d6344f9Sopenharmony_ci		TOOLCHAIN=${CROSS_COMPILE_ARM64}
2898d6344f9Sopenharmony_ci		TOOLCHAIN_NM=${CROSS_COMPILE_ARM64}nm
2908d6344f9Sopenharmony_ci		TOOLCHAIN_OBJDUMP=${CROSS_COMPILE_ARM64}objdump
2918d6344f9Sopenharmony_ci		TOOLCHAIN_ADDR2LINE=${CROSS_COMPILE_ARM64}addr2line
2928d6344f9Sopenharmony_ci	else
2938d6344f9Sopenharmony_ci		TOOLCHAIN=${CROSS_COMPILE_ARM32}
2948d6344f9Sopenharmony_ci		TOOLCHAIN_NM=${CROSS_COMPILE_ARM32}nm
2958d6344f9Sopenharmony_ci		TOOLCHAIN_OBJDUMP=${CROSS_COMPILE_ARM32}objdump
2968d6344f9Sopenharmony_ci		TOOLCHAIN_ADDR2LINE=${CROSS_COMPILE_ARM32}addr2line
2978d6344f9Sopenharmony_ci	fi
2988d6344f9Sopenharmony_ci
2998d6344f9Sopenharmony_ci	if [ ! `which ${TOOLCHAIN}gcc` ]; then
3008d6344f9Sopenharmony_ci		echo "ERROR: No find ${TOOLCHAIN}gcc"
3018d6344f9Sopenharmony_ci		exit 1
3028d6344f9Sopenharmony_ci	fi
3038d6344f9Sopenharmony_ci
3048d6344f9Sopenharmony_ci	# save to CC_FILE
3058d6344f9Sopenharmony_ci	if [ "${ARG_COMPILE}" == "y" ]; then
3068d6344f9Sopenharmony_ci		echo "${TOOLCHAIN}" > ${CC_FILE}
3078d6344f9Sopenharmony_ci	fi
3088d6344f9Sopenharmony_ci}
3098d6344f9Sopenharmony_ci
3108d6344f9Sopenharmony_ci#
3118d6344f9Sopenharmony_ci# We select chip info to do:
3128d6344f9Sopenharmony_ci#	1. RKCHIP:        fixup platform configure
3138d6344f9Sopenharmony_ci#	2. RKCHIP_LOADER: search ini file to pack loader
3148d6344f9Sopenharmony_ci#	3. RKCHIP_TRUST:  search ini file to pack trust
3158d6344f9Sopenharmony_ci#	4. RKCHIP_LABEL:  show build message
3168d6344f9Sopenharmony_ci#
3178d6344f9Sopenharmony_cifunction select_chip_info()
3188d6344f9Sopenharmony_ci{
3198d6344f9Sopenharmony_ci	# Read RKCHIP firstly from .config
3208d6344f9Sopenharmony_ci	# The regular expression that matching:
3218d6344f9Sopenharmony_ci	#  - PX30, PX3SE
3228d6344f9Sopenharmony_ci	#  - RK????, RK????X
3238d6344f9Sopenharmony_ci	#  - RV????
3248d6344f9Sopenharmony_ci	CHIP_PATTERN='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}'
3258d6344f9Sopenharmony_ci	RKCHIP=`egrep -o ${CHIP_PATTERN} .config`
3268d6344f9Sopenharmony_ci
3278d6344f9Sopenharmony_ci	# default
3288d6344f9Sopenharmony_ci	RKCHIP=${RKCHIP##*_}
3298d6344f9Sopenharmony_ci	RKCHIP_LOADER=${RKCHIP}
3308d6344f9Sopenharmony_ci	RKCHIP_TRUST=${RKCHIP}
3318d6344f9Sopenharmony_ci	RKCHIP_LABEL=`filt_val "CONFIG_CHIP_NAME" .config`
3328d6344f9Sopenharmony_ci	if [ -z "${RKCHIP_LABEL}" ]; then
3338d6344f9Sopenharmony_ci		RKCHIP_LABEL=${RKCHIP}
3348d6344f9Sopenharmony_ci	fi
3358d6344f9Sopenharmony_ci}
3368d6344f9Sopenharmony_ci
3378d6344f9Sopenharmony_ci# Priority: default < CHIP_CFG_FIXUP_TABLE() < make.sh args
3388d6344f9Sopenharmony_cifunction fixup_platform_configure()
3398d6344f9Sopenharmony_ci{
3408d6344f9Sopenharmony_ci	U_KB=`filt_val "CONFIG_UBOOT_SIZE_KB" .config`
3418d6344f9Sopenharmony_ci	U_NUM=`filt_val "CONFIG_UBOOT_NUM" .config`
3428d6344f9Sopenharmony_ci	T_KB=`filt_val "CONFIG_TRUST_SIZE_KB" .config`
3438d6344f9Sopenharmony_ci	T_NUM=`filt_val "CONFIG_TRUST_NUM" .config`
3448d6344f9Sopenharmony_ci	SHA=`filt_val "CONFIG_TRUST_SHA_MODE" .config`
3458d6344f9Sopenharmony_ci	RSA=`filt_val "CONFIG_TRUST_RSA_MODE" .config`
3468d6344f9Sopenharmony_ci
3478d6344f9Sopenharmony_ci	# .config
3488d6344f9Sopenharmony_ci	PLAT_UBOOT_SIZE="--size ${U_KB} ${U_NUM}"
3498d6344f9Sopenharmony_ci	PLAT_TRUST_SIZE="--size ${T_KB} ${T_NUM}"
3508d6344f9Sopenharmony_ci	PLAT_SHA="--sha ${SHA}"
3518d6344f9Sopenharmony_ci	PLAT_RSA="--rsa ${RSA}"
3528d6344f9Sopenharmony_ci
3538d6344f9Sopenharmony_ci	# ./make.sh args
3548d6344f9Sopenharmony_ci	if [ ! -z "${ARG_UBOOT_SIZE}" ]; then
3558d6344f9Sopenharmony_ci		PLAT_UBOOT_SIZE=${ARG_UBOOT_SIZE}
3568d6344f9Sopenharmony_ci	fi
3578d6344f9Sopenharmony_ci	if [ ! -z "${ARG_TRUST_SIZE}" ]; then
3588d6344f9Sopenharmony_ci		PLAT_TRUST_SIZE=${ARG_TRUST_SIZE}
3598d6344f9Sopenharmony_ci	fi
3608d6344f9Sopenharmony_ci}
3618d6344f9Sopenharmony_ci
3628d6344f9Sopenharmony_cifunction select_ini_file()
3638d6344f9Sopenharmony_ci{
3648d6344f9Sopenharmony_ci	# default
3658d6344f9Sopenharmony_ci	INI_LOADER=${RKBIN}/RKBOOT/${RKCHIP_LOADER}MINIALL.ini
3668d6344f9Sopenharmony_ci	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
3678d6344f9Sopenharmony_ci		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TRUST.ini
3688d6344f9Sopenharmony_ci	else
3698d6344f9Sopenharmony_ci		INI_TRUST=${RKBIN}/RKTRUST/${RKCHIP_TRUST}TOS.ini
3708d6344f9Sopenharmony_ci	fi
3718d6344f9Sopenharmony_ci
3728d6344f9Sopenharmony_ci	# defconfig
3738d6344f9Sopenharmony_ci	NAME=`filt_val "CONFIG_LOADER_INI" .config`
3748d6344f9Sopenharmony_ci	if [ ! -z "${NAME}" ]; then
3758d6344f9Sopenharmony_ci		INI_LOADER=${RKBIN}/RKBOOT/${NAME}
3768d6344f9Sopenharmony_ci	fi
3778d6344f9Sopenharmony_ci	NAME=`filt_val "CONFIG_TRUST_INI" .config`
3788d6344f9Sopenharmony_ci	if [ ! -z "${NAME}" ]; then
3798d6344f9Sopenharmony_ci		INI_TRUST=${RKBIN}/RKTRUST/${NAME}
3808d6344f9Sopenharmony_ci	fi
3818d6344f9Sopenharmony_ci
3828d6344f9Sopenharmony_ci	# args
3838d6344f9Sopenharmony_ci	if [ ! -z "${ARG_INI_TRUST}" ]; then
3848d6344f9Sopenharmony_ci		INI_TRUST=${ARG_INI_TRUST}
3858d6344f9Sopenharmony_ci	fi
3868d6344f9Sopenharmony_ci	if [ ! -z "${ARG_INI_LOADER}" ]; then
3878d6344f9Sopenharmony_ci		INI_LOADER=${ARG_INI_LOADER}
3888d6344f9Sopenharmony_ci	fi
3898d6344f9Sopenharmony_ci}
3908d6344f9Sopenharmony_ci
3918d6344f9Sopenharmony_cifunction sub_commands()
3928d6344f9Sopenharmony_ci{
3938d6344f9Sopenharmony_ci	# skip "--" parameter, such as "--rollback-index-..."
3948d6344f9Sopenharmony_ci	if [[ ${CMD_ARGS} != --* ]]; then
3958d6344f9Sopenharmony_ci		CMD=${CMD_ARGS%-*}
3968d6344f9Sopenharmony_ci		ARG=${CMD_ARGS#*-}
3978d6344f9Sopenharmony_ci	else
3988d6344f9Sopenharmony_ci		CMD=${CMD_ARGS}
3998d6344f9Sopenharmony_ci	fi
4008d6344f9Sopenharmony_ci
4018d6344f9Sopenharmony_ci	if [ "${ARG_TSPL}" == "tpl" -o "${ARG_TSPL}" == "spl" ]; then
4028d6344f9Sopenharmony_ci		ELF=`find -name u-boot-${ARG_TSPL}`
4038d6344f9Sopenharmony_ci		MAP=`find -name u-boot-${ARG_TSPL}.map`
4048d6344f9Sopenharmony_ci		SYM=`find -name u-boot-${ARG_TSPL}.sym`
4058d6344f9Sopenharmony_ci	else
4068d6344f9Sopenharmony_ci		ELF=u-boot
4078d6344f9Sopenharmony_ci		MAP=u-boot.map
4088d6344f9Sopenharmony_ci		SYM=u-boot.sym
4098d6344f9Sopenharmony_ci	fi
4108d6344f9Sopenharmony_ci
4118d6344f9Sopenharmony_ci	case ${CMD} in
4128d6344f9Sopenharmony_ci		elf|nm)
4138d6344f9Sopenharmony_ci			if [ "${CMD}" == "nm" ]; then
4148d6344f9Sopenharmony_ci				echo -e "\n${ELF}:     file format elf\n"
4158d6344f9Sopenharmony_ci				${TOOLCHAIN_NM} -r --size ${ELF} | grep -iv 'b' | less
4168d6344f9Sopenharmony_ci			else
4178d6344f9Sopenharmony_ci				if [ "${CMD}" == "elf" -a "${ARG}" == "elf" ]; then
4188d6344f9Sopenharmony_ci					ARG=D # default
4198d6344f9Sopenharmony_ci				fi
4208d6344f9Sopenharmony_ci				${TOOLCHAIN_OBJDUMP} -${ARG} ${ELF} | less
4218d6344f9Sopenharmony_ci			fi
4228d6344f9Sopenharmony_ci			exit 0
4238d6344f9Sopenharmony_ci			;;
4248d6344f9Sopenharmony_ci		map|sym)
4258d6344f9Sopenharmony_ci			if [ ${CMD} == "map" ]; then
4268d6344f9Sopenharmony_ci				cat ${MAP} | less
4278d6344f9Sopenharmony_ci			else
4288d6344f9Sopenharmony_ci				cat ${SYM} | less
4298d6344f9Sopenharmony_ci			fi
4308d6344f9Sopenharmony_ci			exit 0
4318d6344f9Sopenharmony_ci			;;
4328d6344f9Sopenharmony_ci		debug)
4338d6344f9Sopenharmony_ci			./scripts/rkpatch.sh ${ARG}
4348d6344f9Sopenharmony_ci			exit 0
4358d6344f9Sopenharmony_ci			;;
4368d6344f9Sopenharmony_ci		fit)
4378d6344f9Sopenharmony_ci			# Non-secure
4388d6344f9Sopenharmony_ci			${SCRIPT_FIT} --boot_img_dir images/ ${ARG_LIST_FIT}
4398d6344f9Sopenharmony_ci			exit 0
4408d6344f9Sopenharmony_ci			;;
4418d6344f9Sopenharmony_ci		uboot)
4428d6344f9Sopenharmony_ci			pack_uboot_image
4438d6344f9Sopenharmony_ci			exit 0
4448d6344f9Sopenharmony_ci			;;
4458d6344f9Sopenharmony_ci		trust)
4468d6344f9Sopenharmony_ci			pack_trust_image
4478d6344f9Sopenharmony_ci			exit 0
4488d6344f9Sopenharmony_ci			;;
4498d6344f9Sopenharmony_ci		loader)
4508d6344f9Sopenharmony_ci			pack_loader_image
4518d6344f9Sopenharmony_ci			exit 0
4528d6344f9Sopenharmony_ci			;;
4538d6344f9Sopenharmony_ci		itb)
4548d6344f9Sopenharmony_ci			pack_uboot_itb_image
4558d6344f9Sopenharmony_ci			exit 0
4568d6344f9Sopenharmony_ci			;;
4578d6344f9Sopenharmony_ci		env)
4588d6344f9Sopenharmony_ci			make CROSS_COMPILE=${TOOLCHAIN} envtools
4598d6344f9Sopenharmony_ci			exit 0
4608d6344f9Sopenharmony_ci			;;
4618d6344f9Sopenharmony_ci		--idblock)
4628d6344f9Sopenharmony_ci			pack_idblock
4638d6344f9Sopenharmony_ci			exit 0
4648d6344f9Sopenharmony_ci			;;
4658d6344f9Sopenharmony_ci		--tpl|--spl|tpl|spl)
4668d6344f9Sopenharmony_ci			pack_spl_loader_image
4678d6344f9Sopenharmony_ci			exit 0
4688d6344f9Sopenharmony_ci			;;
4698d6344f9Sopenharmony_ci		*)
4708d6344f9Sopenharmony_ci			unwind_addr_or_continue
4718d6344f9Sopenharmony_ci			;;
4728d6344f9Sopenharmony_ci	esac
4738d6344f9Sopenharmony_ci}
4748d6344f9Sopenharmony_ci
4758d6344f9Sopenharmony_cifunction unwind_addr_or_continue()
4768d6344f9Sopenharmony_ci{
4778d6344f9Sopenharmony_ci	FUNCADDR=${ARG_FUNCADDR}
4788d6344f9Sopenharmony_ci	RELOCOFF=${FUNCADDR#*-}
4798d6344f9Sopenharmony_ci	FUNCADDR=${FUNCADDR%-*}
4808d6344f9Sopenharmony_ci
4818d6344f9Sopenharmony_ci	if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then
4828d6344f9Sopenharmony_ci		# With prefix: '0x' or '0X'
4838d6344f9Sopenharmony_ci		if [ `echo ${FUNCADDR} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ]; then
4848d6344f9Sopenharmony_ci			FUNCADDR=`echo ${FUNCADDR} | awk '{ print strtonum($0) }'`
4858d6344f9Sopenharmony_ci			FUNCADDR=`echo "obase=16;${FUNCADDR}"|bc | tr '[A-Z]' '[a-z]'`
4868d6344f9Sopenharmony_ci		fi
4878d6344f9Sopenharmony_ci		if [ `echo ${RELOCOFF} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ] && [ ${RELOCOFF} ]; then
4888d6344f9Sopenharmony_ci			RELOCOFF=`echo ${RELOCOFF} | awk '{ print strtonum($0) }'`
4898d6344f9Sopenharmony_ci			RELOCOFF=`echo "obase=16;${RELOCOFF}"|bc | tr '[A-Z]' '[a-z]'`
4908d6344f9Sopenharmony_ci		fi
4918d6344f9Sopenharmony_ci
4928d6344f9Sopenharmony_ci		# If reloc address is assigned, do sub
4938d6344f9Sopenharmony_ci		if [ "${FUNCADDR}" != "${RELOCOFF}" ]; then
4948d6344f9Sopenharmony_ci			# Hex -> Dec -> SUB -> Hex
4958d6344f9Sopenharmony_ci			FUNCADDR=`echo $((16#${FUNCADDR}))`
4968d6344f9Sopenharmony_ci			RELOCOFF=`echo $((16#${RELOCOFF}))`
4978d6344f9Sopenharmony_ci			FUNCADDR=$((FUNCADDR-RELOCOFF))
4988d6344f9Sopenharmony_ci			FUNCADDR=$(echo "obase=16;${FUNCADDR}"|bc | tr '[A-Z]' '[a-z]')
4998d6344f9Sopenharmony_ci		fi
5008d6344f9Sopenharmony_ci
5018d6344f9Sopenharmony_ci		echo
5028d6344f9Sopenharmony_ci		sed -n "/${FUNCADDR}/p" ${SYM}
5038d6344f9Sopenharmony_ci		${TOOLCHAIN_ADDR2LINE} -e ${ELF} ${FUNCADDR}
5048d6344f9Sopenharmony_ci		exit 0
5058d6344f9Sopenharmony_ci	fi
5068d6344f9Sopenharmony_ci}
5078d6344f9Sopenharmony_ci
5088d6344f9Sopenharmony_cifunction pack_idblock()
5098d6344f9Sopenharmony_ci{
5108d6344f9Sopenharmony_ci	INI=${INI_LOADER}
5118d6344f9Sopenharmony_ci	if [ ! -f ${INI} ]; then
5128d6344f9Sopenharmony_ci		echo "ERROR: No ${INI}"
5138d6344f9Sopenharmony_ci		exit 1
5148d6344f9Sopenharmony_ci	fi
5158d6344f9Sopenharmony_ci
5168d6344f9Sopenharmony_ci	# chip
5178d6344f9Sopenharmony_ci	COMMON_H=`grep "_common.h:" include/autoconf.mk.dep | awk -F "/" '{ printf $3 }'`
5188d6344f9Sopenharmony_ci	PLAT=${COMMON_H%_*}
5198d6344f9Sopenharmony_ci
5208d6344f9Sopenharmony_ci	# file
5218d6344f9Sopenharmony_ci	SPL_BIN=${RKBIN}/`filt_val "FlashBoot" ${INI}`
5228d6344f9Sopenharmony_ci	TPL_BIN=${RKBIN}/`filt_val "FlashData" ${INI}`
5238d6344f9Sopenharmony_ci	if [ ! -z "${ARG_SPL_BIN}" ]; then
5248d6344f9Sopenharmony_ci		SPL_BIN=${ARG_SPL_BIN}
5258d6344f9Sopenharmony_ci	fi
5268d6344f9Sopenharmony_ci	if [ ! -z "${ARG_TPL_BIN}" ]; then
5278d6344f9Sopenharmony_ci		TPL_BIN=${ARG_TPL_BIN}
5288d6344f9Sopenharmony_ci	fi
5298d6344f9Sopenharmony_ci
5308d6344f9Sopenharmony_ci	# pack
5318d6344f9Sopenharmony_ci	rm idblock.bin -f
5328d6344f9Sopenharmony_ci	./tools/mkimage -n ${PLAT} -T rksd -d ${TPL_BIN}:${SPL_BIN} idblock.bin
5338d6344f9Sopenharmony_ci	echo "Input:"
5348d6344f9Sopenharmony_ci	echo "    ${INI}"
5358d6344f9Sopenharmony_ci	echo "    ${TPL_BIN}"
5368d6344f9Sopenharmony_ci	echo "    ${SPL_BIN}"
5378d6344f9Sopenharmony_ci	echo
5388d6344f9Sopenharmony_ci	echo "Pack ${PLAT} idblock.bin okay!"
5398d6344f9Sopenharmony_ci	echo
5408d6344f9Sopenharmony_ci}
5418d6344f9Sopenharmony_ci
5428d6344f9Sopenharmony_cifunction pack_uboot_itb_image()
5438d6344f9Sopenharmony_ci{
5448d6344f9Sopenharmony_ci	INI=${INI_TRUST}
5458d6344f9Sopenharmony_ci	if [ ! -f ${INI} ]; then
5468d6344f9Sopenharmony_ci		echo "ERROR: No ${INI}"
5478d6344f9Sopenharmony_ci		exit 1
5488d6344f9Sopenharmony_ci	fi
5498d6344f9Sopenharmony_ci
5508d6344f9Sopenharmony_ci	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
5518d6344f9Sopenharmony_ci		BL31_ELF=`sed -n '/_bl31_/s/PATH=//p' ${INI} | tr -d '\r'`
5528d6344f9Sopenharmony_ci		BL32_BIN=`sed -n '/_bl32_/s/PATH=//p' ${INI} | tr -d '\r'`
5538d6344f9Sopenharmony_ci		rm bl31.elf tee.bin -rf
5548d6344f9Sopenharmony_ci		cp ${RKBIN}/${BL31_ELF} bl31.elf
5558d6344f9Sopenharmony_ci		if grep BL32_OPTION -A 1 ${INI} | grep SEC=1 ; then
5568d6344f9Sopenharmony_ci			cp ${RKBIN}/${BL32_BIN} tee.bin
5578d6344f9Sopenharmony_ci			TEE_OFFSET=`grep BL32_OPTION -A 3 ${INI} | grep ADDR= | awk -F "=" '{ printf $2 }' | tr -d '\r'`
5588d6344f9Sopenharmony_ci			TEE_ARG="-t ${TEE_OFFSET}"
5598d6344f9Sopenharmony_ci		fi
5608d6344f9Sopenharmony_ci	else
5618d6344f9Sopenharmony_ci		# TOS
5628d6344f9Sopenharmony_ci		TOS=`filt_val "TOS" ${INI}`
5638d6344f9Sopenharmony_ci		TOSTA=`filt_val "TOSTA" ${INI}`
5648d6344f9Sopenharmony_ci		if [ ! -z "${TOSTA}" ]; then
5658d6344f9Sopenharmony_ci			cp ${RKBIN}/${TOSTA} tee.bin
5668d6344f9Sopenharmony_ci		elif [ ! -z "${TOS}" ]; then
5678d6344f9Sopenharmony_ci			cp ${RKBIN}/${TOS}   tee.bin
5688d6344f9Sopenharmony_ci		else
5698d6344f9Sopenharmony_ci			echo "WARN: No tee bin"
5708d6344f9Sopenharmony_ci		fi
5718d6344f9Sopenharmony_ci		if [ ! -z "${TOSTA}" -o ! -z "${TOS}" ]; then
5728d6344f9Sopenharmony_ci			TEE_OFFSET=`filt_val "ADDR" ${INI}`
5738d6344f9Sopenharmony_ci			if [ "${TEE_OFFSET}" == "" ]; then
5748d6344f9Sopenharmony_ci				TEE_OFFSET=0x8400000
5758d6344f9Sopenharmony_ci			fi
5768d6344f9Sopenharmony_ci			TEE_ARG="-t ${TEE_OFFSET}"
5778d6344f9Sopenharmony_ci		fi
5788d6344f9Sopenharmony_ci	fi
5798d6344f9Sopenharmony_ci
5808d6344f9Sopenharmony_ci	# MCUs
5818d6344f9Sopenharmony_ci	for ((i=0; i<5; i++))
5828d6344f9Sopenharmony_ci	do
5838d6344f9Sopenharmony_ci		MCU_BIN="mcu${i}.bin"
5848d6344f9Sopenharmony_ci		MCU_IDX="MCU${i}"
5858d6344f9Sopenharmony_ci
5868d6344f9Sopenharmony_ci		# compatible: use "MCU" to replace "MCU0" if "MCU" is present.
5878d6344f9Sopenharmony_ci		ENABLED=`awk -F"," '/MCU=/  { printf $3 }' ${INI} | tr -d ' '`
5888d6344f9Sopenharmony_ci		if [ ${i} -eq 0 ]; then
5898d6344f9Sopenharmony_ci			ENABLED=`awk -F"," '/MCU=/  { printf $3 }' ${INI} | tr -d ' '`
5908d6344f9Sopenharmony_ci			if [ ! -z ${ENABLED} ]; then
5918d6344f9Sopenharmony_ci				MCU_IDX="MCU"
5928d6344f9Sopenharmony_ci			fi
5938d6344f9Sopenharmony_ci		fi
5948d6344f9Sopenharmony_ci
5958d6344f9Sopenharmony_ci		ENABLED=`awk -F "," '/'${MCU_IDX}'=/  { printf $3 }' ${INI} | tr -d ' '`
5968d6344f9Sopenharmony_ci		if [ "${ENABLED}" == "enabled" -o "${ENABLED}" == "okay" ]; then
5978d6344f9Sopenharmony_ci			NAME=`awk -F "," '/'${MCU_IDX}'=/ { printf $1 }' ${INI} | tr -d ' ' | awk -F "=" '{ print $2 }'`
5988d6344f9Sopenharmony_ci			OFFS=`awk -F "," '/'${MCU_IDX}'=/ { printf $2 }' ${INI} | tr -d ' '`
5998d6344f9Sopenharmony_ci			cp ${RKBIN}/${NAME} ${MCU_BIN}
6008d6344f9Sopenharmony_ci			if [ -z ${OFFS} ]; then
6018d6344f9Sopenharmony_ci				echo "ERROR: No ${MCU_BIN} address in ${INI}"
6028d6344f9Sopenharmony_ci				exit 1
6038d6344f9Sopenharmony_ci			fi
6048d6344f9Sopenharmony_ci			MCU_ARG=${MCU_ARG}" -m${i} ${OFFS}"
6058d6344f9Sopenharmony_ci		fi
6068d6344f9Sopenharmony_ci	done
6078d6344f9Sopenharmony_ci
6088d6344f9Sopenharmony_ci	# Loadables
6098d6344f9Sopenharmony_ci	for ((i=0; i<5; i++))
6108d6344f9Sopenharmony_ci	do
6118d6344f9Sopenharmony_ci		LOAD_BIN="load${i}.bin"
6128d6344f9Sopenharmony_ci		LOAD_IDX="LOAD${i}"
6138d6344f9Sopenharmony_ci		ENABLED=`awk -F "," '/'${LOAD_IDX}'=/  { printf $3 }' ${INI} | tr -d ' '`
6148d6344f9Sopenharmony_ci		if [ "${ENABLED}" == "enabled" -o "${ENABLED}" == "okay" ]; then
6158d6344f9Sopenharmony_ci			NAME=`awk -F "," '/'${LOAD_IDX}'=/ { printf $1 }' ${INI} | tr -d ' ' | awk -F "=" '{ print $2 }'`
6168d6344f9Sopenharmony_ci			OFFS=`awk -F "," '/'${LOAD_IDX}'=/ { printf $2 }' ${INI} | tr -d ' '`
6178d6344f9Sopenharmony_ci			cp ${RKBIN}/${NAME} ${LOAD_BIN}
6188d6344f9Sopenharmony_ci			if [ -z ${OFFS} ]; then
6198d6344f9Sopenharmony_ci				echo "ERROR: No ${LOAD_BIN} address in ${INI}"
6208d6344f9Sopenharmony_ci				exit 1
6218d6344f9Sopenharmony_ci			fi
6228d6344f9Sopenharmony_ci			LOAD_ARG=${LOAD_ARG}" -l${i} ${OFFS}"
6238d6344f9Sopenharmony_ci		fi
6248d6344f9Sopenharmony_ci	done
6258d6344f9Sopenharmony_ci
6268d6344f9Sopenharmony_ci	# COMPRESSION
6278d6344f9Sopenharmony_ci	COMPRESSION=`awk -F"," '/COMPRESSION=/  { printf $1 }' ${INI} | tr -d ' ' | cut -c 13-`
6288d6344f9Sopenharmony_ci	if [ ! -z "${COMPRESSION}" -a "${COMPRESSION}" != "none" ]; then
6298d6344f9Sopenharmony_ci		COMPRESSION_ARG="-c ${COMPRESSION}"
6308d6344f9Sopenharmony_ci	fi
6318d6344f9Sopenharmony_ci
6328d6344f9Sopenharmony_ci	if [ -d ${REP_DIR} ]; then
6338d6344f9Sopenharmony_ci		mv ${REP_DIR}/* ./
6348d6344f9Sopenharmony_ci	fi
6358d6344f9Sopenharmony_ci
6368d6344f9Sopenharmony_ci	SPL_FIT_SOURCE=`filt_val "CONFIG_SPL_FIT_SOURCE" .config`
6378d6344f9Sopenharmony_ci	if [ ! -z ${SPL_FIT_SOURCE} ]; then
6388d6344f9Sopenharmony_ci		cp ${SPL_FIT_SOURCE} u-boot.its
6398d6344f9Sopenharmony_ci	else
6408d6344f9Sopenharmony_ci		SPL_FIT_GENERATOR=`filt_val "CONFIG_SPL_FIT_GENERATOR" .config`
6418d6344f9Sopenharmony_ci		# *.py is the legacy one.
6428d6344f9Sopenharmony_ci		if [[ ${SPL_FIT_GENERATOR} == *.py ]]; then
6438d6344f9Sopenharmony_ci			${SPL_FIT_GENERATOR} u-boot.dtb > u-boot.its
6448d6344f9Sopenharmony_ci		else
6458d6344f9Sopenharmony_ci			${SPL_FIT_GENERATOR} ${TEE_ARG} ${COMPRESSION_ARG} ${MCU_ARG} ${LOAD_ARG} > u-boot.its
6468d6344f9Sopenharmony_ci		fi
6478d6344f9Sopenharmony_ci	fi
6488d6344f9Sopenharmony_ci
6498d6344f9Sopenharmony_ci	./tools/mkimage -f u-boot.its -E u-boot.itb >/dev/null 2>&1
6508d6344f9Sopenharmony_ci	echo "pack u-boot.itb okay! Input: ${INI}"
6518d6344f9Sopenharmony_ci	echo
6528d6344f9Sopenharmony_ci}
6538d6344f9Sopenharmony_ci
6548d6344f9Sopenharmony_cifunction pack_spl_loader_image()
6558d6344f9Sopenharmony_ci{
6568d6344f9Sopenharmony_ci	rm -f *loader*.bin *download*.bin *idblock*.img
6578d6344f9Sopenharmony_ci	cd ${RKBIN}
6588d6344f9Sopenharmony_ci	DEF_PATH=${RKBIN}/`filt_val "^PATH" ${INI_LOADER}`
6598d6344f9Sopenharmony_ci	IDB_PATH=${RKBIN}/`filt_val "IDB_PATH" ${INI_LOADER}`
6608d6344f9Sopenharmony_ci	if [ ! -z "${ARG_SPL_BIN}" -a ! -z "${ARG_TPL_BIN}" ]; then
6618d6344f9Sopenharmony_ci		${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN} --spl ${SRCTREE}/${ARG_SPL_BIN}
6628d6344f9Sopenharmony_ci	elif [ ! -z "${ARG_TPL_BIN}" ]; then
6638d6344f9Sopenharmony_ci		${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN}
6648d6344f9Sopenharmony_ci	else
6658d6344f9Sopenharmony_ci		${SCRIPT_SPL} --ini ${INI_LOADER} --spl ${SRCTREE}/${ARG_SPL_BIN}
6668d6344f9Sopenharmony_ci	fi
6678d6344f9Sopenharmony_ci	cd -
6688d6344f9Sopenharmony_ci	if [ -f ${DEF_PATH} ]; then
6698d6344f9Sopenharmony_ci		mv ${DEF_PATH} ./
6708d6344f9Sopenharmony_ci	fi
6718d6344f9Sopenharmony_ci	if [ -f ${IDB_PATH} ]; then
6728d6344f9Sopenharmony_ci		mv ${IDB_PATH} ./
6738d6344f9Sopenharmony_ci	fi
6748d6344f9Sopenharmony_ci}
6758d6344f9Sopenharmony_ci
6768d6344f9Sopenharmony_cifunction pack_uboot_image()
6778d6344f9Sopenharmony_ci{
6788d6344f9Sopenharmony_ci	rm u-boot.img u-boot-dtb.img -f
6798d6344f9Sopenharmony_ci	LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" include/autoconf.mk|tr -d '\r'`
6808d6344f9Sopenharmony_ci	if [ -z "${LOAD_ADDR}" ]; then
6818d6344f9Sopenharmony_ci		# upstream U-Boot
6828d6344f9Sopenharmony_ci		LOAD_ADDR=`grep CONFIG_SYS_TEXT_BASE include/generated/autoconf.h | awk '{ print $3 }' | tr -d '\r'`
6838d6344f9Sopenharmony_ci	fi
6848d6344f9Sopenharmony_ci
6858d6344f9Sopenharmony_ci	if [ -z "${LOAD_ADDR}" ]; then
6868d6344f9Sopenharmony_ci		echo "ERROR: No CONFIG_SYS_TEXT_BASE for u-boot";
6878d6344f9Sopenharmony_ci		exit 1
6888d6344f9Sopenharmony_ci	fi
6898d6344f9Sopenharmony_ci
6908d6344f9Sopenharmony_ci	${SCRIPT_UBOOT} --load ${LOAD_ADDR} ${PLAT_UBOOT_SIZE}
6918d6344f9Sopenharmony_ci}
6928d6344f9Sopenharmony_ci
6938d6344f9Sopenharmony_cifunction pack_loader_image()
6948d6344f9Sopenharmony_ci{
6958d6344f9Sopenharmony_ci	rm -f *loader*.bin *download*.bin *idblock*.img
6968d6344f9Sopenharmony_ci	cd ${RKBIN}
6978d6344f9Sopenharmony_ci	DEF_PATH=${RKBIN}/`filt_val "^PATH" ${INI_LOADER}`
6988d6344f9Sopenharmony_ci	IDB_PATH=${RKBIN}/`filt_val "IDB_PATH" ${INI_LOADER}`
6998d6344f9Sopenharmony_ci	${SCRIPT_LOADER} --ini ${INI_LOADER}
7008d6344f9Sopenharmony_ci	cd -
7018d6344f9Sopenharmony_ci	if [ -f ${DEF_PATH} ]; then
7028d6344f9Sopenharmony_ci		mv ${DEF_PATH} ./
7038d6344f9Sopenharmony_ci	fi
7048d6344f9Sopenharmony_ci	if [ -f ${IDB_PATH} ]; then
7058d6344f9Sopenharmony_ci		mv ${IDB_PATH} ./
7068d6344f9Sopenharmony_ci	fi
7078d6344f9Sopenharmony_ci}
7088d6344f9Sopenharmony_ci
7098d6344f9Sopenharmony_cifunction pack_trust_image()
7108d6344f9Sopenharmony_ci{
7118d6344f9Sopenharmony_ci	DRAM_BASE=`filt_val "CONFIG_SYS_SDRAM_BASE" include/autoconf.mk`
7128d6344f9Sopenharmony_ci
7138d6344f9Sopenharmony_ci	rm trust*.img -f
7148d6344f9Sopenharmony_ci	cd ${RKBIN}
7158d6344f9Sopenharmony_ci	if [ "${ARM64_TRUSTZONE}" == "y" ]; then
7168d6344f9Sopenharmony_ci		${SCRIPT_ATF} --ini ${INI_TRUST} ${PLAT_SHA} ${PLAT_RSA} ${PLAT_TRUST_SIZE}
7178d6344f9Sopenharmony_ci	else
7188d6344f9Sopenharmony_ci		${SCRIPT_TOS} --ini ${INI_TRUST} --base ${DRAM_BASE} ${PLAT_TRUST_SIZE}
7198d6344f9Sopenharmony_ci	fi
7208d6344f9Sopenharmony_ci	cd -
7218d6344f9Sopenharmony_ci	if [ -f ${RKBIN}/trust*.img ]; then
7228d6344f9Sopenharmony_ci		mv ${RKBIN}/trust*.img ./
7238d6344f9Sopenharmony_ci	fi
7248d6344f9Sopenharmony_ci}
7258d6344f9Sopenharmony_ci
7268d6344f9Sopenharmony_cifunction pack_fit_image()
7278d6344f9Sopenharmony_ci{
7288d6344f9Sopenharmony_ci	# check host tools
7298d6344f9Sopenharmony_ci	if ! which dtc >/dev/null 2>&1 ; then
7308d6344f9Sopenharmony_ci		echo "ERROR: No 'dtc', please: apt-get install device-tree-compiler"
7318d6344f9Sopenharmony_ci		exit 1
7328d6344f9Sopenharmony_ci	elif [ "${ARM64_TRUSTZONE}" == "y" ]; then
7338d6344f9Sopenharmony_ci		if ! which python2 >/dev/null 2>&1 ; then
7348d6344f9Sopenharmony_ci			echo "ERROR: No python2"
7358d6344f9Sopenharmony_ci			exit 1
7368d6344f9Sopenharmony_ci		fi
7378d6344f9Sopenharmony_ci	fi
7388d6344f9Sopenharmony_ci
7398d6344f9Sopenharmony_ci	# If we don't plan to have uboot in uboot.img in case of: SPL => Trust => Kernel, creating empty files.
7408d6344f9Sopenharmony_ci	if [ "${ARG_NO_UBOOT}" == "y" ]; then
7418d6344f9Sopenharmony_ci		rm u-boot-nodtb.bin u-boot.dtb -f
7428d6344f9Sopenharmony_ci		touch u-boot-nodtb.bin u-boot.dtb
7438d6344f9Sopenharmony_ci	fi
7448d6344f9Sopenharmony_ci
7458d6344f9Sopenharmony_ci	rm uboot.img trust*.img -rf
7468d6344f9Sopenharmony_ci	${SCRIPT_FIT} ${ARG_LIST_FIT} --chip ${RKCHIP_LABEL}
7478d6344f9Sopenharmony_ci
7488d6344f9Sopenharmony_ci	rm ${REP_DIR} -rf
7498d6344f9Sopenharmony_ci	echo "pack uboot.img okay! Input: ${INI_TRUST}"
7508d6344f9Sopenharmony_ci}
7518d6344f9Sopenharmony_ci
7528d6344f9Sopenharmony_cifunction handle_args_late()
7538d6344f9Sopenharmony_ci{
7548d6344f9Sopenharmony_ci	ARG_LIST_FIT="${ARG_LIST_FIT} --ini-trust ${INI_TRUST} --ini-loader ${INI_LOADER}"
7558d6344f9Sopenharmony_ci}
7568d6344f9Sopenharmony_ci
7578d6344f9Sopenharmony_cifunction clean_files()
7588d6344f9Sopenharmony_ci{
7598d6344f9Sopenharmony_ci	rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -f
7608d6344f9Sopenharmony_ci	rm spl/u-boot-spl tpl/u-boot-tpl u-boot -f
7618d6344f9Sopenharmony_ci}
7628d6344f9Sopenharmony_ci
7638d6344f9Sopenharmony_cifunction pack_images()
7648d6344f9Sopenharmony_ci{
7658d6344f9Sopenharmony_ci	if [ "${ARG_RAW_COMPILE}" != "y" ]; then
7668d6344f9Sopenharmony_ci		if [ "${PLAT_TYPE}" == "FIT" ]; then
7678d6344f9Sopenharmony_ci			pack_fit_image ${ARG_LIST_FIT}
7688d6344f9Sopenharmony_ci		elif [ "${PLAT_TYPE}" == "DECOMP" ]; then
7698d6344f9Sopenharmony_ci			${SCRIPT_DECOMP} ${ARG_LIST_FIT} --chip ${RKCHIP_LABEL}
7708d6344f9Sopenharmony_ci		else
7718d6344f9Sopenharmony_ci			pack_uboot_image
7728d6344f9Sopenharmony_ci			pack_trust_image
7738d6344f9Sopenharmony_ci			pack_loader_image
7748d6344f9Sopenharmony_ci		fi
7758d6344f9Sopenharmony_ci	fi
7768d6344f9Sopenharmony_ci}
7778d6344f9Sopenharmony_ci
7788d6344f9Sopenharmony_cifunction finish()
7798d6344f9Sopenharmony_ci{
7808d6344f9Sopenharmony_ci	echo
7818d6344f9Sopenharmony_ci	if [ "${ARG_BOARD}" == "" ]; then
7828d6344f9Sopenharmony_ci		echo "Platform ${RKCHIP_LABEL} is build OK, with exist .config"
7838d6344f9Sopenharmony_ci	else
7848d6344f9Sopenharmony_ci		echo "Platform ${RKCHIP_LABEL} is build OK, with new .config(${MAKE_CMD})"
7858d6344f9Sopenharmony_ci	fi
7868d6344f9Sopenharmony_ci}
7878d6344f9Sopenharmony_ci
7888d6344f9Sopenharmony_ciprocess_args $*
7898d6344f9Sopenharmony_ciprepare
7908d6344f9Sopenharmony_ciselect_toolchain
7918d6344f9Sopenharmony_ciselect_chip_info
7928d6344f9Sopenharmony_cifixup_platform_configure
7938d6344f9Sopenharmony_ciselect_ini_file
7948d6344f9Sopenharmony_cihandle_args_late
7958d6344f9Sopenharmony_cisub_commands
7968d6344f9Sopenharmony_ciclean_files
7978d6344f9Sopenharmony_cimake PYTHON=python2 CROSS_COMPILE=${TOOLCHAIN} all --jobs=${JOB}
7988d6344f9Sopenharmony_cipack_images
7998d6344f9Sopenharmony_cifinish
8008d6344f9Sopenharmony_ciecho ${TOOLCHAIN}
8018d6344f9Sopenharmony_cidate
802