1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) STMicroelectronics 2017
8 #include <linux/bitfield.h>
10 #include <linux/errno.h>
11 #include <linux/iopoll.h>
12 #include <linux/ioport.h>
13 #include <linux/mfd/syscon.h>
14 #include <linux/module.h>
16 #include <linux/platform_device.h>
17 #include <linux/pm_wakeirq.h>
18 #include <linux/regmap.h>
19 #include <linux/rtc.h>
21 #define DRIVER_NAME "stm32_rtc"
23 /* STM32_RTC_TR bit fields */
24 #define STM32_RTC_TR_SEC_SHIFT 0
25 #define STM32_RTC_TR_SEC GENMASK(6, 0)
26 #define STM32_RTC_TR_MIN_SHIFT 8
27 #define STM32_RTC_TR_MIN GENMASK(14, 8)
28 #define STM32_RTC_TR_HOUR_SHIFT 16
29 #define STM32_RTC_TR_HOUR GENMASK(21, 16)
31 /* STM32_RTC_DR bit fields */
32 #define STM32_RTC_DR_DATE_SHIFT 0
33 #define STM32_RTC_DR_DATE GENMASK(5, 0)
34 #define STM32_RTC_DR_MONTH_SHIFT 8
35 #define STM32_RTC_DR_MONTH GENMASK(12, 8)
36 #define STM32_RTC_DR_WDAY_SHIFT 13
37 #define STM32_RTC_DR_WDAY GENMASK(15, 13)
38 #define STM32_RTC_DR_YEAR_SHIFT 16
39 #define STM32_RTC_DR_YEAR GENMASK(23, 16)
41 /* STM32_RTC_CR bit fields */
42 #define STM32_RTC_CR_FMT BIT(6)
43 #define STM32_RTC_CR_ALRAE BIT(8)
44 #define STM32_RTC_CR_ALRAIE BIT(12)
46 /* STM32_RTC_ISR/STM32_RTC_ICSR bit fields */
47 #define STM32_RTC_ISR_ALRAWF BIT(0)
48 #define STM32_RTC_ISR_INITS BIT(4)
49 #define STM32_RTC_ISR_RSF BIT(5)
50 #define STM32_RTC_ISR_INITF BIT(6)
51 #define STM32_RTC_ISR_INIT BIT(7)
52 #define STM32_RTC_ISR_ALRAF BIT(8)
54 /* STM32_RTC_PRER bit fields */
55 #define STM32_RTC_PRER_PRED_S_SHIFT 0
56 #define STM32_RTC_PRER_PRED_S GENMASK(14, 0)
57 #define STM32_RTC_PRER_PRED_A_SHIFT 16
58 #define STM32_RTC_PRER_PRED_A GENMASK(22, 16)
60 /* STM32_RTC_ALRMAR and STM32_RTC_ALRMBR bit fields */
61 #define STM32_RTC_ALRMXR_SEC_SHIFT 0
62 #define STM32_RTC_ALRMXR_SEC GENMASK(6, 0)
63 #define STM32_RTC_ALRMXR_SEC_MASK BIT(7)
64 #define STM32_RTC_ALRMXR_MIN_SHIFT 8
65 #define STM32_RTC_ALRMXR_MIN GENMASK(14, 8)
66 #define STM32_RTC_ALRMXR_MIN_MASK BIT(15)
67 #define STM32_RTC_ALRMXR_HOUR_SHIFT 16
68 #define STM32_RTC_ALRMXR_HOUR GENMASK(21, 16)
69 #define STM32_RTC_ALRMXR_PM BIT(22)
70 #define STM32_RTC_ALRMXR_HOUR_MASK BIT(23)
71 #define STM32_RTC_ALRMXR_DATE_SHIFT 24
72 #define STM32_RTC_ALRMXR_DATE GENMASK(29, 24)
73 #define STM32_RTC_ALRMXR_WDSEL BIT(30)
74 #define STM32_RTC_ALRMXR_WDAY_SHIFT 24
75 #define STM32_RTC_ALRMXR_WDAY GENMASK(27, 24)
76 #define STM32_RTC_ALRMXR_DATE_MASK BIT(31)
78 /* STM32_RTC_SR/_SCR bit fields */
79 #define STM32_RTC_SR_ALRA BIT(0)
81 /* STM32_RTC_VERR bit fields */
82 #define STM32_RTC_VERR_MINREV_SHIFT 0
83 #define STM32_RTC_VERR_MINREV GENMASK(3, 0)
84 #define STM32_RTC_VERR_MAJREV_SHIFT 4
85 #define STM32_RTC_VERR_MAJREV GENMASK(7, 4)
87 /* STM32_RTC_SECCFGR bit fields */
88 #define STM32_RTC_SECCFGR 0x20
89 #define STM32_RTC_SECCFGR_ALRA_SEC BIT(0)
90 #define STM32_RTC_SECCFGR_INIT_SEC BIT(14)
91 #define STM32_RTC_SECCFGR_SEC BIT(15)
93 /* STM32_RTC_RXCIDCFGR bit fields */
94 #define STM32_RTC_RXCIDCFGR(x) (0x80 + 0x4 * (x))
95 #define STM32_RTC_RXCIDCFGR_CFEN BIT(0)
96 #define STM32_RTC_RXCIDCFGR_CID GENMASK(6, 4)
97 #define STM32_RTC_RXCIDCFGR_CID1 1
99 /* STM32_RTC_WPR key constants */
100 #define RTC_WPR_1ST_KEY 0xCA
101 #define RTC_WPR_2ND_KEY 0x53
102 #define RTC_WPR_WRONG_KEY 0xFF
104 /* Max STM32 RTC register offset is 0x3FC */
105 #define UNDEF_REG 0xFFFF
107 /* STM32 RTC driver time helpers */
108 #define SEC_PER_DAY (24 * 60 * 60)
112 struct stm32_rtc_registers {
125 struct stm32_rtc_events {
129 struct stm32_rtc_data {
130 const struct stm32_rtc_registers regs;
131 const struct stm32_rtc_events events;
132 void (*clear_events)(struct stm32_rtc *rtc, unsigned int flags);
140 struct rtc_device *rtc_dev;
143 unsigned int dbp_reg;
144 unsigned int dbp_mask;
147 const struct stm32_rtc_data *data;
151 struct stm32_rtc_rif_resource {
156 static const struct stm32_rtc_rif_resource STM32_RTC_RES_ALRA = {0, STM32_RTC_SECCFGR_ALRA_SEC};
157 static const struct stm32_rtc_rif_resource STM32_RTC_RES_INIT = {5, STM32_RTC_SECCFGR_INIT_SEC};
159 static void stm32_rtc_wpr_unlock(struct stm32_rtc *rtc)
161 const struct stm32_rtc_registers *regs = &rtc->data->regs;
163 writel_relaxed(RTC_WPR_1ST_KEY, rtc->base + regs->wpr);
164 writel_relaxed(RTC_WPR_2ND_KEY, rtc->base + regs->wpr);
167 static void stm32_rtc_wpr_lock(struct stm32_rtc *rtc)
169 const struct stm32_rtc_registers *regs = &rtc->data->regs;
171 writel_relaxed(RTC_WPR_WRONG_KEY, rtc->base + regs->wpr);
174 static int stm32_rtc_enter_init_mode(struct stm32_rtc *rtc)
176 const struct stm32_rtc_registers *regs = &rtc->data->regs;
177 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
179 if (!(isr & STM32_RTC_ISR_INITF)) {
180 isr |= STM32_RTC_ISR_INIT;
181 writel_relaxed(isr, rtc->base + regs->isr);
184 * It takes around 2 rtc_ck clock cycles to enter in
185 * initialization phase mode (and have INITF flag set). As
186 * slowest rtc_ck frequency may be 32kHz and highest should be
187 * 1MHz, we poll every 10 us with a timeout of 100ms.
189 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr, isr,
190 (isr & STM32_RTC_ISR_INITF),
197 static void stm32_rtc_exit_init_mode(struct stm32_rtc *rtc)
199 const struct stm32_rtc_registers *regs = &rtc->data->regs;
200 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
202 isr &= ~STM32_RTC_ISR_INIT;
203 writel_relaxed(isr, rtc->base + regs->isr);
206 static int stm32_rtc_wait_sync(struct stm32_rtc *rtc)
208 const struct stm32_rtc_registers *regs = &rtc->data->regs;
209 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
211 isr &= ~STM32_RTC_ISR_RSF;
212 writel_relaxed(isr, rtc->base + regs->isr);
215 * Wait for RSF to be set to ensure the calendar registers are
216 * synchronised, it takes around 2 rtc_ck clock cycles
218 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
220 (isr & STM32_RTC_ISR_RSF),
224 static void stm32_rtc_clear_event_flags(struct stm32_rtc *rtc,
227 rtc->data->clear_events(rtc, flags);
230 static irqreturn_t stm32_rtc_alarm_irq(int irq, void *dev_id)
232 struct stm32_rtc *rtc = (struct stm32_rtc *)dev_id;
233 const struct stm32_rtc_registers *regs = &rtc->data->regs;
234 const struct stm32_rtc_events *evts = &rtc->data->events;
235 unsigned int status, cr;
237 rtc_lock(rtc->rtc_dev);
239 status = readl_relaxed(rtc->base + regs->sr);
240 cr = readl_relaxed(rtc->base + regs->cr);
242 if ((status & evts->alra) &&
243 (cr & STM32_RTC_CR_ALRAIE)) {
244 /* Alarm A flag - Alarm interrupt */
245 dev_dbg(&rtc->rtc_dev->dev, "Alarm occurred\n");
247 /* Pass event to the kernel */
248 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
250 /* Clear event flags, otherwise new events won't be received */
251 stm32_rtc_clear_event_flags(rtc, evts->alra);
254 rtc_unlock(rtc->rtc_dev);
259 /* Convert rtc_time structure from bin to bcd format */
260 static void tm2bcd(struct rtc_time *tm)
262 tm->tm_sec = bin2bcd(tm->tm_sec);
263 tm->tm_min = bin2bcd(tm->tm_min);
264 tm->tm_hour = bin2bcd(tm->tm_hour);
266 tm->tm_mday = bin2bcd(tm->tm_mday);
267 tm->tm_mon = bin2bcd(tm->tm_mon + 1);
268 tm->tm_year = bin2bcd(tm->tm_year - 100);
270 * Number of days since Sunday
271 * - on kernel side, 0=Sunday...6=Saturday
272 * - on rtc side, 0=invalid,1=Monday...7=Sunday
274 tm->tm_wday = (!tm->tm_wday) ? 7 : tm->tm_wday;
277 /* Convert rtc_time structure from bcd to bin format */
278 static void bcd2tm(struct rtc_time *tm)
280 tm->tm_sec = bcd2bin(tm->tm_sec);
281 tm->tm_min = bcd2bin(tm->tm_min);
282 tm->tm_hour = bcd2bin(tm->tm_hour);
284 tm->tm_mday = bcd2bin(tm->tm_mday);
285 tm->tm_mon = bcd2bin(tm->tm_mon) - 1;
286 tm->tm_year = bcd2bin(tm->tm_year) + 100;
288 * Number of days since Sunday
289 * - on kernel side, 0=Sunday...6=Saturday
290 * - on rtc side, 0=invalid,1=Monday...7=Sunday
295 static int stm32_rtc_read_time(struct device *dev, struct rtc_time *tm)
297 struct stm32_rtc *rtc = dev_get_drvdata(dev);
298 const struct stm32_rtc_registers *regs = &rtc->data->regs;
301 /* Time and Date in BCD format */
302 tr = readl_relaxed(rtc->base + regs->tr);
303 dr = readl_relaxed(rtc->base + regs->dr);
305 tm->tm_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
306 tm->tm_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
307 tm->tm_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
309 tm->tm_mday = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
310 tm->tm_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
311 tm->tm_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
312 tm->tm_wday = (dr & STM32_RTC_DR_WDAY) >> STM32_RTC_DR_WDAY_SHIFT;
314 /* We don't report tm_yday and tm_isdst */
321 static int stm32_rtc_set_time(struct device *dev, struct rtc_time *tm)
323 struct stm32_rtc *rtc = dev_get_drvdata(dev);
324 const struct stm32_rtc_registers *regs = &rtc->data->regs;
330 /* Time in BCD format */
331 tr = ((tm->tm_sec << STM32_RTC_TR_SEC_SHIFT) & STM32_RTC_TR_SEC) |
332 ((tm->tm_min << STM32_RTC_TR_MIN_SHIFT) & STM32_RTC_TR_MIN) |
333 ((tm->tm_hour << STM32_RTC_TR_HOUR_SHIFT) & STM32_RTC_TR_HOUR);
335 /* Date in BCD format */
336 dr = ((tm->tm_mday << STM32_RTC_DR_DATE_SHIFT) & STM32_RTC_DR_DATE) |
337 ((tm->tm_mon << STM32_RTC_DR_MONTH_SHIFT) & STM32_RTC_DR_MONTH) |
338 ((tm->tm_year << STM32_RTC_DR_YEAR_SHIFT) & STM32_RTC_DR_YEAR) |
339 ((tm->tm_wday << STM32_RTC_DR_WDAY_SHIFT) & STM32_RTC_DR_WDAY);
341 stm32_rtc_wpr_unlock(rtc);
343 ret = stm32_rtc_enter_init_mode(rtc);
345 dev_err(dev, "Can't enter in init mode. Set time aborted.\n");
349 writel_relaxed(tr, rtc->base + regs->tr);
350 writel_relaxed(dr, rtc->base + regs->dr);
352 stm32_rtc_exit_init_mode(rtc);
354 ret = stm32_rtc_wait_sync(rtc);
356 stm32_rtc_wpr_lock(rtc);
361 static int stm32_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
363 struct stm32_rtc *rtc = dev_get_drvdata(dev);
364 const struct stm32_rtc_registers *regs = &rtc->data->regs;
365 const struct stm32_rtc_events *evts = &rtc->data->events;
366 struct rtc_time *tm = &alrm->time;
367 unsigned int alrmar, cr, status;
369 alrmar = readl_relaxed(rtc->base + regs->alrmar);
370 cr = readl_relaxed(rtc->base + regs->cr);
371 status = readl_relaxed(rtc->base + regs->sr);
373 if (alrmar & STM32_RTC_ALRMXR_DATE_MASK) {
375 * Date/day doesn't matter in Alarm comparison so alarm
381 if (alrmar & STM32_RTC_ALRMXR_WDSEL) {
382 /* Alarm is set to a day of week */
384 tm->tm_wday = (alrmar & STM32_RTC_ALRMXR_WDAY) >>
385 STM32_RTC_ALRMXR_WDAY_SHIFT;
388 /* Alarm is set to a day of month */
390 tm->tm_mday = (alrmar & STM32_RTC_ALRMXR_DATE) >>
391 STM32_RTC_ALRMXR_DATE_SHIFT;
395 if (alrmar & STM32_RTC_ALRMXR_HOUR_MASK) {
396 /* Hours don't matter in Alarm comparison */
399 tm->tm_hour = (alrmar & STM32_RTC_ALRMXR_HOUR) >>
400 STM32_RTC_ALRMXR_HOUR_SHIFT;
401 if (alrmar & STM32_RTC_ALRMXR_PM)
405 if (alrmar & STM32_RTC_ALRMXR_MIN_MASK) {
406 /* Minutes don't matter in Alarm comparison */
409 tm->tm_min = (alrmar & STM32_RTC_ALRMXR_MIN) >>
410 STM32_RTC_ALRMXR_MIN_SHIFT;
413 if (alrmar & STM32_RTC_ALRMXR_SEC_MASK) {
414 /* Seconds don't matter in Alarm comparison */
417 tm->tm_sec = (alrmar & STM32_RTC_ALRMXR_SEC) >>
418 STM32_RTC_ALRMXR_SEC_SHIFT;
423 alrm->enabled = (cr & STM32_RTC_CR_ALRAE) ? 1 : 0;
424 alrm->pending = (status & evts->alra) ? 1 : 0;
429 static int stm32_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
431 struct stm32_rtc *rtc = dev_get_drvdata(dev);
432 const struct stm32_rtc_registers *regs = &rtc->data->regs;
433 const struct stm32_rtc_events *evts = &rtc->data->events;
436 cr = readl_relaxed(rtc->base + regs->cr);
438 stm32_rtc_wpr_unlock(rtc);
440 /* We expose Alarm A to the kernel */
442 cr |= (STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
444 cr &= ~(STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
445 writel_relaxed(cr, rtc->base + regs->cr);
447 /* Clear event flags, otherwise new events won't be received */
448 stm32_rtc_clear_event_flags(rtc, evts->alra);
450 stm32_rtc_wpr_lock(rtc);
455 static int stm32_rtc_valid_alrm(struct device *dev, struct rtc_time *tm)
457 static struct rtc_time now;
458 time64_t max_alarm_time64;
464 * Assuming current date is M-D-Y H:M:S.
465 * RTC alarm can't be set on a specific month and year.
466 * So the valid alarm range is:
467 * M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S
469 stm32_rtc_read_time(dev, &now);
472 * Find the next month and the year of the next month.
473 * Note: tm_mon and next_month are from 0 to 11
475 next_month = now.tm_mon + 1;
476 if (next_month == 12) {
478 next_year = now.tm_year + 1;
480 next_year = now.tm_year;
483 /* Find the maximum limit of alarm in days. */
484 max_day_forward = rtc_month_days(now.tm_mon, now.tm_year)
486 + min(rtc_month_days(next_month, next_year), now.tm_mday);
488 /* Convert to timestamp and compare the alarm time and its upper limit */
489 max_alarm_time64 = rtc_tm_to_time64(&now) + max_day_forward * SEC_PER_DAY;
490 return rtc_tm_to_time64(tm) <= max_alarm_time64 ? 0 : -EINVAL;
493 static int stm32_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
495 struct stm32_rtc *rtc = dev_get_drvdata(dev);
496 const struct stm32_rtc_registers *regs = &rtc->data->regs;
497 struct rtc_time *tm = &alrm->time;
498 unsigned int cr, isr, alrmar;
502 * RTC alarm can't be set on a specific date, unless this date is
503 * up to the same day of month next month.
505 if (stm32_rtc_valid_alrm(dev, tm) < 0) {
506 dev_err(dev, "Alarm can be set only on upcoming month.\n");
513 /* tm_year and tm_mon are not used because not supported by RTC */
514 alrmar |= (tm->tm_mday << STM32_RTC_ALRMXR_DATE_SHIFT) &
515 STM32_RTC_ALRMXR_DATE;
517 alrmar &= ~STM32_RTC_ALRMXR_PM;
518 alrmar |= (tm->tm_hour << STM32_RTC_ALRMXR_HOUR_SHIFT) &
519 STM32_RTC_ALRMXR_HOUR;
520 alrmar |= (tm->tm_min << STM32_RTC_ALRMXR_MIN_SHIFT) &
521 STM32_RTC_ALRMXR_MIN;
522 alrmar |= (tm->tm_sec << STM32_RTC_ALRMXR_SEC_SHIFT) &
523 STM32_RTC_ALRMXR_SEC;
525 stm32_rtc_wpr_unlock(rtc);
528 cr = readl_relaxed(rtc->base + regs->cr);
529 cr &= ~STM32_RTC_CR_ALRAE;
530 writel_relaxed(cr, rtc->base + regs->cr);
533 * Poll Alarm write flag to be sure that Alarm update is allowed: it
534 * takes around 2 rtc_ck clock cycles
536 ret = readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
538 (isr & STM32_RTC_ISR_ALRAWF),
542 dev_err(dev, "Alarm update not allowed\n");
546 /* Write to Alarm register */
547 writel_relaxed(alrmar, rtc->base + regs->alrmar);
549 stm32_rtc_alarm_irq_enable(dev, alrm->enabled);
551 stm32_rtc_wpr_lock(rtc);
556 static const struct rtc_class_ops stm32_rtc_ops = {
557 .read_time = stm32_rtc_read_time,
558 .set_time = stm32_rtc_set_time,
559 .read_alarm = stm32_rtc_read_alarm,
560 .set_alarm = stm32_rtc_set_alarm,
561 .alarm_irq_enable = stm32_rtc_alarm_irq_enable,
564 static void stm32_rtc_clear_events(struct stm32_rtc *rtc,
567 const struct stm32_rtc_registers *regs = &rtc->data->regs;
569 /* Flags are cleared by writing 0 in RTC_ISR */
570 writel_relaxed(readl_relaxed(rtc->base + regs->isr) & ~flags,
571 rtc->base + regs->isr);
574 static const struct stm32_rtc_data stm32_rtc_data = {
577 .need_accuracy = false,
578 .rif_protected = false,
587 .sr = 0x0C, /* set to ISR offset to ease alarm management */
592 .alra = STM32_RTC_ISR_ALRAF,
594 .clear_events = stm32_rtc_clear_events,
597 static const struct stm32_rtc_data stm32h7_rtc_data = {
600 .need_accuracy = false,
601 .rif_protected = false,
610 .sr = 0x0C, /* set to ISR offset to ease alarm management */
615 .alra = STM32_RTC_ISR_ALRAF,
617 .clear_events = stm32_rtc_clear_events,
620 static void stm32mp1_rtc_clear_events(struct stm32_rtc *rtc,
623 struct stm32_rtc_registers regs = rtc->data->regs;
625 /* Flags are cleared by writing 1 in RTC_SCR */
626 writel_relaxed(flags, rtc->base + regs.scr);
629 static const struct stm32_rtc_data stm32mp1_data = {
632 .need_accuracy = true,
633 .rif_protected = false,
638 .isr = 0x0C, /* named RTC_ICSR on stm32mp1 */
647 .alra = STM32_RTC_SR_ALRA,
649 .clear_events = stm32mp1_rtc_clear_events,
652 static const struct stm32_rtc_data stm32mp25_data = {
655 .need_accuracy = true,
656 .rif_protected = true,
661 .isr = 0x0C, /* named RTC_ICSR on stm32mp25 */
670 .alra = STM32_RTC_SR_ALRA,
672 .clear_events = stm32mp1_rtc_clear_events,
675 static const struct of_device_id stm32_rtc_of_match[] = {
676 { .compatible = "st,stm32-rtc", .data = &stm32_rtc_data },
677 { .compatible = "st,stm32h7-rtc", .data = &stm32h7_rtc_data },
678 { .compatible = "st,stm32mp1-rtc", .data = &stm32mp1_data },
679 { .compatible = "st,stm32mp25-rtc", .data = &stm32mp25_data },
682 MODULE_DEVICE_TABLE(of, stm32_rtc_of_match);
684 static int stm32_rtc_check_rif(struct stm32_rtc *stm32_rtc,
685 struct stm32_rtc_rif_resource res)
687 u32 rxcidcfgr = readl_relaxed(stm32_rtc->base + STM32_RTC_RXCIDCFGR(res.num));
690 /* Check if RTC available for our CID */
691 if ((rxcidcfgr & STM32_RTC_RXCIDCFGR_CFEN) &&
692 (FIELD_GET(STM32_RTC_RXCIDCFGR_CID, rxcidcfgr) != STM32_RTC_RXCIDCFGR_CID1))
695 /* Check if RTC available for non secure world */
696 seccfgr = readl_relaxed(stm32_rtc->base + STM32_RTC_SECCFGR);
697 if ((seccfgr & STM32_RTC_SECCFGR_SEC) | (seccfgr & res.bit))
703 static int stm32_rtc_init(struct platform_device *pdev,
704 struct stm32_rtc *rtc)
706 const struct stm32_rtc_registers *regs = &rtc->data->regs;
707 unsigned int prer, pred_a, pred_s, pred_a_max, pred_s_max, cr;
711 rate = clk_get_rate(rtc->rtc_ck);
713 /* Find prediv_a and prediv_s to obtain the 1Hz calendar clock */
714 pred_a_max = STM32_RTC_PRER_PRED_A >> STM32_RTC_PRER_PRED_A_SHIFT;
715 pred_s_max = STM32_RTC_PRER_PRED_S >> STM32_RTC_PRER_PRED_S_SHIFT;
717 if (rate > (pred_a_max + 1) * (pred_s_max + 1)) {
718 dev_err(&pdev->dev, "rtc_ck rate is too high: %dHz\n", rate);
722 if (rtc->data->need_accuracy) {
723 for (pred_a = 0; pred_a <= pred_a_max; pred_a++) {
724 pred_s = (rate / (pred_a + 1)) - 1;
726 if (pred_s <= pred_s_max && ((pred_s + 1) * (pred_a + 1)) == rate)
730 for (pred_a = pred_a_max; pred_a + 1 > 0; pred_a--) {
731 pred_s = (rate / (pred_a + 1)) - 1;
733 if (((pred_s + 1) * (pred_a + 1)) == rate)
739 * Can't find a 1Hz, so give priority to RTC power consumption
740 * by choosing the higher possible value for prediv_a
742 if (pred_s > pred_s_max || pred_a > pred_a_max) {
744 pred_s = (rate / (pred_a + 1)) - 1;
746 dev_warn(&pdev->dev, "rtc_ck is %s\n",
747 (rate < ((pred_a + 1) * (pred_s + 1))) ?
751 cr = readl_relaxed(rtc->base + regs->cr);
753 prer = readl_relaxed(rtc->base + regs->prer);
754 prer &= STM32_RTC_PRER_PRED_S | STM32_RTC_PRER_PRED_A;
756 pred_s = (pred_s << STM32_RTC_PRER_PRED_S_SHIFT) &
757 STM32_RTC_PRER_PRED_S;
758 pred_a = (pred_a << STM32_RTC_PRER_PRED_A_SHIFT) &
759 STM32_RTC_PRER_PRED_A;
761 /* quit if there is nothing to initialize */
762 if ((cr & STM32_RTC_CR_FMT) == 0 && prer == (pred_s | pred_a))
765 stm32_rtc_wpr_unlock(rtc);
767 ret = stm32_rtc_enter_init_mode(rtc);
770 "Can't enter in init mode. Prescaler config failed.\n");
774 writel_relaxed(pred_s, rtc->base + regs->prer);
775 writel_relaxed(pred_a | pred_s, rtc->base + regs->prer);
777 /* Force 24h time format */
778 cr &= ~STM32_RTC_CR_FMT;
779 writel_relaxed(cr, rtc->base + regs->cr);
781 stm32_rtc_exit_init_mode(rtc);
783 ret = stm32_rtc_wait_sync(rtc);
785 stm32_rtc_wpr_lock(rtc);
790 static int stm32_rtc_probe(struct platform_device *pdev)
792 struct stm32_rtc *rtc;
793 const struct stm32_rtc_registers *regs;
796 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
800 rtc->base = devm_platform_ioremap_resource(pdev, 0);
801 if (IS_ERR(rtc->base))
802 return PTR_ERR(rtc->base);
804 rtc->data = (struct stm32_rtc_data *)
805 of_device_get_match_data(&pdev->dev);
806 regs = &rtc->data->regs;
808 if (rtc->data->need_dbp) {
809 rtc->dbp = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
811 if (IS_ERR(rtc->dbp)) {
812 dev_err(&pdev->dev, "no st,syscfg\n");
813 return PTR_ERR(rtc->dbp);
816 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
819 dev_err(&pdev->dev, "can't read DBP register offset\n");
823 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
826 dev_err(&pdev->dev, "can't read DBP register mask\n");
831 if (!rtc->data->has_pclk) {
833 rtc->rtc_ck = devm_clk_get(&pdev->dev, NULL);
835 rtc->pclk = devm_clk_get(&pdev->dev, "pclk");
836 if (IS_ERR(rtc->pclk))
837 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->pclk), "no pclk clock");
839 rtc->rtc_ck = devm_clk_get(&pdev->dev, "rtc_ck");
841 if (IS_ERR(rtc->rtc_ck))
842 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_ck), "no rtc_ck clock");
844 if (rtc->data->has_pclk) {
845 ret = clk_prepare_enable(rtc->pclk);
850 ret = clk_prepare_enable(rtc->rtc_ck);
854 if (rtc->data->need_dbp)
855 regmap_update_bits(rtc->dbp, rtc->dbp_reg,
856 rtc->dbp_mask, rtc->dbp_mask);
858 if (rtc->data->rif_protected) {
859 ret = stm32_rtc_check_rif(rtc, STM32_RTC_RES_INIT);
861 ret = stm32_rtc_check_rif(rtc, STM32_RTC_RES_ALRA);
863 dev_err(&pdev->dev, "Failed to probe RTC due to RIF configuration\n");
869 * After a system reset, RTC_ISR.INITS flag can be read to check if
870 * the calendar has been initialized or not. INITS flag is reset by a
871 * power-on reset (no vbat, no power-supply). It is not reset if
872 * rtc_ck parent clock has changed (so RTC prescalers need to be
873 * changed). That's why we cannot rely on this flag to know if RTC
874 * init has to be done.
876 ret = stm32_rtc_init(pdev, rtc);
880 rtc->irq_alarm = platform_get_irq(pdev, 0);
881 if (rtc->irq_alarm <= 0) {
882 ret = rtc->irq_alarm;
886 ret = device_init_wakeup(&pdev->dev, true);
890 ret = dev_pm_set_wake_irq(&pdev->dev, rtc->irq_alarm);
894 platform_set_drvdata(pdev, rtc);
896 rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
897 &stm32_rtc_ops, THIS_MODULE);
898 if (IS_ERR(rtc->rtc_dev)) {
899 ret = PTR_ERR(rtc->rtc_dev);
900 dev_err(&pdev->dev, "rtc device registration failed, err=%d\n",
905 /* Handle RTC alarm interrupts */
906 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_alarm, NULL,
907 stm32_rtc_alarm_irq, IRQF_ONESHOT,
910 dev_err(&pdev->dev, "IRQ%d (alarm interrupt) already claimed\n",
916 * If INITS flag is reset (calendar year field set to 0x00), calendar
917 * must be initialized
919 if (!(readl_relaxed(rtc->base + regs->isr) & STM32_RTC_ISR_INITS))
920 dev_warn(&pdev->dev, "Date/Time must be initialized\n");
922 if (regs->verr != UNDEF_REG) {
923 u32 ver = readl_relaxed(rtc->base + regs->verr);
925 dev_info(&pdev->dev, "registered rev:%d.%d\n",
926 (ver >> STM32_RTC_VERR_MAJREV_SHIFT) & 0xF,
927 (ver >> STM32_RTC_VERR_MINREV_SHIFT) & 0xF);
933 clk_disable_unprepare(rtc->rtc_ck);
935 if (rtc->data->has_pclk)
936 clk_disable_unprepare(rtc->pclk);
938 if (rtc->data->need_dbp)
939 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
941 dev_pm_clear_wake_irq(&pdev->dev);
942 device_init_wakeup(&pdev->dev, false);
947 static void stm32_rtc_remove(struct platform_device *pdev)
949 struct stm32_rtc *rtc = platform_get_drvdata(pdev);
950 const struct stm32_rtc_registers *regs = &rtc->data->regs;
953 /* Disable interrupts */
954 stm32_rtc_wpr_unlock(rtc);
955 cr = readl_relaxed(rtc->base + regs->cr);
956 cr &= ~STM32_RTC_CR_ALRAIE;
957 writel_relaxed(cr, rtc->base + regs->cr);
958 stm32_rtc_wpr_lock(rtc);
960 clk_disable_unprepare(rtc->rtc_ck);
961 if (rtc->data->has_pclk)
962 clk_disable_unprepare(rtc->pclk);
964 /* Enable backup domain write protection if needed */
965 if (rtc->data->need_dbp)
966 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
968 dev_pm_clear_wake_irq(&pdev->dev);
969 device_init_wakeup(&pdev->dev, false);
972 static int stm32_rtc_suspend(struct device *dev)
974 struct stm32_rtc *rtc = dev_get_drvdata(dev);
976 if (rtc->data->has_pclk)
977 clk_disable_unprepare(rtc->pclk);
982 static int stm32_rtc_resume(struct device *dev)
984 struct stm32_rtc *rtc = dev_get_drvdata(dev);
987 if (rtc->data->has_pclk) {
988 ret = clk_prepare_enable(rtc->pclk);
993 ret = stm32_rtc_wait_sync(rtc);
995 if (rtc->data->has_pclk)
996 clk_disable_unprepare(rtc->pclk);
1003 static const struct dev_pm_ops stm32_rtc_pm_ops = {
1004 NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32_rtc_suspend, stm32_rtc_resume)
1007 static struct platform_driver stm32_rtc_driver = {
1008 .probe = stm32_rtc_probe,
1009 .remove_new = stm32_rtc_remove,
1011 .name = DRIVER_NAME,
1012 .pm = &stm32_rtc_pm_ops,
1013 .of_match_table = stm32_rtc_of_match,
1017 module_platform_driver(stm32_rtc_driver);
1019 MODULE_ALIAS("platform:" DRIVER_NAME);
1021 MODULE_DESCRIPTION("STMicroelectronics STM32 Real Time Clock driver");
1022 MODULE_LICENSE("GPL v2");