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