xref: /optee_os/core/include/drivers/stm32_rtc.h (revision d60c61e12fe6dd71e6101b78cf982d392e00e907)
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 Chevallier static 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 Chevallier static 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 Chevallier stm32_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 Chevallier static 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