blob: f5a4eef887d2433bd8629f773955bec01af33f9d [file] [log] [blame]
Jens Wiklander16328062021-02-17 10:22:25 +01001################################################################################
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 = imx-mx8mqevk
12BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
13
14include common.mk
15
16################################################################################
17# Paths to git projects and various binaries
18################################################################################
19TF_A_PATH ?= $(ROOT)/trusted-firmware-a
20
21U-BOOT_PATH ?= $(ROOT)/u-boot
22U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
23
24FIRMWARE_BIN_SHA256_SUM ?= 63ec62f5d229cbed00918c8449173933f1c9d594c59396b8dd217e94f47138b0
25FIRMWARE_BIN ?= firmware-imx-8.0.bin
26FIRMWARE_BIN ?= firmware-imx-8.0.bin
27FIRMWARE_BIN_URL ?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/$(FIRMWARE_BIN)
28FIRMWARE_VERSION ?= firmware-imx-8.0
29FIRMWARE_PATH ?= $(ROOT)/out-firmware/$(FIRMWARE_VERSION)
30LPDDR_BIN_PATH ?= $(FIRMWARE_PATH)/firmware/ddr/synopsys
31
32MKIMAGE_PATH ?= $(ROOT)/imx-mkimage
33BOOT_IMG ?= $(ROOT)/out/boot.img
34
35################################################################################
36# Targets
37################################################################################
38all: tfa u-boot linux optee-os buildroot flash-image
39clean: tfa-clean buildroot-clean u-boot-clean optee-os-clean
40
41include toolchain.mk
42
43################################################################################
44# ARM Trusted Firmware
45################################################################################
46TF_A_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
47
48# BL32=$(OPTEE_OS_HEADER_V2_BIN) \
49# BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
50# BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
51
52TF_A_FLAGS = PLAT=imx8mq SPD=opteed DEBUG_CONSOLE=1 DEBUG=0 V=1
53TF_A_FLAGS += BL32=$(ROOT)/optee_os/out/arm/core/tee-raw.bin
54
55tfa: optee-os u-boot
56 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) all fip
57
58tfa-clean:
59 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
60
61################################################################################
62# U-Boot
63################################################################################
64
65U-BOOT_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
66
67U-BOOT_DEFCONFIG_FILES := $(U-BOOT_PATH)/configs/imx8mq_evk_defconfig \
68 $(BUILD_PATH)/kconfigs/uboot_imx8.conf
69
70$(U-BOOT_PATH)/.config: $(U-BOOT_DEFCONFIG_FILES)
71 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) imx8mq_evk_defconfig
72 (cd $(U-BOOT_PATH) && \
73 ARCH=arm64 \
74 scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_FILES))
75
76.PHONY: u-boot-defconfig
77u-boot-defconfig: $(U-BOOT_PATH)/.config
78
79.PHONY: u-boot
80u-boot: u-boot-defconfig
81 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH)
82
83.PHONY: u-boot-clean
84u-boot-clean:
85 cd $(U-BOOT_PATH) && git clean -xdf
86
87.PHONY: u-boot-cscope
88u-boot-cscope:
89 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) cscope
90
91
92################################################################################
93# Linux kernel
94################################################################################
95LINUX_DEFCONFIG_COMMON_ARCH := arm64
96LINUX_DEFCONFIG_COMMON_FILES := \
97 $(LINUX_PATH)/arch/arm64/configs/defconfig \
98 $(CURDIR)/kconfigs/imx.conf
99
100linux-defconfig: $(LINUX_PATH)/.config
101
102LINUX_COMMON_FLAGS += ARCH=arm64
103
104linux: linux-common
105
106linux-defconfig-clean: linux-defconfig-clean-common
107
108LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
109
110linux-clean: linux-clean-common
111
112LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
113
114linux-cleaner: linux-cleaner-common
115
116################################################################################
117# OP-TEE
118################################################################################
119optee-os: optee-os-common
120optee-os-clean: optee-os-clean-common
121
122################################################################################
123# DDR firmware
124################################################################################
125# This is prebuilt binaries by NXP, download them and use them. Update path if
126# it changes in the future.
127
128$(ROOT)/out-firmware/$(FIRMWARE_BIN):
129 mkdir -p $(ROOT)/out-firmware
130 (cd $(ROOT)/out-firmware && wget $(FIRMWARE_BIN_URL))
131
132$(FIRMWARE_PATH)/.unpacked: $(ROOT)/out-firmware/$(FIRMWARE_BIN)
133 (cd $(ROOT)/out-firmware && \
134 echo $(FIRMWARE_BIN_SHA256_SUM) $(FIRMWARE_BIN) | sha256sum -c)
135 (cd $(ROOT)/out-firmware && \
136 chmod 711 $(FIRMWARE_BIN) && ./$(FIRMWARE_BIN) --auto-accept)
137 touch $(FIRMWARE_PATH)/.unpacked
138
139.PHONY: ddr-firmware
140ddr-firmware: $(FIRMWARE_PATH)/.unpacked
141
142ddr-firmware-clean:
143 rm -rf $(ROOT)/out-firmware
144
145################################################################################
146# imx-mkimage
147################################################################################
148mkimage: u-boot tfa ddr-firmware
149 ln -sf $(ROOT)/optee_os/out/arm/core/tee-raw.bin \
150 $(MKIMAGE_PATH)/iMX8M/tee.bin
151 ln -sf $(ROOT)/trusted-firmware-a/build/imx8mq/release/bl31.bin \
152 $(MKIMAGE_PATH)/iMX8M/
153 ln -sf $(LPDDR_BIN_PATH)/lpddr4_pmu_train_*.bin $(MKIMAGE_PATH)/iMX8M/
154 ln -sf $(U-BOOT_PATH)/u-boot-nodtb.bin $(MKIMAGE_PATH)/iMX8M/
155 ln -sf $(U-BOOT_PATH)/spl/u-boot-spl.bin $(MKIMAGE_PATH)/iMX8M/
156 ln -sf $(U-BOOT_PATH)/arch/arm/dts/imx8mq-evk.dtb \
157 $(MKIMAGE_PATH)/iMX8M/fsl-imx8mq-evk.dtb
158 ln -sf $(U-BOOT_PATH)/tools/mkimage $(MKIMAGE_PATH)/iMX8M/mkimage_uboot
159 $(MAKE) -C $(MKIMAGE_PATH) SOC=iMX8M flash_spl_uboot
160#> +If you want to run with HDMI, copy signed_hdmi_imx8m.bin to imx-mkimage/iMX8M
161#> +make SOC=iMX8M flash_spl_uboot or make SOC=iMX8M flash_hdmi_spl_uboot to
162#> +generate flash.bin.
163mkimage-clean:
164 cd $(MKIMAGE_PATH) && git clean -xdf
165 rm -f $(ROOT)/build/mkimage_imx8
166
167$(ROOT)/out-br/images/ramdisk.img: $(ROOT)/out-br/images/rootfs.cpio.gz
168 $(U-BOOT_PATH)/tools/mkimage -A arm64 -O linux -T ramdisk -C gzip \
169 -d $< $@
170
171$(ROOT)/out:
172 mkdir -p $@
173
174$(ROOT)/out/boot.scr: $(ROOT)/build/imx/u-boot_boot_script | $(ROOT)/out
175 $(U-BOOT_PATH)/tools/mkimage -T script -C none -n 'Boot script' \
176 -d $< $@
177
178.PHONY: flash-image
179flash-image: buildroot mkimage
180 $(MAKE) flash-image-only
181
182.PHONY: flash-image-only
183flash-image-only: $(ROOT)/out-br/images/ramdisk.img $(ROOT)/out/boot.scr
184 rm -f $(BOOT_IMG)
185 truncate -s 128M ${BOOT_IMG}
186 echo -ne "16384 64M 7\n147456 + 83\n" | sfdisk ${BOOT_IMG}
187 mformat -i ${BOOT_IMG}.fat -n 64 -h 255 -T 131072 -v "BOOT IMG" -C ::
188 mcopy -i ${BOOT_IMG}.fat $(LINUX_PATH)/arch/arm64/boot/Image ::
189 mcopy -i ${BOOT_IMG}.fat \
190 $(LINUX_PATH)/arch/arm64/boot/dts/freescale/imx8mq-evk.dtb ::
191 mcopy -i ${BOOT_IMG}.fat $(ROOT)/out-br/images/ramdisk.img ::
192 mcopy -i ${BOOT_IMG}.fat $(ROOT)/out/boot.scr ::
193 dd if=${BOOT_IMG}.fat of=${BOOT_IMG} bs=512 seek=16384 \
194 conv=fsync,notrunc
195 dd if=${ROOT}/imx-mkimage/iMX8M/flash.bin of=${BOOT_IMG} bs=1k seek=33 \
196 conv=fsync,notrunc