#!/bin/sh # SPDX-License-Identifier: GPL-2.0+ # # script to generate FIT image source for Xilinx ZynqMP boards with # ARM Trusted Firmware and multiple device trees (given on the command line) # # usage: $0 [ [&2 BL31=/dev/null fi cat << __HEADER_EOF // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) /dts-v1/; / { description = "Configuration to load ATF before U-Boot"; images { uboot { description = "U-Boot (64-bit)"; data = /incbin/("$BL33"); type = "firmware"; os = "u-boot"; arch = "arm64"; compression = "none"; load = <$BL33_LOAD_ADDR>; entry = <$BL33_LOAD_ADDR>; hash { algo = "md5"; }; }; __HEADER_EOF if [ -f $BL31 ]; then cat << __ATF atf { description = "ARM Trusted Firmware"; data = /incbin/("$BL31"); type = "firmware"; os = "arm-trusted-firmware"; arch = "arm64"; compression = "none"; load = <$ATF_LOAD_ADDR>; entry = <$ATF_LOAD_ADDR>; hash { algo = "md5"; }; }; __ATF fi DEFAULT=1 cnt=1 for dtname in $DT do cat << __FDT_IMAGE_EOF fdt_$cnt { description = "$(basename $dtname .dtb)"; data = /incbin/("$dtname"); type = "flat_dt"; arch = "arm64"; compression = "none"; $DTB_LOAD hash { algo = "md5"; }; }; __FDT_IMAGE_EOF [ "x$(basename $dtname .dtb)" = "x${DEVICE_TREE}" ] && DEFAULT=$cnt cnt=$((cnt+1)) done cat << __CONF_HEADER_EOF }; configurations { default = "config_$DEFAULT"; __CONF_HEADER_EOF cnt=1 for dtname in $DT do if [ ! -f $BL31 ]; then cat << __CONF_SECTION1_EOF config_$cnt { description = "$(basename $dtname .dtb)"; firmware = "uboot"; fdt = "fdt_$cnt"; }; __CONF_SECTION1_EOF else cat << __CONF_SECTION1_EOF config_$cnt { description = "$(basename $dtname .dtb)"; firmware = "atf"; loadables = "uboot"; fdt = "fdt_$cnt"; }; __CONF_SECTION1_EOF fi cnt=$((cnt+1)) done cat << __ITS_EOF }; }; __ITS_EOF