blob: 96fdbd5bf6d67844ede496f3c05a69858e5b4431 [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
Fathi Boudraa0264972024-03-18 15:25:23 +010011TFA_PLATFORM ?= imx8mq
Fathi Boudraf8cad7f2024-03-18 15:22:53 +010012OPTEE_OS_PLATFORM ?= imx-mx8mqevk
Jens Wiklander16328062021-02-17 10:22:25 +010013BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
James Menetrey7223f452021-04-29 17:01:09 +000014BR2_TARGET_ROOTFS_EXT2=y
15BR2_TARGET_ROOTFS_EXT2_4=y
Jens Wiklander16328062021-02-17 10:22:25 +010016
17include common.mk
18
19################################################################################
20# Paths to git projects and various binaries
21################################################################################
22TF_A_PATH ?= $(ROOT)/trusted-firmware-a
23
24U-BOOT_PATH ?= $(ROOT)/u-boot
25U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
26
27FIRMWARE_BIN_SHA256_SUM ?= 63ec62f5d229cbed00918c8449173933f1c9d594c59396b8dd217e94f47138b0
28FIRMWARE_BIN ?= firmware-imx-8.0.bin
29FIRMWARE_BIN ?= firmware-imx-8.0.bin
30FIRMWARE_BIN_URL ?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/$(FIRMWARE_BIN)
31FIRMWARE_VERSION ?= firmware-imx-8.0
32FIRMWARE_PATH ?= $(ROOT)/out-firmware/$(FIRMWARE_VERSION)
33LPDDR_BIN_PATH ?= $(FIRMWARE_PATH)/firmware/ddr/synopsys
34
35MKIMAGE_PATH ?= $(ROOT)/imx-mkimage
36BOOT_IMG ?= $(ROOT)/out/boot.img
37
38################################################################################
39# Targets
40################################################################################
41all: tfa u-boot linux optee-os buildroot flash-image
42clean: tfa-clean buildroot-clean u-boot-clean optee-os-clean
43
44include toolchain.mk
45
46################################################################################
47# ARM Trusted Firmware
48################################################################################
49TF_A_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
50
51# BL32=$(OPTEE_OS_HEADER_V2_BIN) \
52# BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
53# BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
54
Fathi Boudraa0264972024-03-18 15:25:23 +010055TF_A_FLAGS = PLAT=$(TFA_PLATFORM) SPD=opteed DEBUG_CONSOLE=1 DEBUG=0 V=1
Jens Wiklander16328062021-02-17 10:22:25 +010056TF_A_FLAGS += BL32=$(ROOT)/optee_os/out/arm/core/tee-raw.bin
57
58tfa: optee-os u-boot
59 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) all fip
60
61tfa-clean:
62 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
63
64################################################################################
65# U-Boot
66################################################################################
67
68U-BOOT_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
69
70U-BOOT_DEFCONFIG_FILES := $(U-BOOT_PATH)/configs/imx8mq_evk_defconfig \
71 $(BUILD_PATH)/kconfigs/uboot_imx8.conf
72
73$(U-BOOT_PATH)/.config: $(U-BOOT_DEFCONFIG_FILES)
74 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) imx8mq_evk_defconfig
75 (cd $(U-BOOT_PATH) && \
76 ARCH=arm64 \
77 scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_FILES))
78
79.PHONY: u-boot-defconfig
80u-boot-defconfig: $(U-BOOT_PATH)/.config
81
82.PHONY: u-boot
83u-boot: u-boot-defconfig
84 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH)
85
86.PHONY: u-boot-clean
87u-boot-clean:
88 cd $(U-BOOT_PATH) && git clean -xdf
89
90.PHONY: u-boot-cscope
91u-boot-cscope:
92 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) cscope
93
94
95################################################################################
96# Linux kernel
97################################################################################
98LINUX_DEFCONFIG_COMMON_ARCH := arm64
99LINUX_DEFCONFIG_COMMON_FILES := \
100 $(LINUX_PATH)/arch/arm64/configs/defconfig \
101 $(CURDIR)/kconfigs/imx.conf
102
103linux-defconfig: $(LINUX_PATH)/.config
104
105LINUX_COMMON_FLAGS += ARCH=arm64
106
107linux: linux-common
108
109linux-defconfig-clean: linux-defconfig-clean-common
110
111LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
112
113linux-clean: linux-clean-common
114
115LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
116
117linux-cleaner: linux-cleaner-common
118
119################################################################################
120# OP-TEE
121################################################################################
122optee-os: optee-os-common
123optee-os-clean: optee-os-clean-common
124
125################################################################################
126# DDR firmware
127################################################################################
128# This is prebuilt binaries by NXP, download them and use them. Update path if
129# it changes in the future.
130
131$(ROOT)/out-firmware/$(FIRMWARE_BIN):
132 mkdir -p $(ROOT)/out-firmware
133 (cd $(ROOT)/out-firmware && wget $(FIRMWARE_BIN_URL))
134
135$(FIRMWARE_PATH)/.unpacked: $(ROOT)/out-firmware/$(FIRMWARE_BIN)
136 (cd $(ROOT)/out-firmware && \
137 echo $(FIRMWARE_BIN_SHA256_SUM) $(FIRMWARE_BIN) | sha256sum -c)
138 (cd $(ROOT)/out-firmware && \
139 chmod 711 $(FIRMWARE_BIN) && ./$(FIRMWARE_BIN) --auto-accept)
140 touch $(FIRMWARE_PATH)/.unpacked
141
142.PHONY: ddr-firmware
143ddr-firmware: $(FIRMWARE_PATH)/.unpacked
144
145ddr-firmware-clean:
146 rm -rf $(ROOT)/out-firmware
147
148################################################################################
149# imx-mkimage
150################################################################################
151mkimage: u-boot tfa ddr-firmware
152 ln -sf $(ROOT)/optee_os/out/arm/core/tee-raw.bin \
153 $(MKIMAGE_PATH)/iMX8M/tee.bin
154 ln -sf $(ROOT)/trusted-firmware-a/build/imx8mq/release/bl31.bin \
155 $(MKIMAGE_PATH)/iMX8M/
156 ln -sf $(LPDDR_BIN_PATH)/lpddr4_pmu_train_*.bin $(MKIMAGE_PATH)/iMX8M/
157 ln -sf $(U-BOOT_PATH)/u-boot-nodtb.bin $(MKIMAGE_PATH)/iMX8M/
158 ln -sf $(U-BOOT_PATH)/spl/u-boot-spl.bin $(MKIMAGE_PATH)/iMX8M/
159 ln -sf $(U-BOOT_PATH)/arch/arm/dts/imx8mq-evk.dtb \
160 $(MKIMAGE_PATH)/iMX8M/fsl-imx8mq-evk.dtb
161 ln -sf $(U-BOOT_PATH)/tools/mkimage $(MKIMAGE_PATH)/iMX8M/mkimage_uboot
162 $(MAKE) -C $(MKIMAGE_PATH) SOC=iMX8M flash_spl_uboot
163#> +If you want to run with HDMI, copy signed_hdmi_imx8m.bin to imx-mkimage/iMX8M
164#> +make SOC=iMX8M flash_spl_uboot or make SOC=iMX8M flash_hdmi_spl_uboot to
165#> +generate flash.bin.
166mkimage-clean:
167 cd $(MKIMAGE_PATH) && git clean -xdf
168 rm -f $(ROOT)/build/mkimage_imx8
169
170$(ROOT)/out-br/images/ramdisk.img: $(ROOT)/out-br/images/rootfs.cpio.gz
171 $(U-BOOT_PATH)/tools/mkimage -A arm64 -O linux -T ramdisk -C gzip \
172 -d $< $@
173
174$(ROOT)/out:
175 mkdir -p $@
176
177$(ROOT)/out/boot.scr: $(ROOT)/build/imx/u-boot_boot_script | $(ROOT)/out
178 $(U-BOOT_PATH)/tools/mkimage -T script -C none -n 'Boot script' \
179 -d $< $@
180
James Menetrey7223f452021-04-29 17:01:09 +0000181################################################################################
182# Flash images
183################################################################################
184USE_PERSISTENT_ROOTFS ?= 0
185
186# Configuration of the BOOT partition
187FLASH_PARTITIONS_BLOCK_SIZE = 512
188FLASH_PARTITION_BOOT_START_BLOCK = 16384
189FLASH_PARTITION_BOOT_SIZE_IN_BYTES = \
190 $(shell echo $$(( 64 * 1024 * 1024 )))
191FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS = \
192 $(shell echo $$(( $(FLASH_PARTITION_BOOT_SIZE_IN_BYTES) / $(FLASH_PARTITIONS_BLOCK_SIZE) )))
193FLASH_PARTITIONS_TABLE = "\
194 start=$(FLASH_PARTITION_BOOT_START_BLOCK) \
195 size=$(FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS) \
196 type=7\n"
197FLASH_IMAGE_SIZE = \
198 $(shell echo $$(( $(FLASH_PARTITION_BOOT_START_BLOCK) * $(FLASH_PARTITIONS_BLOCK_SIZE) \
199 + $(FLASH_PARTITION_BOOT_SIZE_IN_BYTES) )))
200
201# Configuration of the ROOTFS partition if enabled
202ifeq ($(USE_PERSISTENT_ROOTFS),1)
203FLASH_PARTITION_ROOTFS_IMAGE_PATH = $(ROOT)/out-br/images/rootfs.ext4
204FLASH_PARTITION_ROOTFS_START_BLOCK = \
205 $(shell echo $$(( $(FLASH_PARTITION_BOOT_START_BLOCK) + $(FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS) )))
206FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES = \
207 $(shell stat -L --printf="%s" $(FLASH_PARTITION_ROOTFS_IMAGE_PATH))
208FLASH_PARTITION_ROOTFS_SIZE_IN_BLOCKS = \
209 $(shell echo $$(( $(FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES) / $(FLASH_PARTITIONS_BLOCK_SIZE) )))
210FLASH_PARTITIONS_TABLE += "\
211 start=$(FLASH_PARTITION_ROOTFS_START_BLOCK) \
212 size=$(FLASH_PARTITION_ROOTFS_SIZE_IN_BLOCKS) \
213 type=83\n"
214FLASH_IMAGE_SIZE := $(shell echo $$(( $(FLASH_IMAGE_SIZE) + $(FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES) )))
215endif
216
Jens Wiklander16328062021-02-17 10:22:25 +0100217.PHONY: flash-image
Jens Wiklander426d74a2022-04-11 08:51:43 +0200218flash-image: buildroot mkimage linux
Jens Wiklander16328062021-02-17 10:22:25 +0100219 $(MAKE) flash-image-only
220
221.PHONY: flash-image-only
222flash-image-only: $(ROOT)/out-br/images/ramdisk.img $(ROOT)/out/boot.scr
223 rm -f $(BOOT_IMG)
James Menetrey7223f452021-04-29 17:01:09 +0000224 truncate -s $(FLASH_IMAGE_SIZE) $(BOOT_IMG)
225 echo -ne $(FLASH_PARTITIONS_TABLE) | sfdisk $(BOOT_IMG)
226 mformat -i $(BOOT_IMG).fat -n 64 -h 255 -T 131072 -v "BOOT IMG" -C ::
227 mcopy -i $(BOOT_IMG).fat $(LINUX_PATH)/arch/arm64/boot/Image ::
228 mcopy -i $(BOOT_IMG).fat \
Jens Wiklander16328062021-02-17 10:22:25 +0100229 $(LINUX_PATH)/arch/arm64/boot/dts/freescale/imx8mq-evk.dtb ::
James Menetrey7223f452021-04-29 17:01:09 +0000230 mcopy -i $(BOOT_IMG).fat $(ROOT)/out/boot.scr ::
231
232ifeq ($(USE_PERSISTENT_ROOTFS),1)
233 dd if=$(FLASH_PARTITION_ROOTFS_IMAGE_PATH) of=$(BOOT_IMG) bs=$(FLASH_PARTITIONS_BLOCK_SIZE) \
234 seek=$(FLASH_PARTITION_ROOTFS_START_BLOCK) conv=fsync,notrunc
235else
236 mcopy -i $(BOOT_IMG).fat $(ROOT)/out-br/images/ramdisk.img ::
237endif
238
239 dd if=$(BOOT_IMG).fat of=$(BOOT_IMG) bs=$(FLASH_PARTITIONS_BLOCK_SIZE) \
240 seek=$(FLASH_PARTITION_BOOT_START_BLOCK) conv=fsync,notrunc
241 dd if=$(ROOT)/imx-mkimage/iMX8M/flash.bin of=$(BOOT_IMG) bs=1k seek=33 \
Jens Wiklander16328062021-02-17 10:22:25 +0100242 conv=fsync,notrunc