summaryrefslogtreecommitdiff
path: root/verdin.mk
blob: 8319f96c6da76c889f13a797e69d49c34b85571f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
################################################################################
# Following variables defines how the NS_USER (Non Secure User - Client
# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
# S_USER (Secure User - TA) are compiled
################################################################################
COMPILE_NS_USER   ?= 64
override COMPILE_NS_KERNEL := 64
COMPILE_S_USER    ?= 64
COMPILE_S_KERNEL  ?= 64

BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
################################################################################
# Includes
################################################################################
include common.mk

################################################################################
# Paths to git projects and various binaries
################################################################################
OUT_PATH		?= $(ROOT)/out
ROOTFS_BIN		?= $(ROOT)/out-br/images/rootfs.tar
TF_A_PATH		?= $(ROOT)/trusted-firmware-a
UBOOT_PATH		?= $(ROOT)/u-boot
OPTEE_PATH		?= $(ROOT)/optee_os
LINUX_PATH		?= $(ROOT)/linux

LINUX_DTB		?= $(LINUX_PATH)/arch/arm64/boot/dts/freescale/fsl-imx8mm-verdin-dev.dtb
MODULE_OUTPUT		?= $(ROOT)/module_output

UBOOT_BIN		?= $(UBOOT_PATH)/flash.bin
OPTEE_ELF		?= $(OPTEE_PATH)/out/arm/core/tee.elf

DDR_URL			?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.1.1.bin
DDR_PATH		?= $(ROOT)/ddr-firmware

ATF_LOAD_ADDR		?= 0x920000
TEE_LOAD_ADDR		?= 0xbe000000


################################################################################
# Targets
################################################################################
.PHONY: all
all: u-boot arm-tf buildroot linux prepare-images | toolchains

.PHONY: clean
clean: u-boot-clean arm-tf-clean linux-clean optee-os-clean \
	buildroot-clean

################################################################################
# Toolchain
################################################################################
include toolchain.mk

################################################################################
# U-Boot
################################################################################
.PHONY: u-boot-config
u-boot-config:
ifeq ($(wildcard $(UBOOT_PATH)/.config),)
	$(MAKE) -C $(UBOOT_PATH) \
		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) verdin-imx8mm_defconfig
endif

.PHONY: u-boot-menuconfig
u-boot-menuconfig: u-boot-config
	$(MAKE) -C $(UBOOT_PATH) \
		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) menuconfig

.PHONY: u-boot
u-boot: u-boot-config arm-tf optee-os ddr-firmware
	# Copy BL31 binary from TF-A
	cp $(TF_A_PATH)/build/imx8mm/release/bl31.bin $(UBOOT_PATH)
	# Prepare proper tee.bin
	$(AARCH64_CROSS_COMPILE)objcopy -O binary \
		$(OPTEE_ELF) $(UBOOT_PATH)/tee.bin
	# Copy DDR4 firmware
	cp $(DDR_PATH)/firmware-imx-8.1.1/firmware/ddr/synopsys/lpddr4*.bin \
		$(UBOOT_PATH)
	# Build U-Boot and final ready-to-flash flash.bin image
	ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) \
	$(MAKE) -C $(UBOOT_PATH) \
		CROSS_COMPILE="$(AARCH64_CROSS_COMPILE)" flash.bin

.PHONY: u-boot-clean
u-boot-clean:
	cd $(UBOOT_PATH) && git clean -xdf

################################################################################
# DDR4 Firmware
################################################################################
.PHONY: ddr-firmware
ddr-firmware:
	# DDR is exported to the $PWD only, so cd to $(DDR_PATH)
	# before unpacking
	if [ ! -d "$(DDR_PATH)" ]; then \
		mkdir -p $(DDR_PATH) && \
		wget $(DDR_URL) -O $(DDR_PATH)/firmware.bin && \
		chmod +x $(DDR_PATH)/firmware.bin && \
		cd $(DDR_PATH) && \
		$(DDR_PATH)/firmware.bin --auto-accept && \
		cd $(ROOT)/build; \
	fi;

.PHONY: ddr-firmware-clean
ddr-firmware-clean:
	rm -rf $(DDR_PATH)

################################################################################
# ARM Trusted Firmware
################################################################################
.PHONY: arm-tf
arm-tf:
	$(MAKE) -C $(TF_A_PATH) \
		PLAT=imx8mm \
		CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
		SPD=opteed \
		bl31

.PHONY: arm-tf-clean
arm-tf-clean:
	cd $(TF_A_PATH) && git clean -xdf

################################################################################
# OP-TEE
################################################################################
OPTEE_OS_COMMON_FLAGS += PLATFORM=imx PLATFORM_FLAVOR=mx8mmevk CFG_ARM64_core=y CFG_UART_BASE=0x30860000
OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=imx-mx8mmevk

.PHONY: optee-os
optee-os: optee-os-common

.PHONY: optee-os-clean
optee-os-clean: optee-os-clean-common

################################################################################
# Linux
################################################################################
LINUX_DEFCONFIG_COMMON_ARCH := arm64
LINUX_DEFCONFIG_COMMON_FILES := \
		$(LINUX_PATH)/arch/arm64/configs/defconfig \

linux-defconfig: $(LINUX_PATH)/.config

LINUX_COMMON_FLAGS += ARCH=arm64

linux: linux-common
	$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) freescale/fsl-imx8mm-verdin-dev.dtb
	$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 \
		INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install

linux-defconfig-clean: linux-defconfig-clean-common

LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64

linux-clean: linux-clean-common

LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64

linux-cleaner: linux-cleaner-common

.PHONY: prepare-images
prepare-images: linux u-boot buildroot
	@mkdir -p $(OUT_PATH)
	@cp $(UBOOT_BIN) $(OUT_PATH)
	@cp $(LINUX_PATH)/arch/arm64/boot/Image $(OUT_PATH)
	@cp $(LINUX_DTB) $(OUT_PATH)
	@cp $(ROOT)/out-br/images/rootfs.tar $(OUT_PATH)

################################################################################
# Buildroot/RootFS
################################################################################
.PHONY: update_rootfs
update_rootfs: u-boot linux
	@cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
	@cd $(ROOT)/build

.PHONY: buildroot
buildroot: update_rootfs