xref: /optee_os/core/kernel/tee_time_ree.c (revision 1cf7e98d072c636fa35277ec149196490524e711)
114c0df4eSMarouene Boubakri // SPDX-License-Identifier: BSD-2-Clause
214c0df4eSMarouene Boubakri /*
314c0df4eSMarouene Boubakri  * Copyright (c) 2014, Linaro Limited
414c0df4eSMarouene Boubakri  */
514c0df4eSMarouene Boubakri 
614c0df4eSMarouene Boubakri #include <kernel/tee_time.h>
714c0df4eSMarouene Boubakri #include <kernel/mutex.h>
814c0df4eSMarouene Boubakri 
914c0df4eSMarouene Boubakri static TEE_Time prev;
1014c0df4eSMarouene Boubakri 
1114c0df4eSMarouene Boubakri static struct mutex time_mu = MUTEX_INITIALIZER;
1214c0df4eSMarouene Boubakri 
tee_time_get_sys_time(TEE_Time * time)13*1cf7e98dSJens Wiklander TEE_Result tee_time_get_sys_time(TEE_Time *time)
1414c0df4eSMarouene Boubakri {
1514c0df4eSMarouene Boubakri 	TEE_Result res;
1614c0df4eSMarouene Boubakri 
1714c0df4eSMarouene Boubakri 	res = tee_time_get_ree_time(time);
1814c0df4eSMarouene Boubakri 	if (res != TEE_SUCCESS)
1914c0df4eSMarouene Boubakri 		return res;
2014c0df4eSMarouene Boubakri 
2114c0df4eSMarouene Boubakri 	mutex_lock(&time_mu);
2214c0df4eSMarouene Boubakri 	if (time->seconds < prev.seconds ||
2314c0df4eSMarouene Boubakri 		(time->seconds == prev.seconds &&
2414c0df4eSMarouene Boubakri 		 time->millis < prev.millis))
2514c0df4eSMarouene Boubakri 		*time = prev; /* REE time was rolled back */
2614c0df4eSMarouene Boubakri 	else
2714c0df4eSMarouene Boubakri 		prev = *time;
2814c0df4eSMarouene Boubakri 	mutex_unlock(&time_mu);
2914c0df4eSMarouene Boubakri 
3014c0df4eSMarouene Boubakri 	return res;
3114c0df4eSMarouene Boubakri }
3214c0df4eSMarouene Boubakri 
tee_time_get_sys_time_protection_level(void)33*1cf7e98dSJens Wiklander uint32_t tee_time_get_sys_time_protection_level(void)
34*1cf7e98dSJens Wiklander {
35*1cf7e98dSJens Wiklander 	return 100;
36*1cf7e98dSJens Wiklander }
37