diff --git a/verdin.mk b/verdin.mk new file mode 100644 index 0000000000000000000000000000000000000000..8907422cbb9d3eea7f0f24d98b0a62d6303936e7 --- /dev/null +++ b/verdin.mk @@ -0,0 +1,180 @@ +################################################################################ +# 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_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export +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