1/*
2 * Driver for the i2c controller on the Marvell line of host bridges
3 * (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family).
4 *
5 * Author: Mark A. Greer <mgreer@mvista.com>
6 *
7 * 2005 (c) MontaVista, Software, Inc.  This file is licensed under
8 * the terms of the GNU General Public License version 2.  This program
9 * is licensed "as is" without any warranty of any kind, whether express
10 * or implied.
11 */
12#include <linux/kernel.h>
13#include <linux/slab.h>
14#include <linux/module.h>
15#include <linux/spinlock.h>
16#include <linux/i2c.h>
17#include <linux/interrupt.h>
18#include <linux/mv643xx_i2c.h>
19#include <linux/platform_device.h>
20#include <linux/reset.h>
21#include <linux/io.h>
22#include <linux/of.h>
23#include <linux/of_device.h>
24#include <linux/of_irq.h>
25#include <linux/clk.h>
26#include <linux/err.h>
27#include <linux/delay.h>
28
29#define MV64XXX_I2C_ADDR_ADDR(val)			((val & 0x7f) << 1)
30#define MV64XXX_I2C_BAUD_DIV_N(val)			(val & 0x7)
31#define MV64XXX_I2C_BAUD_DIV_M(val)			((val & 0xf) << 3)
32
33#define	MV64XXX_I2C_REG_CONTROL_ACK			BIT(2)
34#define	MV64XXX_I2C_REG_CONTROL_IFLG			BIT(3)
35#define	MV64XXX_I2C_REG_CONTROL_STOP			BIT(4)
36#define	MV64XXX_I2C_REG_CONTROL_START			BIT(5)
37#define	MV64XXX_I2C_REG_CONTROL_TWSIEN			BIT(6)
38#define	MV64XXX_I2C_REG_CONTROL_INTEN			BIT(7)
39
40/* Ctlr status values */
41#define	MV64XXX_I2C_STATUS_BUS_ERR			0x00
42#define	MV64XXX_I2C_STATUS_MAST_START			0x08
43#define	MV64XXX_I2C_STATUS_MAST_REPEAT_START		0x10
44#define	MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK		0x18
45#define	MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK		0x20
46#define	MV64XXX_I2C_STATUS_MAST_WR_ACK			0x28
47#define	MV64XXX_I2C_STATUS_MAST_WR_NO_ACK		0x30
48#define	MV64XXX_I2C_STATUS_MAST_LOST_ARB		0x38
49#define	MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK		0x40
50#define	MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK		0x48
51#define	MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK		0x50
52#define	MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK		0x58
53#define	MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK		0xd0
54#define	MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_NO_ACK	0xd8
55#define	MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK		0xe0
56#define	MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_NO_ACK	0xe8
57#define	MV64XXX_I2C_STATUS_NO_STATUS			0xf8
58
59/* Register defines (I2C bridge) */
60#define	MV64XXX_I2C_REG_TX_DATA_LO			0xc0
61#define	MV64XXX_I2C_REG_TX_DATA_HI			0xc4
62#define	MV64XXX_I2C_REG_RX_DATA_LO			0xc8
63#define	MV64XXX_I2C_REG_RX_DATA_HI			0xcc
64#define	MV64XXX_I2C_REG_BRIDGE_CONTROL			0xd0
65#define	MV64XXX_I2C_REG_BRIDGE_STATUS			0xd4
66#define	MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE		0xd8
67#define	MV64XXX_I2C_REG_BRIDGE_INTR_MASK		0xdC
68#define	MV64XXX_I2C_REG_BRIDGE_TIMING			0xe0
69
70/* Bridge Control values */
71#define	MV64XXX_I2C_BRIDGE_CONTROL_WR			BIT(0)
72#define	MV64XXX_I2C_BRIDGE_CONTROL_RD			BIT(1)
73#define	MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT		2
74#define	MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT		BIT(12)
75#define	MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT	13
76#define	MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT	16
77#define	MV64XXX_I2C_BRIDGE_CONTROL_ENABLE		BIT(19)
78#define	MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START	BIT(20)
79
80/* Bridge Status values */
81#define	MV64XXX_I2C_BRIDGE_STATUS_ERROR			BIT(0)
82
83/* Driver states */
84enum {
85	MV64XXX_I2C_STATE_INVALID,
86	MV64XXX_I2C_STATE_IDLE,
87	MV64XXX_I2C_STATE_WAITING_FOR_START_COND,
88	MV64XXX_I2C_STATE_WAITING_FOR_RESTART,
89	MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK,
90	MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK,
91	MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK,
92	MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA,
93};
94
95/* Driver actions */
96enum {
97	MV64XXX_I2C_ACTION_INVALID,
98	MV64XXX_I2C_ACTION_CONTINUE,
99	MV64XXX_I2C_ACTION_SEND_RESTART,
100	MV64XXX_I2C_ACTION_SEND_ADDR_1,
101	MV64XXX_I2C_ACTION_SEND_ADDR_2,
102	MV64XXX_I2C_ACTION_SEND_DATA,
103	MV64XXX_I2C_ACTION_RCV_DATA,
104	MV64XXX_I2C_ACTION_RCV_DATA_STOP,
105	MV64XXX_I2C_ACTION_SEND_STOP,
106};
107
108struct mv64xxx_i2c_regs {
109	u8	addr;
110	u8	ext_addr;
111	u8	data;
112	u8	control;
113	u8	status;
114	u8	clock;
115	u8	soft_reset;
116};
117
118struct mv64xxx_i2c_data {
119	struct i2c_msg		*msgs;
120	int			num_msgs;
121	int			irq;
122	u32			state;
123	u32			action;
124	u32			aborting;
125	u32			cntl_bits;
126	void __iomem		*reg_base;
127	struct mv64xxx_i2c_regs	reg_offsets;
128	u32			addr1;
129	u32			addr2;
130	u32			bytes_left;
131	u32			byte_posn;
132	u32			send_stop;
133	u32			block;
134	int			rc;
135	u32			freq_m;
136	u32			freq_n;
137#if defined(CONFIG_HAVE_CLK)
138	struct clk              *clk;
139#endif
140	wait_queue_head_t	waitq;
141	spinlock_t		lock;
142	struct i2c_msg		*msg;
143	struct i2c_adapter	adapter;
144	bool			offload_enabled;
145/* 5us delay in order to avoid repeated start timing violation */
146	bool			errata_delay;
147	struct reset_control	*rstc;
148	bool			irq_clear_inverted;
149	/* Clk div is 2 to the power n, not 2 to the power n + 1 */
150	bool			clk_n_base_0;
151};
152
153static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = {
154	.addr		= 0x00,
155	.ext_addr	= 0x10,
156	.data		= 0x04,
157	.control	= 0x08,
158	.status		= 0x0c,
159	.clock		= 0x0c,
160	.soft_reset	= 0x1c,
161};
162
163static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_sun4i = {
164	.addr		= 0x00,
165	.ext_addr	= 0x04,
166	.data		= 0x08,
167	.control	= 0x0c,
168	.status		= 0x10,
169	.clock		= 0x14,
170	.soft_reset	= 0x18,
171};
172
173static void
174mv64xxx_i2c_prepare_for_io(struct mv64xxx_i2c_data *drv_data,
175	struct i2c_msg *msg)
176{
177	u32	dir = 0;
178
179	drv_data->cntl_bits = MV64XXX_I2C_REG_CONTROL_ACK |
180		MV64XXX_I2C_REG_CONTROL_INTEN | MV64XXX_I2C_REG_CONTROL_TWSIEN;
181
182	if (msg->flags & I2C_M_RD)
183		dir = 1;
184
185	if (msg->flags & I2C_M_TEN) {
186		drv_data->addr1 = 0xf0 | (((u32)msg->addr & 0x300) >> 7) | dir;
187		drv_data->addr2 = (u32)msg->addr & 0xff;
188	} else {
189		drv_data->addr1 = MV64XXX_I2C_ADDR_ADDR((u32)msg->addr) | dir;
190		drv_data->addr2 = 0;
191	}
192}
193
194/*
195 *****************************************************************************
196 *
197 *	Finite State Machine & Interrupt Routines
198 *
199 *****************************************************************************
200 */
201
202/* Reset hardware and initialize FSM */
203static void
204mv64xxx_i2c_hw_init(struct mv64xxx_i2c_data *drv_data)
205{
206	if (drv_data->offload_enabled) {
207		writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
208		writel(0, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_TIMING);
209		writel(0, drv_data->reg_base +
210			MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
211		writel(0, drv_data->reg_base +
212			MV64XXX_I2C_REG_BRIDGE_INTR_MASK);
213	}
214
215	writel(0, drv_data->reg_base + drv_data->reg_offsets.soft_reset);
216	writel(MV64XXX_I2C_BAUD_DIV_M(drv_data->freq_m) | MV64XXX_I2C_BAUD_DIV_N(drv_data->freq_n),
217		drv_data->reg_base + drv_data->reg_offsets.clock);
218	writel(0, drv_data->reg_base + drv_data->reg_offsets.addr);
219	writel(0, drv_data->reg_base + drv_data->reg_offsets.ext_addr);
220	writel(MV64XXX_I2C_REG_CONTROL_TWSIEN | MV64XXX_I2C_REG_CONTROL_STOP,
221		drv_data->reg_base + drv_data->reg_offsets.control);
222	drv_data->state = MV64XXX_I2C_STATE_IDLE;
223}
224
225static void
226mv64xxx_i2c_fsm(struct mv64xxx_i2c_data *drv_data, u32 status)
227{
228	/*
229	 * If state is idle, then this is likely the remnants of an old
230	 * operation that driver has given up on or the user has killed.
231	 * If so, issue the stop condition and go to idle.
232	 */
233	if (drv_data->state == MV64XXX_I2C_STATE_IDLE) {
234		drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
235		return;
236	}
237
238	/* The status from the ctlr [mostly] tells us what to do next */
239	switch (status) {
240	/* Start condition interrupt */
241	case MV64XXX_I2C_STATUS_MAST_START: /* 0x08 */
242	case MV64XXX_I2C_STATUS_MAST_REPEAT_START: /* 0x10 */
243		drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_1;
244		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK;
245		break;
246
247	/* Performing a write */
248	case MV64XXX_I2C_STATUS_MAST_WR_ADDR_ACK: /* 0x18 */
249		if (drv_data->msg->flags & I2C_M_TEN) {
250			drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
251			drv_data->state =
252				MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
253			break;
254		}
255		/* FALLTHRU */
256	case MV64XXX_I2C_STATUS_MAST_WR_ADDR_2_ACK: /* 0xd0 */
257	case MV64XXX_I2C_STATUS_MAST_WR_ACK: /* 0x28 */
258		if ((drv_data->bytes_left == 0)
259				|| (drv_data->aborting
260					&& (drv_data->byte_posn != 0))) {
261			if (drv_data->send_stop || drv_data->aborting) {
262				drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
263				drv_data->state = MV64XXX_I2C_STATE_IDLE;
264			} else {
265				drv_data->action =
266					MV64XXX_I2C_ACTION_SEND_RESTART;
267				drv_data->state =
268					MV64XXX_I2C_STATE_WAITING_FOR_RESTART;
269			}
270		} else {
271			drv_data->action = MV64XXX_I2C_ACTION_SEND_DATA;
272			drv_data->state =
273				MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK;
274			drv_data->bytes_left--;
275		}
276		break;
277
278	/* Performing a read */
279	case MV64XXX_I2C_STATUS_MAST_RD_ADDR_ACK: /* 40 */
280		if (drv_data->msg->flags & I2C_M_TEN) {
281			drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_2;
282			drv_data->state =
283				MV64XXX_I2C_STATE_WAITING_FOR_ADDR_2_ACK;
284			break;
285		}
286		/* FALLTHRU */
287	case MV64XXX_I2C_STATUS_MAST_RD_ADDR_2_ACK: /* 0xe0 */
288		if (drv_data->bytes_left == 0) {
289			drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
290			drv_data->state = MV64XXX_I2C_STATE_IDLE;
291			break;
292		}
293		/* FALLTHRU */
294	case MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK: /* 0x50 */
295		if (status != MV64XXX_I2C_STATUS_MAST_RD_DATA_ACK)
296			drv_data->action = MV64XXX_I2C_ACTION_CONTINUE;
297		else {
298			drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA;
299			drv_data->bytes_left--;
300		}
301		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA;
302
303		if ((drv_data->bytes_left == 1) || drv_data->aborting)
304			drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_ACK;
305		break;
306
307	case MV64XXX_I2C_STATUS_MAST_RD_DATA_NO_ACK: /* 0x58 */
308		drv_data->action = MV64XXX_I2C_ACTION_RCV_DATA_STOP;
309		drv_data->state = MV64XXX_I2C_STATE_IDLE;
310		break;
311
312	case MV64XXX_I2C_STATUS_MAST_WR_ADDR_NO_ACK: /* 0x20 */
313	case MV64XXX_I2C_STATUS_MAST_WR_NO_ACK: /* 30 */
314	case MV64XXX_I2C_STATUS_MAST_RD_ADDR_NO_ACK: /* 48 */
315		/* Doesn't seem to be a device at other end */
316		drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
317		drv_data->state = MV64XXX_I2C_STATE_IDLE;
318		drv_data->rc = -ENXIO;
319		break;
320
321	default:
322		dev_err(&drv_data->adapter.dev,
323			"mv64xxx_i2c_fsm: Ctlr Error -- state: 0x%x, "
324			"status: 0x%x, addr: 0x%x, flags: 0x%x\n",
325			 drv_data->state, status, drv_data->msg->addr,
326			 drv_data->msg->flags);
327		drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP;
328		mv64xxx_i2c_hw_init(drv_data);
329		drv_data->rc = -EIO;
330	}
331}
332
333static void mv64xxx_i2c_send_start(struct mv64xxx_i2c_data *drv_data)
334{
335	drv_data->msg = drv_data->msgs;
336	drv_data->byte_posn = 0;
337	drv_data->bytes_left = drv_data->msg->len;
338	drv_data->aborting = 0;
339	drv_data->rc = 0;
340
341	mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
342	writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
343	       drv_data->reg_base + drv_data->reg_offsets.control);
344}
345
346static void
347mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
348{
349	switch(drv_data->action) {
350	case MV64XXX_I2C_ACTION_SEND_RESTART:
351		/* We should only get here if we have further messages */
352		BUG_ON(drv_data->num_msgs == 0);
353
354		drv_data->msgs++;
355		drv_data->num_msgs--;
356		mv64xxx_i2c_send_start(drv_data);
357
358		if (drv_data->errata_delay)
359			udelay(5);
360
361		/*
362		 * We're never at the start of the message here, and by this
363		 * time it's already too late to do any protocol mangling.
364		 * Thankfully, do not advertise support for that feature.
365		 */
366		drv_data->send_stop = drv_data->num_msgs == 1;
367		break;
368
369	case MV64XXX_I2C_ACTION_CONTINUE:
370		writel(drv_data->cntl_bits,
371			drv_data->reg_base + drv_data->reg_offsets.control);
372		break;
373
374	case MV64XXX_I2C_ACTION_SEND_ADDR_1:
375		writel(drv_data->addr1,
376			drv_data->reg_base + drv_data->reg_offsets.data);
377		writel(drv_data->cntl_bits,
378			drv_data->reg_base + drv_data->reg_offsets.control);
379		break;
380
381	case MV64XXX_I2C_ACTION_SEND_ADDR_2:
382		writel(drv_data->addr2,
383			drv_data->reg_base + drv_data->reg_offsets.data);
384		writel(drv_data->cntl_bits,
385			drv_data->reg_base + drv_data->reg_offsets.control);
386		break;
387
388	case MV64XXX_I2C_ACTION_SEND_DATA:
389		writel(drv_data->msg->buf[drv_data->byte_posn++],
390			drv_data->reg_base + drv_data->reg_offsets.data);
391		writel(drv_data->cntl_bits,
392			drv_data->reg_base + drv_data->reg_offsets.control);
393		break;
394
395	case MV64XXX_I2C_ACTION_RCV_DATA:
396		drv_data->msg->buf[drv_data->byte_posn++] =
397			readl(drv_data->reg_base + drv_data->reg_offsets.data);
398		writel(drv_data->cntl_bits,
399			drv_data->reg_base + drv_data->reg_offsets.control);
400		break;
401
402	case MV64XXX_I2C_ACTION_RCV_DATA_STOP:
403		drv_data->msg->buf[drv_data->byte_posn++] =
404			readl(drv_data->reg_base + drv_data->reg_offsets.data);
405		drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
406		writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
407			drv_data->reg_base + drv_data->reg_offsets.control);
408		drv_data->block = 0;
409		if (drv_data->errata_delay)
410			udelay(5);
411
412		wake_up(&drv_data->waitq);
413		break;
414
415	case MV64XXX_I2C_ACTION_INVALID:
416	default:
417		dev_err(&drv_data->adapter.dev,
418			"mv64xxx_i2c_do_action: Invalid action: %d\n",
419			drv_data->action);
420		drv_data->rc = -EIO;
421
422		/* FALLTHRU */
423	case MV64XXX_I2C_ACTION_SEND_STOP:
424		drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN;
425		writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP,
426			drv_data->reg_base + drv_data->reg_offsets.control);
427		drv_data->block = 0;
428		wake_up(&drv_data->waitq);
429		break;
430	}
431}
432
433static void
434mv64xxx_i2c_read_offload_rx_data(struct mv64xxx_i2c_data *drv_data,
435				 struct i2c_msg *msg)
436{
437	u32 buf[2];
438
439	buf[0] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_LO);
440	buf[1] = readl(drv_data->reg_base + MV64XXX_I2C_REG_RX_DATA_HI);
441
442	memcpy(msg->buf, buf, msg->len);
443}
444
445static int
446mv64xxx_i2c_intr_offload(struct mv64xxx_i2c_data *drv_data)
447{
448	u32 cause, status;
449
450	cause = readl(drv_data->reg_base +
451		      MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
452	if (!cause)
453		return IRQ_NONE;
454
455	status = readl(drv_data->reg_base +
456		       MV64XXX_I2C_REG_BRIDGE_STATUS);
457
458	if (status & MV64XXX_I2C_BRIDGE_STATUS_ERROR) {
459		drv_data->rc = -EIO;
460		goto out;
461	}
462
463	drv_data->rc = 0;
464
465	/*
466	 * Transaction is a one message read transaction, read data
467	 * for this message.
468	 */
469	if (drv_data->num_msgs == 1 && drv_data->msgs[0].flags & I2C_M_RD) {
470		mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs);
471		drv_data->msgs++;
472		drv_data->num_msgs--;
473	}
474	/*
475	 * Transaction is a two messages write/read transaction, read
476	 * data for the second (read) message.
477	 */
478	else if (drv_data->num_msgs == 2 &&
479		 !(drv_data->msgs[0].flags & I2C_M_RD) &&
480		 drv_data->msgs[1].flags & I2C_M_RD) {
481		mv64xxx_i2c_read_offload_rx_data(drv_data, drv_data->msgs + 1);
482		drv_data->msgs += 2;
483		drv_data->num_msgs -= 2;
484	}
485
486out:
487	writel(0, drv_data->reg_base +	MV64XXX_I2C_REG_BRIDGE_CONTROL);
488	writel(0, drv_data->reg_base +
489	       MV64XXX_I2C_REG_BRIDGE_INTR_CAUSE);
490	drv_data->block = 0;
491
492	wake_up(&drv_data->waitq);
493
494	return IRQ_HANDLED;
495}
496
497static irqreturn_t
498mv64xxx_i2c_intr(int irq, void *dev_id)
499{
500	struct mv64xxx_i2c_data	*drv_data = dev_id;
501	unsigned long	flags;
502	u32		status;
503	irqreturn_t	rc = IRQ_NONE;
504
505	spin_lock_irqsave(&drv_data->lock, flags);
506
507	if (drv_data->offload_enabled)
508		rc = mv64xxx_i2c_intr_offload(drv_data);
509
510	while (readl(drv_data->reg_base + drv_data->reg_offsets.control) &
511						MV64XXX_I2C_REG_CONTROL_IFLG) {
512		status = readl(drv_data->reg_base + drv_data->reg_offsets.status);
513		mv64xxx_i2c_fsm(drv_data, status);
514		mv64xxx_i2c_do_action(drv_data);
515
516		if (drv_data->irq_clear_inverted)
517			writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_IFLG,
518			       drv_data->reg_base + drv_data->reg_offsets.control);
519
520		rc = IRQ_HANDLED;
521	}
522	spin_unlock_irqrestore(&drv_data->lock, flags);
523
524	return rc;
525}
526
527/*
528 *****************************************************************************
529 *
530 *	I2C Msg Execution Routines
531 *
532 *****************************************************************************
533 */
534static void
535mv64xxx_i2c_wait_for_completion(struct mv64xxx_i2c_data *drv_data)
536{
537	long		time_left;
538	unsigned long	flags;
539	char		abort = 0;
540
541	time_left = wait_event_timeout(drv_data->waitq,
542		!drv_data->block, drv_data->adapter.timeout);
543
544	spin_lock_irqsave(&drv_data->lock, flags);
545	if (!time_left) { /* Timed out */
546		drv_data->rc = -ETIMEDOUT;
547		abort = 1;
548	} else if (time_left < 0) { /* Interrupted/Error */
549		drv_data->rc = time_left; /* errno value */
550		abort = 1;
551	}
552
553	if (abort && drv_data->block) {
554		drv_data->aborting = 1;
555		spin_unlock_irqrestore(&drv_data->lock, flags);
556
557		time_left = wait_event_timeout(drv_data->waitq,
558			!drv_data->block, drv_data->adapter.timeout);
559
560		if ((time_left <= 0) && drv_data->block) {
561			drv_data->state = MV64XXX_I2C_STATE_IDLE;
562			dev_err(&drv_data->adapter.dev,
563				"mv64xxx: I2C bus locked, block: %d, "
564				"time_left: %d\n", drv_data->block,
565				(int)time_left);
566			mv64xxx_i2c_hw_init(drv_data);
567		}
568	} else
569		spin_unlock_irqrestore(&drv_data->lock, flags);
570}
571
572static int
573mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
574				int is_last)
575{
576	unsigned long	flags;
577
578	spin_lock_irqsave(&drv_data->lock, flags);
579
580	drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
581
582	drv_data->send_stop = is_last;
583	drv_data->block = 1;
584	mv64xxx_i2c_send_start(drv_data);
585	spin_unlock_irqrestore(&drv_data->lock, flags);
586
587	mv64xxx_i2c_wait_for_completion(drv_data);
588	return drv_data->rc;
589}
590
591static void
592mv64xxx_i2c_prepare_tx(struct mv64xxx_i2c_data *drv_data)
593{
594	struct i2c_msg *msg = drv_data->msgs;
595	u32 buf[2];
596
597	memcpy(buf, msg->buf, msg->len);
598
599	writel(buf[0], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_LO);
600	writel(buf[1], drv_data->reg_base + MV64XXX_I2C_REG_TX_DATA_HI);
601}
602
603static int
604mv64xxx_i2c_offload_xfer(struct mv64xxx_i2c_data *drv_data)
605{
606	struct i2c_msg *msgs = drv_data->msgs;
607	int num = drv_data->num_msgs;
608	unsigned long ctrl_reg;
609	unsigned long flags;
610
611	spin_lock_irqsave(&drv_data->lock, flags);
612
613	/* Build transaction */
614	ctrl_reg = MV64XXX_I2C_BRIDGE_CONTROL_ENABLE |
615		(msgs[0].addr << MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT);
616
617	if (msgs[0].flags & I2C_M_TEN)
618		ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT;
619
620	/* Single write message transaction */
621	if (num == 1 && !(msgs[0].flags & I2C_M_RD)) {
622		size_t len = msgs[0].len - 1;
623
624		ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_WR |
625			(len << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT);
626		mv64xxx_i2c_prepare_tx(drv_data);
627	}
628	/* Single read message transaction */
629	else if (num == 1 && msgs[0].flags & I2C_M_RD) {
630		size_t len = msgs[0].len - 1;
631
632		ctrl_reg |= MV64XXX_I2C_BRIDGE_CONTROL_RD |
633			(len << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT);
634	}
635	/*
636	 * Transaction with one write and one read message. This is
637	 * guaranteed by the mv64xx_i2c_can_offload() checks.
638	 */
639	else if (num == 2) {
640		size_t lentx = msgs[0].len - 1;
641		size_t lenrx = msgs[1].len - 1;
642
643		ctrl_reg |=
644			MV64XXX_I2C_BRIDGE_CONTROL_RD |
645			MV64XXX_I2C_BRIDGE_CONTROL_WR |
646			(lentx << MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT) |
647			(lenrx << MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT) |
648			MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START;
649		mv64xxx_i2c_prepare_tx(drv_data);
650	}
651
652	/* Execute transaction */
653	drv_data->block = 1;
654	writel(ctrl_reg, drv_data->reg_base + MV64XXX_I2C_REG_BRIDGE_CONTROL);
655	spin_unlock_irqrestore(&drv_data->lock, flags);
656
657	mv64xxx_i2c_wait_for_completion(drv_data);
658
659	return drv_data->rc;
660}
661
662static bool
663mv64xxx_i2c_valid_offload_sz(struct i2c_msg *msg)
664{
665	return msg->len <= 8 && msg->len >= 1;
666}
667
668static bool
669mv64xxx_i2c_can_offload(struct mv64xxx_i2c_data *drv_data)
670{
671	struct i2c_msg *msgs = drv_data->msgs;
672	int num = drv_data->num_msgs;
673
674	if (!drv_data->offload_enabled)
675		return false;
676
677	/*
678	 * We can offload a transaction consisting of a single
679	 * message, as long as the message has a length between 1 and
680	 * 8 bytes.
681	 */
682	if (num == 1 && mv64xxx_i2c_valid_offload_sz(msgs))
683		return true;
684
685	/*
686	 * We can offload a transaction consisting of two messages, if
687	 * the first is a write and a second is a read, and both have
688	 * a length between 1 and 8 bytes.
689	 */
690	if (num == 2 &&
691	    mv64xxx_i2c_valid_offload_sz(msgs) &&
692	    mv64xxx_i2c_valid_offload_sz(msgs + 1) &&
693	    !(msgs[0].flags & I2C_M_RD) &&
694	    msgs[1].flags & I2C_M_RD)
695		return true;
696
697	return false;
698}
699
700/*
701 *****************************************************************************
702 *
703 *	I2C Core Support Routines (Interface to higher level I2C code)
704 *
705 *****************************************************************************
706 */
707static u32
708mv64xxx_i2c_functionality(struct i2c_adapter *adap)
709{
710	return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL;
711}
712
713static int
714mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
715{
716	struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
717	int rc, ret = num;
718
719	BUG_ON(drv_data->msgs != NULL);
720	drv_data->msgs = msgs;
721	drv_data->num_msgs = num;
722
723	if (mv64xxx_i2c_can_offload(drv_data))
724		rc = mv64xxx_i2c_offload_xfer(drv_data);
725	else
726		rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[0], num == 1);
727
728	if (rc < 0)
729		ret = rc;
730
731	drv_data->num_msgs = 0;
732	drv_data->msgs = NULL;
733
734	return ret;
735}
736
737static const struct i2c_algorithm mv64xxx_i2c_algo = {
738	.master_xfer = mv64xxx_i2c_xfer,
739	.functionality = mv64xxx_i2c_functionality,
740};
741
742/*
743 *****************************************************************************
744 *
745 *	Driver Interface & Early Init Routines
746 *
747 *****************************************************************************
748 */
749static const struct of_device_id mv64xxx_i2c_of_match_table[] = {
750	{ .compatible = "allwinner,sun4i-a10-i2c", .data = &mv64xxx_i2c_regs_sun4i},
751	{ .compatible = "allwinner,sun6i-a31-i2c", .data = &mv64xxx_i2c_regs_sun4i},
752	{ .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
753	{ .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
754	{ .compatible = "marvell,mv78230-a0-i2c", .data = &mv64xxx_i2c_regs_mv64xxx},
755	{}
756};
757MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table);
758
759#ifdef CONFIG_OF
760#ifdef CONFIG_HAVE_CLK
761static int
762mv64xxx_calc_freq(struct mv64xxx_i2c_data *drv_data,
763		  const int tclk, const int n, const int m)
764{
765	if (drv_data->clk_n_base_0)
766		return tclk / (10 * (m + 1) * (1 << n));
767	else
768		return tclk / (10 * (m + 1) * (2 << n));
769}
770
771static bool
772mv64xxx_find_baud_factors(struct mv64xxx_i2c_data *drv_data,
773			  const u32 req_freq, const u32 tclk)
774{
775	int freq, delta, best_delta = INT_MAX;
776	int m, n;
777
778	for (n = 0; n <= 7; n++)
779		for (m = 0; m <= 15; m++) {
780			freq = mv64xxx_calc_freq(drv_data, tclk, n, m);
781			delta = req_freq - freq;
782			if (delta >= 0 && delta < best_delta) {
783				drv_data->freq_m = m;
784				drv_data->freq_n = n;
785				best_delta = delta;
786			}
787			if (best_delta == 0)
788				return true;
789		}
790	if (best_delta == INT_MAX)
791		return false;
792	return true;
793}
794#endif /* CONFIG_HAVE_CLK */
795
796static int
797mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
798		  struct device *dev)
799{
800	/* CLK is mandatory when using DT to describe the i2c bus. We
801	 * need to know tclk in order to calculate bus clock
802	 * factors.
803	 */
804#if !defined(CONFIG_HAVE_CLK)
805	/* Have OF but no CLK */
806	return -ENODEV;
807#else
808	const struct of_device_id *device;
809	struct device_node *np = dev->of_node;
810	u32 bus_freq, tclk;
811	int rc = 0;
812
813	if (IS_ERR(drv_data->clk)) {
814		rc = -ENODEV;
815		goto out;
816	}
817	tclk = clk_get_rate(drv_data->clk);
818
819	if (of_property_read_u32(np, "clock-frequency", &bus_freq))
820		bus_freq = 100000; /* 100kHz by default */
821
822	if (of_device_is_compatible(np, "allwinner,sun4i-a10-i2c") ||
823	    of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
824		drv_data->clk_n_base_0 = true;
825
826	if (!mv64xxx_find_baud_factors(drv_data, bus_freq, tclk)) {
827		rc = -EINVAL;
828		goto out;
829	}
830	drv_data->irq = irq_of_parse_and_map(np, 0);
831
832	drv_data->rstc = devm_reset_control_get_optional(dev, NULL);
833	if (IS_ERR(drv_data->rstc)) {
834		if (PTR_ERR(drv_data->rstc) == -EPROBE_DEFER) {
835			rc = -EPROBE_DEFER;
836			goto out;
837		}
838	} else {
839		reset_control_deassert(drv_data->rstc);
840	}
841
842	/* Its not yet defined how timeouts will be specified in device tree.
843	 * So hard code the value to 1 second.
844	 */
845	drv_data->adapter.timeout = HZ;
846
847	device = of_match_device(mv64xxx_i2c_of_match_table, dev);
848	if (!device)
849		return -ENODEV;
850
851	memcpy(&drv_data->reg_offsets, device->data, sizeof(drv_data->reg_offsets));
852
853	/*
854	 * For controllers embedded in new SoCs activate the
855	 * Transaction Generator support and the errata fix.
856	 */
857	if (of_device_is_compatible(np, "marvell,mv78230-i2c")) {
858		drv_data->offload_enabled = true;
859		drv_data->errata_delay = true;
860	}
861
862	if (of_device_is_compatible(np, "marvell,mv78230-a0-i2c")) {
863		drv_data->offload_enabled = false;
864		drv_data->errata_delay = true;
865	}
866
867	if (of_device_is_compatible(np, "allwinner,sun6i-a31-i2c"))
868		drv_data->irq_clear_inverted = true;
869
870out:
871	return rc;
872#endif
873}
874#else /* CONFIG_OF */
875static int
876mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
877		  struct device *dev)
878{
879	return -ENODEV;
880}
881#endif /* CONFIG_OF */
882
883static int
884mv64xxx_i2c_probe(struct platform_device *pd)
885{
886	struct mv64xxx_i2c_data		*drv_data;
887	struct mv64xxx_i2c_pdata	*pdata = dev_get_platdata(&pd->dev);
888	struct resource	*r;
889	int	rc;
890
891	if ((!pdata && !pd->dev.of_node))
892		return -ENODEV;
893
894	drv_data = devm_kzalloc(&pd->dev, sizeof(struct mv64xxx_i2c_data),
895				GFP_KERNEL);
896	if (!drv_data)
897		return -ENOMEM;
898
899	r = platform_get_resource(pd, IORESOURCE_MEM, 0);
900	drv_data->reg_base = devm_ioremap_resource(&pd->dev, r);
901	if (IS_ERR(drv_data->reg_base))
902		return PTR_ERR(drv_data->reg_base);
903
904	strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter",
905		sizeof(drv_data->adapter.name));
906
907	init_waitqueue_head(&drv_data->waitq);
908	spin_lock_init(&drv_data->lock);
909
910#if defined(CONFIG_HAVE_CLK)
911	/* Not all platforms have a clk */
912	drv_data->clk = devm_clk_get(&pd->dev, NULL);
913	if (!IS_ERR(drv_data->clk)) {
914		clk_prepare(drv_data->clk);
915		clk_enable(drv_data->clk);
916	}
917#endif
918	if (pdata) {
919		drv_data->freq_m = pdata->freq_m;
920		drv_data->freq_n = pdata->freq_n;
921		drv_data->irq = platform_get_irq(pd, 0);
922		drv_data->adapter.timeout = msecs_to_jiffies(pdata->timeout);
923		drv_data->offload_enabled = false;
924		memcpy(&drv_data->reg_offsets, &mv64xxx_i2c_regs_mv64xxx, sizeof(drv_data->reg_offsets));
925	} else if (pd->dev.of_node) {
926		rc = mv64xxx_of_config(drv_data, &pd->dev);
927		if (rc)
928			goto exit_clk;
929	}
930	if (drv_data->irq < 0) {
931		rc = -ENXIO;
932		goto exit_reset;
933	}
934
935	drv_data->adapter.dev.parent = &pd->dev;
936	drv_data->adapter.algo = &mv64xxx_i2c_algo;
937	drv_data->adapter.owner = THIS_MODULE;
938	drv_data->adapter.class = I2C_CLASS_DEPRECATED;
939	drv_data->adapter.nr = pd->id;
940	drv_data->adapter.dev.of_node = pd->dev.of_node;
941	platform_set_drvdata(pd, drv_data);
942	i2c_set_adapdata(&drv_data->adapter, drv_data);
943
944	mv64xxx_i2c_hw_init(drv_data);
945
946	rc = request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
947			 MV64XXX_I2C_CTLR_NAME, drv_data);
948	if (rc) {
949		dev_err(&drv_data->adapter.dev,
950			"mv64xxx: Can't register intr handler irq%d: %d\n",
951			drv_data->irq, rc);
952		goto exit_reset;
953	} else if ((rc = i2c_add_numbered_adapter(&drv_data->adapter)) != 0) {
954		dev_err(&drv_data->adapter.dev,
955			"mv64xxx: Can't add i2c adapter, rc: %d\n", -rc);
956		goto exit_free_irq;
957	}
958
959	return 0;
960
961exit_free_irq:
962	free_irq(drv_data->irq, drv_data);
963exit_reset:
964	if (!IS_ERR_OR_NULL(drv_data->rstc))
965		reset_control_assert(drv_data->rstc);
966exit_clk:
967#if defined(CONFIG_HAVE_CLK)
968	/* Not all platforms have a clk */
969	if (!IS_ERR(drv_data->clk)) {
970		clk_disable(drv_data->clk);
971		clk_unprepare(drv_data->clk);
972	}
973#endif
974	return rc;
975}
976
977static int
978mv64xxx_i2c_remove(struct platform_device *dev)
979{
980	struct mv64xxx_i2c_data		*drv_data = platform_get_drvdata(dev);
981
982	i2c_del_adapter(&drv_data->adapter);
983	free_irq(drv_data->irq, drv_data);
984	if (!IS_ERR_OR_NULL(drv_data->rstc))
985		reset_control_assert(drv_data->rstc);
986#if defined(CONFIG_HAVE_CLK)
987	/* Not all platforms have a clk */
988	if (!IS_ERR(drv_data->clk)) {
989		clk_disable(drv_data->clk);
990		clk_unprepare(drv_data->clk);
991	}
992#endif
993
994	return 0;
995}
996
997static struct platform_driver mv64xxx_i2c_driver = {
998	.probe	= mv64xxx_i2c_probe,
999	.remove	= mv64xxx_i2c_remove,
1000	.driver	= {
1001		.name	= MV64XXX_I2C_CTLR_NAME,
1002		.of_match_table = mv64xxx_i2c_of_match_table,
1003	},
1004};
1005
1006module_platform_driver(mv64xxx_i2c_driver);
1007
1008MODULE_AUTHOR("Mark A. Greer <mgreer@mvista.com>");
1009MODULE_DESCRIPTION("Marvell mv64xxx host bridge i2c ctlr driver");
1010MODULE_LICENSE("GPL");
1011