svc-i3c-master.c 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972
  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 <miquel.raynal@bootlin.com>
  7. * Based on a work from: Conor Culhane <conor.culhane@silvaco.com>
  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. #define SVC_I3C_PPBAUD_MAX 15
  121. #define SVC_I3C_QUICK_I2C_CLK 4170000
  122. #define SVC_I3C_EVENT_IBI GENMASK(7, 0)
  123. #define SVC_I3C_EVENT_HOTJOIN BIT(31)
  124. struct svc_i3c_cmd {
  125. u8 addr;
  126. bool rnw;
  127. u8 *in;
  128. const void *out;
  129. unsigned int len;
  130. unsigned int actual_len;
  131. struct i3c_priv_xfer *xfer;
  132. bool continued;
  133. };
  134. struct svc_i3c_xfer {
  135. struct list_head node;
  136. struct completion comp;
  137. int ret;
  138. unsigned int type;
  139. unsigned int ncmds;
  140. struct svc_i3c_cmd cmds[] __counted_by(ncmds);
  141. };
  142. struct svc_i3c_regs_save {
  143. u32 mconfig;
  144. u32 mdynaddr;
  145. };
  146. struct svc_i3c_drvdata {
  147. u32 quirks;
  148. };
  149. /**
  150. * struct svc_i3c_master - Silvaco I3C Master structure
  151. * @base: I3C master controller
  152. * @dev: Corresponding device
  153. * @regs: Memory mapping
  154. * @saved_regs: Volatile values for PM operations
  155. * @free_slots: Bit array of available slots
  156. * @addrs: Array containing the dynamic addresses of each attached device
  157. * @descs: Array of descriptors, one per attached device
  158. * @hj_work: Hot-join work
  159. * @ibi_work: IBI work
  160. * @irq: Main interrupt
  161. * @pclk: System clock
  162. * @fclk: Fast clock (bus)
  163. * @sclk: Slow clock (other events)
  164. * @xferqueue: Transfer queue structure
  165. * @xferqueue.list: List member
  166. * @xferqueue.cur: Current ongoing transfer
  167. * @xferqueue.lock: Queue lock
  168. * @ibi: IBI structure
  169. * @ibi.num_slots: Number of slots available in @ibi.slots
  170. * @ibi.slots: Available IBI slots
  171. * @ibi.tbq_slot: To be queued IBI slot
  172. * @ibi.lock: IBI lock
  173. * @lock: Transfer lock, protect between IBI work thread and callbacks from master
  174. * @drvdata: Driver data
  175. * @enabled_events: Bit masks for enable events (IBI, HotJoin).
  176. * @mctrl_config: Configuration value in SVC_I3C_MCTRL for setting speed back.
  177. */
  178. struct svc_i3c_master {
  179. struct i3c_master_controller base;
  180. struct device *dev;
  181. void __iomem *regs;
  182. struct svc_i3c_regs_save saved_regs;
  183. u32 free_slots;
  184. u8 addrs[SVC_I3C_MAX_DEVS];
  185. struct i3c_dev_desc *descs[SVC_I3C_MAX_DEVS];
  186. struct work_struct hj_work;
  187. struct work_struct ibi_work;
  188. int irq;
  189. struct clk *pclk;
  190. struct clk *fclk;
  191. struct clk *sclk;
  192. struct {
  193. struct list_head list;
  194. struct svc_i3c_xfer *cur;
  195. /* Prevent races between transfers */
  196. spinlock_t lock;
  197. } xferqueue;
  198. struct {
  199. unsigned int num_slots;
  200. struct i3c_dev_desc **slots;
  201. struct i3c_ibi_slot *tbq_slot;
  202. /* Prevent races within IBI handlers */
  203. spinlock_t lock;
  204. } ibi;
  205. struct mutex lock;
  206. const struct svc_i3c_drvdata *drvdata;
  207. u32 enabled_events;
  208. u32 mctrl_config;
  209. };
  210. /**
  211. * struct svc_i3c_i2c_dev_data - Device specific data
  212. * @index: Index in the master tables corresponding to this device
  213. * @ibi: IBI slot index in the master structure
  214. * @ibi_pool: IBI pool associated to this device
  215. */
  216. struct svc_i3c_i2c_dev_data {
  217. u8 index;
  218. int ibi;
  219. struct i3c_generic_ibi_pool *ibi_pool;
  220. };
  221. static inline bool is_events_enabled(struct svc_i3c_master *master, u32 mask)
  222. {
  223. return !!(master->enabled_events & mask);
  224. }
  225. static bool svc_i3c_master_error(struct svc_i3c_master *master)
  226. {
  227. u32 mstatus, merrwarn;
  228. mstatus = readl(master->regs + SVC_I3C_MSTATUS);
  229. if (SVC_I3C_MSTATUS_ERRWARN(mstatus)) {
  230. merrwarn = readl(master->regs + SVC_I3C_MERRWARN);
  231. writel(merrwarn, master->regs + SVC_I3C_MERRWARN);
  232. /* Ignore timeout error */
  233. if (merrwarn & SVC_I3C_MERRWARN_TIMEOUT) {
  234. dev_dbg(master->dev, "Warning condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
  235. mstatus, merrwarn);
  236. return false;
  237. }
  238. dev_err(master->dev,
  239. "Error condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
  240. mstatus, merrwarn);
  241. return true;
  242. }
  243. return false;
  244. }
  245. static void svc_i3c_master_enable_interrupts(struct svc_i3c_master *master, u32 mask)
  246. {
  247. writel(mask, master->regs + SVC_I3C_MINTSET);
  248. }
  249. static void svc_i3c_master_disable_interrupts(struct svc_i3c_master *master)
  250. {
  251. u32 mask = readl(master->regs + SVC_I3C_MINTSET);
  252. writel(mask, master->regs + SVC_I3C_MINTCLR);
  253. }
  254. static void svc_i3c_master_clear_merrwarn(struct svc_i3c_master *master)
  255. {
  256. /* Clear pending warnings */
  257. writel(readl(master->regs + SVC_I3C_MERRWARN),
  258. master->regs + SVC_I3C_MERRWARN);
  259. }
  260. static void svc_i3c_master_flush_fifo(struct svc_i3c_master *master)
  261. {
  262. /* Flush FIFOs */
  263. writel(SVC_I3C_MDATACTRL_FLUSHTB | SVC_I3C_MDATACTRL_FLUSHRB,
  264. master->regs + SVC_I3C_MDATACTRL);
  265. }
  266. static void svc_i3c_master_reset_fifo_trigger(struct svc_i3c_master *master)
  267. {
  268. u32 reg;
  269. /* Set RX and TX tigger levels, flush FIFOs */
  270. reg = SVC_I3C_MDATACTRL_FLUSHTB |
  271. SVC_I3C_MDATACTRL_FLUSHRB |
  272. SVC_I3C_MDATACTRL_UNLOCK_TRIG |
  273. SVC_I3C_MDATACTRL_TXTRIG_FIFO_NOT_FULL |
  274. SVC_I3C_MDATACTRL_RXTRIG_FIFO_NOT_EMPTY;
  275. writel(reg, master->regs + SVC_I3C_MDATACTRL);
  276. }
  277. static void svc_i3c_master_reset(struct svc_i3c_master *master)
  278. {
  279. svc_i3c_master_clear_merrwarn(master);
  280. svc_i3c_master_reset_fifo_trigger(master);
  281. svc_i3c_master_disable_interrupts(master);
  282. }
  283. static inline struct svc_i3c_master *
  284. to_svc_i3c_master(struct i3c_master_controller *master)
  285. {
  286. return container_of(master, struct svc_i3c_master, base);
  287. }
  288. static void svc_i3c_master_hj_work(struct work_struct *work)
  289. {
  290. struct svc_i3c_master *master;
  291. master = container_of(work, struct svc_i3c_master, hj_work);
  292. i3c_master_do_daa(&master->base);
  293. }
  294. static struct i3c_dev_desc *
  295. svc_i3c_master_dev_from_addr(struct svc_i3c_master *master,
  296. unsigned int ibiaddr)
  297. {
  298. int i;
  299. for (i = 0; i < SVC_I3C_MAX_DEVS; i++)
  300. if (master->addrs[i] == ibiaddr)
  301. break;
  302. if (i == SVC_I3C_MAX_DEVS)
  303. return NULL;
  304. return master->descs[i];
  305. }
  306. static void svc_i3c_master_emit_stop(struct svc_i3c_master *master)
  307. {
  308. writel(SVC_I3C_MCTRL_REQUEST_STOP, master->regs + SVC_I3C_MCTRL);
  309. /*
  310. * This delay is necessary after the emission of a stop, otherwise eg.
  311. * repeating IBIs do not get detected. There is a note in the manual
  312. * about it, stating that the stop condition might not be settled
  313. * correctly if a start condition follows too rapidly.
  314. */
  315. udelay(1);
  316. }
  317. static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
  318. struct i3c_dev_desc *dev)
  319. {
  320. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  321. struct i3c_ibi_slot *slot;
  322. unsigned int count;
  323. u32 mdatactrl;
  324. int ret, val;
  325. u8 *buf;
  326. slot = i3c_generic_ibi_get_free_slot(data->ibi_pool);
  327. if (!slot)
  328. return -ENOSPC;
  329. slot->len = 0;
  330. buf = slot->data;
  331. ret = readl_relaxed_poll_timeout(master->regs + SVC_I3C_MSTATUS, val,
  332. SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000);
  333. if (ret) {
  334. dev_err(master->dev, "Timeout when polling for COMPLETE\n");
  335. i3c_generic_ibi_recycle_slot(data->ibi_pool, slot);
  336. return ret;
  337. }
  338. while (SVC_I3C_MSTATUS_RXPEND(readl(master->regs + SVC_I3C_MSTATUS)) &&
  339. slot->len < SVC_I3C_FIFO_SIZE) {
  340. mdatactrl = readl(master->regs + SVC_I3C_MDATACTRL);
  341. count = SVC_I3C_MDATACTRL_RXCOUNT(mdatactrl);
  342. readsb(master->regs + SVC_I3C_MRDATAB, buf, count);
  343. slot->len += count;
  344. buf += count;
  345. }
  346. master->ibi.tbq_slot = slot;
  347. return 0;
  348. }
  349. static void svc_i3c_master_ack_ibi(struct svc_i3c_master *master,
  350. bool mandatory_byte)
  351. {
  352. unsigned int ibi_ack_nack;
  353. ibi_ack_nack = SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK;
  354. if (mandatory_byte)
  355. ibi_ack_nack |= SVC_I3C_MCTRL_IBIRESP_ACK_WITH_BYTE;
  356. else
  357. ibi_ack_nack |= SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE;
  358. writel(ibi_ack_nack, master->regs + SVC_I3C_MCTRL);
  359. }
  360. static void svc_i3c_master_nack_ibi(struct svc_i3c_master *master)
  361. {
  362. writel(SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK |
  363. SVC_I3C_MCTRL_IBIRESP_NACK,
  364. master->regs + SVC_I3C_MCTRL);
  365. }
  366. static void svc_i3c_master_ibi_work(struct work_struct *work)
  367. {
  368. struct svc_i3c_master *master = container_of(work, struct svc_i3c_master, ibi_work);
  369. struct svc_i3c_i2c_dev_data *data;
  370. unsigned int ibitype, ibiaddr;
  371. struct i3c_dev_desc *dev;
  372. u32 status, val;
  373. int ret;
  374. mutex_lock(&master->lock);
  375. /*
  376. * IBIWON may be set before SVC_I3C_MCTRL_REQUEST_AUTO_IBI, causing
  377. * readl_relaxed_poll_timeout() to return immediately. Consequently,
  378. * ibitype will be 0 since it was last updated only after the 8th SCL
  379. * cycle, leading to missed client IBI handlers.
  380. *
  381. * A typical scenario is when IBIWON occurs and bus arbitration is lost
  382. * at svc_i3c_master_priv_xfers().
  383. *
  384. * Clear SVC_I3C_MINT_IBIWON before sending SVC_I3C_MCTRL_REQUEST_AUTO_IBI.
  385. */
  386. writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS);
  387. /*
  388. * Write REQUEST_START_ADDR request to emit broadcast address for arbitration,
  389. * instend of using AUTO_IBI.
  390. *
  391. * Using AutoIBI request may cause controller to remain in AutoIBI state when
  392. * there is a glitch on SDA line (high->low->high).
  393. * 1. SDA high->low, raising an interrupt to execute IBI isr.
  394. * 2. SDA low->high.
  395. * 3. IBI isr writes an AutoIBI request.
  396. * 4. The controller will not start AutoIBI process because SDA is not low.
  397. * 5. IBIWON polling times out.
  398. * 6. Controller reamins in AutoIBI state and doesn't accept EmitStop request.
  399. */
  400. writel(SVC_I3C_MCTRL_REQUEST_START_ADDR |
  401. SVC_I3C_MCTRL_TYPE_I3C |
  402. SVC_I3C_MCTRL_IBIRESP_MANUAL |
  403. SVC_I3C_MCTRL_DIR(SVC_I3C_MCTRL_DIR_WRITE) |
  404. SVC_I3C_MCTRL_ADDR(I3C_BROADCAST_ADDR),
  405. master->regs + SVC_I3C_MCTRL);
  406. /* Wait for IBIWON, should take approximately 100us */
  407. ret = readl_relaxed_poll_timeout(master->regs + SVC_I3C_MSTATUS, val,
  408. SVC_I3C_MSTATUS_IBIWON(val), 0, 1000);
  409. if (ret) {
  410. dev_err(master->dev, "Timeout when polling for IBIWON\n");
  411. svc_i3c_master_emit_stop(master);
  412. goto reenable_ibis;
  413. }
  414. status = readl(master->regs + SVC_I3C_MSTATUS);
  415. ibitype = SVC_I3C_MSTATUS_IBITYPE(status);
  416. ibiaddr = SVC_I3C_MSTATUS_IBIADDR(status);
  417. /* Handle the critical responses to IBI's */
  418. switch (ibitype) {
  419. case SVC_I3C_MSTATUS_IBITYPE_IBI:
  420. dev = svc_i3c_master_dev_from_addr(master, ibiaddr);
  421. if (!dev || !is_events_enabled(master, SVC_I3C_EVENT_IBI)) {
  422. svc_i3c_master_nack_ibi(master);
  423. } else {
  424. if (dev->info.bcr & I3C_BCR_IBI_PAYLOAD)
  425. svc_i3c_master_ack_ibi(master, true);
  426. else
  427. svc_i3c_master_ack_ibi(master, false);
  428. svc_i3c_master_handle_ibi(master, dev);
  429. }
  430. break;
  431. case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN:
  432. if (is_events_enabled(master, SVC_I3C_EVENT_HOTJOIN))
  433. svc_i3c_master_ack_ibi(master, false);
  434. else
  435. svc_i3c_master_nack_ibi(master);
  436. break;
  437. case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST:
  438. svc_i3c_master_nack_ibi(master);
  439. break;
  440. default:
  441. break;
  442. }
  443. /*
  444. * If an error happened, we probably got interrupted and the exchange
  445. * timedout. In this case we just drop everything, emit a stop and wait
  446. * for the slave to interrupt again.
  447. */
  448. if (svc_i3c_master_error(master)) {
  449. if (master->ibi.tbq_slot) {
  450. data = i3c_dev_get_master_data(dev);
  451. i3c_generic_ibi_recycle_slot(data->ibi_pool,
  452. master->ibi.tbq_slot);
  453. master->ibi.tbq_slot = NULL;
  454. }
  455. svc_i3c_master_emit_stop(master);
  456. goto reenable_ibis;
  457. }
  458. /* Handle the non critical tasks */
  459. switch (ibitype) {
  460. case SVC_I3C_MSTATUS_IBITYPE_IBI:
  461. if (dev) {
  462. i3c_master_queue_ibi(dev, master->ibi.tbq_slot);
  463. master->ibi.tbq_slot = NULL;
  464. }
  465. svc_i3c_master_emit_stop(master);
  466. break;
  467. case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN:
  468. svc_i3c_master_emit_stop(master);
  469. if (is_events_enabled(master, SVC_I3C_EVENT_HOTJOIN))
  470. queue_work(master->base.wq, &master->hj_work);
  471. break;
  472. case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST:
  473. svc_i3c_master_emit_stop(master);
  474. break;
  475. default:
  476. break;
  477. }
  478. reenable_ibis:
  479. svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
  480. mutex_unlock(&master->lock);
  481. }
  482. static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id)
  483. {
  484. struct svc_i3c_master *master = (struct svc_i3c_master *)dev_id;
  485. u32 active = readl(master->regs + SVC_I3C_MSTATUS);
  486. if (!SVC_I3C_MSTATUS_SLVSTART(active))
  487. return IRQ_NONE;
  488. /* Clear the interrupt status */
  489. writel(SVC_I3C_MINT_SLVSTART, master->regs + SVC_I3C_MSTATUS);
  490. svc_i3c_master_disable_interrupts(master);
  491. /* Handle the interrupt in a non atomic context */
  492. queue_work(master->base.wq, &master->ibi_work);
  493. return IRQ_HANDLED;
  494. }
  495. static int svc_i3c_master_set_speed(struct i3c_master_controller *m,
  496. enum i3c_open_drain_speed speed)
  497. {
  498. struct svc_i3c_master *master = to_svc_i3c_master(m);
  499. struct i3c_bus *bus = i3c_master_get_bus(&master->base);
  500. u32 ppbaud, odbaud, odhpp, mconfig;
  501. unsigned long fclk_rate;
  502. int ret;
  503. ret = pm_runtime_resume_and_get(master->dev);
  504. if (ret < 0) {
  505. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  506. return ret;
  507. }
  508. switch (speed) {
  509. case I3C_OPEN_DRAIN_SLOW_SPEED:
  510. fclk_rate = clk_get_rate(master->fclk);
  511. if (!fclk_rate) {
  512. ret = -EINVAL;
  513. goto rpm_out;
  514. }
  515. /*
  516. * Set 50% duty-cycle I2C speed to I3C OPEN-DRAIN mode, so the first
  517. * broadcast address is visible to all I2C/I3C devices on the I3C bus.
  518. * I3C device working as a I2C device will turn off its 50ns Spike
  519. * Filter to change to I3C mode.
  520. */
  521. mconfig = master->mctrl_config;
  522. ppbaud = FIELD_GET(GENMASK(11, 8), mconfig);
  523. odhpp = 0;
  524. odbaud = DIV_ROUND_UP(fclk_rate, bus->scl_rate.i2c * (2 + 2 * ppbaud)) - 1;
  525. mconfig &= ~GENMASK(24, 16);
  526. mconfig |= SVC_I3C_MCONFIG_ODBAUD(odbaud) | SVC_I3C_MCONFIG_ODHPP(odhpp);
  527. writel(mconfig, master->regs + SVC_I3C_MCONFIG);
  528. break;
  529. case I3C_OPEN_DRAIN_NORMAL_SPEED:
  530. writel(master->mctrl_config, master->regs + SVC_I3C_MCONFIG);
  531. break;
  532. }
  533. rpm_out:
  534. pm_runtime_mark_last_busy(master->dev);
  535. pm_runtime_put_autosuspend(master->dev);
  536. return ret;
  537. }
  538. static int svc_i3c_master_bus_init(struct i3c_master_controller *m)
  539. {
  540. struct svc_i3c_master *master = to_svc_i3c_master(m);
  541. struct i3c_bus *bus = i3c_master_get_bus(m);
  542. struct i3c_device_info info = {};
  543. unsigned long fclk_rate, fclk_period_ns;
  544. unsigned long i2c_period_ns, i2c_scl_rate, i3c_scl_rate;
  545. unsigned int high_period_ns, od_low_period_ns;
  546. u32 ppbaud, pplow, odhpp, odbaud, odstop, i2cbaud, reg;
  547. int ret;
  548. ret = pm_runtime_resume_and_get(master->dev);
  549. if (ret < 0) {
  550. dev_err(master->dev,
  551. "<%s> cannot resume i3c bus master, err: %d\n",
  552. __func__, ret);
  553. return ret;
  554. }
  555. /* Timings derivation */
  556. fclk_rate = clk_get_rate(master->fclk);
  557. if (!fclk_rate) {
  558. ret = -EINVAL;
  559. goto rpm_out;
  560. }
  561. fclk_period_ns = DIV_ROUND_UP(1000000000, fclk_rate);
  562. i2c_period_ns = DIV_ROUND_UP(1000000000, bus->scl_rate.i2c);
  563. i2c_scl_rate = bus->scl_rate.i2c;
  564. i3c_scl_rate = bus->scl_rate.i3c;
  565. /*
  566. * Using I3C Push-Pull mode, target is 12.5MHz/80ns period.
  567. * Simplest configuration is using a 50% duty-cycle of 40ns.
  568. */
  569. ppbaud = DIV_ROUND_UP(fclk_rate / 2, i3c_scl_rate) - 1;
  570. pplow = 0;
  571. /*
  572. * Using I3C Open-Drain mode, target is 4.17MHz/240ns with a
  573. * duty-cycle tuned so that high levels are filetered out by
  574. * the 50ns filter (target being 40ns).
  575. */
  576. odhpp = 1;
  577. high_period_ns = (ppbaud + 1) * fclk_period_ns;
  578. odbaud = DIV_ROUND_UP(fclk_rate, SVC_I3C_QUICK_I2C_CLK * (1 + ppbaud)) - 2;
  579. od_low_period_ns = (odbaud + 1) * high_period_ns;
  580. switch (bus->mode) {
  581. case I3C_BUS_MODE_PURE:
  582. i2cbaud = 0;
  583. odstop = 0;
  584. break;
  585. case I3C_BUS_MODE_MIXED_FAST:
  586. /*
  587. * Using I2C Fm+ mode, target is 1MHz/1000ns, the difference
  588. * between the high and low period does not really matter.
  589. */
  590. i2cbaud = DIV_ROUND_UP(i2c_period_ns, od_low_period_ns) - 2;
  591. odstop = 1;
  592. break;
  593. case I3C_BUS_MODE_MIXED_LIMITED:
  594. case I3C_BUS_MODE_MIXED_SLOW:
  595. /* I3C PP + I3C OP + I2C OP both use i2c clk rate */
  596. if (ppbaud > SVC_I3C_PPBAUD_MAX) {
  597. ppbaud = SVC_I3C_PPBAUD_MAX;
  598. pplow = DIV_ROUND_UP(fclk_rate, i3c_scl_rate) - (2 + 2 * ppbaud);
  599. }
  600. high_period_ns = (ppbaud + 1) * fclk_period_ns;
  601. odhpp = 0;
  602. odbaud = DIV_ROUND_UP(fclk_rate, i2c_scl_rate * (2 + 2 * ppbaud)) - 1;
  603. od_low_period_ns = (odbaud + 1) * high_period_ns;
  604. i2cbaud = DIV_ROUND_UP(i2c_period_ns, od_low_period_ns) - 2;
  605. odstop = 1;
  606. break;
  607. default:
  608. goto rpm_out;
  609. }
  610. reg = SVC_I3C_MCONFIG_MASTER_EN |
  611. SVC_I3C_MCONFIG_DISTO(0) |
  612. SVC_I3C_MCONFIG_HKEEP(0) |
  613. SVC_I3C_MCONFIG_ODSTOP(odstop) |
  614. SVC_I3C_MCONFIG_PPBAUD(ppbaud) |
  615. SVC_I3C_MCONFIG_PPLOW(pplow) |
  616. SVC_I3C_MCONFIG_ODBAUD(odbaud) |
  617. SVC_I3C_MCONFIG_ODHPP(odhpp) |
  618. SVC_I3C_MCONFIG_SKEW(0) |
  619. SVC_I3C_MCONFIG_I2CBAUD(i2cbaud);
  620. writel(reg, master->regs + SVC_I3C_MCONFIG);
  621. master->mctrl_config = reg;
  622. /* Master core's registration */
  623. ret = i3c_master_get_free_addr(m, 0);
  624. if (ret < 0)
  625. goto rpm_out;
  626. info.dyn_addr = ret;
  627. writel(SVC_MDYNADDR_VALID | SVC_MDYNADDR_ADDR(info.dyn_addr),
  628. master->regs + SVC_I3C_MDYNADDR);
  629. ret = i3c_master_set_info(&master->base, &info);
  630. if (ret)
  631. goto rpm_out;
  632. rpm_out:
  633. pm_runtime_mark_last_busy(master->dev);
  634. pm_runtime_put_autosuspend(master->dev);
  635. return ret;
  636. }
  637. static void svc_i3c_master_bus_cleanup(struct i3c_master_controller *m)
  638. {
  639. struct svc_i3c_master *master = to_svc_i3c_master(m);
  640. int ret;
  641. ret = pm_runtime_resume_and_get(master->dev);
  642. if (ret < 0) {
  643. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  644. return;
  645. }
  646. svc_i3c_master_disable_interrupts(master);
  647. /* Disable master */
  648. writel(0, master->regs + SVC_I3C_MCONFIG);
  649. pm_runtime_mark_last_busy(master->dev);
  650. pm_runtime_put_autosuspend(master->dev);
  651. }
  652. static int svc_i3c_master_reserve_slot(struct svc_i3c_master *master)
  653. {
  654. unsigned int slot;
  655. if (!(master->free_slots & GENMASK(SVC_I3C_MAX_DEVS - 1, 0)))
  656. return -ENOSPC;
  657. slot = ffs(master->free_slots) - 1;
  658. master->free_slots &= ~BIT(slot);
  659. return slot;
  660. }
  661. static void svc_i3c_master_release_slot(struct svc_i3c_master *master,
  662. unsigned int slot)
  663. {
  664. master->free_slots |= BIT(slot);
  665. }
  666. static int svc_i3c_master_attach_i3c_dev(struct i3c_dev_desc *dev)
  667. {
  668. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  669. struct svc_i3c_master *master = to_svc_i3c_master(m);
  670. struct svc_i3c_i2c_dev_data *data;
  671. int slot;
  672. slot = svc_i3c_master_reserve_slot(master);
  673. if (slot < 0)
  674. return slot;
  675. data = kzalloc(sizeof(*data), GFP_KERNEL);
  676. if (!data) {
  677. svc_i3c_master_release_slot(master, slot);
  678. return -ENOMEM;
  679. }
  680. data->ibi = -1;
  681. data->index = slot;
  682. master->addrs[slot] = dev->info.dyn_addr ? dev->info.dyn_addr :
  683. dev->info.static_addr;
  684. master->descs[slot] = dev;
  685. i3c_dev_set_master_data(dev, data);
  686. return 0;
  687. }
  688. static int svc_i3c_master_reattach_i3c_dev(struct i3c_dev_desc *dev,
  689. u8 old_dyn_addr)
  690. {
  691. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  692. struct svc_i3c_master *master = to_svc_i3c_master(m);
  693. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  694. master->addrs[data->index] = dev->info.dyn_addr ? dev->info.dyn_addr :
  695. dev->info.static_addr;
  696. return 0;
  697. }
  698. static void svc_i3c_master_detach_i3c_dev(struct i3c_dev_desc *dev)
  699. {
  700. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  701. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  702. struct svc_i3c_master *master = to_svc_i3c_master(m);
  703. master->addrs[data->index] = 0;
  704. svc_i3c_master_release_slot(master, data->index);
  705. kfree(data);
  706. }
  707. static int svc_i3c_master_attach_i2c_dev(struct i2c_dev_desc *dev)
  708. {
  709. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  710. struct svc_i3c_master *master = to_svc_i3c_master(m);
  711. struct svc_i3c_i2c_dev_data *data;
  712. int slot;
  713. slot = svc_i3c_master_reserve_slot(master);
  714. if (slot < 0)
  715. return slot;
  716. data = kzalloc(sizeof(*data), GFP_KERNEL);
  717. if (!data) {
  718. svc_i3c_master_release_slot(master, slot);
  719. return -ENOMEM;
  720. }
  721. data->index = slot;
  722. master->addrs[slot] = dev->addr;
  723. i2c_dev_set_master_data(dev, data);
  724. return 0;
  725. }
  726. static void svc_i3c_master_detach_i2c_dev(struct i2c_dev_desc *dev)
  727. {
  728. struct svc_i3c_i2c_dev_data *data = i2c_dev_get_master_data(dev);
  729. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  730. struct svc_i3c_master *master = to_svc_i3c_master(m);
  731. svc_i3c_master_release_slot(master, data->index);
  732. kfree(data);
  733. }
  734. static int svc_i3c_master_readb(struct svc_i3c_master *master, u8 *dst,
  735. unsigned int len)
  736. {
  737. int ret, i;
  738. u32 reg;
  739. for (i = 0; i < len; i++) {
  740. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  741. reg,
  742. SVC_I3C_MSTATUS_RXPEND(reg),
  743. 0, 1000);
  744. if (ret)
  745. return ret;
  746. dst[i] = readl(master->regs + SVC_I3C_MRDATAB);
  747. }
  748. return 0;
  749. }
  750. static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master,
  751. u8 *addrs, unsigned int *count)
  752. {
  753. u64 prov_id[SVC_I3C_MAX_DEVS] = {}, nacking_prov_id = 0;
  754. unsigned int dev_nb = 0, last_addr = 0;
  755. u32 reg;
  756. int ret, i;
  757. svc_i3c_master_flush_fifo(master);
  758. while (true) {
  759. /* SVC_I3C_MCTRL_REQUEST_PROC_DAA have two mode, ENTER DAA or PROCESS DAA.
  760. *
  761. * ENTER DAA:
  762. * 1 will issue START, 7E, ENTDAA, and then emits 7E/R to process first target.
  763. * 2 Stops just before the new Dynamic Address (DA) is to be emitted.
  764. *
  765. * PROCESS DAA:
  766. * 1 The DA is written using MWDATAB or ADDR bits 6:0.
  767. * 2 ProcessDAA is requested again to write the new address, and then starts the
  768. * next (START, 7E, ENTDAA) unless marked to STOP; an MSTATUS indicating NACK
  769. * means DA was not accepted (e.g. parity error). If PROCESSDAA is NACKed on the
  770. * 7E/R, which means no more Slaves need a DA, then a COMPLETE will be signaled
  771. * (along with DONE), and a STOP issued automatically.
  772. */
  773. writel(SVC_I3C_MCTRL_REQUEST_PROC_DAA |
  774. SVC_I3C_MCTRL_TYPE_I3C |
  775. SVC_I3C_MCTRL_IBIRESP_NACK |
  776. SVC_I3C_MCTRL_DIR(SVC_I3C_MCTRL_DIR_WRITE),
  777. master->regs + SVC_I3C_MCTRL);
  778. /*
  779. * Either one slave will send its ID, or the assignment process
  780. * is done.
  781. */
  782. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  783. reg,
  784. SVC_I3C_MSTATUS_RXPEND(reg) |
  785. SVC_I3C_MSTATUS_MCTRLDONE(reg),
  786. 1, 1000);
  787. if (ret)
  788. break;
  789. if (SVC_I3C_MSTATUS_RXPEND(reg)) {
  790. u8 data[6];
  791. /*
  792. * We only care about the 48-bit provisioned ID yet to
  793. * be sure a device does not nack an address twice.
  794. * Otherwise, we would just need to flush the RX FIFO.
  795. */
  796. ret = svc_i3c_master_readb(master, data, 6);
  797. if (ret)
  798. break;
  799. for (i = 0; i < 6; i++)
  800. prov_id[dev_nb] |= (u64)(data[i]) << (8 * (5 - i));
  801. /* We do not care about the BCR and DCR yet */
  802. ret = svc_i3c_master_readb(master, data, 2);
  803. if (ret)
  804. break;
  805. } else if (SVC_I3C_MSTATUS_MCTRLDONE(reg)) {
  806. if (SVC_I3C_MSTATUS_STATE_IDLE(reg) &&
  807. SVC_I3C_MSTATUS_COMPLETE(reg)) {
  808. /*
  809. * All devices received and acked they dynamic
  810. * address, this is the natural end of the DAA
  811. * procedure.
  812. *
  813. * Hardware will auto emit STOP at this case.
  814. */
  815. *count = dev_nb;
  816. return 0;
  817. } else if (SVC_I3C_MSTATUS_NACKED(reg)) {
  818. /* No I3C devices attached */
  819. if (dev_nb == 0) {
  820. /*
  821. * Hardware can't treat first NACK for ENTAA as normal
  822. * COMPLETE. So need manual emit STOP.
  823. */
  824. ret = 0;
  825. *count = 0;
  826. break;
  827. }
  828. /*
  829. * A slave device nacked the address, this is
  830. * allowed only once, DAA will be stopped and
  831. * then resumed. The same device is supposed to
  832. * answer again immediately and shall ack the
  833. * address this time.
  834. */
  835. if (prov_id[dev_nb] == nacking_prov_id) {
  836. ret = -EIO;
  837. break;
  838. }
  839. dev_nb--;
  840. nacking_prov_id = prov_id[dev_nb];
  841. svc_i3c_master_emit_stop(master);
  842. continue;
  843. } else {
  844. break;
  845. }
  846. }
  847. /* Wait for the slave to be ready to receive its address */
  848. ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
  849. reg,
  850. SVC_I3C_MSTATUS_MCTRLDONE(reg) &&
  851. SVC_I3C_MSTATUS_STATE_DAA(reg) &&
  852. SVC_I3C_MSTATUS_BETWEEN(reg),
  853. 0, 1000);
  854. if (ret)
  855. break;
  856. /* Give the slave device a suitable dynamic address */
  857. ret = i3c_master_get_free_addr(&master->base, last_addr + 1);
  858. if (ret < 0)
  859. break;
  860. addrs[dev_nb] = ret;
  861. dev_dbg(master->dev, "DAA: device %d assigned to 0x%02x\n",
  862. dev_nb, addrs[dev_nb]);
  863. writel(addrs[dev_nb], master->regs + SVC_I3C_MWDATAB);
  864. last_addr = addrs[dev_nb++];
  865. }
  866. /* Need manual issue STOP except for Complete condition */
  867. svc_i3c_master_emit_stop(master);
  868. return ret;
  869. }
  870. static int svc_i3c_update_ibirules(struct svc_i3c_master *master)
  871. {
  872. struct i3c_dev_desc *dev;
  873. u32 reg_mbyte = 0, reg_nobyte = SVC_I3C_IBIRULES_NOBYTE;
  874. unsigned int mbyte_addr_ok = 0, mbyte_addr_ko = 0, nobyte_addr_ok = 0,
  875. nobyte_addr_ko = 0;
  876. bool list_mbyte = false, list_nobyte = false;
  877. /* Create the IBIRULES register for both cases */
  878. i3c_bus_for_each_i3cdev(&master->base.bus, dev) {
  879. if (!(dev->info.bcr & I3C_BCR_IBI_REQ_CAP))
  880. continue;
  881. if (dev->info.bcr & I3C_BCR_IBI_PAYLOAD) {
  882. reg_mbyte |= SVC_I3C_IBIRULES_ADDR(mbyte_addr_ok,
  883. dev->info.dyn_addr);
  884. /* IBI rules cannot be applied to devices with MSb=1 */
  885. if (dev->info.dyn_addr & BIT(7))
  886. mbyte_addr_ko++;
  887. else
  888. mbyte_addr_ok++;
  889. } else {
  890. reg_nobyte |= SVC_I3C_IBIRULES_ADDR(nobyte_addr_ok,
  891. dev->info.dyn_addr);
  892. /* IBI rules cannot be applied to devices with MSb=1 */
  893. if (dev->info.dyn_addr & BIT(7))
  894. nobyte_addr_ko++;
  895. else
  896. nobyte_addr_ok++;
  897. }
  898. }
  899. /* Device list cannot be handled by hardware */
  900. if (!mbyte_addr_ko && mbyte_addr_ok <= SVC_I3C_IBIRULES_ADDRS)
  901. list_mbyte = true;
  902. if (!nobyte_addr_ko && nobyte_addr_ok <= SVC_I3C_IBIRULES_ADDRS)
  903. list_nobyte = true;
  904. /* No list can be properly handled, return an error */
  905. if (!list_mbyte && !list_nobyte)
  906. return -ERANGE;
  907. /* Pick the first list that can be handled by hardware, randomly */
  908. if (list_mbyte)
  909. writel(reg_mbyte, master->regs + SVC_I3C_IBIRULES);
  910. else
  911. writel(reg_nobyte, master->regs + SVC_I3C_IBIRULES);
  912. return 0;
  913. }
  914. static int svc_i3c_master_do_daa(struct i3c_master_controller *m)
  915. {
  916. struct svc_i3c_master *master = to_svc_i3c_master(m);
  917. u8 addrs[SVC_I3C_MAX_DEVS];
  918. unsigned long flags;
  919. unsigned int dev_nb;
  920. int ret, i;
  921. ret = pm_runtime_resume_and_get(master->dev);
  922. if (ret < 0) {
  923. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  924. return ret;
  925. }
  926. spin_lock_irqsave(&master->xferqueue.lock, flags);
  927. ret = svc_i3c_master_do_daa_locked(master, addrs, &dev_nb);
  928. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  929. svc_i3c_master_clear_merrwarn(master);
  930. if (ret)
  931. goto rpm_out;
  932. /*
  933. * Register all devices who participated to the core
  934. *
  935. * If two devices (A and B) are detected in DAA and address 0xa is assigned to
  936. * device A and 0xb to device B, a failure in i3c_master_add_i3c_dev_locked()
  937. * for device A (addr: 0xa) could prevent device B (addr: 0xb) from being
  938. * registered on the bus. The I3C stack might still consider 0xb a free
  939. * address. If a subsequent Hotjoin occurs, 0xb might be assigned to Device A,
  940. * causing both devices A and B to use the same address 0xb, violating the I3C
  941. * specification.
  942. *
  943. * The return value for i3c_master_add_i3c_dev_locked() should not be checked
  944. * because subsequent steps will scan the entire I3C bus, independent of
  945. * whether i3c_master_add_i3c_dev_locked() returns success.
  946. *
  947. * If device A registration fails, there is still a chance to register device
  948. * B. i3c_master_add_i3c_dev_locked() can reset DAA if a failure occurs while
  949. * retrieving device information.
  950. */
  951. for (i = 0; i < dev_nb; i++)
  952. i3c_master_add_i3c_dev_locked(m, addrs[i]);
  953. /* Configure IBI auto-rules */
  954. ret = svc_i3c_update_ibirules(master);
  955. if (ret)
  956. dev_err(master->dev, "Cannot handle such a list of devices");
  957. rpm_out:
  958. pm_runtime_mark_last_busy(master->dev);
  959. pm_runtime_put_autosuspend(master->dev);
  960. return ret;
  961. }
  962. static int svc_i3c_master_read(struct svc_i3c_master *master,
  963. u8 *in, unsigned int len)
  964. {
  965. int offset = 0, i;
  966. u32 mdctrl, mstatus;
  967. bool completed = false;
  968. unsigned int count;
  969. unsigned long start = jiffies;
  970. while (!completed) {
  971. mstatus = readl(master->regs + SVC_I3C_MSTATUS);
  972. if (SVC_I3C_MSTATUS_COMPLETE(mstatus) != 0)
  973. completed = true;
  974. if (time_after(jiffies, start + msecs_to_jiffies(1000))) {
  975. dev_dbg(master->dev, "I3C read timeout\n");
  976. return -ETIMEDOUT;
  977. }
  978. mdctrl = readl(master->regs + SVC_I3C_MDATACTRL);
  979. count = SVC_I3C_MDATACTRL_RXCOUNT(mdctrl);
  980. if (offset + count > len) {
  981. dev_err(master->dev, "I3C receive length too long!\n");
  982. return -EINVAL;
  983. }
  984. for (i = 0; i < count; i++)
  985. in[offset + i] = readl(master->regs + SVC_I3C_MRDATAB);
  986. offset += count;
  987. }
  988. return offset;
  989. }
  990. static int svc_i3c_master_write(struct svc_i3c_master *master,
  991. const u8 *out, unsigned int len)
  992. {
  993. int offset = 0, ret;
  994. u32 mdctrl;
  995. while (offset < len) {
  996. ret = readl_poll_timeout(master->regs + SVC_I3C_MDATACTRL,
  997. mdctrl,
  998. !(mdctrl & SVC_I3C_MDATACTRL_TXFULL),
  999. 0, 1000);
  1000. if (ret)
  1001. return ret;
  1002. /*
  1003. * The last byte to be sent over the bus must either have the
  1004. * "end" bit set or be written in MWDATABE.
  1005. */
  1006. if (likely(offset < (len - 1)))
  1007. writel(out[offset++], master->regs + SVC_I3C_MWDATAB);
  1008. else
  1009. writel(out[offset++], master->regs + SVC_I3C_MWDATABE);
  1010. }
  1011. return 0;
  1012. }
  1013. static int svc_i3c_master_xfer(struct svc_i3c_master *master,
  1014. bool rnw, unsigned int xfer_type, u8 addr,
  1015. u8 *in, const u8 *out, unsigned int xfer_len,
  1016. unsigned int *actual_len, bool continued)
  1017. {
  1018. int retry = 2;
  1019. u32 reg;
  1020. int ret;
  1021. /* clean SVC_I3C_MINT_IBIWON w1c bits */
  1022. writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS);
  1023. while (retry--) {
  1024. writel(SVC_I3C_MCTRL_REQUEST_START_ADDR |
  1025. xfer_type |
  1026. SVC_I3C_MCTRL_IBIRESP_NACK |
  1027. SVC_I3C_MCTRL_DIR(rnw) |
  1028. SVC_I3C_MCTRL_ADDR(addr) |
  1029. SVC_I3C_MCTRL_RDTERM(*actual_len),
  1030. master->regs + SVC_I3C_MCTRL);
  1031. ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  1032. SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000);
  1033. if (ret)
  1034. goto emit_stop;
  1035. if (readl(master->regs + SVC_I3C_MERRWARN) & SVC_I3C_MERRWARN_NACK) {
  1036. /*
  1037. * According to I3C Spec 1.1.1, 11-Jun-2021, section: 5.1.2.2.3.
  1038. * If the Controller chooses to start an I3C Message with an I3C Dynamic
  1039. * Address, then special provisions shall be made because that same I3C
  1040. * Target may be initiating an IBI or a Controller Role Request. So, one of
  1041. * three things may happen: (skip 1, 2)
  1042. *
  1043. * 3. The Addresses match and the RnW bits also match, and so neither
  1044. * Controller nor Target will ACK since both are expecting the other side to
  1045. * provide ACK. As a result, each side might think it had "won" arbitration,
  1046. * but neither side would continue, as each would subsequently see that the
  1047. * other did not provide ACK.
  1048. * ...
  1049. * For either value of RnW: Due to the NACK, the Controller shall defer the
  1050. * Private Write or Private Read, and should typically transmit the Target
  1051. * Address again after a Repeated START (i.e., the next one or any one prior
  1052. * to a STOP in the Frame). Since the Address Header following a Repeated
  1053. * START is not arbitrated, the Controller will always win (see Section
  1054. * 5.1.2.2.4).
  1055. */
  1056. if (retry && addr != 0x7e) {
  1057. writel(SVC_I3C_MERRWARN_NACK, master->regs + SVC_I3C_MERRWARN);
  1058. } else {
  1059. ret = -ENXIO;
  1060. *actual_len = 0;
  1061. goto emit_stop;
  1062. }
  1063. } else {
  1064. break;
  1065. }
  1066. }
  1067. /*
  1068. * According to I3C spec ver 1.1.1, 5.1.2.2.3 Consequence of Controller Starting a Frame
  1069. * with I3C Target Address.
  1070. *
  1071. * The I3C Controller normally should start a Frame, the Address may be arbitrated, and so
  1072. * the Controller shall monitor to see whether an In-Band Interrupt request, a Controller
  1073. * Role Request (i.e., Secondary Controller requests to become the Active Controller), or
  1074. * a Hot-Join Request has been made.
  1075. *
  1076. * If missed IBIWON check, the wrong data will be return. When IBIWON happen, return failure
  1077. * and yield the above events handler.
  1078. */
  1079. if (SVC_I3C_MSTATUS_IBIWON(reg)) {
  1080. ret = -EAGAIN;
  1081. *actual_len = 0;
  1082. goto emit_stop;
  1083. }
  1084. if (rnw)
  1085. ret = svc_i3c_master_read(master, in, xfer_len);
  1086. else
  1087. ret = svc_i3c_master_write(master, out, xfer_len);
  1088. if (ret < 0)
  1089. goto emit_stop;
  1090. if (rnw)
  1091. *actual_len = ret;
  1092. ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  1093. SVC_I3C_MSTATUS_COMPLETE(reg), 0, 1000);
  1094. if (ret)
  1095. goto emit_stop;
  1096. writel(SVC_I3C_MINT_COMPLETE, master->regs + SVC_I3C_MSTATUS);
  1097. if (!continued) {
  1098. svc_i3c_master_emit_stop(master);
  1099. /* Wait idle if stop is sent. */
  1100. readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
  1101. SVC_I3C_MSTATUS_STATE_IDLE(reg), 0, 1000);
  1102. }
  1103. return 0;
  1104. emit_stop:
  1105. svc_i3c_master_emit_stop(master);
  1106. svc_i3c_master_clear_merrwarn(master);
  1107. return ret;
  1108. }
  1109. static struct svc_i3c_xfer *
  1110. svc_i3c_master_alloc_xfer(struct svc_i3c_master *master, unsigned int ncmds)
  1111. {
  1112. struct svc_i3c_xfer *xfer;
  1113. xfer = kzalloc(struct_size(xfer, cmds, ncmds), GFP_KERNEL);
  1114. if (!xfer)
  1115. return NULL;
  1116. INIT_LIST_HEAD(&xfer->node);
  1117. xfer->ncmds = ncmds;
  1118. xfer->ret = -ETIMEDOUT;
  1119. return xfer;
  1120. }
  1121. static void svc_i3c_master_free_xfer(struct svc_i3c_xfer *xfer)
  1122. {
  1123. kfree(xfer);
  1124. }
  1125. static void svc_i3c_master_dequeue_xfer_locked(struct svc_i3c_master *master,
  1126. struct svc_i3c_xfer *xfer)
  1127. {
  1128. if (master->xferqueue.cur == xfer)
  1129. master->xferqueue.cur = NULL;
  1130. else
  1131. list_del_init(&xfer->node);
  1132. }
  1133. static void svc_i3c_master_dequeue_xfer(struct svc_i3c_master *master,
  1134. struct svc_i3c_xfer *xfer)
  1135. {
  1136. unsigned long flags;
  1137. spin_lock_irqsave(&master->xferqueue.lock, flags);
  1138. svc_i3c_master_dequeue_xfer_locked(master, xfer);
  1139. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  1140. }
  1141. static void svc_i3c_master_start_xfer_locked(struct svc_i3c_master *master)
  1142. {
  1143. struct svc_i3c_xfer *xfer = master->xferqueue.cur;
  1144. int ret, i;
  1145. if (!xfer)
  1146. return;
  1147. svc_i3c_master_clear_merrwarn(master);
  1148. svc_i3c_master_flush_fifo(master);
  1149. for (i = 0; i < xfer->ncmds; i++) {
  1150. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  1151. ret = svc_i3c_master_xfer(master, cmd->rnw, xfer->type,
  1152. cmd->addr, cmd->in, cmd->out,
  1153. cmd->len, &cmd->actual_len,
  1154. cmd->continued);
  1155. /* cmd->xfer is NULL if I2C or CCC transfer */
  1156. if (cmd->xfer)
  1157. cmd->xfer->actual_len = cmd->actual_len;
  1158. if (ret)
  1159. break;
  1160. }
  1161. xfer->ret = ret;
  1162. complete(&xfer->comp);
  1163. if (ret < 0)
  1164. svc_i3c_master_dequeue_xfer_locked(master, xfer);
  1165. xfer = list_first_entry_or_null(&master->xferqueue.list,
  1166. struct svc_i3c_xfer,
  1167. node);
  1168. if (xfer)
  1169. list_del_init(&xfer->node);
  1170. master->xferqueue.cur = xfer;
  1171. svc_i3c_master_start_xfer_locked(master);
  1172. }
  1173. static void svc_i3c_master_enqueue_xfer(struct svc_i3c_master *master,
  1174. struct svc_i3c_xfer *xfer)
  1175. {
  1176. unsigned long flags;
  1177. int ret;
  1178. ret = pm_runtime_resume_and_get(master->dev);
  1179. if (ret < 0) {
  1180. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  1181. return;
  1182. }
  1183. init_completion(&xfer->comp);
  1184. spin_lock_irqsave(&master->xferqueue.lock, flags);
  1185. if (master->xferqueue.cur) {
  1186. list_add_tail(&xfer->node, &master->xferqueue.list);
  1187. } else {
  1188. master->xferqueue.cur = xfer;
  1189. svc_i3c_master_start_xfer_locked(master);
  1190. }
  1191. spin_unlock_irqrestore(&master->xferqueue.lock, flags);
  1192. pm_runtime_mark_last_busy(master->dev);
  1193. pm_runtime_put_autosuspend(master->dev);
  1194. }
  1195. static bool
  1196. svc_i3c_master_supports_ccc_cmd(struct i3c_master_controller *master,
  1197. const struct i3c_ccc_cmd *cmd)
  1198. {
  1199. /* No software support for CCC commands targeting more than one slave */
  1200. return (cmd->ndests == 1);
  1201. }
  1202. static int svc_i3c_master_send_bdcast_ccc_cmd(struct svc_i3c_master *master,
  1203. struct i3c_ccc_cmd *ccc)
  1204. {
  1205. unsigned int xfer_len = ccc->dests[0].payload.len + 1;
  1206. struct svc_i3c_xfer *xfer;
  1207. struct svc_i3c_cmd *cmd;
  1208. u8 *buf;
  1209. int ret;
  1210. xfer = svc_i3c_master_alloc_xfer(master, 1);
  1211. if (!xfer)
  1212. return -ENOMEM;
  1213. buf = kmalloc(xfer_len, GFP_KERNEL);
  1214. if (!buf) {
  1215. svc_i3c_master_free_xfer(xfer);
  1216. return -ENOMEM;
  1217. }
  1218. buf[0] = ccc->id;
  1219. memcpy(&buf[1], ccc->dests[0].payload.data, ccc->dests[0].payload.len);
  1220. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1221. cmd = &xfer->cmds[0];
  1222. cmd->addr = ccc->dests[0].addr;
  1223. cmd->rnw = ccc->rnw;
  1224. cmd->in = NULL;
  1225. cmd->out = buf;
  1226. cmd->len = xfer_len;
  1227. cmd->actual_len = 0;
  1228. cmd->continued = false;
  1229. mutex_lock(&master->lock);
  1230. svc_i3c_master_enqueue_xfer(master, xfer);
  1231. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1232. svc_i3c_master_dequeue_xfer(master, xfer);
  1233. mutex_unlock(&master->lock);
  1234. ret = xfer->ret;
  1235. kfree(buf);
  1236. svc_i3c_master_free_xfer(xfer);
  1237. return ret;
  1238. }
  1239. static int svc_i3c_master_send_direct_ccc_cmd(struct svc_i3c_master *master,
  1240. struct i3c_ccc_cmd *ccc)
  1241. {
  1242. unsigned int xfer_len = ccc->dests[0].payload.len;
  1243. unsigned int actual_len = ccc->rnw ? xfer_len : 0;
  1244. struct svc_i3c_xfer *xfer;
  1245. struct svc_i3c_cmd *cmd;
  1246. int ret;
  1247. xfer = svc_i3c_master_alloc_xfer(master, 2);
  1248. if (!xfer)
  1249. return -ENOMEM;
  1250. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1251. /* Broadcasted message */
  1252. cmd = &xfer->cmds[0];
  1253. cmd->addr = I3C_BROADCAST_ADDR;
  1254. cmd->rnw = 0;
  1255. cmd->in = NULL;
  1256. cmd->out = &ccc->id;
  1257. cmd->len = 1;
  1258. cmd->actual_len = 0;
  1259. cmd->continued = true;
  1260. /* Directed message */
  1261. cmd = &xfer->cmds[1];
  1262. cmd->addr = ccc->dests[0].addr;
  1263. cmd->rnw = ccc->rnw;
  1264. cmd->in = ccc->rnw ? ccc->dests[0].payload.data : NULL;
  1265. cmd->out = ccc->rnw ? NULL : ccc->dests[0].payload.data;
  1266. cmd->len = xfer_len;
  1267. cmd->actual_len = actual_len;
  1268. cmd->continued = false;
  1269. mutex_lock(&master->lock);
  1270. svc_i3c_master_enqueue_xfer(master, xfer);
  1271. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1272. svc_i3c_master_dequeue_xfer(master, xfer);
  1273. mutex_unlock(&master->lock);
  1274. if (cmd->actual_len != xfer_len)
  1275. ccc->dests[0].payload.len = cmd->actual_len;
  1276. ret = xfer->ret;
  1277. svc_i3c_master_free_xfer(xfer);
  1278. return ret;
  1279. }
  1280. static int svc_i3c_master_send_ccc_cmd(struct i3c_master_controller *m,
  1281. struct i3c_ccc_cmd *cmd)
  1282. {
  1283. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1284. bool broadcast = cmd->id < 0x80;
  1285. int ret;
  1286. if (broadcast)
  1287. ret = svc_i3c_master_send_bdcast_ccc_cmd(master, cmd);
  1288. else
  1289. ret = svc_i3c_master_send_direct_ccc_cmd(master, cmd);
  1290. if (ret)
  1291. cmd->err = I3C_ERROR_M2;
  1292. return ret;
  1293. }
  1294. static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
  1295. struct i3c_priv_xfer *xfers,
  1296. int nxfers)
  1297. {
  1298. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1299. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1300. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1301. struct svc_i3c_xfer *xfer;
  1302. int ret, i;
  1303. xfer = svc_i3c_master_alloc_xfer(master, nxfers);
  1304. if (!xfer)
  1305. return -ENOMEM;
  1306. xfer->type = SVC_I3C_MCTRL_TYPE_I3C;
  1307. for (i = 0; i < nxfers; i++) {
  1308. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  1309. cmd->xfer = &xfers[i];
  1310. cmd->addr = master->addrs[data->index];
  1311. cmd->rnw = xfers[i].rnw;
  1312. cmd->in = xfers[i].rnw ? xfers[i].data.in : NULL;
  1313. cmd->out = xfers[i].rnw ? NULL : xfers[i].data.out;
  1314. cmd->len = xfers[i].len;
  1315. cmd->actual_len = xfers[i].rnw ? xfers[i].len : 0;
  1316. cmd->continued = (i + 1) < nxfers;
  1317. }
  1318. mutex_lock(&master->lock);
  1319. svc_i3c_master_enqueue_xfer(master, xfer);
  1320. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1321. svc_i3c_master_dequeue_xfer(master, xfer);
  1322. mutex_unlock(&master->lock);
  1323. ret = xfer->ret;
  1324. svc_i3c_master_free_xfer(xfer);
  1325. return ret;
  1326. }
  1327. static int svc_i3c_master_i2c_xfers(struct i2c_dev_desc *dev,
  1328. const struct i2c_msg *xfers,
  1329. int nxfers)
  1330. {
  1331. struct i3c_master_controller *m = i2c_dev_get_master(dev);
  1332. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1333. struct svc_i3c_i2c_dev_data *data = i2c_dev_get_master_data(dev);
  1334. struct svc_i3c_xfer *xfer;
  1335. int ret, i;
  1336. xfer = svc_i3c_master_alloc_xfer(master, nxfers);
  1337. if (!xfer)
  1338. return -ENOMEM;
  1339. xfer->type = SVC_I3C_MCTRL_TYPE_I2C;
  1340. for (i = 0; i < nxfers; i++) {
  1341. struct svc_i3c_cmd *cmd = &xfer->cmds[i];
  1342. cmd->addr = master->addrs[data->index];
  1343. cmd->rnw = xfers[i].flags & I2C_M_RD;
  1344. cmd->in = cmd->rnw ? xfers[i].buf : NULL;
  1345. cmd->out = cmd->rnw ? NULL : xfers[i].buf;
  1346. cmd->len = xfers[i].len;
  1347. cmd->actual_len = cmd->rnw ? xfers[i].len : 0;
  1348. cmd->continued = (i + 1 < nxfers);
  1349. }
  1350. mutex_lock(&master->lock);
  1351. svc_i3c_master_enqueue_xfer(master, xfer);
  1352. if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
  1353. svc_i3c_master_dequeue_xfer(master, xfer);
  1354. mutex_unlock(&master->lock);
  1355. ret = xfer->ret;
  1356. svc_i3c_master_free_xfer(xfer);
  1357. return ret;
  1358. }
  1359. static int svc_i3c_master_request_ibi(struct i3c_dev_desc *dev,
  1360. const struct i3c_ibi_setup *req)
  1361. {
  1362. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1363. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1364. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1365. unsigned long flags;
  1366. unsigned int i;
  1367. if (dev->ibi->max_payload_len > SVC_I3C_FIFO_SIZE) {
  1368. dev_err(master->dev, "IBI max payload %d should be < %d\n",
  1369. dev->ibi->max_payload_len, SVC_I3C_FIFO_SIZE);
  1370. return -ERANGE;
  1371. }
  1372. data->ibi_pool = i3c_generic_ibi_alloc_pool(dev, req);
  1373. if (IS_ERR(data->ibi_pool))
  1374. return PTR_ERR(data->ibi_pool);
  1375. spin_lock_irqsave(&master->ibi.lock, flags);
  1376. for (i = 0; i < master->ibi.num_slots; i++) {
  1377. if (!master->ibi.slots[i]) {
  1378. data->ibi = i;
  1379. master->ibi.slots[i] = dev;
  1380. break;
  1381. }
  1382. }
  1383. spin_unlock_irqrestore(&master->ibi.lock, flags);
  1384. if (i < master->ibi.num_slots)
  1385. return 0;
  1386. i3c_generic_ibi_free_pool(data->ibi_pool);
  1387. data->ibi_pool = NULL;
  1388. return -ENOSPC;
  1389. }
  1390. static void svc_i3c_master_free_ibi(struct i3c_dev_desc *dev)
  1391. {
  1392. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1393. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1394. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1395. unsigned long flags;
  1396. spin_lock_irqsave(&master->ibi.lock, flags);
  1397. master->ibi.slots[data->ibi] = NULL;
  1398. data->ibi = -1;
  1399. spin_unlock_irqrestore(&master->ibi.lock, flags);
  1400. i3c_generic_ibi_free_pool(data->ibi_pool);
  1401. }
  1402. static int svc_i3c_master_enable_ibi(struct i3c_dev_desc *dev)
  1403. {
  1404. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1405. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1406. int ret;
  1407. ret = pm_runtime_resume_and_get(master->dev);
  1408. if (ret < 0) {
  1409. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  1410. return ret;
  1411. }
  1412. master->enabled_events++;
  1413. svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
  1414. return i3c_master_enec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR);
  1415. }
  1416. static int svc_i3c_master_disable_ibi(struct i3c_dev_desc *dev)
  1417. {
  1418. struct i3c_master_controller *m = i3c_dev_get_master(dev);
  1419. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1420. int ret;
  1421. master->enabled_events--;
  1422. if (!master->enabled_events)
  1423. svc_i3c_master_disable_interrupts(master);
  1424. ret = i3c_master_disec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR);
  1425. pm_runtime_mark_last_busy(master->dev);
  1426. pm_runtime_put_autosuspend(master->dev);
  1427. return ret;
  1428. }
  1429. static int svc_i3c_master_enable_hotjoin(struct i3c_master_controller *m)
  1430. {
  1431. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1432. int ret;
  1433. ret = pm_runtime_resume_and_get(master->dev);
  1434. if (ret < 0) {
  1435. dev_err(master->dev, "<%s> Cannot get runtime PM.\n", __func__);
  1436. return ret;
  1437. }
  1438. master->enabled_events |= SVC_I3C_EVENT_HOTJOIN;
  1439. svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
  1440. return 0;
  1441. }
  1442. static int svc_i3c_master_disable_hotjoin(struct i3c_master_controller *m)
  1443. {
  1444. struct svc_i3c_master *master = to_svc_i3c_master(m);
  1445. master->enabled_events &= ~SVC_I3C_EVENT_HOTJOIN;
  1446. if (!master->enabled_events)
  1447. svc_i3c_master_disable_interrupts(master);
  1448. pm_runtime_mark_last_busy(master->dev);
  1449. pm_runtime_put_autosuspend(master->dev);
  1450. return 0;
  1451. }
  1452. static void svc_i3c_master_recycle_ibi_slot(struct i3c_dev_desc *dev,
  1453. struct i3c_ibi_slot *slot)
  1454. {
  1455. struct svc_i3c_i2c_dev_data *data = i3c_dev_get_master_data(dev);
  1456. i3c_generic_ibi_recycle_slot(data->ibi_pool, slot);
  1457. }
  1458. static const struct i3c_master_controller_ops svc_i3c_master_ops = {
  1459. .bus_init = svc_i3c_master_bus_init,
  1460. .bus_cleanup = svc_i3c_master_bus_cleanup,
  1461. .attach_i3c_dev = svc_i3c_master_attach_i3c_dev,
  1462. .detach_i3c_dev = svc_i3c_master_detach_i3c_dev,
  1463. .reattach_i3c_dev = svc_i3c_master_reattach_i3c_dev,
  1464. .attach_i2c_dev = svc_i3c_master_attach_i2c_dev,
  1465. .detach_i2c_dev = svc_i3c_master_detach_i2c_dev,
  1466. .do_daa = svc_i3c_master_do_daa,
  1467. .supports_ccc_cmd = svc_i3c_master_supports_ccc_cmd,
  1468. .send_ccc_cmd = svc_i3c_master_send_ccc_cmd,
  1469. .priv_xfers = svc_i3c_master_priv_xfers,
  1470. .i2c_xfers = svc_i3c_master_i2c_xfers,
  1471. .request_ibi = svc_i3c_master_request_ibi,
  1472. .free_ibi = svc_i3c_master_free_ibi,
  1473. .recycle_ibi_slot = svc_i3c_master_recycle_ibi_slot,
  1474. .enable_ibi = svc_i3c_master_enable_ibi,
  1475. .disable_ibi = svc_i3c_master_disable_ibi,
  1476. .enable_hotjoin = svc_i3c_master_enable_hotjoin,
  1477. .disable_hotjoin = svc_i3c_master_disable_hotjoin,
  1478. .set_speed = svc_i3c_master_set_speed,
  1479. };
  1480. static int svc_i3c_master_prepare_clks(struct svc_i3c_master *master)
  1481. {
  1482. int ret = 0;
  1483. ret = clk_prepare_enable(master->pclk);
  1484. if (ret)
  1485. return ret;
  1486. ret = clk_prepare_enable(master->fclk);
  1487. if (ret) {
  1488. clk_disable_unprepare(master->pclk);
  1489. return ret;
  1490. }
  1491. ret = clk_prepare_enable(master->sclk);
  1492. if (ret) {
  1493. clk_disable_unprepare(master->pclk);
  1494. clk_disable_unprepare(master->fclk);
  1495. return ret;
  1496. }
  1497. return 0;
  1498. }
  1499. static void svc_i3c_master_unprepare_clks(struct svc_i3c_master *master)
  1500. {
  1501. clk_disable_unprepare(master->pclk);
  1502. clk_disable_unprepare(master->fclk);
  1503. clk_disable_unprepare(master->sclk);
  1504. }
  1505. static int svc_i3c_master_probe(struct platform_device *pdev)
  1506. {
  1507. struct device *dev = &pdev->dev;
  1508. struct svc_i3c_master *master;
  1509. int ret;
  1510. master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
  1511. if (!master)
  1512. return -ENOMEM;
  1513. master->drvdata = of_device_get_match_data(dev);
  1514. if (!master->drvdata)
  1515. return -EINVAL;
  1516. master->regs = devm_platform_ioremap_resource(pdev, 0);
  1517. if (IS_ERR(master->regs))
  1518. return PTR_ERR(master->regs);
  1519. master->pclk = devm_clk_get(dev, "pclk");
  1520. if (IS_ERR(master->pclk))
  1521. return PTR_ERR(master->pclk);
  1522. master->fclk = devm_clk_get(dev, "fast_clk");
  1523. if (IS_ERR(master->fclk))
  1524. return PTR_ERR(master->fclk);
  1525. master->sclk = devm_clk_get(dev, "slow_clk");
  1526. if (IS_ERR(master->sclk))
  1527. return PTR_ERR(master->sclk);
  1528. master->irq = platform_get_irq(pdev, 0);
  1529. if (master->irq < 0)
  1530. return master->irq;
  1531. master->dev = dev;
  1532. ret = svc_i3c_master_prepare_clks(master);
  1533. if (ret)
  1534. return ret;
  1535. INIT_WORK(&master->hj_work, svc_i3c_master_hj_work);
  1536. INIT_WORK(&master->ibi_work, svc_i3c_master_ibi_work);
  1537. mutex_init(&master->lock);
  1538. ret = devm_request_irq(dev, master->irq, svc_i3c_master_irq_handler,
  1539. IRQF_NO_SUSPEND, "svc-i3c-irq", master);
  1540. if (ret)
  1541. goto err_disable_clks;
  1542. master->free_slots = GENMASK(SVC_I3C_MAX_DEVS - 1, 0);
  1543. spin_lock_init(&master->xferqueue.lock);
  1544. INIT_LIST_HEAD(&master->xferqueue.list);
  1545. spin_lock_init(&master->ibi.lock);
  1546. master->ibi.num_slots = SVC_I3C_MAX_DEVS;
  1547. master->ibi.slots = devm_kcalloc(&pdev->dev, master->ibi.num_slots,
  1548. sizeof(*master->ibi.slots),
  1549. GFP_KERNEL);
  1550. if (!master->ibi.slots) {
  1551. ret = -ENOMEM;
  1552. goto err_disable_clks;
  1553. }
  1554. platform_set_drvdata(pdev, master);
  1555. pm_runtime_set_autosuspend_delay(&pdev->dev, SVC_I3C_PM_TIMEOUT_MS);
  1556. pm_runtime_use_autosuspend(&pdev->dev);
  1557. pm_runtime_get_noresume(&pdev->dev);
  1558. pm_runtime_set_active(&pdev->dev);
  1559. pm_runtime_enable(&pdev->dev);
  1560. svc_i3c_master_reset(master);
  1561. /* Register the master */
  1562. ret = i3c_master_register(&master->base, &pdev->dev,
  1563. &svc_i3c_master_ops, false);
  1564. if (ret)
  1565. goto rpm_disable;
  1566. pm_runtime_mark_last_busy(&pdev->dev);
  1567. pm_runtime_put_autosuspend(&pdev->dev);
  1568. return 0;
  1569. rpm_disable:
  1570. pm_runtime_dont_use_autosuspend(&pdev->dev);
  1571. pm_runtime_put_noidle(&pdev->dev);
  1572. pm_runtime_disable(&pdev->dev);
  1573. pm_runtime_set_suspended(&pdev->dev);
  1574. err_disable_clks:
  1575. svc_i3c_master_unprepare_clks(master);
  1576. return ret;
  1577. }
  1578. static void svc_i3c_master_remove(struct platform_device *pdev)
  1579. {
  1580. struct svc_i3c_master *master = platform_get_drvdata(pdev);
  1581. cancel_work_sync(&master->hj_work);
  1582. i3c_master_unregister(&master->base);
  1583. pm_runtime_dont_use_autosuspend(&pdev->dev);
  1584. pm_runtime_disable(&pdev->dev);
  1585. }
  1586. static void svc_i3c_save_regs(struct svc_i3c_master *master)
  1587. {
  1588. master->saved_regs.mconfig = readl(master->regs + SVC_I3C_MCONFIG);
  1589. master->saved_regs.mdynaddr = readl(master->regs + SVC_I3C_MDYNADDR);
  1590. }
  1591. static void svc_i3c_restore_regs(struct svc_i3c_master *master)
  1592. {
  1593. if (readl(master->regs + SVC_I3C_MDYNADDR) !=
  1594. master->saved_regs.mdynaddr) {
  1595. writel(master->saved_regs.mconfig,
  1596. master->regs + SVC_I3C_MCONFIG);
  1597. writel(master->saved_regs.mdynaddr,
  1598. master->regs + SVC_I3C_MDYNADDR);
  1599. }
  1600. }
  1601. static int __maybe_unused svc_i3c_runtime_suspend(struct device *dev)
  1602. {
  1603. struct svc_i3c_master *master = dev_get_drvdata(dev);
  1604. svc_i3c_save_regs(master);
  1605. svc_i3c_master_unprepare_clks(master);
  1606. pinctrl_pm_select_sleep_state(dev);
  1607. return 0;
  1608. }
  1609. static int __maybe_unused svc_i3c_runtime_resume(struct device *dev)
  1610. {
  1611. struct svc_i3c_master *master = dev_get_drvdata(dev);
  1612. pinctrl_pm_select_default_state(dev);
  1613. svc_i3c_master_prepare_clks(master);
  1614. svc_i3c_restore_regs(master);
  1615. return 0;
  1616. }
  1617. static const struct dev_pm_ops svc_i3c_pm_ops = {
  1618. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
  1619. pm_runtime_force_resume)
  1620. SET_RUNTIME_PM_OPS(svc_i3c_runtime_suspend,
  1621. svc_i3c_runtime_resume, NULL)
  1622. };
  1623. static const struct svc_i3c_drvdata npcm845_drvdata = {};
  1624. static const struct svc_i3c_drvdata svc_default_drvdata = {};
  1625. static const struct of_device_id svc_i3c_master_of_match_tbl[] = {
  1626. { .compatible = "nuvoton,npcm845-i3c", .data = &npcm845_drvdata },
  1627. { .compatible = "silvaco,i3c-master-v1", .data = &svc_default_drvdata },
  1628. { /* sentinel */ },
  1629. };
  1630. MODULE_DEVICE_TABLE(of, svc_i3c_master_of_match_tbl);
  1631. static struct platform_driver svc_i3c_master = {
  1632. .probe = svc_i3c_master_probe,
  1633. .remove_new = svc_i3c_master_remove,
  1634. .driver = {
  1635. .name = "silvaco-i3c-master",
  1636. .of_match_table = svc_i3c_master_of_match_tbl,
  1637. .pm = &svc_i3c_pm_ops,
  1638. },
  1639. };
  1640. module_platform_driver(svc_i3c_master);
  1641. MODULE_AUTHOR("Conor Culhane <conor.culhane@silvaco.com>");
  1642. MODULE_AUTHOR("Miquel Raynal <miquel.raynal@bootlin.com>");
  1643. MODULE_DESCRIPTION("Silvaco dual-role I3C master driver");
  1644. MODULE_LICENSE("GPL v2");