6d3288211727043b8881360163d713634ea3662e
[openwrt/staging/lynxis.git] /
1 From 7545c7dba169c4c29ba5f6ab8706267a84c0febe Mon Sep 17 00:00:00 2001
2 From: Abhishek Sahu <absahu@codeaurora.org>
3 Date: Mon, 12 Mar 2018 18:45:02 +0530
4 Subject: [PATCH 13/13] i2c: qup: reorganization of driver code to remove
5 polling for qup v2
6 MIME-Version: 1.0
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
9
10 Following are the major issues in current driver code
11
12 1. The current driver simply assumes the transfer completion
13 whenever its gets any non-error interrupts and then simply do the
14 polling of available/free bytes in FIFO.
15 2. The block mode is not working properly since no handling in
16 being done for OUT_BLOCK_WRITE_REQ and IN_BLOCK_READ_READ.
17 3. An i2c transfer can contain multiple message and QUP v2
18 supports reconfiguration during run in which the mode should be same
19 for all the sub transfer. Currently the mode is being programmed
20 before every sub transfer which is functionally wrong. If one message
21 is less than FIFO length and other message is greater than FIFO
22 length, then transfers will fail.
23
24 Because of above, i2c v2 transfers of size greater than 64 are failing
25 with following error message
26
27 i2c_qup 78b6000.i2c: timeout for fifo out full
28
29 To make block mode working properly and move to use the interrupts
30 instead of polling, major code reorganization is required. Following
31 are the major changes done in this patch
32
33 1. Remove the polling of TX FIFO free space and RX FIFO available
34 bytes and move to interrupts completely. QUP has QUP_MX_OUTPUT_DONE,
35 QUP_MX_INPUT_DONE, OUT_BLOCK_WRITE_REQ and IN_BLOCK_READ_REQ
36 interrupts to handle FIFO’s properly so check all these interrupts.
37 2. Determine the mode for transfer before starting by checking
38 all the tx/rx data length in each message. The complete message can be
39 transferred either in DMA mode or Programmed IO by FIFO/Block mode.
40 in DMA mode, both tx and rx uses same mode but in PIO mode, the TX and
41 RX can be in different mode.
42 3. During write, For FIFO mode, TX FIFO can be directly written
43 without checking for FIFO space. For block mode, the QUP will generate
44 OUT_BLOCK_WRITE_REQ interrupt whenever it has block size of available
45 space.
46 4. During read, both TX and RX FIFO will be used. TX will be used
47 for writing tags and RX will be used for receiving the data. In QUP,
48 TX and RX can operate in separate mode so configure modes accordingly.
49 5. For read FIFO mode, wait for QUP_MX_INPUT_DONE interrupt which
50 will be generated after all the bytes have been copied in RX FIFO. For
51 read Block mode, QUP will generate IN_BLOCK_READ_REQ interrupts
52 whenever it has block size of available data.
53 6. Split the transfer in chunk of one QUP block size(256 bytes)
54 and schedule each block separately. QUP v2 supports reconfiguration
55 during run in which QUP can transfer multiple blocks without issuing a
56 stop events.
57 7. Port the SMBus block read support for new code changes.
58
59 Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
60 Reviewed-by: Sricharan R <sricharan@codeaurora.org>
61 Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
62 ---
63 drivers/i2c/busses/i2c-qup.c | 900 ++++++++++++++++++++---------------
64 1 file changed, 515 insertions(+), 385 deletions(-)
65
66 --- a/drivers/i2c/busses/i2c-qup.c
67 +++ b/drivers/i2c/busses/i2c-qup.c
68 @@ -141,17 +141,40 @@
69 #define DEFAULT_SRC_CLK 20000000
70
71 /*
72 + * Max tags length (start, stop and maximum 2 bytes address) for each QUP
73 + * data transfer
74 + */
75 +#define QUP_MAX_TAGS_LEN 4
76 +/* Max data length for each DATARD tags */
77 +#define RECV_MAX_DATA_LEN 254
78 +/* TAG length for DATA READ in RX FIFO */
79 +#define READ_RX_TAGS_LEN 2
80 +
81 +/*
82 * count: no of blocks
83 * pos: current block number
84 * tx_tag_len: tx tag length for current block
85 * rx_tag_len: rx tag length for current block
86 * data_len: remaining data length for current message
87 + * cur_blk_len: data length for current block
88 * total_tx_len: total tx length including tag bytes for current QUP transfer
89 * total_rx_len: total rx length including tag bytes for current QUP transfer
90 + * tx_fifo_data_pos: current byte number in TX FIFO word
91 * tx_fifo_free: number of free bytes in current QUP block write.
92 + * rx_fifo_data_pos: current byte number in RX FIFO word
93 * fifo_available: number of available bytes in RX FIFO for current
94 * QUP block read
95 + * tx_fifo_data: QUP TX FIFO write works on word basis (4 bytes). New byte write
96 + * to TX FIFO will be appended in this data and will be written to
97 + * TX FIFO when all the 4 bytes are available.
98 + * rx_fifo_data: QUP RX FIFO read works on word basis (4 bytes). This will
99 + * contains the 4 bytes of RX data.
100 + * cur_data: pointer to tell cur data position for current message
101 + * cur_tx_tags: pointer to tell cur position in tags
102 + * tx_tags_sent: all tx tag bytes have been written in FIFO word
103 + * send_last_word: for tx FIFO, last word send is pending in current block
104 * rx_bytes_read: if all the bytes have been read from rx FIFO.
105 + * rx_tags_fetched: all the rx tag bytes have been fetched from rx fifo word
106 * is_tx_blk_mode: whether tx uses block or FIFO mode in case of non BAM xfer.
107 * is_rx_blk_mode: whether rx uses block or FIFO mode in case of non BAM xfer.
108 * tags: contains tx tag bytes for current QUP transfer
109 @@ -162,10 +185,20 @@ struct qup_i2c_block {
110 int tx_tag_len;
111 int rx_tag_len;
112 int data_len;
113 + int cur_blk_len;
114 int total_tx_len;
115 int total_rx_len;
116 + int tx_fifo_data_pos;
117 int tx_fifo_free;
118 + int rx_fifo_data_pos;
119 int fifo_available;
120 + u32 tx_fifo_data;
121 + u32 rx_fifo_data;
122 + u8 *cur_data;
123 + u8 *cur_tx_tags;
124 + bool tx_tags_sent;
125 + bool send_last_word;
126 + bool rx_tags_fetched;
127 bool rx_bytes_read;
128 bool is_tx_blk_mode;
129 bool is_rx_blk_mode;
130 @@ -198,6 +231,7 @@ struct qup_i2c_dev {
131 int out_blk_sz;
132 int in_blk_sz;
133
134 + int blk_xfer_limit;
135 unsigned long one_byte_t;
136 unsigned long xfer_timeout;
137 struct qup_i2c_block blk;
138 @@ -212,10 +246,10 @@ struct qup_i2c_dev {
139
140 /* To check if this is the last msg */
141 bool is_last;
142 - bool is_qup_v1;
143 + bool is_smbus_read;
144
145 /* To configure when bus is in run state */
146 - int config_run;
147 + u32 config_run;
148
149 /* dma parameters */
150 bool is_dma;
151 @@ -223,6 +257,8 @@ struct qup_i2c_dev {
152 bool use_dma;
153 unsigned int max_xfer_sg_len;
154 unsigned int tag_buf_pos;
155 + /* The threshold length above which block mode will be used */
156 + unsigned int blk_mode_threshold;
157 struct dma_pool *dpool;
158 struct qup_i2c_tag start_tag;
159 struct qup_i2c_bam brx;
160 @@ -287,9 +323,6 @@ static irqreturn_t qup_i2c_interrupt(int
161 goto done;
162 }
163
164 - if (!qup->is_qup_v1)
165 - goto done;
166 -
167 if (opflags & QUP_OUT_SVC_FLAG) {
168 writel(QUP_OUT_SVC_FLAG, qup->base + QUP_OPERATIONAL);
169
170 @@ -416,108 +449,6 @@ static int qup_i2c_bus_active(struct qup
171 return ret;
172 }
173
174 -/**
175 - * qup_i2c_wait_ready - wait for a give number of bytes in tx/rx path
176 - * @qup: The qup_i2c_dev device
177 - * @op: The bit/event to wait on
178 - * @val: value of the bit to wait on, 0 or 1
179 - * @len: The length the bytes to be transferred
180 - */
181 -static int qup_i2c_wait_ready(struct qup_i2c_dev *qup, int op, bool val,
182 - int len)
183 -{
184 - unsigned long timeout;
185 - u32 opflags;
186 - u32 status;
187 - u32 shift = __ffs(op);
188 - int ret = 0;
189 -
190 - len *= qup->one_byte_t;
191 - /* timeout after a wait of twice the max time */
192 - timeout = jiffies + len * 4;
193 -
194 - for (;;) {
195 - opflags = readl(qup->base + QUP_OPERATIONAL);
196 - status = readl(qup->base + QUP_I2C_STATUS);
197 -
198 - if (((opflags & op) >> shift) == val) {
199 - if ((op == QUP_OUT_NOT_EMPTY) && qup->is_last) {
200 - if (!(status & I2C_STATUS_BUS_ACTIVE)) {
201 - ret = 0;
202 - goto done;
203 - }
204 - } else {
205 - ret = 0;
206 - goto done;
207 - }
208 - }
209 -
210 - if (time_after(jiffies, timeout)) {
211 - ret = -ETIMEDOUT;
212 - goto done;
213 - }
214 - usleep_range(len, len * 2);
215 - }
216 -
217 -done:
218 - if (qup->bus_err || qup->qup_err)
219 - ret = (qup->bus_err & QUP_I2C_NACK_FLAG) ? -ENXIO : -EIO;
220 -
221 - return ret;
222 -}
223 -
224 -static void qup_i2c_set_write_mode_v2(struct qup_i2c_dev *qup,
225 - struct i2c_msg *msg)
226 -{
227 - /* Number of entries to shift out, including the tags */
228 - int total = msg->len + qup->blk.tx_tag_len;
229 -
230 - total |= qup->config_run;
231 -
232 - if (total < qup->out_fifo_sz) {
233 - /* FIFO mode */
234 - writel(QUP_REPACK_EN, qup->base + QUP_IO_MODE);
235 - writel(total, qup->base + QUP_MX_WRITE_CNT);
236 - } else {
237 - /* BLOCK mode (transfer data on chunks) */
238 - writel(QUP_OUTPUT_BLK_MODE | QUP_REPACK_EN,
239 - qup->base + QUP_IO_MODE);
240 - writel(total, qup->base + QUP_MX_OUTPUT_CNT);
241 - }
242 -}
243 -
244 -static int check_for_fifo_space(struct qup_i2c_dev *qup)
245 -{
246 - int ret;
247 -
248 - ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
249 - if (ret)
250 - goto out;
251 -
252 - ret = qup_i2c_wait_ready(qup, QUP_OUT_FULL,
253 - RESET_BIT, 4 * ONE_BYTE);
254 - if (ret) {
255 - /* Fifo is full. Drain out the fifo */
256 - ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
257 - if (ret)
258 - goto out;
259 -
260 - ret = qup_i2c_wait_ready(qup, QUP_OUT_NOT_EMPTY,
261 - RESET_BIT, 256 * ONE_BYTE);
262 - if (ret) {
263 - dev_err(qup->dev, "timeout for fifo out full");
264 - goto out;
265 - }
266 -
267 - ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
268 - if (ret)
269 - goto out;
270 - }
271 -
272 -out:
273 - return ret;
274 -}
275 -
276 static void qup_i2c_write_tx_fifo_v1(struct qup_i2c_dev *qup)
277 {
278 struct qup_i2c_block *blk = &qup->blk;
279 @@ -560,60 +491,17 @@ static void qup_i2c_write_tx_fifo_v1(str
280 static void qup_i2c_set_blk_data(struct qup_i2c_dev *qup,
281 struct i2c_msg *msg)
282 {
283 - memset(&qup->blk, 0, sizeof(qup->blk));
284 -
285 + qup->blk.pos = 0;
286 qup->blk.data_len = msg->len;
287 - qup->blk.count = (msg->len + QUP_READ_LIMIT - 1) / QUP_READ_LIMIT;
288 -
289 - /* 4 bytes for first block and 2 writes for rest */
290 - qup->blk.tx_tag_len = 4 + (qup->blk.count - 1) * 2;
291 -
292 - /* There are 2 tag bytes that are read in to fifo for every block */
293 - if (msg->flags & I2C_M_RD)
294 - qup->blk.rx_tag_len = qup->blk.count * 2;
295 -}
296 -
297 -static int qup_i2c_send_data(struct qup_i2c_dev *qup, int tlen, u8 *tbuf,
298 - int dlen, u8 *dbuf)
299 -{
300 - u32 val = 0, idx = 0, pos = 0, i = 0, t;
301 - int len = tlen + dlen;
302 - u8 *buf = tbuf;
303 - int ret = 0;
304 -
305 - while (len > 0) {
306 - ret = check_for_fifo_space(qup);
307 - if (ret)
308 - return ret;
309 -
310 - t = (len >= 4) ? 4 : len;
311 -
312 - while (idx < t) {
313 - if (!i && (pos >= tlen)) {
314 - buf = dbuf;
315 - pos = 0;
316 - i = 1;
317 - }
318 - val |= buf[pos++] << (idx++ * 8);
319 - }
320 -
321 - writel(val, qup->base + QUP_OUT_FIFO_BASE);
322 - idx = 0;
323 - val = 0;
324 - len -= 4;
325 - }
326 -
327 - ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
328 -
329 - return ret;
330 + qup->blk.count = DIV_ROUND_UP(msg->len, qup->blk_xfer_limit);
331 }
332
333 static int qup_i2c_get_data_len(struct qup_i2c_dev *qup)
334 {
335 int data_len;
336
337 - if (qup->blk.data_len > QUP_READ_LIMIT)
338 - data_len = QUP_READ_LIMIT;
339 + if (qup->blk.data_len > qup->blk_xfer_limit)
340 + data_len = qup->blk_xfer_limit;
341 else
342 data_len = qup->blk.data_len;
343
344 @@ -630,9 +518,9 @@ static int qup_i2c_set_tags_smb(u16 addr
345 {
346 int len = 0;
347
348 - if (msg->len > 1) {
349 + if (qup->is_smbus_read) {
350 tags[len++] = QUP_TAG_V2_DATARD_STOP;
351 - tags[len++] = qup_i2c_get_data_len(qup) - 1;
352 + tags[len++] = qup_i2c_get_data_len(qup);
353 } else {
354 tags[len++] = QUP_TAG_V2_START;
355 tags[len++] = addr & 0xff;
356 @@ -694,24 +582,6 @@ static int qup_i2c_set_tags(u8 *tags, st
357 return len;
358 }
359
360 -static int qup_i2c_issue_xfer_v2(struct qup_i2c_dev *qup, struct i2c_msg *msg)
361 -{
362 - int data_len = 0, tag_len, index;
363 - int ret;
364 -
365 - tag_len = qup_i2c_set_tags(qup->blk.tags, qup, msg);
366 - index = msg->len - qup->blk.data_len;
367 -
368 - /* only tags are written for read */
369 - if (!(msg->flags & I2C_M_RD))
370 - data_len = qup_i2c_get_data_len(qup);
371 -
372 - ret = qup_i2c_send_data(qup, tag_len, qup->blk.tags,
373 - data_len, &msg->buf[index]);
374 - qup->blk.data_len -= data_len;
375 -
376 - return ret;
377 -}
378
379 static void qup_i2c_bam_cb(void *data)
380 {
381 @@ -778,6 +648,7 @@ static int qup_i2c_bam_make_desc(struct
382 u32 i = 0, tlen, tx_len = 0;
383 u8 *tags;
384
385 + qup->blk_xfer_limit = QUP_READ_LIMIT;
386 qup_i2c_set_blk_data(qup, msg);
387
388 blocks = qup->blk.count;
389 @@ -1026,7 +897,7 @@ static int qup_i2c_wait_for_complete(str
390 unsigned long left;
391 int ret = 0;
392
393 - left = wait_for_completion_timeout(&qup->xfer, HZ);
394 + left = wait_for_completion_timeout(&qup->xfer, qup->xfer_timeout);
395 if (!left) {
396 writel(1, qup->base + QUP_SW_RESET);
397 ret = -ETIMEDOUT;
398 @@ -1038,65 +909,6 @@ static int qup_i2c_wait_for_complete(str
399 return ret;
400 }
401
402 -static int qup_i2c_write_one_v2(struct qup_i2c_dev *qup, struct i2c_msg *msg)
403 -{
404 - int ret = 0;
405 -
406 - qup->msg = msg;
407 - qup->pos = 0;
408 - enable_irq(qup->irq);
409 - qup_i2c_set_blk_data(qup, msg);
410 - qup_i2c_set_write_mode_v2(qup, msg);
411 -
412 - ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
413 - if (ret)
414 - goto err;
415 -
416 - writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
417 -
418 - do {
419 - ret = qup_i2c_issue_xfer_v2(qup, msg);
420 - if (ret)
421 - goto err;
422 -
423 - ret = qup_i2c_wait_for_complete(qup, msg);
424 - if (ret)
425 - goto err;
426 -
427 - qup->blk.pos++;
428 - } while (qup->blk.pos < qup->blk.count);
429 -
430 - ret = qup_i2c_wait_ready(qup, QUP_OUT_NOT_EMPTY, RESET_BIT, ONE_BYTE);
431 -
432 -err:
433 - disable_irq(qup->irq);
434 - qup->msg = NULL;
435 -
436 - return ret;
437 -}
438 -
439 -static void qup_i2c_set_read_mode_v2(struct qup_i2c_dev *qup, int len)
440 -{
441 - int tx_len = qup->blk.tx_tag_len;
442 -
443 - len += qup->blk.rx_tag_len;
444 - len |= qup->config_run;
445 - tx_len |= qup->config_run;
446 -
447 - if (len < qup->in_fifo_sz) {
448 - /* FIFO mode */
449 - writel(QUP_REPACK_EN, qup->base + QUP_IO_MODE);
450 - writel(tx_len, qup->base + QUP_MX_WRITE_CNT);
451 - writel(len, qup->base + QUP_MX_READ_CNT);
452 - } else {
453 - /* BLOCK mode (transfer data on chunks) */
454 - writel(QUP_INPUT_BLK_MODE | QUP_REPACK_EN,
455 - qup->base + QUP_IO_MODE);
456 - writel(tx_len, qup->base + QUP_MX_OUTPUT_CNT);
457 - writel(len, qup->base + QUP_MX_INPUT_CNT);
458 - }
459 -}
460 -
461 static void qup_i2c_read_rx_fifo_v1(struct qup_i2c_dev *qup)
462 {
463 struct qup_i2c_block *blk = &qup->blk;
464 @@ -1120,104 +932,6 @@ static void qup_i2c_read_rx_fifo_v1(stru
465 blk->rx_bytes_read = true;
466 }
467
468 -static int qup_i2c_read_fifo_v2(struct qup_i2c_dev *qup,
469 - struct i2c_msg *msg)
470 -{
471 - u32 val;
472 - int idx, pos = 0, ret = 0, total, msg_offset = 0;
473 -
474 - /*
475 - * If the message length is already read in
476 - * the first byte of the buffer, account for
477 - * that by setting the offset
478 - */
479 - if (qup_i2c_check_msg_len(msg) && (msg->len > 1))
480 - msg_offset = 1;
481 - total = qup_i2c_get_data_len(qup);
482 - total -= msg_offset;
483 -
484 - /* 2 extra bytes for read tags */
485 - while (pos < (total + 2)) {
486 - /* Check that FIFO have data */
487 - ret = qup_i2c_wait_ready(qup, QUP_IN_NOT_EMPTY,
488 - SET_BIT, 4 * ONE_BYTE);
489 - if (ret) {
490 - dev_err(qup->dev, "timeout for fifo not empty");
491 - return ret;
492 - }
493 - val = readl(qup->base + QUP_IN_FIFO_BASE);
494 -
495 - for (idx = 0; idx < 4; idx++, val >>= 8, pos++) {
496 - /* first 2 bytes are tag bytes */
497 - if (pos < 2)
498 - continue;
499 -
500 - if (pos >= (total + 2))
501 - goto out;
502 - msg->buf[qup->pos + msg_offset] = val & 0xff;
503 - qup->pos++;
504 - }
505 - }
506 -
507 -out:
508 - qup->blk.data_len -= total;
509 -
510 - return ret;
511 -}
512 -
513 -static int qup_i2c_read_one_v2(struct qup_i2c_dev *qup, struct i2c_msg *msg)
514 -{
515 - int ret = 0;
516 -
517 - qup->msg = msg;
518 - qup->pos = 0;
519 - enable_irq(qup->irq);
520 - qup_i2c_set_blk_data(qup, msg);
521 - qup_i2c_set_read_mode_v2(qup, msg->len);
522 -
523 - ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
524 - if (ret)
525 - goto err;
526 -
527 - writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
528 -
529 - do {
530 - ret = qup_i2c_issue_xfer_v2(qup, msg);
531 - if (ret)
532 - goto err;
533 -
534 - ret = qup_i2c_wait_for_complete(qup, msg);
535 - if (ret)
536 - goto err;
537 -
538 - ret = qup_i2c_read_fifo_v2(qup, msg);
539 - if (ret)
540 - goto err;
541 -
542 - qup->blk.pos++;
543 -
544 - /* Handle SMBus block read length */
545 - if (qup_i2c_check_msg_len(msg) && (msg->len == 1)) {
546 - if (msg->buf[0] > I2C_SMBUS_BLOCK_MAX) {
547 - ret = -EPROTO;
548 - goto err;
549 - }
550 - msg->len += msg->buf[0];
551 - qup->pos = 0;
552 - qup_i2c_set_blk_data(qup, msg);
553 - /* set tag length for block read */
554 - qup->blk.tx_tag_len = 2;
555 - qup_i2c_set_read_mode_v2(qup, msg->buf[0]);
556 - }
557 - } while (qup->blk.pos < qup->blk.count);
558 -
559 -err:
560 - disable_irq(qup->irq);
561 - qup->msg = NULL;
562 -
563 - return ret;
564 -}
565 -
566 static void qup_i2c_write_rx_tags_v1(struct qup_i2c_dev *qup)
567 {
568 struct i2c_msg *msg = qup->msg;
569 @@ -1404,13 +1118,434 @@ out:
570 return ret;
571 }
572
573 +/*
574 + * Configure registers related with reconfiguration during run and call it
575 + * before each i2c sub transfer.
576 + */
577 +static void qup_i2c_conf_count_v2(struct qup_i2c_dev *qup)
578 +{
579 + struct qup_i2c_block *blk = &qup->blk;
580 + u32 qup_config = I2C_MINI_CORE | I2C_N_VAL_V2;
581 +
582 + if (blk->is_tx_blk_mode)
583 + writel(qup->config_run | blk->total_tx_len,
584 + qup->base + QUP_MX_OUTPUT_CNT);
585 + else
586 + writel(qup->config_run | blk->total_tx_len,
587 + qup->base + QUP_MX_WRITE_CNT);
588 +
589 + if (blk->total_rx_len) {
590 + if (blk->is_rx_blk_mode)
591 + writel(qup->config_run | blk->total_rx_len,
592 + qup->base + QUP_MX_INPUT_CNT);
593 + else
594 + writel(qup->config_run | blk->total_rx_len,
595 + qup->base + QUP_MX_READ_CNT);
596 + } else {
597 + qup_config |= QUP_NO_INPUT;
598 + }
599 +
600 + writel(qup_config, qup->base + QUP_CONFIG);
601 +}
602 +
603 +/*
604 + * Configure registers related with transfer mode (FIFO/Block)
605 + * before starting of i2c transfer. It will be called only once in
606 + * QUP RESET state.
607 + */
608 +static void qup_i2c_conf_mode_v2(struct qup_i2c_dev *qup)
609 +{
610 + struct qup_i2c_block *blk = &qup->blk;
611 + u32 io_mode = QUP_REPACK_EN;
612 +
613 + if (blk->is_tx_blk_mode) {
614 + io_mode |= QUP_OUTPUT_BLK_MODE;
615 + writel(0, qup->base + QUP_MX_WRITE_CNT);
616 + } else {
617 + writel(0, qup->base + QUP_MX_OUTPUT_CNT);
618 + }
619 +
620 + if (blk->is_rx_blk_mode) {
621 + io_mode |= QUP_INPUT_BLK_MODE;
622 + writel(0, qup->base + QUP_MX_READ_CNT);
623 + } else {
624 + writel(0, qup->base + QUP_MX_INPUT_CNT);
625 + }
626 +
627 + writel(io_mode, qup->base + QUP_IO_MODE);
628 +}
629 +
630 +/* Clear required variables before starting of any QUP v2 sub transfer. */
631 +static void qup_i2c_clear_blk_v2(struct qup_i2c_block *blk)
632 +{
633 + blk->send_last_word = false;
634 + blk->tx_tags_sent = false;
635 + blk->tx_fifo_data = 0;
636 + blk->tx_fifo_data_pos = 0;
637 + blk->tx_fifo_free = 0;
638 +
639 + blk->rx_tags_fetched = false;
640 + blk->rx_bytes_read = false;
641 + blk->rx_fifo_data = 0;
642 + blk->rx_fifo_data_pos = 0;
643 + blk->fifo_available = 0;
644 +}
645 +
646 +/* Receive data from RX FIFO for read message in QUP v2 i2c transfer. */
647 +static void qup_i2c_recv_data(struct qup_i2c_dev *qup)
648 +{
649 + struct qup_i2c_block *blk = &qup->blk;
650 + int j;
651 +
652 + for (j = blk->rx_fifo_data_pos;
653 + blk->cur_blk_len && blk->fifo_available;
654 + blk->cur_blk_len--, blk->fifo_available--) {
655 + if (j == 0)
656 + blk->rx_fifo_data = readl(qup->base + QUP_IN_FIFO_BASE);
657 +
658 + *(blk->cur_data++) = blk->rx_fifo_data;
659 + blk->rx_fifo_data >>= 8;
660 +
661 + if (j == 3)
662 + j = 0;
663 + else
664 + j++;
665 + }
666 +
667 + blk->rx_fifo_data_pos = j;
668 +}
669 +
670 +/* Receive tags for read message in QUP v2 i2c transfer. */
671 +static void qup_i2c_recv_tags(struct qup_i2c_dev *qup)
672 +{
673 + struct qup_i2c_block *blk = &qup->blk;
674 +
675 + blk->rx_fifo_data = readl(qup->base + QUP_IN_FIFO_BASE);
676 + blk->rx_fifo_data >>= blk->rx_tag_len * 8;
677 + blk->rx_fifo_data_pos = blk->rx_tag_len;
678 + blk->fifo_available -= blk->rx_tag_len;
679 +}
680 +
681 +/*
682 + * Read the data and tags from RX FIFO. Since in read case, the tags will be
683 + * preceded by received data bytes so
684 + * 1. Check if rx_tags_fetched is false i.e. the start of QUP block so receive
685 + * all tag bytes and discard that.
686 + * 2. Read the data from RX FIFO. When all the data bytes have been read then
687 + * set rx_bytes_read to true.
688 + */
689 +static void qup_i2c_read_rx_fifo_v2(struct qup_i2c_dev *qup)
690 +{
691 + struct qup_i2c_block *blk = &qup->blk;
692 +
693 + if (!blk->rx_tags_fetched) {
694 + qup_i2c_recv_tags(qup);
695 + blk->rx_tags_fetched = true;
696 + }
697 +
698 + qup_i2c_recv_data(qup);
699 + if (!blk->cur_blk_len)
700 + blk->rx_bytes_read = true;
701 +}
702 +
703 +/*
704 + * Write bytes in TX FIFO for write message in QUP v2 i2c transfer. QUP TX FIFO
705 + * write works on word basis (4 bytes). Append new data byte write for TX FIFO
706 + * in tx_fifo_data and write to TX FIFO when all the 4 bytes are present.
707 + */
708 +static void
709 +qup_i2c_write_blk_data(struct qup_i2c_dev *qup, u8 **data, unsigned int *len)
710 +{
711 + struct qup_i2c_block *blk = &qup->blk;
712 + unsigned int j;
713 +
714 + for (j = blk->tx_fifo_data_pos; *len && blk->tx_fifo_free;
715 + (*len)--, blk->tx_fifo_free--) {
716 + blk->tx_fifo_data |= *(*data)++ << (j * 8);
717 + if (j == 3) {
718 + writel(blk->tx_fifo_data,
719 + qup->base + QUP_OUT_FIFO_BASE);
720 + blk->tx_fifo_data = 0x0;
721 + j = 0;
722 + } else {
723 + j++;
724 + }
725 + }
726 +
727 + blk->tx_fifo_data_pos = j;
728 +}
729 +
730 +/* Transfer tags for read message in QUP v2 i2c transfer. */
731 +static void qup_i2c_write_rx_tags_v2(struct qup_i2c_dev *qup)
732 +{
733 + struct qup_i2c_block *blk = &qup->blk;
734 +
735 + qup_i2c_write_blk_data(qup, &blk->cur_tx_tags, &blk->tx_tag_len);
736 + if (blk->tx_fifo_data_pos)
737 + writel(blk->tx_fifo_data, qup->base + QUP_OUT_FIFO_BASE);
738 +}
739 +
740 +/*
741 + * Write the data and tags in TX FIFO. Since in write case, both tags and data
742 + * need to be written and QUP write tags can have maximum 256 data length, so
743 + *
744 + * 1. Check if tx_tags_sent is false i.e. the start of QUP block so write the
745 + * tags to TX FIFO and set tx_tags_sent to true.
746 + * 2. Check if send_last_word is true. It will be set when last few data bytes
747 + * (less than 4 bytes) are reamining to be written in FIFO because of no FIFO
748 + * space. All this data bytes are available in tx_fifo_data so write this
749 + * in FIFO.
750 + * 3. Write the data to TX FIFO and check for cur_blk_len. If it is non zero
751 + * then more data is pending otherwise following 3 cases can be possible
752 + * a. if tx_fifo_data_pos is zero i.e. all the data bytes in this block
753 + * have been written in TX FIFO so nothing else is required.
754 + * b. tx_fifo_free is non zero i.e tx FIFO is free so copy the remaining data
755 + * from tx_fifo_data to tx FIFO. Since, qup_i2c_write_blk_data do write
756 + * in 4 bytes and FIFO space is in multiple of 4 bytes so tx_fifo_free
757 + * will be always greater than or equal to 4 bytes.
758 + * c. tx_fifo_free is zero. In this case, last few bytes (less than 4
759 + * bytes) are copied to tx_fifo_data but couldn't be sent because of
760 + * FIFO full so make send_last_word true.
761 + */
762 +static void qup_i2c_write_tx_fifo_v2(struct qup_i2c_dev *qup)
763 +{
764 + struct qup_i2c_block *blk = &qup->blk;
765 +
766 + if (!blk->tx_tags_sent) {
767 + qup_i2c_write_blk_data(qup, &blk->cur_tx_tags,
768 + &blk->tx_tag_len);
769 + blk->tx_tags_sent = true;
770 + }
771 +
772 + if (blk->send_last_word)
773 + goto send_last_word;
774 +
775 + qup_i2c_write_blk_data(qup, &blk->cur_data, &blk->cur_blk_len);
776 + if (!blk->cur_blk_len) {
777 + if (!blk->tx_fifo_data_pos)
778 + return;
779 +
780 + if (blk->tx_fifo_free)
781 + goto send_last_word;
782 +
783 + blk->send_last_word = true;
784 + }
785 +
786 + return;
787 +
788 +send_last_word:
789 + writel(blk->tx_fifo_data, qup->base + QUP_OUT_FIFO_BASE);
790 +}
791 +
792 +/*
793 + * Main transfer function which read or write i2c data.
794 + * The QUP v2 supports reconfiguration during run in which multiple i2c sub
795 + * transfers can be scheduled.
796 + */
797 +static int
798 +qup_i2c_conf_xfer_v2(struct qup_i2c_dev *qup, bool is_rx, bool is_first,
799 + bool change_pause_state)
800 +{
801 + struct qup_i2c_block *blk = &qup->blk;
802 + struct i2c_msg *msg = qup->msg;
803 + int ret;
804 +
805 + /*
806 + * Check if its SMBus Block read for which the top level read will be
807 + * done into 2 QUP reads. One with message length 1 while other one is
808 + * with actual length.
809 + */
810 + if (qup_i2c_check_msg_len(msg)) {
811 + if (qup->is_smbus_read) {
812 + /*
813 + * If the message length is already read in
814 + * the first byte of the buffer, account for
815 + * that by setting the offset
816 + */
817 + blk->cur_data += 1;
818 + is_first = false;
819 + } else {
820 + change_pause_state = false;
821 + }
822 + }
823 +
824 + qup->config_run = is_first ? 0 : QUP_I2C_MX_CONFIG_DURING_RUN;
825 +
826 + qup_i2c_clear_blk_v2(blk);
827 + qup_i2c_conf_count_v2(qup);
828 +
829 + /* If it is first sub transfer, then configure i2c bus clocks */
830 + if (is_first) {
831 + ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
832 + if (ret)
833 + return ret;
834 +
835 + writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
836 +
837 + ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
838 + if (ret)
839 + return ret;
840 + }
841 +
842 + reinit_completion(&qup->xfer);
843 + enable_irq(qup->irq);
844 + /*
845 + * In FIFO mode, tx FIFO can be written directly while in block mode the
846 + * it will be written after getting OUT_BLOCK_WRITE_REQ interrupt
847 + */
848 + if (!blk->is_tx_blk_mode) {
849 + blk->tx_fifo_free = qup->out_fifo_sz;
850 +
851 + if (is_rx)
852 + qup_i2c_write_rx_tags_v2(qup);
853 + else
854 + qup_i2c_write_tx_fifo_v2(qup);
855 + }
856 +
857 + ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
858 + if (ret)
859 + goto err;
860 +
861 + ret = qup_i2c_wait_for_complete(qup, msg);
862 + if (ret)
863 + goto err;
864 +
865 + /* Move to pause state for all the transfers, except last one */
866 + if (change_pause_state) {
867 + ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
868 + if (ret)
869 + goto err;
870 + }
871 +
872 +err:
873 + disable_irq(qup->irq);
874 + return ret;
875 +}
876 +
877 +/*
878 + * Transfer one read/write message in i2c transfer. It splits the message into
879 + * multiple of blk_xfer_limit data length blocks and schedule each
880 + * QUP block individually.
881 + */
882 +static int qup_i2c_xfer_v2_msg(struct qup_i2c_dev *qup, int msg_id, bool is_rx)
883 +{
884 + int ret = 0;
885 + unsigned int data_len, i;
886 + struct i2c_msg *msg = qup->msg;
887 + struct qup_i2c_block *blk = &qup->blk;
888 + u8 *msg_buf = msg->buf;
889 +
890 + qup->blk_xfer_limit = is_rx ? RECV_MAX_DATA_LEN : QUP_READ_LIMIT;
891 + qup_i2c_set_blk_data(qup, msg);
892 +
893 + for (i = 0; i < blk->count; i++) {
894 + data_len = qup_i2c_get_data_len(qup);
895 + blk->pos = i;
896 + blk->cur_tx_tags = blk->tags;
897 + blk->cur_blk_len = data_len;
898 + blk->tx_tag_len =
899 + qup_i2c_set_tags(blk->cur_tx_tags, qup, qup->msg);
900 +
901 + blk->cur_data = msg_buf;
902 +
903 + if (is_rx) {
904 + blk->total_tx_len = blk->tx_tag_len;
905 + blk->rx_tag_len = 2;
906 + blk->total_rx_len = blk->rx_tag_len + data_len;
907 + } else {
908 + blk->total_tx_len = blk->tx_tag_len + data_len;
909 + blk->total_rx_len = 0;
910 + }
911 +
912 + ret = qup_i2c_conf_xfer_v2(qup, is_rx, !msg_id && !i,
913 + !qup->is_last || i < blk->count - 1);
914 + if (ret)
915 + return ret;
916 +
917 + /* Handle SMBus block read length */
918 + if (qup_i2c_check_msg_len(msg) && msg->len == 1 &&
919 + !qup->is_smbus_read) {
920 + if (msg->buf[0] > I2C_SMBUS_BLOCK_MAX)
921 + return -EPROTO;
922 +
923 + msg->len = msg->buf[0];
924 + qup->is_smbus_read = true;
925 + ret = qup_i2c_xfer_v2_msg(qup, msg_id, true);
926 + qup->is_smbus_read = false;
927 + if (ret)
928 + return ret;
929 +
930 + msg->len += 1;
931 + }
932 +
933 + msg_buf += data_len;
934 + blk->data_len -= qup->blk_xfer_limit;
935 + }
936 +
937 + return ret;
938 +}
939 +
940 +/*
941 + * QUP v2 supports 3 modes
942 + * Programmed IO using FIFO mode : Less than FIFO size
943 + * Programmed IO using Block mode : Greater than FIFO size
944 + * DMA using BAM : Appropriate for any transaction size but the address should
945 + * be DMA applicable
946 + *
947 + * This function determines the mode which will be used for this transfer. An
948 + * i2c transfer contains multiple message. Following are the rules to determine
949 + * the mode used.
950 + * 1. Determine complete length, maximum tx and rx length for complete transfer.
951 + * 2. If complete transfer length is greater than fifo size then use the DMA
952 + * mode.
953 + * 3. In FIFO or block mode, tx and rx can operate in different mode so check
954 + * for maximum tx and rx length to determine mode.
955 + */
956 +static int
957 +qup_i2c_determine_mode_v2(struct qup_i2c_dev *qup,
958 + struct i2c_msg msgs[], int num)
959 +{
960 + int idx;
961 + bool no_dma = false;
962 + unsigned int max_tx_len = 0, max_rx_len = 0, total_len = 0;
963 +
964 + /* All i2c_msgs should be transferred using either dma or cpu */
965 + for (idx = 0; idx < num; idx++) {
966 + if (msgs[idx].len == 0)
967 + return -EINVAL;
968 +
969 + if (msgs[idx].flags & I2C_M_RD)
970 + max_rx_len = max_t(unsigned int, max_rx_len,
971 + msgs[idx].len);
972 + else
973 + max_tx_len = max_t(unsigned int, max_tx_len,
974 + msgs[idx].len);
975 +
976 + if (is_vmalloc_addr(msgs[idx].buf))
977 + no_dma = true;
978 +
979 + total_len += msgs[idx].len;
980 + }
981 +
982 + if (!no_dma && qup->is_dma &&
983 + (total_len > qup->out_fifo_sz || total_len > qup->in_fifo_sz)) {
984 + qup->use_dma = true;
985 + } else {
986 + qup->blk.is_tx_blk_mode = max_tx_len > qup->out_fifo_sz -
987 + QUP_MAX_TAGS_LEN ? true : false;
988 + qup->blk.is_rx_blk_mode = max_rx_len > qup->in_fifo_sz -
989 + READ_RX_TAGS_LEN ? true : false;
990 + }
991 +
992 + return 0;
993 +}
994 +
995 static int qup_i2c_xfer_v2(struct i2c_adapter *adap,
996 struct i2c_msg msgs[],
997 int num)
998 {
999 struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
1000 int ret, idx = 0;
1001 - unsigned int total_len = 0;
1002
1003 qup->bus_err = 0;
1004 qup->qup_err = 0;
1005 @@ -1419,6 +1554,10 @@ static int qup_i2c_xfer_v2(struct i2c_ad
1006 if (ret < 0)
1007 goto out;
1008
1009 + ret = qup_i2c_determine_mode_v2(qup, msgs, num);
1010 + if (ret)
1011 + goto out;
1012 +
1013 writel(1, qup->base + QUP_SW_RESET);
1014 ret = qup_i2c_poll_state(qup, QUP_RESET_STATE);
1015 if (ret)
1016 @@ -1428,60 +1567,35 @@ static int qup_i2c_xfer_v2(struct i2c_ad
1017 writel(I2C_MINI_CORE | I2C_N_VAL_V2, qup->base + QUP_CONFIG);
1018 writel(QUP_V2_TAGS_EN, qup->base + QUP_I2C_MASTER_GEN);
1019
1020 - if ((qup->is_dma)) {
1021 - /* All i2c_msgs should be transferred using either dma or cpu */
1022 - for (idx = 0; idx < num; idx++) {
1023 - if (msgs[idx].len == 0) {
1024 - ret = -EINVAL;
1025 - goto out;
1026 - }
1027 -
1028 - if (is_vmalloc_addr(msgs[idx].buf))
1029 - break;
1030 -
1031 - total_len += msgs[idx].len;
1032 - }
1033 -
1034 - if (idx == num && (total_len > qup->out_fifo_sz ||
1035 - total_len > qup->in_fifo_sz))
1036 - qup->use_dma = true;
1037 + if (qup_i2c_poll_state_i2c_master(qup)) {
1038 + ret = -EIO;
1039 + goto out;
1040 }
1041
1042 - idx = 0;
1043 + if (qup->use_dma) {
1044 + reinit_completion(&qup->xfer);
1045 + ret = qup_i2c_bam_xfer(adap, &msgs[0], num);
1046 + qup->use_dma = false;
1047 + } else {
1048 + qup_i2c_conf_mode_v2(qup);
1049
1050 - do {
1051 - if (msgs[idx].len == 0) {
1052 - ret = -EINVAL;
1053 - goto out;
1054 - }
1055 + for (idx = 0; idx < num; idx++) {
1056 + qup->msg = &msgs[idx];
1057 + qup->is_last = idx == (num - 1);
1058
1059 - if (qup_i2c_poll_state_i2c_master(qup)) {
1060 - ret = -EIO;
1061 - goto out;
1062 + ret = qup_i2c_xfer_v2_msg(qup, idx,
1063 + !!(msgs[idx].flags & I2C_M_RD));
1064 + if (ret)
1065 + break;
1066 }
1067 + qup->msg = NULL;
1068 + }
1069
1070 - qup->is_last = (idx == (num - 1));
1071 - if (idx)
1072 - qup->config_run = QUP_I2C_MX_CONFIG_DURING_RUN;
1073 - else
1074 - qup->config_run = 0;
1075 -
1076 - reinit_completion(&qup->xfer);
1077 -
1078 - if (qup->use_dma) {
1079 - ret = qup_i2c_bam_xfer(adap, &msgs[idx], num);
1080 - qup->use_dma = false;
1081 - break;
1082 - } else {
1083 - if (msgs[idx].flags & I2C_M_RD)
1084 - ret = qup_i2c_read_one_v2(qup, &msgs[idx]);
1085 - else
1086 - ret = qup_i2c_write_one_v2(qup, &msgs[idx]);
1087 - }
1088 - } while ((idx++ < (num - 1)) && !ret);
1089 + if (!ret)
1090 + ret = qup_i2c_bus_active(qup, ONE_BYTE);
1091
1092 if (!ret)
1093 - ret = qup_i2c_change_state(qup, QUP_RESET_STATE);
1094 + qup_i2c_change_state(qup, QUP_RESET_STATE);
1095
1096 if (ret == 0)
1097 ret = num;
1098 @@ -1545,6 +1659,7 @@ static int qup_i2c_probe(struct platform
1099 u32 src_clk_freq = DEFAULT_SRC_CLK;
1100 u32 clk_freq = DEFAULT_CLK_FREQ;
1101 int blocks;
1102 + bool is_qup_v1;
1103
1104 qup = devm_kzalloc(&pdev->dev, sizeof(*qup), GFP_KERNEL);
1105 if (!qup)
1106 @@ -1563,12 +1678,10 @@ static int qup_i2c_probe(struct platform
1107 if (of_device_is_compatible(pdev->dev.of_node, "qcom,i2c-qup-v1.1.1")) {
1108 qup->adap.algo = &qup_i2c_algo;
1109 qup->adap.quirks = &qup_i2c_quirks;
1110 - qup->is_qup_v1 = true;
1111 - qup->write_tx_fifo = qup_i2c_write_tx_fifo_v1;
1112 - qup->read_rx_fifo = qup_i2c_read_rx_fifo_v1;
1113 - qup->write_rx_tags = qup_i2c_write_rx_tags_v1;
1114 + is_qup_v1 = true;
1115 } else {
1116 qup->adap.algo = &qup_i2c_algo_v2;
1117 + is_qup_v1 = false;
1118 ret = qup_i2c_req_dma(qup);
1119
1120 if (ret == -EPROBE_DEFER)
1121 @@ -1694,14 +1807,31 @@ nodma:
1122 ret = -EIO;
1123 goto fail;
1124 }
1125 - qup->out_blk_sz = blk_sizes[size] / 2;
1126 + qup->out_blk_sz = blk_sizes[size];
1127
1128 size = QUP_INPUT_BLOCK_SIZE(io_mode);
1129 if (size >= ARRAY_SIZE(blk_sizes)) {
1130 ret = -EIO;
1131 goto fail;
1132 }
1133 - qup->in_blk_sz = blk_sizes[size] / 2;
1134 + qup->in_blk_sz = blk_sizes[size];
1135 +
1136 + if (is_qup_v1) {
1137 + /*
1138 + * in QUP v1, QUP_CONFIG uses N as 15 i.e 16 bits constitutes a
1139 + * single transfer but the block size is in bytes so divide the
1140 + * in_blk_sz and out_blk_sz by 2
1141 + */
1142 + qup->in_blk_sz /= 2;
1143 + qup->out_blk_sz /= 2;
1144 + qup->write_tx_fifo = qup_i2c_write_tx_fifo_v1;
1145 + qup->read_rx_fifo = qup_i2c_read_rx_fifo_v1;
1146 + qup->write_rx_tags = qup_i2c_write_rx_tags_v1;
1147 + } else {
1148 + qup->write_tx_fifo = qup_i2c_write_tx_fifo_v2;
1149 + qup->read_rx_fifo = qup_i2c_read_rx_fifo_v2;
1150 + qup->write_rx_tags = qup_i2c_write_rx_tags_v2;
1151 + }
1152
1153 size = QUP_OUTPUT_FIFO_SIZE(io_mode);
1154 qup->out_fifo_sz = qup->out_blk_sz * (2 << size);