aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Kung <kong1191@gmail.com>2015-01-13 19:36:23 +0800
committerJames Kung <kong1191@gmail.com>2015-01-13 19:36:23 +0800
commita1ba11e0da1df5eaaad2b2931cf39ae4360c11a3 (patch)
tree39e49b9dfe8cdb94820928da0e8a88451b2ebb10
parentd1ec6d84799b4aaa7eeca605d67a1cc1b22a507e (diff)
Caculate time interval in normal world application
-rw-r--r--host/simple_client.c28
-rw-r--r--ta/simple_ta.c23
2 files changed, 25 insertions, 26 deletions
diff --git a/host/simple_client.c b/host/simple_client.c
index 05f39ec..2ab715a 100644
--- a/host/simple_client.c
+++ b/host/simple_client.c
@@ -153,23 +153,26 @@ TEEC_Result measure_time_of_secure_sys_call(TEEC_Session *sess)
TEEC_Operation op;
TEEC_Result res;
uint32_t err_origin;
- uint64_t sys_call_one_way_clock_count = 0;
- uint64_t sys_call_round_trip_clock_count = 0;
+ uint64_t start_svc_clock_count = 0;
+ uint64_t enter_svc_clock_count = 0;
+ uint64_t return_svc_clock_count = 0;
memset(&op, 0, sizeof(op));
op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
TEEC_MEMREF_TEMP_OUTPUT,
- TEEC_NONE,
+ TEEC_MEMREF_TEMP_OUTPUT,
TEEC_NONE);
- op.params[0].tmpref.buffer = (void *)&sys_call_one_way_clock_count;
- op.params[0].tmpref.size = sizeof(sys_call_one_way_clock_count);
+ op.params[0].tmpref.buffer = (void *)&start_svc_clock_count;
+ op.params[0].tmpref.size = sizeof(start_svc_clock_count);
- op.params[1].tmpref.buffer = (void *)&sys_call_round_trip_clock_count;
- op.params[1].tmpref.size = sizeof(sys_call_round_trip_clock_count);
+ op.params[1].tmpref.buffer = (void *)&enter_svc_clock_count;
+ op.params[1].tmpref.size = sizeof(enter_svc_clock_count);
+ op.params[2].tmpref.buffer = (void *)&return_svc_clock_count;
+ op.params[2].tmpref.size = sizeof(return_svc_clock_count);
res = TEEC_InvokeCommand(sess, TAF_MEASURE_SYS_CALL_TIME, &op, &err_origin);
@@ -179,13 +182,16 @@ TEEC_Result measure_time_of_secure_sys_call(TEEC_Session *sess)
} else {
uint32_t freq = arm_sys_counter_get_frequency();
- uint64_t one_way_time = convert_to_time_in_us(freq, sys_call_one_way_clock_count);
- uint64_t round_trip_time = convert_to_time_in_us(freq, sys_call_round_trip_clock_count);
+ uint64_t one_way_clock_count = enter_svc_clock_count - start_svc_clock_count;
+ uint64_t round_trip_clock_count = return_svc_clock_count - start_svc_clock_count;
+ uint64_t one_way_time = convert_to_time_in_us(freq, enter_svc_clock_count - start_svc_clock_count);
+ uint64_t round_trip_time = convert_to_time_in_us(freq, return_svc_clock_count - start_svc_clock_count);
printf("Performance Measurement: [Secure system call]\n");
printf("\tSystem counter frequency = %d\n", freq);
- printf("\tOne way trip clock count = %" PRId64 " time = %" PRId64 " us\n", sys_call_one_way_clock_count, one_way_time);
- printf("\tRound trip clock count = %" PRId64 " time = %" PRId64 " us\n", sys_call_round_trip_clock_count, round_trip_time);
+ printf("\tCounter: start=%" PRId64 " ta=%" PRId64 " end=%" PRId64 "\n", start_svc_clock_count, enter_svc_clock_count, return_svc_clock_count);
+ printf("\tOne way trip clock count = %" PRId64 " time = %" PRId64 " us\n", one_way_clock_count, one_way_time);
+ printf("\tRound trip clock count = %" PRId64 " time = %" PRId64 " us\n", round_trip_clock_count, round_trip_time);
}
return res;
diff --git a/ta/simple_ta.c b/ta/simple_ta.c
index 8f260fe..fea8ad7 100644
--- a/ta/simple_ta.c
+++ b/ta/simple_ta.c
@@ -30,6 +30,7 @@
#include <utee_defines.h>
#include <assert.h>
#include <stdint.h>
+#include <inttypes.h>
#include <mpa.h>
#include <tee_internal_api.h>
@@ -82,7 +83,6 @@ TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types,
/* Return system counter value to Host app */
memcpy(params[0].memref.buffer, &ta_counter_value, sizeof(ta_counter_value));
- DMSG("counter ta=%lld", ta_counter_value);
/*
* The DMSG() macro is non-standard, TEE Internal API doesn't
* specify any means to logging from a TA.
@@ -117,8 +117,6 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id,
uint64_t sys_call_start_counter_value = 0;
uint64_t sys_call_received_counter_value = 0;
uint64_t sys_call_return_counter_value = 0;
- uint64_t one_way_trip_counter_value = 0;
- uint64_t round_trip_counter_value = 0;
uint32_t exp_param_types = 0;
DMSG("Enter Invoke Command Entry Point");
@@ -137,7 +135,7 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id,
case TAF_MEASURE_SYS_CALL_TIME:
exp_param_types = TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_OUTPUT,
TEE_PARAM_TYPE_MEMREF_OUTPUT,
- TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_MEMREF_OUTPUT,
TEE_PARAM_TYPE_NONE);
if (param_types != exp_param_types) {
@@ -151,19 +149,14 @@ TEE_Result TA_InvokeCommandEntryPoint(void *sess_ctx, uint32_t cmd_id,
sys_call_return_counter_value = arm_sys_counter_get_counter();
- one_way_trip_counter_value = sys_call_received_counter_value - sys_call_start_counter_value;
- params[0].memref.size = sizeof(one_way_trip_counter_value);
- memcpy(params[0].memref.buffer, &one_way_trip_counter_value, params[0].memref.size);
+ params[0].memref.size = sizeof(sys_call_start_counter_value);
+ memcpy(params[0].memref.buffer, &sys_call_start_counter_value, params[0].memref.size);
- round_trip_counter_value = sys_call_return_counter_value - sys_call_start_counter_value;
- params[1].memref.size = sizeof(round_trip_counter_value);
- memcpy(params[1].memref.buffer, &round_trip_counter_value, params[1].memref.size);
+ params[1].memref.size = sizeof(sys_call_received_counter_value);
+ memcpy(params[1].memref.buffer, &sys_call_received_counter_value, params[1].memref.size);
- DMSG("System Call Performance Measurement:");
- DMSG("\tCounter: start=%lld received=%lld end=%lld",
- sys_call_start_counter_value, sys_call_received_counter_value, sys_call_return_counter_value);
- DMSG("\tone_way_trip_counter_value=%lld", one_way_trip_counter_value);
- DMSG("\tround_trip_counter_value=%lld", round_trip_counter_value);
+ params[1].memref.size = sizeof(sys_call_return_counter_value);
+ memcpy(params[2].memref.buffer, &sys_call_return_counter_value, params[1].memref.size);
break;