1################################################################################
2# Following variables defines how the NS_USER (Non Secure User - Client
3# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
4# S_USER (Secure User - TA) are compiled
5################################################################################
6override COMPILE_NS_USER   := 64
7override COMPILE_NS_KERNEL := 64
8override COMPILE_S_USER    := 64
9override COMPILE_S_KERNEL  := 64
10
11PLATFORM := zynqmp-zcu102
12OPTEE_OS_PLATFORM = $(PLATFORM)
13
14DTS_zynqmp-zcu102 = zynqmp-zcu102-rev1.0
15DTS_zynqmp-zcu104 = zynqmp-zcu104-revC
16DTS_zynqmp-zcu106 = zynqmp-zcu106-revA
17DTS_zynqmp-ultra96 = avnet-ultra96-rev1
18U-BOOT_DTS = $(DTS_$(PLATFORM))
19
20################################################################################
21# Paths to git projects and various binaries
22################################################################################
23TF_A_PATH		?= $(ROOT)/arm-trusted-firmware
24U-BOOT_PATH		?= $(ROOT)/u-boot-xlnx
25BOOTGEN_PATH		?= $(ROOT)/bootgen
26LINUX_PATH		?= $(ROOT)/linux-xlnx
27
28include common.mk
29
30################################################################################
31# Targets
32################################################################################
33
34all: tfa optee-os u-boot linux dtbo buildroot
35clean: tfa-clean optee-os-clean u-boot-clean linux-clean dtbo-clean buildroot-clean
36
37include toolchain.mk
38
39################################################################################
40# ARM Trusted Firmware
41################################################################################
42
43TF_A_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
44TF_A_FLAGS  = PLAT=zynqmp RESET_TO_BL31=1 NEED_BL32=yes SPD=opteed LOG_LEVEL=LOG_LEVEL_INFO
45
46
47tfa:
48	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) bl31
49
50tfa-clean:
51	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
52
53################################################################################
54# OP-TEE
55#################################################################################
56
57optee-os: optee-os-common
58	${OPTEE_OS_PATH}/scripts/gen_tee_bin.py --input ${OPTEE_OS_PATH}/out/arm/core/tee.elf --out_tee_raw_bin ${OPTEE_OS_PATH}/out/arm/core/tee_raw.bin
59
60optee-os-clean: optee-os-clean-common
61	rm -f ${OPTEE_OS_PATH}/out/arm/core/tee_raw.bin
62
63################################################################################
64# U-Boot
65################################################################################
66
67U-BOOT_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
68U-BOOT_CONFIG = xilinx_zynqmp_virt_defconfig
69
70u-boot:
71	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) $(U-BOOT_CONFIG)
72	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) DEVICE_TREE=$(U-BOOT_DTS) DTC_FLAGS="-@"
73
74u-boot-clean:
75	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
76
77###############################################################################
78# Device-Tree
79###############################################################################
80dtbo: linux
81	${LINUX_PATH}/scripts/dtc/dtc -@ -I dts -O dtb -o zynqmp/zynqmp-optee.dtbo zynqmp/zynqmp-optee.dtso
82
83dtbo-clean:
84	rm -f zynqmp/zynqmp-optee.dtbo
85
86################################################################################
87# Linux kernel
88################################################################################
89
90LINUX_DEFCONFIG_COMMON_ARCH := arm64
91LINUX_DEFCONFIG_COMMON_FILES := \
92		$(LINUX_PATH)/arch/arm64/configs/xilinx_zynqmp_defconfig \
93		$(CURDIR)/kconfigs/zynqmp.conf
94
95linux-defconfig: $(LINUX_PATH)/.config
96
97LINUX_COMMON_FLAGS += ARCH=arm64
98
99linux: linux-common
100
101linux-defconfig-clean: linux-defconfig-clean-common
102
103LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
104
105linux-clean: linux-clean-common
106
107LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
108
109linux-cleaner: linux-cleaner-common
110
111###############################################################################
112# Bouildroot
113###############################################################################
114
115BR2_TARGET_GENERIC_ISSUE="OP-TEE embedded distrib for $(PLATFORM)"
116BR2_TARGET_ROOTFS_EXT2=y
117BR2_PACKAGE_BUSYBOX_WATCHDOG=y
118BR2_TARGET_GENERIC_GETTY_PORT=ttyPS0
119
120# TF-A, Linux kernel, U-Boot and OP-TEE OS/Client/... are not built from their
121# related Buildroot native package.
122BR2_TARGET_ARM_TRUSTED_FIRMWARE=n
123BR2_LINUX_KERNEL=n
124BR2_TARGET_OPTEE_OS=n
125BR2_TARGET_UBOOT=n
126BR2_PACKAGE_OPTEE_CLIENT=n
127BR2_PACKAGE_OPTEE_TEST=n
128BR2_PACKAGE_OPTEE_EXAMPLES=n
129BR2_PACKAGE_OPTEE_BENCHMARK=n
130
131
132###############################################################################
133# Images
134###############################################################################
135image: bootimage fitimage
136image-clean: bootimage-clean fitimage-clean
137
138###############################################################################
139# Boot Image
140###############################################################################
141FIRMWARE_TARBALL = $(subst zynqmp-,2021.1-,$(PLATFORM))-release.tar.xz
142
143bootimage: bootgen firmware tfa optee-os u-boot
144	$(BOOTGEN_PATH)/bootgen -arch zynqmp -image zynqmp/bootImage-${PLATFORM}.bif -w -o zynqmp/BOOT.bin
145
146bootimage-clean: bootgen-clean firmware-clean tfa-clean optee-os-clean u-boot-clean
147	rm -f zynqmp/BOOT.bin
148
149
150###############################################################################
151# Bootgen
152###############################################################################
153
154bootgen:
155	make -C $(BOOTGEN_PATH)
156
157bootgen-clean:
158	make -C $(BOOTGEN_PATH) clean
159
160
161################################################################################
162# ZynqMPSoC Firmware mandatory for the boot
163################################################################################
164
165firmware:
166ifeq ("$(wildcard ../$(FIRMWARE_TARBALL))","")
167	$(error Release image tarball not present ../$(FIRMWARE_TARBALL))
168else
169	mkdir -p ../$(PLATFORM)-release && tar -xvf ../$(FIRMWARE_TARBALL) -C ../$(PLATFORM)-release --strip-components=1
170endif
171
172firmware-clean:
173	rm -rf ../$(PLATFORM)-release
174
175###############################################################################
176# FIT Image
177###############################################################################
178
179fitimage: linux dtbo buildroot
180	${U-BOOT_PATH}/tools/mkimage -f zynqmp/fitImage-${PLATFORM}.its zynqmp/${PLATFORM}.ub
181
182fitimage-clean: linux-clean dtbo-clean buildroot-clean
183	rm -f zynqmp/${PLATFORM}.ub
184
185