rtc-stm32.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. /*
  2. * Copyright (C) STMicroelectronics SA 2017
  3. * Author: Amelie Delaunay <amelie.delaunay@st.com> for STMicroelectronics.
  4. * License terms: GNU General Public License (GPL), version 2
  5. */
  6. #include <linux/bcd.h>
  7. #include <linux/clk.h>
  8. #include <linux/iopoll.h>
  9. #include <linux/ioport.h>
  10. #include <linux/mfd/syscon.h>
  11. #include <linux/module.h>
  12. #include <linux/of_device.h>
  13. #include <linux/regmap.h>
  14. #include <linux/rtc.h>
  15. #define DRIVER_NAME "stm32_rtc"
  16. /* STM32 RTC registers */
  17. #define STM32_RTC_TR 0x00
  18. #define STM32_RTC_DR 0x04
  19. #define STM32_RTC_CR 0x08
  20. #define STM32_RTC_ISR 0x0C
  21. #define STM32_RTC_PRER 0x10
  22. #define STM32_RTC_ALRMAR 0x1C
  23. #define STM32_RTC_WPR 0x24
  24. /* STM32_RTC_TR bit fields */
  25. #define STM32_RTC_TR_SEC_SHIFT 0
  26. #define STM32_RTC_TR_SEC GENMASK(6, 0)
  27. #define STM32_RTC_TR_MIN_SHIFT 8
  28. #define STM32_RTC_TR_MIN GENMASK(14, 8)
  29. #define STM32_RTC_TR_HOUR_SHIFT 16
  30. #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)
  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. /* STM32_RTC_ISR bit fields */
  45. #define STM32_RTC_ISR_ALRAWF BIT(0)
  46. #define STM32_RTC_ISR_INITS BIT(4)
  47. #define STM32_RTC_ISR_RSF BIT(5)
  48. #define STM32_RTC_ISR_INITF BIT(6)
  49. #define STM32_RTC_ISR_INIT BIT(7)
  50. #define STM32_RTC_ISR_ALRAF BIT(8)
  51. /* STM32_RTC_PRER bit fields */
  52. #define STM32_RTC_PRER_PRED_S_SHIFT 0
  53. #define STM32_RTC_PRER_PRED_S GENMASK(14, 0)
  54. #define STM32_RTC_PRER_PRED_A_SHIFT 16
  55. #define STM32_RTC_PRER_PRED_A GENMASK(22, 16)
  56. /* STM32_RTC_ALRMAR and STM32_RTC_ALRMBR bit fields */
  57. #define STM32_RTC_ALRMXR_SEC_SHIFT 0
  58. #define STM32_RTC_ALRMXR_SEC GENMASK(6, 0)
  59. #define STM32_RTC_ALRMXR_SEC_MASK BIT(7)
  60. #define STM32_RTC_ALRMXR_MIN_SHIFT 8
  61. #define STM32_RTC_ALRMXR_MIN GENMASK(14, 8)
  62. #define STM32_RTC_ALRMXR_MIN_MASK BIT(15)
  63. #define STM32_RTC_ALRMXR_HOUR_SHIFT 16
  64. #define STM32_RTC_ALRMXR_HOUR GENMASK(21, 16)
  65. #define STM32_RTC_ALRMXR_PM BIT(22)
  66. #define STM32_RTC_ALRMXR_HOUR_MASK BIT(23)
  67. #define STM32_RTC_ALRMXR_DATE_SHIFT 24
  68. #define STM32_RTC_ALRMXR_DATE GENMASK(29, 24)
  69. #define STM32_RTC_ALRMXR_WDSEL BIT(30)
  70. #define STM32_RTC_ALRMXR_WDAY_SHIFT 24
  71. #define STM32_RTC_ALRMXR_WDAY GENMASK(27, 24)
  72. #define STM32_RTC_ALRMXR_DATE_MASK BIT(31)
  73. /* STM32_RTC_WPR key constants */
  74. #define RTC_WPR_1ST_KEY 0xCA
  75. #define RTC_WPR_2ND_KEY 0x53
  76. #define RTC_WPR_WRONG_KEY 0xFF
  77. /*
  78. * RTC registers are protected against parasitic write access.
  79. * PWR_CR_DBP bit must be set to enable write access to RTC registers.
  80. */
  81. /* STM32_PWR_CR */
  82. #define PWR_CR 0x00
  83. /* STM32_PWR_CR bit field */
  84. #define PWR_CR_DBP BIT(8)
  85. struct stm32_rtc_data {
  86. bool has_pclk;
  87. };
  88. struct stm32_rtc {
  89. struct rtc_device *rtc_dev;
  90. void __iomem *base;
  91. struct regmap *dbp;
  92. struct stm32_rtc_data *data;
  93. struct clk *pclk;
  94. struct clk *rtc_ck;
  95. int irq_alarm;
  96. };
  97. static void stm32_rtc_wpr_unlock(struct stm32_rtc *rtc)
  98. {
  99. writel_relaxed(RTC_WPR_1ST_KEY, rtc->base + STM32_RTC_WPR);
  100. writel_relaxed(RTC_WPR_2ND_KEY, rtc->base + STM32_RTC_WPR);
  101. }
  102. static void stm32_rtc_wpr_lock(struct stm32_rtc *rtc)
  103. {
  104. writel_relaxed(RTC_WPR_WRONG_KEY, rtc->base + STM32_RTC_WPR);
  105. }
  106. static int stm32_rtc_enter_init_mode(struct stm32_rtc *rtc)
  107. {
  108. unsigned int isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  109. if (!(isr & STM32_RTC_ISR_INITF)) {
  110. isr |= STM32_RTC_ISR_INIT;
  111. writel_relaxed(isr, rtc->base + STM32_RTC_ISR);
  112. /*
  113. * It takes around 2 rtc_ck clock cycles to enter in
  114. * initialization phase mode (and have INITF flag set). As
  115. * slowest rtc_ck frequency may be 32kHz and highest should be
  116. * 1MHz, we poll every 10 us with a timeout of 100ms.
  117. */
  118. return readl_relaxed_poll_timeout_atomic(
  119. rtc->base + STM32_RTC_ISR,
  120. isr, (isr & STM32_RTC_ISR_INITF),
  121. 10, 100000);
  122. }
  123. return 0;
  124. }
  125. static void stm32_rtc_exit_init_mode(struct stm32_rtc *rtc)
  126. {
  127. unsigned int isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  128. isr &= ~STM32_RTC_ISR_INIT;
  129. writel_relaxed(isr, rtc->base + STM32_RTC_ISR);
  130. }
  131. static int stm32_rtc_wait_sync(struct stm32_rtc *rtc)
  132. {
  133. unsigned int isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  134. isr &= ~STM32_RTC_ISR_RSF;
  135. writel_relaxed(isr, rtc->base + STM32_RTC_ISR);
  136. /*
  137. * Wait for RSF to be set to ensure the calendar registers are
  138. * synchronised, it takes around 2 rtc_ck clock cycles
  139. */
  140. return readl_relaxed_poll_timeout_atomic(rtc->base + STM32_RTC_ISR,
  141. isr,
  142. (isr & STM32_RTC_ISR_RSF),
  143. 10, 100000);
  144. }
  145. static irqreturn_t stm32_rtc_alarm_irq(int irq, void *dev_id)
  146. {
  147. struct stm32_rtc *rtc = (struct stm32_rtc *)dev_id;
  148. unsigned int isr, cr;
  149. mutex_lock(&rtc->rtc_dev->ops_lock);
  150. isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  151. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  152. if ((isr & STM32_RTC_ISR_ALRAF) &&
  153. (cr & STM32_RTC_CR_ALRAIE)) {
  154. /* Alarm A flag - Alarm interrupt */
  155. dev_dbg(&rtc->rtc_dev->dev, "Alarm occurred\n");
  156. /* Pass event to the kernel */
  157. rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
  158. /* Clear event flag, otherwise new events won't be received */
  159. writel_relaxed(isr & ~STM32_RTC_ISR_ALRAF,
  160. rtc->base + STM32_RTC_ISR);
  161. }
  162. mutex_unlock(&rtc->rtc_dev->ops_lock);
  163. return IRQ_HANDLED;
  164. }
  165. /* Convert rtc_time structure from bin to bcd format */
  166. static void tm2bcd(struct rtc_time *tm)
  167. {
  168. tm->tm_sec = bin2bcd(tm->tm_sec);
  169. tm->tm_min = bin2bcd(tm->tm_min);
  170. tm->tm_hour = bin2bcd(tm->tm_hour);
  171. tm->tm_mday = bin2bcd(tm->tm_mday);
  172. tm->tm_mon = bin2bcd(tm->tm_mon + 1);
  173. tm->tm_year = bin2bcd(tm->tm_year - 100);
  174. /*
  175. * Number of days since Sunday
  176. * - on kernel side, 0=Sunday...6=Saturday
  177. * - on rtc side, 0=invalid,1=Monday...7=Sunday
  178. */
  179. tm->tm_wday = (!tm->tm_wday) ? 7 : tm->tm_wday;
  180. }
  181. /* Convert rtc_time structure from bcd to bin format */
  182. static void bcd2tm(struct rtc_time *tm)
  183. {
  184. tm->tm_sec = bcd2bin(tm->tm_sec);
  185. tm->tm_min = bcd2bin(tm->tm_min);
  186. tm->tm_hour = bcd2bin(tm->tm_hour);
  187. tm->tm_mday = bcd2bin(tm->tm_mday);
  188. tm->tm_mon = bcd2bin(tm->tm_mon) - 1;
  189. tm->tm_year = bcd2bin(tm->tm_year) + 100;
  190. /*
  191. * Number of days since Sunday
  192. * - on kernel side, 0=Sunday...6=Saturday
  193. * - on rtc side, 0=invalid,1=Monday...7=Sunday
  194. */
  195. tm->tm_wday %= 7;
  196. }
  197. static int stm32_rtc_read_time(struct device *dev, struct rtc_time *tm)
  198. {
  199. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  200. unsigned int tr, dr;
  201. /* Time and Date in BCD format */
  202. tr = readl_relaxed(rtc->base + STM32_RTC_TR);
  203. dr = readl_relaxed(rtc->base + STM32_RTC_DR);
  204. tm->tm_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
  205. tm->tm_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
  206. tm->tm_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
  207. tm->tm_mday = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
  208. tm->tm_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
  209. tm->tm_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
  210. tm->tm_wday = (dr & STM32_RTC_DR_WDAY) >> STM32_RTC_DR_WDAY_SHIFT;
  211. /* We don't report tm_yday and tm_isdst */
  212. bcd2tm(tm);
  213. return 0;
  214. }
  215. static int stm32_rtc_set_time(struct device *dev, struct rtc_time *tm)
  216. {
  217. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  218. unsigned int tr, dr;
  219. int ret = 0;
  220. tm2bcd(tm);
  221. /* Time in BCD format */
  222. tr = ((tm->tm_sec << STM32_RTC_TR_SEC_SHIFT) & STM32_RTC_TR_SEC) |
  223. ((tm->tm_min << STM32_RTC_TR_MIN_SHIFT) & STM32_RTC_TR_MIN) |
  224. ((tm->tm_hour << STM32_RTC_TR_HOUR_SHIFT) & STM32_RTC_TR_HOUR);
  225. /* Date in BCD format */
  226. dr = ((tm->tm_mday << STM32_RTC_DR_DATE_SHIFT) & STM32_RTC_DR_DATE) |
  227. ((tm->tm_mon << STM32_RTC_DR_MONTH_SHIFT) & STM32_RTC_DR_MONTH) |
  228. ((tm->tm_year << STM32_RTC_DR_YEAR_SHIFT) & STM32_RTC_DR_YEAR) |
  229. ((tm->tm_wday << STM32_RTC_DR_WDAY_SHIFT) & STM32_RTC_DR_WDAY);
  230. stm32_rtc_wpr_unlock(rtc);
  231. ret = stm32_rtc_enter_init_mode(rtc);
  232. if (ret) {
  233. dev_err(dev, "Can't enter in init mode. Set time aborted.\n");
  234. goto end;
  235. }
  236. writel_relaxed(tr, rtc->base + STM32_RTC_TR);
  237. writel_relaxed(dr, rtc->base + STM32_RTC_DR);
  238. stm32_rtc_exit_init_mode(rtc);
  239. ret = stm32_rtc_wait_sync(rtc);
  240. end:
  241. stm32_rtc_wpr_lock(rtc);
  242. return ret;
  243. }
  244. static int stm32_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  245. {
  246. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  247. struct rtc_time *tm = &alrm->time;
  248. unsigned int alrmar, cr, isr;
  249. alrmar = readl_relaxed(rtc->base + STM32_RTC_ALRMAR);
  250. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  251. isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  252. if (alrmar & STM32_RTC_ALRMXR_DATE_MASK) {
  253. /*
  254. * Date/day doesn't matter in Alarm comparison so alarm
  255. * triggers every day
  256. */
  257. tm->tm_mday = -1;
  258. tm->tm_wday = -1;
  259. } else {
  260. if (alrmar & STM32_RTC_ALRMXR_WDSEL) {
  261. /* Alarm is set to a day of week */
  262. tm->tm_mday = -1;
  263. tm->tm_wday = (alrmar & STM32_RTC_ALRMXR_WDAY) >>
  264. STM32_RTC_ALRMXR_WDAY_SHIFT;
  265. tm->tm_wday %= 7;
  266. } else {
  267. /* Alarm is set to a day of month */
  268. tm->tm_wday = -1;
  269. tm->tm_mday = (alrmar & STM32_RTC_ALRMXR_DATE) >>
  270. STM32_RTC_ALRMXR_DATE_SHIFT;
  271. }
  272. }
  273. if (alrmar & STM32_RTC_ALRMXR_HOUR_MASK) {
  274. /* Hours don't matter in Alarm comparison */
  275. tm->tm_hour = -1;
  276. } else {
  277. tm->tm_hour = (alrmar & STM32_RTC_ALRMXR_HOUR) >>
  278. STM32_RTC_ALRMXR_HOUR_SHIFT;
  279. if (alrmar & STM32_RTC_ALRMXR_PM)
  280. tm->tm_hour += 12;
  281. }
  282. if (alrmar & STM32_RTC_ALRMXR_MIN_MASK) {
  283. /* Minutes don't matter in Alarm comparison */
  284. tm->tm_min = -1;
  285. } else {
  286. tm->tm_min = (alrmar & STM32_RTC_ALRMXR_MIN) >>
  287. STM32_RTC_ALRMXR_MIN_SHIFT;
  288. }
  289. if (alrmar & STM32_RTC_ALRMXR_SEC_MASK) {
  290. /* Seconds don't matter in Alarm comparison */
  291. tm->tm_sec = -1;
  292. } else {
  293. tm->tm_sec = (alrmar & STM32_RTC_ALRMXR_SEC) >>
  294. STM32_RTC_ALRMXR_SEC_SHIFT;
  295. }
  296. bcd2tm(tm);
  297. alrm->enabled = (cr & STM32_RTC_CR_ALRAE) ? 1 : 0;
  298. alrm->pending = (isr & STM32_RTC_ISR_ALRAF) ? 1 : 0;
  299. return 0;
  300. }
  301. static int stm32_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
  302. {
  303. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  304. unsigned int isr, cr;
  305. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  306. stm32_rtc_wpr_unlock(rtc);
  307. /* We expose Alarm A to the kernel */
  308. if (enabled)
  309. cr |= (STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
  310. else
  311. cr &= ~(STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
  312. writel_relaxed(cr, rtc->base + STM32_RTC_CR);
  313. /* Clear event flag, otherwise new events won't be received */
  314. isr = readl_relaxed(rtc->base + STM32_RTC_ISR);
  315. isr &= ~STM32_RTC_ISR_ALRAF;
  316. writel_relaxed(isr, rtc->base + STM32_RTC_ISR);
  317. stm32_rtc_wpr_lock(rtc);
  318. return 0;
  319. }
  320. static int stm32_rtc_valid_alrm(struct stm32_rtc *rtc, struct rtc_time *tm)
  321. {
  322. int cur_day, cur_mon, cur_year, cur_hour, cur_min, cur_sec;
  323. unsigned int dr = readl_relaxed(rtc->base + STM32_RTC_DR);
  324. unsigned int tr = readl_relaxed(rtc->base + STM32_RTC_TR);
  325. cur_day = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
  326. cur_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
  327. cur_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
  328. cur_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
  329. cur_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
  330. cur_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
  331. /*
  332. * Assuming current date is M-D-Y H:M:S.
  333. * RTC alarm can't be set on a specific month and year.
  334. * So the valid alarm range is:
  335. * M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S
  336. * with a specific case for December...
  337. */
  338. if ((((tm->tm_year > cur_year) &&
  339. (tm->tm_mon == 0x1) && (cur_mon == 0x12)) ||
  340. ((tm->tm_year == cur_year) &&
  341. (tm->tm_mon <= cur_mon + 1))) &&
  342. ((tm->tm_mday > cur_day) ||
  343. ((tm->tm_mday == cur_day) &&
  344. ((tm->tm_hour > cur_hour) ||
  345. ((tm->tm_hour == cur_hour) && (tm->tm_min > cur_min)) ||
  346. ((tm->tm_hour == cur_hour) && (tm->tm_min == cur_min) &&
  347. (tm->tm_sec >= cur_sec))))))
  348. return 0;
  349. return -EINVAL;
  350. }
  351. static int stm32_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  352. {
  353. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  354. struct rtc_time *tm = &alrm->time;
  355. unsigned int cr, isr, alrmar;
  356. int ret = 0;
  357. tm2bcd(tm);
  358. /*
  359. * RTC alarm can't be set on a specific date, unless this date is
  360. * up to the same day of month next month.
  361. */
  362. if (stm32_rtc_valid_alrm(rtc, tm) < 0) {
  363. dev_err(dev, "Alarm can be set only on upcoming month.\n");
  364. return -EINVAL;
  365. }
  366. alrmar = 0;
  367. /* tm_year and tm_mon are not used because not supported by RTC */
  368. alrmar |= (tm->tm_mday << STM32_RTC_ALRMXR_DATE_SHIFT) &
  369. STM32_RTC_ALRMXR_DATE;
  370. /* 24-hour format */
  371. alrmar &= ~STM32_RTC_ALRMXR_PM;
  372. alrmar |= (tm->tm_hour << STM32_RTC_ALRMXR_HOUR_SHIFT) &
  373. STM32_RTC_ALRMXR_HOUR;
  374. alrmar |= (tm->tm_min << STM32_RTC_ALRMXR_MIN_SHIFT) &
  375. STM32_RTC_ALRMXR_MIN;
  376. alrmar |= (tm->tm_sec << STM32_RTC_ALRMXR_SEC_SHIFT) &
  377. STM32_RTC_ALRMXR_SEC;
  378. stm32_rtc_wpr_unlock(rtc);
  379. /* Disable Alarm */
  380. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  381. cr &= ~STM32_RTC_CR_ALRAE;
  382. writel_relaxed(cr, rtc->base + STM32_RTC_CR);
  383. /*
  384. * Poll Alarm write flag to be sure that Alarm update is allowed: it
  385. * takes around 2 rtc_ck clock cycles
  386. */
  387. ret = readl_relaxed_poll_timeout_atomic(rtc->base + STM32_RTC_ISR,
  388. isr,
  389. (isr & STM32_RTC_ISR_ALRAWF),
  390. 10, 100000);
  391. if (ret) {
  392. dev_err(dev, "Alarm update not allowed\n");
  393. goto end;
  394. }
  395. /* Write to Alarm register */
  396. writel_relaxed(alrmar, rtc->base + STM32_RTC_ALRMAR);
  397. if (alrm->enabled)
  398. stm32_rtc_alarm_irq_enable(dev, 1);
  399. else
  400. stm32_rtc_alarm_irq_enable(dev, 0);
  401. end:
  402. stm32_rtc_wpr_lock(rtc);
  403. return ret;
  404. }
  405. static const struct rtc_class_ops stm32_rtc_ops = {
  406. .read_time = stm32_rtc_read_time,
  407. .set_time = stm32_rtc_set_time,
  408. .read_alarm = stm32_rtc_read_alarm,
  409. .set_alarm = stm32_rtc_set_alarm,
  410. .alarm_irq_enable = stm32_rtc_alarm_irq_enable,
  411. };
  412. static const struct stm32_rtc_data stm32_rtc_data = {
  413. .has_pclk = false,
  414. };
  415. static const struct stm32_rtc_data stm32h7_rtc_data = {
  416. .has_pclk = true,
  417. };
  418. static const struct of_device_id stm32_rtc_of_match[] = {
  419. { .compatible = "st,stm32-rtc", .data = &stm32_rtc_data },
  420. { .compatible = "st,stm32h7-rtc", .data = &stm32h7_rtc_data },
  421. {}
  422. };
  423. MODULE_DEVICE_TABLE(of, stm32_rtc_of_match);
  424. static int stm32_rtc_init(struct platform_device *pdev,
  425. struct stm32_rtc *rtc)
  426. {
  427. unsigned int prer, pred_a, pred_s, pred_a_max, pred_s_max, cr;
  428. unsigned int rate;
  429. int ret = 0;
  430. rate = clk_get_rate(rtc->rtc_ck);
  431. /* Find prediv_a and prediv_s to obtain the 1Hz calendar clock */
  432. pred_a_max = STM32_RTC_PRER_PRED_A >> STM32_RTC_PRER_PRED_A_SHIFT;
  433. pred_s_max = STM32_RTC_PRER_PRED_S >> STM32_RTC_PRER_PRED_S_SHIFT;
  434. for (pred_a = pred_a_max; pred_a + 1 > 0; pred_a--) {
  435. pred_s = (rate / (pred_a + 1)) - 1;
  436. if (((pred_s + 1) * (pred_a + 1)) == rate)
  437. break;
  438. }
  439. /*
  440. * Can't find a 1Hz, so give priority to RTC power consumption
  441. * by choosing the higher possible value for prediv_a
  442. */
  443. if ((pred_s > pred_s_max) || (pred_a > pred_a_max)) {
  444. pred_a = pred_a_max;
  445. pred_s = (rate / (pred_a + 1)) - 1;
  446. dev_warn(&pdev->dev, "rtc_ck is %s\n",
  447. (rate < ((pred_a + 1) * (pred_s + 1))) ?
  448. "fast" : "slow");
  449. }
  450. stm32_rtc_wpr_unlock(rtc);
  451. ret = stm32_rtc_enter_init_mode(rtc);
  452. if (ret) {
  453. dev_err(&pdev->dev,
  454. "Can't enter in init mode. Prescaler config failed.\n");
  455. goto end;
  456. }
  457. prer = (pred_s << STM32_RTC_PRER_PRED_S_SHIFT) & STM32_RTC_PRER_PRED_S;
  458. writel_relaxed(prer, rtc->base + STM32_RTC_PRER);
  459. prer |= (pred_a << STM32_RTC_PRER_PRED_A_SHIFT) & STM32_RTC_PRER_PRED_A;
  460. writel_relaxed(prer, rtc->base + STM32_RTC_PRER);
  461. /* Force 24h time format */
  462. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  463. cr &= ~STM32_RTC_CR_FMT;
  464. writel_relaxed(cr, rtc->base + STM32_RTC_CR);
  465. stm32_rtc_exit_init_mode(rtc);
  466. ret = stm32_rtc_wait_sync(rtc);
  467. end:
  468. stm32_rtc_wpr_lock(rtc);
  469. return ret;
  470. }
  471. static int stm32_rtc_probe(struct platform_device *pdev)
  472. {
  473. struct stm32_rtc *rtc;
  474. struct resource *res;
  475. const struct of_device_id *match;
  476. int ret;
  477. rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
  478. if (!rtc)
  479. return -ENOMEM;
  480. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  481. rtc->base = devm_ioremap_resource(&pdev->dev, res);
  482. if (IS_ERR(rtc->base))
  483. return PTR_ERR(rtc->base);
  484. rtc->dbp = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
  485. "st,syscfg");
  486. if (IS_ERR(rtc->dbp)) {
  487. dev_err(&pdev->dev, "no st,syscfg\n");
  488. return PTR_ERR(rtc->dbp);
  489. }
  490. match = of_match_device(stm32_rtc_of_match, &pdev->dev);
  491. rtc->data = (struct stm32_rtc_data *)match->data;
  492. if (!rtc->data->has_pclk) {
  493. rtc->pclk = NULL;
  494. rtc->rtc_ck = devm_clk_get(&pdev->dev, NULL);
  495. } else {
  496. rtc->pclk = devm_clk_get(&pdev->dev, "pclk");
  497. if (IS_ERR(rtc->pclk)) {
  498. dev_err(&pdev->dev, "no pclk clock");
  499. return PTR_ERR(rtc->pclk);
  500. }
  501. rtc->rtc_ck = devm_clk_get(&pdev->dev, "rtc_ck");
  502. }
  503. if (IS_ERR(rtc->rtc_ck)) {
  504. dev_err(&pdev->dev, "no rtc_ck clock");
  505. return PTR_ERR(rtc->rtc_ck);
  506. }
  507. if (rtc->data->has_pclk) {
  508. ret = clk_prepare_enable(rtc->pclk);
  509. if (ret)
  510. return ret;
  511. }
  512. ret = clk_prepare_enable(rtc->rtc_ck);
  513. if (ret)
  514. goto err;
  515. regmap_update_bits(rtc->dbp, PWR_CR, PWR_CR_DBP, PWR_CR_DBP);
  516. /*
  517. * After a system reset, RTC_ISR.INITS flag can be read to check if
  518. * the calendar has been initalized or not. INITS flag is reset by a
  519. * power-on reset (no vbat, no power-supply). It is not reset if
  520. * rtc_ck parent clock has changed (so RTC prescalers need to be
  521. * changed). That's why we cannot rely on this flag to know if RTC
  522. * init has to be done.
  523. */
  524. ret = stm32_rtc_init(pdev, rtc);
  525. if (ret)
  526. goto err;
  527. rtc->irq_alarm = platform_get_irq(pdev, 0);
  528. if (rtc->irq_alarm <= 0) {
  529. dev_err(&pdev->dev, "no alarm irq\n");
  530. ret = rtc->irq_alarm;
  531. goto err;
  532. }
  533. platform_set_drvdata(pdev, rtc);
  534. ret = device_init_wakeup(&pdev->dev, true);
  535. if (ret)
  536. dev_warn(&pdev->dev,
  537. "alarm won't be able to wake up the system");
  538. rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
  539. &stm32_rtc_ops, THIS_MODULE);
  540. if (IS_ERR(rtc->rtc_dev)) {
  541. ret = PTR_ERR(rtc->rtc_dev);
  542. dev_err(&pdev->dev, "rtc device registration failed, err=%d\n",
  543. ret);
  544. goto err;
  545. }
  546. /* Handle RTC alarm interrupts */
  547. ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_alarm, NULL,
  548. stm32_rtc_alarm_irq,
  549. IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  550. pdev->name, rtc);
  551. if (ret) {
  552. dev_err(&pdev->dev, "IRQ%d (alarm interrupt) already claimed\n",
  553. rtc->irq_alarm);
  554. goto err;
  555. }
  556. /*
  557. * If INITS flag is reset (calendar year field set to 0x00), calendar
  558. * must be initialized
  559. */
  560. if (!(readl_relaxed(rtc->base + STM32_RTC_ISR) & STM32_RTC_ISR_INITS))
  561. dev_warn(&pdev->dev, "Date/Time must be initialized\n");
  562. return 0;
  563. err:
  564. if (rtc->data->has_pclk)
  565. clk_disable_unprepare(rtc->pclk);
  566. clk_disable_unprepare(rtc->rtc_ck);
  567. regmap_update_bits(rtc->dbp, PWR_CR, PWR_CR_DBP, 0);
  568. device_init_wakeup(&pdev->dev, false);
  569. return ret;
  570. }
  571. static int stm32_rtc_remove(struct platform_device *pdev)
  572. {
  573. struct stm32_rtc *rtc = platform_get_drvdata(pdev);
  574. unsigned int cr;
  575. /* Disable interrupts */
  576. stm32_rtc_wpr_unlock(rtc);
  577. cr = readl_relaxed(rtc->base + STM32_RTC_CR);
  578. cr &= ~STM32_RTC_CR_ALRAIE;
  579. writel_relaxed(cr, rtc->base + STM32_RTC_CR);
  580. stm32_rtc_wpr_lock(rtc);
  581. clk_disable_unprepare(rtc->rtc_ck);
  582. if (rtc->data->has_pclk)
  583. clk_disable_unprepare(rtc->pclk);
  584. /* Enable backup domain write protection */
  585. regmap_update_bits(rtc->dbp, PWR_CR, PWR_CR_DBP, 0);
  586. device_init_wakeup(&pdev->dev, false);
  587. return 0;
  588. }
  589. #ifdef CONFIG_PM_SLEEP
  590. static int stm32_rtc_suspend(struct device *dev)
  591. {
  592. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  593. if (rtc->data->has_pclk)
  594. clk_disable_unprepare(rtc->pclk);
  595. if (device_may_wakeup(dev))
  596. return enable_irq_wake(rtc->irq_alarm);
  597. return 0;
  598. }
  599. static int stm32_rtc_resume(struct device *dev)
  600. {
  601. struct stm32_rtc *rtc = dev_get_drvdata(dev);
  602. int ret = 0;
  603. if (rtc->data->has_pclk) {
  604. ret = clk_prepare_enable(rtc->pclk);
  605. if (ret)
  606. return ret;
  607. }
  608. ret = stm32_rtc_wait_sync(rtc);
  609. if (ret < 0)
  610. return ret;
  611. if (device_may_wakeup(dev))
  612. return disable_irq_wake(rtc->irq_alarm);
  613. return ret;
  614. }
  615. #endif
  616. static SIMPLE_DEV_PM_OPS(stm32_rtc_pm_ops,
  617. stm32_rtc_suspend, stm32_rtc_resume);
  618. static struct platform_driver stm32_rtc_driver = {
  619. .probe = stm32_rtc_probe,
  620. .remove = stm32_rtc_remove,
  621. .driver = {
  622. .name = DRIVER_NAME,
  623. .pm = &stm32_rtc_pm_ops,
  624. .of_match_table = stm32_rtc_of_match,
  625. },
  626. };
  627. module_platform_driver(stm32_rtc_driver);
  628. MODULE_ALIAS("platform:" DRIVER_NAME);
  629. MODULE_AUTHOR("Amelie Delaunay <amelie.delaunay@st.com>");
  630. MODULE_DESCRIPTION("STMicroelectronics STM32 Real Time Clock driver");
  631. MODULE_LICENSE("GPL v2");