From 27edfc78b588e742a425ac92da9f8ac5647b7f97 Mon Sep 17 00:00:00 2001
From: Igor Opaniuk <igor.opaniuk@linaro.org>
Date: Tue, 25 Oct 2016 18:33:54 +0300
Subject: [PATCH] OP-TEE Benchmark

Enable Benchmark feature

Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Igor Opaniuk <igor.opaniuk@linaro.org>
---
 common.mk               | 43 ++++++++++++++++++++++++++++++++++-------
 kconfigs/tee_bench.conf |  1 +
 qemu.mk                 | 11 +++++++++--
 3 files changed, 46 insertions(+), 9 deletions(-)
 create mode 100644 kconfigs/tee_bench.conf

diff --git a/common.mk b/common.mk
index 8d08228..062b6b9 100644
--- a/common.mk
+++ b/common.mk
@@ -15,12 +15,16 @@ OPTEE_OS_PATH			?= $(ROOT)/optee_os
 OPTEE_CLIENT_PATH		?= $(ROOT)/optee_client
 OPTEE_CLIENT_EXPORT		?= $(OPTEE_CLIENT_PATH)/out/export
 OPTEE_TEST_PATH			?= $(ROOT)/optee_test
-OPTEE_TEST_OUT_PATH 		?= $(ROOT)/optee_test/out
+OPTEE_TEST_OUT_PATH		?= $(ROOT)/optee_test/out
 HELLOWORLD_PATH			?= $(ROOT)/hello_world
+BENCHMARK_APP_PATH		?= $(ROOT)/optee_benchmark
 
 # default high verbosity. slow uarts shall specify lower if prefered
 CFG_TEE_CORE_LOG_LEVEL		?= 3
 
+# default disable latency benchmarks (over all OP-TEE layers)
+CFG_TEE_BENCHMARK			?= n
+
 CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
 
 # Accessing a shared folder on the host from QEMU:
@@ -145,6 +149,10 @@ busybox-cleaner-common:
 ################################################################################
 # Linux
 ################################################################################
+ifeq ($(CFG_TEE_BENCHMARK),y)
+LINUX_DEFCONFIG_BENCH ?= $(CURDIR)/kconfigs/tee_bench.conf
+endif
+
 LINUX_COMMON_FLAGS ?= LOCALVERSION= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL)
 
 linux-common: linux-defconfig
@@ -153,7 +161,8 @@ linux-common: linux-defconfig
 $(LINUX_PATH)/.config: $(LINUX_DEFCONFIG_COMMON_FILES)
 	cd $(LINUX_PATH) && \
 		ARCH=$(LINUX_DEFCONFIG_COMMON_ARCH) \
-		scripts/kconfig/merge_config.sh $(LINUX_DEFCONFIG_COMMON_FILES)
+		scripts/kconfig/merge_config.sh $(LINUX_DEFCONFIG_COMMON_FILES) \
+			$(LINUX_DEFCONFIG_BENCH)
 
 linux-defconfig-clean-common:
 	rm -f $(LINUX_PATH)/.config
@@ -250,17 +259,19 @@ OPTEE_OS_COMMON_FLAGS ?= \
 	CROSS_COMPILE_ta_arm64=$(AARCH64_CROSS_COMPILE) \
 	CROSS_COMPILE_ta_arm32=$(AARCH32_CROSS_COMPILE) \
 	CFG_TEE_CORE_LOG_LEVEL=$(CFG_TEE_CORE_LOG_LEVEL) \
-	DEBUG=$(DEBUG)
+	DEBUG=$(DEBUG) \
+	CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK)
 
 optee-os-common:
 	$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_COMMON_FLAGS)
 
 OPTEE_OS_CLEAN_COMMON_FLAGS ?= $(OPTEE_OS_COMMON_EXTRA_FLAGS)
 
-optee-os-clean-common: xtest-clean helloworld-clean
+optee-os-clean-common: xtest-clean helloworld-clean benchmark-app-clean-common
 	$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_CLEAN_COMMON_FLAGS) clean
 
-OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)
+OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
+	CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK) \
 
 optee-client-common:
 	$(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_COMMON_FLAGS)
