0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/acpi.h>
0009 #include <linux/atomic.h>
0010 #include <linux/clk.h>
0011 #include <linux/delay.h>
0012 #include <linux/dmaengine.h>
0013 #include <linux/dmapool.h>
0014 #include <linux/dma-mapping.h>
0015 #include <linux/err.h>
0016 #include <linux/i2c.h>
0017 #include <linux/interrupt.h>
0018 #include <linux/io.h>
0019 #include <linux/module.h>
0020 #include <linux/of.h>
0021 #include <linux/platform_device.h>
0022 #include <linux/pm_runtime.h>
0023 #include <linux/scatterlist.h>
0024
0025
0026 #define QUP_CONFIG 0x000
0027 #define QUP_STATE 0x004
0028 #define QUP_IO_MODE 0x008
0029 #define QUP_SW_RESET 0x00c
0030 #define QUP_OPERATIONAL 0x018
0031 #define QUP_ERROR_FLAGS 0x01c
0032 #define QUP_ERROR_FLAGS_EN 0x020
0033 #define QUP_OPERATIONAL_MASK 0x028
0034 #define QUP_HW_VERSION 0x030
0035 #define QUP_MX_OUTPUT_CNT 0x100
0036 #define QUP_OUT_FIFO_BASE 0x110
0037 #define QUP_MX_WRITE_CNT 0x150
0038 #define QUP_MX_INPUT_CNT 0x200
0039 #define QUP_MX_READ_CNT 0x208
0040 #define QUP_IN_FIFO_BASE 0x218
0041 #define QUP_I2C_CLK_CTL 0x400
0042 #define QUP_I2C_STATUS 0x404
0043 #define QUP_I2C_MASTER_GEN 0x408
0044
0045
0046 #define QUP_RESET_STATE 0
0047 #define QUP_RUN_STATE 1
0048 #define QUP_PAUSE_STATE 3
0049 #define QUP_STATE_MASK 3
0050
0051 #define QUP_STATE_VALID BIT(2)
0052 #define QUP_I2C_MAST_GEN BIT(4)
0053 #define QUP_I2C_FLUSH BIT(6)
0054
0055 #define QUP_OPERATIONAL_RESET 0x000ff0
0056 #define QUP_I2C_STATUS_RESET 0xfffffc
0057
0058
0059 #define QUP_I2C_NACK_FLAG BIT(3)
0060 #define QUP_OUT_NOT_EMPTY BIT(4)
0061 #define QUP_IN_NOT_EMPTY BIT(5)
0062 #define QUP_OUT_FULL BIT(6)
0063 #define QUP_OUT_SVC_FLAG BIT(8)
0064 #define QUP_IN_SVC_FLAG BIT(9)
0065 #define QUP_MX_OUTPUT_DONE BIT(10)
0066 #define QUP_MX_INPUT_DONE BIT(11)
0067 #define OUT_BLOCK_WRITE_REQ BIT(12)
0068 #define IN_BLOCK_READ_REQ BIT(13)
0069
0070
0071 #define QUP_NO_INPUT BIT(7)
0072 #define QUP_CLOCK_AUTO_GATE BIT(13)
0073 #define I2C_MINI_CORE (2 << 8)
0074 #define I2C_N_VAL 15
0075 #define I2C_N_VAL_V2 7
0076
0077
0078 #define QUP_MSW_SHIFT (I2C_N_VAL + 1)
0079
0080
0081 #define QUP_OUTPUT_BLK_MODE (1 << 10)
0082 #define QUP_OUTPUT_BAM_MODE (3 << 10)
0083 #define QUP_INPUT_BLK_MODE (1 << 12)
0084 #define QUP_INPUT_BAM_MODE (3 << 12)
0085 #define QUP_BAM_MODE (QUP_OUTPUT_BAM_MODE | QUP_INPUT_BAM_MODE)
0086 #define QUP_UNPACK_EN BIT(14)
0087 #define QUP_PACK_EN BIT(15)
0088
0089 #define QUP_REPACK_EN (QUP_UNPACK_EN | QUP_PACK_EN)
0090 #define QUP_V2_TAGS_EN 1
0091
0092 #define QUP_OUTPUT_BLOCK_SIZE(x)(((x) >> 0) & 0x03)
0093 #define QUP_OUTPUT_FIFO_SIZE(x) (((x) >> 2) & 0x07)
0094 #define QUP_INPUT_BLOCK_SIZE(x) (((x) >> 5) & 0x03)
0095 #define QUP_INPUT_FIFO_SIZE(x) (((x) >> 7) & 0x07)
0096
0097
0098 #define QUP_TAG_START (1 << 8)
0099 #define QUP_TAG_DATA (2 << 8)
0100 #define QUP_TAG_STOP (3 << 8)
0101 #define QUP_TAG_REC (4 << 8)
0102 #define QUP_BAM_INPUT_EOT 0x93
0103 #define QUP_BAM_FLUSH_STOP 0x96
0104
0105
0106 #define QUP_TAG_V2_START 0x81
0107 #define QUP_TAG_V2_DATAWR 0x82
0108 #define QUP_TAG_V2_DATAWR_STOP 0x83
0109 #define QUP_TAG_V2_DATARD 0x85
0110 #define QUP_TAG_V2_DATARD_NACK 0x86
0111 #define QUP_TAG_V2_DATARD_STOP 0x87
0112
0113
0114 #define I2C_STATUS_WR_BUFFER_FULL BIT(0)
0115 #define I2C_STATUS_BUS_ACTIVE BIT(8)
0116 #define I2C_STATUS_ERROR_MASK 0x38000fc
0117 #define QUP_STATUS_ERROR_FLAGS 0x7c
0118
0119 #define QUP_READ_LIMIT 256
0120 #define SET_BIT 0x1
0121 #define RESET_BIT 0x0
0122 #define ONE_BYTE 0x1
0123 #define QUP_I2C_MX_CONFIG_DURING_RUN BIT(31)
0124
0125
0126 #define MX_TX_RX_LEN SZ_64K
0127 #define MX_BLOCKS (MX_TX_RX_LEN / QUP_READ_LIMIT)
0128
0129 #define MX_DMA_TX_RX_LEN (2 * MX_TX_RX_LEN)
0130 #define MX_DMA_BLOCKS (MX_DMA_TX_RX_LEN / QUP_READ_LIMIT)
0131
0132
0133
0134
0135
0136
0137 #define TOUT_MIN 2
0138
0139
0140 #define DEFAULT_CLK_FREQ I2C_MAX_STANDARD_MODE_FREQ
0141 #define DEFAULT_SRC_CLK 20000000
0142
0143
0144
0145
0146
0147 #define QUP_MAX_TAGS_LEN 4
0148
0149 #define RECV_MAX_DATA_LEN 254
0150
0151 #define READ_RX_TAGS_LEN 2
0152
0153 static unsigned int scl_freq;
0154 module_param_named(scl_freq, scl_freq, uint, 0444);
0155 MODULE_PARM_DESC(scl_freq, "SCL frequency override");
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186 struct qup_i2c_block {
0187 int count;
0188 int pos;
0189 int tx_tag_len;
0190 int rx_tag_len;
0191 int data_len;
0192 int cur_blk_len;
0193 int total_tx_len;
0194 int total_rx_len;
0195 int tx_fifo_data_pos;
0196 int tx_fifo_free;
0197 int rx_fifo_data_pos;
0198 int fifo_available;
0199 u32 tx_fifo_data;
0200 u32 rx_fifo_data;
0201 u8 *cur_data;
0202 u8 *cur_tx_tags;
0203 bool tx_tags_sent;
0204 bool send_last_word;
0205 bool rx_tags_fetched;
0206 bool rx_bytes_read;
0207 bool is_tx_blk_mode;
0208 bool is_rx_blk_mode;
0209 u8 tags[6];
0210 };
0211
0212 struct qup_i2c_tag {
0213 u8 *start;
0214 dma_addr_t addr;
0215 };
0216
0217 struct qup_i2c_bam {
0218 struct qup_i2c_tag tag;
0219 struct dma_chan *dma;
0220 struct scatterlist *sg;
0221 unsigned int sg_cnt;
0222 };
0223
0224 struct qup_i2c_dev {
0225 struct device *dev;
0226 void __iomem *base;
0227 int irq;
0228 struct clk *clk;
0229 struct clk *pclk;
0230 struct i2c_adapter adap;
0231
0232 int clk_ctl;
0233 int out_fifo_sz;
0234 int in_fifo_sz;
0235 int out_blk_sz;
0236 int in_blk_sz;
0237
0238 int blk_xfer_limit;
0239 unsigned long one_byte_t;
0240 unsigned long xfer_timeout;
0241 struct qup_i2c_block blk;
0242
0243 struct i2c_msg *msg;
0244
0245 int pos;
0246
0247 u32 bus_err;
0248
0249 u32 qup_err;
0250
0251
0252 bool is_last;
0253 bool is_smbus_read;
0254
0255
0256 u32 config_run;
0257
0258
0259 bool is_dma;
0260
0261 bool use_dma;
0262 unsigned int max_xfer_sg_len;
0263 unsigned int tag_buf_pos;
0264
0265 unsigned int blk_mode_threshold;
0266 struct dma_pool *dpool;
0267 struct qup_i2c_tag start_tag;
0268 struct qup_i2c_bam brx;
0269 struct qup_i2c_bam btx;
0270
0271 struct completion xfer;
0272
0273 void (*write_tx_fifo)(struct qup_i2c_dev *qup);
0274
0275 void (*read_rx_fifo)(struct qup_i2c_dev *qup);
0276
0277 void (*write_rx_tags)(struct qup_i2c_dev *qup);
0278 };
0279
0280 static irqreturn_t qup_i2c_interrupt(int irq, void *dev)
0281 {
0282 struct qup_i2c_dev *qup = dev;
0283 struct qup_i2c_block *blk = &qup->blk;
0284 u32 bus_err;
0285 u32 qup_err;
0286 u32 opflags;
0287
0288 bus_err = readl(qup->base + QUP_I2C_STATUS);
0289 qup_err = readl(qup->base + QUP_ERROR_FLAGS);
0290 opflags = readl(qup->base + QUP_OPERATIONAL);
0291
0292 if (!qup->msg) {
0293
0294 writel(QUP_RESET_STATE, qup->base + QUP_STATE);
0295 return IRQ_HANDLED;
0296 }
0297
0298 bus_err &= I2C_STATUS_ERROR_MASK;
0299 qup_err &= QUP_STATUS_ERROR_FLAGS;
0300
0301
0302 if (qup_err)
0303 writel(qup_err, qup->base + QUP_ERROR_FLAGS);
0304
0305
0306 if (bus_err)
0307 writel(bus_err, qup->base + QUP_I2C_STATUS);
0308
0309
0310
0311
0312
0313
0314 if (qup->use_dma && (qup->qup_err || qup->bus_err))
0315 return IRQ_HANDLED;
0316
0317
0318 if (qup_err || bus_err) {
0319
0320
0321
0322
0323
0324
0325 if (!qup->use_dma)
0326 writel(QUP_RESET_STATE, qup->base + QUP_STATE);
0327 goto done;
0328 }
0329
0330 if (opflags & QUP_OUT_SVC_FLAG) {
0331 writel(QUP_OUT_SVC_FLAG, qup->base + QUP_OPERATIONAL);
0332
0333 if (opflags & OUT_BLOCK_WRITE_REQ) {
0334 blk->tx_fifo_free += qup->out_blk_sz;
0335 if (qup->msg->flags & I2C_M_RD)
0336 qup->write_rx_tags(qup);
0337 else
0338 qup->write_tx_fifo(qup);
0339 }
0340 }
0341
0342 if (opflags & QUP_IN_SVC_FLAG) {
0343 writel(QUP_IN_SVC_FLAG, qup->base + QUP_OPERATIONAL);
0344
0345 if (!blk->is_rx_blk_mode) {
0346 blk->fifo_available += qup->in_fifo_sz;
0347 qup->read_rx_fifo(qup);
0348 } else if (opflags & IN_BLOCK_READ_REQ) {
0349 blk->fifo_available += qup->in_blk_sz;
0350 qup->read_rx_fifo(qup);
0351 }
0352 }
0353
0354 if (qup->msg->flags & I2C_M_RD) {
0355 if (!blk->rx_bytes_read)
0356 return IRQ_HANDLED;
0357 } else {
0358
0359
0360
0361
0362
0363
0364
0365 if (blk->is_tx_blk_mode && !(opflags & QUP_MX_OUTPUT_DONE))
0366 return IRQ_HANDLED;
0367 }
0368
0369 done:
0370 qup->qup_err = qup_err;
0371 qup->bus_err = bus_err;
0372 complete(&qup->xfer);
0373 return IRQ_HANDLED;
0374 }
0375
0376 static int qup_i2c_poll_state_mask(struct qup_i2c_dev *qup,
0377 u32 req_state, u32 req_mask)
0378 {
0379 int retries = 1;
0380 u32 state;
0381
0382
0383
0384
0385
0386 do {
0387 state = readl(qup->base + QUP_STATE);
0388
0389 if (state & QUP_STATE_VALID &&
0390 (state & req_mask) == req_state)
0391 return 0;
0392
0393 udelay(1);
0394 } while (retries--);
0395
0396 return -ETIMEDOUT;
0397 }
0398
0399 static int qup_i2c_poll_state(struct qup_i2c_dev *qup, u32 req_state)
0400 {
0401 return qup_i2c_poll_state_mask(qup, req_state, QUP_STATE_MASK);
0402 }
0403
0404 static void qup_i2c_flush(struct qup_i2c_dev *qup)
0405 {
0406 u32 val = readl(qup->base + QUP_STATE);
0407
0408 val |= QUP_I2C_FLUSH;
0409 writel(val, qup->base + QUP_STATE);
0410 }
0411
0412 static int qup_i2c_poll_state_valid(struct qup_i2c_dev *qup)
0413 {
0414 return qup_i2c_poll_state_mask(qup, 0, 0);
0415 }
0416
0417 static int qup_i2c_poll_state_i2c_master(struct qup_i2c_dev *qup)
0418 {
0419 return qup_i2c_poll_state_mask(qup, QUP_I2C_MAST_GEN, QUP_I2C_MAST_GEN);
0420 }
0421
0422 static int qup_i2c_change_state(struct qup_i2c_dev *qup, u32 state)
0423 {
0424 if (qup_i2c_poll_state_valid(qup) != 0)
0425 return -EIO;
0426
0427 writel(state, qup->base + QUP_STATE);
0428
0429 if (qup_i2c_poll_state(qup, state) != 0)
0430 return -EIO;
0431 return 0;
0432 }
0433
0434
0435 static int qup_i2c_bus_active(struct qup_i2c_dev *qup, int len)
0436 {
0437 unsigned long timeout;
0438 u32 status;
0439 int ret = 0;
0440
0441 timeout = jiffies + len * 4;
0442 for (;;) {
0443 status = readl(qup->base + QUP_I2C_STATUS);
0444 if (!(status & I2C_STATUS_BUS_ACTIVE))
0445 break;
0446
0447 if (time_after(jiffies, timeout))
0448 ret = -ETIMEDOUT;
0449
0450 usleep_range(len, len * 2);
0451 }
0452
0453 return ret;
0454 }
0455
0456 static void qup_i2c_write_tx_fifo_v1(struct qup_i2c_dev *qup)
0457 {
0458 struct qup_i2c_block *blk = &qup->blk;
0459 struct i2c_msg *msg = qup->msg;
0460 u32 addr = i2c_8bit_addr_from_msg(msg);
0461 u32 qup_tag;
0462 int idx;
0463 u32 val;
0464
0465 if (qup->pos == 0) {
0466 val = QUP_TAG_START | addr;
0467 idx = 1;
0468 blk->tx_fifo_free--;
0469 } else {
0470 val = 0;
0471 idx = 0;
0472 }
0473
0474 while (blk->tx_fifo_free && qup->pos < msg->len) {
0475 if (qup->pos == msg->len - 1)
0476 qup_tag = QUP_TAG_STOP;
0477 else
0478 qup_tag = QUP_TAG_DATA;
0479
0480 if (idx & 1)
0481 val |= (qup_tag | msg->buf[qup->pos]) << QUP_MSW_SHIFT;
0482 else
0483 val = qup_tag | msg->buf[qup->pos];
0484
0485
0486 if (idx & 1 || qup->pos == msg->len - 1)
0487 writel(val, qup->base + QUP_OUT_FIFO_BASE);
0488
0489 qup->pos++;
0490 idx++;
0491 blk->tx_fifo_free--;
0492 }
0493 }
0494
0495 static void qup_i2c_set_blk_data(struct qup_i2c_dev *qup,
0496 struct i2c_msg *msg)
0497 {
0498 qup->blk.pos = 0;
0499 qup->blk.data_len = msg->len;
0500 qup->blk.count = DIV_ROUND_UP(msg->len, qup->blk_xfer_limit);
0501 }
0502
0503 static int qup_i2c_get_data_len(struct qup_i2c_dev *qup)
0504 {
0505 int data_len;
0506
0507 if (qup->blk.data_len > qup->blk_xfer_limit)
0508 data_len = qup->blk_xfer_limit;
0509 else
0510 data_len = qup->blk.data_len;
0511
0512 return data_len;
0513 }
0514
0515 static bool qup_i2c_check_msg_len(struct i2c_msg *msg)
0516 {
0517 return ((msg->flags & I2C_M_RD) && (msg->flags & I2C_M_RECV_LEN));
0518 }
0519
0520 static int qup_i2c_set_tags_smb(u16 addr, u8 *tags, struct qup_i2c_dev *qup,
0521 struct i2c_msg *msg)
0522 {
0523 int len = 0;
0524
0525 if (qup->is_smbus_read) {
0526 tags[len++] = QUP_TAG_V2_DATARD_STOP;
0527 tags[len++] = qup_i2c_get_data_len(qup);
0528 } else {
0529 tags[len++] = QUP_TAG_V2_START;
0530 tags[len++] = addr & 0xff;
0531
0532 if (msg->flags & I2C_M_TEN)
0533 tags[len++] = addr >> 8;
0534
0535 tags[len++] = QUP_TAG_V2_DATARD;
0536
0537 tags[len++] = 1;
0538 }
0539 return len;
0540 }
0541
0542 static int qup_i2c_set_tags(u8 *tags, struct qup_i2c_dev *qup,
0543 struct i2c_msg *msg)
0544 {
0545 u16 addr = i2c_8bit_addr_from_msg(msg);
0546 int len = 0;
0547 int data_len;
0548
0549 int last = (qup->blk.pos == (qup->blk.count - 1)) && (qup->is_last);
0550
0551
0552 if (qup_i2c_check_msg_len(msg))
0553 return qup_i2c_set_tags_smb(addr, tags, qup, msg);
0554
0555 if (qup->blk.pos == 0) {
0556 tags[len++] = QUP_TAG_V2_START;
0557 tags[len++] = addr & 0xff;
0558
0559 if (msg->flags & I2C_M_TEN)
0560 tags[len++] = addr >> 8;
0561 }
0562
0563
0564 if (last) {
0565 if (msg->flags & I2C_M_RD)
0566 tags[len++] = QUP_TAG_V2_DATARD_STOP;
0567 else
0568 tags[len++] = QUP_TAG_V2_DATAWR_STOP;
0569 } else {
0570 if (msg->flags & I2C_M_RD)
0571 tags[len++] = qup->blk.pos == (qup->blk.count - 1) ?
0572 QUP_TAG_V2_DATARD_NACK :
0573 QUP_TAG_V2_DATARD;
0574 else
0575 tags[len++] = QUP_TAG_V2_DATAWR;
0576 }
0577
0578 data_len = qup_i2c_get_data_len(qup);
0579
0580
0581 if (data_len == QUP_READ_LIMIT)
0582 tags[len++] = 0;
0583 else
0584 tags[len++] = data_len;
0585
0586 return len;
0587 }
0588
0589
0590 static void qup_i2c_bam_cb(void *data)
0591 {
0592 struct qup_i2c_dev *qup = data;
0593
0594 complete(&qup->xfer);
0595 }
0596
0597 static int qup_sg_set_buf(struct scatterlist *sg, void *buf,
0598 unsigned int buflen, struct qup_i2c_dev *qup,
0599 int dir)
0600 {
0601 int ret;
0602
0603 sg_set_buf(sg, buf, buflen);
0604 ret = dma_map_sg(qup->dev, sg, 1, dir);
0605 if (!ret)
0606 return -EINVAL;
0607
0608 return 0;
0609 }
0610
0611 static void qup_i2c_rel_dma(struct qup_i2c_dev *qup)
0612 {
0613 if (qup->btx.dma)
0614 dma_release_channel(qup->btx.dma);
0615 if (qup->brx.dma)
0616 dma_release_channel(qup->brx.dma);
0617 qup->btx.dma = NULL;
0618 qup->brx.dma = NULL;
0619 }
0620
0621 static int qup_i2c_req_dma(struct qup_i2c_dev *qup)
0622 {
0623 int err;
0624
0625 if (!qup->btx.dma) {
0626 qup->btx.dma = dma_request_chan(qup->dev, "tx");
0627 if (IS_ERR(qup->btx.dma)) {
0628 err = PTR_ERR(qup->btx.dma);
0629 qup->btx.dma = NULL;
0630 dev_err(qup->dev, "\n tx channel not available");
0631 return err;
0632 }
0633 }
0634
0635 if (!qup->brx.dma) {
0636 qup->brx.dma = dma_request_chan(qup->dev, "rx");
0637 if (IS_ERR(qup->brx.dma)) {
0638 dev_err(qup->dev, "\n rx channel not available");
0639 err = PTR_ERR(qup->brx.dma);
0640 qup->brx.dma = NULL;
0641 qup_i2c_rel_dma(qup);
0642 return err;
0643 }
0644 }
0645 return 0;
0646 }
0647
0648 static int qup_i2c_bam_make_desc(struct qup_i2c_dev *qup, struct i2c_msg *msg)
0649 {
0650 int ret = 0, limit = QUP_READ_LIMIT;
0651 u32 len = 0, blocks, rem;
0652 u32 i = 0, tlen, tx_len = 0;
0653 u8 *tags;
0654
0655 qup->blk_xfer_limit = QUP_READ_LIMIT;
0656 qup_i2c_set_blk_data(qup, msg);
0657
0658 blocks = qup->blk.count;
0659 rem = msg->len - (blocks - 1) * limit;
0660
0661 if (msg->flags & I2C_M_RD) {
0662 while (qup->blk.pos < blocks) {
0663 tlen = (i == (blocks - 1)) ? rem : limit;
0664 tags = &qup->start_tag.start[qup->tag_buf_pos + len];
0665 len += qup_i2c_set_tags(tags, qup, msg);
0666 qup->blk.data_len -= tlen;
0667
0668
0669 ret = qup_sg_set_buf(&qup->brx.sg[qup->brx.sg_cnt++],
0670 &qup->brx.tag.start[0],
0671 2, qup, DMA_FROM_DEVICE);
0672
0673 if (ret)
0674 return ret;
0675
0676 ret = qup_sg_set_buf(&qup->brx.sg[qup->brx.sg_cnt++],
0677 &msg->buf[limit * i],
0678 tlen, qup,
0679 DMA_FROM_DEVICE);
0680 if (ret)
0681 return ret;
0682
0683 i++;
0684 qup->blk.pos = i;
0685 }
0686 ret = qup_sg_set_buf(&qup->btx.sg[qup->btx.sg_cnt++],
0687 &qup->start_tag.start[qup->tag_buf_pos],
0688 len, qup, DMA_TO_DEVICE);
0689 if (ret)
0690 return ret;
0691
0692 qup->tag_buf_pos += len;
0693 } else {
0694 while (qup->blk.pos < blocks) {
0695 tlen = (i == (blocks - 1)) ? rem : limit;
0696 tags = &qup->start_tag.start[qup->tag_buf_pos + tx_len];
0697 len = qup_i2c_set_tags(tags, qup, msg);
0698 qup->blk.data_len -= tlen;
0699
0700 ret = qup_sg_set_buf(&qup->btx.sg[qup->btx.sg_cnt++],
0701 tags, len,
0702 qup, DMA_TO_DEVICE);
0703 if (ret)
0704 return ret;
0705
0706 tx_len += len;
0707 ret = qup_sg_set_buf(&qup->btx.sg[qup->btx.sg_cnt++],
0708 &msg->buf[limit * i],
0709 tlen, qup, DMA_TO_DEVICE);
0710 if (ret)
0711 return ret;
0712 i++;
0713 qup->blk.pos = i;
0714 }
0715
0716 qup->tag_buf_pos += tx_len;
0717 }
0718
0719 return 0;
0720 }
0721
0722 static int qup_i2c_bam_schedule_desc(struct qup_i2c_dev *qup)
0723 {
0724 struct dma_async_tx_descriptor *txd, *rxd = NULL;
0725 int ret = 0;
0726 dma_cookie_t cookie_rx, cookie_tx;
0727 u32 len = 0;
0728 u32 tx_cnt = qup->btx.sg_cnt, rx_cnt = qup->brx.sg_cnt;
0729
0730
0731 len = 1;
0732 if (rx_cnt) {
0733 qup->btx.tag.start[0] = QUP_BAM_INPUT_EOT;
0734 len++;
0735
0736
0737 ret = qup_sg_set_buf(&qup->brx.sg[rx_cnt++],
0738 &qup->brx.tag.start[0],
0739 1, qup, DMA_FROM_DEVICE);
0740 if (ret)
0741 return ret;
0742 }
0743
0744 qup->btx.tag.start[len - 1] = QUP_BAM_FLUSH_STOP;
0745 ret = qup_sg_set_buf(&qup->btx.sg[tx_cnt++], &qup->btx.tag.start[0],
0746 len, qup, DMA_TO_DEVICE);
0747 if (ret)
0748 return ret;
0749
0750 txd = dmaengine_prep_slave_sg(qup->btx.dma, qup->btx.sg, tx_cnt,
0751 DMA_MEM_TO_DEV,
0752 DMA_PREP_INTERRUPT | DMA_PREP_FENCE);
0753 if (!txd) {
0754 dev_err(qup->dev, "failed to get tx desc\n");
0755 ret = -EINVAL;
0756 goto desc_err;
0757 }
0758
0759 if (!rx_cnt) {
0760 txd->callback = qup_i2c_bam_cb;
0761 txd->callback_param = qup;
0762 }
0763
0764 cookie_tx = dmaengine_submit(txd);
0765 if (dma_submit_error(cookie_tx)) {
0766 ret = -EINVAL;
0767 goto desc_err;
0768 }
0769
0770 dma_async_issue_pending(qup->btx.dma);
0771
0772 if (rx_cnt) {
0773 rxd = dmaengine_prep_slave_sg(qup->brx.dma, qup->brx.sg,
0774 rx_cnt, DMA_DEV_TO_MEM,
0775 DMA_PREP_INTERRUPT);
0776 if (!rxd) {
0777 dev_err(qup->dev, "failed to get rx desc\n");
0778 ret = -EINVAL;
0779
0780
0781 dmaengine_terminate_sync(qup->btx.dma);
0782 goto desc_err;
0783 }
0784
0785 rxd->callback = qup_i2c_bam_cb;
0786 rxd->callback_param = qup;
0787 cookie_rx = dmaengine_submit(rxd);
0788 if (dma_submit_error(cookie_rx)) {
0789 ret = -EINVAL;
0790 goto desc_err;
0791 }
0792
0793 dma_async_issue_pending(qup->brx.dma);
0794 }
0795
0796 if (!wait_for_completion_timeout(&qup->xfer, qup->xfer_timeout)) {
0797 dev_err(qup->dev, "normal trans timed out\n");
0798 ret = -ETIMEDOUT;
0799 }
0800
0801 if (ret || qup->bus_err || qup->qup_err) {
0802 reinit_completion(&qup->xfer);
0803
0804 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
0805 if (ret) {
0806 dev_err(qup->dev, "change to run state timed out");
0807 goto desc_err;
0808 }
0809
0810 qup_i2c_flush(qup);
0811
0812
0813 if (!wait_for_completion_timeout(&qup->xfer, HZ))
0814 dev_err(qup->dev, "flush timed out\n");
0815
0816 ret = (qup->bus_err & QUP_I2C_NACK_FLAG) ? -ENXIO : -EIO;
0817 }
0818
0819 desc_err:
0820 dma_unmap_sg(qup->dev, qup->btx.sg, tx_cnt, DMA_TO_DEVICE);
0821
0822 if (rx_cnt)
0823 dma_unmap_sg(qup->dev, qup->brx.sg, rx_cnt,
0824 DMA_FROM_DEVICE);
0825
0826 return ret;
0827 }
0828
0829 static void qup_i2c_bam_clear_tag_buffers(struct qup_i2c_dev *qup)
0830 {
0831 qup->btx.sg_cnt = 0;
0832 qup->brx.sg_cnt = 0;
0833 qup->tag_buf_pos = 0;
0834 }
0835
0836 static int qup_i2c_bam_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
0837 int num)
0838 {
0839 struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
0840 int ret = 0;
0841 int idx = 0;
0842
0843 enable_irq(qup->irq);
0844 ret = qup_i2c_req_dma(qup);
0845
0846 if (ret)
0847 goto out;
0848
0849 writel(0, qup->base + QUP_MX_INPUT_CNT);
0850 writel(0, qup->base + QUP_MX_OUTPUT_CNT);
0851
0852
0853 writel(QUP_REPACK_EN | QUP_BAM_MODE, qup->base + QUP_IO_MODE);
0854
0855
0856 writel((0x3 << 8), qup->base + QUP_OPERATIONAL_MASK);
0857
0858
0859 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
0860 if (ret)
0861 goto out;
0862
0863 writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
0864 qup_i2c_bam_clear_tag_buffers(qup);
0865
0866 for (idx = 0; idx < num; idx++) {
0867 qup->msg = msg + idx;
0868 qup->is_last = idx == (num - 1);
0869
0870 ret = qup_i2c_bam_make_desc(qup, qup->msg);
0871 if (ret)
0872 break;
0873
0874
0875
0876
0877
0878
0879
0880
0881 if (qup->btx.sg_cnt > qup->max_xfer_sg_len ||
0882 qup->brx.sg_cnt > qup->max_xfer_sg_len ||
0883 qup->is_last) {
0884 ret = qup_i2c_bam_schedule_desc(qup);
0885 if (ret)
0886 break;
0887
0888 qup_i2c_bam_clear_tag_buffers(qup);
0889 }
0890 }
0891
0892 out:
0893 disable_irq(qup->irq);
0894
0895 qup->msg = NULL;
0896 return ret;
0897 }
0898
0899 static int qup_i2c_wait_for_complete(struct qup_i2c_dev *qup,
0900 struct i2c_msg *msg)
0901 {
0902 unsigned long left;
0903 int ret = 0;
0904
0905 left = wait_for_completion_timeout(&qup->xfer, qup->xfer_timeout);
0906 if (!left) {
0907 writel(1, qup->base + QUP_SW_RESET);
0908 ret = -ETIMEDOUT;
0909 }
0910
0911 if (qup->bus_err || qup->qup_err)
0912 ret = (qup->bus_err & QUP_I2C_NACK_FLAG) ? -ENXIO : -EIO;
0913
0914 return ret;
0915 }
0916
0917 static void qup_i2c_read_rx_fifo_v1(struct qup_i2c_dev *qup)
0918 {
0919 struct qup_i2c_block *blk = &qup->blk;
0920 struct i2c_msg *msg = qup->msg;
0921 u32 val = 0;
0922 int idx = 0;
0923
0924 while (blk->fifo_available && qup->pos < msg->len) {
0925 if ((idx & 1) == 0) {
0926
0927 val = readl(qup->base + QUP_IN_FIFO_BASE);
0928 msg->buf[qup->pos++] = val & 0xFF;
0929 } else {
0930 msg->buf[qup->pos++] = val >> QUP_MSW_SHIFT;
0931 }
0932 idx++;
0933 blk->fifo_available--;
0934 }
0935
0936 if (qup->pos == msg->len)
0937 blk->rx_bytes_read = true;
0938 }
0939
0940 static void qup_i2c_write_rx_tags_v1(struct qup_i2c_dev *qup)
0941 {
0942 struct i2c_msg *msg = qup->msg;
0943 u32 addr, len, val;
0944
0945 addr = i2c_8bit_addr_from_msg(msg);
0946
0947
0948 len = (msg->len == QUP_READ_LIMIT) ? 0 : msg->len;
0949
0950 val = ((QUP_TAG_REC | len) << QUP_MSW_SHIFT) | QUP_TAG_START | addr;
0951 writel(val, qup->base + QUP_OUT_FIFO_BASE);
0952 }
0953
0954 static void qup_i2c_conf_v1(struct qup_i2c_dev *qup)
0955 {
0956 struct qup_i2c_block *blk = &qup->blk;
0957 u32 qup_config = I2C_MINI_CORE | I2C_N_VAL;
0958 u32 io_mode = QUP_REPACK_EN;
0959
0960 blk->is_tx_blk_mode = blk->total_tx_len > qup->out_fifo_sz;
0961 blk->is_rx_blk_mode = blk->total_rx_len > qup->in_fifo_sz;
0962
0963 if (blk->is_tx_blk_mode) {
0964 io_mode |= QUP_OUTPUT_BLK_MODE;
0965 writel(0, qup->base + QUP_MX_WRITE_CNT);
0966 writel(blk->total_tx_len, qup->base + QUP_MX_OUTPUT_CNT);
0967 } else {
0968 writel(0, qup->base + QUP_MX_OUTPUT_CNT);
0969 writel(blk->total_tx_len, qup->base + QUP_MX_WRITE_CNT);
0970 }
0971
0972 if (blk->total_rx_len) {
0973 if (blk->is_rx_blk_mode) {
0974 io_mode |= QUP_INPUT_BLK_MODE;
0975 writel(0, qup->base + QUP_MX_READ_CNT);
0976 writel(blk->total_rx_len, qup->base + QUP_MX_INPUT_CNT);
0977 } else {
0978 writel(0, qup->base + QUP_MX_INPUT_CNT);
0979 writel(blk->total_rx_len, qup->base + QUP_MX_READ_CNT);
0980 }
0981 } else {
0982 qup_config |= QUP_NO_INPUT;
0983 }
0984
0985 writel(qup_config, qup->base + QUP_CONFIG);
0986 writel(io_mode, qup->base + QUP_IO_MODE);
0987 }
0988
0989 static void qup_i2c_clear_blk_v1(struct qup_i2c_block *blk)
0990 {
0991 blk->tx_fifo_free = 0;
0992 blk->fifo_available = 0;
0993 blk->rx_bytes_read = false;
0994 }
0995
0996 static int qup_i2c_conf_xfer_v1(struct qup_i2c_dev *qup, bool is_rx)
0997 {
0998 struct qup_i2c_block *blk = &qup->blk;
0999 int ret;
1000
1001 qup_i2c_clear_blk_v1(blk);
1002 qup_i2c_conf_v1(qup);
1003 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
1004 if (ret)
1005 return ret;
1006
1007 writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
1008
1009 ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
1010 if (ret)
1011 return ret;
1012
1013 reinit_completion(&qup->xfer);
1014 enable_irq(qup->irq);
1015 if (!blk->is_tx_blk_mode) {
1016 blk->tx_fifo_free = qup->out_fifo_sz;
1017
1018 if (is_rx)
1019 qup_i2c_write_rx_tags_v1(qup);
1020 else
1021 qup_i2c_write_tx_fifo_v1(qup);
1022 }
1023
1024 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
1025 if (ret)
1026 goto err;
1027
1028 ret = qup_i2c_wait_for_complete(qup, qup->msg);
1029 if (ret)
1030 goto err;
1031
1032 ret = qup_i2c_bus_active(qup, ONE_BYTE);
1033
1034 err:
1035 disable_irq(qup->irq);
1036 return ret;
1037 }
1038
1039 static int qup_i2c_write_one(struct qup_i2c_dev *qup)
1040 {
1041 struct i2c_msg *msg = qup->msg;
1042 struct qup_i2c_block *blk = &qup->blk;
1043
1044 qup->pos = 0;
1045 blk->total_tx_len = msg->len + 1;
1046 blk->total_rx_len = 0;
1047
1048 return qup_i2c_conf_xfer_v1(qup, false);
1049 }
1050
1051 static int qup_i2c_read_one(struct qup_i2c_dev *qup)
1052 {
1053 struct qup_i2c_block *blk = &qup->blk;
1054
1055 qup->pos = 0;
1056 blk->total_tx_len = 2;
1057 blk->total_rx_len = qup->msg->len;
1058
1059 return qup_i2c_conf_xfer_v1(qup, true);
1060 }
1061
1062 static int qup_i2c_xfer(struct i2c_adapter *adap,
1063 struct i2c_msg msgs[],
1064 int num)
1065 {
1066 struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
1067 int ret, idx;
1068
1069 ret = pm_runtime_get_sync(qup->dev);
1070 if (ret < 0)
1071 goto out;
1072
1073 qup->bus_err = 0;
1074 qup->qup_err = 0;
1075
1076 writel(1, qup->base + QUP_SW_RESET);
1077 ret = qup_i2c_poll_state(qup, QUP_RESET_STATE);
1078 if (ret)
1079 goto out;
1080
1081
1082 writel(I2C_MINI_CORE | I2C_N_VAL, qup->base + QUP_CONFIG);
1083
1084 for (idx = 0; idx < num; idx++) {
1085 if (qup_i2c_poll_state_i2c_master(qup)) {
1086 ret = -EIO;
1087 goto out;
1088 }
1089
1090 if (qup_i2c_check_msg_len(&msgs[idx])) {
1091 ret = -EINVAL;
1092 goto out;
1093 }
1094
1095 qup->msg = &msgs[idx];
1096 if (msgs[idx].flags & I2C_M_RD)
1097 ret = qup_i2c_read_one(qup);
1098 else
1099 ret = qup_i2c_write_one(qup);
1100
1101 if (ret)
1102 break;
1103
1104 ret = qup_i2c_change_state(qup, QUP_RESET_STATE);
1105 if (ret)
1106 break;
1107 }
1108
1109 if (ret == 0)
1110 ret = num;
1111 out:
1112
1113 pm_runtime_mark_last_busy(qup->dev);
1114 pm_runtime_put_autosuspend(qup->dev);
1115
1116 return ret;
1117 }
1118
1119
1120
1121
1122
1123 static void qup_i2c_conf_count_v2(struct qup_i2c_dev *qup)
1124 {
1125 struct qup_i2c_block *blk = &qup->blk;
1126 u32 qup_config = I2C_MINI_CORE | I2C_N_VAL_V2;
1127
1128 if (blk->is_tx_blk_mode)
1129 writel(qup->config_run | blk->total_tx_len,
1130 qup->base + QUP_MX_OUTPUT_CNT);
1131 else
1132 writel(qup->config_run | blk->total_tx_len,
1133 qup->base + QUP_MX_WRITE_CNT);
1134
1135 if (blk->total_rx_len) {
1136 if (blk->is_rx_blk_mode)
1137 writel(qup->config_run | blk->total_rx_len,
1138 qup->base + QUP_MX_INPUT_CNT);
1139 else
1140 writel(qup->config_run | blk->total_rx_len,
1141 qup->base + QUP_MX_READ_CNT);
1142 } else {
1143 qup_config |= QUP_NO_INPUT;
1144 }
1145
1146 writel(qup_config, qup->base + QUP_CONFIG);
1147 }
1148
1149
1150
1151
1152
1153
1154 static void qup_i2c_conf_mode_v2(struct qup_i2c_dev *qup)
1155 {
1156 struct qup_i2c_block *blk = &qup->blk;
1157 u32 io_mode = QUP_REPACK_EN;
1158
1159 if (blk->is_tx_blk_mode) {
1160 io_mode |= QUP_OUTPUT_BLK_MODE;
1161 writel(0, qup->base + QUP_MX_WRITE_CNT);
1162 } else {
1163 writel(0, qup->base + QUP_MX_OUTPUT_CNT);
1164 }
1165
1166 if (blk->is_rx_blk_mode) {
1167 io_mode |= QUP_INPUT_BLK_MODE;
1168 writel(0, qup->base + QUP_MX_READ_CNT);
1169 } else {
1170 writel(0, qup->base + QUP_MX_INPUT_CNT);
1171 }
1172
1173 writel(io_mode, qup->base + QUP_IO_MODE);
1174 }
1175
1176
1177 static void qup_i2c_clear_blk_v2(struct qup_i2c_block *blk)
1178 {
1179 blk->send_last_word = false;
1180 blk->tx_tags_sent = false;
1181 blk->tx_fifo_data = 0;
1182 blk->tx_fifo_data_pos = 0;
1183 blk->tx_fifo_free = 0;
1184
1185 blk->rx_tags_fetched = false;
1186 blk->rx_bytes_read = false;
1187 blk->rx_fifo_data = 0;
1188 blk->rx_fifo_data_pos = 0;
1189 blk->fifo_available = 0;
1190 }
1191
1192
1193 static void qup_i2c_recv_data(struct qup_i2c_dev *qup)
1194 {
1195 struct qup_i2c_block *blk = &qup->blk;
1196 int j;
1197
1198 for (j = blk->rx_fifo_data_pos;
1199 blk->cur_blk_len && blk->fifo_available;
1200 blk->cur_blk_len--, blk->fifo_available--) {
1201 if (j == 0)
1202 blk->rx_fifo_data = readl(qup->base + QUP_IN_FIFO_BASE);
1203
1204 *(blk->cur_data++) = blk->rx_fifo_data;
1205 blk->rx_fifo_data >>= 8;
1206
1207 if (j == 3)
1208 j = 0;
1209 else
1210 j++;
1211 }
1212
1213 blk->rx_fifo_data_pos = j;
1214 }
1215
1216
1217 static void qup_i2c_recv_tags(struct qup_i2c_dev *qup)
1218 {
1219 struct qup_i2c_block *blk = &qup->blk;
1220
1221 blk->rx_fifo_data = readl(qup->base + QUP_IN_FIFO_BASE);
1222 blk->rx_fifo_data >>= blk->rx_tag_len * 8;
1223 blk->rx_fifo_data_pos = blk->rx_tag_len;
1224 blk->fifo_available -= blk->rx_tag_len;
1225 }
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235 static void qup_i2c_read_rx_fifo_v2(struct qup_i2c_dev *qup)
1236 {
1237 struct qup_i2c_block *blk = &qup->blk;
1238
1239 if (!blk->rx_tags_fetched) {
1240 qup_i2c_recv_tags(qup);
1241 blk->rx_tags_fetched = true;
1242 }
1243
1244 qup_i2c_recv_data(qup);
1245 if (!blk->cur_blk_len)
1246 blk->rx_bytes_read = true;
1247 }
1248
1249
1250
1251
1252
1253
1254 static void
1255 qup_i2c_write_blk_data(struct qup_i2c_dev *qup, u8 **data, unsigned int *len)
1256 {
1257 struct qup_i2c_block *blk = &qup->blk;
1258 unsigned int j;
1259
1260 for (j = blk->tx_fifo_data_pos; *len && blk->tx_fifo_free;
1261 (*len)--, blk->tx_fifo_free--) {
1262 blk->tx_fifo_data |= *(*data)++ << (j * 8);
1263 if (j == 3) {
1264 writel(blk->tx_fifo_data,
1265 qup->base + QUP_OUT_FIFO_BASE);
1266 blk->tx_fifo_data = 0x0;
1267 j = 0;
1268 } else {
1269 j++;
1270 }
1271 }
1272
1273 blk->tx_fifo_data_pos = j;
1274 }
1275
1276
1277 static void qup_i2c_write_rx_tags_v2(struct qup_i2c_dev *qup)
1278 {
1279 struct qup_i2c_block *blk = &qup->blk;
1280
1281 qup_i2c_write_blk_data(qup, &blk->cur_tx_tags, &blk->tx_tag_len);
1282 if (blk->tx_fifo_data_pos)
1283 writel(blk->tx_fifo_data, qup->base + QUP_OUT_FIFO_BASE);
1284 }
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308 static void qup_i2c_write_tx_fifo_v2(struct qup_i2c_dev *qup)
1309 {
1310 struct qup_i2c_block *blk = &qup->blk;
1311
1312 if (!blk->tx_tags_sent) {
1313 qup_i2c_write_blk_data(qup, &blk->cur_tx_tags,
1314 &blk->tx_tag_len);
1315 blk->tx_tags_sent = true;
1316 }
1317
1318 if (blk->send_last_word)
1319 goto send_last_word;
1320
1321 qup_i2c_write_blk_data(qup, &blk->cur_data, &blk->cur_blk_len);
1322 if (!blk->cur_blk_len) {
1323 if (!blk->tx_fifo_data_pos)
1324 return;
1325
1326 if (blk->tx_fifo_free)
1327 goto send_last_word;
1328
1329 blk->send_last_word = true;
1330 }
1331
1332 return;
1333
1334 send_last_word:
1335 writel(blk->tx_fifo_data, qup->base + QUP_OUT_FIFO_BASE);
1336 }
1337
1338
1339
1340
1341
1342
1343 static int
1344 qup_i2c_conf_xfer_v2(struct qup_i2c_dev *qup, bool is_rx, bool is_first,
1345 bool change_pause_state)
1346 {
1347 struct qup_i2c_block *blk = &qup->blk;
1348 struct i2c_msg *msg = qup->msg;
1349 int ret;
1350
1351
1352
1353
1354
1355
1356 if (qup_i2c_check_msg_len(msg)) {
1357 if (qup->is_smbus_read) {
1358
1359
1360
1361
1362
1363 blk->cur_data += 1;
1364 is_first = false;
1365 } else {
1366 change_pause_state = false;
1367 }
1368 }
1369
1370 qup->config_run = is_first ? 0 : QUP_I2C_MX_CONFIG_DURING_RUN;
1371
1372 qup_i2c_clear_blk_v2(blk);
1373 qup_i2c_conf_count_v2(qup);
1374
1375
1376 if (is_first) {
1377 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
1378 if (ret)
1379 return ret;
1380
1381 writel(qup->clk_ctl, qup->base + QUP_I2C_CLK_CTL);
1382
1383 ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
1384 if (ret)
1385 return ret;
1386 }
1387
1388 reinit_completion(&qup->xfer);
1389 enable_irq(qup->irq);
1390
1391
1392
1393
1394 if (!blk->is_tx_blk_mode) {
1395 blk->tx_fifo_free = qup->out_fifo_sz;
1396
1397 if (is_rx)
1398 qup_i2c_write_rx_tags_v2(qup);
1399 else
1400 qup_i2c_write_tx_fifo_v2(qup);
1401 }
1402
1403 ret = qup_i2c_change_state(qup, QUP_RUN_STATE);
1404 if (ret)
1405 goto err;
1406
1407 ret = qup_i2c_wait_for_complete(qup, msg);
1408 if (ret)
1409 goto err;
1410
1411
1412 if (change_pause_state) {
1413 ret = qup_i2c_change_state(qup, QUP_PAUSE_STATE);
1414 if (ret)
1415 goto err;
1416 }
1417
1418 err:
1419 disable_irq(qup->irq);
1420 return ret;
1421 }
1422
1423
1424
1425
1426
1427
1428 static int qup_i2c_xfer_v2_msg(struct qup_i2c_dev *qup, int msg_id, bool is_rx)
1429 {
1430 int ret = 0;
1431 unsigned int data_len, i;
1432 struct i2c_msg *msg = qup->msg;
1433 struct qup_i2c_block *blk = &qup->blk;
1434 u8 *msg_buf = msg->buf;
1435
1436 qup->blk_xfer_limit = is_rx ? RECV_MAX_DATA_LEN : QUP_READ_LIMIT;
1437 qup_i2c_set_blk_data(qup, msg);
1438
1439 for (i = 0; i < blk->count; i++) {
1440 data_len = qup_i2c_get_data_len(qup);
1441 blk->pos = i;
1442 blk->cur_tx_tags = blk->tags;
1443 blk->cur_blk_len = data_len;
1444 blk->tx_tag_len =
1445 qup_i2c_set_tags(blk->cur_tx_tags, qup, qup->msg);
1446
1447 blk->cur_data = msg_buf;
1448
1449 if (is_rx) {
1450 blk->total_tx_len = blk->tx_tag_len;
1451 blk->rx_tag_len = 2;
1452 blk->total_rx_len = blk->rx_tag_len + data_len;
1453 } else {
1454 blk->total_tx_len = blk->tx_tag_len + data_len;
1455 blk->total_rx_len = 0;
1456 }
1457
1458 ret = qup_i2c_conf_xfer_v2(qup, is_rx, !msg_id && !i,
1459 !qup->is_last || i < blk->count - 1);
1460 if (ret)
1461 return ret;
1462
1463
1464 if (qup_i2c_check_msg_len(msg) && msg->len == 1 &&
1465 !qup->is_smbus_read) {
1466 if (msg->buf[0] > I2C_SMBUS_BLOCK_MAX)
1467 return -EPROTO;
1468
1469 msg->len = msg->buf[0];
1470 qup->is_smbus_read = true;
1471 ret = qup_i2c_xfer_v2_msg(qup, msg_id, true);
1472 qup->is_smbus_read = false;
1473 if (ret)
1474 return ret;
1475
1476 msg->len += 1;
1477 }
1478
1479 msg_buf += data_len;
1480 blk->data_len -= qup->blk_xfer_limit;
1481 }
1482
1483 return ret;
1484 }
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502 static int
1503 qup_i2c_determine_mode_v2(struct qup_i2c_dev *qup,
1504 struct i2c_msg msgs[], int num)
1505 {
1506 int idx;
1507 bool no_dma = false;
1508 unsigned int max_tx_len = 0, max_rx_len = 0, total_len = 0;
1509
1510
1511 for (idx = 0; idx < num; idx++) {
1512 if (msgs[idx].flags & I2C_M_RD)
1513 max_rx_len = max_t(unsigned int, max_rx_len,
1514 msgs[idx].len);
1515 else
1516 max_tx_len = max_t(unsigned int, max_tx_len,
1517 msgs[idx].len);
1518
1519 if (is_vmalloc_addr(msgs[idx].buf))
1520 no_dma = true;
1521
1522 total_len += msgs[idx].len;
1523 }
1524
1525 if (!no_dma && qup->is_dma &&
1526 (total_len > qup->out_fifo_sz || total_len > qup->in_fifo_sz)) {
1527 qup->use_dma = true;
1528 } else {
1529 qup->blk.is_tx_blk_mode = max_tx_len > qup->out_fifo_sz -
1530 QUP_MAX_TAGS_LEN;
1531 qup->blk.is_rx_blk_mode = max_rx_len > qup->in_fifo_sz -
1532 READ_RX_TAGS_LEN;
1533 }
1534
1535 return 0;
1536 }
1537
1538 static int qup_i2c_xfer_v2(struct i2c_adapter *adap,
1539 struct i2c_msg msgs[],
1540 int num)
1541 {
1542 struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
1543 int ret, idx = 0;
1544
1545 qup->bus_err = 0;
1546 qup->qup_err = 0;
1547
1548 ret = pm_runtime_get_sync(qup->dev);
1549 if (ret < 0)
1550 goto out;
1551
1552 ret = qup_i2c_determine_mode_v2(qup, msgs, num);
1553 if (ret)
1554 goto out;
1555
1556 writel(1, qup->base + QUP_SW_RESET);
1557 ret = qup_i2c_poll_state(qup, QUP_RESET_STATE);
1558 if (ret)
1559 goto out;
1560
1561
1562 writel(I2C_MINI_CORE | I2C_N_VAL_V2, qup->base + QUP_CONFIG);
1563 writel(QUP_V2_TAGS_EN, qup->base + QUP_I2C_MASTER_GEN);
1564
1565 if (qup_i2c_poll_state_i2c_master(qup)) {
1566 ret = -EIO;
1567 goto out;
1568 }
1569
1570 if (qup->use_dma) {
1571 reinit_completion(&qup->xfer);
1572 ret = qup_i2c_bam_xfer(adap, &msgs[0], num);
1573 qup->use_dma = false;
1574 } else {
1575 qup_i2c_conf_mode_v2(qup);
1576
1577 for (idx = 0; idx < num; idx++) {
1578 qup->msg = &msgs[idx];
1579 qup->is_last = idx == (num - 1);
1580
1581 ret = qup_i2c_xfer_v2_msg(qup, idx,
1582 !!(msgs[idx].flags & I2C_M_RD));
1583 if (ret)
1584 break;
1585 }
1586 qup->msg = NULL;
1587 }
1588
1589 if (!ret)
1590 ret = qup_i2c_bus_active(qup, ONE_BYTE);
1591
1592 if (!ret)
1593 qup_i2c_change_state(qup, QUP_RESET_STATE);
1594
1595 if (ret == 0)
1596 ret = num;
1597 out:
1598 pm_runtime_mark_last_busy(qup->dev);
1599 pm_runtime_put_autosuspend(qup->dev);
1600
1601 return ret;
1602 }
1603
1604 static u32 qup_i2c_func(struct i2c_adapter *adap)
1605 {
1606 return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL_ALL & ~I2C_FUNC_SMBUS_QUICK);
1607 }
1608
1609 static const struct i2c_algorithm qup_i2c_algo = {
1610 .master_xfer = qup_i2c_xfer,
1611 .functionality = qup_i2c_func,
1612 };
1613
1614 static const struct i2c_algorithm qup_i2c_algo_v2 = {
1615 .master_xfer = qup_i2c_xfer_v2,
1616 .functionality = qup_i2c_func,
1617 };
1618
1619
1620
1621
1622
1623
1624 static const struct i2c_adapter_quirks qup_i2c_quirks = {
1625 .flags = I2C_AQ_NO_ZERO_LEN,
1626 .max_read_len = QUP_READ_LIMIT,
1627 };
1628
1629 static const struct i2c_adapter_quirks qup_i2c_quirks_v2 = {
1630 .flags = I2C_AQ_NO_ZERO_LEN,
1631 };
1632
1633 static void qup_i2c_enable_clocks(struct qup_i2c_dev *qup)
1634 {
1635 clk_prepare_enable(qup->clk);
1636 clk_prepare_enable(qup->pclk);
1637 }
1638
1639 static void qup_i2c_disable_clocks(struct qup_i2c_dev *qup)
1640 {
1641 u32 config;
1642
1643 qup_i2c_change_state(qup, QUP_RESET_STATE);
1644 clk_disable_unprepare(qup->clk);
1645 config = readl(qup->base + QUP_CONFIG);
1646 config |= QUP_CLOCK_AUTO_GATE;
1647 writel(config, qup->base + QUP_CONFIG);
1648 clk_disable_unprepare(qup->pclk);
1649 }
1650
1651 static const struct acpi_device_id qup_i2c_acpi_match[] = {
1652 { "QCOM8010"},
1653 { },
1654 };
1655 MODULE_DEVICE_TABLE(acpi, qup_i2c_acpi_match);
1656
1657 static int qup_i2c_probe(struct platform_device *pdev)
1658 {
1659 static const int blk_sizes[] = {4, 16, 32};
1660 struct qup_i2c_dev *qup;
1661 unsigned long one_bit_t;
1662 u32 io_mode, hw_ver, size;
1663 int ret, fs_div, hs_div;
1664 u32 src_clk_freq = DEFAULT_SRC_CLK;
1665 u32 clk_freq = DEFAULT_CLK_FREQ;
1666 int blocks;
1667 bool is_qup_v1;
1668
1669 qup = devm_kzalloc(&pdev->dev, sizeof(*qup), GFP_KERNEL);
1670 if (!qup)
1671 return -ENOMEM;
1672
1673 qup->dev = &pdev->dev;
1674 init_completion(&qup->xfer);
1675 platform_set_drvdata(pdev, qup);
1676
1677 if (scl_freq) {
1678 dev_notice(qup->dev, "Using override frequency of %u\n", scl_freq);
1679 clk_freq = scl_freq;
1680 } else {
1681 ret = device_property_read_u32(qup->dev, "clock-frequency", &clk_freq);
1682 if (ret) {
1683 dev_notice(qup->dev, "using default clock-frequency %d",
1684 DEFAULT_CLK_FREQ);
1685 }
1686 }
1687
1688 if (of_device_is_compatible(pdev->dev.of_node, "qcom,i2c-qup-v1.1.1")) {
1689 qup->adap.algo = &qup_i2c_algo;
1690 qup->adap.quirks = &qup_i2c_quirks;
1691 is_qup_v1 = true;
1692 } else {
1693 qup->adap.algo = &qup_i2c_algo_v2;
1694 qup->adap.quirks = &qup_i2c_quirks_v2;
1695 is_qup_v1 = false;
1696 if (acpi_match_device(qup_i2c_acpi_match, qup->dev))
1697 goto nodma;
1698 else
1699 ret = qup_i2c_req_dma(qup);
1700
1701 if (ret == -EPROBE_DEFER)
1702 goto fail_dma;
1703 else if (ret != 0)
1704 goto nodma;
1705
1706 qup->max_xfer_sg_len = (MX_BLOCKS << 1);
1707 blocks = (MX_DMA_BLOCKS << 1) + 1;
1708 qup->btx.sg = devm_kcalloc(&pdev->dev,
1709 blocks, sizeof(*qup->btx.sg),
1710 GFP_KERNEL);
1711 if (!qup->btx.sg) {
1712 ret = -ENOMEM;
1713 goto fail_dma;
1714 }
1715 sg_init_table(qup->btx.sg, blocks);
1716
1717 qup->brx.sg = devm_kcalloc(&pdev->dev,
1718 blocks, sizeof(*qup->brx.sg),
1719 GFP_KERNEL);
1720 if (!qup->brx.sg) {
1721 ret = -ENOMEM;
1722 goto fail_dma;
1723 }
1724 sg_init_table(qup->brx.sg, blocks);
1725
1726
1727 size = blocks * 2 + 5;
1728
1729 qup->start_tag.start = devm_kzalloc(&pdev->dev,
1730 size, GFP_KERNEL);
1731 if (!qup->start_tag.start) {
1732 ret = -ENOMEM;
1733 goto fail_dma;
1734 }
1735
1736 qup->brx.tag.start = devm_kzalloc(&pdev->dev, 2, GFP_KERNEL);
1737 if (!qup->brx.tag.start) {
1738 ret = -ENOMEM;
1739 goto fail_dma;
1740 }
1741
1742 qup->btx.tag.start = devm_kzalloc(&pdev->dev, 2, GFP_KERNEL);
1743 if (!qup->btx.tag.start) {
1744 ret = -ENOMEM;
1745 goto fail_dma;
1746 }
1747 qup->is_dma = true;
1748 }
1749
1750 nodma:
1751
1752 if (!clk_freq || clk_freq > I2C_MAX_FAST_MODE_PLUS_FREQ) {
1753 dev_err(qup->dev, "clock frequency not supported %d\n",
1754 clk_freq);
1755 return -EINVAL;
1756 }
1757
1758 qup->base = devm_platform_ioremap_resource(pdev, 0);
1759 if (IS_ERR(qup->base))
1760 return PTR_ERR(qup->base);
1761
1762 qup->irq = platform_get_irq(pdev, 0);
1763 if (qup->irq < 0)
1764 return qup->irq;
1765
1766 if (has_acpi_companion(qup->dev)) {
1767 ret = device_property_read_u32(qup->dev,
1768 "src-clock-hz", &src_clk_freq);
1769 if (ret) {
1770 dev_notice(qup->dev, "using default src-clock-hz %d",
1771 DEFAULT_SRC_CLK);
1772 }
1773 ACPI_COMPANION_SET(&qup->adap.dev, ACPI_COMPANION(qup->dev));
1774 } else {
1775 qup->clk = devm_clk_get(qup->dev, "core");
1776 if (IS_ERR(qup->clk)) {
1777 dev_err(qup->dev, "Could not get core clock\n");
1778 return PTR_ERR(qup->clk);
1779 }
1780
1781 qup->pclk = devm_clk_get(qup->dev, "iface");
1782 if (IS_ERR(qup->pclk)) {
1783 dev_err(qup->dev, "Could not get iface clock\n");
1784 return PTR_ERR(qup->pclk);
1785 }
1786 qup_i2c_enable_clocks(qup);
1787 src_clk_freq = clk_get_rate(qup->clk);
1788 }
1789
1790
1791
1792
1793
1794 writel(1, qup->base + QUP_SW_RESET);
1795 ret = qup_i2c_poll_state_valid(qup);
1796 if (ret)
1797 goto fail;
1798
1799 ret = devm_request_irq(qup->dev, qup->irq, qup_i2c_interrupt,
1800 IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN,
1801 "i2c_qup", qup);
1802 if (ret) {
1803 dev_err(qup->dev, "Request %d IRQ failed\n", qup->irq);
1804 goto fail;
1805 }
1806
1807 hw_ver = readl(qup->base + QUP_HW_VERSION);
1808 dev_dbg(qup->dev, "Revision %x\n", hw_ver);
1809
1810 io_mode = readl(qup->base + QUP_IO_MODE);
1811
1812
1813
1814
1815
1816 size = QUP_OUTPUT_BLOCK_SIZE(io_mode);
1817 if (size >= ARRAY_SIZE(blk_sizes)) {
1818 ret = -EIO;
1819 goto fail;
1820 }
1821 qup->out_blk_sz = blk_sizes[size];
1822
1823 size = QUP_INPUT_BLOCK_SIZE(io_mode);
1824 if (size >= ARRAY_SIZE(blk_sizes)) {
1825 ret = -EIO;
1826 goto fail;
1827 }
1828 qup->in_blk_sz = blk_sizes[size];
1829
1830 if (is_qup_v1) {
1831
1832
1833
1834
1835
1836 qup->in_blk_sz /= 2;
1837 qup->out_blk_sz /= 2;
1838 qup->write_tx_fifo = qup_i2c_write_tx_fifo_v1;
1839 qup->read_rx_fifo = qup_i2c_read_rx_fifo_v1;
1840 qup->write_rx_tags = qup_i2c_write_rx_tags_v1;
1841 } else {
1842 qup->write_tx_fifo = qup_i2c_write_tx_fifo_v2;
1843 qup->read_rx_fifo = qup_i2c_read_rx_fifo_v2;
1844 qup->write_rx_tags = qup_i2c_write_rx_tags_v2;
1845 }
1846
1847 size = QUP_OUTPUT_FIFO_SIZE(io_mode);
1848 qup->out_fifo_sz = qup->out_blk_sz * (2 << size);
1849
1850 size = QUP_INPUT_FIFO_SIZE(io_mode);
1851 qup->in_fifo_sz = qup->in_blk_sz * (2 << size);
1852
1853 hs_div = 3;
1854 if (clk_freq <= I2C_MAX_STANDARD_MODE_FREQ) {
1855 fs_div = ((src_clk_freq / clk_freq) / 2) - 3;
1856 qup->clk_ctl = (hs_div << 8) | (fs_div & 0xff);
1857 } else {
1858
1859 fs_div = ((src_clk_freq / clk_freq) - 6) * 2 / 3;
1860 qup->clk_ctl = ((fs_div / 2) << 16) | (hs_div << 8) | (fs_div & 0xff);
1861 }
1862
1863
1864
1865
1866
1867 one_bit_t = (USEC_PER_SEC / clk_freq) + 1;
1868 qup->one_byte_t = one_bit_t * 9;
1869 qup->xfer_timeout = TOUT_MIN * HZ +
1870 usecs_to_jiffies(MX_DMA_TX_RX_LEN * qup->one_byte_t);
1871
1872 dev_dbg(qup->dev, "IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n",
1873 qup->in_blk_sz, qup->in_fifo_sz,
1874 qup->out_blk_sz, qup->out_fifo_sz);
1875
1876 i2c_set_adapdata(&qup->adap, qup);
1877 qup->adap.dev.parent = qup->dev;
1878 qup->adap.dev.of_node = pdev->dev.of_node;
1879 qup->is_last = true;
1880
1881 strscpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name));
1882
1883 pm_runtime_set_autosuspend_delay(qup->dev, MSEC_PER_SEC);
1884 pm_runtime_use_autosuspend(qup->dev);
1885 pm_runtime_set_active(qup->dev);
1886 pm_runtime_enable(qup->dev);
1887
1888 ret = i2c_add_adapter(&qup->adap);
1889 if (ret)
1890 goto fail_runtime;
1891
1892 return 0;
1893
1894 fail_runtime:
1895 pm_runtime_disable(qup->dev);
1896 pm_runtime_set_suspended(qup->dev);
1897 fail:
1898 qup_i2c_disable_clocks(qup);
1899 fail_dma:
1900 if (qup->btx.dma)
1901 dma_release_channel(qup->btx.dma);
1902 if (qup->brx.dma)
1903 dma_release_channel(qup->brx.dma);
1904 return ret;
1905 }
1906
1907 static int qup_i2c_remove(struct platform_device *pdev)
1908 {
1909 struct qup_i2c_dev *qup = platform_get_drvdata(pdev);
1910
1911 if (qup->is_dma) {
1912 dma_release_channel(qup->btx.dma);
1913 dma_release_channel(qup->brx.dma);
1914 }
1915
1916 disable_irq(qup->irq);
1917 qup_i2c_disable_clocks(qup);
1918 i2c_del_adapter(&qup->adap);
1919 pm_runtime_disable(qup->dev);
1920 pm_runtime_set_suspended(qup->dev);
1921 return 0;
1922 }
1923
1924 #ifdef CONFIG_PM
1925 static int qup_i2c_pm_suspend_runtime(struct device *device)
1926 {
1927 struct qup_i2c_dev *qup = dev_get_drvdata(device);
1928
1929 dev_dbg(device, "pm_runtime: suspending...\n");
1930 qup_i2c_disable_clocks(qup);
1931 return 0;
1932 }
1933
1934 static int qup_i2c_pm_resume_runtime(struct device *device)
1935 {
1936 struct qup_i2c_dev *qup = dev_get_drvdata(device);
1937
1938 dev_dbg(device, "pm_runtime: resuming...\n");
1939 qup_i2c_enable_clocks(qup);
1940 return 0;
1941 }
1942 #endif
1943
1944 #ifdef CONFIG_PM_SLEEP
1945 static int qup_i2c_suspend(struct device *device)
1946 {
1947 if (!pm_runtime_suspended(device))
1948 return qup_i2c_pm_suspend_runtime(device);
1949 return 0;
1950 }
1951
1952 static int qup_i2c_resume(struct device *device)
1953 {
1954 qup_i2c_pm_resume_runtime(device);
1955 pm_runtime_mark_last_busy(device);
1956 pm_request_autosuspend(device);
1957 return 0;
1958 }
1959 #endif
1960
1961 static const struct dev_pm_ops qup_i2c_qup_pm_ops = {
1962 SET_SYSTEM_SLEEP_PM_OPS(
1963 qup_i2c_suspend,
1964 qup_i2c_resume)
1965 SET_RUNTIME_PM_OPS(
1966 qup_i2c_pm_suspend_runtime,
1967 qup_i2c_pm_resume_runtime,
1968 NULL)
1969 };
1970
1971 static const struct of_device_id qup_i2c_dt_match[] = {
1972 { .compatible = "qcom,i2c-qup-v1.1.1" },
1973 { .compatible = "qcom,i2c-qup-v2.1.1" },
1974 { .compatible = "qcom,i2c-qup-v2.2.1" },
1975 {}
1976 };
1977 MODULE_DEVICE_TABLE(of, qup_i2c_dt_match);
1978
1979 static struct platform_driver qup_i2c_driver = {
1980 .probe = qup_i2c_probe,
1981 .remove = qup_i2c_remove,
1982 .driver = {
1983 .name = "i2c_qup",
1984 .pm = &qup_i2c_qup_pm_ops,
1985 .of_match_table = qup_i2c_dt_match,
1986 .acpi_match_table = ACPI_PTR(qup_i2c_acpi_match),
1987 },
1988 };
1989
1990 module_platform_driver(qup_i2c_driver);
1991
1992 MODULE_LICENSE("GPL v2");
1993 MODULE_ALIAS("platform:i2c_qup");