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