1bc77fafeSJoseph Chen#!/bin/bash 2bc77fafeSJoseph Chen# 3bc77fafeSJoseph Chen# Copyright (C) 2021 Rockchip Electronics Co., Ltd 4bc77fafeSJoseph Chen# 5bc77fafeSJoseph Chen# SPDX-License-Identifier: GPL-2.0+ 6bc77fafeSJoseph Chen# 7bc77fafeSJoseph Chen 8bc77fafeSJoseph Chen# Process args and auto set variables 9bc77fafeSJoseph Chensource ./${srctree}/arch/arm/mach-rockchip/fit_args.sh 10bc77fafeSJoseph Chenrm -f ${srctree}/*.digest ${srctree}/*.bin.gz ${srctree}/bl31_0x*.bin 11bc77fafeSJoseph Chen 128e5f6fd7SXuhui Lin# Periph register base 138e5f6fd7SXuhui Linif grep -q '^CONFIG_ROCKCHIP_RK3576=y' .config ; then 148e5f6fd7SXuhui LinMAX_ADDR_VAL=$((0x10000000)) 154e72b326SXuhui Linelif grep -q '^CONFIG_ROCKCHIP_RV1126B=y' .config ; then 164e72b326SXuhui LinMAX_ADDR_VAL=$((0x20000000)) 178e5f6fd7SXuhui Linelif grep -q '^CONFIG_ROCKCHIP_RV1103B=y' .config ; then 188e5f6fd7SXuhui LinMAX_ADDR_VAL=$((0x20000000)) 198e5f6fd7SXuhui Linelse 2060dcafe5SJoseph ChenMAX_ADDR_VAL=$((0xf0000000)) 218e5f6fd7SXuhui Linfi 228e5f6fd7SXuhui Lin 238e5f6fd7SXuhui Lin# dram base 24e034a1b9SJoseph ChenDRAM_BASE_VAL=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${srctree}/include/autoconf.mk|tr -d '\r'` 2560dcafe5SJoseph Chen 26bc77fafeSJoseph Chen# compression 27bc77fafeSJoseph Chenif [ "${COMPRESSION}" == "gzip" ]; then 28bc77fafeSJoseph Chen SUFFIX=".gz" 29ea098e48SJoseph Chen COMPRESS_CMD="gzip -kf9" 30d3d5b888SJoseph Chenelif [ "${COMPRESSION}" == "lzma" ]; then 31d3d5b888SJoseph Chen SUFFIX=".lzma" 32bb3c5898SJoseph Chen COMPRESS_CMD="${srctree}/scripts/compress.sh lzma" 33bc77fafeSJoseph Chenelse 34bc77fafeSJoseph Chen COMPRESSION="none" 35bc77fafeSJoseph Chen SUFFIX= 36bc77fafeSJoseph Chenfi 37bc77fafeSJoseph Chen 38bc77fafeSJoseph Chen# nodes 39bc77fafeSJoseph Chenfunction gen_uboot_node() 40bc77fafeSJoseph Chen{ 41999755ecSJoseph Chen if [ -z ${UBOOT_LOAD_ADDR} ]; then 42999755ecSJoseph Chen return 43999755ecSJoseph Chen fi 44999755ecSJoseph Chen 451e70309aSJoseph Chen UBOOT="u-boot-nodtb.bin" 46bc77fafeSJoseph Chen echo " uboot { 47bc77fafeSJoseph Chen description = \"U-Boot\"; 481e70309aSJoseph Chen data = /incbin/(\"${UBOOT}${SUFFIX}\"); 49bc77fafeSJoseph Chen type = \"standalone\"; 50990e82c1SJoseph Chen arch = \"${U_ARCH}\"; 51bc77fafeSJoseph Chen os = \"U-Boot\"; 52bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 531e70309aSJoseph Chen load = <"${UBOOT_LOAD_ADDR}">;" 541e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" ]; then 551e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${UBOOT}.digest ${UBOOT} 561e70309aSJoseph Chen UBOOT_SZ=`ls -l ${UBOOT} | awk '{ print $5 }'` 57bc77fafeSJoseph Chen if [ ${UBOOT_SZ} -gt 0 ]; then 58ea098e48SJoseph Chen ${COMPRESS_CMD} ${srctree}/${UBOOT} 59bc77fafeSJoseph Chen else 601e70309aSJoseph Chen touch ${srctree}/${UBOOT}${SUFFIX} 61bc77fafeSJoseph Chen fi 62ea098e48SJoseph Chen echo " digest { 631e70309aSJoseph Chen value = /incbin/(\"./${UBOOT}.digest\"); 641e70309aSJoseph Chen algo = \"sha256\"; 651e70309aSJoseph Chen };" 66bc77fafeSJoseph Chen fi 671e70309aSJoseph Chen echo " hash { 681e70309aSJoseph Chen algo = \"sha256\"; 691e70309aSJoseph Chen }; 701e70309aSJoseph Chen };" 71999755ecSJoseph Chen 72999755ecSJoseph Chen LOADABLE_UBOOT="\"uboot\", " 73bc77fafeSJoseph Chen} 74bc77fafeSJoseph Chen 75bc77fafeSJoseph Chenfunction gen_fdt_node() 76bc77fafeSJoseph Chen{ 77999755ecSJoseph Chen if [ -z ${UBOOT_LOAD_ADDR} ]; then 78999755ecSJoseph Chen return 79999755ecSJoseph Chen fi 80999755ecSJoseph Chen 81bc77fafeSJoseph Chen echo " fdt { 82bc77fafeSJoseph Chen description = \"U-Boot dtb\"; 83bc77fafeSJoseph Chen data = /incbin/(\"./u-boot.dtb\"); 84bc77fafeSJoseph Chen type = \"flat_dt\"; 85990e82c1SJoseph Chen arch = \"${U_ARCH}\"; 86bc77fafeSJoseph Chen compression = \"none\"; 87bc77fafeSJoseph Chen hash { 88bc77fafeSJoseph Chen algo = \"sha256\"; 89bc77fafeSJoseph Chen }; 90bc77fafeSJoseph Chen };" 91999755ecSJoseph Chen 92999755ecSJoseph Chen FDT_SIGN=", \"fdt\"" 93999755ecSJoseph Chen FDT="fdt = \"fdt\"${PROP_KERN_DTB};" 94bc77fafeSJoseph Chen}; 95bc77fafeSJoseph Chen 96bc77fafeSJoseph Chenfunction gen_kfdt_node() 97bc77fafeSJoseph Chen{ 98999755ecSJoseph Chen if [ -z ${UBOOT_LOAD_ADDR} ]; then 99999755ecSJoseph Chen return 100999755ecSJoseph Chen fi 101999755ecSJoseph Chen 102bc77fafeSJoseph Chen KERN_DTB=`sed -n "/CONFIG_EMBED_KERNEL_DTB_PATH=/s/CONFIG_EMBED_KERNEL_DTB_PATH=//p" .config | tr -d '"'` 103999755ecSJoseph Chen if [ -z ${KERN_DTB} ]; then 104bc77fafeSJoseph Chen return; 105bc77fafeSJoseph Chen fi 106bc77fafeSJoseph Chen 107bc77fafeSJoseph Chen if [ -f ${srctree}/${KERN_DTB} ]; then 108bc77fafeSJoseph Chen PROP_KERN_DTB=', "kern-fdt"'; 109bc77fafeSJoseph Chen echo " kern-fdt { 110bc77fafeSJoseph Chen description = \"${KERN_DTB}\"; 111bc77fafeSJoseph Chen data = /incbin/(\"${KERN_DTB}\"); 112bc77fafeSJoseph Chen type = \"flat_dt\"; 113990e82c1SJoseph Chen arch = \"${U_ARCH}\"; 114bc77fafeSJoseph Chen compression = \"none\"; 115bc77fafeSJoseph Chen hash { 116bc77fafeSJoseph Chen algo = \"sha256\"; 117bc77fafeSJoseph Chen }; 118bc77fafeSJoseph Chen };" 119bc77fafeSJoseph Chen fi 120bc77fafeSJoseph Chen} 121bc77fafeSJoseph Chen 122bc77fafeSJoseph Chenfunction gen_bl31_node() 123bc77fafeSJoseph Chen{ 124bc77fafeSJoseph Chen ${srctree}/arch/arm/mach-rockchip/decode_bl31.py 125bc77fafeSJoseph Chen 126bc77fafeSJoseph Chen NUM=1 1278c5d7294SJoseph Chen for ATF in `ls -1 -S bl31_0x*.bin` 128bc77fafeSJoseph Chen do 1291e70309aSJoseph Chen ATF_LOAD_ADDR=`echo ${ATF} | awk -F "_" '{ printf $2 }' | awk -F "." '{ printf $1 }'` 130bc77fafeSJoseph Chen # only atf-1 support compress 1311e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" -a ${NUM} -eq 1 ]; then 1321e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${ATF}.digest ${ATF} 133ea098e48SJoseph Chen ${COMPRESS_CMD} ${ATF} 134bc77fafeSJoseph Chen 135bc77fafeSJoseph Chen echo " atf-${NUM} { 136bc77fafeSJoseph Chen description = \"ARM Trusted Firmware\"; 1371e70309aSJoseph Chen data = /incbin/(\"./${ATF}${SUFFIX}\"); 138bc77fafeSJoseph Chen type = \"firmware\"; 139bc77fafeSJoseph Chen arch = \"${ARCH}\"; 140bc77fafeSJoseph Chen os = \"arm-trusted-firmware\"; 141bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 142bc77fafeSJoseph Chen load = <"${ATF_LOAD_ADDR}">; 143bc77fafeSJoseph Chen hash { 144bc77fafeSJoseph Chen algo = \"sha256\"; 145bc77fafeSJoseph Chen }; 146bc77fafeSJoseph Chen digest { 1471e70309aSJoseph Chen value = /incbin/(\"./${ATF}.digest\"); 148bc77fafeSJoseph Chen algo = \"sha256\"; 149bc77fafeSJoseph Chen }; 150bc77fafeSJoseph Chen };" 151bc77fafeSJoseph Chen else 152bc77fafeSJoseph Chen echo " atf-${NUM} { 153bc77fafeSJoseph Chen description = \"ARM Trusted Firmware\"; 1541e70309aSJoseph Chen data = /incbin/(\"./${ATF}\"); 155bc77fafeSJoseph Chen type = \"firmware\"; 156bc77fafeSJoseph Chen arch = \"${ARCH}\"; 157bc77fafeSJoseph Chen os = \"arm-trusted-firmware\"; 158bc77fafeSJoseph Chen compression = \"none\"; 159bc77fafeSJoseph Chen load = <"${ATF_LOAD_ADDR}">; 160bc77fafeSJoseph Chen hash { 161bc77fafeSJoseph Chen algo = \"sha256\"; 162bc77fafeSJoseph Chen }; 163bc77fafeSJoseph Chen };" 164bc77fafeSJoseph Chen fi 165bc77fafeSJoseph Chen 166999755ecSJoseph Chen if [ ${NUM} -eq 2 ]; then 167999755ecSJoseph Chen LOADABLE_ATF=${LOADABLE_ATF}"\"atf-${NUM}\"" 168999755ecSJoseph Chen elif [ ${NUM} -gt 2 ]; then 169bc77fafeSJoseph Chen LOADABLE_ATF=${LOADABLE_ATF}", \"atf-${NUM}\"" 170bc77fafeSJoseph Chen fi 171bc77fafeSJoseph Chen NUM=`expr ${NUM} + 1` 172bc77fafeSJoseph Chen done 173bc77fafeSJoseph Chen} 174bc77fafeSJoseph Chen 175bc77fafeSJoseph Chenfunction gen_bl32_node() 176bc77fafeSJoseph Chen{ 177bc77fafeSJoseph Chen if [ -z ${TEE_LOAD_ADDR} ]; then 178bc77fafeSJoseph Chen return 179bc77fafeSJoseph Chen fi 180bc77fafeSJoseph Chen 181bc77fafeSJoseph Chen if [ "${ARCH}" == "arm" ]; then 182990e82c1SJoseph Chen # If not AArch32 mode 183990e82c1SJoseph Chen if ! grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then 184c4853b98SJoseph Chen ENTRY="entry = <"${TEE_LOAD_ADDR}">;" 185c58278f4SJoseph Chen 186c58278f4SJoseph Chen # if disable packing tee.bin 187c58278f4SJoseph Chen if ! grep -q '^CONFIG_SPL_OPTEE=y' .config ; then 188c58278f4SJoseph Chen return 189c58278f4SJoseph Chen fi 190c58278f4SJoseph Chen 191bc77fafeSJoseph Chen fi 192990e82c1SJoseph Chen fi 1931e70309aSJoseph Chen 1941e70309aSJoseph Chen TEE="tee.bin" 195bc77fafeSJoseph Chen echo " optee { 196bc77fafeSJoseph Chen description = \"OP-TEE\"; 1971e70309aSJoseph Chen data = /incbin/(\"${TEE}${SUFFIX}\"); 198bc77fafeSJoseph Chen type = \"firmware\"; 199bc77fafeSJoseph Chen arch = \"${ARCH}\"; 200bc77fafeSJoseph Chen os = \"op-tee\"; 201bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 202bc77fafeSJoseph Chen ${ENTRY} 203c4853b98SJoseph Chen load = <"${TEE_LOAD_ADDR}">;" 2041e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" ]; then 2051e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${TEE}.digest ${TEE} 206ea098e48SJoseph Chen ${COMPRESS_CMD} ${TEE} 207ea098e48SJoseph Chen echo " digest { 2081e70309aSJoseph Chen value = /incbin/(\"./${TEE}.digest\"); 209bc77fafeSJoseph Chen algo = \"sha256\"; 210bc77fafeSJoseph Chen };" 211bc77fafeSJoseph Chen fi 2121e70309aSJoseph Chen echo " hash { 2131e70309aSJoseph Chen algo = \"sha256\"; 2141e70309aSJoseph Chen }; 2151e70309aSJoseph Chen };" 216bc77fafeSJoseph Chen LOADABLE_OPTEE=", \"optee\"" 217f7d83d10SJoseph Chen FIRMWARE_OPTEE="firmware = \"optee\";" 218999755ecSJoseph Chen FIRMWARE_SIGN="\"firmware\"" 219bc77fafeSJoseph Chen} 220bc77fafeSJoseph Chen 221bc77fafeSJoseph Chenfunction gen_mcu_node() 222bc77fafeSJoseph Chen{ 223bc77fafeSJoseph Chen for ((i=0, n=0; i<5; i++)) 224bc77fafeSJoseph Chen do 225bc77fafeSJoseph Chen if [ ${i} -eq 0 ]; then 226bc77fafeSJoseph Chen MCU_ADDR=${MCU0_LOAD_ADDR} 227bc77fafeSJoseph Chen elif [ ${i} -eq 1 ]; then 228bc77fafeSJoseph Chen MCU_ADDR=${MCU1_LOAD_ADDR} 229bc77fafeSJoseph Chen elif [ ${i} -eq 2 ]; then 230bc77fafeSJoseph Chen MCU_ADDR=${MCU2_LOAD_ADDR} 231bc77fafeSJoseph Chen elif [ ${i} -eq 3 ]; then 232bc77fafeSJoseph Chen MCU_ADDR=${MCU3_LOAD_ADDR} 233bc77fafeSJoseph Chen elif [ ${i} -eq 4 ]; then 234bc77fafeSJoseph Chen MCU_ADDR=${MCU4_LOAD_ADDR} 235bc77fafeSJoseph Chen fi 236bc77fafeSJoseph Chen 237bc77fafeSJoseph Chen if [ -z ${MCU_ADDR} ]; then 238bc77fafeSJoseph Chen continue 239bc77fafeSJoseph Chen fi 24060dcafe5SJoseph Chen 24160dcafe5SJoseph Chen MCU_ADDR_VAL=$((MCU_ADDR)) 242bc77fafeSJoseph Chen MCU="mcu${i}" 243bc77fafeSJoseph Chen echo " ${MCU} { 244bc77fafeSJoseph Chen description = \"${MCU}\"; 245bc77fafeSJoseph Chen type = \"standalone\"; 246bc77fafeSJoseph Chen arch = \"riscv\"; 247c4853b98SJoseph Chen load = <"${MCU_ADDR}">;" 24860dcafe5SJoseph Chen 2498e5f6fd7SXuhui Lin # When allow to be compressed? 2508e5f6fd7SXuhui Lin # DRAM base < load addr < Periph register base 2518e5f6fd7SXuhui Lin # Periph register base < DRAM base < load addr 252c41d50d2SJoseph Chen if [ "${COMPRESSION}" != "none" -a "$((MCU_ADDR_VAL))" -gt "$((DRAM_BASE_VAL))" ] && 253c41d50d2SJoseph Chen [ "$((DRAM_BASE_VAL))" -gt "$((MAX_ADDR_VAL))" -o "$((MCU_ADDR_VAL))" -lt "$((MAX_ADDR_VAL))" ]; then 2541e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${MCU}.bin.digest ${MCU}.bin 255ea098e48SJoseph Chen ${COMPRESS_CMD} ${MCU}.bin 25660dcafe5SJoseph Chen echo " data = /incbin/(\"./${MCU}.bin${SUFFIX}\"); 25760dcafe5SJoseph Chen compression = \"${COMPRESSION}\"; 25860dcafe5SJoseph Chen digest { 259bc77fafeSJoseph Chen value = /incbin/(\"./${MCU}.bin.digest\"); 260bc77fafeSJoseph Chen algo = \"sha256\"; 261bc77fafeSJoseph Chen };" 26260dcafe5SJoseph Chen else 26360dcafe5SJoseph Chen echo " data = /incbin/(\"./${MCU}.bin\"); 26460dcafe5SJoseph Chen compression = \"none\";" 265bc77fafeSJoseph Chen fi 26660dcafe5SJoseph Chen 2671e70309aSJoseph Chen echo " hash { 2681e70309aSJoseph Chen algo = \"sha256\"; 2691e70309aSJoseph Chen }; 2701e70309aSJoseph Chen };" 2711e70309aSJoseph Chen 272bc77fafeSJoseph Chen if [ ${n} -eq 0 ]; then 273bc77fafeSJoseph Chen STANDALONE_LIST=${STANDALONE_LIST}"\"${MCU}\"" 274bc77fafeSJoseph Chen else 275bc77fafeSJoseph Chen STANDALONE_LIST=${STANDALONE_LIST}", \"${MCU}\"" 276bc77fafeSJoseph Chen fi 277bc77fafeSJoseph Chen n=`expr ${n} + 1` 278bc77fafeSJoseph Chen 279bc77fafeSJoseph Chen STANDALONE_SIGN=", \"standalone\"" 280bc77fafeSJoseph Chen STANDALONE_MCU="standalone = ${STANDALONE_LIST};" 281bc77fafeSJoseph Chen done 28224ea65e6SJoseph Chen 28324ea65e6SJoseph Chen if [ -z ${INIT0_LOAD_ADDR} ]; then 28424ea65e6SJoseph Chen return 28524ea65e6SJoseph Chen fi 28624ea65e6SJoseph Chen 28724ea65e6SJoseph Chen INIT="init0" 28824ea65e6SJoseph Chen echo " ${INIT} { 28924ea65e6SJoseph Chen description = \"${INIT}\"; 29024ea65e6SJoseph Chen type = \"standalone\"; 29124ea65e6SJoseph Chen arch = \"${ARCH}\"; 29224ea65e6SJoseph Chen load = <"${INIT0_LOAD_ADDR}">; 29324ea65e6SJoseph Chen data = /incbin/(\"./${INIT}.bin\"); 29424ea65e6SJoseph Chen compression = \"none\"; 29524ea65e6SJoseph Chen hash { 29624ea65e6SJoseph Chen algo = \"sha256\"; 29724ea65e6SJoseph Chen }; 29824ea65e6SJoseph Chen };" 299*56866815SXiaoDong Huang STANDALONE_MCU="standalone = \"init0\"${STANDALONE_LIST};" 300bc77fafeSJoseph Chen} 301bc77fafeSJoseph Chen 302bc77fafeSJoseph Chenfunction gen_loadable_node() 303bc77fafeSJoseph Chen{ 304bc77fafeSJoseph Chen for ((i=0; i<5; i++)) 305bc77fafeSJoseph Chen do 306bc77fafeSJoseph Chen if [ ${i} -eq 0 ]; then 307bc77fafeSJoseph Chen LOAD_ADDR=${LOAD0_LOAD_ADDR} 308bc77fafeSJoseph Chen elif [ ${i} -eq 1 ]; then 309bc77fafeSJoseph Chen LOAD_ADDR=${LOAD1_LOAD_ADDR} 310bc77fafeSJoseph Chen elif [ ${i} -eq 2 ]; then 311bc77fafeSJoseph Chen LOAD_ADDR=${LOAD2_LOAD_ADDR} 312bc77fafeSJoseph Chen elif [ ${i} -eq 3 ]; then 313bc77fafeSJoseph Chen LOAD_ADDR=${LOAD3_LOAD_ADDR} 314bc77fafeSJoseph Chen elif [ ${i} -eq 4 ]; then 315bc77fafeSJoseph Chen LOAD_ADDR=${LOAD4_LOAD_ADDR} 316bc77fafeSJoseph Chen fi 317bc77fafeSJoseph Chen 318bc77fafeSJoseph Chen if [ -z ${LOAD_ADDR} ]; then 319bc77fafeSJoseph Chen continue 320bc77fafeSJoseph Chen fi 32160dcafe5SJoseph Chen 32260dcafe5SJoseph Chen LOAD_ADDR_VAL=$((LOAD_ADDR)) 323bc77fafeSJoseph Chen LOAD="load${i}" 324bc77fafeSJoseph Chen echo " ${LOAD} { 325bc77fafeSJoseph Chen description = \"${LOAD}\"; 326bc77fafeSJoseph Chen type = \"standalone\"; 327bc77fafeSJoseph Chen arch = \"${ARCH}\"; 32809d80afdSJoseph Chen load = <"${LOAD_ADDR}">;" 32960dcafe5SJoseph Chen 3308e5f6fd7SXuhui Lin # When allow to be compressed? 3318e5f6fd7SXuhui Lin # DRAM base < load addr < Periph register base 3328e5f6fd7SXuhui Lin # Periph register base < DRAM base < load addr 333c41d50d2SJoseph Chen if [ "${COMPRESSION}" != "none" -a "$((MCU_ADDR_VAL))" -gt "$((DRAM_BASE_VAL))" ] && 334c41d50d2SJoseph Chen [ "$((DRAM_BASE_VAL))" -gt "$((MAX_ADDR_VAL))" -o "$((MCU_ADDR_VAL))" -lt "$((MAX_ADDR_VAL))" ]; then 3351e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${LOAD}.bin.digest ${LOAD}.bin 336ea098e48SJoseph Chen ${COMPRESS_CMD} ${LOAD}.bin 33760dcafe5SJoseph Chen echo " data = /incbin/(\"./${LOAD}.bin${SUFFIX}\"); 33860dcafe5SJoseph Chen compression = \"${COMPRESSION}\"; 33960dcafe5SJoseph Chen digest { 340bc77fafeSJoseph Chen value = /incbin/(\"./${LOAD}.bin.digest\"); 341bc77fafeSJoseph Chen algo = \"sha256\"; 342bc77fafeSJoseph Chen };" 34360dcafe5SJoseph Chen else 34460dcafe5SJoseph Chen echo " data = /incbin/(\"./${LOAD}.bin\"); 34560dcafe5SJoseph Chen compression = \"none\";" 346bc77fafeSJoseph Chen fi 34760dcafe5SJoseph Chen 3481e70309aSJoseph Chen echo " hash { 3491e70309aSJoseph Chen algo = \"sha256\"; 3501e70309aSJoseph Chen }; 3511e70309aSJoseph Chen };" 352bc77fafeSJoseph Chen 353bc77fafeSJoseph Chen LOADABLE_OTHER=${LOADABLE_OTHER}", \"${LOAD}\"" 354bc77fafeSJoseph Chen done 355bc77fafeSJoseph Chen} 356bc77fafeSJoseph Chen 357bc77fafeSJoseph Chenfunction gen_header() 358bc77fafeSJoseph Chen{ 359bc77fafeSJoseph Chenecho " 360bc77fafeSJoseph Chen/* 361bc77fafeSJoseph Chen * Copyright (C) 2020 Rockchip Electronic Co.,Ltd 362bc77fafeSJoseph Chen * 363bc77fafeSJoseph Chen * Simple U-boot fit source file containing ATF/OP-TEE/U-Boot/dtb/MCU 364bc77fafeSJoseph Chen */ 365bc77fafeSJoseph Chen 366bc77fafeSJoseph Chen/dts-v1/; 367bc77fafeSJoseph Chen 368bc77fafeSJoseph Chen/ { 369bc77fafeSJoseph Chen description = \"FIT Image with ATF/OP-TEE/U-Boot/MCU\"; 370bc77fafeSJoseph Chen #address-cells = <1>; 371bc77fafeSJoseph Chen 372bc77fafeSJoseph Chen images { 373bc77fafeSJoseph Chen" 374bc77fafeSJoseph Chen} 375bc77fafeSJoseph Chen 376bc77fafeSJoseph Chenfunction gen_arm64_configurations() 377bc77fafeSJoseph Chen{ 378bc77fafeSJoseph ChenPLATFORM=`sed -n "/CONFIG_DEFAULT_DEVICE_TREE/p" .config | awk -F "=" '{ print $2 }' | tr -d '"'` 379bc77fafeSJoseph Chenif grep -q '^CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT=y' .config ; then 380bc77fafeSJoseph Chen ALGO_PADDING=" padding = \"pss\";" 381bc77fafeSJoseph Chenfi 3820644ce13SXuhui Linif grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' .config ; then 3830644ce13SXuhui Lin ALGO_NAME=" algo = \"sha256,rsa4096\";" 3840644ce13SXuhui Linelse 3850644ce13SXuhui Lin ALGO_NAME=" algo = \"sha256,rsa2048\";" 3860644ce13SXuhui Linfi 38766554dbcSJoseph Chenif [ -z "${LOADABLE_ATF}" ]; then 38866554dbcSJoseph Chen LOADABLE_UBOOT="\"uboot\"" 38966554dbcSJoseph Chenfi 39066554dbcSJoseph Chen 3911e70309aSJoseph Chenecho " }; 3921e70309aSJoseph Chen 393bc77fafeSJoseph Chen configurations { 394bc77fafeSJoseph Chen default = \"conf\"; 395bc77fafeSJoseph Chen conf { 396bc77fafeSJoseph Chen description = \"${PLATFORM}\"; 397bc77fafeSJoseph Chen rollback-index = <0x0>; 398bc77fafeSJoseph Chen firmware = \"atf-1\"; 399999755ecSJoseph Chen loadables = ${LOADABLE_UBOOT}${LOADABLE_ATF}${LOADABLE_OPTEE}${LOADABLE_OTHER}; 400bc77fafeSJoseph Chen ${STANDALONE_MCU} 401999755ecSJoseph Chen ${FDT} 402bc77fafeSJoseph Chen signature { 4030644ce13SXuhui Lin ${ALGO_NAME} 404bc77fafeSJoseph Chen ${ALGO_PADDING} 405bc77fafeSJoseph Chen key-name-hint = \"dev\"; 406999755ecSJoseph Chen sign-images = \"firmware\", \"loadables\"${FDT_SIGN}${STANDALONE_SIGN}; 407bc77fafeSJoseph Chen }; 408bc77fafeSJoseph Chen }; 409bc77fafeSJoseph Chen }; 410bc77fafeSJoseph Chen}; 411bc77fafeSJoseph Chen" 412bc77fafeSJoseph Chen} 413bc77fafeSJoseph Chen 414bc77fafeSJoseph Chenfunction gen_arm_configurations() 415bc77fafeSJoseph Chen{ 416bc77fafeSJoseph ChenPLATFORM=`sed -n "/CONFIG_DEFAULT_DEVICE_TREE/p" .config | awk -F "=" '{ print $2 }' | tr -d '"'` 417bc77fafeSJoseph Chenif grep -q '^CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT=y' .config ; then 418bc77fafeSJoseph Chen ALGO_PADDING=" padding = \"pss\";" 419bc77fafeSJoseph Chenfi 4200644ce13SXuhui Linif grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' .config ; then 4210644ce13SXuhui Lin ALGO_NAME=" algo = \"sha256,rsa4096\";" 4220644ce13SXuhui Linelse 4230644ce13SXuhui Lin ALGO_NAME=" algo = \"sha256,rsa2048\";" 4240644ce13SXuhui Linfi 425999755ecSJoseph Chenif [ ! -z "${LOADABLE_UBOOT}" ] || [ ! -z "${LOADABLE_OTHER}" ]; then 426999755ecSJoseph Chen LOADABLE_UBOOT="\"uboot\"" 427999755ecSJoseph Chen LOADABLES="loadables = ${LOADABLE_UBOOT}${LOADABLE_OTHER};" 428999755ecSJoseph Chen if [ -z ${FIRMWARE_SIGN} ]; then 429999755ecSJoseph Chen LOADABLES_SIGN="\"loadables\"" 430999755ecSJoseph Chen else 431999755ecSJoseph Chen LOADABLES_SIGN=", \"loadables\"" 432999755ecSJoseph Chen fi 433999755ecSJoseph Chenfi 434999755ecSJoseph Chen 4351e70309aSJoseph Chenecho " }; 4361e70309aSJoseph Chen 437bc77fafeSJoseph Chen configurations { 438bc77fafeSJoseph Chen default = \"conf\"; 439bc77fafeSJoseph Chen conf { 440bc77fafeSJoseph Chen description = \"${PLATFORM}\"; 441bc77fafeSJoseph Chen rollback-index = <0x0>; 442f7d83d10SJoseph Chen ${FIRMWARE_OPTEE} 443999755ecSJoseph Chen ${LOADABLES} 444bc77fafeSJoseph Chen ${STANDALONE_MCU} 445999755ecSJoseph Chen ${FDT} 446bc77fafeSJoseph Chen signature { 4470644ce13SXuhui Lin ${ALGO_NAME} 448bc77fafeSJoseph Chen ${ALGO_PADDING} 449bc77fafeSJoseph Chen key-name-hint = \"dev\"; 450999755ecSJoseph Chen sign-images = ${FIRMWARE_SIGN}${LOADABLES_SIGN}${FDT_SIGN}${STANDALONE_SIGN}; 451bc77fafeSJoseph Chen }; 452bc77fafeSJoseph Chen }; 453bc77fafeSJoseph Chen }; 454bc77fafeSJoseph Chen}; 455bc77fafeSJoseph Chen" 456bc77fafeSJoseph Chen} 457bc77fafeSJoseph Chen 458