1*d60c61e1SGatien Chevallier /* SPDX-License-Identifier: BSD-2-Clause */ 2*d60c61e1SGatien Chevallier /* 3*d60c61e1SGatien Chevallier * Copyright (c) 2018-2025, STMicroelectronics 4*d60c61e1SGatien Chevallier */ 5*d60c61e1SGatien Chevallier 6*d60c61e1SGatien Chevallier #ifndef __DRIVERS_STM32_RTC_H__ 7*d60c61e1SGatien Chevallier #define __DRIVERS_STM32_RTC_H__ 8*d60c61e1SGatien Chevallier 9*d60c61e1SGatien Chevallier #include <drivers/rtc.h> 10*d60c61e1SGatien Chevallier #include <stdbool.h> 11*d60c61e1SGatien Chevallier #include <tee_api_types.h> 12*d60c61e1SGatien Chevallier 13*d60c61e1SGatien Chevallier #if defined(CFG_STM32_RTC) 14*d60c61e1SGatien Chevallier /** 15*d60c61e1SGatien Chevallier * stm32_rtc_set_tamper_timestamp() - Enable tamper and secure timestamp access 16*d60c61e1SGatien Chevallier * in RTC 17*d60c61e1SGatien Chevallier */ 18*d60c61e1SGatien Chevallier TEE_Result stm32_rtc_set_tamper_timestamp(void); 19*d60c61e1SGatien Chevallier 20*d60c61e1SGatien Chevallier /** 21*d60c61e1SGatien Chevallier * stm32_rtc_is_timestamp_enabled() - Indicates if RTC timestamping is enabled 22*d60c61e1SGatien Chevallier * 23*d60c61e1SGatien Chevallier * @ret: [Out] True if and only if RTC timestamp is enabled 24*d60c61e1SGatien Chevallier */ 25*d60c61e1SGatien Chevallier TEE_Result stm32_rtc_is_timestamp_enabled(bool *ret); 26*d60c61e1SGatien Chevallier 27*d60c61e1SGatien Chevallier /** 28*d60c61e1SGatien Chevallier * stm32_rtc_get_timestamp() - Get RTC timestamp for current time. This function 29*d60c61e1SGatien Chevallier * can be called from an interruption context 30*d60c61e1SGatien Chevallier * 31*d60c61e1SGatien Chevallier * @tm: [Out] RTC timestamp value 32*d60c61e1SGatien Chevallier */ 33*d60c61e1SGatien Chevallier TEE_Result stm32_rtc_get_timestamp(struct optee_rtc_time *tm); 34*d60c61e1SGatien Chevallier 35*d60c61e1SGatien Chevallier /** 36*d60c61e1SGatien Chevallier * stm32_rtc_driver_is_initialized() - Indicates if RTC driver is initialized 37*d60c61e1SGatien Chevallier * 38*d60c61e1SGatien Chevallier * Returns TEE_ERROR_DEFER_DRIVER_INIT if it's not the case, TEE_SUCCESS 39*d60c61e1SGatien Chevallier * otherwise 40*d60c61e1SGatien Chevallier */ 41*d60c61e1SGatien Chevallier TEE_Result stm32_rtc_driver_is_initialized(void); 42*d60c61e1SGatien Chevallier #else /* CFG_STM32_RTC */ stm32_rtc_set_tamper_timestamp(void)43*d60c61e1SGatien Chevallierstatic inline TEE_Result stm32_rtc_set_tamper_timestamp(void) 44*d60c61e1SGatien Chevallier { 45*d60c61e1SGatien Chevallier return TEE_ERROR_NOT_IMPLEMENTED; 46*d60c61e1SGatien Chevallier } 47*d60c61e1SGatien Chevallier stm32_rtc_is_timestamp_enabled(bool * ret __unused)48*d60c61e1SGatien Chevallierstatic inline TEE_Result stm32_rtc_is_timestamp_enabled(bool *ret __unused) 49*d60c61e1SGatien Chevallier { 50*d60c61e1SGatien Chevallier return TEE_ERROR_NOT_IMPLEMENTED; 51*d60c61e1SGatien Chevallier } 52*d60c61e1SGatien Chevallier 53*d60c61e1SGatien Chevallier static inline TEE_Result stm32_rtc_get_timestamp(struct optee_rtc_time * tm __unused)54*d60c61e1SGatien Chevallierstm32_rtc_get_timestamp(struct optee_rtc_time *tm __unused) 55*d60c61e1SGatien Chevallier { 56*d60c61e1SGatien Chevallier return TEE_ERROR_NOT_IMPLEMENTED; 57*d60c61e1SGatien Chevallier } 58*d60c61e1SGatien Chevallier stm32_rtc_driver_is_initialized(void)59*d60c61e1SGatien Chevallierstatic inline TEE_Result stm32_rtc_driver_is_initialized(void) 60*d60c61e1SGatien Chevallier { 61*d60c61e1SGatien Chevallier return TEE_ERROR_NOT_IMPLEMENTED; 62*d60c61e1SGatien Chevallier } 63*d60c61e1SGatien Chevallier #endif /* CFG_STM32_RTC */ 64*d60c61e1SGatien Chevallier #endif /* __DRIVERS_STM32_RTC_H__ */ 65