@@ -280,7 +291,8 @@ XTEST_COMMON_FLAGS ?= CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER)\
 	TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
 	OPTEE_CLIENT_EXPORT=$(OPTEE_CLIENT_EXPORT) \
 	COMPILE_NS_USER=$(COMPILE_NS_USER) \
-	O=$(OPTEE_TEST_OUT_PATH)
+	O=$(OPTEE_TEST_OUT_PATH) \
+	CFG_TEE_BENCHMARK=$(CFG_TEE_BENCHMARK)
 
 xtest-common: optee-os optee-client
 	$(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_COMMON_FLAGS)
@@ -312,6 +324,19 @@ HELLOWORLD_CLEAN_COMMON_FLAGS ?= TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR)
 helloworld-clean-common:
 	$(MAKE) -C $(HELLOWORLD_PATH) $(HELLOWORLD_CLEAN_COMMON_FLAGS) clean
 
+################################################################################
+# benchmark_app
+################################################################################
+BENCHMARK_APP_COMMON_FLAGS ?= HOST_CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
+	TEEC_EXPORT=$(OPTEE_CLIENT_EXPORT) \
+	TEEC_INTERNAL_INCLUDES=$(OPTEE_CLIENT_PATH)/libteec
+
+benchmark-app-common: optee-os optee-client
+	$(MAKE) -C $(BENCHMARK_APP_PATH) $(BENCHMARK_APP_COMMON_FLAGS)
+
+benchmark-app-clean-common:
+	$(MAKE) -C $(BENCHMARK_APP_PATH) clean
+
 ################################################################################
 # rootfs
 ################################################################################
@@ -329,7 +354,7 @@ update_rootfs-clean-common:
 	rm -f $(GEN_ROOTFS_FILELIST)
 
 filelist-tee-common: fl:=$(GEN_ROOTFS_FILELIST)
-filelist-tee-common: optee-client xtest helloworld
+filelist-tee-common: optee-client xtest helloworld benchmark-app
 	@echo "# filelist-tee-common /start" 				> $(fl)
 	@echo "dir /lib/optee_armtz 755 0 0" 				>> $(fl)
 	@echo "# xtest / optee_test" 					>> $(fl)
@@ -345,6 +370,10 @@ filelist-tee-common: optee-client xtest helloworld
 			"$(HELLOWORLD_PATH)/ta/8aaaf200-2450-11e4-abe2-0002a5d5c51b.ta" \
 			"444 0 0" 					>> $(fl); \
 	fi
+	@if [ -e $(BENCHMARK_APP_PATH)/benchmark ]; then \
+		echo "file /bin/benchmark" \
+			"$(BENCHMARK_APP_PATH)/benchmark 755 0 0"	>> $(fl); \
+	fi
 	@if [ "$(QEMU_USERNET_ENABLE)" = "y" ]; then \
 		echo "slink /etc/rc.d/S02_udhcp_networking /etc/init.d/udhcpc 755 0 0" \
 		>> $(fl); \
diff --git a/kconfigs/tee_bench.conf b/kconfigs/tee_bench.conf
new file mode 100644
index 0000000..cf6cba9
--- /dev/null
+++ b/kconfigs/tee_bench.conf
@@ -0,0 +1 @@
+CONFIG_OPTEE_BENCHMARK=y
diff --git a/qemu.mk b/qemu.mk
index 4995161..ad80872 100644
--- a/qemu.mk
+++ b/qemu.mk
@@ -23,9 +23,9 @@ DEBUG = 1
 ################################################################################
 # Targets
 ################################################################################
-all: bios-qemu qemu soc-term
+all: bios-qemu qemu soc-term benchmark-app
 clean: bios-qemu-clean busybox-clean linux-clean optee-os-clean \
-	optee-client-clean qemu-clean soc-term-clean check-clean
+	optee-client-clean qemu-clean soc-term-clean check-clean benchmark-app-clean
 
 -include toolchain.mk
 
@@ -130,6 +130,13 @@ helloworld: helloworld-common
 
 helloworld-clean: helloworld-clean-common
 
+################################################################################
+# benchmark
+################################################################################
+benchmark-app: benchmark-app-common
+
+benchmark-app-clean: benchmark-app-clean-common
+
 ################################################################################
 # Root FS
 ################################################################################
-- 
GitLab