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 12*60dcafe5SJoseph Chen# Periph register 13*60dcafe5SJoseph ChenMAX_ADDR_VAL=$((0xf0000000)) 14*60dcafe5SJoseph Chen 15bc77fafeSJoseph Chen# compression 16bc77fafeSJoseph Chenif [ "${COMPRESSION}" == "gzip" ]; then 17bc77fafeSJoseph Chen SUFFIX=".gz" 18ea098e48SJoseph Chen COMPRESS_CMD="gzip -kf9" 19d3d5b888SJoseph Chenelif [ "${COMPRESSION}" == "lzma" ]; then 20d3d5b888SJoseph Chen SUFFIX=".lzma" 21bb3c5898SJoseph Chen COMPRESS_CMD="${srctree}/scripts/compress.sh lzma" 22bc77fafeSJoseph Chenelse 23bc77fafeSJoseph Chen COMPRESSION="none" 24bc77fafeSJoseph Chen SUFFIX= 25bc77fafeSJoseph Chenfi 26bc77fafeSJoseph Chen 27bc77fafeSJoseph Chen# nodes 28bc77fafeSJoseph Chenfunction gen_uboot_node() 29bc77fafeSJoseph Chen{ 301e70309aSJoseph Chen UBOOT="u-boot-nodtb.bin" 31bc77fafeSJoseph Chen echo " uboot { 32bc77fafeSJoseph Chen description = \"U-Boot\"; 331e70309aSJoseph Chen data = /incbin/(\"${UBOOT}${SUFFIX}\"); 34bc77fafeSJoseph Chen type = \"standalone\"; 35990e82c1SJoseph Chen arch = \"${U_ARCH}\"; 36bc77fafeSJoseph Chen os = \"U-Boot\"; 37bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 381e70309aSJoseph Chen load = <"${UBOOT_LOAD_ADDR}">;" 391e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" ]; then 401e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${UBOOT}.digest ${UBOOT} 411e70309aSJoseph Chen UBOOT_SZ=`ls -l ${UBOOT} | awk '{ print $5 }'` 42bc77fafeSJoseph Chen if [ ${UBOOT_SZ} -gt 0 ]; then 43ea098e48SJoseph Chen ${COMPRESS_CMD} ${srctree}/${UBOOT} 44bc77fafeSJoseph Chen else 451e70309aSJoseph Chen touch ${srctree}/${UBOOT}${SUFFIX} 46bc77fafeSJoseph Chen fi 47ea098e48SJoseph Chen echo " digest { 481e70309aSJoseph Chen value = /incbin/(\"./${UBOOT}.digest\"); 491e70309aSJoseph Chen algo = \"sha256\"; 501e70309aSJoseph Chen };" 51bc77fafeSJoseph Chen fi 521e70309aSJoseph Chen echo " hash { 531e70309aSJoseph Chen algo = \"sha256\"; 541e70309aSJoseph Chen }; 551e70309aSJoseph Chen };" 56bc77fafeSJoseph Chen} 57bc77fafeSJoseph Chen 58bc77fafeSJoseph Chenfunction gen_fdt_node() 59bc77fafeSJoseph Chen{ 60bc77fafeSJoseph Chen echo " fdt { 61bc77fafeSJoseph Chen description = \"U-Boot dtb\"; 62bc77fafeSJoseph Chen data = /incbin/(\"./u-boot.dtb\"); 63bc77fafeSJoseph Chen type = \"flat_dt\"; 64990e82c1SJoseph Chen arch = \"${U_ARCH}\"; 65bc77fafeSJoseph Chen compression = \"none\"; 66bc77fafeSJoseph Chen hash { 67bc77fafeSJoseph Chen algo = \"sha256\"; 68bc77fafeSJoseph Chen }; 69bc77fafeSJoseph Chen };" 70bc77fafeSJoseph Chen}; 71bc77fafeSJoseph Chen 72bc77fafeSJoseph Chenfunction gen_kfdt_node() 73bc77fafeSJoseph Chen{ 74bc77fafeSJoseph Chen KERN_DTB=`sed -n "/CONFIG_EMBED_KERNEL_DTB_PATH=/s/CONFIG_EMBED_KERNEL_DTB_PATH=//p" .config | tr -d '"'` 75bc77fafeSJoseph Chen if [ -z "${KERN_DTB}" ]; then 76bc77fafeSJoseph Chen return; 77bc77fafeSJoseph Chen fi 78bc77fafeSJoseph Chen 79bc77fafeSJoseph Chen if [ -f ${srctree}/${KERN_DTB} ]; then 80bc77fafeSJoseph Chen PROP_KERN_DTB=', "kern-fdt"'; 81bc77fafeSJoseph Chen echo " kern-fdt { 82bc77fafeSJoseph Chen description = \"${KERN_DTB}\"; 83bc77fafeSJoseph Chen data = /incbin/(\"${KERN_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 };" 91bc77fafeSJoseph Chen fi 92bc77fafeSJoseph Chen} 93bc77fafeSJoseph Chen 94bc77fafeSJoseph Chenfunction gen_bl31_node() 95bc77fafeSJoseph Chen{ 96bc77fafeSJoseph Chen ${srctree}/arch/arm/mach-rockchip/decode_bl31.py 97bc77fafeSJoseph Chen 98bc77fafeSJoseph Chen NUM=1 991e70309aSJoseph Chen for ATF in `ls -l bl31_0x*.bin | sort --key=5 -nr | awk '{ print $9 }'` 100bc77fafeSJoseph Chen do 1011e70309aSJoseph Chen ATF_LOAD_ADDR=`echo ${ATF} | awk -F "_" '{ printf $2 }' | awk -F "." '{ printf $1 }'` 102bc77fafeSJoseph Chen # only atf-1 support compress 1031e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" -a ${NUM} -eq 1 ]; then 1041e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${ATF}.digest ${ATF} 105ea098e48SJoseph Chen ${COMPRESS_CMD} ${ATF} 106bc77fafeSJoseph Chen 107bc77fafeSJoseph Chen echo " atf-${NUM} { 108bc77fafeSJoseph Chen description = \"ARM Trusted Firmware\"; 1091e70309aSJoseph Chen data = /incbin/(\"./${ATF}${SUFFIX}\"); 110bc77fafeSJoseph Chen type = \"firmware\"; 111bc77fafeSJoseph Chen arch = \"${ARCH}\"; 112bc77fafeSJoseph Chen os = \"arm-trusted-firmware\"; 113bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 114bc77fafeSJoseph Chen load = <"${ATF_LOAD_ADDR}">; 115bc77fafeSJoseph Chen hash { 116bc77fafeSJoseph Chen algo = \"sha256\"; 117bc77fafeSJoseph Chen }; 118bc77fafeSJoseph Chen digest { 1191e70309aSJoseph Chen value = /incbin/(\"./${ATF}.digest\"); 120bc77fafeSJoseph Chen algo = \"sha256\"; 121bc77fafeSJoseph Chen }; 122bc77fafeSJoseph Chen };" 123bc77fafeSJoseph Chen else 124bc77fafeSJoseph Chen echo " atf-${NUM} { 125bc77fafeSJoseph Chen description = \"ARM Trusted Firmware\"; 1261e70309aSJoseph Chen data = /incbin/(\"./${ATF}\"); 127bc77fafeSJoseph Chen type = \"firmware\"; 128bc77fafeSJoseph Chen arch = \"${ARCH}\"; 129bc77fafeSJoseph Chen os = \"arm-trusted-firmware\"; 130bc77fafeSJoseph Chen compression = \"none\"; 131bc77fafeSJoseph Chen load = <"${ATF_LOAD_ADDR}">; 132bc77fafeSJoseph Chen hash { 133bc77fafeSJoseph Chen algo = \"sha256\"; 134bc77fafeSJoseph Chen }; 135bc77fafeSJoseph Chen };" 136bc77fafeSJoseph Chen fi 137bc77fafeSJoseph Chen 138bc77fafeSJoseph Chen if [ ${NUM} -gt 1 ]; then 139bc77fafeSJoseph Chen LOADABLE_ATF=${LOADABLE_ATF}", \"atf-${NUM}\"" 140bc77fafeSJoseph Chen fi 141bc77fafeSJoseph Chen NUM=`expr ${NUM} + 1` 142bc77fafeSJoseph Chen done 143bc77fafeSJoseph Chen} 144bc77fafeSJoseph Chen 145bc77fafeSJoseph Chenfunction gen_bl32_node() 146bc77fafeSJoseph Chen{ 147bc77fafeSJoseph Chen if [ -z ${TEE_LOAD_ADDR} ]; then 148bc77fafeSJoseph Chen return 149bc77fafeSJoseph Chen fi 150bc77fafeSJoseph Chen 151bc77fafeSJoseph Chen if [ "${ARCH}" == "arm" ]; then 152990e82c1SJoseph Chen # If not AArch32 mode 153990e82c1SJoseph Chen if ! grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then 154c4853b98SJoseph Chen ENTRY="entry = <"${TEE_LOAD_ADDR}">;" 155bc77fafeSJoseph Chen fi 156990e82c1SJoseph Chen fi 1571e70309aSJoseph Chen 1581e70309aSJoseph Chen TEE="tee.bin" 159bc77fafeSJoseph Chen echo " optee { 160bc77fafeSJoseph Chen description = \"OP-TEE\"; 1611e70309aSJoseph Chen data = /incbin/(\"${TEE}${SUFFIX}\"); 162bc77fafeSJoseph Chen type = \"firmware\"; 163bc77fafeSJoseph Chen arch = \"${ARCH}\"; 164bc77fafeSJoseph Chen os = \"op-tee\"; 165bc77fafeSJoseph Chen compression = \"${COMPRESSION}\"; 166bc77fafeSJoseph Chen ${ENTRY} 167c4853b98SJoseph Chen load = <"${TEE_LOAD_ADDR}">;" 1681e70309aSJoseph Chen if [ "${COMPRESSION}" != "none" ]; then 1691e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${TEE}.digest ${TEE} 170ea098e48SJoseph Chen ${COMPRESS_CMD} ${TEE} 171ea098e48SJoseph Chen echo " digest { 1721e70309aSJoseph Chen value = /incbin/(\"./${TEE}.digest\"); 173bc77fafeSJoseph Chen algo = \"sha256\"; 174bc77fafeSJoseph Chen };" 175bc77fafeSJoseph Chen fi 1761e70309aSJoseph Chen echo " hash { 1771e70309aSJoseph Chen algo = \"sha256\"; 1781e70309aSJoseph Chen }; 1791e70309aSJoseph Chen };" 180bc77fafeSJoseph Chen LOADABLE_OPTEE=", \"optee\"" 181f7d83d10SJoseph Chen FIRMWARE_OPTEE="firmware = \"optee\";" 182f7d83d10SJoseph Chen FIRMWARE_SIGN=", \"firmware\"" 183bc77fafeSJoseph Chen} 184bc77fafeSJoseph Chen 185bc77fafeSJoseph Chenfunction gen_mcu_node() 186bc77fafeSJoseph Chen{ 187bc77fafeSJoseph Chen for ((i=0, n=0; i<5; i++)) 188bc77fafeSJoseph Chen do 189bc77fafeSJoseph Chen if [ ${i} -eq 0 ]; then 190bc77fafeSJoseph Chen MCU_ADDR=${MCU0_LOAD_ADDR} 191bc77fafeSJoseph Chen elif [ ${i} -eq 1 ]; then 192bc77fafeSJoseph Chen MCU_ADDR=${MCU1_LOAD_ADDR} 193bc77fafeSJoseph Chen elif [ ${i} -eq 2 ]; then 194bc77fafeSJoseph Chen MCU_ADDR=${MCU2_LOAD_ADDR} 195bc77fafeSJoseph Chen elif [ ${i} -eq 3 ]; then 196bc77fafeSJoseph Chen MCU_ADDR=${MCU3_LOAD_ADDR} 197bc77fafeSJoseph Chen elif [ ${i} -eq 4 ]; then 198bc77fafeSJoseph Chen MCU_ADDR=${MCU4_LOAD_ADDR} 199bc77fafeSJoseph Chen fi 200bc77fafeSJoseph Chen 201bc77fafeSJoseph Chen if [ -z ${MCU_ADDR} ]; then 202bc77fafeSJoseph Chen continue 203bc77fafeSJoseph Chen fi 204*60dcafe5SJoseph Chen 205*60dcafe5SJoseph Chen MCU_ADDR_VAL=$((MCU_ADDR)) 206bc77fafeSJoseph Chen MCU="mcu${i}" 207bc77fafeSJoseph Chen echo " ${MCU} { 208bc77fafeSJoseph Chen description = \"${MCU}\"; 209bc77fafeSJoseph Chen type = \"standalone\"; 210bc77fafeSJoseph Chen arch = \"riscv\"; 211c4853b98SJoseph Chen load = <"${MCU_ADDR}">;" 212*60dcafe5SJoseph Chen 213*60dcafe5SJoseph Chen if [ "${COMPRESSION}" != "none" -a ${MCU_ADDR_VAL} -lt ${MAX_ADDR_VAL} ]; then 2141e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${MCU}.bin.digest ${MCU}.bin 215ea098e48SJoseph Chen ${COMPRESS_CMD} ${MCU}.bin 216*60dcafe5SJoseph Chen echo " data = /incbin/(\"./${MCU}.bin${SUFFIX}\"); 217*60dcafe5SJoseph Chen compression = \"${COMPRESSION}\"; 218*60dcafe5SJoseph Chen digest { 219bc77fafeSJoseph Chen value = /incbin/(\"./${MCU}.bin.digest\"); 220bc77fafeSJoseph Chen algo = \"sha256\"; 221bc77fafeSJoseph Chen };" 222*60dcafe5SJoseph Chen else 223*60dcafe5SJoseph Chen echo " data = /incbin/(\"./${MCU}.bin\"); 224*60dcafe5SJoseph Chen compression = \"none\";" 225bc77fafeSJoseph Chen fi 226*60dcafe5SJoseph Chen 2271e70309aSJoseph Chen echo " hash { 2281e70309aSJoseph Chen algo = \"sha256\"; 2291e70309aSJoseph Chen }; 2301e70309aSJoseph Chen };" 2311e70309aSJoseph Chen 232bc77fafeSJoseph Chen if [ ${n} -eq 0 ]; then 233bc77fafeSJoseph Chen STANDALONE_LIST=${STANDALONE_LIST}"\"${MCU}\"" 234bc77fafeSJoseph Chen else 235bc77fafeSJoseph Chen STANDALONE_LIST=${STANDALONE_LIST}", \"${MCU}\"" 236bc77fafeSJoseph Chen fi 237bc77fafeSJoseph Chen n=`expr ${n} + 1` 238bc77fafeSJoseph Chen 239bc77fafeSJoseph Chen STANDALONE_SIGN=", \"standalone\"" 240bc77fafeSJoseph Chen STANDALONE_MCU="standalone = ${STANDALONE_LIST};" 241bc77fafeSJoseph Chen done 242bc77fafeSJoseph Chen} 243bc77fafeSJoseph Chen 244bc77fafeSJoseph Chenfunction gen_loadable_node() 245bc77fafeSJoseph Chen{ 246bc77fafeSJoseph Chen for ((i=0; i<5; i++)) 247bc77fafeSJoseph Chen do 248bc77fafeSJoseph Chen if [ ${i} -eq 0 ]; then 249bc77fafeSJoseph Chen LOAD_ADDR=${LOAD0_LOAD_ADDR} 250bc77fafeSJoseph Chen elif [ ${i} -eq 1 ]; then 251bc77fafeSJoseph Chen LOAD_ADDR=${LOAD1_LOAD_ADDR} 252bc77fafeSJoseph Chen elif [ ${i} -eq 2 ]; then 253bc77fafeSJoseph Chen LOAD_ADDR=${LOAD2_LOAD_ADDR} 254bc77fafeSJoseph Chen elif [ ${i} -eq 3 ]; then 255bc77fafeSJoseph Chen LOAD_ADDR=${LOAD3_LOAD_ADDR} 256bc77fafeSJoseph Chen elif [ ${i} -eq 4 ]; then 257bc77fafeSJoseph Chen LOAD_ADDR=${LOAD4_LOAD_ADDR} 258bc77fafeSJoseph Chen fi 259bc77fafeSJoseph Chen 260bc77fafeSJoseph Chen if [ -z ${LOAD_ADDR} ]; then 261bc77fafeSJoseph Chen continue 262bc77fafeSJoseph Chen fi 263*60dcafe5SJoseph Chen 264*60dcafe5SJoseph Chen LOAD_ADDR_VAL=$((LOAD_ADDR)) 265bc77fafeSJoseph Chen LOAD="load${i}" 266bc77fafeSJoseph Chen echo " ${LOAD} { 267bc77fafeSJoseph Chen description = \"${LOAD}\"; 268bc77fafeSJoseph Chen type = \"standalone\"; 269bc77fafeSJoseph Chen arch = \"${ARCH}\"; 270c4853b98SJoseph Chen load = <"${LOAD_ADDR}">;" 271*60dcafe5SJoseph Chen 272*60dcafe5SJoseph Chen if [ "${COMPRESSION}" != "none" -a ${LOAD_ADDR_VAL} -lt ${MAX_ADDR_VAL} ]; then 2731e70309aSJoseph Chen openssl dgst -sha256 -binary -out ${LOAD}.bin.digest ${LOAD}.bin 274ea098e48SJoseph Chen ${COMPRESS_CMD} ${LOAD}.bin 275*60dcafe5SJoseph Chen echo " data = /incbin/(\"./${LOAD}.bin${SUFFIX}\"); 276*60dcafe5SJoseph Chen compression = \"${COMPRESSION}\"; 277*60dcafe5SJoseph Chen digest { 278bc77fafeSJoseph Chen value = /incbin/(\"./${LOAD}.bin.digest\"); 279bc77fafeSJoseph Chen algo = \"sha256\"; 280bc77fafeSJoseph Chen };" 281*60dcafe5SJoseph Chen else 282*60dcafe5SJoseph Chen echo " data = /incbin/(\"./${LOAD}.bin\"); 283*60dcafe5SJoseph Chen compression = \"none\";" 284bc77fafeSJoseph Chen fi 285*60dcafe5SJoseph Chen 2861e70309aSJoseph Chen echo " hash { 2871e70309aSJoseph Chen algo = \"sha256\"; 2881e70309aSJoseph Chen }; 2891e70309aSJoseph Chen };" 290bc77fafeSJoseph Chen 291bc77fafeSJoseph Chen LOADABLE_OTHER=${LOADABLE_OTHER}", \"${LOAD}\"" 292bc77fafeSJoseph Chen done 293bc77fafeSJoseph Chen} 294bc77fafeSJoseph Chen 295bc77fafeSJoseph Chenfunction gen_header() 296bc77fafeSJoseph Chen{ 297bc77fafeSJoseph Chenecho " 298bc77fafeSJoseph Chen/* 299bc77fafeSJoseph Chen * Copyright (C) 2020 Rockchip Electronic Co.,Ltd 300bc77fafeSJoseph Chen * 301bc77fafeSJoseph Chen * Simple U-boot fit source file containing ATF/OP-TEE/U-Boot/dtb/MCU 302bc77fafeSJoseph Chen */ 303bc77fafeSJoseph Chen 304bc77fafeSJoseph Chen/dts-v1/; 305bc77fafeSJoseph Chen 306bc77fafeSJoseph Chen/ { 307bc77fafeSJoseph Chen description = \"FIT Image with ATF/OP-TEE/U-Boot/MCU\"; 308bc77fafeSJoseph Chen #address-cells = <1>; 309bc77fafeSJoseph Chen 310bc77fafeSJoseph Chen images { 311bc77fafeSJoseph Chen" 312bc77fafeSJoseph Chen} 313bc77fafeSJoseph Chen 314bc77fafeSJoseph Chenfunction gen_arm64_configurations() 315bc77fafeSJoseph Chen{ 316bc77fafeSJoseph ChenPLATFORM=`sed -n "/CONFIG_DEFAULT_DEVICE_TREE/p" .config | awk -F "=" '{ print $2 }' | tr -d '"'` 317bc77fafeSJoseph Chenif grep -q '^CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT=y' .config ; then 318bc77fafeSJoseph Chen ALGO_PADDING=" padding = \"pss\";" 319bc77fafeSJoseph Chenfi 3201e70309aSJoseph Chenecho " }; 3211e70309aSJoseph Chen 322bc77fafeSJoseph Chen configurations { 323bc77fafeSJoseph Chen default = \"conf\"; 324bc77fafeSJoseph Chen conf { 325bc77fafeSJoseph Chen description = \"${PLATFORM}\"; 326bc77fafeSJoseph Chen rollback-index = <0x0>; 327bc77fafeSJoseph Chen firmware = \"atf-1\"; 328bc77fafeSJoseph Chen loadables = \"uboot\"${LOADABLE_ATF}${LOADABLE_OPTEE}${LOADABLE_OTHER}; 329bc77fafeSJoseph Chen ${STANDALONE_MCU} 330bc77fafeSJoseph Chen fdt = \"fdt\"${PROP_KERN_DTB}; 331bc77fafeSJoseph Chen signature { 332bc77fafeSJoseph Chen algo = \"sha256,rsa2048\"; 333bc77fafeSJoseph Chen ${ALGO_PADDING} 334bc77fafeSJoseph Chen key-name-hint = \"dev\"; 335bc77fafeSJoseph Chen sign-images = \"fdt\", \"firmware\", \"loadables\"${STANDALONE_SIGN}; 336bc77fafeSJoseph Chen }; 337bc77fafeSJoseph Chen }; 338bc77fafeSJoseph Chen }; 339bc77fafeSJoseph Chen}; 340bc77fafeSJoseph Chen" 341bc77fafeSJoseph Chen} 342bc77fafeSJoseph Chen 343bc77fafeSJoseph Chenfunction gen_arm_configurations() 344bc77fafeSJoseph Chen{ 345bc77fafeSJoseph ChenPLATFORM=`sed -n "/CONFIG_DEFAULT_DEVICE_TREE/p" .config | awk -F "=" '{ print $2 }' | tr -d '"'` 346bc77fafeSJoseph Chenif grep -q '^CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT=y' .config ; then 347bc77fafeSJoseph Chen ALGO_PADDING=" padding = \"pss\";" 348bc77fafeSJoseph Chenfi 3491e70309aSJoseph Chenecho " }; 3501e70309aSJoseph Chen 351bc77fafeSJoseph Chen configurations { 352bc77fafeSJoseph Chen default = \"conf\"; 353bc77fafeSJoseph Chen conf { 354bc77fafeSJoseph Chen description = \"${PLATFORM}\"; 355bc77fafeSJoseph Chen rollback-index = <0x0>; 356f7d83d10SJoseph Chen ${FIRMWARE_OPTEE} 357bc77fafeSJoseph Chen loadables = \"uboot\"${LOADABLE_OTHER}; 358bc77fafeSJoseph Chen ${STANDALONE_MCU} 359bc77fafeSJoseph Chen fdt = \"fdt\"${PROP_KERN_DTB}; 360bc77fafeSJoseph Chen signature { 361bc77fafeSJoseph Chen algo = \"sha256,rsa2048\"; 362bc77fafeSJoseph Chen ${ALGO_PADDING} 363bc77fafeSJoseph Chen key-name-hint = \"dev\"; 364f7d83d10SJoseph Chen sign-images = \"fdt\", \"loadables\"${FIRMWARE_SIGN}${STANDALONE_SIGN}; 365bc77fafeSJoseph Chen }; 366bc77fafeSJoseph Chen }; 367bc77fafeSJoseph Chen }; 368bc77fafeSJoseph Chen}; 369bc77fafeSJoseph Chen" 370bc77fafeSJoseph Chen} 371bc77fafeSJoseph Chen 372