From bab50840f30a0201b8e495bab5a05077433226d9 Mon Sep 17 00:00:00 2001 From: Jens Wiklander <jens.wiklander@linaro.org> Date: Wed, 17 Feb 2016 15:45:10 +0100 Subject: [PATCH] Add support for Juno Reviewed-by: Joakim Bech <joakim.bech@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> --- juno.mk | 192 ++++++++++++++++++++++++++++++++++++++ kconfigs/juno.conf | 1 + kconfigs/u-boot_juno.conf | 0 toolchain.mk | 6 +- 4 files changed, 196 insertions(+), 3 deletions(-) create mode 100644 juno.mk create mode 100644 kconfigs/juno.conf create mode 100644 kconfigs/u-boot_juno.conf diff --git a/juno.mk b/juno.mk new file mode 100644 index 0000000..8a4ce27 --- /dev/null +++ b/juno.mk @@ -0,0 +1,192 @@ +DEBUG ?= 0 + +-include common.mk + +################################################################################ +# Mandatory definition to use common.mk +################################################################################ +CROSS_COMPILE_NS_USER ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)" +CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)" +CROSS_COMPILE_S_USER ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)" +CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)" +OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin +OPTEE_OS_TA_DEV_KIT_DIR ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-ta_arm64 + +################################################################################ +# Paths to git projects and various binaries +################################################################################ +ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware + +U-BOOT_PATH ?= $(ROOT)/u-boot +U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin + +################################################################################ +# Targets +################################################################################ +all: arm-tf u-boot linux optee-os optee-client optee-linuxdriver generate-dtb xtest update_rootfs +all-clean: arm-tf-clean busybox-clean u-boot-clean optee-os-clean \ + optee-client-clean optee-linuxdriver-clean + + +-include toolchain.mk + +################################################################################ +# ARM Trusted Firmware +################################################################################ +ARM_TF_EXPORTS ?= \ + CFLAGS="-O0 -gdwarf-2" \ + CROSS_COMPILE="$(CCACHE)$(AARCH64_NONE_CROSS_COMPILE)" + +ARM_TF_FLAGS ?= \ + SCP_BL2=$(ROOT)/vexpress-firmware/SOFTWARE/bl30.bin \ + BL32=$(OPTEE_OS_BIN) \ + BL33=$(U-BOOT_BIN) \ + DEBUG=0 \ + ARM_TSP_RAM_LOCATION=dram \ + PLAT=juno \ + SPD=opteed + +arm-tf: optee-os u-boot + $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip + +arm-tf-clean: + $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean + +################################################################################ +# Busybox +################################################################################ +BUSYBOX_COMMON_TARGET = fvp-aarch64 +BUSYBOX_CLEAN_COMMON_TARGET = fvp-aarch64 clean +BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH) + +busybox: busybox-common + +busybox-clean: busybox-clean-common + +busybox-cleaner: busybox-cleaner-common + +################################################################################ +# Das U-Boot +################################################################################ + +U-BOOT_EXPORTS ?= CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" + +U-BOOT_DEFCONFIG_FILES := \ + $(U-BOOT_PATH)/configs/vexpress_aemv8a_juno_defconfig \ + $(ROOT)/build/kconfigs/u-boot_juno.conf + +.PHONY: u-boot +u-boot: + cd $(U-BOOT_PATH) && \ + scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_FILES) + $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all + +u-boot-clean: + $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean + +################################################################################ +# Linux kernel +################################################################################ +LINUX_DEFCONFIG_COMMON_ARCH := arm64 +LINUX_DEFCONFIG_COMMON_FILES := \ + $(LINUX_PATH)/arch/arm64/configs/defconfig \ + $(CURDIR)/kconfigs/juno.conf + +linux-defconfig: $(LINUX_PATH)/.config + +LINUX_COMMON_FLAGS += ARCH=arm64 + +linux: linux-common + +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 + +################################################################################ +# OP-TEE +################################################################################ +OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-juno CFG_ARM64_core=y +optee-os: optee-os-common + +OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-juno +optee-os-clean: optee-os-clean-common + +optee-client: optee-client-common + +optee-client-clean: optee-client-clean-common + +OPTEE_LINUXDRIVER_COMMON_FLAGS += ARCH=arm64 +optee-linuxdriver: optee-linuxdriver-common + +OPTEE_LINUXDRIVER_CLEAN_COMMON_FLAGS += ARCH=arm64 +optee-linuxdriver-clean: optee-linuxdriver-clean-common + +generate-dtb: linux + $(LINUX_PATH)/scripts/dtc/dtc \ + -O dtb \ + -o $(LINUX_PATH)/fdt.dtb \ + -b 0 \ + -i . $(OPTEE_LINUXDRIVER_PATH)/fdts/fvp-foundation-gicv2-psci.dts + +################################################################################ +# xtest / optee_test +################################################################################ +xtest: xtest-common + +xtest-clean: xtest-clean-common + +xtest-patch: xtest-patch-common + +################################################################################ +# Root FS +################################################################################ +.PHONY: filelist-tee +filelist-tee: + @echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST) + @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST) + @echo "# TAs" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \ + sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST) + @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST) + @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST) + @echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST) + +.PHONY: update_rootfs +update_rootfs: u-boot busybox optee-client optee-linuxdriver xtest filelist-tee + cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp + cd $(GEN_ROOTFS_PATH) && \ + $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz + $(U-BOOT_PATH)/tools/mkimage -A arm64 -O linux -T ramdisk -C gzip \ + -d $(GEN_ROOTFS_PATH)/filesystem.cpio.gz \ + $(GEN_ROOTFS_PATH)/ramdisk.img + +FTP-UPLOAD = ftp-upload -v --host $(JUNO_IP) --dir SOFTWARE + +.PHONY: flash +flash: + @test -n "$(JUNO_IP)" || \ + (echo "JUNO_IP not set" ; exit 1) + $(FTP-UPLOAD) $(ROOT)/vexpress-firmware/SOFTWARE/bl0.bin + $(FTP-UPLOAD) $(ARM_TF_PATH)/build/juno/release/bl1.bin + $(FTP-UPLOAD) $(ARM_TF_PATH)/build/juno/release/fip.bin + $(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/Image + $(FTP-UPLOAD) $(ROOT)/linux/arch/arm64/boot/dts/arm/juno.dtb + $(FTP-UPLOAD) $(ROOT)/gen_rootfs/ramdisk.img diff --git a/kconfigs/juno.conf b/kconfigs/juno.conf new file mode 100644 index 0000000..517f318 --- /dev/null +++ b/kconfigs/juno.conf @@ -0,0 +1 @@ +CONFIG_DRM=y diff --git a/kconfigs/u-boot_juno.conf b/kconfigs/u-boot_juno.conf new file mode 100644 index 0000000..e69de29 diff --git a/toolchain.mk b/toolchain.mk index c6a17df..ceff0cf 100644 --- a/toolchain.mk +++ b/toolchain.mk @@ -21,14 +21,14 @@ SRC_AARCH64_NONE_GCC ?= http://releases.linaro.org/14.07/components/toolchain/ toolchains: mkdir -p $(AARCH32_PATH) - curl $(SRC_AARCH32_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz + curl -L $(SRC_AARCH32_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz tar xf $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz -C $(AARCH32_PATH) --strip-components=1 mkdir -p $(AARCH64_PATH) - curl $(SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz + curl -L $(SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz tar xf $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz -C $(AARCH64_PATH) --strip-components=1 mkdir -p $(AARCH64_NONE_PATH) - curl $(SRC_AARCH64_NONE_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_NONE_GCC_VERSION).tar.xz + curl -L $(SRC_AARCH64_NONE_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_NONE_GCC_VERSION).tar.xz tar xf $(TOOLCHAIN_ROOT)/$(AARCH64_NONE_GCC_VERSION).tar.xz -C $(AARCH64_NONE_PATH) --strip-components=1 -- GitLab