diff options
Diffstat (limited to 'core/arch/arm32/kernel')
-rw-r--r-- | core/arch/arm32/kernel/sub.mk | 8 | ||||
-rw-r--r-- | core/arch/arm32/kernel/tee_time.c | 13 | ||||
-rw-r--r-- | core/arch/arm32/kernel/tee_time_arm_generic_timer.c (renamed from core/arch/arm32/kernel/tee_time_arm_cntpct.c) | 12 |
3 files changed, 24 insertions, 9 deletions
diff --git a/core/arch/arm32/kernel/sub.mk b/core/arch/arm32/kernel/sub.mk index 7f3190e..07258fc 100644 --- a/core/arch/arm32/kernel/sub.mk +++ b/core/arch/arm32/kernel/sub.mk @@ -1,14 +1,14 @@ srcs-y += tee_ta_manager.c srcs-y += tee_time.c -srcs-$(WITH_SECURE_TIME_SOURCE_CNTPCT) += tee_time_arm_cntpct.c -srcs-$(WITH_SECURE_TIME_SOURCE_RTT) += tee_time_rtt.c -srcs-$(WITH_SECURE_TIME_SOURCE_REE) += tee_time_ree.c +srcs-$(CFG_SECURE_TIME_SOURCE_ARM_GENERIC_TIMER) += tee_time_arm_generic_timer.c +srcs-$(CFG_SECURE_TIME_SOURCE_RTT) += tee_time_rtt.c +srcs-$(CFG_SECURE_TIME_SOURCE_REE) += tee_time_ree.c srcs-y += tee_time_unpg.c srcs-y += tz_proc.S srcs-y += tz_ssvce.S -srcs-$(WITH_PL310) += tz_ssvce_pl310.S +srcs-$(CFG_WITH_PL310) += tz_ssvce_pl310.S srcs-y += tee_l2cc_mutex.c srcs-y += thread_asm.S diff --git a/core/arch/arm32/kernel/tee_time.c b/core/arch/arm32/kernel/tee_time.c index e343bda..1005736 100644 --- a/core/arch/arm32/kernel/tee_time.c +++ b/core/arch/arm32/kernel/tee_time.c @@ -34,6 +34,7 @@ #include <sm/teesmc.h> #include <kernel/tee_rpc.h> #include <mm/core_mmu.h> +#include <arm32.h> struct time_source _time_source; @@ -146,3 +147,15 @@ exit: tee_ta_set_current_session(sess); return res; } + +int tee_time_get_generic_timer_info(struct generic_timer_info *timer_info) +{ + if (timer_info == NULL) + return -1; + + timer_info->counter_frequency = read_cntfrq(); + timer_info->counter_value = read_cntvct(); + + return 0; +} + diff --git a/core/arch/arm32/kernel/tee_time_arm_cntpct.c b/core/arch/arm32/kernel/tee_time_arm_generic_timer.c index 4f6aef3..be9df40 100644 --- a/core/arch/arm32/kernel/tee_time_arm_cntpct.c +++ b/core/arch/arm32/kernel/tee_time_arm_generic_timer.c @@ -31,6 +31,7 @@ #include <kernel/time_source.h> #include <mm/core_mmu.h> #include <utee_defines.h> +#include <arm32.h> #include <assert.h> #include <stdint.h> @@ -40,13 +41,14 @@ static uint32_t do_div(uint64_t *dividend, uint32_t divisor) { mpa_word_t remainder = 0, n0, n1; + n0 = (*dividend) & UINT_MAX; n1 = ((*dividend) >> WORD_SIZE) & UINT_MAX; *dividend = __mpa_div_dword(n0, n1, divisor, &remainder); return remainder; } -static TEE_Result arm_cntpct_get_sys_time(TEE_Time *time) +static TEE_Result arm_generic_timer_get_sys_time(TEE_Time *time) { uint64_t cntpct = read_cntpct(); uint32_t cntfrq = read_cntfrq(); @@ -60,9 +62,9 @@ static TEE_Result arm_cntpct_get_sys_time(TEE_Time *time) return TEE_SUCCESS; } -static const struct time_source arm_cntpct_time_source = { - .name = "arm cntpct", - .get_sys_time = arm_cntpct_get_sys_time, +static const struct time_source arm_generic_timer_time_source = { + .name = "arm generic timer", + .get_sys_time = arm_generic_timer_get_sys_time, }; -REGISTER_TIME_SOURCE(arm_cntpct_time_source) +REGISTER_TIME_SOURCE(arm_generic_timer_time_source) |