1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# script to generate FIT image source for 64-bit sunxi boards with 4*4882a593Smuzhiyun# ARM Trusted Firmware and multiple device trees (given on the command line) 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# usage: $0 <dt_name> [<dt_name> [<dt_name] ...] 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun[ -z "$BL31" ] && BL31="bl31.bin" 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunif [ ! -f $BL31 ]; then 11*4882a593Smuzhiyun echo "WARNING: BL31 file $BL31 NOT found, resulting binary is non-functional" >&2 12*4882a593Smuzhiyun echo "Please read the section on ARM Trusted Firmware (ATF) in board/sunxi/README.sunxi64" >&2 13*4882a593Smuzhiyun BL31=/dev/null 14*4882a593Smuzhiyunfi 15*4882a593Smuzhiyun 16*4882a593Smuzhiyuncat << __HEADER_EOF 17*4882a593Smuzhiyun/dts-v1/; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun/ { 20*4882a593Smuzhiyun description = "Configuration to load ATF before U-Boot"; 21*4882a593Smuzhiyun #address-cells = <1>; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun images { 24*4882a593Smuzhiyun uboot@1 { 25*4882a593Smuzhiyun description = "U-Boot (64-bit)"; 26*4882a593Smuzhiyun data = /incbin/("u-boot-nodtb.bin"); 27*4882a593Smuzhiyun type = "standalone"; 28*4882a593Smuzhiyun arch = "arm64"; 29*4882a593Smuzhiyun compression = "none"; 30*4882a593Smuzhiyun load = <0x4a000000>; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun atf@1 { 33*4882a593Smuzhiyun description = "ARM Trusted Firmware"; 34*4882a593Smuzhiyun data = /incbin/("$BL31"); 35*4882a593Smuzhiyun type = "firmware"; 36*4882a593Smuzhiyun arch = "arm64"; 37*4882a593Smuzhiyun compression = "none"; 38*4882a593Smuzhiyun load = <0x44000>; 39*4882a593Smuzhiyun entry = <0x44000>; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun__HEADER_EOF 42*4882a593Smuzhiyun 43*4882a593Smuzhiyuncnt=1 44*4882a593Smuzhiyunfor dtname in $* 45*4882a593Smuzhiyundo 46*4882a593Smuzhiyun cat << __FDT_IMAGE_EOF 47*4882a593Smuzhiyun fdt@$cnt { 48*4882a593Smuzhiyun description = "$(basename $dtname .dtb)"; 49*4882a593Smuzhiyun data = /incbin/("$dtname"); 50*4882a593Smuzhiyun type = "flat_dt"; 51*4882a593Smuzhiyun compression = "none"; 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun__FDT_IMAGE_EOF 54*4882a593Smuzhiyun cnt=$((cnt+1)) 55*4882a593Smuzhiyundone 56*4882a593Smuzhiyun 57*4882a593Smuzhiyuncat << __CONF_HEADER_EOF 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun configurations { 60*4882a593Smuzhiyun default = "config@1"; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun__CONF_HEADER_EOF 63*4882a593Smuzhiyun 64*4882a593Smuzhiyuncnt=1 65*4882a593Smuzhiyunfor dtname in $* 66*4882a593Smuzhiyundo 67*4882a593Smuzhiyun cat << __CONF_SECTION_EOF 68*4882a593Smuzhiyun config@$cnt { 69*4882a593Smuzhiyun description = "$(basename $dtname .dtb)"; 70*4882a593Smuzhiyun firmware = "uboot@1"; 71*4882a593Smuzhiyun loadables = "atf@1"; 72*4882a593Smuzhiyun fdt = "fdt@$cnt"; 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun__CONF_SECTION_EOF 75*4882a593Smuzhiyun cnt=$((cnt+1)) 76*4882a593Smuzhiyundone 77*4882a593Smuzhiyun 78*4882a593Smuzhiyuncat << __ITS_EOF 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun}; 81*4882a593Smuzhiyun__ITS_EOF 82