Linux 6.9-rc1
[linux-2.6-microblaze.git] / drivers / rtc / rtc-stm32.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) STMicroelectronics 2017
4  * Author:  Amelie Delaunay <amelie.delaunay@st.com>
5  */
6
7 #include <linux/bcd.h>
8 #include <linux/clk.h>
9 #include <linux/errno.h>
10 #include <linux/iopoll.h>
11 #include <linux/ioport.h>
12 #include <linux/mfd/syscon.h>
13 #include <linux/module.h>
14 #include <linux/of.h>
15 #include <linux/platform_device.h>
16 #include <linux/pm_wakeirq.h>
17 #include <linux/regmap.h>
18 #include <linux/rtc.h>
19
20 #define DRIVER_NAME "stm32_rtc"
21
22 /* STM32_RTC_TR bit fields  */
23 #define STM32_RTC_TR_SEC_SHIFT          0
24 #define STM32_RTC_TR_SEC                GENMASK(6, 0)
25 #define STM32_RTC_TR_MIN_SHIFT          8
26 #define STM32_RTC_TR_MIN                GENMASK(14, 8)
27 #define STM32_RTC_TR_HOUR_SHIFT         16
28 #define STM32_RTC_TR_HOUR               GENMASK(21, 16)
29
30 /* STM32_RTC_DR bit fields */
31 #define STM32_RTC_DR_DATE_SHIFT         0
32 #define STM32_RTC_DR_DATE               GENMASK(5, 0)
33 #define STM32_RTC_DR_MONTH_SHIFT        8
34 #define STM32_RTC_DR_MONTH              GENMASK(12, 8)
35 #define STM32_RTC_DR_WDAY_SHIFT         13
36 #define STM32_RTC_DR_WDAY               GENMASK(15, 13)
37 #define STM32_RTC_DR_YEAR_SHIFT         16
38 #define STM32_RTC_DR_YEAR               GENMASK(23, 16)
39
40 /* STM32_RTC_CR bit fields */
41 #define STM32_RTC_CR_FMT                BIT(6)
42 #define STM32_RTC_CR_ALRAE              BIT(8)
43 #define STM32_RTC_CR_ALRAIE             BIT(12)
44
45 /* STM32_RTC_ISR/STM32_RTC_ICSR bit fields */
46 #define STM32_RTC_ISR_ALRAWF            BIT(0)
47 #define STM32_RTC_ISR_INITS             BIT(4)
48 #define STM32_RTC_ISR_RSF               BIT(5)
49 #define STM32_RTC_ISR_INITF             BIT(6)
50 #define STM32_RTC_ISR_INIT              BIT(7)
51 #define STM32_RTC_ISR_ALRAF             BIT(8)
52
53 /* STM32_RTC_PRER bit fields */
54 #define STM32_RTC_PRER_PRED_S_SHIFT     0
55 #define STM32_RTC_PRER_PRED_S           GENMASK(14, 0)
56 #define STM32_RTC_PRER_PRED_A_SHIFT     16
57 #define STM32_RTC_PRER_PRED_A           GENMASK(22, 16)
58
59 /* STM32_RTC_ALRMAR and STM32_RTC_ALRMBR bit fields */
60 #define STM32_RTC_ALRMXR_SEC_SHIFT      0
61 #define STM32_RTC_ALRMXR_SEC            GENMASK(6, 0)
62 #define STM32_RTC_ALRMXR_SEC_MASK       BIT(7)
63 #define STM32_RTC_ALRMXR_MIN_SHIFT      8
64 #define STM32_RTC_ALRMXR_MIN            GENMASK(14, 8)
65 #define STM32_RTC_ALRMXR_MIN_MASK       BIT(15)
66 #define STM32_RTC_ALRMXR_HOUR_SHIFT     16
67 #define STM32_RTC_ALRMXR_HOUR           GENMASK(21, 16)
68 #define STM32_RTC_ALRMXR_PM             BIT(22)
69 #define STM32_RTC_ALRMXR_HOUR_MASK      BIT(23)
70 #define STM32_RTC_ALRMXR_DATE_SHIFT     24
71 #define STM32_RTC_ALRMXR_DATE           GENMASK(29, 24)
72 #define STM32_RTC_ALRMXR_WDSEL          BIT(30)
73 #define STM32_RTC_ALRMXR_WDAY_SHIFT     24
74 #define STM32_RTC_ALRMXR_WDAY           GENMASK(27, 24)
75 #define STM32_RTC_ALRMXR_DATE_MASK      BIT(31)
76
77 /* STM32_RTC_SR/_SCR bit fields */
78 #define STM32_RTC_SR_ALRA               BIT(0)
79
80 /* STM32_RTC_VERR bit fields */
81 #define STM32_RTC_VERR_MINREV_SHIFT     0
82 #define STM32_RTC_VERR_MINREV           GENMASK(3, 0)
83 #define STM32_RTC_VERR_MAJREV_SHIFT     4
84 #define STM32_RTC_VERR_MAJREV           GENMASK(7, 4)
85
86 /* STM32_RTC_WPR key constants */
87 #define RTC_WPR_1ST_KEY                 0xCA
88 #define RTC_WPR_2ND_KEY                 0x53
89 #define RTC_WPR_WRONG_KEY               0xFF
90
91 /* Max STM32 RTC register offset is 0x3FC */
92 #define UNDEF_REG                       0xFFFF
93
94 /* STM32 RTC driver time helpers */
95 #define SEC_PER_DAY             (24 * 60 * 60)
96
97 struct stm32_rtc;
98
99 struct stm32_rtc_registers {
100         u16 tr;
101         u16 dr;
102         u16 cr;
103         u16 isr;
104         u16 prer;
105         u16 alrmar;
106         u16 wpr;
107         u16 sr;
108         u16 scr;
109         u16 verr;
110 };
111
112 struct stm32_rtc_events {
113         u32 alra;
114 };
115
116 struct stm32_rtc_data {
117         const struct stm32_rtc_registers regs;
118         const struct stm32_rtc_events events;
119         void (*clear_events)(struct stm32_rtc *rtc, unsigned int flags);
120         bool has_pclk;
121         bool need_dbp;
122         bool need_accuracy;
123 };
124
125 struct stm32_rtc {
126         struct rtc_device *rtc_dev;
127         void __iomem *base;
128         struct regmap *dbp;
129         unsigned int dbp_reg;
130         unsigned int dbp_mask;
131         struct clk *pclk;
132         struct clk *rtc_ck;
133         const struct stm32_rtc_data *data;
134         int irq_alarm;
135 };
136
137 static void stm32_rtc_wpr_unlock(struct stm32_rtc *rtc)
138 {
139         const struct stm32_rtc_registers *regs = &rtc->data->regs;
140
141         writel_relaxed(RTC_WPR_1ST_KEY, rtc->base + regs->wpr);
142         writel_relaxed(RTC_WPR_2ND_KEY, rtc->base + regs->wpr);
143 }
144
145 static void stm32_rtc_wpr_lock(struct stm32_rtc *rtc)
146 {
147         const struct stm32_rtc_registers *regs = &rtc->data->regs;
148
149         writel_relaxed(RTC_WPR_WRONG_KEY, rtc->base + regs->wpr);
150 }
151
152 static int stm32_rtc_enter_init_mode(struct stm32_rtc *rtc)
153 {
154         const struct stm32_rtc_registers *regs = &rtc->data->regs;
155         unsigned int isr = readl_relaxed(rtc->base + regs->isr);
156
157         if (!(isr & STM32_RTC_ISR_INITF)) {
158                 isr |= STM32_RTC_ISR_INIT;
159                 writel_relaxed(isr, rtc->base + regs->isr);
160
161                 /*
162                  * It takes around 2 rtc_ck clock cycles to enter in
163                  * initialization phase mode (and have INITF flag set). As
164                  * slowest rtc_ck frequency may be 32kHz and highest should be
165                  * 1MHz, we poll every 10 us with a timeout of 100ms.
166                  */
167                 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr, isr,
168                                                          (isr & STM32_RTC_ISR_INITF),
169                                                          10, 100000);
170         }
171
172         return 0;
173 }
174
175 static void stm32_rtc_exit_init_mode(struct stm32_rtc *rtc)
176 {
177         const struct stm32_rtc_registers *regs = &rtc->data->regs;
178         unsigned int isr = readl_relaxed(rtc->base + regs->isr);
179
180         isr &= ~STM32_RTC_ISR_INIT;
181         writel_relaxed(isr, rtc->base + regs->isr);
182 }
183
184 static int stm32_rtc_wait_sync(struct stm32_rtc *rtc)
185 {
186         const struct stm32_rtc_registers *regs = &rtc->data->regs;
187         unsigned int isr = readl_relaxed(rtc->base + regs->isr);
188
189         isr &= ~STM32_RTC_ISR_RSF;
190         writel_relaxed(isr, rtc->base + regs->isr);
191
192         /*
193          * Wait for RSF to be set to ensure the calendar registers are
194          * synchronised, it takes around 2 rtc_ck clock cycles
195          */
196         return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
197                                                  isr,
198                                                  (isr & STM32_RTC_ISR_RSF),
199                                                  10, 100000);
200 }
201
202 static void stm32_rtc_clear_event_flags(struct stm32_rtc *rtc,
203                                         unsigned int flags)
204 {
205         rtc->data->clear_events(rtc, flags);
206 }
207
208 static irqreturn_t stm32_rtc_alarm_irq(int irq, void *dev_id)
209 {
210         struct stm32_rtc *rtc = (struct stm32_rtc *)dev_id;
211         const struct stm32_rtc_registers *regs = &rtc->data->regs;
212         const struct stm32_rtc_events *evts = &rtc->data->events;
213         unsigned int status, cr;
214
215         rtc_lock(rtc->rtc_dev);
216
217         status = readl_relaxed(rtc->base + regs->sr);
218         cr = readl_relaxed(rtc->base + regs->cr);
219
220         if ((status & evts->alra) &&
221             (cr & STM32_RTC_CR_ALRAIE)) {
222                 /* Alarm A flag - Alarm interrupt */
223                 dev_dbg(&rtc->rtc_dev->dev, "Alarm occurred\n");
224
225                 /* Pass event to the kernel */
226                 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
227
228                 /* Clear event flags, otherwise new events won't be received */
229                 stm32_rtc_clear_event_flags(rtc, evts->alra);
230         }
231
232         rtc_unlock(rtc->rtc_dev);
233
234         return IRQ_HANDLED;
235 }
236
237 /* Convert rtc_time structure from bin to bcd format */
238 static void tm2bcd(struct rtc_time *tm)
239 {
240         tm->tm_sec = bin2bcd(tm->tm_sec);
241         tm->tm_min = bin2bcd(tm->tm_min);
242         tm->tm_hour = bin2bcd(tm->tm_hour);
243
244         tm->tm_mday = bin2bcd(tm->tm_mday);
245         tm->tm_mon = bin2bcd(tm->tm_mon + 1);
246         tm->tm_year = bin2bcd(tm->tm_year - 100);
247         /*
248          * Number of days since Sunday
249          * - on kernel side, 0=Sunday...6=Saturday
250          * - on rtc side, 0=invalid,1=Monday...7=Sunday
251          */
252         tm->tm_wday = (!tm->tm_wday) ? 7 : tm->tm_wday;
253 }
254
255 /* Convert rtc_time structure from bcd to bin format */
256 static void bcd2tm(struct rtc_time *tm)
257 {
258         tm->tm_sec = bcd2bin(tm->tm_sec);
259         tm->tm_min = bcd2bin(tm->tm_min);
260         tm->tm_hour = bcd2bin(tm->tm_hour);
261
262         tm->tm_mday = bcd2bin(tm->tm_mday);
263         tm->tm_mon = bcd2bin(tm->tm_mon) - 1;
264         tm->tm_year = bcd2bin(tm->tm_year) + 100;
265         /*
266          * Number of days since Sunday
267          * - on kernel side, 0=Sunday...6=Saturday
268          * - on rtc side, 0=invalid,1=Monday...7=Sunday
269          */
270         tm->tm_wday %= 7;
271 }
272
273 static int stm32_rtc_read_time(struct device *dev, struct rtc_time *tm)
274 {
275         struct stm32_rtc *rtc = dev_get_drvdata(dev);
276         const struct stm32_rtc_registers *regs = &rtc->data->regs;
277         unsigned int tr, dr;
278
279         /* Time and Date in BCD format */
280         tr = readl_relaxed(rtc->base + regs->tr);
281         dr = readl_relaxed(rtc->base + regs->dr);
282
283         tm->tm_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
284         tm->tm_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
285         tm->tm_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
286
287         tm->tm_mday = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
288         tm->tm_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
289         tm->tm_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
290         tm->tm_wday = (dr & STM32_RTC_DR_WDAY) >> STM32_RTC_DR_WDAY_SHIFT;
291
292         /* We don't report tm_yday and tm_isdst */
293
294         bcd2tm(tm);
295
296         return 0;
297 }
298
299 static int stm32_rtc_set_time(struct device *dev, struct rtc_time *tm)
300 {
301         struct stm32_rtc *rtc = dev_get_drvdata(dev);
302         const struct stm32_rtc_registers *regs = &rtc->data->regs;
303         unsigned int tr, dr;
304         int ret = 0;
305
306         tm2bcd(tm);
307
308         /* Time in BCD format */
309         tr = ((tm->tm_sec << STM32_RTC_TR_SEC_SHIFT) & STM32_RTC_TR_SEC) |
310              ((tm->tm_min << STM32_RTC_TR_MIN_SHIFT) & STM32_RTC_TR_MIN) |
311              ((tm->tm_hour << STM32_RTC_TR_HOUR_SHIFT) & STM32_RTC_TR_HOUR);
312
313         /* Date in BCD format */
314         dr = ((tm->tm_mday << STM32_RTC_DR_DATE_SHIFT) & STM32_RTC_DR_DATE) |
315              ((tm->tm_mon << STM32_RTC_DR_MONTH_SHIFT) & STM32_RTC_DR_MONTH) |
316              ((tm->tm_year << STM32_RTC_DR_YEAR_SHIFT) & STM32_RTC_DR_YEAR) |
317              ((tm->tm_wday << STM32_RTC_DR_WDAY_SHIFT) & STM32_RTC_DR_WDAY);
318
319         stm32_rtc_wpr_unlock(rtc);
320
321         ret = stm32_rtc_enter_init_mode(rtc);
322         if (ret) {
323                 dev_err(dev, "Can't enter in init mode. Set time aborted.\n");
324                 goto end;
325         }
326
327         writel_relaxed(tr, rtc->base + regs->tr);
328         writel_relaxed(dr, rtc->base + regs->dr);
329
330         stm32_rtc_exit_init_mode(rtc);
331
332         ret = stm32_rtc_wait_sync(rtc);
333 end:
334         stm32_rtc_wpr_lock(rtc);
335
336         return ret;
337 }
338
339 static int stm32_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
340 {
341         struct stm32_rtc *rtc = dev_get_drvdata(dev);
342         const struct stm32_rtc_registers *regs = &rtc->data->regs;
343         const struct stm32_rtc_events *evts = &rtc->data->events;
344         struct rtc_time *tm = &alrm->time;
345         unsigned int alrmar, cr, status;
346
347         alrmar = readl_relaxed(rtc->base + regs->alrmar);
348         cr = readl_relaxed(rtc->base + regs->cr);
349         status = readl_relaxed(rtc->base + regs->sr);
350
351         if (alrmar & STM32_RTC_ALRMXR_DATE_MASK) {
352                 /*
353                  * Date/day doesn't matter in Alarm comparison so alarm
354                  * triggers every day
355                  */
356                 tm->tm_mday = -1;
357                 tm->tm_wday = -1;
358         } else {
359                 if (alrmar & STM32_RTC_ALRMXR_WDSEL) {
360                         /* Alarm is set to a day of week */
361                         tm->tm_mday = -1;
362                         tm->tm_wday = (alrmar & STM32_RTC_ALRMXR_WDAY) >>
363                                       STM32_RTC_ALRMXR_WDAY_SHIFT;
364                         tm->tm_wday %= 7;
365                 } else {
366                         /* Alarm is set to a day of month */
367                         tm->tm_wday = -1;
368                         tm->tm_mday = (alrmar & STM32_RTC_ALRMXR_DATE) >>
369                                        STM32_RTC_ALRMXR_DATE_SHIFT;
370                 }
371         }
372
373         if (alrmar & STM32_RTC_ALRMXR_HOUR_MASK) {
374                 /* Hours don't matter in Alarm comparison */
375                 tm->tm_hour = -1;
376         } else {
377                 tm->tm_hour = (alrmar & STM32_RTC_ALRMXR_HOUR) >>
378                                STM32_RTC_ALRMXR_HOUR_SHIFT;
379                 if (alrmar & STM32_RTC_ALRMXR_PM)
380                         tm->tm_hour += 12;
381         }
382
383         if (alrmar & STM32_RTC_ALRMXR_MIN_MASK) {
384                 /* Minutes don't matter in Alarm comparison */
385                 tm->tm_min = -1;
386         } else {
387                 tm->tm_min = (alrmar & STM32_RTC_ALRMXR_MIN) >>
388                               STM32_RTC_ALRMXR_MIN_SHIFT;
389         }
390
391         if (alrmar & STM32_RTC_ALRMXR_SEC_MASK) {
392                 /* Seconds don't matter in Alarm comparison */
393                 tm->tm_sec = -1;
394         } else {
395                 tm->tm_sec = (alrmar & STM32_RTC_ALRMXR_SEC) >>
396                               STM32_RTC_ALRMXR_SEC_SHIFT;
397         }
398
399         bcd2tm(tm);
400
401         alrm->enabled = (cr & STM32_RTC_CR_ALRAE) ? 1 : 0;
402         alrm->pending = (status & evts->alra) ? 1 : 0;
403
404         return 0;
405 }
406
407 static int stm32_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
408 {
409         struct stm32_rtc *rtc = dev_get_drvdata(dev);
410         const struct stm32_rtc_registers *regs = &rtc->data->regs;
411         const struct stm32_rtc_events *evts = &rtc->data->events;
412         unsigned int cr;
413
414         cr = readl_relaxed(rtc->base + regs->cr);
415
416         stm32_rtc_wpr_unlock(rtc);
417
418         /* We expose Alarm A to the kernel */
419         if (enabled)
420                 cr |= (STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
421         else
422                 cr &= ~(STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
423         writel_relaxed(cr, rtc->base + regs->cr);
424
425         /* Clear event flags, otherwise new events won't be received */
426         stm32_rtc_clear_event_flags(rtc, evts->alra);
427
428         stm32_rtc_wpr_lock(rtc);
429
430         return 0;
431 }
432
433 static int stm32_rtc_valid_alrm(struct device *dev, struct rtc_time *tm)
434 {
435         static struct rtc_time now;
436         time64_t max_alarm_time64;
437         int max_day_forward;
438         int next_month;
439         int next_year;
440
441         /*
442          * Assuming current date is M-D-Y H:M:S.
443          * RTC alarm can't be set on a specific month and year.
444          * So the valid alarm range is:
445          *      M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S
446          */
447         stm32_rtc_read_time(dev, &now);
448
449         /*
450          * Find the next month and the year of the next month.
451          * Note: tm_mon and next_month are from 0 to 11
452          */
453         next_month = now.tm_mon + 1;
454         if (next_month == 12) {
455                 next_month = 0;
456                 next_year = now.tm_year + 1;
457         } else {
458                 next_year = now.tm_year;
459         }
460
461         /* Find the maximum limit of alarm in days. */
462         max_day_forward = rtc_month_days(now.tm_mon, now.tm_year)
463                          - now.tm_mday
464                          + min(rtc_month_days(next_month, next_year), now.tm_mday);
465
466         /* Convert to timestamp and compare the alarm time and its upper limit */
467         max_alarm_time64 = rtc_tm_to_time64(&now) + max_day_forward * SEC_PER_DAY;
468         return rtc_tm_to_time64(tm) <= max_alarm_time64 ? 0 : -EINVAL;
469 }
470
471 static int stm32_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
472 {
473         struct stm32_rtc *rtc = dev_get_drvdata(dev);
474         const struct stm32_rtc_registers *regs = &rtc->data->regs;
475         struct rtc_time *tm = &alrm->time;
476         unsigned int cr, isr, alrmar;
477         int ret = 0;
478
479         /*
480          * RTC alarm can't be set on a specific date, unless this date is
481          * up to the same day of month next month.
482          */
483         if (stm32_rtc_valid_alrm(dev, tm) < 0) {
484                 dev_err(dev, "Alarm can be set only on upcoming month.\n");
485                 return -EINVAL;
486         }
487
488         tm2bcd(tm);
489
490         alrmar = 0;
491         /* tm_year and tm_mon are not used because not supported by RTC */
492         alrmar |= (tm->tm_mday << STM32_RTC_ALRMXR_DATE_SHIFT) &
493                   STM32_RTC_ALRMXR_DATE;
494         /* 24-hour format */
495         alrmar &= ~STM32_RTC_ALRMXR_PM;
496         alrmar |= (tm->tm_hour << STM32_RTC_ALRMXR_HOUR_SHIFT) &
497                   STM32_RTC_ALRMXR_HOUR;
498         alrmar |= (tm->tm_min << STM32_RTC_ALRMXR_MIN_SHIFT) &
499                   STM32_RTC_ALRMXR_MIN;
500         alrmar |= (tm->tm_sec << STM32_RTC_ALRMXR_SEC_SHIFT) &
501                   STM32_RTC_ALRMXR_SEC;
502
503         stm32_rtc_wpr_unlock(rtc);
504
505         /* Disable Alarm */
506         cr = readl_relaxed(rtc->base + regs->cr);
507         cr &= ~STM32_RTC_CR_ALRAE;
508         writel_relaxed(cr, rtc->base + regs->cr);
509
510         /*
511          * Poll Alarm write flag to be sure that Alarm update is allowed: it
512          * takes around 2 rtc_ck clock cycles
513          */
514         ret = readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
515                                                 isr,
516                                                 (isr & STM32_RTC_ISR_ALRAWF),
517                                                 10, 100000);
518
519         if (ret) {
520                 dev_err(dev, "Alarm update not allowed\n");
521                 goto end;
522         }
523
524         /* Write to Alarm register */
525         writel_relaxed(alrmar, rtc->base + regs->alrmar);
526
527         stm32_rtc_alarm_irq_enable(dev, alrm->enabled);
528 end:
529         stm32_rtc_wpr_lock(rtc);
530
531         return ret;
532 }
533
534 static const struct rtc_class_ops stm32_rtc_ops = {
535         .read_time      = stm32_rtc_read_time,
536         .set_time       = stm32_rtc_set_time,
537         .read_alarm     = stm32_rtc_read_alarm,
538         .set_alarm      = stm32_rtc_set_alarm,
539         .alarm_irq_enable = stm32_rtc_alarm_irq_enable,
540 };
541
542 static void stm32_rtc_clear_events(struct stm32_rtc *rtc,
543                                    unsigned int flags)
544 {
545         const struct stm32_rtc_registers *regs = &rtc->data->regs;
546
547         /* Flags are cleared by writing 0 in RTC_ISR */
548         writel_relaxed(readl_relaxed(rtc->base + regs->isr) & ~flags,
549                        rtc->base + regs->isr);
550 }
551
552 static const struct stm32_rtc_data stm32_rtc_data = {
553         .has_pclk = false,
554         .need_dbp = true,
555         .need_accuracy = false,
556         .regs = {
557                 .tr = 0x00,
558                 .dr = 0x04,
559                 .cr = 0x08,
560                 .isr = 0x0C,
561                 .prer = 0x10,
562                 .alrmar = 0x1C,
563                 .wpr = 0x24,
564                 .sr = 0x0C, /* set to ISR offset to ease alarm management */
565                 .scr = UNDEF_REG,
566                 .verr = UNDEF_REG,
567         },
568         .events = {
569                 .alra = STM32_RTC_ISR_ALRAF,
570         },
571         .clear_events = stm32_rtc_clear_events,
572 };
573
574 static const struct stm32_rtc_data stm32h7_rtc_data = {
575         .has_pclk = true,
576         .need_dbp = true,
577         .need_accuracy = false,
578         .regs = {
579                 .tr = 0x00,
580                 .dr = 0x04,
581                 .cr = 0x08,
582                 .isr = 0x0C,
583                 .prer = 0x10,
584                 .alrmar = 0x1C,
585                 .wpr = 0x24,
586                 .sr = 0x0C, /* set to ISR offset to ease alarm management */
587                 .scr = UNDEF_REG,
588                 .verr = UNDEF_REG,
589         },
590         .events = {
591                 .alra = STM32_RTC_ISR_ALRAF,
592         },
593         .clear_events = stm32_rtc_clear_events,
594 };
595
596 static void stm32mp1_rtc_clear_events(struct stm32_rtc *rtc,
597                                       unsigned int flags)
598 {
599         struct stm32_rtc_registers regs = rtc->data->regs;
600
601         /* Flags are cleared by writing 1 in RTC_SCR */
602         writel_relaxed(flags, rtc->base + regs.scr);
603 }
604
605 static const struct stm32_rtc_data stm32mp1_data = {
606         .has_pclk = true,
607         .need_dbp = false,
608         .need_accuracy = true,
609         .regs = {
610                 .tr = 0x00,
611                 .dr = 0x04,
612                 .cr = 0x18,
613                 .isr = 0x0C, /* named RTC_ICSR on stm32mp1 */
614                 .prer = 0x10,
615                 .alrmar = 0x40,
616                 .wpr = 0x24,
617                 .sr = 0x50,
618                 .scr = 0x5C,
619                 .verr = 0x3F4,
620         },
621         .events = {
622                 .alra = STM32_RTC_SR_ALRA,
623         },
624         .clear_events = stm32mp1_rtc_clear_events,
625 };
626
627 static const struct of_device_id stm32_rtc_of_match[] = {
628         { .compatible = "st,stm32-rtc", .data = &stm32_rtc_data },
629         { .compatible = "st,stm32h7-rtc", .data = &stm32h7_rtc_data },
630         { .compatible = "st,stm32mp1-rtc", .data = &stm32mp1_data },
631         {}
632 };
633 MODULE_DEVICE_TABLE(of, stm32_rtc_of_match);
634
635 static int stm32_rtc_init(struct platform_device *pdev,
636                           struct stm32_rtc *rtc)
637 {
638         const struct stm32_rtc_registers *regs = &rtc->data->regs;
639         unsigned int prer, pred_a, pred_s, pred_a_max, pred_s_max, cr;
640         unsigned int rate;
641         int ret;
642
643         rate = clk_get_rate(rtc->rtc_ck);
644
645         /* Find prediv_a and prediv_s to obtain the 1Hz calendar clock */
646         pred_a_max = STM32_RTC_PRER_PRED_A >> STM32_RTC_PRER_PRED_A_SHIFT;
647         pred_s_max = STM32_RTC_PRER_PRED_S >> STM32_RTC_PRER_PRED_S_SHIFT;
648
649         if (rate > (pred_a_max + 1) * (pred_s_max + 1)) {
650                 dev_err(&pdev->dev, "rtc_ck rate is too high: %dHz\n", rate);
651                 return -EINVAL;
652         }
653
654         if (rtc->data->need_accuracy) {
655                 for (pred_a = 0; pred_a <= pred_a_max; pred_a++) {
656                         pred_s = (rate / (pred_a + 1)) - 1;
657
658                         if (pred_s <= pred_s_max && ((pred_s + 1) * (pred_a + 1)) == rate)
659                                 break;
660                 }
661         } else {
662                 for (pred_a = pred_a_max; pred_a + 1 > 0; pred_a--) {
663                         pred_s = (rate / (pred_a + 1)) - 1;
664
665                         if (((pred_s + 1) * (pred_a + 1)) == rate)
666                                 break;
667                 }
668         }
669
670         /*
671          * Can't find a 1Hz, so give priority to RTC power consumption
672          * by choosing the higher possible value for prediv_a
673          */
674         if (pred_s > pred_s_max || pred_a > pred_a_max) {
675                 pred_a = pred_a_max;
676                 pred_s = (rate / (pred_a + 1)) - 1;
677
678                 dev_warn(&pdev->dev, "rtc_ck is %s\n",
679                          (rate < ((pred_a + 1) * (pred_s + 1))) ?
680                          "fast" : "slow");
681         }
682
683         cr = readl_relaxed(rtc->base + regs->cr);
684
685         prer = readl_relaxed(rtc->base + regs->prer);
686         prer &= STM32_RTC_PRER_PRED_S | STM32_RTC_PRER_PRED_A;
687
688         pred_s = (pred_s << STM32_RTC_PRER_PRED_S_SHIFT) &
689                  STM32_RTC_PRER_PRED_S;
690         pred_a = (pred_a << STM32_RTC_PRER_PRED_A_SHIFT) &
691                  STM32_RTC_PRER_PRED_A;
692
693         /* quit if there is nothing to initialize */
694         if ((cr & STM32_RTC_CR_FMT) == 0 && prer == (pred_s | pred_a))
695                 return 0;
696
697         stm32_rtc_wpr_unlock(rtc);
698
699         ret = stm32_rtc_enter_init_mode(rtc);
700         if (ret) {
701                 dev_err(&pdev->dev,
702                         "Can't enter in init mode. Prescaler config failed.\n");
703                 goto end;
704         }
705
706         writel_relaxed(pred_s, rtc->base + regs->prer);
707         writel_relaxed(pred_a | pred_s, rtc->base + regs->prer);
708
709         /* Force 24h time format */
710         cr &= ~STM32_RTC_CR_FMT;
711         writel_relaxed(cr, rtc->base + regs->cr);
712
713         stm32_rtc_exit_init_mode(rtc);
714
715         ret = stm32_rtc_wait_sync(rtc);
716 end:
717         stm32_rtc_wpr_lock(rtc);
718
719         return ret;
720 }
721
722 static int stm32_rtc_probe(struct platform_device *pdev)
723 {
724         struct stm32_rtc *rtc;
725         const struct stm32_rtc_registers *regs;
726         int ret;
727
728         rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
729         if (!rtc)
730                 return -ENOMEM;
731
732         rtc->base = devm_platform_ioremap_resource(pdev, 0);
733         if (IS_ERR(rtc->base))
734                 return PTR_ERR(rtc->base);
735
736         rtc->data = (struct stm32_rtc_data *)
737                     of_device_get_match_data(&pdev->dev);
738         regs = &rtc->data->regs;
739
740         if (rtc->data->need_dbp) {
741                 rtc->dbp = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
742                                                            "st,syscfg");
743                 if (IS_ERR(rtc->dbp)) {
744                         dev_err(&pdev->dev, "no st,syscfg\n");
745                         return PTR_ERR(rtc->dbp);
746                 }
747
748                 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
749                                                  1, &rtc->dbp_reg);
750                 if (ret) {
751                         dev_err(&pdev->dev, "can't read DBP register offset\n");
752                         return ret;
753                 }
754
755                 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
756                                                  2, &rtc->dbp_mask);
757                 if (ret) {
758                         dev_err(&pdev->dev, "can't read DBP register mask\n");
759                         return ret;
760                 }
761         }
762
763         if (!rtc->data->has_pclk) {
764                 rtc->pclk = NULL;
765                 rtc->rtc_ck = devm_clk_get(&pdev->dev, NULL);
766         } else {
767                 rtc->pclk = devm_clk_get(&pdev->dev, "pclk");
768                 if (IS_ERR(rtc->pclk))
769                         return dev_err_probe(&pdev->dev, PTR_ERR(rtc->pclk), "no pclk clock");
770
771                 rtc->rtc_ck = devm_clk_get(&pdev->dev, "rtc_ck");
772         }
773         if (IS_ERR(rtc->rtc_ck))
774                 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_ck), "no rtc_ck clock");
775
776         if (rtc->data->has_pclk) {
777                 ret = clk_prepare_enable(rtc->pclk);
778                 if (ret)
779                         return ret;
780         }
781
782         ret = clk_prepare_enable(rtc->rtc_ck);
783         if (ret)
784                 goto err_no_rtc_ck;
785
786         if (rtc->data->need_dbp)
787                 regmap_update_bits(rtc->dbp, rtc->dbp_reg,
788                                    rtc->dbp_mask, rtc->dbp_mask);
789
790         /*
791          * After a system reset, RTC_ISR.INITS flag can be read to check if
792          * the calendar has been initialized or not. INITS flag is reset by a
793          * power-on reset (no vbat, no power-supply). It is not reset if
794          * rtc_ck parent clock has changed (so RTC prescalers need to be
795          * changed). That's why we cannot rely on this flag to know if RTC
796          * init has to be done.
797          */
798         ret = stm32_rtc_init(pdev, rtc);
799         if (ret)
800                 goto err;
801
802         rtc->irq_alarm = platform_get_irq(pdev, 0);
803         if (rtc->irq_alarm <= 0) {
804                 ret = rtc->irq_alarm;
805                 goto err;
806         }
807
808         ret = device_init_wakeup(&pdev->dev, true);
809         if (ret)
810                 goto err;
811
812         ret = dev_pm_set_wake_irq(&pdev->dev, rtc->irq_alarm);
813         if (ret)
814                 goto err;
815
816         platform_set_drvdata(pdev, rtc);
817
818         rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
819                                                 &stm32_rtc_ops, THIS_MODULE);
820         if (IS_ERR(rtc->rtc_dev)) {
821                 ret = PTR_ERR(rtc->rtc_dev);
822                 dev_err(&pdev->dev, "rtc device registration failed, err=%d\n",
823                         ret);
824                 goto err;
825         }
826
827         /* Handle RTC alarm interrupts */
828         ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_alarm, NULL,
829                                         stm32_rtc_alarm_irq, IRQF_ONESHOT,
830                                         pdev->name, rtc);
831         if (ret) {
832                 dev_err(&pdev->dev, "IRQ%d (alarm interrupt) already claimed\n",
833                         rtc->irq_alarm);
834                 goto err;
835         }
836
837         /*
838          * If INITS flag is reset (calendar year field set to 0x00), calendar
839          * must be initialized
840          */
841         if (!(readl_relaxed(rtc->base + regs->isr) & STM32_RTC_ISR_INITS))
842                 dev_warn(&pdev->dev, "Date/Time must be initialized\n");
843
844         if (regs->verr != UNDEF_REG) {
845                 u32 ver = readl_relaxed(rtc->base + regs->verr);
846
847                 dev_info(&pdev->dev, "registered rev:%d.%d\n",
848                          (ver >> STM32_RTC_VERR_MAJREV_SHIFT) & 0xF,
849                          (ver >> STM32_RTC_VERR_MINREV_SHIFT) & 0xF);
850         }
851
852         return 0;
853
854 err:
855         clk_disable_unprepare(rtc->rtc_ck);
856 err_no_rtc_ck:
857         if (rtc->data->has_pclk)
858                 clk_disable_unprepare(rtc->pclk);
859
860         if (rtc->data->need_dbp)
861                 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
862
863         dev_pm_clear_wake_irq(&pdev->dev);
864         device_init_wakeup(&pdev->dev, false);
865
866         return ret;
867 }
868
869 static void stm32_rtc_remove(struct platform_device *pdev)
870 {
871         struct stm32_rtc *rtc = platform_get_drvdata(pdev);
872         const struct stm32_rtc_registers *regs = &rtc->data->regs;
873         unsigned int cr;
874
875         /* Disable interrupts */
876         stm32_rtc_wpr_unlock(rtc);
877         cr = readl_relaxed(rtc->base + regs->cr);
878         cr &= ~STM32_RTC_CR_ALRAIE;
879         writel_relaxed(cr, rtc->base + regs->cr);
880         stm32_rtc_wpr_lock(rtc);
881
882         clk_disable_unprepare(rtc->rtc_ck);
883         if (rtc->data->has_pclk)
884                 clk_disable_unprepare(rtc->pclk);
885
886         /* Enable backup domain write protection if needed */
887         if (rtc->data->need_dbp)
888                 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
889
890         dev_pm_clear_wake_irq(&pdev->dev);
891         device_init_wakeup(&pdev->dev, false);
892 }
893
894 static int stm32_rtc_suspend(struct device *dev)
895 {
896         struct stm32_rtc *rtc = dev_get_drvdata(dev);
897
898         if (rtc->data->has_pclk)
899                 clk_disable_unprepare(rtc->pclk);
900
901         return 0;
902 }
903
904 static int stm32_rtc_resume(struct device *dev)
905 {
906         struct stm32_rtc *rtc = dev_get_drvdata(dev);
907         int ret = 0;
908
909         if (rtc->data->has_pclk) {
910                 ret = clk_prepare_enable(rtc->pclk);
911                 if (ret)
912                         return ret;
913         }
914
915         ret = stm32_rtc_wait_sync(rtc);
916         if (ret < 0) {
917                 if (rtc->data->has_pclk)
918                         clk_disable_unprepare(rtc->pclk);
919                 return ret;
920         }
921
922         return ret;
923 }
924
925 static const struct dev_pm_ops stm32_rtc_pm_ops = {
926         NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32_rtc_suspend, stm32_rtc_resume)
927 };
928
929 static struct platform_driver stm32_rtc_driver = {
930         .probe          = stm32_rtc_probe,
931         .remove_new     = stm32_rtc_remove,
932         .driver         = {
933                 .name   = DRIVER_NAME,
934                 .pm     = &stm32_rtc_pm_ops,
935                 .of_match_table = stm32_rtc_of_match,
936         },
937 };
938
939 module_platform_driver(stm32_rtc_driver);
940
941 MODULE_ALIAS("platform:" DRIVER_NAME);
942 MODULE_AUTHOR("Amelie Delaunay <amelie.delaunay@st.com>");
943 MODULE_DESCRIPTION("STMicroelectronics STM32 Real Time Clock driver");
944 MODULE_LICENSE("GPL v2");