svc-i3c-master.c 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Silvaco dual-role I3C master driver
  4. *
  5. * Copyright (C) 2020 Silvaco
  6. * Author: Miquel RAYNAL <[email protected]>
  7. * Based on a work from: Conor Culhane <[email protected]>
  8. */
  9. #include <linux/bitfield.h>
  10. #include <linux/clk.h>
  11. #include <linux/completion.h>
  12. #include <linux/errno.h>
  13. #include <linux/i3c/master.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/iopoll.h>
  16. #include <linux/list.h>
  17. #include <linux/module.h>
  18. #include <linux/of.h>
  19. #include <linux/pinctrl/consumer.h>
  20. #include <linux/platform_device.h>
  21. #include <linux/pm_runtime.h>
  22. /* Master Mode Registers */
  23. #define SVC_I3C_MCONFIG 0x000
  24. #define SVC_I3C_MCONFIG_MASTER_EN BIT(0)
  25. #define SVC_I3C_MCONFIG_DISTO(x) FIELD_PREP(BIT(3), (x))
  26. #define SVC_I3C_MCONFIG_HKEEP(x) FIELD_PREP(GENMASK(5, 4), (x))
  27. #define SVC_I3C_MCONFIG_ODSTOP(x) FIELD_PREP(BIT(6), (x))
  28. #define SVC_I3C_MCONFIG_PPBAUD(x) FIELD_PREP(GENMASK(11, 8), (x))
  29. #define SVC_I3C_MCONFIG_PPLOW(x) FIELD_PREP(GENMASK(15, 12), (x))
  30. #define SVC_I3C_MCONFIG_ODBAUD(x) FIELD_PREP(GENMASK(23, 16), (x))
  31. #define SVC_I3C_MCONFIG_ODHPP(x) FIELD_PREP(BIT(24), (x))
  32. #define SVC_I3C_MCONFIG_SKEW(x) FIELD_PREP(GENMASK(27, 25), (x))
  33. #define SVC_I3C_MCONFIG_I2CBAUD(x) FIELD_PREP(GENMASK(31, 28), (x))
  34. #define SVC_I3C_MCTRL 0x084
  35. #define SVC_I3C_MCTRL_REQUEST_MASK GENMASK(2, 0)
  36. #define SVC_I3C_MCTRL_REQUEST_NONE 0
  37. #define SVC_I3C_MCTRL_REQUEST_START_ADDR 1
  38. #define SVC_I3C_MCTRL_REQUEST_STOP 2
  39. #define SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK 3
  40. #define SVC_I3C_MCTRL_REQUEST_PROC_DAA 4
  41. #define SVC_I3C_MCTRL_REQUEST_AUTO_IBI 7
  42. #define SVC_I3C_MCTRL_TYPE_I3C 0
  43. #define SVC_I3C_MCTRL_TYPE_I2C BIT(4)
  44. #define SVC_I3C_MCTRL_IBIRESP_AUTO 0
  45. #define SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE 0
  46. #define SVC_I3C_MCTRL_IBIRESP_ACK_WITH_BYTE BIT(7)
  47. #define SVC_I3C_MCTRL_IBIRESP_NACK BIT(6)
  48. #define SVC_I3C_MCTRL_IBIRESP_MANUAL GENMASK(7, 6)
  49. #define SVC_I3C_MCTRL_DIR(x) FIELD_PREP(BIT(8), (x))
  50. #define SVC_I3C_MCTRL_DIR_WRITE 0
  51. #define SVC_I3C_MCTRL_DIR_READ 1
  52. #define SVC_I3C_MCTRL_ADDR(x) FIELD_PREP(GENMASK(15, 9), (x))
  53. #define SVC_I3C_MCTRL_RDTERM(x) FIELD_PREP(GENMASK(23, 16), (x))
  54. #define SVC_I3C_MSTATUS 0x088
  55. #define SVC_I3C_MSTATUS_STATE(x) FIELD_GET(GENMASK(2, 0), (x))
  56. #define SVC_I3C_MSTATUS_STATE_DAA(x) (SVC_I3C_MSTATUS_STATE(x) == 5)
  57. #define SVC_I3C_MSTATUS_STATE_IDLE(x) (SVC_I3C_MSTATUS_STATE(x) == 0)
  58. #define SVC_I3C_MSTATUS_BETWEEN(x) FIELD_GET(BIT(4), (x))
  59. #define SVC_I3C_MSTATUS_NACKED(x) FIELD_GET(BIT(5), (x))
  60. #define SVC_I3C_MSTATUS_IBITYPE(x) FIELD_GET(GENMASK(7, 6), (x))
  61. #define SVC_I3C_MSTATUS_IBITYPE_IBI 1
  62. #define SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST 2
  63. #define SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN 3
  64. #define SVC_I3C_MINT_SLVSTART BIT(8)
  65. #define SVC_I3C_MINT_MCTRLDONE BIT(9)
  66. #define SVC_I3C_MINT_COMPLETE BIT(10)
  67. #define SVC_I3C_MINT_RXPEND BIT(11)
  68. #define SVC_I3C_MINT_TXNOTFULL BIT(12)
  69. #define SVC_I3C_MINT_IBIWON BIT(13)
  70. #define SVC_I3C_MINT_ERRWARN BIT(15)
  71. #define SVC_I3C_MSTATUS_SLVSTART(x) FIELD_GET(SVC_I3C_MINT_SLVSTART, (x))
  72. #define SVC_I3C_MSTATUS_MCTRLDONE(x) FIELD_GET(SVC_I3C_MINT_MCTRLDONE, (x))
  73. #define SVC_I3C_MSTATUS_COMPLETE(x) FIELD_GET(SVC_I3C_MINT_COMPLETE, (x))
  74. #define SVC_I3C_MSTATUS_RXPEND(x) FIELD_GET(SVC_I3C_MINT_RXPEND, (x))
  75. #define SVC_I3C_MSTATUS_TXNOTFULL(x) FIELD_GET(SVC_I3C_MINT_TXNOTFULL, (x))
  76. #define SVC_I3C_MSTATUS_IBIWON(x) FIELD_GET(SVC_I3C_MINT_IBIWON, (x))
  77. #define SVC_I3C_MSTATUS_ERRWARN(x) FIELD_GET(SVC_I3C_MINT_ERRWARN, (x))
  78. #define SVC_I3C_MSTATUS_IBIADDR(x) FIELD_GET(GENMASK(30, 24), (x))
  79. #define SVC_I3C_IBIRULES 0x08C
  80. #define SVC_I3C_IBIRULES_ADDR(slot, addr) FIELD_PREP(GENMASK(29, 0), \
  81. ((addr) & 0x3F) << ((slot) * 6))
  82. #define SVC_I3C_IBIRULES_ADDRS 5
  83. #define SVC_I3C_IBIRULES_MSB0 BIT(30)
  84. #define SVC_I3C_IBIRULES_NOBYTE BIT(31)
  85. #define SVC_I3C_IBIRULES_MANDBYTE 0
  86. #define SVC_I3C_MINTSET 0x090
  87. #define SVC_I3C_MINTCLR 0x094
  88. #define SVC_I3C_MINTMASKED 0x098
  89. #define SVC_I3C_MERRWARN 0x09C
  90. #define SVC_I3C_MERRWARN_NACK BIT(2)
  91. #define SVC_I3C_MERRWARN_TIMEOUT BIT(20)
  92. #define SVC_I3C_MDMACTRL 0x0A0
  93. #define SVC_I3C_MDATACTRL 0x0AC
  94. #define SVC_I3C_MDATACTRL_FLUSHTB BIT(0)
  95. #define SVC_I3C_MDATACTRL_FLUSHRB BIT(1)
  96. #define SVC_I3C_MDATACTRL_UNLOCK_TRIG BIT(3)
  97. #define SVC_I3C_MDATACTRL_TXTRIG_FIFO_NOT_FULL GENMASK(5, 4)
  98. #define SVC_I3C_MDATACTRL_RXTRIG_FIFO_NOT_EMPTY 0
  99. #define SVC_I3C_MDATACTRL_RXCOUNT(x) FIELD_GET(GENMASK(28, 24), (x))
  100. #define SVC_I3C_MDATACTRL_TXFULL BIT(30)
  101. #define SVC_I3C_MDATACTRL_RXEMPTY BIT(31)
  102. #define SVC_I3C_MWDATAB 0x0B0
  103. #define SVC_I3C_MWDATAB_END BIT(8)
  104. #define SVC_I3C_MWDATABE 0x0B4
  105. #define SVC_I3C_MWDATAH 0x0B8
  106. #define SVC_I3C_MWDATAHE 0x0BC
  107. #define SVC_I3C_MRDATAB 0x0C0
  108. #define SVC_I3C_MRDATAH 0x0C8
  109. #define SVC_I3C_MWMSG_SDR 0x0D0
  110. #define SVC_I3C_MRMSG_SDR 0x0D4
  111. #define SVC_I3C_MWMSG_DDR 0x0D8
  112. #define SVC_I3C_MRMSG_DDR 0x0DC
  113. #define SVC_I3C_MDYNADDR 0x0E4
  114. #define SVC_MDYNADDR_VALID BIT(0)
  115. #define SVC_MDYNADDR_ADDR(x) FIELD_PREP(GENMASK(7, 1), (x))
  116. #define SVC_I3C_MAX_DEVS 32
  117. #define SVC_I3C_PM_TIMEOUT_MS 1000
  118. /* This parameter depends on the implementation and may be tuned */
  119. #define SVC_I3C_FIFO_SIZE 16
  120. struct svc_i3c_cmd {
  121. u8 addr;
  122. bool rnw;
  123. u8 *in;
  124. const void *out;
  125. unsigned int len;
  126. unsigned int read_len;
  127. bool continued;
  128. };
  129. struct svc_i3c_xfer {
  130. struct list_head node;
  131. struct completion comp;
  132. int ret;
  133. unsigned int type;
  134. unsigned int ncmds;
  135. struct svc_i3c_cmd cmds[];
  136. };
  137. /**
  138. * struct svc_i3c_master - Silvaco I3C Master structure
  139. * @base: I3C master controller
  140. * @dev: Corresponding device
  141. * @regs: Memory mapping
  142. * @free_slots: Bit array of available slots
  143. * @addrs: Array containing the dynamic addresses of each attached device
  144. * @descs: Array of descriptors, one per attached device
  145. * @hj_work: Hot-join work
  146. * @ibi_work: IBI work
  147. * @irq: Main interrupt
  148. * @pclk: System clock
  149. * @fclk: Fast clock (bus)
  150. * @sclk: Slow clock (other events)
  151. * @xferqueue: Transfer queue structure
  152. * @xferqueue.list: List member
  153. * @xferqueue.cur: Current ongoing transfer
  154. * @xferqueue.lock: Queue lock
  155. * @ibi: IBI structure
  156. * @ibi.num_slots: Number of slots available in @ibi.slots
  157. * @ibi.slots: Available IBI slots
  158. * @ibi.tbq_slot: To be queued IBI slot
  159. * @ibi.lock: IBI lock
  160. * @lock: Transfer lock, protect between IBI work thread and callbacks from master
  161. */
  162. struct svc_i3c_master {
  163. struct i3c_master_controller base;
  164. struct device *dev;
  165. void __iomem *regs;
  166. u32 free_slots;
  167. u8 addrs[SVC_I3C_MAX_DEVS];
  168. struct i3c_dev_desc *descs[SVC_I3C_MAX_DEVS];
  169. struct work_struct hj_work;
  170. struct work_struct ibi_work;
  171. int irq;
  172. struct clk *pclk;
  173. struct clk *fclk;
  174. struct clk *sclk;
  175. struct {
  176. struct list_head list;
  177. struct svc_i3c_xfer *cur;
  178. /* Prevent races between transfers */
  179. spinlock_t lock;
  180. } xferqueue;
  181. struct {
  182. unsigned int num_slots;
  183. struct i3c_dev_desc **slots;
  184. struct i3c_ibi_slot *tbq_slot;
  185. /* Prevent races within IBI handlers */
  186. spinlock_t lock;
  187. } ibi;
  188. struct mutex lock;
  189. };
  190. /**
  191. * struct svc_i3c_i2c_dev_data - Device specific data
  192. * @index: Index in the master tables corresponding to this device
  193. * @ibi: IBI slot index in the master structure
  194. * @ibi_pool: IBI pool associated to this device
  195. */
  196. struct svc_i3c_i2c_dev_data {
  197. u8 index;
  198. int ibi;
  199. struct i3c_generic_ibi_pool *ibi_pool;
  200. };
  201. static bool svc_i3c_master_error(struct svc_i3c_master *master)
  202. {
  203. u32 mstatus, merrwarn;
  204. mstatus = readl(master->regs + SVC_I3C_MSTATUS);
  205. if (SVC_I3C_MSTATUS_ERRWARN(mstatus)) {
  206. merrwarn = readl(master->regs + SVC_I3C_MERRWARN);
  207. writel(merrwarn, master->regs + SVC_I3C_MERRWARN);
  208. /* Ignore timeout error */
  209. if (merrwarn & SVC_I3C_MERRWARN_TIMEOUT) {
  210. dev_dbg(master->dev, "Warning condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
  211. mstatus, merrwarn);
  212. return false;
  213. }
  214. dev_err(master->dev,
  215. "Error condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
  216. mstatus, merrwarn);
  217. return true;
  218. }
  219. return false;
  220. }
  221. static void svc_i3c_master_enable_interrupts(struct svc_i3c_master *master, u32 mask)
  222. {
  223. writel(mask, master->regs + SVC_I3C_MINTSET);
  224. }
  225. static void svc_i3c_master_disable_interrupts(struct svc_i3c_master *master)
  226. {
  227. u32 mask = readl(master->regs + SVC_I3C_MINTSET);
  228. writel(mask, master->regs + SVC_I3C_MINTCLR);
  229. }
  230. static void svc_i3c_master_clear_merrwarn(struct svc_i3c_master *master)
  231. {
  232. /* Clear pending warnings */
  233. writel(readl(master->regs + SVC_I3C_MERRWARN),
  234. master->regs + SVC_I3C_MERRWARN);
  235. }
  236. static void svc_i3c_master_flush_fifo(struct svc_i3c_master *master)
  237. {
  238. /* Flush FIFOs */
  239. writel(SVC_I3C_MDATACTRL_FLUSHTB | SVC_I3C_MDATACTRL_FLUSHRB,
  240. master->regs + SVC_I3C_MDATACTRL);
  241. }
  242. static void svc_i3c_master_reset_fifo_trigger(struct svc_i3c_master *master)
  243. {
  244. u32 reg;
  245. /* Set RX and TX tigger levels, flush FIFOs */
  246. reg = SVC_I3C_MDATACTRL_FLUSHTB |
  247. SVC_I3C_MDATACTRL_FLUSHRB |
  248. SVC_I3C_MDATACTRL_UNLOCK_TRIG |
  249. SVC_I3C_MDATACTRL_TXTRIG_FIFO_NOT_FULL |
  250. SVC_I3C_MDATACTRL_RXTRIG_FIFO_NOT_EMPTY;
  251. writel(reg, master->regs + SVC_I3C_MDATACTRL);
  252. }
  253. static void svc_i3c_master_reset(struct svc_i3c_master *master)
  254. {
  255. svc_i3c_master_clear_merrwarn(master);
  256. svc_i3c_master_reset_fifo_trigger(master);
  257. svc_i3c_master_disable_interrupts(master);
  258. }
  259. static inline struct svc_i3c_master *
  260. to_svc_i3c_master(struct i3c_master_controller *master)
  261. {
  262. return container_of(master, struct svc_i3c_master, base);
  263. }
  264. static void svc_i3c_master_hj_work(struct work_struct *work)
  265. {
  266. struct svc_i3c_master *master;
  267. master = container_of(work, struct svc_i3c_master, hj_work);
  268. i3c_master_do_daa(&master->base);
  269. }
  270. static struct i3c_dev_desc *
  271. svc_i3c_master_dev_from_addr(struct svc_i3c_master *master,
  272. unsigned int ibiaddr)
  273. {
  274. int i;
  275. for (i = 0; i < SVC_I3C_MAX_DEVS; i++)
  276. if (master->addrs[i] == ibiaddr)
  277. break;
  278. if (i == SVC_I3C_MAX_DEVS)
  279. return NULL;
  280. return master->descs[i];
  281. }
  282. static void svc_i3c_master_emit_stop(struct svc_i3c_master *master)
  283. {
  284. writel(SVC_I3C_MCTRL_REQUEST_STOP, master->regs + SVC_I3C_MCTRL);
  285. /*
  286. * This delay is necessary after the emission of a stop, otherwise eg.
  287. * repeating IBIs do not get detected. There is a note in the manual
  288. * about it, stating that the stop condition might not be settled
  289. * correctly if a start condition follows too rapidly.
  290. */
  291. udelay(1);
  292. }
  293. static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
  294. struct i3c_dev_desc *dev)
  295. {
  296. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  297. struct i3c_ibi_slot *slot;
  298. unsigned int count;
  299. u32 mdatactrl;
  300. int ret, val;
  301. u8 *buf;
  302. slot = i3c_generic_ibi_get_free_slot(data->ibi_pool);
  303. if (!slot)
  304. return -ENOSPC;
  305. slot->len = 0;
  306. buf = slot->data;
  307. ret = readl_relaxed_poll_timeout(master->regs + SVC_I3C_MSTATUS, val,
  308. SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000);
  309. if (ret) {
  310. dev_err(master->dev, "Timeout when polling for COMPLETE\n");
  311. return ret;
  312. }
  313. while (SVC_I3C_MSTATUS_RXPEND(readl(master->regs + SVC_I3C_MSTATUS)) &&
  314. slot->len < SVC_I3C_FIFO_SIZE) {
  315. mdatactrl = readl(master->regs + SVC_I3C_MDATACTRL);
  316. count = SVC_I3C_MDATACTRL_RXCOUNT(mdatactrl);
  317. readsl(master->regs + SVC_I3C_MRDATAB, buf, count);
  318. slot->len += count;
  319. buf += count;
  320. }
  321. master->ibi.tbq_slot = slot;
  322. return 0;
  323. }
  324. static void svc_i3c_master_ack_ibi(struct svc_i3c_master *master,
  325. bool mandatory_byte)
  326. {
  327. unsigned int ibi_ack_nack;
  328. ibi_ack_nack = SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK;
  329. if (mandatory_byte)
  330. ibi_ack_nack |= SVC_I3C_MCTRL_IBIRESP_ACK_WITH_BYTE;
  331. else
  332. ibi_ack_nack |= SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE;
  333. writel(ibi_ack_nack, master->regs + SVC_I3C_MCTRL);
  334. }
  335. static void svc_i3c_master_nack_ibi(struct svc_i3c_master *master)
  336. {
  337. writel(SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK |
  338. SVC_I3C_MCTRL_IBIRESP_NACK,
  339. master->regs + SVC_I3C_MCTRL);
  340. }
  341. static void svc_i3c_master_ibi_work(struct work_struct *work)
  342. {
  343. struct svc_i3c_master *master = container_of(work, struct svc_i3c_master, ibi_work);
  344. struct svc_i3c_i2c_dev_data *data;
  345. unsigned int ibitype, ibiaddr;
  346. struct i3c_dev_desc *dev;
  347. u32 status, val;
  348. int ret;
  349. mutex_lock(&master->lock);
  350. /* Acknowledge the incoming interrupt with the AUTOIBI mechanism */
  351. writel(SVC_I3C_MCTRL_REQUEST_AUTO_IBI |
  352. SVC_I3C_MCTRL_IBIRESP_AUTO,
  353. master->regs + SVC_I3C_MCTRL);
  354. /* Wait for IBIWON, should take approximately 100us */
  355. ret = readl_relaxed_poll_timeout(master->regs + SVC_I3C_MSTATUS, val,
  356. SVC_I3C_MSTATUS_IBIWON(val), 0, 1000);
  357. if (ret) {
  358. dev_err(master->dev, "Timeout when polling for IBIWON\n");
  359. svc_i3c_master_emit_stop(master);
  360. goto reenable_ibis;
  361. }
  362. /* Clear the interrupt status */
  363. writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS);
  364. status = readl(master->regs + SVC_I3C_MSTATUS);
  365. ibitype = SVC_I3C_MSTATUS_IBITYPE(status);
  366. ibiaddr = SVC_I3C_MSTATUS_IBIADDR(status);
  367. /* Handle the critical responses to IBI's */
  368. switch (ibitype) {
  369. case SVC_I3C_MSTATUS_IBITYPE_IBI:
  370. dev = svc_i3c_master_dev_from_addr(master, ibiaddr);
  371. if (!dev)
  372. svc_i3c_master_nack_ibi(master);
  373. else
  374. svc_i3c_master_handle_ibi(master, dev);
  375. break;
  376. case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN:
  377. svc_i3c_master_ack_ibi(master, false);
  378. break;
  379. case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST:
  380. svc_i3c_master_nack_ibi(master);
  381. break;
  382. default:
  383. break;
  384. }
  385. /*
  386. * If an error happened, we probably got interrupted and the exchange
  387. * timedout. In this case we just drop everything, emit a stop and wait
  388. * for the slave to interrupt again.
  389. */
  390. if (svc_i3c_master_error(master)) {
  391. if (master->ibi.tbq_slot) {
  392. data = i3c_dev_get_master_data(dev);
  393. i3c_generic_ibi_recycle_slot(data->ibi_pool,
  394. master->ibi.tbq_slot);
  395. master->ibi.tbq_slot = NULL;
  396. }
  397. svc_i3c_master_emit_stop(master);
  398. goto reenable_ibis;
  399. }
  400. /* Handle the non critical tasks */
  401. switch (ibitype) {
  402. case SVC_I3C_MSTATUS_IBITYPE_IBI:
  403. if (dev) {
  404. i3c_master_queue_ibi(dev, master->ibi.tbq_slot);
  405. master->ibi.tbq_slot = NULL;
  406. }
  407. svc_i3c_master_emit_stop(master);
  408. break;
  409. case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN:
  410. queue_work(master->base.wq, &master->hj_work);
  411. break;
  412. case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST:
  413. default:
  414. break;
  415. }
  416. reenable_ibis:
  417. svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
  418. mutex_unlock(&master->lock);
  419. }
  420. static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id)
  421. {
  422. struct svc_i3c_master *master = (struct svc_i3c_master *)dev_id;
  423. u32 active = readl(master->regs + SVC_I3C_MSTATUS);
  424. if (!SVC_I3C_MSTATUS_SLVSTART(active))
  425. return IRQ_NONE;
  426. /* Clear the interrupt status */
  427. writel(SVC_I3C_MINT_SLVSTART, master->regs + SVC_I3C_MSTATUS);
  428. svc_i3c_master_disable_interrupts(master);
  429. /* Handle the interrupt in a non atomic context */
  430. queue_work(master->base.wq, &master->ibi_work);
  431. return IRQ_HANDLED;
  432. }
  433. static int svc_i3c_master_bus_init(struct i3c_master_controller *m)
  434. {
  435. struct svc_i3c_master *master = to_svc_i3c_master(m);
  436. struct i3c_bus *bus = i3c_master_get_bus(m);
  437. struct i3c_device_info info = {};
  438. unsigned long fclk_rate, fclk_period_ns;
  439. unsigned int high_period_ns, od_low_period_ns;
  440. u32 ppbaud, pplow, odhpp, odbaud, odstop, i2cbaud, reg;
  441. int ret;
  442. ret = pm_runtime_resume_and_get(master->dev);
  443. if (ret < 0) {
  444. dev_err(master->dev,
  445. "<%s> cannot resume i3c bus master, err: %d\n",
  446. __func__, ret);
  447. return ret;
  448. }
  449. /* Timings derivation */
  450. fclk_rate = clk_get_rate(master->fclk);
  451. if (!fclk_rate) {
  452. ret = -EINVAL;
  453. goto rpm_out;
  454. }
  455. fclk_period_ns = DIV_ROUND_UP(1000000000, fclk_rate);
  456. /*
  457. * Using I3C Push-Pull mode, target is 12.5MHz/80ns period.
  458. * Simplest configuration is using a 50% duty-cycle of 40ns.
  459. */
  460. ppbaud = DIV_ROUND_UP(40, fclk_period_ns) - 1;
  461. pplow = 0;
  462. /*
  463. * Using I3C Open-Drain mode, target is 4.17MHz/240ns with a
  464. * duty-cycle tuned so that high levels are filetered out by
  465. * the 50ns filter (target being 40ns).
  466. */
  467. odhpp = 1;
  468. high_period_ns = (ppbaud + 1) * fclk_period_ns;
  469. odbaud = DIV_ROUND_UP(240 - high_period_ns, high_period_ns) - 1;
  470. od_low_period_ns = (odbaud + 1) * high_period_ns;
  471. switch (bus->mode) {
  472. case I3C_BUS_MODE_PURE:
  473. i2cbaud = 0;
  474. odstop = 0;
  475. break;
  476. case I3C_BUS_MODE_MIXED_FAST:
  477. case I3C_BUS_MODE_MIXED_LIMITED:
  478. /*
  479. * Using I2C Fm+ mode, target is 1MHz/1000ns, the difference
  480. * between the high and low period does not really matter.
  481. */
  482. i2cbaud = DIV_ROUND_UP(1000, od_low_period_ns) - 2;
  483. odstop = 1;
  484. break;
  485. case I3C_BUS_MODE_MIXED_SLOW:
  486. /*
  487. * Using I2C Fm mode, target is 0.4MHz/2500ns, with the same
  488. * constraints as the FM+ mode.
  489. */
  490. i2cbaud = DIV_ROUND_UP(2500, od_low_period_ns) - 2;
  491. odstop = 1;
  492. break;
  493. default:
  494. goto rpm_out;
  495. }
  496. reg = SVC_I3C_MCONFIG_MASTER_EN |
  497. SVC_I3C_MCONFIG_DISTO(0) |
  498. SVC_I3C_MCONFIG_HKEEP(0) |
  499. SVC_I3C_MCONFIG_ODSTOP(odstop) |
  500. SVC_I3C_MCONFIG_PPBAUD(ppbaud) |
  501. SVC_I3C_MCONFIG_PPLOW(pplow) |
  502. SVC_I3C_MCONFIG_ODBAUD(odbaud) |
  503. SVC_I3C_MCONFIG_ODHPP(odhpp) |
  504. SVC_I3C_MCONFIG_SKEW(0) |
  505. SVC_I3C_MCONFIG_I2CBAUD(i2cbaud);
  506. writel(reg, master->regs + SVC_I3C_MCONFIG);
  507. /* Master core's registration */
  508. ret = i3c_master_get_free_addr(m, 0);
  509. if (ret < 0)
  510. goto rpm_out;
  511. info.dyn_addr = ret;
  512. writel(SVC_MDYNADDR_VALID | SVC_MDYNADDR_ADDR(info.dyn_addr),
  513. master->regs + SVC_I3C_MDYNADDR);
  514. ret = i3c_master_set_info(&master->base, &info);
  515. if (ret)
  516. goto rpm_out;
  517. rpm_out:
  518. pm_runtime_mark_last_busy(master->dev);
  519. pm_runtime_put_autosuspend(master->dev);
  520. return ret;
  521. }
  522. static void svc_i3c_master_bus_cleanup(struct i3c_master_controller *m)
  523. {
  524. struct svc_i3c_master *master = to_svc_i3c_master(m);
  525. int ret;
  526. ret = pm_runtime_resume_and_get(master->dev);
  527. if (ret < 0) {
  528. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  529. return;
  530. }
  531. svc_i3c_master_disable_interrupts(master);
  532. /* Disable master */
  533. writel(0, master->regs + SVC_I3C_MCONFIG);
  534. pm_runtime_mark_last_busy(master->dev);
  535. pm_runtime_put_autosuspend(master->dev);
  536. }
  537. static int svc_i3c_master_reserve_slot(struct svc_i3c_master *master)
  538. {
  539. unsigned int slot;
  540. if (!(master->free_slots & GENMASK(SVC_I3C_MAX_DEVS - 1, 0)))
  541. return -ENOSPC;
  542. slot = ffs(master->free_slots) - 1;
  543. master->free_slots &= ~BIT(slot);
  544. return slot;
  545. }
  546. static void svc_i3c_master_release_slot(struct svc_i3c_master *master,
  547. unsigned int slot)
  548. {
  549. master->free_slots |= BIT(slot);
  550. }
  551. static int svc_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
  552. {
  553. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  554. struct svc_i3c_master *master = to_svc_i3c_master(m);
  555. struct svc_i3c_i2c_dev_data *data;
  556. int slot;
  557. slot = svc_i3c_master_reserve_slot(master);
  558. if (slot < 0)
  559. return slot;
  560. data = kzalloc(sizeof(*data), GFP_KERNEL);
  561. if (!data) {
  562. svc_i3c_master_release_slot(master, slot);
  563. return -ENOMEM;
  564. }
  565. data->ibi = -1;
  566. data->index = slot;
  567. master->addrs[slot] = dev->info.dyn_addr ? dev->info.dyn_addr :
  568. dev->info.static_addr;
  569. master->descs[slot] = dev;
  570. i3c_dev_set_master_data(dev, data);
  571. return 0;
  572. }
  573. static int svc_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
  574. u8 old_dyn_addr)
  575. {
  576. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  577. struct svc_i3c_master *master = to_svc_i3c_master(m);
  578. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  579. master->addrs[data->index] = dev->info.dyn_addr ? dev->info.dyn_addr :
  580. dev->info.static_addr;
  581. return 0;
  582. }
  583. static void svc_i3c_master_detach_i3c_dev(struct i3c_dev_desc *dev)
  584. {
  585. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  586. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  587. struct svc_i3c_master *master = to_svc_i3c_master(m);
  588. master->addrs[data->index] = 0;
  589. svc_i3c_master_release_slot(master, data->index);
  590. kfree(data);
  591. }
  592. static int svc_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
  593. {
  594. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  595. struct svc_i3c_master *master = to_svc_i3c_master(m);
  596. struct svc_i3c_i2c_dev_data *data;
  597. int slot;
  598. slot = svc_i3c_master_reserve_slot(master);
  599. if (slot < 0)
  600. return slot;
  601. data = kzalloc(sizeof(*data), GFP_KERNEL);
  602. if (!data) {
  603. svc_i3c_master_release_slot(master, slot);
  604. return -ENOMEM;
  605. }
  606. data->index = slot;
  607. master->addrs[slot] = dev->addr;
  608. i2c_dev_set_master_data(dev, data);
  609. return 0;
  610. }
  611. static void svc_i3c_master_detach_i2c_dev(struct i2c_dev_desc *dev)
  612. {
  613. struct svc_i3c_i2c_dev_data *data = i2c_dev_get_master_data(dev);
  614. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  615. struct svc_i3c_master *master = to_svc_i3c_master(m);
  616. svc_i3c_master_release_slot(master, data->index);
  617. kfree(data);
  618. }
  619. static int svc_i3c_master_readb(struct svc_i3c_master *master, u8 *dst,
  620. unsigned int len)
  621. {
  622. int ret, i;
  623. u32 reg;
  624. for (i = 0; i < len; i++) {
  625. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  626. reg,
  627. SVC_I3C_MSTATUS_RXPEND(reg),
  628. 0, 1000);
  629. if (ret)
  630. return ret;
  631. dst[i] = readl(master->regs + SVC_I3C_MRDATAB);
  632. }
  633. return 0;
  634. }
  635. static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master,
  636. u8 *addrs, unsigned int *count)
  637. {
  638. u64 prov_id[SVC_I3C_MAX_DEVS] = {}, nacking_prov_id = 0;
  639. unsigned int dev_nb = 0, last_addr = 0;
  640. u32 reg;
  641. int ret, i;
  642. while (true) {
  643. /* Enter/proceed with DAA */
  644. writel(SVC_I3C_MCTRL_REQUEST_PROC_DAA |
  645. SVC_I3C_MCTRL_TYPE_I3C |
  646. SVC_I3C_MCTRL_IBIRESP_NACK |
  647. SVC_I3C_MCTRL_DIR(SVC_I3C_MCTRL_DIR_WRITE),
  648. master->regs + SVC_I3C_MCTRL);
  649. /*
  650. * Either one slave will send its ID, or the assignment process
  651. * is done.
  652. */
  653. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  654. reg,
  655. SVC_I3C_MSTATUS_RXPEND(reg) |
  656. SVC_I3C_MSTATUS_MCTRLDONE(reg),
  657. 1, 1000);
  658. if (ret)
  659. return ret;
  660. if (SVC_I3C_MSTATUS_RXPEND(reg)) {
  661. u8 data[6];
  662. /*
  663. * We only care about the 48-bit provisional ID yet to
  664. * be sure a device does not nack an address twice.
  665. * Otherwise, we would just need to flush the RX FIFO.
  666. */
  667. ret = svc_i3c_master_readb(master, data, 6);
  668. if (ret)
  669. return ret;
  670. for (i = 0; i < 6; i++)
  671. prov_id[dev_nb] |= (u64)(data[i]) << (8 * (5 - i));
  672. /* We do not care about the BCR and DCR yet */
  673. ret = svc_i3c_master_readb(master, data, 2);
  674. if (ret)
  675. return ret;
  676. } else if (SVC_I3C_MSTATUS_MCTRLDONE(reg)) {
  677. if (SVC_I3C_MSTATUS_STATE_IDLE(reg) &&
  678. SVC_I3C_MSTATUS_COMPLETE(reg)) {
  679. /*
  680. * All devices received and acked they dynamic
  681. * address, this is the natural end of the DAA
  682. * procedure.
  683. */
  684. break;
  685. } else if (SVC_I3C_MSTATUS_NACKED(reg)) {
  686. /* No I3C devices attached */
  687. if (dev_nb == 0)
  688. break;
  689. /*
  690. * A slave device nacked the address, this is
  691. * allowed only once, DAA will be stopped and
  692. * then resumed. The same device is supposed to
  693. * answer again immediately and shall ack the
  694. * address this time.
  695. */
  696. if (prov_id[dev_nb] == nacking_prov_id)
  697. return -EIO;
  698. dev_nb--;
  699. nacking_prov_id = prov_id[dev_nb];
  700. svc_i3c_master_emit_stop(master);
  701. continue;
  702. } else {
  703. return -EIO;
  704. }
  705. }
  706. /* Wait for the slave to be ready to receive its address */
  707. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  708. reg,
  709. SVC_I3C_MSTATUS_MCTRLDONE(reg) &&
  710. SVC_I3C_MSTATUS_STATE_DAA(reg) &&
  711. SVC_I3C_MSTATUS_BETWEEN(reg),
  712. 0, 1000);
  713. if (ret)
  714. return ret;
  715. /* Give the slave device a suitable dynamic address */
  716. ret = i3c_master_get_free_addr(&master->base, last_addr + 1);
  717. if (ret < 0)
  718. return ret;
  719. addrs[dev_nb] = ret;
  720. dev_dbg(master->dev, "DAA: device %d assigned to 0x%02x\n",
  721. dev_nb, addrs[dev_nb]);
  722. writel(addrs[dev_nb], master->regs + SVC_I3C_MWDATAB);
  723. last_addr = addrs[dev_nb++];
  724. }
  725. *count = dev_nb;
  726. return 0;
  727. }
  728. static int svc_i3c_update_ibirules(struct svc_i3c_master *master)
  729. {
  730. struct i3c_dev_desc *dev;
  731. u32 reg_mbyte = 0, reg_nobyte = SVC_I3C_IBIRULES_NOBYTE;
  732. unsigned int mbyte_addr_ok = 0, mbyte_addr_ko = 0, nobyte_addr_ok = 0,
  733. nobyte_addr_ko = 0;
  734. bool list_mbyte = false, list_nobyte = false;
  735. /* Create the IBIRULES register for both cases */
  736. i3c_bus_for_each_i3cdev(&master->base.bus, dev) {
  737. if (I3C_BCR_DEVICE_ROLE(dev->info.bcr) == I3C_BCR_I3C_MASTER)
  738. continue;
  739. if (dev->info.bcr & I3C_BCR_IBI_PAYLOAD) {
  740. reg_mbyte |= SVC_I3C_IBIRULES_ADDR(mbyte_addr_ok,
  741. dev->info.dyn_addr);
  742. /* IBI rules cannot be applied to devices with MSb=1 */
  743. if (dev->info.dyn_addr & BIT(7))
  744. mbyte_addr_ko++;
  745. else
  746. mbyte_addr_ok++;
  747. } else {
  748. reg_nobyte |= SVC_I3C_IBIRULES_ADDR(nobyte_addr_ok,
  749. dev->info.dyn_addr);
  750. /* IBI rules cannot be applied to devices with MSb=1 */
  751. if (dev->info.dyn_addr & BIT(7))
  752. nobyte_addr_ko++;
  753. else
  754. nobyte_addr_ok++;
  755. }
  756. }
  757. /* Device list cannot be handled by hardware */
  758. if (!mbyte_addr_ko && mbyte_addr_ok <= SVC_I3C_IBIRULES_ADDRS)
  759. list_mbyte = true;
  760. if (!nobyte_addr_ko && nobyte_addr_ok <= SVC_I3C_IBIRULES_ADDRS)
  761. list_nobyte = true;
  762. /* No list can be properly handled, return an error */
  763. if (!list_mbyte && !list_nobyte)
  764. return -ERANGE;
  765. /* Pick the first list that can be handled by hardware, randomly */
  766. if (list_mbyte)
  767. writel(reg_mbyte, master->regs + SVC_I3C_IBIRULES);
  768. else
  769. writel(reg_nobyte, master->regs + SVC_I3C_IBIRULES);
  770. return 0;
  771. }
  772. static int svc_i3c_master_do_daa(struct i3c_master_controller *m)
  773. {
  774. struct svc_i3c_master *master = to_svc_i3c_master(m);
  775. u8 addrs[SVC_I3C_MAX_DEVS];
  776. unsigned long flags;
  777. unsigned int dev_nb;
  778. int ret, i;
  779. ret = pm_runtime_resume_and_get(master->dev);
  780. if (ret < 0) {
  781. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  782. return ret;
  783. }
  784. spin_lock_irqsave(&master->xferqueue.lock, flags);
  785. ret = svc_i3c_master_do_daa_locked(master, addrs, &dev_nb);
  786. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  787. if (ret) {
  788. svc_i3c_master_emit_stop(master);
  789. svc_i3c_master_clear_merrwarn(master);
  790. goto rpm_out;
  791. }
  792. /* Register all devices who participated to the core */
  793. for (i = 0; i < dev_nb; i++) {
  794. ret = i3c_master_add_i3c_dev_locked(m, addrs[i]);
  795. if (ret)
  796. goto rpm_out;
  797. }
  798. /* Configure IBI auto-rules */
  799. ret = svc_i3c_update_ibirules(master);
  800. if (ret)
  801. dev_err(master->dev, "Cannot handle such a list of devices");
  802. rpm_out:
  803. pm_runtime_mark_last_busy(master->dev);
  804. pm_runtime_put_autosuspend(master->dev);
  805. return ret;
  806. }
  807. static int svc_i3c_master_read(struct svc_i3c_master *master,
  808. u8 *in, unsigned int len)
  809. {
  810. int offset = 0, i;
  811. u32 mdctrl, mstatus;
  812. bool completed = false;
  813. unsigned int count;
  814. unsigned long start = jiffies;
  815. while (!completed) {
  816. mstatus = readl(master->regs + SVC_I3C_MSTATUS);
  817. if (SVC_I3C_MSTATUS_COMPLETE(mstatus) != 0)
  818. completed = true;
  819. if (time_after(jiffies, start + msecs_to_jiffies(1000))) {
  820. dev_dbg(master->dev, "I3C read timeout\n");
  821. return -ETIMEDOUT;
  822. }
  823. mdctrl = readl(master->regs + SVC_I3C_MDATACTRL);
  824. count = SVC_I3C_MDATACTRL_RXCOUNT(mdctrl);
  825. if (offset + count > len) {
  826. dev_err(master->dev, "I3C receive length too long!\n");
  827. return -EINVAL;
  828. }
  829. for (i = 0; i < count; i++)
  830. in[offset + i] = readl(master->regs + SVC_I3C_MRDATAB);
  831. offset += count;
  832. }
  833. return offset;
  834. }
  835. static int svc_i3c_master_write(struct svc_i3c_master *master,
  836. const u8 *out, unsigned int len)
  837. {
  838. int offset = 0, ret;
  839. u32 mdctrl;
  840. while (offset < len) {
  841. ret = readl_poll_timeout(master->regs + SVC_I3C_MDATACTRL,
  842. mdctrl,
  843. !(mdctrl & SVC_I3C_MDATACTRL_TXFULL),
  844. 0, 1000);
  845. if (ret)
  846. return ret;
  847. /*
  848. * The last byte to be sent over the bus must either have the
  849. * "end" bit set or be written in MWDATABE.
  850. */
  851. if (likely(offset < (len - 1)))
  852. writel(out[offset++], master->regs + SVC_I3C_MWDATAB);
  853. else
  854. writel(out[offset++], master->regs + SVC_I3C_MWDATABE);
  855. }
  856. return 0;
  857. }
  858. static int svc_i3c_master_xfer(struct svc_i3c_master *master,
  859. bool rnw, unsigned int xfer_type, u8 addr,
  860. u8 *in, const u8 *out, unsigned int xfer_len,
  861. unsigned int *read_len, bool continued)
  862. {
  863. u32 reg;
  864. int ret;
  865. /* clean SVC_I3C_MINT_IBIWON w1c bits */
  866. writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS);
  867. writel(SVC_I3C_MCTRL_REQUEST_START_ADDR |
  868. xfer_type |
  869. SVC_I3C_MCTRL_IBIRESP_NACK |
  870. SVC_I3C_MCTRL_DIR(rnw) |
  871. SVC_I3C_MCTRL_ADDR(addr) |
  872. SVC_I3C_MCTRL_RDTERM(*read_len),
  873. master->regs + SVC_I3C_MCTRL);
  874. ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  875. SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000);
  876. if (ret)
  877. goto emit_stop;
  878. if (readl(master->regs + SVC_I3C_MERRWARN) & SVC_I3C_MERRWARN_NACK) {
  879. ret = -ENXIO;
  880. goto emit_stop;
  881. }
  882. if (rnw)
  883. ret = svc_i3c_master_read(master, in, xfer_len);
  884. else
  885. ret = svc_i3c_master_write(master, out, xfer_len);
  886. if (ret < 0)
  887. goto emit_stop;
  888. /*
  889. * According to I3C spec ver 1.1.1, 5.1.2.2.3 Consequence of Controller Starting a Frame
  890. * with I3C Target Address.
  891. *
  892. * The I3C Controller normally should start a Frame, the Address may be arbitrated, and so
  893. * the Controller shall monitor to see whether an In-Band Interrupt request, a Controller
  894. * Role Request (i.e., Secondary Controller requests to become the Active Controller), or
  895. * a Hot-Join Request has been made.
  896. *
  897. * If missed IBIWON check, the wrong data will be return. When IBIWON happen, return failure
  898. * and yield the above events handler.
  899. */
  900. if (SVC_I3C_MSTATUS_IBIWON(reg)) {
  901. ret = -ENXIO;
  902. goto emit_stop;
  903. }
  904. if (rnw)
  905. *read_len = ret;
  906. ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  907. SVC_I3C_MSTATUS_COMPLETE(reg), 0, 1000);
  908. if (ret)
  909. goto emit_stop;
  910. writel(SVC_I3C_MINT_COMPLETE, master->regs + SVC_I3C_MSTATUS);
  911. if (!continued) {
  912. svc_i3c_master_emit_stop(master);
  913. /* Wait idle if stop is sent. */
  914. readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  915. SVC_I3C_MSTATUS_STATE_IDLE(reg), 0, 1000);
  916. }
  917. return 0;
  918. emit_stop:
  919. svc_i3c_master_emit_stop(master);
  920. svc_i3c_master_clear_merrwarn(master);
  921. return ret;
  922. }
  923. static struct svc_i3c_xfer *
  924. svc_i3c_master_alloc_xfer(struct svc_i3c_master *master, unsigned int ncmds)
  925. {
  926. struct svc_i3c_xfer *xfer;
  927. xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
  928. if (!xfer)
  929. return NULL;
  930. INIT_LIST_HEAD(&xfer->node);
  931. xfer->ncmds = ncmds;
  932. xfer->ret = -ETIMEDOUT;
  933. return xfer;
  934. }
  935. static void svc_i3c_master_free_xfer(struct svc_i3c_xfer *xfer)
  936. {
  937. kfree(xfer);
  938. }
  939. static void svc_i3c_master_dequeue_xfer_locked(struct svc_i3c_master *master,
  940. struct svc_i3c_xfer *xfer)
  941. {
  942. if (master->xferqueue.cur == xfer)
  943. master->xferqueue.cur = NULL;
  944. else
  945. list_del_init(&xfer->node);
  946. }
  947. static void svc_i3c_master_dequeue_xfer(struct svc_i3c_master *master,
  948. struct svc_i3c_xfer *xfer)
  949. {
  950. unsigned long flags;
  951. spin_lock_irqsave(&master->xferqueue.lock, flags);
  952. svc_i3c_master_dequeue_xfer_locked(master, xfer);
  953. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  954. }
  955. static void svc_i3c_master_start_xfer_locked(struct svc_i3c_master *master)
  956. {
  957. struct svc_i3c_xfer *xfer = master->xferqueue.cur;
  958. int ret, i;
  959. if (!xfer)
  960. return;
  961. svc_i3c_master_clear_merrwarn(master);
  962. svc_i3c_master_flush_fifo(master);
  963. for (i = 0; i < xfer->ncmds; i++) {
  964. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  965. ret = svc_i3c_master_xfer(master, cmd->rnw, xfer->type,
  966. cmd->addr, cmd->in, cmd->out,
  967. cmd->len, &cmd->read_len,
  968. cmd->continued);
  969. if (ret)
  970. break;
  971. }
  972. xfer->ret = ret;
  973. complete(&xfer->comp);
  974. if (ret < 0)
  975. svc_i3c_master_dequeue_xfer_locked(master, xfer);
  976. xfer = list_first_entry_or_null(&master->xferqueue.list,
  977. struct svc_i3c_xfer,
  978. node);
  979. if (xfer)
  980. list_del_init(&xfer->node);
  981. master->xferqueue.cur = xfer;
  982. svc_i3c_master_start_xfer_locked(master);
  983. }
  984. static void svc_i3c_master_enqueue_xfer(struct svc_i3c_master *master,
  985. struct svc_i3c_xfer *xfer)
  986. {
  987. unsigned long flags;
  988. int ret;
  989. ret = pm_runtime_resume_and_get(master->dev);
  990. if (ret < 0) {
  991. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  992. return;
  993. }
  994. init_completion(&xfer->comp);
  995. spin_lock_irqsave(&master->xferqueue.lock, flags);
  996. if (master->xferqueue.cur) {
  997. list_add_tail(&xfer->node, &master->xferqueue.list);
  998. } else {
  999. master->xferqueue.cur = xfer;
  1000. svc_i3c_master_start_xfer_locked(master);
  1001. }
  1002. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  1003. pm_runtime_mark_last_busy(master->dev);
  1004. pm_runtime_put_autosuspend(master->dev);
  1005. }
  1006. static bool
  1007. svc_i3c_master_supports_ccc_cmd(struct i3c_master_controller *master,
  1008. const struct i3c_ccc_cmd *cmd)
  1009. {
  1010. /* No software support for CCC commands targeting more than one slave */
  1011. return (cmd->ndests == 1);
  1012. }
  1013. static int svc_i3c_master_send_bdcast_ccc_cmd(struct svc_i3c_master *master,
  1014. struct i3c_ccc_cmd *ccc)
  1015. {
  1016. unsigned int xfer_len = ccc->dests[0].payload.len + 1;
  1017. struct svc_i3c_xfer *xfer;
  1018. struct svc_i3c_cmd *cmd;
  1019. u8 *buf;
  1020. int ret;
  1021. xfer = svc_i3c_master_alloc_xfer(master, 1);
  1022. if (!xfer)
  1023. return -ENOMEM;
  1024. buf = kmalloc(xfer_len, GFP_KERNEL);
  1025. if (!buf) {
  1026. svc_i3c_master_free_xfer(xfer);
  1027. return -ENOMEM;
  1028. }
  1029. buf[0] = ccc->id;
  1030. memcpy(&buf[1], ccc->dests[0].payload.data, ccc->dests[0].payload.len);
  1031. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1032. cmd = &xfer->cmds[0];
  1033. cmd->addr = ccc->dests[0].addr;
  1034. cmd->rnw = ccc->rnw;
  1035. cmd->in = NULL;
  1036. cmd->out = buf;
  1037. cmd->len = xfer_len;
  1038. cmd->read_len = 0;
  1039. cmd->continued = false;
  1040. mutex_lock(&master->lock);
  1041. svc_i3c_master_enqueue_xfer(master, xfer);
  1042. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1043. svc_i3c_master_dequeue_xfer(master, xfer);
  1044. mutex_unlock(&master->lock);
  1045. ret = xfer->ret;
  1046. kfree(buf);
  1047. svc_i3c_master_free_xfer(xfer);
  1048. return ret;
  1049. }
  1050. static int svc_i3c_master_send_direct_ccc_cmd(struct svc_i3c_master *master,
  1051. struct i3c_ccc_cmd *ccc)
  1052. {
  1053. unsigned int xfer_len = ccc->dests[0].payload.len;
  1054. unsigned int read_len = ccc->rnw ? xfer_len : 0;
  1055. struct svc_i3c_xfer *xfer;
  1056. struct svc_i3c_cmd *cmd;
  1057. int ret;
  1058. xfer = svc_i3c_master_alloc_xfer(master, 2);
  1059. if (!xfer)
  1060. return -ENOMEM;
  1061. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1062. /* Broadcasted message */
  1063. cmd = &xfer->cmds[0];
  1064. cmd->addr = I3C_BROADCAST_ADDR;
  1065. cmd->rnw = 0;
  1066. cmd->in = NULL;
  1067. cmd->out = &ccc->id;
  1068. cmd->len = 1;
  1069. cmd->read_len = 0;
  1070. cmd->continued = true;
  1071. /* Directed message */
  1072. cmd = &xfer->cmds[1];
  1073. cmd->addr = ccc->dests[0].addr;
  1074. cmd->rnw = ccc->rnw;
  1075. cmd->in = ccc->rnw ? ccc->dests[0].payload.data : NULL;
  1076. cmd->out = ccc->rnw ? NULL : ccc->dests[0].payload.data,
  1077. cmd->len = xfer_len;
  1078. cmd->read_len = read_len;
  1079. cmd->continued = false;
  1080. mutex_lock(&master->lock);
  1081. svc_i3c_master_enqueue_xfer(master, xfer);
  1082. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1083. svc_i3c_master_dequeue_xfer(master, xfer);
  1084. mutex_unlock(&master->lock);
  1085. if (cmd->read_len != xfer_len)
  1086. ccc->dests[0].payload.len = cmd->read_len;
  1087. ret = xfer->ret;
  1088. svc_i3c_master_free_xfer(xfer);
  1089. return ret;
  1090. }
  1091. static int svc_i3c_master_send_ccc_cmd(struct i3c_master_controller *m,
  1092. struct i3c_ccc_cmd *cmd)
  1093. {
  1094. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1095. bool broadcast = cmd->id < 0x80;
  1096. int ret;
  1097. if (broadcast)
  1098. ret = svc_i3c_master_send_bdcast_ccc_cmd(master, cmd);
  1099. else
  1100. ret = svc_i3c_master_send_direct_ccc_cmd(master, cmd);
  1101. if (ret)
  1102. cmd->err = I3C_ERROR_M2;
  1103. return ret;
  1104. }
  1105. static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
  1106. struct i3c_priv_xfer *xfers,
  1107. int nxfers)
  1108. {
  1109. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1110. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1111. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1112. struct svc_i3c_xfer *xfer;
  1113. int ret, i;
  1114. xfer = svc_i3c_master_alloc_xfer(master, nxfers);
  1115. if (!xfer)
  1116. return -ENOMEM;
  1117. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1118. for (i = 0; i < nxfers; i++) {
  1119. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  1120. cmd->addr = master->addrs[data->index];
  1121. cmd->rnw = xfers[i].rnw;
  1122. cmd->in = xfers[i].rnw ? xfers[i].data.in : NULL;
  1123. cmd->out = xfers[i].rnw ? NULL : xfers[i].data.out;
  1124. cmd->len = xfers[i].len;
  1125. cmd->read_len = xfers[i].rnw ? xfers[i].len : 0;
  1126. cmd->continued = (i + 1) < nxfers;
  1127. }
  1128. mutex_lock(&master->lock);
  1129. svc_i3c_master_enqueue_xfer(master, xfer);
  1130. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1131. svc_i3c_master_dequeue_xfer(master, xfer);
  1132. mutex_unlock(&master->lock);
  1133. ret = xfer->ret;
  1134. svc_i3c_master_free_xfer(xfer);
  1135. return ret;
  1136. }
  1137. static int svc_i3c_master_i2c_xfers(struct i2c_dev_desc *dev,
  1138. const struct i2c_msg *xfers,
  1139. int nxfers)
  1140. {
  1141. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  1142. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1143. struct svc_i3c_i2c_dev_data *data = i2c_dev_get_master_data(dev);
  1144. struct svc_i3c_xfer *xfer;
  1145. int ret, i;
  1146. xfer = svc_i3c_master_alloc_xfer(master, nxfers);
  1147. if (!xfer)
  1148. return -ENOMEM;
  1149. xfer->type = SVC_I3C_MCTRL_TYPE_I2C;
  1150. for (i = 0; i < nxfers; i++) {
  1151. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  1152. cmd->addr = master->addrs[data->index];
  1153. cmd->rnw = xfers[i].flags & I2C_M_RD;
  1154. cmd->in = cmd->rnw ? xfers[i].buf : NULL;
  1155. cmd->out = cmd->rnw ? NULL : xfers[i].buf;
  1156. cmd->len = xfers[i].len;
  1157. cmd->read_len = cmd->rnw ? xfers[i].len : 0;
  1158. cmd->continued = (i + 1 < nxfers);
  1159. }
  1160. mutex_lock(&master->lock);
  1161. svc_i3c_master_enqueue_xfer(master, xfer);
  1162. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1163. svc_i3c_master_dequeue_xfer(master, xfer);
  1164. mutex_unlock(&master->lock);
  1165. ret = xfer->ret;
  1166. svc_i3c_master_free_xfer(xfer);
  1167. return ret;
  1168. }
  1169. static int svc_i3c_master_request_ibi(struct i3c_dev_desc *dev,
  1170. const struct i3c_ibi_setup *req)
  1171. {
  1172. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1173. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1174. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1175. unsigned long flags;
  1176. unsigned int i;
  1177. if (dev->ibi->max_payload_len > SVC_I3C_FIFO_SIZE) {
  1178. dev_err(master->dev, "IBI max payload %d should be < %d\n",
  1179. dev->ibi->max_payload_len, SVC_I3C_FIFO_SIZE);
  1180. return -ERANGE;
  1181. }
  1182. data->ibi_pool = i3c_generic_ibi_alloc_pool(dev, req);
  1183. if (IS_ERR(data->ibi_pool))
  1184. return PTR_ERR(data->ibi_pool);
  1185. spin_lock_irqsave(&master->ibi.lock, flags);
  1186. for (i = 0; i < master->ibi.num_slots; i++) {
  1187. if (!master->ibi.slots[i]) {
  1188. data->ibi = i;
  1189. master->ibi.slots[i] = dev;
  1190. break;
  1191. }
  1192. }
  1193. spin_unlock_irqrestore(&master->ibi.lock, flags);
  1194. if (i < master->ibi.num_slots)
  1195. return 0;
  1196. i3c_generic_ibi_free_pool(data->ibi_pool);
  1197. data->ibi_pool = NULL;
  1198. return -ENOSPC;
  1199. }
  1200. static void svc_i3c_master_free_ibi(struct i3c_dev_desc *dev)
  1201. {
  1202. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1203. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1204. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1205. unsigned long flags;
  1206. spin_lock_irqsave(&master->ibi.lock, flags);
  1207. master->ibi.slots[data->ibi] = NULL;
  1208. data->ibi = -1;
  1209. spin_unlock_irqrestore(&master->ibi.lock, flags);
  1210. i3c_generic_ibi_free_pool(data->ibi_pool);
  1211. }
  1212. static int svc_i3c_master_enable_ibi(struct i3c_dev_desc *dev)
  1213. {
  1214. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1215. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1216. int ret;
  1217. ret = pm_runtime_resume_and_get(master->dev);
  1218. if (ret < 0) {
  1219. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  1220. return ret;
  1221. }
  1222. svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
  1223. return i3c_master_enec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR);
  1224. }
  1225. static int svc_i3c_master_disable_ibi(struct i3c_dev_desc *dev)
  1226. {
  1227. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1228. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1229. int ret;
  1230. svc_i3c_master_disable_interrupts(master);
  1231. ret = i3c_master_disec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR);
  1232. pm_runtime_mark_last_busy(master->dev);
  1233. pm_runtime_put_autosuspend(master->dev);
  1234. return ret;
  1235. }
  1236. static void svc_i3c_master_recycle_ibi_slot(struct i3c_dev_desc *dev,
  1237. struct i3c_ibi_slot *slot)
  1238. {
  1239. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1240. i3c_generic_ibi_recycle_slot(data->ibi_pool, slot);
  1241. }
  1242. static const struct i3c_master_controller_ops svc_i3c_master_ops = {
  1243. .bus_init = svc_i3c_master_bus_init,
  1244. .bus_cleanup = svc_i3c_master_bus_cleanup,
  1245. .attach_i3c_dev = svc_i3c_master_attach_i3c_dev,
  1246. .detach_i3c_dev = svc_i3c_master_detach_i3c_dev,
  1247. .reattach_i3c_dev = svc_i3c_master_reattach_i3c_dev,
  1248. .attach_i2c_dev = svc_i3c_master_attach_i2c_dev,
  1249. .detach_i2c_dev = svc_i3c_master_detach_i2c_dev,
  1250. .do_daa = svc_i3c_master_do_daa,
  1251. .supports_ccc_cmd = svc_i3c_master_supports_ccc_cmd,
  1252. .send_ccc_cmd = svc_i3c_master_send_ccc_cmd,
  1253. .priv_xfers = svc_i3c_master_priv_xfers,
  1254. .i2c_xfers = svc_i3c_master_i2c_xfers,
  1255. .request_ibi = svc_i3c_master_request_ibi,
  1256. .free_ibi = svc_i3c_master_free_ibi,
  1257. .recycle_ibi_slot = svc_i3c_master_recycle_ibi_slot,
  1258. .enable_ibi = svc_i3c_master_enable_ibi,
  1259. .disable_ibi = svc_i3c_master_disable_ibi,
  1260. };
  1261. static int svc_i3c_master_prepare_clks(struct svc_i3c_master *master)
  1262. {
  1263. int ret = 0;
  1264. ret = clk_prepare_enable(master->pclk);
  1265. if (ret)
  1266. return ret;
  1267. ret = clk_prepare_enable(master->fclk);
  1268. if (ret) {
  1269. clk_disable_unprepare(master->pclk);
  1270. return ret;
  1271. }
  1272. ret = clk_prepare_enable(master->sclk);
  1273. if (ret) {
  1274. clk_disable_unprepare(master->pclk);
  1275. clk_disable_unprepare(master->fclk);
  1276. return ret;
  1277. }
  1278. return 0;
  1279. }
  1280. static void svc_i3c_master_unprepare_clks(struct svc_i3c_master *master)
  1281. {
  1282. clk_disable_unprepare(master->pclk);
  1283. clk_disable_unprepare(master->fclk);
  1284. clk_disable_unprepare(master->sclk);
  1285. }
  1286. static int svc_i3c_master_probe(struct platform_device *pdev)
  1287. {
  1288. struct device *dev = &pdev->dev;
  1289. struct svc_i3c_master *master;
  1290. int ret;
  1291. master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
  1292. if (!master)
  1293. return -ENOMEM;
  1294. master->regs = devm_platform_ioremap_resource(pdev, 0);
  1295. if (IS_ERR(master->regs))
  1296. return PTR_ERR(master->regs);
  1297. master->pclk = devm_clk_get(dev, "pclk");
  1298. if (IS_ERR(master->pclk))
  1299. return PTR_ERR(master->pclk);
  1300. master->fclk = devm_clk_get(dev, "fast_clk");
  1301. if (IS_ERR(master->fclk))
  1302. return PTR_ERR(master->fclk);
  1303. master->sclk = devm_clk_get(dev, "slow_clk");
  1304. if (IS_ERR(master->sclk))
  1305. return PTR_ERR(master->sclk);
  1306. master->irq = platform_get_irq(pdev, 0);
  1307. if (master->irq <= 0)
  1308. return -ENOENT;
  1309. master->dev = dev;
  1310. ret = svc_i3c_master_prepare_clks(master);
  1311. if (ret)
  1312. return ret;
  1313. INIT_WORK(&master->hj_work, svc_i3c_master_hj_work);
  1314. INIT_WORK(&master->ibi_work, svc_i3c_master_ibi_work);
  1315. mutex_init(&master->lock);
  1316. ret = devm_request_irq(dev, master->irq, svc_i3c_master_irq_handler,
  1317. IRQF_NO_SUSPEND, "svc-i3c-irq", master);
  1318. if (ret)
  1319. goto err_disable_clks;
  1320. master->free_slots = GENMASK(SVC_I3C_MAX_DEVS - 1, 0);
  1321. spin_lock_init(&master->xferqueue.lock);
  1322. INIT_LIST_HEAD(&master->xferqueue.list);
  1323. spin_lock_init(&master->ibi.lock);
  1324. master->ibi.num_slots = SVC_I3C_MAX_DEVS;
  1325. master->ibi.slots = devm_kcalloc(&pdev->dev, master->ibi.num_slots,
  1326. sizeof(*master->ibi.slots),
  1327. GFP_KERNEL);
  1328. if (!master->ibi.slots) {
  1329. ret = -ENOMEM;
  1330. goto err_disable_clks;
  1331. }
  1332. platform_set_drvdata(pdev, master);
  1333. pm_runtime_set_autosuspend_delay(&pdev->dev, SVC_I3C_PM_TIMEOUT_MS);
  1334. pm_runtime_use_autosuspend(&pdev->dev);
  1335. pm_runtime_get_noresume(&pdev->dev);
  1336. pm_runtime_set_active(&pdev->dev);
  1337. pm_runtime_enable(&pdev->dev);
  1338. svc_i3c_master_reset(master);
  1339. /* Register the master */
  1340. ret = i3c_master_register(&master->base, &pdev->dev,
  1341. &svc_i3c_master_ops, false);
  1342. if (ret)
  1343. goto rpm_disable;
  1344. pm_runtime_mark_last_busy(&pdev->dev);
  1345. pm_runtime_put_autosuspend(&pdev->dev);
  1346. return 0;
  1347. rpm_disable:
  1348. pm_runtime_dont_use_autosuspend(&pdev->dev);
  1349. pm_runtime_put_noidle(&pdev->dev);
  1350. pm_runtime_set_suspended(&pdev->dev);
  1351. pm_runtime_disable(&pdev->dev);
  1352. err_disable_clks:
  1353. svc_i3c_master_unprepare_clks(master);
  1354. return ret;
  1355. }
  1356. static int svc_i3c_master_remove(struct platform_device *pdev)
  1357. {
  1358. struct svc_i3c_master *master = platform_get_drvdata(pdev);
  1359. int ret;
  1360. ret = i3c_master_unregister(&master->base);
  1361. if (ret)
  1362. return ret;
  1363. pm_runtime_dont_use_autosuspend(&pdev->dev);
  1364. pm_runtime_disable(&pdev->dev);
  1365. return 0;
  1366. }
  1367. static int __maybe_unused svc_i3c_runtime_suspend(struct device *dev)
  1368. {
  1369. struct svc_i3c_master *master = dev_get_drvdata(dev);
  1370. svc_i3c_master_unprepare_clks(master);
  1371. pinctrl_pm_select_sleep_state(dev);
  1372. return 0;
  1373. }
  1374. static int __maybe_unused svc_i3c_runtime_resume(struct device *dev)
  1375. {
  1376. struct svc_i3c_master *master = dev_get_drvdata(dev);
  1377. pinctrl_pm_select_default_state(dev);
  1378. svc_i3c_master_prepare_clks(master);
  1379. return 0;
  1380. }
  1381. static const struct dev_pm_ops svc_i3c_pm_ops = {
  1382. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
  1383. pm_runtime_force_resume)
  1384. SET_RUNTIME_PM_OPS(svc_i3c_runtime_suspend,
  1385. svc_i3c_runtime_resume, NULL)
  1386. };
  1387. static const struct of_device_id svc_i3c_master_of_match_tbl[] = {
  1388. { .compatible = "silvaco,i3c-master" },
  1389. { /* sentinel */ },
  1390. };
  1391. MODULE_DEVICE_TABLE(of, svc_i3c_master_of_match_tbl);
  1392. static struct platform_driver svc_i3c_master = {
  1393. .probe = svc_i3c_master_probe,
  1394. .remove = svc_i3c_master_remove,
  1395. .driver = {
  1396. .name = "silvaco-i3c-master",
  1397. .of_match_table = svc_i3c_master_of_match_tbl,
  1398. .pm = &svc_i3c_pm_ops,
  1399. },
  1400. };
  1401. module_platform_driver(svc_i3c_master);
  1402. MODULE_AUTHOR("Conor Culhane <[email protected]>");
  1403. MODULE_AUTHOR("Miquel Raynal <[email protected]>");
  1404. MODULE_DESCRIPTION("Silvaco dual-role I3C master driver");
  1405. MODULE_LICENSE("GPL v2");