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 WiklanderTEE_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 Wiklanderuint32_t tee_time_get_sys_time_protection_level(void) 34*1cf7e98dSJens Wiklander { 35*1cf7e98dSJens Wiklander return 100; 36*1cf7e98dSJens Wiklander } 37