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
11# Network support related packages:
12BR2_PACKAGE_DHCPCD	?= y
13BR2_PACKAGE_ETHTOOL	?= y
14BR2_PACKAGE_XINETD	?= y
15
16# SSH Packages :
17BR2_PACKAGE_OPENSSH		?= y
18BR2_PACKAGE_OPENSSH_SERVER	?= y
19BR2_PACKAGE_OPENSSH_KEY_UTILS	?= y
20
21# Openssl binary
22BR2_PACKAGE_LIBOPENSSL_BIN	?= y
23BR2_PACKAGE_LIBP11	?= y
24
25PLATFORM = AMD Versal Gen 2
26OPTEE_OS_PLATFORM = versal2
27OPTEE_OS_COMMON_EXTRA_FLAGS ?= CFG_PKCS11_TA=y CFG_USER_TA_TARGET_pkcs11=ta_arm64 O=out/arm
28
29################################################################################
30# Paths to git projects and various binaries
31################################################################################
32TF_A_PATH	?= $(ROOT)/arm-trusted-firmware
33U-BOOT_PATH	?= $(ROOT)/u-boot-xlnx
34LINUX_PATH	?= $(ROOT)/linux-xlnx
35
36include common.mk
37
38BINARIES_PATH	?= $(ROOT)/out/bin
39TF_A_ELF	?= $(TF_A_PATH)/build/$(OPTEE_OS_PLATFORM)/release/bl31/bl31.elf
40OPTEE_OS_ELF	?= $(OPTEE_OS_PATH)/out/arm/core/tee.elf
41U-BOOT_ELF	?= $(U-BOOT_PATH)/u-boot.elf
42U-BOOT_DTB	?= $(U-BOOT_PATH)/arch/arm/dts/versal2-*.dtb
43MKIMAGE_PATH	?= $(U-BOOT_PATH)/tools
44LINUX_IMAGE	?= $(LINUX_PATH)/arch/arm64/boot/Image
45ROOTFS_GZ	?= $(ROOT)/out-br/images/rootfs.cpio.gz
46ROOTFS_SIGN	?= $(BINARIES_PATH)/rootfs.cpio.gz.u-boot
47
48################################################################################
49# Targets
50################################################################################
51
52all: tfa optee-os dtbo u-boot linux buildroot buildroot_mkimg
53clean: tfa-clean optee-os-clean dtbo-clean u-boot-clean linux-clean buildroot-clean
54
55$(BINARIES_PATH):
56	mkdir -p $@
57
58include toolchain.mk
59
60################################################################################
61# ARM Trusted Firmware
62################################################################################
63
64TF_A_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
65TF_A_FLAGS = PLAT=versal2 CONSOLE=pl011 RESET_TO_BL31=1 SPD=opteed DEBUG=0 \
66	     MEM_BASE=0x1600000 MEM_SIZE=0x200000 \
67	     XILINX_OF_BOARD_DTB_ADDR=0x1000 \
68	     BL32_MEM_BASE=0x1800000 BL32_MEM_SIZE=0x8000000
69
70tfa:
71	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) bl31
72	mkdir -p $(BINARIES_PATH)
73	cp $(TF_A_ELF) $(BINARIES_PATH)
74
75tfa-clean:
76	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
77
78################################################################################
79# OP-TEE
80################################################################################
81
82OPTEE_OS_COMMON_FLAGS += CFG_TEE_CORE_LOG_LEVEL=2 CFG_TEE_TA_LOG_LEVEL=2
83
84optee-os: optee-os-common
85	mkdir -p $(BINARIES_PATH)
86	cp $(OPTEE_OS_ELF) $(BINARIES_PATH)
87
88optee-os-clean: optee-os-clean-common
89	rm -rf ${OPTEE_OS_PATH}/out/
90
91################################################################################
92# U-Boot
93################################################################################
94
95U-BOOT_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
96U-BOOT_DEFCONFIG_COMMON_FILES := $(U-BOOT_PATH)/configs/amd_versal2_virt_defconfig \
97			$(BUILD_PATH)/kconfigs/u-boot_versal2.conf
98
99u-boot-defconfig: $(U-BOOT_DEFCONFIG_COMMON_FILES)
100	cd $(U-BOOT_PATH) && \
101                ARCH=arm64 \
102                scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_COMMON_FILES)
103
104u-boot: u-boot-defconfig
105	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH)
106	mkdir -p $(BINARIES_PATH)
107	cp $(U-BOOT_ELF) $(BINARIES_PATH)
108
109u-boot-defconfig-clean:
110	rm -f $(U-BOOT_PATH)/.config
111
112u-boot-clean: u-boot-defconfig-clean
113	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
114
115###############################################################################
116# Device-Tree
117###############################################################################
118dtbo: u-boot
119	mkdir -p $(BINARIES_PATH)
120	${LINUX_PATH}/scripts/dtc/dtc -@ -I dts \
121		-O dtb -o $(BINARIES_PATH)/versal2-memory-reservation.dtbo \
122		$(BUILD_PATH)/versal2/versal2-memory-reservation.dtso
123	@$(foreach dtb,$(wildcard $(U-BOOT_DTB)), \
124		${LINUX_PATH}/scripts/dtc/fdtoverlay -i $(dtb) \
125		-o $(dtb) $(BINARIES_PATH)/versal2-memory-reservation.dtbo ; \
126		echo "Applied overlay to $(dtb)";)
127	cp $(U-BOOT_DTB) $(BINARIES_PATH)
128
129dtbo-clean:
130	rm -f $(BINARIES_PATH)/versal2-memory-reservation.dtbo
131
132################################################################################
133# Linux kernel
134################################################################################
135
136LINUX_DEFCONFIG_COMMON_ARCH := arm64
137LINUX_DEFCONFIG_COMMON_FILES := \
138		$(LINUX_PATH)/arch/arm64/configs/xilinx_defconfig \
139		$(BUILD_PATH)/kconfigs/versal2.conf
140
141linux-defconfig: $(LINUX_PATH)/.config
142
143LINUX_COMMON_FLAGS += ARCH=arm64
144
145linux: linux-common
146	mkdir -p $(BINARIES_PATH)
147	cp $(LINUX_IMAGE) $(BINARIES_PATH)
148
149linux-defconfig-clean: linux-defconfig-clean-common
150
151LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
152
153linux-clean: linux-clean-common
154
155LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
156
157linux-cleaner: linux-cleaner-common
158
159################################################################################
160# Buildroot
161################################################################################
162
163BR2_TARGET_GENERIC_ISSUE	?= "OP-TEE embedded distrib for $(PLATFORM)"
164BR2_TARGET_ROOTFS_EXT2	?= y
165BR2_PACKAGE_BUSYBOX_WATCHDOG	?= y
166
167buildroot_mkimg: buildroot
168	mkdir -p $(BINARIES_PATH)
169	$(MKIMAGE_PATH)/mkimage -A arm \
170				-T ramdisk \
171				-C gzip \
172				-d $(ROOTFS_GZ) $(ROOTFS_SIGN)
173