rtc-stm32.c 34 KB

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