rtc-ti-k3.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Texas Instruments K3 RTC driver
  4. *
  5. * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
  6. */
  7. #include <linux/clk.h>
  8. #include <linux/delay.h>
  9. #include <linux/mod_devicetable.h>
  10. #include <linux/module.h>
  11. #include <linux/of_device.h>
  12. #include <linux/platform_device.h>
  13. #include <linux/sys_soc.h>
  14. #include <linux/property.h>
  15. #include <linux/regmap.h>
  16. #include <linux/rtc.h>
  17. /* Registers */
  18. #define REG_K3RTC_S_CNT_LSW 0x08
  19. #define REG_K3RTC_S_CNT_MSW 0x0c
  20. #define REG_K3RTC_COMP 0x10
  21. #define REG_K3RTC_ON_OFF_S_CNT_LSW 0x20
  22. #define REG_K3RTC_ON_OFF_S_CNT_MSW 0x24
  23. #define REG_K3RTC_SCRATCH0 0x30
  24. #define REG_K3RTC_SCRATCH7 0x4c
  25. #define REG_K3RTC_GENERAL_CTL 0x50
  26. #define REG_K3RTC_IRQSTATUS_RAW_SYS 0x54
  27. #define REG_K3RTC_IRQSTATUS_SYS 0x58
  28. #define REG_K3RTC_IRQENABLE_SET_SYS 0x5c
  29. #define REG_K3RTC_IRQENABLE_CLR_SYS 0x60
  30. #define REG_K3RTC_SYNCPEND 0x68
  31. #define REG_K3RTC_KICK0 0x70
  32. #define REG_K3RTC_KICK1 0x74
  33. /* Freeze when lsw is read and unfreeze when msw is read */
  34. #define K3RTC_CNT_FMODE_S_CNT_VALUE (0x2 << 24)
  35. /* Magic values for lock/unlock */
  36. #define K3RTC_KICK0_UNLOCK_VALUE 0x83e70b13
  37. #define K3RTC_KICK1_UNLOCK_VALUE 0x95a4f1e0
  38. /* Multiplier for ppb conversions */
  39. #define K3RTC_PPB_MULT (1000000000LL)
  40. /* Min and max values supported with 'offset' interface (swapped sign) */
  41. #define K3RTC_MIN_OFFSET (-277761)
  42. #define K3RTC_MAX_OFFSET (277778)
  43. static const struct regmap_config ti_k3_rtc_regmap_config = {
  44. .name = "peripheral-registers",
  45. .reg_bits = 32,
  46. .val_bits = 32,
  47. .reg_stride = 4,
  48. .max_register = REG_K3RTC_KICK1,
  49. };
  50. enum ti_k3_rtc_fields {
  51. K3RTC_KICK0,
  52. K3RTC_KICK1,
  53. K3RTC_S_CNT_LSW,
  54. K3RTC_S_CNT_MSW,
  55. K3RTC_O32K_OSC_DEP_EN,
  56. K3RTC_UNLOCK,
  57. K3RTC_CNT_FMODE,
  58. K3RTC_PEND,
  59. K3RTC_RELOAD_FROM_BBD,
  60. K3RTC_COMP,
  61. K3RTC_ALM_S_CNT_LSW,
  62. K3RTC_ALM_S_CNT_MSW,
  63. K3RTC_IRQ_STATUS_RAW,
  64. K3RTC_IRQ_STATUS,
  65. K3RTC_IRQ_ENABLE_SET,
  66. K3RTC_IRQ_ENABLE_CLR,
  67. K3RTC_IRQ_STATUS_ALT,
  68. K3RTC_IRQ_ENABLE_CLR_ALT,
  69. K3_RTC_MAX_FIELDS
  70. };
  71. static const struct reg_field ti_rtc_reg_fields[] = {
  72. [K3RTC_KICK0] = REG_FIELD(REG_K3RTC_KICK0, 0, 31),
  73. [K3RTC_KICK1] = REG_FIELD(REG_K3RTC_KICK1, 0, 31),
  74. [K3RTC_S_CNT_LSW] = REG_FIELD(REG_K3RTC_S_CNT_LSW, 0, 31),
  75. [K3RTC_S_CNT_MSW] = REG_FIELD(REG_K3RTC_S_CNT_MSW, 0, 15),
  76. [K3RTC_O32K_OSC_DEP_EN] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 21, 21),
  77. [K3RTC_UNLOCK] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 23, 23),
  78. [K3RTC_CNT_FMODE] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 24, 25),
  79. [K3RTC_PEND] = REG_FIELD(REG_K3RTC_SYNCPEND, 0, 1),
  80. [K3RTC_RELOAD_FROM_BBD] = REG_FIELD(REG_K3RTC_SYNCPEND, 31, 31),
  81. [K3RTC_COMP] = REG_FIELD(REG_K3RTC_COMP, 0, 31),
  82. /* We use on to off as alarm trigger */
  83. [K3RTC_ALM_S_CNT_LSW] = REG_FIELD(REG_K3RTC_ON_OFF_S_CNT_LSW, 0, 31),
  84. [K3RTC_ALM_S_CNT_MSW] = REG_FIELD(REG_K3RTC_ON_OFF_S_CNT_MSW, 0, 15),
  85. [K3RTC_IRQ_STATUS_RAW] = REG_FIELD(REG_K3RTC_IRQSTATUS_RAW_SYS, 0, 0),
  86. [K3RTC_IRQ_STATUS] = REG_FIELD(REG_K3RTC_IRQSTATUS_SYS, 0, 0),
  87. [K3RTC_IRQ_ENABLE_SET] = REG_FIELD(REG_K3RTC_IRQENABLE_SET_SYS, 0, 0),
  88. [K3RTC_IRQ_ENABLE_CLR] = REG_FIELD(REG_K3RTC_IRQENABLE_CLR_SYS, 0, 0),
  89. /* Off to on is alternate */
  90. [K3RTC_IRQ_STATUS_ALT] = REG_FIELD(REG_K3RTC_IRQSTATUS_SYS, 1, 1),
  91. [K3RTC_IRQ_ENABLE_CLR_ALT] = REG_FIELD(REG_K3RTC_IRQENABLE_CLR_SYS, 1, 1),
  92. };
  93. /**
  94. * struct ti_k3_rtc - Private data for ti-k3-rtc
  95. * @irq: IRQ
  96. * @sync_timeout_us: data sync timeout period in uSec
  97. * @rate_32k: 32k clock rate in Hz
  98. * @rtc_dev: rtc device
  99. * @regmap: rtc mmio regmap
  100. * @r_fields: rtc register fields
  101. */
  102. struct ti_k3_rtc {
  103. unsigned int irq;
  104. u32 sync_timeout_us;
  105. unsigned long rate_32k;
  106. struct rtc_device *rtc_dev;
  107. struct regmap *regmap;
  108. struct regmap_field *r_fields[K3_RTC_MAX_FIELDS];
  109. };
  110. static int k3rtc_field_read(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f)
  111. {
  112. int ret;
  113. int val;
  114. ret = regmap_field_read(priv->r_fields[f], &val);
  115. /*
  116. * We shouldn't be seeing regmap fail on us for mmio reads
  117. * This is possible if clock context fails, but that isn't the case for us
  118. */
  119. if (WARN_ON_ONCE(ret))
  120. return ret;
  121. return val;
  122. }
  123. static void k3rtc_field_write(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f, u32 val)
  124. {
  125. regmap_field_write(priv->r_fields[f], val);
  126. }
  127. /**
  128. * k3rtc_fence - Ensure a register sync took place between the two domains
  129. * @priv: pointer to priv data
  130. *
  131. * Return: 0 if the sync took place, else returns -ETIMEDOUT
  132. */
  133. static int k3rtc_fence(struct ti_k3_rtc *priv)
  134. {
  135. int ret;
  136. ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_PEND], ret,
  137. !ret, 2, priv->sync_timeout_us);
  138. return ret;
  139. }
  140. static inline int k3rtc_check_unlocked(struct ti_k3_rtc *priv)
  141. {
  142. int ret;
  143. ret = k3rtc_field_read(priv, K3RTC_UNLOCK);
  144. if (ret < 0)
  145. return ret;
  146. return (ret) ? 0 : 1;
  147. }
  148. static int k3rtc_unlock_rtc(struct ti_k3_rtc *priv)
  149. {
  150. int ret;
  151. ret = k3rtc_check_unlocked(priv);
  152. if (!ret)
  153. return ret;
  154. k3rtc_field_write(priv, K3RTC_KICK0, K3RTC_KICK0_UNLOCK_VALUE);
  155. k3rtc_field_write(priv, K3RTC_KICK1, K3RTC_KICK1_UNLOCK_VALUE);
  156. /* Skip fence since we are going to check the unlock bit as fence */
  157. ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_UNLOCK], ret,
  158. ret, 2, priv->sync_timeout_us);
  159. return ret;
  160. }
  161. /*
  162. * This is the list of SoCs affected by TI's i2327 errata causing the RTC
  163. * state-machine to break if not unlocked fast enough during boot. These
  164. * SoCs must have the bootloader unlock this device very early in the
  165. * boot-flow before we (Linux) can use this device.
  166. */
  167. static const struct soc_device_attribute has_erratum_i2327[] = {
  168. { .family = "AM62X", .revision = "SR1.0" },
  169. { /* sentinel */ }
  170. };
  171. static int k3rtc_configure(struct device *dev)
  172. {
  173. int ret;
  174. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  175. /*
  176. * HWBUG: The compare state machine is broken if the RTC module
  177. * is NOT unlocked in under one second of boot - which is pretty long
  178. * time from the perspective of Linux driver (module load, u-boot
  179. * shell all can take much longer than this.
  180. *
  181. * In such occurrence, it is assumed that the RTC module is unusable
  182. */
  183. if (soc_device_match(has_erratum_i2327)) {
  184. ret = k3rtc_check_unlocked(priv);
  185. /* If there is an error OR if we are locked, return error */
  186. if (ret) {
  187. dev_err(dev,
  188. HW_ERR "Erratum i2327 unlock QUIRK! Cannot operate!!\n");
  189. return -EFAULT;
  190. }
  191. } else {
  192. /* May need to explicitly unlock first time */
  193. ret = k3rtc_unlock_rtc(priv);
  194. if (ret) {
  195. dev_err(dev, "Failed to unlock(%d)!\n", ret);
  196. return ret;
  197. }
  198. }
  199. /* Enable Shadow register sync on 32k clock boundary */
  200. k3rtc_field_write(priv, K3RTC_O32K_OSC_DEP_EN, 0x1);
  201. /*
  202. * Wait at least clock sync time before proceeding further programming.
  203. * This ensures that the 32k based sync is active.
  204. */
  205. usleep_range(priv->sync_timeout_us, priv->sync_timeout_us + 5);
  206. /* We need to ensure fence here to make sure sync here */
  207. ret = k3rtc_fence(priv);
  208. if (ret) {
  209. dev_err(dev,
  210. "Failed fence osc_dep enable(%d) - is 32k clk working?!\n", ret);
  211. return ret;
  212. }
  213. /*
  214. * FMODE setting: Reading lower seconds will freeze value on higher
  215. * seconds. This also implies that we must *ALWAYS* read lower seconds
  216. * prior to reading higher seconds
  217. */
  218. k3rtc_field_write(priv, K3RTC_CNT_FMODE, K3RTC_CNT_FMODE_S_CNT_VALUE);
  219. /* Clear any spurious IRQ sources if any */
  220. k3rtc_field_write(priv, K3RTC_IRQ_STATUS_ALT, 0x1);
  221. k3rtc_field_write(priv, K3RTC_IRQ_STATUS, 0x1);
  222. /* Disable all IRQs */
  223. k3rtc_field_write(priv, K3RTC_IRQ_ENABLE_CLR_ALT, 0x1);
  224. k3rtc_field_write(priv, K3RTC_IRQ_ENABLE_CLR, 0x1);
  225. /* And.. Let us Sync the writes in */
  226. return k3rtc_fence(priv);
  227. }
  228. static int ti_k3_rtc_read_time(struct device *dev, struct rtc_time *tm)
  229. {
  230. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  231. u32 seconds_lo, seconds_hi;
  232. seconds_lo = k3rtc_field_read(priv, K3RTC_S_CNT_LSW);
  233. seconds_hi = k3rtc_field_read(priv, K3RTC_S_CNT_MSW);
  234. rtc_time64_to_tm((((time64_t)seconds_hi) << 32) | (time64_t)seconds_lo, tm);
  235. return 0;
  236. }
  237. static int ti_k3_rtc_set_time(struct device *dev, struct rtc_time *tm)
  238. {
  239. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  240. time64_t seconds;
  241. seconds = rtc_tm_to_time64(tm);
  242. /*
  243. * Read operation on LSW will freeze the RTC, so to update
  244. * the time, we cannot use field operations. Just write since the
  245. * reserved bits are ignored.
  246. */
  247. regmap_write(priv->regmap, REG_K3RTC_S_CNT_LSW, seconds);
  248. regmap_write(priv->regmap, REG_K3RTC_S_CNT_MSW, seconds >> 32);
  249. return k3rtc_fence(priv);
  250. }
  251. static int ti_k3_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
  252. {
  253. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  254. u32 reg;
  255. u32 offset = enabled ? K3RTC_IRQ_ENABLE_SET : K3RTC_IRQ_ENABLE_CLR;
  256. reg = k3rtc_field_read(priv, K3RTC_IRQ_ENABLE_SET);
  257. if ((enabled && reg) || (!enabled && !reg))
  258. return 0;
  259. k3rtc_field_write(priv, offset, 0x1);
  260. /*
  261. * Ensure the write sync is through - NOTE: it should be OK to have
  262. * ISR to fire as we are checking sync (which should be done in a 32k
  263. * cycle or so).
  264. */
  265. return k3rtc_fence(priv);
  266. }
  267. static int ti_k3_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
  268. {
  269. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  270. u32 seconds_lo, seconds_hi;
  271. seconds_lo = k3rtc_field_read(priv, K3RTC_ALM_S_CNT_LSW);
  272. seconds_hi = k3rtc_field_read(priv, K3RTC_ALM_S_CNT_MSW);
  273. rtc_time64_to_tm((((time64_t)seconds_hi) << 32) | (time64_t)seconds_lo, &alarm->time);
  274. alarm->enabled = k3rtc_field_read(priv, K3RTC_IRQ_ENABLE_SET);
  275. return 0;
  276. }
  277. static int ti_k3_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
  278. {
  279. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  280. time64_t seconds;
  281. int ret;
  282. seconds = rtc_tm_to_time64(&alarm->time);
  283. k3rtc_field_write(priv, K3RTC_ALM_S_CNT_LSW, seconds);
  284. k3rtc_field_write(priv, K3RTC_ALM_S_CNT_MSW, (seconds >> 32));
  285. /* Make sure the alarm time is synced in */
  286. ret = k3rtc_fence(priv);
  287. if (ret) {
  288. dev_err(dev, "Failed to fence(%d)! Potential config issue?\n", ret);
  289. return ret;
  290. }
  291. /* Alarm IRQ enable will do a sync */
  292. return ti_k3_rtc_alarm_irq_enable(dev, alarm->enabled);
  293. }
  294. static int ti_k3_rtc_read_offset(struct device *dev, long *offset)
  295. {
  296. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  297. u32 ticks_per_hr = priv->rate_32k * 3600;
  298. int comp;
  299. s64 tmp;
  300. comp = k3rtc_field_read(priv, K3RTC_COMP);
  301. /* Convert from RTC calibration register format to ppb format */
  302. tmp = comp * (s64)K3RTC_PPB_MULT;
  303. if (tmp < 0)
  304. tmp -= ticks_per_hr / 2LL;
  305. else
  306. tmp += ticks_per_hr / 2LL;
  307. tmp = div_s64(tmp, ticks_per_hr);
  308. /* Offset value operates in negative way, so swap sign */
  309. *offset = (long)-tmp;
  310. return 0;
  311. }
  312. static int ti_k3_rtc_set_offset(struct device *dev, long offset)
  313. {
  314. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  315. u32 ticks_per_hr = priv->rate_32k * 3600;
  316. int comp;
  317. s64 tmp;
  318. /* Make sure offset value is within supported range */
  319. if (offset < K3RTC_MIN_OFFSET || offset > K3RTC_MAX_OFFSET)
  320. return -ERANGE;
  321. /* Convert from ppb format to RTC calibration register format */
  322. tmp = offset * (s64)ticks_per_hr;
  323. if (tmp < 0)
  324. tmp -= K3RTC_PPB_MULT / 2LL;
  325. else
  326. tmp += K3RTC_PPB_MULT / 2LL;
  327. tmp = div_s64(tmp, K3RTC_PPB_MULT);
  328. /* Offset value operates in negative way, so swap sign */
  329. comp = (int)-tmp;
  330. k3rtc_field_write(priv, K3RTC_COMP, comp);
  331. return k3rtc_fence(priv);
  332. }
  333. static irqreturn_t ti_k3_rtc_interrupt(s32 irq, void *dev_id)
  334. {
  335. struct device *dev = dev_id;
  336. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  337. u32 reg;
  338. int ret;
  339. /*
  340. * IRQ assertion can be very fast, however, the IRQ Status clear
  341. * de-assert depends on 32k clock edge in the 32k domain
  342. * If we clear the status prior to the first 32k clock edge,
  343. * the status bit is cleared, but the IRQ stays re-asserted.
  344. *
  345. * To prevent this condition, we need to wait for clock sync time.
  346. * We can either do that by polling the 32k observability signal for
  347. * a toggle OR we could just sleep and let the processor do other
  348. * stuff.
  349. */
  350. usleep_range(priv->sync_timeout_us, priv->sync_timeout_us + 2);
  351. /* Lets make sure that this is a valid interrupt */
  352. reg = k3rtc_field_read(priv, K3RTC_IRQ_STATUS);
  353. if (!reg) {
  354. u32 raw = k3rtc_field_read(priv, K3RTC_IRQ_STATUS_RAW);
  355. dev_err(dev,
  356. HW_ERR
  357. "Erratum i2327/IRQ trig: status: 0x%08x / 0x%08x\n", reg, raw);
  358. return IRQ_NONE;
  359. }
  360. /*
  361. * Write 1 to clear status reg
  362. * We cannot use a field operation here due to a potential race between
  363. * 32k domain and vbus domain.
  364. */
  365. regmap_write(priv->regmap, REG_K3RTC_IRQSTATUS_SYS, 0x1);
  366. /* Sync the write in */
  367. ret = k3rtc_fence(priv);
  368. if (ret) {
  369. dev_err(dev, "Failed to fence irq status clr(%d)!\n", ret);
  370. return IRQ_NONE;
  371. }
  372. /*
  373. * Force the 32k status to be reloaded back in to ensure status is
  374. * reflected back correctly.
  375. */
  376. k3rtc_field_write(priv, K3RTC_RELOAD_FROM_BBD, 0x1);
  377. /* Ensure the write sync is through */
  378. ret = k3rtc_fence(priv);
  379. if (ret) {
  380. dev_err(dev, "Failed to fence reload from bbd(%d)!\n", ret);
  381. return IRQ_NONE;
  382. }
  383. /* Now we ensure that the status bit is cleared */
  384. ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_IRQ_STATUS],
  385. ret, !ret, 2, priv->sync_timeout_us);
  386. if (ret) {
  387. dev_err(dev, "Time out waiting for status clear\n");
  388. return IRQ_NONE;
  389. }
  390. /* Notify RTC core on event */
  391. rtc_update_irq(priv->rtc_dev, 1, RTC_IRQF | RTC_AF);
  392. return IRQ_HANDLED;
  393. }
  394. static const struct rtc_class_ops ti_k3_rtc_ops = {
  395. .read_time = ti_k3_rtc_read_time,
  396. .set_time = ti_k3_rtc_set_time,
  397. .read_alarm = ti_k3_rtc_read_alarm,
  398. .set_alarm = ti_k3_rtc_set_alarm,
  399. .read_offset = ti_k3_rtc_read_offset,
  400. .set_offset = ti_k3_rtc_set_offset,
  401. .alarm_irq_enable = ti_k3_rtc_alarm_irq_enable,
  402. };
  403. static int ti_k3_rtc_scratch_read(void *priv_data, unsigned int offset,
  404. void *val, size_t bytes)
  405. {
  406. struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
  407. return regmap_bulk_read(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
  408. }
  409. static int ti_k3_rtc_scratch_write(void *priv_data, unsigned int offset,
  410. void *val, size_t bytes)
  411. {
  412. struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
  413. int ret;
  414. ret = regmap_bulk_write(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
  415. if (ret)
  416. return ret;
  417. return k3rtc_fence(priv);
  418. }
  419. static struct nvmem_config ti_k3_rtc_nvmem_config = {
  420. .name = "ti_k3_rtc_scratch",
  421. .word_size = 4,
  422. .stride = 4,
  423. .size = REG_K3RTC_SCRATCH7 - REG_K3RTC_SCRATCH0 + 4,
  424. .reg_read = ti_k3_rtc_scratch_read,
  425. .reg_write = ti_k3_rtc_scratch_write,
  426. };
  427. static int k3rtc_get_32kclk(struct device *dev, struct ti_k3_rtc *priv)
  428. {
  429. struct clk *clk;
  430. clk = devm_clk_get_enabled(dev, "osc32k");
  431. if (IS_ERR(clk))
  432. return PTR_ERR(clk);
  433. priv->rate_32k = clk_get_rate(clk);
  434. /* Make sure we are exact 32k clock. Else, try to compensate delay */
  435. if (priv->rate_32k != 32768)
  436. dev_warn(dev, "Clock rate %ld is not 32768! Could misbehave!\n",
  437. priv->rate_32k);
  438. /*
  439. * Sync timeout should be two 32k clk sync cycles = ~61uS. We double
  440. * it to comprehend intermediate bus segment and cpu frequency
  441. * deltas
  442. */
  443. priv->sync_timeout_us = (u32)(DIV_ROUND_UP_ULL(1000000, priv->rate_32k) * 4);
  444. return 0;
  445. }
  446. static int k3rtc_get_vbusclk(struct device *dev, struct ti_k3_rtc *priv)
  447. {
  448. struct clk *clk;
  449. /* Note: VBUS isn't a context clock, it is needed for hardware operation */
  450. clk = devm_clk_get_enabled(dev, "vbus");
  451. if (IS_ERR(clk))
  452. return PTR_ERR(clk);
  453. return 0;
  454. }
  455. static int ti_k3_rtc_probe(struct platform_device *pdev)
  456. {
  457. struct device *dev = &pdev->dev;
  458. struct ti_k3_rtc *priv;
  459. void __iomem *rtc_base;
  460. int ret;
  461. priv = devm_kzalloc(dev, sizeof(struct ti_k3_rtc), GFP_KERNEL);
  462. if (!priv)
  463. return -ENOMEM;
  464. rtc_base = devm_platform_ioremap_resource(pdev, 0);
  465. if (IS_ERR(rtc_base))
  466. return PTR_ERR(rtc_base);
  467. priv->regmap = devm_regmap_init_mmio(dev, rtc_base, &ti_k3_rtc_regmap_config);
  468. if (IS_ERR(priv->regmap))
  469. return PTR_ERR(priv->regmap);
  470. ret = devm_regmap_field_bulk_alloc(dev, priv->regmap, priv->r_fields,
  471. ti_rtc_reg_fields, K3_RTC_MAX_FIELDS);
  472. if (ret)
  473. return ret;
  474. ret = k3rtc_get_32kclk(dev, priv);
  475. if (ret)
  476. return ret;
  477. ret = k3rtc_get_vbusclk(dev, priv);
  478. if (ret)
  479. return ret;
  480. ret = platform_get_irq(pdev, 0);
  481. if (ret < 0)
  482. return ret;
  483. priv->irq = (unsigned int)ret;
  484. priv->rtc_dev = devm_rtc_allocate_device(dev);
  485. if (IS_ERR(priv->rtc_dev))
  486. return PTR_ERR(priv->rtc_dev);
  487. priv->rtc_dev->ops = &ti_k3_rtc_ops;
  488. priv->rtc_dev->range_max = (1ULL << 48) - 1; /* 48Bit seconds */
  489. ti_k3_rtc_nvmem_config.priv = priv;
  490. ret = devm_request_threaded_irq(dev, priv->irq, NULL,
  491. ti_k3_rtc_interrupt,
  492. IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
  493. dev_name(dev), dev);
  494. if (ret) {
  495. dev_err(dev, "Could not request IRQ: %d\n", ret);
  496. return ret;
  497. }
  498. platform_set_drvdata(pdev, priv);
  499. ret = k3rtc_configure(dev);
  500. if (ret)
  501. return ret;
  502. if (device_property_present(dev, "wakeup-source"))
  503. device_init_wakeup(dev, true);
  504. else
  505. device_set_wakeup_capable(dev, true);
  506. ret = devm_rtc_register_device(priv->rtc_dev);
  507. if (ret)
  508. return ret;
  509. return devm_rtc_nvmem_register(priv->rtc_dev, &ti_k3_rtc_nvmem_config);
  510. }
  511. static const struct of_device_id ti_k3_rtc_of_match_table[] = {
  512. {.compatible = "ti,am62-rtc" },
  513. {}
  514. };
  515. MODULE_DEVICE_TABLE(of, ti_k3_rtc_of_match_table);
  516. static int __maybe_unused ti_k3_rtc_suspend(struct device *dev)
  517. {
  518. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  519. if (device_may_wakeup(dev))
  520. return enable_irq_wake(priv->irq);
  521. return 0;
  522. }
  523. static int __maybe_unused ti_k3_rtc_resume(struct device *dev)
  524. {
  525. struct ti_k3_rtc *priv = dev_get_drvdata(dev);
  526. if (device_may_wakeup(dev))
  527. disable_irq_wake(priv->irq);
  528. return 0;
  529. }
  530. static SIMPLE_DEV_PM_OPS(ti_k3_rtc_pm_ops, ti_k3_rtc_suspend, ti_k3_rtc_resume);
  531. static struct platform_driver ti_k3_rtc_driver = {
  532. .probe = ti_k3_rtc_probe,
  533. .driver = {
  534. .name = "rtc-ti-k3",
  535. .of_match_table = ti_k3_rtc_of_match_table,
  536. .pm = &ti_k3_rtc_pm_ops,
  537. },
  538. };
  539. module_platform_driver(ti_k3_rtc_driver);
  540. MODULE_LICENSE("GPL");
  541. MODULE_DESCRIPTION("TI K3 RTC driver");
  542. MODULE_AUTHOR("Nishanth Menon");