xref: /openbmc/u-boot/arch/arm/mach-imx/mkimage_fit_atf.sh (revision 748ad078eefea2ee5a3c8e53ca46e9e93c2fc7f1)
1a9eed6e1SPeng Fan#!/bin/sh
2a9eed6e1SPeng Fan# SPDX-License-Identifier: GPL-2.0+
3a9eed6e1SPeng Fan#
4a9eed6e1SPeng Fan# script to generate FIT image source for i.MX8MQ boards with
5a9eed6e1SPeng Fan# ARM Trusted Firmware and multiple device trees (given on the command line)
6a9eed6e1SPeng Fan#
7a9eed6e1SPeng Fan# usage: $0 <dt_name> [<dt_name> [<dt_name] ...]
8a9eed6e1SPeng Fan
9a9eed6e1SPeng Fan[ -z "$BL31" ] && BL31="bl31.bin"
10a9eed6e1SPeng Fan[ -z "$TEE_LOAD_ADDR" ] && TEE_LOAD_ADDR="0xfe000000"
11a9eed6e1SPeng Fan[ -z "$ATF_LOAD_ADDR" ] && ATF_LOAD_ADDR="0x00910000"
12*b184a796SPeng Fan[ -z "$BL33_LOAD_ADDR" ] && BL33_LOAD_ADDR="0x40200000"
13a9eed6e1SPeng Fan
14a9eed6e1SPeng Fanif [ ! -f $BL31 ]; then
15a9eed6e1SPeng Fan	echo "ERROR: BL31 file $BL31 NOT found" >&2
16a9eed6e1SPeng Fan	exit 0
17a9eed6e1SPeng Fanelse
18a9eed6e1SPeng Fan	echo "$BL31 size: " >&2
19a9eed6e1SPeng Fan	ls -lct $BL31 | awk '{print $5}' >&2
20a9eed6e1SPeng Fanfi
21a9eed6e1SPeng Fan
22a9eed6e1SPeng FanBL32="tee.bin"
23a9eed6e1SPeng Fan
24a9eed6e1SPeng Fanif [ ! -f $BL32 ]; then
25a9eed6e1SPeng Fan	BL32=/dev/null
26a9eed6e1SPeng Fanelse
27a9eed6e1SPeng Fan	echo "Building with TEE support, make sure your $BL31 is compiled with spd. If you do not want tee, please delete $BL31" >&2
28a9eed6e1SPeng Fan	echo "$BL32 size: " >&2
29a9eed6e1SPeng Fan	ls -lct $BL32 | awk '{print $5}' >&2
30a9eed6e1SPeng Fanfi
31a9eed6e1SPeng Fan
32a9eed6e1SPeng FanBL33="u-boot-nodtb.bin"
33a9eed6e1SPeng Fan
34a9eed6e1SPeng Fanif [ ! -f $BL33 ]; then
35a9eed6e1SPeng Fan	echo "ERROR: $BL33 file NOT found" >&2
36a9eed6e1SPeng Fan	exit 0
37a9eed6e1SPeng Fanelse
38a9eed6e1SPeng Fan	echo "u-boot-nodtb.bin size: " >&2
39a9eed6e1SPeng Fan	ls -lct u-boot-nodtb.bin | awk '{print $5}' >&2
40a9eed6e1SPeng Fanfi
41a9eed6e1SPeng Fan
42a9eed6e1SPeng Fanfor dtname in $*
43a9eed6e1SPeng Fando
44a9eed6e1SPeng Fan	echo "$dtname size: " >&2
45a9eed6e1SPeng Fan	ls -lct $dtname | awk '{print $5}' >&2
46a9eed6e1SPeng Fandone
47a9eed6e1SPeng Fan
48a9eed6e1SPeng Fan
49a9eed6e1SPeng Fancat << __HEADER_EOF
50a9eed6e1SPeng Fan/dts-v1/;
51a9eed6e1SPeng Fan
52a9eed6e1SPeng Fan/ {
53a9eed6e1SPeng Fan	description = "Configuration to load ATF before U-Boot";
54a9eed6e1SPeng Fan
55a9eed6e1SPeng Fan	images {
56a9eed6e1SPeng Fan		uboot@1 {
57a9eed6e1SPeng Fan			description = "U-Boot (64-bit)";
58a9eed6e1SPeng Fan			data = /incbin/("$BL33");
59a9eed6e1SPeng Fan			type = "standalone";
60a9eed6e1SPeng Fan			arch = "arm64";
61a9eed6e1SPeng Fan			compression = "none";
62*b184a796SPeng Fan			load = <$BL33_LOAD_ADDR>;
63a9eed6e1SPeng Fan		};
64a9eed6e1SPeng Fan		atf@1 {
65a9eed6e1SPeng Fan			description = "ARM Trusted Firmware";
66a9eed6e1SPeng Fan			data = /incbin/("$BL31");
67a9eed6e1SPeng Fan			type = "firmware";
68a9eed6e1SPeng Fan			arch = "arm64";
69a9eed6e1SPeng Fan			compression = "none";
70a9eed6e1SPeng Fan			load = <$ATF_LOAD_ADDR>;
71a9eed6e1SPeng Fan			entry = <$ATF_LOAD_ADDR>;
72a9eed6e1SPeng Fan		};
73a9eed6e1SPeng Fan__HEADER_EOF
74a9eed6e1SPeng Fan
75a9eed6e1SPeng Fanif [ -f $BL32 ]; then
76a9eed6e1SPeng Fancat << __HEADER_EOF
77a9eed6e1SPeng Fan		tee@1 {
78a9eed6e1SPeng Fan			description = "TEE firmware";
79a9eed6e1SPeng Fan			data = /incbin/("$BL32");
80a9eed6e1SPeng Fan			type = "firmware";
81a9eed6e1SPeng Fan			arch = "arm64";
82a9eed6e1SPeng Fan			compression = "none";
83a9eed6e1SPeng Fan			load = <$TEE_LOAD_ADDR>;
84a9eed6e1SPeng Fan			entry = <$TEE_LOAD_ADDR>;
85a9eed6e1SPeng Fan		};
86a9eed6e1SPeng Fan__HEADER_EOF
87a9eed6e1SPeng Fanfi
88a9eed6e1SPeng Fan
89a9eed6e1SPeng Fancnt=1
90a9eed6e1SPeng Fanfor dtname in $*
91a9eed6e1SPeng Fando
92a9eed6e1SPeng Fan	cat << __FDT_IMAGE_EOF
93a9eed6e1SPeng Fan		fdt@$cnt {
94a9eed6e1SPeng Fan			description = "$(basename $dtname .dtb)";
95a9eed6e1SPeng Fan			data = /incbin/("$dtname");
96a9eed6e1SPeng Fan			type = "flat_dt";
97a9eed6e1SPeng Fan			compression = "none";
98a9eed6e1SPeng Fan		};
99a9eed6e1SPeng Fan__FDT_IMAGE_EOF
100a9eed6e1SPeng Fancnt=$((cnt+1))
101a9eed6e1SPeng Fandone
102a9eed6e1SPeng Fan
103a9eed6e1SPeng Fancat << __CONF_HEADER_EOF
104a9eed6e1SPeng Fan	};
105a9eed6e1SPeng Fan	configurations {
106a9eed6e1SPeng Fan		default = "config@1";
107a9eed6e1SPeng Fan
108a9eed6e1SPeng Fan__CONF_HEADER_EOF
109a9eed6e1SPeng Fan
110a9eed6e1SPeng Fancnt=1
111a9eed6e1SPeng Fanfor dtname in $*
112a9eed6e1SPeng Fando
113a9eed6e1SPeng Fanif [ -f $BL32 ]; then
114a9eed6e1SPeng Fancat << __CONF_SECTION_EOF
115a9eed6e1SPeng Fan		config@$cnt {
116a9eed6e1SPeng Fan			description = "$(basename $dtname .dtb)";
117a9eed6e1SPeng Fan			firmware = "uboot@1";
118a9eed6e1SPeng Fan			loadables = "atf@1", "tee@1";
119a9eed6e1SPeng Fan			fdt = "fdt@$cnt";
120a9eed6e1SPeng Fan		};
121a9eed6e1SPeng Fan__CONF_SECTION_EOF
122a9eed6e1SPeng Fanelse
123a9eed6e1SPeng Fancat << __CONF_SECTION1_EOF
124a9eed6e1SPeng Fan		config@$cnt {
125a9eed6e1SPeng Fan			description = "$(basename $dtname .dtb)";
126a9eed6e1SPeng Fan			firmware = "uboot@1";
127a9eed6e1SPeng Fan			loadables = "atf@1";
128a9eed6e1SPeng Fan			fdt = "fdt@$cnt";
129a9eed6e1SPeng Fan		};
130a9eed6e1SPeng Fan__CONF_SECTION1_EOF
131a9eed6e1SPeng Fanfi
132a9eed6e1SPeng Fancnt=$((cnt+1))
133a9eed6e1SPeng Fandone
134a9eed6e1SPeng Fan
135a9eed6e1SPeng Fancat << __ITS_EOF
136a9eed6e1SPeng Fan	};
137a9eed6e1SPeng Fan};
138a9eed6e1SPeng Fan__ITS_EOF
139