[U-Boot] [PATCH 1/3] rockchip: rk3399-evb: add script for atf fit

Mark Kettenis mark.kettenis at xs4all.nl
Sat Aug 19 11:53:51 UTC 2017


> From: Kever Yang <kever.yang at rock-chips.com>
> Date: Fri, 18 Aug 2017 13:07:04 +0800
> 
> Add a script to generate binaries from bl31.elf, and generate
> u-boot.its file for FIT image including u-boot, dtb and atf binaries.
> 
> Signed-off-by: Kever Yang <kever.yang at rock-chips.com>

This doesn't work if the ATF BL31_BASE is 0x1000 instead of 0x10000,
but there are other reasons why 0x1000 doesn't work.  Tested this with
ATF v1.4 with BL31_BASE moved back to 0x10000, and that works fine.
So this is defenitely progress!  This allows me to build my own
firmware for the Firefly-RK3399 with a sane console speed of 115200.

Reviewed-by: Mark Kettenis <kettenis at openbsd.org>
Tested-by: Mark Kettenis <kettenis at openbsd.org>

> ---
> 
>  board/rockchip/evb_rk3399/mk_fit_atf.sh | 110 ++++++++++++++++++++++++++++++++
>  1 file changed, 110 insertions(+)
>  create mode 100755 board/rockchip/evb_rk3399/mk_fit_atf.sh
> 
> diff --git a/board/rockchip/evb_rk3399/mk_fit_atf.sh b/board/rockchip/evb_rk3399/mk_fit_atf.sh
> new file mode 100755
> index 0000000..146550a
> --- /dev/null
> +++ b/board/rockchip/evb_rk3399/mk_fit_atf.sh
> @@ -0,0 +1,110 @@
> +#!/bin/sh
> +#
> +# script to generate FIT image source for rk3399 boards with
> +# ARM Trusted Firmware and multiple device trees (given on the command line)
> +#
> +# usage: $0 <dt_name> [<dt_name> [<dt_name] ...]
> +
> +[ -z "$BL31" ] && BL31="bl31.elf"
> +
> +if [ ! -f $BL31 ]; then
> +	echo "WARNING: BL31 file $BL31 NOT found, resulting binary is non-functional" >&2
> +	BL31=/dev/null
> +fi
> +
> +#tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin idbspl.img
> +
> +cat << __HEADER_EOF
> +/dts-v1/;
> +
> +/ {
> +	description = "Configuration to load ATF before U-Boot";
> +	#address-cells = <1>;
> +
> +	images {
> +		uboot at 1 {
> +			description = "U-Boot (64-bit)";
> +			data = /incbin/("u-boot-nodtb.bin");
> +			type = "standalone";
> +			arch = "arm64";
> +			compression = "none";
> +			load = <0x00200000>;
> +		};
> +__HEADER_EOF
> +
> +atf_cnt=1
> +
> +for l in `readelf -l $BL31 | grep -A1 LOAD | gawk --non-decimal-data \
> +	'{if (NR % 2) {printf "%d:0x%x:", $2,$4} else {printf "%d\n", $1}}'`
> +do
> +	offset=${l%%:*}
> +	ll=${l#*:}
> +	phy_offset=${ll%:*}
> +	filesz=${ll##*:}
> +
> +	#echo "$offset/$phy_offset/$filesz"
> +
> +	of=rk3399bl31_${phy_offset}.bin
> +	dd if=$BL31 of=$of bs=1 skip=$offset count=$filesz
> +
> +	out_string="${out_string}:${phy_offset}"
> +
> +	cat << __ATF1_EOF
> +		atf@$atf_cnt {
> +			description = "ARM Trusted Firmware";
> +			data = /incbin/("$of");
> +			type = "firmware";
> +			arch = "arm64";
> +			compression = "none";
> +			load = <$phy_offset>;
> +__ATF1_EOF
> +	if [ "$atf_cnt" -eq 1 ]; then
> +		cat << __ATF2_EOF
> +			entry = <$phy_offset>;
> +__ATF2_EOF
> +		fi
> +	cat << __ATF3_EOF
> +		};
> +__ATF3_EOF
> +	atf_cnt=$((atf_cnt + 1))
> +done
> +
> +cnt=1
> +for dtname in $*
> +do
> +	cat << __FDT_IMAGE_EOF
> +		fdt@$cnt {
> +			description = "$(basename $dtname .dtb)";
> +			data = /incbin/("$dtname");
> +			type = "flat_dt";
> +			compression = "none";
> +		};
> +__FDT_IMAGE_EOF
> +	cnt=$((cnt+1))
> +done
> +
> +cat << __CONF_HEADER_EOF
> +	};
> +	configurations {
> +		default = "config at 1";
> +
> +__CONF_HEADER_EOF
> +
> +cnt=1
> +for dtname in $*
> +do
> +	cat << __CONF_SECTION_EOF
> +		config@$cnt {
> +			description = "$(basename $dtname .dtb)";
> +			firmware = "uboot at 1";
> +			loadables = "atf at 1","atf at 2","atf at 3";
> +			fdt = "fdt at 1";
> +		};
> +__CONF_SECTION_EOF
> +	cnt=$((cnt+1))
> +done
> +
> +cat << __ITS_EOF
> +	};
> +};
> +__ITS_EOF
> -- 
> 1.9.1
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
> 
> 


More information about the U-Boot mailing list