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
11OPTEE_OS_PLATFORM = vexpress-juno
12
13include common.mk
14
15################################################################################
16# Paths to git projects and various binaries
17################################################################################
18TF_A_PATH		?= $(ROOT)/trusted-firmware-a
19
20U-BOOT_PATH		?= $(ROOT)/u-boot
21U-BOOT_BIN		?= $(U-BOOT_PATH)/u-boot.bin
22
23SCP_BLX_URL		?= https://downloads.trustedfirmware.org/tf-a/css_scp_2.8.0/juno
24
25################################################################################
26# Targets
27################################################################################
28all: scp-blx arm-tf u-boot linux optee-os buildroot
29clean: scp-blx-clean arm-tf-clean buildroot-clean u-boot-clean optee-os-clean
30
31include toolchain.mk
32
33################################################################################
34# SCP BL1 and BL2
35################################################################################
36.PHONY: scp-blx
37scp-blx: $(ROOT)/out-firmware/scp_bl1.bin $(ROOT)/out-firmware/scp_bl2.bin
38
39.PHONY: scp-blx
40scp-blx-clean:
41	@rm -f $(ROOT)/out-firmware/scp_bl1.bin
42	@rm -f $(ROOT)/out-firmware/scp_bl2.bin
43	@rm -f $(ROOT)/out-firmware/tmp/scp_bl1.bin
44	@rm -f $(ROOT)/out-firmware/tmp/scp_bl2.bin
45
46define dlscp
47	@mkdir -p $(ROOT)/out-firmware/tmp
48	@rm -f $(ROOT)/out-firmware/tmp/$1
49	@rm -f $(ROOT)/out-firmware/$1
50	@(cd $(ROOT)/out-firmware/tmp/ && wget $(SCP_BLX_URL)/$1)
51	@(echo $2 $(ROOT)/out-firmware/tmp/$1 | sha256sum -c)
52	@(mv $(ROOT)/out-firmware/tmp/$1 $(ROOT)/out-firmware/$1)
53endef
54
55$(ROOT)/out-firmware/scp_bl1.bin:
56	$(call dlscp,scp_bl1.bin,1c690a7d93c82d39d18b720920ced7a712fdcfc744224b4f067e56013522fece)
57
58$(ROOT)/out-firmware/scp_bl2.bin:
59	$(call dlscp,scp_bl2.bin,533eb4a3f9d91e759b98288edf4c1441abe6f7fbc5da87825a8f1bb1b7942aa5)
60
61################################################################################
62# ARM Trusted Firmware
63################################################################################
64TF_A_EXPORTS ?= \
65	CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
66
67TF_A_FLAGS ?= \
68	SCP_BL2=$(ROOT)/out-firmware/scp_bl2.bin \
69	BL32=$(OPTEE_OS_HEADER_V2_BIN) \
70	BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
71	BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
72	BL33=$(U-BOOT_BIN) \
73	DEBUG=0 \
74	ARM_TSP_RAM_LOCATION=dram \
75	PLAT=juno \
76	SPD=opteed
77
78arm-tf: scp-blx optee-os u-boot
79	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) all fip
80
81arm-tf-clean:
82	$(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
83
84################################################################################
85# Das U-Boot
86################################################################################
87
88U-BOOT_EXPORTS ?= CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
89
90U-BOOT_DEFCONFIG_FILES := \
91	$(U-BOOT_PATH)/configs/vexpress_aemv8a_juno_defconfig \
92	$(ROOT)/build/kconfigs/u-boot_juno.conf
93
94.PHONY: u-boot
95u-boot:
96	cd $(U-BOOT_PATH) && \
97		scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_FILES)
98	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
99
100u-boot-clean:
101	$(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
102
103################################################################################
104# Linux kernel
105################################################################################
106LINUX_DEFCONFIG_COMMON_ARCH := arm64
107LINUX_DEFCONFIG_COMMON_FILES := \
108		$(LINUX_PATH)/arch/arm64/configs/defconfig \
109		$(CURDIR)/kconfigs/juno.conf
110
111linux-defconfig: $(LINUX_PATH)/.config
112
113LINUX_COMMON_FLAGS += ARCH=arm64
114
115linux: linux-common
116
117linux-defconfig-clean: linux-defconfig-clean-common
118
119LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
120
121linux-clean: linux-clean-common
122
123LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
124
125linux-cleaner: linux-cleaner-common
126
127################################################################################
128# OP-TEE
129################################################################################
130optee-os: optee-os-common
131optee-os-clean: optee-os-clean-common
132
133
134$(ROOT)/out-br/images/ramdisk.img: $(ROOT)/out-br/images/rootfs.cpio.gz
135	$(U-BOOT_PATH)/tools/mkimage -A arm64 -O linux -T ramdisk -C gzip \
136		-d $< $@
137
138FTP-UPLOAD = ftp-upload -v --host $(JUNO_IP) --dir SOFTWARE
139
140.PHONY: flash
141flash: $(ROOT)/out-br/images/ramdisk.img
142	@test -n "$(JUNO_IP)" || \
143		(echo "JUNO_IP not set" ; exit 1)
144	$(FTP-UPLOAD) $(ROOT)/out-firmware/scp_bl1.bin
145	$(FTP-UPLOAD) $(TF_A_PATH)/build/juno/release/bl1.bin
146	$(FTP-UPLOAD) $(TF_A_PATH)/build/juno/release/fip.bin
147	$(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/Image
148	$(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/dts/arm/juno.dtb
149	$(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/dts/arm/juno-r1.dtb
150	$(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/dts/arm/juno-r2.dtb
151	$(FTP-UPLOAD) $(ROOT)/out-br/images/ramdisk.img
152