Lines Matching +full:fail +full:- +full:fast

1 // SPDX-License-Identifier: BSD-2-Clause
3 * Copyright (C) 2018-2025, STMicroelectronics
190 * struct rtc_device - RTC device data
205 * @rtc: information for OP-TEE RTC device
261 return prediv_s - ssr; in stm32_rtc_get_subsecond()
307 if (rtc_dev.conf_data->access_mask[0] & BIT(i)) { in apply_rif_config()
316 if (!(BIT(i) & rtc_dev.conf_data->access_mask[0])) in apply_rif_config()
320 * When TDCID, OP-TEE should be the one to set the CID filtering in apply_rif_config()
330 seccfgr = rtc_dev.conf_data->sec_conf[0]; in apply_rif_config()
349 privcfgr = rtc_dev.conf_data->priv_conf[0]; in apply_rif_config()
371 if (!(BIT(i) & rtc_dev.conf_data->access_mask[0])) in apply_rif_config()
380 rtc_dev.conf_data->cid_confs[i]); in apply_rif_config()
400 * Notify the caller of 'stm32_rtc_wait_alarm' to re-schedule in stm32_rtc_it_handler()
432 if (rtc_dev.compat->has_rif_support) in parse_dt()
443 rtc_dev.conf_data->cid_confs = calloc(RTC_NB_RIF_RESOURCES, in parse_dt()
445 rtc_dev.conf_data->sec_conf = calloc(1, sizeof(uint32_t)); in parse_dt()
446 rtc_dev.conf_data->priv_conf = calloc(1, sizeof(uint32_t)); in parse_dt()
447 rtc_dev.conf_data->access_mask = calloc(1, sizeof(uint32_t)); in parse_dt()
448 if (!rtc_dev.conf_data->cid_confs || in parse_dt()
449 !rtc_dev.conf_data->sec_conf || in parse_dt()
450 !rtc_dev.conf_data->priv_conf || in parse_dt()
451 !rtc_dev.conf_data->access_mask) in parse_dt()
459 if (rtc_dev.conf_data->sec_conf[0] == RTC_RIF_FULL_SECURED) in parse_dt()
463 cuint = fdt_getprop(fdt, node, "wakeup-source", NULL); in parse_dt()
465 * if the wakeup-source property is not present in the DT in parse_dt()
482 rtc_dev.itr_chip->name); in parse_dt()
486 rtc_dev.rtc->is_wakeup_source = true; in parse_dt()
493 free(rtc_dev.conf_data->cid_confs); in parse_dt()
494 free(rtc_dev.conf_data->sec_conf); in parse_dt()
495 free(rtc_dev.conf_data->priv_conf); in parse_dt()
496 free(rtc_dev.conf_data->access_mask); in parse_dt()
543 tm->tm_hour = ((tr & RTC_TR_HT_MASK) >> RTC_TR_HT_SHIFT) * 10 + in stm32_rtc_to_tm()
547 tm->tm_hour += 12; in stm32_rtc_to_tm()
549 tm->tm_ms = (stm32_rtc_get_subsecond(ssr) * MS_PER_SEC) / in stm32_rtc_to_tm()
552 tm->tm_sec = ((tr & RTC_TR_ST_MASK) >> RTC_TR_ST_SHIFT) * 10 + in stm32_rtc_to_tm()
555 tm->tm_min = ((tr & RTC_TR_MNT_MASK) >> RTC_TR_MNT_SHIFT) * 10 + in stm32_rtc_to_tm()
558 tm->tm_wday = ((dr & RTC_DR_WDU_MASK) >> RTC_DR_WDU_SHIFT) % 7; in stm32_rtc_to_tm()
560 tm->tm_mday = ((dr & RTC_DR_DT_MASK) >> RTC_DR_DT_SHIFT) * 10 + in stm32_rtc_to_tm()
563 tm->tm_mon = ((dr & RTC_DR_MT_MASK) >> RTC_DR_MT_SHIFT) * 10 + in stm32_rtc_to_tm()
564 ((dr & RTC_DR_MU_MASK) >> RTC_DR_MU_SHIFT) - 1; in stm32_rtc_to_tm()
566 tm->tm_year = ((dr & RTC_DR_YT_MASK) >> RTC_DR_YT_SHIFT) * 10 + in stm32_rtc_to_tm()
595 pred_s = (rate / (pred_a + 1)) - 1; in stm32_rtc_init()
608 pred_s = (rate / (pred_a + 1)) - 1; in stm32_rtc_init()
612 "fast" : "slow"); in stm32_rtc_init()
630 EMSG("Can't enter init mode. Fail to initialize RTC."); in stm32_rtc_init()
646 EMSG("Can't exit init mode. Fail to initialize RTC."); in stm32_rtc_init()
675 * - year at 0 in stm32_rtc_get_time()
676 * - month at 1 in stm32_rtc_get_time()
677 * - day at 1 in stm32_rtc_get_time()
678 * - weekday at Monday = 1 in stm32_rtc_get_time()
701 * - year at 0 in stm32_rtc_set_time()
702 * - month at 1 in stm32_rtc_set_time()
703 * - day at 1 in stm32_rtc_set_time()
704 * - weekday at Monday = 1 in stm32_rtc_set_time()
708 tr = ((tm->tm_sec % 10) & RTC_TR_SU_MASK) | in stm32_rtc_set_time()
709 (SHIFT_U32(tm->tm_sec / 10, RTC_TR_ST_SHIFT) & RTC_TR_ST_MASK) | in stm32_rtc_set_time()
710 (SHIFT_U32(tm->tm_min % 10, RTC_TR_MNU_SHIFT) & RTC_TR_MNU_MASK) | in stm32_rtc_set_time()
711 (SHIFT_U32(tm->tm_min / 10, RTC_TR_MNT_SHIFT) & RTC_TR_MNT_MASK) | in stm32_rtc_set_time()
712 (SHIFT_U32(tm->tm_hour % 10, RTC_TR_HU_SHIFT) & RTC_TR_HU_MASK) | in stm32_rtc_set_time()
713 (SHIFT_U32(tm->tm_hour / 10, RTC_TR_HT_SHIFT) & RTC_TR_HT_MASK); in stm32_rtc_set_time()
715 dr = ((tm->tm_mday % 10) & RTC_DR_DU_MASK) | in stm32_rtc_set_time()
716 (SHIFT_U32(tm->tm_mday / 10, RTC_DR_DT_SHIFT) & RTC_DR_DT_MASK) | in stm32_rtc_set_time()
717 (SHIFT_U32((tm->tm_mon + 1) % 10, RTC_DR_MU_SHIFT) & in stm32_rtc_set_time()
719 (SHIFT_U32((tm->tm_mon + 1) / 10, RTC_DR_MT_SHIFT) & in stm32_rtc_set_time()
721 (SHIFT_U32(tm->tm_wday ? tm->tm_wday : 7, RTC_DR_WDU_SHIFT) & in stm32_rtc_set_time()
723 (SHIFT_U32((tm->tm_year - rtc->range_min.tm_year) % 10, in stm32_rtc_set_time()
725 (SHIFT_U32((tm->tm_year - rtc->range_min.tm_year) / 10, in stm32_rtc_set_time()
779 tm->tm_year = 0; in stm32_rtc_get_timestamp()
791 if (!rtc_dev.compat->has_seccfgr) { in stm32_rtc_set_tamper_timestamp()
832 alarm_tm = &alarm->time; in stm32_rtc_read_alarm()
838 alarm_tm->tm_year = current_tm.tm_year; in stm32_rtc_read_alarm()
839 alarm_tm->tm_mon = current_tm.tm_mon; in stm32_rtc_read_alarm()
840 alarm_tm->tm_mday = ((alrmar & RTC_ALRMXR_DATE_UNITS_MASK) >> in stm32_rtc_read_alarm()
844 alarm_tm->tm_hour = ((alrmar & RTC_ALRMXR_HOUR_UNITS_MASK) >> in stm32_rtc_read_alarm()
848 alarm_tm->tm_min = ((alrmar & RTC_ALRMXR_MIN_UNITS_MASK) >> in stm32_rtc_read_alarm()
852 alarm_tm->tm_sec = ((alrmar & RTC_ALRMXR_MIN_UNITS_MASK) >> in stm32_rtc_read_alarm()
859 alarm_tm->tm_mon = 0; in stm32_rtc_read_alarm()
860 alarm_tm->tm_year += 1; in stm32_rtc_read_alarm()
862 alarm_tm->tm_mon += 1; in stm32_rtc_read_alarm()
866 alarm->enabled = cr & RTC_CR_ALRAE; in stm32_rtc_read_alarm()
867 alarm->pending = status & RTC_SR_ALRAF; in stm32_rtc_read_alarm()
892 tm->tm_mon++; in stm32_rtc_add_one_month()
893 if (tm->tm_mon > 11) { in stm32_rtc_add_one_month()
894 tm->tm_mon = 0; in stm32_rtc_add_one_month()
895 tm->tm_year++; in stm32_rtc_add_one_month()
899 tm->tm_mday = MIN(tm->tm_mday, in stm32_rtc_add_one_month()
900 rtc_get_month_days(tm->tm_mon, tm->tm_year)); in stm32_rtc_add_one_month()
911 * Assuming current date is M-D-Y H:M:S. in stm32_rtc_valid_alarm_time()
914 * M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S in stm32_rtc_valid_alarm_time()
938 struct optee_rtc_time *alarm_time = &alarm->time; in stm32_rtc_set_alarm()
947 alrmar |= ((alarm_time->tm_mday / 10) << RTC_ALRMXR_DATE_TENS_SHIFT) & in stm32_rtc_set_alarm()
949 alrmar |= ((alarm_time->tm_mday % 10) << RTC_ALRMXR_DATE_UNITS_SHIFT) & in stm32_rtc_set_alarm()
951 /* 24-hour format */ in stm32_rtc_set_alarm()
953 alrmar |= ((alarm_time->tm_hour / 10) << RTC_ALRMXR_HOUR_TENS_SHIFT) & in stm32_rtc_set_alarm()
955 alrmar |= ((alarm_time->tm_hour % 10) << RTC_ALRMXR_HOUR_UNITS_SHIFT) & in stm32_rtc_set_alarm()
957 alrmar |= ((alarm_time->tm_min / 10) << RTC_ALRMXR_MIN_TENS_SHIFT) & in stm32_rtc_set_alarm()
959 alrmar |= ((alarm_time->tm_min % 10) << RTC_ALRMXR_MIN_UNITS_SHIFT) & in stm32_rtc_set_alarm()
961 alrmar |= ((alarm_time->tm_sec / 10) << RTC_ALRMXR_SEC_TENS_SHIFT) & in stm32_rtc_set_alarm()
963 alrmar |= ((alarm_time->tm_sec % 10) << RTC_ALRMXR_SEC_UNITS_SHIFT) & in stm32_rtc_set_alarm()
985 stm32_rtc_enable_alarm(rtc, alarm->enabled); in stm32_rtc_set_alarm()
1008 /* Wait until a notification arrives - blocking */ in stm32_rtc_wait_alarm()
1027 if (!rtc_dev.rtc->is_wakeup_source) in stm32_rtc_set_alarm_wakeup_status()
1061 if (rtc_dev.compat->has_rif_support) { in stm32_rtc_probe()
1081 if (rtc_dev.compat->has_rif_support) { in stm32_rtc_probe()
1154 .compatible = "st,stm32mp25-rtc",
1158 .compatible = "st,stm32mp1-rtc",
1162 .compatible = "st,stm32mp13-rtc",
1169 .name = "stm32-rtc",