blob: 8907422cbb9d3eea7f0f24d98b0a62d6303936e7 [file] [log] [blame]
Igor Opaniuk3bf187d2020-03-05 16:43:31 +02001################################################################################
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################################################################################
6COMPILE_NS_USER ?= 64
7override COMPILE_NS_KERNEL := 64
8COMPILE_S_USER ?= 64
9COMPILE_S_KERNEL ?= 64
10
11BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
12################################################################################
13# Includes
14################################################################################
15include common.mk
16
17################################################################################
18# Paths to git projects and various binaries
19################################################################################
20OUT_PATH ?= $(ROOT)/out
21ROOTFS_BIN ?= $(ROOT)/out-br/images/rootfs.tar
22TF_A_PATH ?= $(ROOT)/trusted-firmware-a
23UBOOT_PATH ?= $(ROOT)/u-boot
24OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
25OPTEE_PATH ?= $(ROOT)/optee_os
26LINUX_PATH ?= $(ROOT)/linux
27
28LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/freescale/fsl-imx8mm-verdin-dev.dtb
29MODULE_OUTPUT ?= $(ROOT)/module_output
30
31UBOOT_BIN ?= $(UBOOT_PATH)/flash.bin
32OPTEE_ELF ?= $(OPTEE_PATH)/out/arm/core/tee.elf
33
34DDR_URL ?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.1.1.bin
35DDR_PATH ?= $(ROOT)/ddr-firmware
36
37ATF_LOAD_ADDR ?= 0x920000
38TEE_LOAD_ADDR ?= 0xbe000000
39
40
41################################################################################
42# Targets
43################################################################################
44.PHONY: all
45all: u-boot arm-tf buildroot linux prepare-images | toolchains
46
47.PHONY: clean
48clean: u-boot-clean arm-tf-clean linux-clean optee-os-clean \
49 buildroot-clean
50
51################################################################################
52# Toolchain
53################################################################################
54include toolchain.mk
55
56################################################################################
57# U-Boot
58################################################################################
59.PHONY: u-boot-config
60u-boot-config:
61ifeq ($(wildcard $(UBOOT_PATH)/.config),)
62 $(MAKE) -C $(UBOOT_PATH) \
63 CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) verdin-imx8mm_defconfig
64endif
65
66.PHONY: u-boot-menuconfig
67u-boot-menuconfig: u-boot-config
68 $(MAKE) -C $(UBOOT_PATH) \
69 CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) menuconfig
70
71.PHONY: u-boot
72u-boot: u-boot-config arm-tf optee-os ddr-firmware
73 # Copy BL31 binary from TF-A
74 cp $(TF_A_PATH)/build/imx8mm/release/bl31.bin $(UBOOT_PATH)
75 # Prepare proper tee.bin
76 $(AARCH64_CROSS_COMPILE)objcopy -O binary \
77 $(OPTEE_ELF) $(UBOOT_PATH)/tee.bin
78 # Copy DDR4 firmware
79 cp $(DDR_PATH)/firmware-imx-8.1.1/firmware/ddr/synopsys/lpddr4*.bin \
80 $(UBOOT_PATH)
81 # Build U-Boot and final ready-to-flash flash.bin image
82 ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) \
83 $(MAKE) -C $(UBOOT_PATH) \
84 CROSS_COMPILE="$(AARCH64_CROSS_COMPILE)" flash.bin
85
86.PHONY: u-boot-clean
87u-boot-clean:
88 cd $(UBOOT_PATH) && git clean -xdf
89
90################################################################################
91# DDR4 Firmware
92################################################################################
93.PHONY: ddr-firmware
94ddr-firmware:
95 # DDR is exported to the $PWD only, so cd to $(DDR_PATH)
96 # before unpacking
97 if [ ! -d "$(DDR_PATH)" ]; then \
98 mkdir -p $(DDR_PATH) && \
99 wget $(DDR_URL) -O $(DDR_PATH)/firmware.bin && \
100 chmod +x $(DDR_PATH)/firmware.bin && \
101 cd $(DDR_PATH) && \
102 $(DDR_PATH)/firmware.bin --auto-accept && \
103 cd $(ROOT)/build; \
104 fi;
105
106.PHONY: ddr-firmware-clean
107ddr-firmware-clean:
108 rm -rf $(DDR_PATH)
109
110################################################################################
111# ARM Trusted Firmware
112################################################################################
113.PHONY: arm-tf
114arm-tf:
115 $(MAKE) -C $(TF_A_PATH) \
116 PLAT=imx8mm \
117 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
118 SPD=opteed \
119 bl31
120
121.PHONY: arm-tf-clean
122arm-tf-clean:
123 cd $(TF_A_PATH) && git clean -xdf
124
125################################################################################
126# OP-TEE
127################################################################################
128OPTEE_OS_COMMON_FLAGS += PLATFORM=imx PLATFORM_FLAVOR=mx8mmevk CFG_ARM64_core=y CFG_UART_BASE=0x30860000
129OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=imx-mx8mmevk
130
131.PHONY: optee-os
132optee-os: optee-os-common
133
134.PHONY: optee-os-clean
135optee-os-clean: optee-os-clean-common
136
137################################################################################
138# Linux
139################################################################################
140LINUX_DEFCONFIG_COMMON_ARCH := arm64
141LINUX_DEFCONFIG_COMMON_FILES := \
142 $(LINUX_PATH)/arch/arm64/configs/defconfig \
143
144linux-defconfig: $(LINUX_PATH)/.config
145
146LINUX_COMMON_FLAGS += ARCH=arm64
147
148linux: linux-common
149 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) freescale/fsl-imx8mm-verdin-dev.dtb
150 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 \
151 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
152
153linux-defconfig-clean: linux-defconfig-clean-common
154
155LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
156
157linux-clean: linux-clean-common
158
159LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
160
161linux-cleaner: linux-cleaner-common
162
163.PHONY: prepare-images
164prepare-images: linux u-boot buildroot
165 @mkdir -p $(OUT_PATH)
166 @cp $(UBOOT_BIN) $(OUT_PATH)
167 @cp $(LINUX_PATH)/arch/arm64/boot/Image $(OUT_PATH)
168 @cp $(LINUX_DTB) $(OUT_PATH)
169 @cp $(ROOT)/out-br/images/rootfs.tar $(OUT_PATH)
170
171################################################################################
172# Buildroot/RootFS
173################################################################################
174.PHONY: update_rootfs
175update_rootfs: u-boot linux
176 @cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
177 @cd $(ROOT)/build
178
179.PHONY: buildroot
180buildroot: update_rootfs