aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-10-29 17:44:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-10-29 17:44:03 -0400
commit57dbde63f2888af1be5111d369d124f4e659c0f8 (patch)
tree52b8e66f1f45f7076c2f65da56e78b0830efcfc6 /drivers
parent134bf98c5596605af90f104716ef912e8f7eb56b (diff)
parent84de6e96e036dcfb18dded04a506b1dd72ba0e5b (diff)
Merge branch 'i2c/for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang: "I2C has not so much stuff this time. Mostly driver enablement for new SoCs, some driver bugfixes, and some cleanups" * 'i2c/for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (35 commits) MAINTAINERS: add maintainer for Renesas RIIC driver i2c: sh_mobile: Remove dummy runtime PM callbacks i2c: uniphier-f: fix race condition when IRQ is cleared i2c: uniphier-f: fix occasional timeout error i2c: uniphier-f: make driver robust against concurrency i2c: i2c-qcom-geni: Simplify irq handler i2c: i2c-qcom-geni: Simplify tx/rx functions i2c: designware: Set IRQF_NO_SUSPEND flag for all BYT and CHT controllers i2c: mux: mlxcpld: simplify code to reach the adapter i2c: mux: ltc4306: simplify code to reach the adapter i2c: mux: pca954x: simplify code to reach the adapter i2c: core: remove level of indentation in i2c_transfer i2c: core: remove outdated DEBUG output i2c: zx2967: use core to detect 'no zero length' quirk i2c: tegra: use core to detect 'no zero length' quirk i2c: qup: use core to detect 'no zero length' quirk i2c: omap: use core to detect 'no zero length' quirk i2c: Convert to using %pOFn instead of device_node.name i2c: brcmstb: Allow enabling the driver on DSL SoCs eeprom: at24: fix unexpected timeout under high load ...
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/busses/Kconfig7
-rw-r--r--drivers/i2c/busses/i2c-aspeed.c205
-rw-r--r--drivers/i2c/busses/i2c-designware-baytrail.c2
-rw-r--r--drivers/i2c/busses/i2c-designware-common.c2
-rw-r--r--drivers/i2c/busses/i2c-designware-core.h9
-rw-r--r--drivers/i2c/busses/i2c-designware-master.c2
-rw-r--r--drivers/i2c/busses/i2c-designware-platdrv.c90
-rw-r--r--drivers/i2c/busses/i2c-mt65xx.c62
-rw-r--r--drivers/i2c/busses/i2c-omap.c8
-rw-r--r--drivers/i2c/busses/i2c-powermac.c17
-rw-r--r--drivers/i2c/busses/i2c-qcom-geni.c149
-rw-r--r--drivers/i2c/busses/i2c-qup.c14
-rw-r--r--drivers/i2c/busses/i2c-sh_mobile.c18
-rw-r--r--drivers/i2c/busses/i2c-synquacer.c2
-rw-r--r--drivers/i2c/busses/i2c-tegra.c4
-rw-r--r--drivers/i2c/busses/i2c-uniphier-f.c59
-rw-r--r--drivers/i2c/busses/i2c-zx2967.c8
-rw-r--r--drivers/i2c/i2c-core-base.c43
-rw-r--r--drivers/i2c/muxes/i2c-mux-gpmux.c4
-rw-r--r--drivers/i2c/muxes/i2c-mux-ltc4306.c2
-rw-r--r--drivers/i2c/muxes/i2c-mux-mlxcpld.c2
-rw-r--r--drivers/i2c/muxes/i2c-mux-pca954x.c2
-rw-r--r--drivers/misc/eeprom/at24.c43
23 files changed, 435 insertions, 319 deletions
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 451d4ae50e66..56ccb1ea7da5 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -432,12 +432,13 @@ config I2C_BCM_KONA
432 If you do not need KONA I2C interface, say N. 432 If you do not need KONA I2C interface, say N.
433 433
434config I2C_BRCMSTB 434config I2C_BRCMSTB
435 tristate "BRCM Settop I2C controller" 435 tristate "BRCM Settop/DSL I2C controller"
436 depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST 436 depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_63XX || \
437 COMPILE_TEST
437 default y 438 default y
438 help 439 help
439 If you say yes to this option, support will be included for the 440 If you say yes to this option, support will be included for the
440 I2C interface on the Broadcom Settop SoCs. 441 I2C interface on the Broadcom Settop/DSL SoCs.
441 442
442 If you do not need I2C interface, say N. 443 If you do not need I2C interface, say N.
443 444
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index a4f956c6d567..8dc9161ced38 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -82,6 +82,11 @@
82#define ASPEED_I2CD_INTR_RX_DONE BIT(2) 82#define ASPEED_I2CD_INTR_RX_DONE BIT(2)
83#define ASPEED_I2CD_INTR_TX_NAK BIT(1) 83#define ASPEED_I2CD_INTR_TX_NAK BIT(1)
84#define ASPEED_I2CD_INTR_TX_ACK BIT(0) 84#define ASPEED_I2CD_INTR_TX_ACK BIT(0)
85#define ASPEED_I2CD_INTR_MASTER_ERRORS \
86 (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \
87 ASPEED_I2CD_INTR_SCL_TIMEOUT | \
88 ASPEED_I2CD_INTR_ABNORMAL | \
89 ASPEED_I2CD_INTR_ARBIT_LOSS)
85#define ASPEED_I2CD_INTR_ALL \ 90#define ASPEED_I2CD_INTR_ALL \
86 (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \ 91 (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \
87 ASPEED_I2CD_INTR_BUS_RECOVER_DONE | \ 92 ASPEED_I2CD_INTR_BUS_RECOVER_DONE | \
@@ -137,7 +142,8 @@ struct aspeed_i2c_bus {
137 /* Synchronizes I/O mem access to base. */ 142 /* Synchronizes I/O mem access to base. */
138 spinlock_t lock; 143 spinlock_t lock;
139 struct completion cmd_complete; 144 struct completion cmd_complete;
140 u32 (*get_clk_reg_val)(u32 divisor); 145 u32 (*get_clk_reg_val)(struct device *dev,
146 u32 divisor);
141 unsigned long parent_clk_frequency; 147 unsigned long parent_clk_frequency;
142 u32 bus_frequency; 148 u32 bus_frequency;
143 /* Transaction state. */ 149 /* Transaction state. */
@@ -227,32 +233,26 @@ reset_out:
227} 233}
228 234
229#if IS_ENABLED(CONFIG_I2C_SLAVE) 235#if IS_ENABLED(CONFIG_I2C_SLAVE)
230static bool aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus) 236static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
231{ 237{
232 u32 command, irq_status, status_ack = 0; 238 u32 command, irq_handled = 0;
233 struct i2c_client *slave = bus->slave; 239 struct i2c_client *slave = bus->slave;
234 bool irq_handled = true;
235 u8 value; 240 u8 value;
236 241
237 if (!slave) { 242 if (!slave)
238 irq_handled = false; 243 return 0;
239 goto out;
240 }
241 244
242 command = readl(bus->base + ASPEED_I2C_CMD_REG); 245 command = readl(bus->base + ASPEED_I2C_CMD_REG);
243 irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
244 246
245 /* Slave was requested, restart state machine. */ 247 /* Slave was requested, restart state machine. */
246 if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) { 248 if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) {
247 status_ack |= ASPEED_I2CD_INTR_SLAVE_MATCH; 249 irq_handled |= ASPEED_I2CD_INTR_SLAVE_MATCH;
248 bus->slave_state = ASPEED_I2C_SLAVE_START; 250 bus->slave_state = ASPEED_I2C_SLAVE_START;
249 } 251 }
250 252
251 /* Slave is not currently active, irq was for someone else. */ 253 /* Slave is not currently active, irq was for someone else. */
252 if (bus->slave_state == ASPEED_I2C_SLAVE_STOP) { 254 if (bus->slave_state == ASPEED_I2C_SLAVE_STOP)
253 irq_handled = false; 255 return irq_handled;
254 goto out;
255 }
256 256
257 dev_dbg(bus->dev, "slave irq status 0x%08x, cmd 0x%08x\n", 257 dev_dbg(bus->dev, "slave irq status 0x%08x, cmd 0x%08x\n",
258 irq_status, command); 258 irq_status, command);
@@ -269,31 +269,31 @@ static bool aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus)
269 bus->slave_state = 269 bus->slave_state =
270 ASPEED_I2C_SLAVE_WRITE_REQUESTED; 270 ASPEED_I2C_SLAVE_WRITE_REQUESTED;
271 } 271 }
272 status_ack |= ASPEED_I2CD_INTR_RX_DONE; 272 irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
273 } 273 }
274 274
275 /* Slave was asked to stop. */ 275 /* Slave was asked to stop. */
276 if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) { 276 if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) {
277 status_ack |= ASPEED_I2CD_INTR_NORMAL_STOP; 277 irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP;
278 bus->slave_state = ASPEED_I2C_SLAVE_STOP; 278 bus->slave_state = ASPEED_I2C_SLAVE_STOP;
279 } 279 }
280 if (irq_status & ASPEED_I2CD_INTR_TX_NAK) { 280 if (irq_status & ASPEED_I2CD_INTR_TX_NAK) {
281 status_ack |= ASPEED_I2CD_INTR_TX_NAK; 281 irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
282 bus->slave_state = ASPEED_I2C_SLAVE_STOP; 282 bus->slave_state = ASPEED_I2C_SLAVE_STOP;
283 } 283 }
284 if (irq_status & ASPEED_I2CD_INTR_TX_ACK)
285 irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
284 286
285 switch (bus->slave_state) { 287 switch (bus->slave_state) {
286 case ASPEED_I2C_SLAVE_READ_REQUESTED: 288 case ASPEED_I2C_SLAVE_READ_REQUESTED:
287 if (irq_status & ASPEED_I2CD_INTR_TX_ACK) 289 if (irq_status & ASPEED_I2CD_INTR_TX_ACK)
288 dev_err(bus->dev, "Unexpected ACK on read request.\n"); 290 dev_err(bus->dev, "Unexpected ACK on read request.\n");
289 bus->slave_state = ASPEED_I2C_SLAVE_READ_PROCESSED; 291 bus->slave_state = ASPEED_I2C_SLAVE_READ_PROCESSED;
290
291 i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value); 292 i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
292 writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG); 293 writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
293 writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG); 294 writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
294 break; 295 break;
295 case ASPEED_I2C_SLAVE_READ_PROCESSED: 296 case ASPEED_I2C_SLAVE_READ_PROCESSED:
296 status_ack |= ASPEED_I2CD_INTR_TX_ACK;
297 if (!(irq_status & ASPEED_I2CD_INTR_TX_ACK)) 297 if (!(irq_status & ASPEED_I2CD_INTR_TX_ACK))
298 dev_err(bus->dev, 298 dev_err(bus->dev,
299 "Expected ACK after processed read.\n"); 299 "Expected ACK after processed read.\n");
@@ -317,13 +317,6 @@ static bool aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus)
317 break; 317 break;
318 } 318 }
319 319
320 if (status_ack != irq_status)
321 dev_err(bus->dev,
322 "irq handled != irq. expected %x, but was %x\n",
323 irq_status, status_ack);
324 writel(status_ack, bus->base + ASPEED_I2C_INTR_STS_REG);
325
326out:
327 return irq_handled; 320 return irq_handled;
328} 321}
329#endif /* CONFIG_I2C_SLAVE */ 322#endif /* CONFIG_I2C_SLAVE */
@@ -380,21 +373,21 @@ static int aspeed_i2c_is_irq_error(u32 irq_status)
380 return 0; 373 return 0;
381} 374}
382 375
383static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus) 376static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
384{ 377{
385 u32 irq_status, status_ack = 0, command = 0; 378 u32 irq_handled = 0, command = 0;
386 struct i2c_msg *msg; 379 struct i2c_msg *msg;
387 u8 recv_byte; 380 u8 recv_byte;
388 int ret; 381 int ret;
389 382
390 irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
391 /* Ack all interrupt bits. */
392 writel(irq_status, bus->base + ASPEED_I2C_INTR_STS_REG);
393
394 if (irq_status & ASPEED_I2CD_INTR_BUS_RECOVER_DONE) { 383 if (irq_status & ASPEED_I2CD_INTR_BUS_RECOVER_DONE) {
395 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 384 bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
396 status_ack |= ASPEED_I2CD_INTR_BUS_RECOVER_DONE; 385 irq_handled |= ASPEED_I2CD_INTR_BUS_RECOVER_DONE;
397 goto out_complete; 386 goto out_complete;
387 } else {
388 /* Master is not currently active, irq was for someone else. */
389 if (bus->master_state == ASPEED_I2C_MASTER_INACTIVE)
390 goto out_no_complete;
398 } 391 }
399 392
400 /* 393 /*
@@ -403,19 +396,22 @@ static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus)
403 * INACTIVE state. 396 * INACTIVE state.
404 */ 397 */
405 ret = aspeed_i2c_is_irq_error(irq_status); 398 ret = aspeed_i2c_is_irq_error(irq_status);
406 if (ret < 0) { 399 if (ret) {
407 dev_dbg(bus->dev, "received error interrupt: 0x%08x\n", 400 dev_dbg(bus->dev, "received error interrupt: 0x%08x\n",
408 irq_status); 401 irq_status);
409 bus->cmd_err = ret; 402 bus->cmd_err = ret;
410 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 403 bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
404 irq_handled |= (irq_status & ASPEED_I2CD_INTR_MASTER_ERRORS);
411 goto out_complete; 405 goto out_complete;
412 } 406 }
413 407
414 /* We are in an invalid state; reset bus to a known state. */ 408 /* We are in an invalid state; reset bus to a known state. */
415 if (!bus->msgs) { 409 if (!bus->msgs) {
416 dev_err(bus->dev, "bus in unknown state\n"); 410 dev_err(bus->dev, "bus in unknown state. irq_status: 0x%x\n",
411 irq_status);
417 bus->cmd_err = -EIO; 412 bus->cmd_err = -EIO;
418 if (bus->master_state != ASPEED_I2C_MASTER_STOP) 413 if (bus->master_state != ASPEED_I2C_MASTER_STOP &&
414 bus->master_state != ASPEED_I2C_MASTER_INACTIVE)
419 aspeed_i2c_do_stop(bus); 415 aspeed_i2c_do_stop(bus);
420 goto out_no_complete; 416 goto out_no_complete;
421 } 417 }
@@ -428,13 +424,18 @@ static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus)
428 */ 424 */
429 if (bus->master_state == ASPEED_I2C_MASTER_START) { 425 if (bus->master_state == ASPEED_I2C_MASTER_START) {
430 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) { 426 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) {
427 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_NAK))) {
428 bus->cmd_err = -ENXIO;
429 bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
430 goto out_complete;
431 }
431 pr_devel("no slave present at %02x\n", msg->addr); 432 pr_devel("no slave present at %02x\n", msg->addr);
432 status_ack |= ASPEED_I2CD_INTR_TX_NAK; 433 irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
433 bus->cmd_err = -ENXIO; 434 bus->cmd_err = -ENXIO;
434 aspeed_i2c_do_stop(bus); 435 aspeed_i2c_do_stop(bus);
435 goto out_no_complete; 436 goto out_no_complete;
436 } 437 }
437 status_ack |= ASPEED_I2CD_INTR_TX_ACK; 438 irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
438 if (msg->len == 0) { /* SMBUS_QUICK */ 439 if (msg->len == 0) { /* SMBUS_QUICK */
439 aspeed_i2c_do_stop(bus); 440 aspeed_i2c_do_stop(bus);
440 goto out_no_complete; 441 goto out_no_complete;
@@ -449,14 +450,14 @@ static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus)
449 case ASPEED_I2C_MASTER_TX: 450 case ASPEED_I2C_MASTER_TX:
450 if (unlikely(irq_status & ASPEED_I2CD_INTR_TX_NAK)) { 451 if (unlikely(irq_status & ASPEED_I2CD_INTR_TX_NAK)) {
451 dev_dbg(bus->dev, "slave NACKed TX\n"); 452 dev_dbg(bus->dev, "slave NACKed TX\n");
452 status_ack |= ASPEED_I2CD_INTR_TX_NAK; 453 irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
453 goto error_and_stop; 454 goto error_and_stop;
454 } else if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) { 455 } else if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) {
455 dev_err(bus->dev, "slave failed to ACK TX\n"); 456 dev_err(bus->dev, "slave failed to ACK TX\n");
456 goto error_and_stop; 457 goto error_and_stop;
457 } 458 }
458 status_ack |= ASPEED_I2CD_INTR_TX_ACK; 459 irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
459 /* fallthrough intended */ 460 /* fall through */
460 case ASPEED_I2C_MASTER_TX_FIRST: 461 case ASPEED_I2C_MASTER_TX_FIRST:
461 if (bus->buf_index < msg->len) { 462 if (bus->buf_index < msg->len) {
462 bus->master_state = ASPEED_I2C_MASTER_TX; 463 bus->master_state = ASPEED_I2C_MASTER_TX;
@@ -472,13 +473,13 @@ static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus)
472 /* RX may not have completed yet (only address cycle) */ 473 /* RX may not have completed yet (only address cycle) */
473 if (!(irq_status & ASPEED_I2CD_INTR_RX_DONE)) 474 if (!(irq_status & ASPEED_I2CD_INTR_RX_DONE))
474 goto out_no_complete; 475 goto out_no_complete;
475 /* fallthrough intended */ 476 /* fall through */
476 case ASPEED_I2C_MASTER_RX: 477 case ASPEED_I2C_MASTER_RX:
477 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_RX_DONE))) { 478 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_RX_DONE))) {
478 dev_err(bus->dev, "master failed to RX\n"); 479 dev_err(bus->dev, "master failed to RX\n");
479 goto error_and_stop; 480 goto error_and_stop;
480 } 481 }
481 status_ack |= ASPEED_I2CD_INTR_RX_DONE; 482 irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
482 483
483 recv_byte = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8; 484 recv_byte = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
484 msg->buf[bus->buf_index++] = recv_byte; 485 msg->buf[bus->buf_index++] = recv_byte;
@@ -506,11 +507,13 @@ static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus)
506 goto out_no_complete; 507 goto out_no_complete;
507 case ASPEED_I2C_MASTER_STOP: 508 case ASPEED_I2C_MASTER_STOP:
508 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_NORMAL_STOP))) { 509 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_NORMAL_STOP))) {
509 dev_err(bus->dev, "master failed to STOP\n"); 510 dev_err(bus->dev,
511 "master failed to STOP. irq_status:0x%x\n",
512 irq_status);
510 bus->cmd_err = -EIO; 513 bus->cmd_err = -EIO;
511 /* Do not STOP as we have already tried. */ 514 /* Do not STOP as we have already tried. */
512 } else { 515 } else {
513 status_ack |= ASPEED_I2CD_INTR_NORMAL_STOP; 516 irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP;
514 } 517 }
515 518
516 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 519 bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
@@ -540,33 +543,57 @@ out_complete:
540 bus->master_xfer_result = bus->msgs_index + 1; 543 bus->master_xfer_result = bus->msgs_index + 1;
541 complete(&bus->cmd_complete); 544 complete(&bus->cmd_complete);
542out_no_complete: 545out_no_complete:
543 if (irq_status != status_ack) 546 return irq_handled;
544 dev_err(bus->dev,
545 "irq handled != irq. expected 0x%08x, but was 0x%08x\n",
546 irq_status, status_ack);
547 return !!irq_status;
548} 547}
549 548
550static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id) 549static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
551{ 550{
552 struct aspeed_i2c_bus *bus = dev_id; 551 struct aspeed_i2c_bus *bus = dev_id;
553 bool ret; 552 u32 irq_received, irq_remaining, irq_handled;
554 553
555 spin_lock(&bus->lock); 554 spin_lock(&bus->lock);
555 irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
556 /* Ack all interrupts except for Rx done */
557 writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE,
558 bus->base + ASPEED_I2C_INTR_STS_REG);
559 irq_remaining = irq_received;
556 560
557#if IS_ENABLED(CONFIG_I2C_SLAVE) 561#if IS_ENABLED(CONFIG_I2C_SLAVE)
558 if (aspeed_i2c_slave_irq(bus)) { 562 /*
559 dev_dbg(bus->dev, "irq handled by slave.\n"); 563 * In most cases, interrupt bits will be set one by one, although
560 ret = true; 564 * multiple interrupt bits could be set at the same time. It's also
561 goto out; 565 * possible that master interrupt bits could be set along with slave
566 * interrupt bits. Each case needs to be handled using corresponding
567 * handlers depending on the current state.
568 */
569 if (bus->master_state != ASPEED_I2C_MASTER_INACTIVE) {
570 irq_handled = aspeed_i2c_master_irq(bus, irq_remaining);
571 irq_remaining &= ~irq_handled;
572 if (irq_remaining)
573 irq_handled |= aspeed_i2c_slave_irq(bus, irq_remaining);
574 } else {
575 irq_handled = aspeed_i2c_slave_irq(bus, irq_remaining);
576 irq_remaining &= ~irq_handled;
577 if (irq_remaining)
578 irq_handled |= aspeed_i2c_master_irq(bus,
579 irq_remaining);
562 } 580 }
581#else
582 irq_handled = aspeed_i2c_master_irq(bus, irq_remaining);
563#endif /* CONFIG_I2C_SLAVE */ 583#endif /* CONFIG_I2C_SLAVE */
564 584
565 ret = aspeed_i2c_master_irq(bus); 585 irq_remaining &= ~irq_handled;
586 if (irq_remaining)
587 dev_err(bus->dev,
588 "irq handled != irq. expected 0x%08x, but was 0x%08x\n",
589 irq_received, irq_handled);
566 590
567out: 591 /* Ack Rx done */
592 if (irq_received & ASPEED_I2CD_INTR_RX_DONE)
593 writel(ASPEED_I2CD_INTR_RX_DONE,
594 bus->base + ASPEED_I2C_INTR_STS_REG);
568 spin_unlock(&bus->lock); 595 spin_unlock(&bus->lock);
569 return ret ? IRQ_HANDLED : IRQ_NONE; 596 return irq_remaining ? IRQ_NONE : IRQ_HANDLED;
570} 597}
571 598
572static int aspeed_i2c_master_xfer(struct i2c_adapter *adap, 599static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
@@ -684,16 +711,27 @@ static const struct i2c_algorithm aspeed_i2c_algo = {
684#endif /* CONFIG_I2C_SLAVE */ 711#endif /* CONFIG_I2C_SLAVE */
685}; 712};
686 713
687static u32 aspeed_i2c_get_clk_reg_val(u32 clk_high_low_max, u32 divisor) 714static u32 aspeed_i2c_get_clk_reg_val(struct device *dev,
715 u32 clk_high_low_mask,
716 u32 divisor)
688{ 717{
689 u32 base_clk, clk_high, clk_low, tmp; 718 u32 base_clk_divisor, clk_high_low_max, clk_high, clk_low, tmp;
719
720 /*
721 * SCL_high and SCL_low represent a value 1 greater than what is stored
722 * since a zero divider is meaningless. Thus, the max value each can
723 * store is every bit set + 1. Since SCL_high and SCL_low are added
724 * together (see below), the max value of both is the max value of one
725 * them times two.
726 */
727 clk_high_low_max = (clk_high_low_mask + 1) * 2;
690 728
691 /* 729 /*
692 * The actual clock frequency of SCL is: 730 * The actual clock frequency of SCL is:
693 * SCL_freq = APB_freq / (base_freq * (SCL_high + SCL_low)) 731 * SCL_freq = APB_freq / (base_freq * (SCL_high + SCL_low))
694 * = APB_freq / divisor 732 * = APB_freq / divisor
695 * where base_freq is a programmable clock divider; its value is 733 * where base_freq is a programmable clock divider; its value is
696 * base_freq = 1 << base_clk 734 * base_freq = 1 << base_clk_divisor
697 * SCL_high is the number of base_freq clock cycles that SCL stays high 735 * SCL_high is the number of base_freq clock cycles that SCL stays high
698 * and SCL_low is the number of base_freq clock cycles that SCL stays 736 * and SCL_low is the number of base_freq clock cycles that SCL stays
699 * low for a period of SCL. 737 * low for a period of SCL.
@@ -703,47 +741,59 @@ static u32 aspeed_i2c_get_clk_reg_val(u32 clk_high_low_max, u32 divisor)
703 * SCL_low = clk_low + 1 741 * SCL_low = clk_low + 1
704 * Thus, 742 * Thus,
705 * SCL_freq = APB_freq / 743 * SCL_freq = APB_freq /
706 * ((1 << base_clk) * (clk_high + 1 + clk_low + 1)) 744 * ((1 << base_clk_divisor) * (clk_high + 1 + clk_low + 1))
707 * The documentation recommends clk_high >= clk_high_max / 2 and 745 * The documentation recommends clk_high >= clk_high_max / 2 and
708 * clk_low >= clk_low_max / 2 - 1 when possible; this last constraint 746 * clk_low >= clk_low_max / 2 - 1 when possible; this last constraint
709 * gives us the following solution: 747 * gives us the following solution:
710 */ 748 */
711 base_clk = divisor > clk_high_low_max ? 749 base_clk_divisor = divisor > clk_high_low_max ?
712 ilog2((divisor - 1) / clk_high_low_max) + 1 : 0; 750 ilog2((divisor - 1) / clk_high_low_max) + 1 : 0;
713 tmp = (divisor + (1 << base_clk) - 1) >> base_clk;
714 clk_low = tmp / 2;
715 clk_high = tmp - clk_low;
716 751
717 if (clk_high) 752 if (base_clk_divisor > ASPEED_I2CD_TIME_BASE_DIVISOR_MASK) {
718 clk_high--; 753 base_clk_divisor = ASPEED_I2CD_TIME_BASE_DIVISOR_MASK;
754 clk_low = clk_high_low_mask;
755 clk_high = clk_high_low_mask;
756 dev_err(dev,
757 "clamping clock divider: divider requested, %u, is greater than largest possible divider, %u.\n",
758 divisor, (1 << base_clk_divisor) * clk_high_low_max);
759 } else {
760 tmp = (divisor + (1 << base_clk_divisor) - 1)
761 >> base_clk_divisor;
762 clk_low = tmp / 2;
763 clk_high = tmp - clk_low;
764
765 if (clk_high)
766 clk_high--;
719 767
720 if (clk_low) 768 if (clk_low)
721 clk_low--; 769 clk_low--;
770 }
722 771
723 772
724 return ((clk_high << ASPEED_I2CD_TIME_SCL_HIGH_SHIFT) 773 return ((clk_high << ASPEED_I2CD_TIME_SCL_HIGH_SHIFT)
725 & ASPEED_I2CD_TIME_SCL_HIGH_MASK) 774 & ASPEED_I2CD_TIME_SCL_HIGH_MASK)
726 | ((clk_low << ASPEED_I2CD_TIME_SCL_LOW_SHIFT) 775 | ((clk_low << ASPEED_I2CD_TIME_SCL_LOW_SHIFT)
727 & ASPEED_I2CD_TIME_SCL_LOW_MASK) 776 & ASPEED_I2CD_TIME_SCL_LOW_MASK)
728 | (base_clk & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK); 777 | (base_clk_divisor
778 & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK);
729} 779}
730 780
731static u32 aspeed_i2c_24xx_get_clk_reg_val(u32 divisor) 781static u32 aspeed_i2c_24xx_get_clk_reg_val(struct device *dev, u32 divisor)
732{ 782{
733 /* 783 /*
734 * clk_high and clk_low are each 3 bits wide, so each can hold a max 784 * clk_high and clk_low are each 3 bits wide, so each can hold a max
735 * value of 8 giving a clk_high_low_max of 16. 785 * value of 8 giving a clk_high_low_max of 16.
736 */ 786 */
737 return aspeed_i2c_get_clk_reg_val(16, divisor); 787 return aspeed_i2c_get_clk_reg_val(dev, GENMASK(2, 0), divisor);
738} 788}
739 789
740static u32 aspeed_i2c_25xx_get_clk_reg_val(u32 divisor) 790static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor)
741{ 791{
742 /* 792 /*
743 * clk_high and clk_low are each 4 bits wide, so each can hold a max 793 * clk_high and clk_low are each 4 bits wide, so each can hold a max
744 * value of 16 giving a clk_high_low_max of 32. 794 * value of 16 giving a clk_high_low_max of 32.
745 */ 795 */
746 return aspeed_i2c_get_clk_reg_val(32, divisor); 796 return aspeed_i2c_get_clk_reg_val(dev, GENMASK(3, 0), divisor);
747} 797}
748 798
749/* precondition: bus.lock has been acquired. */ 799/* precondition: bus.lock has been acquired. */
@@ -756,7 +806,7 @@ static int aspeed_i2c_init_clk(struct aspeed_i2c_bus *bus)
756 clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK | 806 clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK |
757 ASPEED_I2CD_TIME_THDSTA_MASK | 807 ASPEED_I2CD_TIME_THDSTA_MASK |
758 ASPEED_I2CD_TIME_TACST_MASK); 808 ASPEED_I2CD_TIME_TACST_MASK);
759 clk_reg_val |= bus->get_clk_reg_val(divisor); 809 clk_reg_val |= bus->get_clk_reg_val(bus->dev, divisor);
760 writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1); 810 writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1);
761 writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2); 811 writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2);
762 812
@@ -872,7 +922,8 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
872 if (!match) 922 if (!match)
873 bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val; 923 bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val;
874 else 924 else
875 bus->get_clk_reg_val = (u32 (*)(u32))match->data; 925 bus->get_clk_reg_val = (u32 (*)(struct device *, u32))
926 match->data;
876 927
877 /* Initialize the I2C adapter */ 928 /* Initialize the I2C adapter */
878 spin_lock_init(&bus->lock); 929 spin_lock_init(&bus->lock);
diff --git a/drivers/i2c/busses/i2c-designware-baytrail.c b/drivers/i2c/busses/i2c-designware-baytrail.c
index a2a275cfc1f6..9ca1feaba98f 100644
--- a/drivers/i2c/busses/i2c-designware-baytrail.c
+++ b/drivers/i2c/busses/i2c-designware-baytrail.c
@@ -164,7 +164,7 @@ int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
164 dev_info(dev->dev, "I2C bus managed by PUNIT\n"); 164 dev_info(dev->dev, "I2C bus managed by PUNIT\n");
165 dev->acquire_lock = baytrail_i2c_acquire; 165 dev->acquire_lock = baytrail_i2c_acquire;
166 dev->release_lock = baytrail_i2c_release; 166 dev->release_lock = baytrail_i2c_release;
167 dev->pm_disabled = true; 167 dev->shared_with_punit = true;
168 168
169 pm_qos_add_request(&dev->pm_qos, PM_QOS_CPU_DMA_LATENCY, 169 pm_qos_add_request(&dev->pm_qos, PM_QOS_CPU_DMA_LATENCY,
170 PM_QOS_DEFAULT_VALUE); 170 PM_QOS_DEFAULT_VALUE);
diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 69ec4a791f23..36271cd75342 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -201,6 +201,8 @@ int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev)
201 dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n", 201 dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n",
202 dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK, 202 dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK,
203 dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT); 203 dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT);
204 } else if (dev->set_sda_hold_time) {
205 dev->set_sda_hold_time(dev);
204 } else if (dev->sda_hold_time) { 206 } else if (dev->sda_hold_time) {
205 dev_warn(dev->dev, 207 dev_warn(dev->dev,
206 "Hardware too old to adjust SDA hold time.\n"); 208 "Hardware too old to adjust SDA hold time.\n");
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index e367b1af4ab2..9ec8394f4787 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -212,7 +212,7 @@
212 * @pm_qos: pm_qos_request used while holding a hardware lock on the bus 212 * @pm_qos: pm_qos_request used while holding a hardware lock on the bus
213 * @acquire_lock: function to acquire a hardware lock on the bus 213 * @acquire_lock: function to acquire a hardware lock on the bus
214 * @release_lock: function to release a hardware lock on the bus 214 * @release_lock: function to release a hardware lock on the bus
215 * @pm_disabled: true if power-management should be disabled for this i2c-bus 215 * @shared_with_punit: true if this bus is shared with the SoCs PUNIT
216 * @disable: function to disable the controller 216 * @disable: function to disable the controller
217 * @disable_int: function to disable all interrupts 217 * @disable_int: function to disable all interrupts
218 * @init: function to initialize the I2C hardware 218 * @init: function to initialize the I2C hardware
@@ -225,6 +225,7 @@
225struct dw_i2c_dev { 225struct dw_i2c_dev {
226 struct device *dev; 226 struct device *dev;
227 void __iomem *base; 227 void __iomem *base;
228 void __iomem *ext;
228 struct completion cmd_complete; 229 struct completion cmd_complete;
229 struct clk *clk; 230 struct clk *clk;
230 struct reset_control *rst; 231 struct reset_control *rst;
@@ -265,10 +266,11 @@ struct dw_i2c_dev {
265 struct pm_qos_request pm_qos; 266 struct pm_qos_request pm_qos;
266 int (*acquire_lock)(struct dw_i2c_dev *dev); 267 int (*acquire_lock)(struct dw_i2c_dev *dev);
267 void (*release_lock)(struct dw_i2c_dev *dev); 268 void (*release_lock)(struct dw_i2c_dev *dev);
268 bool pm_disabled; 269 bool shared_with_punit;
269 void (*disable)(struct dw_i2c_dev *dev); 270 void (*disable)(struct dw_i2c_dev *dev);
270 void (*disable_int)(struct dw_i2c_dev *dev); 271 void (*disable_int)(struct dw_i2c_dev *dev);
271 int (*init)(struct dw_i2c_dev *dev); 272 int (*init)(struct dw_i2c_dev *dev);
273 int (*set_sda_hold_time)(struct dw_i2c_dev *dev);
272 int mode; 274 int mode;
273 struct i2c_bus_recovery_info rinfo; 275 struct i2c_bus_recovery_info rinfo;
274}; 276};
@@ -276,8 +278,11 @@ struct dw_i2c_dev {
276#define ACCESS_SWAP 0x00000001 278#define ACCESS_SWAP 0x00000001
277#define ACCESS_16BIT 0x00000002 279#define ACCESS_16BIT 0x00000002
278#define ACCESS_INTR_MASK 0x00000004 280#define ACCESS_INTR_MASK 0x00000004
281#define ACCESS_NO_IRQ_SUSPEND 0x00000008
279 282
280#define MODEL_CHERRYTRAIL 0x00000100 283#define MODEL_CHERRYTRAIL 0x00000100
284#define MODEL_MSCC_OCELOT 0x00000200
285#define MODEL_MASK 0x00000f00
281 286
282u32 dw_readl(struct dw_i2c_dev *dev, int offset); 287u32 dw_readl(struct dw_i2c_dev *dev, int offset);
283void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset); 288void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset);
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index 18cc324f3ca9..8d1bc44d2530 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -709,7 +709,7 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
709 adap->dev.parent = dev->dev; 709 adap->dev.parent = dev->dev;
710 i2c_set_adapdata(adap, dev); 710 i2c_set_adapdata(adap, dev);
711 711
712 if (dev->pm_disabled) { 712 if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
713 irq_flags = IRQF_NO_SUSPEND; 713 irq_flags = IRQF_NO_SUSPEND;
714 } else { 714 } else {
715 irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND; 715 irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index b5750fd85125..997bbb3d925f 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -85,10 +85,6 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev)
85 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 85 struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
86 struct i2c_timings *t = &dev->timings; 86 struct i2c_timings *t = &dev->timings;
87 u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0; 87 u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0;
88 acpi_handle handle = ACPI_HANDLE(&pdev->dev);
89 const struct acpi_device_id *id;
90 struct acpi_device *adev;
91 const char *uid;
92 88
93 dev->adapter.nr = -1; 89 dev->adapter.nr = -1;
94 dev->tx_fifo_depth = 32; 90 dev->tx_fifo_depth = 32;
@@ -119,22 +115,6 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev)
119 break; 115 break;
120 } 116 }
121 117
122 id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev);
123 if (id && id->driver_data)
124 dev->flags |= (u32)id->driver_data;
125
126 if (acpi_bus_get_device(handle, &adev))
127 return -ENODEV;
128
129 /*
130 * Cherrytrail I2C7 gets used for the PMIC which gets accessed
131 * through ACPI opregions during late suspend / early resume
132 * disable pm for it.
133 */
134 uid = adev->pnp.unique_id;
135 if ((dev->flags & MODEL_CHERRYTRAIL) && !strcmp(uid, "7"))
136 dev->pm_disabled = true;
137
138 return 0; 118 return 0;
139} 119}
140 120
@@ -143,8 +123,8 @@ static const struct acpi_device_id dw_i2c_acpi_match[] = {
143 { "INT33C3", 0 }, 123 { "INT33C3", 0 },
144 { "INT3432", 0 }, 124 { "INT3432", 0 },
145 { "INT3433", 0 }, 125 { "INT3433", 0 },
146 { "80860F41", 0 }, 126 { "80860F41", ACCESS_NO_IRQ_SUSPEND },
147 { "808622C1", MODEL_CHERRYTRAIL }, 127 { "808622C1", ACCESS_NO_IRQ_SUSPEND | MODEL_CHERRYTRAIL },
148 { "AMD0010", ACCESS_INTR_MASK }, 128 { "AMD0010", ACCESS_INTR_MASK },
149 { "AMDI0010", ACCESS_INTR_MASK }, 129 { "AMDI0010", ACCESS_INTR_MASK },
150 { "AMDI0510", 0 }, 130 { "AMDI0510", 0 },
@@ -161,6 +141,51 @@ static inline int dw_i2c_acpi_configure(struct platform_device *pdev)
161} 141}
162#endif 142#endif
163 143
144#ifdef CONFIG_OF
145#define MSCC_ICPU_CFG_TWI_DELAY 0x0
146#define MSCC_ICPU_CFG_TWI_DELAY_ENABLE BIT(0)
147#define MSCC_ICPU_CFG_TWI_SPIKE_FILTER 0x4
148
149static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev)
150{
151 writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE,
152 dev->ext + MSCC_ICPU_CFG_TWI_DELAY);
153
154 return 0;
155}
156
157static int dw_i2c_of_configure(struct platform_device *pdev)
158{
159 struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
160 struct resource *mem;
161
162 switch (dev->flags & MODEL_MASK) {
163 case MODEL_MSCC_OCELOT:
164 mem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
165 dev->ext = devm_ioremap_resource(&pdev->dev, mem);
166 if (!IS_ERR(dev->ext))
167 dev->set_sda_hold_time = mscc_twi_set_sda_hold_time;
168 break;
169 default:
170 break;
171 }
172
173 return 0;
174}
175
176static const struct of_device_id dw_i2c_of_match[] = {
177 { .compatible = "snps,designware-i2c", },
178 { .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT },
179 {},
180};
181MODULE_DEVICE_TABLE(of, dw_i2c_of_match);
182#else
183static inline int dw_i2c_of_configure(struct platform_device *pdev)
184{
185 return -ENODEV;
186}
187#endif
188
164static void i2c_dw_configure_master(struct dw_i2c_dev *dev) 189static void i2c_dw_configure_master(struct dw_i2c_dev *dev)
165{ 190{
166 struct i2c_timings *t = &dev->timings; 191 struct i2c_timings *t = &dev->timings;
@@ -221,7 +246,7 @@ static void dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *dev)
221{ 246{
222 pm_runtime_disable(dev->dev); 247 pm_runtime_disable(dev->dev);
223 248
224 if (dev->pm_disabled) 249 if (dev->shared_with_punit)
225 pm_runtime_put_noidle(dev->dev); 250 pm_runtime_put_noidle(dev->dev);
226} 251}
227 252
@@ -291,6 +316,11 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
291 else 316 else
292 t->bus_freq_hz = 400000; 317 t->bus_freq_hz = 400000;
293 318
319 dev->flags |= (uintptr_t)device_get_match_data(&pdev->dev);
320
321 if (pdev->dev.of_node)
322 dw_i2c_of_configure(pdev);
323
294 if (has_acpi_companion(&pdev->dev)) 324 if (has_acpi_companion(&pdev->dev))
295 dw_i2c_acpi_configure(pdev); 325 dw_i2c_acpi_configure(pdev);
296 326
@@ -348,7 +378,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
348 pm_runtime_use_autosuspend(&pdev->dev); 378 pm_runtime_use_autosuspend(&pdev->dev);
349 pm_runtime_set_active(&pdev->dev); 379 pm_runtime_set_active(&pdev->dev);
350 380
351 if (dev->pm_disabled) 381 if (dev->shared_with_punit)
352 pm_runtime_get_noresume(&pdev->dev); 382 pm_runtime_get_noresume(&pdev->dev);
353 383
354 pm_runtime_enable(&pdev->dev); 384 pm_runtime_enable(&pdev->dev);
@@ -393,14 +423,6 @@ static int dw_i2c_plat_remove(struct platform_device *pdev)
393 return 0; 423 return 0;
394} 424}
395 425
396#ifdef CONFIG_OF
397static const struct of_device_id dw_i2c_of_match[] = {
398 { .compatible = "snps,designware-i2c", },
399 {},
400};
401MODULE_DEVICE_TABLE(of, dw_i2c_of_match);
402#endif
403
404#ifdef CONFIG_PM_SLEEP 426#ifdef CONFIG_PM_SLEEP
405static int dw_i2c_plat_prepare(struct device *dev) 427static int dw_i2c_plat_prepare(struct device *dev)
406{ 428{
@@ -434,7 +456,7 @@ static int dw_i2c_plat_suspend(struct device *dev)
434{ 456{
435 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); 457 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
436 458
437 if (i_dev->pm_disabled) 459 if (i_dev->shared_with_punit)
438 return 0; 460 return 0;
439 461
440 i_dev->disable(i_dev); 462 i_dev->disable(i_dev);
@@ -447,7 +469,7 @@ static int dw_i2c_plat_resume(struct device *dev)
447{ 469{
448 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); 470 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
449 471
450 if (!i_dev->pm_disabled) 472 if (!i_dev->shared_with_punit)
451 i2c_dw_prepare_clk(i_dev, true); 473 i2c_dw_prepare_clk(i_dev, true);
452 474
453 i_dev->init(i_dev); 475 i_dev->init(i_dev);
diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c
index 1e57f58fcb00..a74ef76705e0 100644
--- a/drivers/i2c/busses/i2c-mt65xx.c
+++ b/drivers/i2c/busses/i2c-mt65xx.c
@@ -441,6 +441,8 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
441 u16 control_reg; 441 u16 control_reg;
442 u16 restart_flag = 0; 442 u16 restart_flag = 0;
443 u32 reg_4g_mode; 443 u32 reg_4g_mode;
444 u8 *dma_rd_buf = NULL;
445 u8 *dma_wr_buf = NULL;
444 dma_addr_t rpaddr = 0; 446 dma_addr_t rpaddr = 0;
445 dma_addr_t wpaddr = 0; 447 dma_addr_t wpaddr = 0;
446 int ret; 448 int ret;
@@ -500,10 +502,18 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
500 if (i2c->op == I2C_MASTER_RD) { 502 if (i2c->op == I2C_MASTER_RD) {
501 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG); 503 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
502 writel(I2C_DMA_CON_RX, i2c->pdmabase + OFFSET_CON); 504 writel(I2C_DMA_CON_RX, i2c->pdmabase + OFFSET_CON);
503 rpaddr = dma_map_single(i2c->dev, msgs->buf, 505
506 dma_rd_buf = i2c_get_dma_safe_msg_buf(msgs, 0);
507 if (!dma_rd_buf)
508 return -ENOMEM;
509
510 rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
504 msgs->len, DMA_FROM_DEVICE); 511 msgs->len, DMA_FROM_DEVICE);
505 if (dma_mapping_error(i2c->dev, rpaddr)) 512 if (dma_mapping_error(i2c->dev, rpaddr)) {
513 i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, false);
514
506 return -ENOMEM; 515 return -ENOMEM;
516 }
507 517
508 if (i2c->dev_comp->support_33bits) { 518 if (i2c->dev_comp->support_33bits) {
509 reg_4g_mode = mtk_i2c_set_4g_mode(rpaddr); 519 reg_4g_mode = mtk_i2c_set_4g_mode(rpaddr);
@@ -515,10 +525,18 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
515 } else if (i2c->op == I2C_MASTER_WR) { 525 } else if (i2c->op == I2C_MASTER_WR) {
516 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG); 526 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG);
517 writel(I2C_DMA_CON_TX, i2c->pdmabase + OFFSET_CON); 527 writel(I2C_DMA_CON_TX, i2c->pdmabase + OFFSET_CON);
518 wpaddr = dma_map_single(i2c->dev, msgs->buf, 528
529 dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 0);
530 if (!dma_wr_buf)
531 return -ENOMEM;
532
533 wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
519 msgs->len, DMA_TO_DEVICE); 534 msgs->len, DMA_TO_DEVICE);
520 if (dma_mapping_error(i2c->dev, wpaddr)) 535 if (dma_mapping_error(i2c->dev, wpaddr)) {
536 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
537
521 return -ENOMEM; 538 return -ENOMEM;
539 }
522 540
523 if (i2c->dev_comp->support_33bits) { 541 if (i2c->dev_comp->support_33bits) {
524 reg_4g_mode = mtk_i2c_set_4g_mode(wpaddr); 542 reg_4g_mode = mtk_i2c_set_4g_mode(wpaddr);
@@ -530,16 +548,39 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
530 } else { 548 } else {
531 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_INT_FLAG); 549 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_INT_FLAG);
532 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_CON); 550 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_CON);
533 wpaddr = dma_map_single(i2c->dev, msgs->buf, 551
552 dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 0);
553 if (!dma_wr_buf)
554 return -ENOMEM;
555
556 wpaddr = dma_map_single(i2c->dev, dma_wr_buf,
534 msgs->len, DMA_TO_DEVICE); 557 msgs->len, DMA_TO_DEVICE);
535 if (dma_mapping_error(i2c->dev, wpaddr)) 558 if (dma_mapping_error(i2c->dev, wpaddr)) {
559 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
560
536 return -ENOMEM; 561 return -ENOMEM;
537 rpaddr = dma_map_single(i2c->dev, (msgs + 1)->buf, 562 }
563
564 dma_rd_buf = i2c_get_dma_safe_msg_buf((msgs + 1), 0);
565 if (!dma_rd_buf) {
566 dma_unmap_single(i2c->dev, wpaddr,
567 msgs->len, DMA_TO_DEVICE);
568
569 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
570
571 return -ENOMEM;
572 }
573
574 rpaddr = dma_map_single(i2c->dev, dma_rd_buf,
538 (msgs + 1)->len, 575 (msgs + 1)->len,
539 DMA_FROM_DEVICE); 576 DMA_FROM_DEVICE);
540 if (dma_mapping_error(i2c->dev, rpaddr)) { 577 if (dma_mapping_error(i2c->dev, rpaddr)) {
541 dma_unmap_single(i2c->dev, wpaddr, 578 dma_unmap_single(i2c->dev, wpaddr,
542 msgs->len, DMA_TO_DEVICE); 579 msgs->len, DMA_TO_DEVICE);
580
581 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false);
582 i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), false);
583
543 return -ENOMEM; 584 return -ENOMEM;
544 } 585 }
545 586
@@ -578,14 +619,21 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs,
578 if (i2c->op == I2C_MASTER_WR) { 619 if (i2c->op == I2C_MASTER_WR) {
579 dma_unmap_single(i2c->dev, wpaddr, 620 dma_unmap_single(i2c->dev, wpaddr,
580 msgs->len, DMA_TO_DEVICE); 621 msgs->len, DMA_TO_DEVICE);
622
623 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
581 } else if (i2c->op == I2C_MASTER_RD) { 624 } else if (i2c->op == I2C_MASTER_RD) {
582 dma_unmap_single(i2c->dev, rpaddr, 625 dma_unmap_single(i2c->dev, rpaddr,
583 msgs->len, DMA_FROM_DEVICE); 626 msgs->len, DMA_FROM_DEVICE);
627
628 i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, true);
584 } else { 629 } else {
585 dma_unmap_single(i2c->dev, wpaddr, msgs->len, 630 dma_unmap_single(i2c->dev, wpaddr, msgs->len,
586 DMA_TO_DEVICE); 631 DMA_TO_DEVICE);
587 dma_unmap_single(i2c->dev, rpaddr, (msgs + 1)->len, 632 dma_unmap_single(i2c->dev, rpaddr, (msgs + 1)->len,
588 DMA_FROM_DEVICE); 633 DMA_FROM_DEVICE);
634
635 i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true);
636 i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), true);
589 } 637 }
590 638
591 if (ret == 0) { 639 if (ret == 0) {
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index 65d06a819307..b1086bfb0465 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -661,9 +661,6 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
661 dev_dbg(omap->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n", 661 dev_dbg(omap->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
662 msg->addr, msg->len, msg->flags, stop); 662 msg->addr, msg->len, msg->flags, stop);
663 663
664 if (msg->len == 0)
665 return -EINVAL;
666
667 omap->receiver = !!(msg->flags & I2C_M_RD); 664 omap->receiver = !!(msg->flags & I2C_M_RD);
668 omap_i2c_resize_fifo(omap, msg->len, omap->receiver); 665 omap_i2c_resize_fifo(omap, msg->len, omap->receiver);
669 666
@@ -1179,6 +1176,10 @@ static const struct i2c_algorithm omap_i2c_algo = {
1179 .functionality = omap_i2c_func, 1176 .functionality = omap_i2c_func,
1180}; 1177};
1181 1178
1179static const struct i2c_adapter_quirks omap_i2c_quirks = {
1180 .flags = I2C_AQ_NO_ZERO_LEN,
1181};
1182
1182#ifdef CONFIG_OF 1183#ifdef CONFIG_OF
1183static struct omap_i2c_bus_platform_data omap2420_pdata = { 1184static struct omap_i2c_bus_platform_data omap2420_pdata = {
1184 .rev = OMAP_I2C_IP_VERSION_1, 1185 .rev = OMAP_I2C_IP_VERSION_1,
@@ -1453,6 +1454,7 @@ omap_i2c_probe(struct platform_device *pdev)
1453 adap->class = I2C_CLASS_DEPRECATED; 1454 adap->class = I2C_CLASS_DEPRECATED;
1454 strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name)); 1455 strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
1455 adap->algo = &omap_i2c_algo; 1456 adap->algo = &omap_i2c_algo;
1457 adap->quirks = &omap_i2c_quirks;
1456 adap->dev.parent = &pdev->dev; 1458 adap->dev.parent = &pdev->dev;
1457 adap->dev.of_node = pdev->dev.of_node; 1459 adap->dev.of_node = pdev->dev.of_node;
1458 adap->bus_recovery_info = &omap_i2c_bus_recovery_info; 1460 adap->bus_recovery_info = &omap_i2c_bus_recovery_info;
diff --git a/drivers/i2c/busses/i2c-powermac.c b/drivers/i2c/busses/i2c-powermac.c
index f2a2067525ef..f6f4ed8afc93 100644
--- a/drivers/i2c/busses/i2c-powermac.c
+++ b/drivers/i2c/busses/i2c-powermac.c
@@ -388,9 +388,8 @@ static void i2c_powermac_register_devices(struct i2c_adapter *adap,
388static int i2c_powermac_probe(struct platform_device *dev) 388static int i2c_powermac_probe(struct platform_device *dev)
389{ 389{
390 struct pmac_i2c_bus *bus = dev_get_platdata(&dev->dev); 390 struct pmac_i2c_bus *bus = dev_get_platdata(&dev->dev);
391 struct device_node *parent = NULL; 391 struct device_node *parent;
392 struct i2c_adapter *adapter; 392 struct i2c_adapter *adapter;
393 const char *basename;
394 int rc; 393 int rc;
395 394
396 if (bus == NULL) 395 if (bus == NULL)
@@ -407,23 +406,25 @@ static int i2c_powermac_probe(struct platform_device *dev)
407 parent = of_get_parent(pmac_i2c_get_controller(bus)); 406 parent = of_get_parent(pmac_i2c_get_controller(bus));
408 if (parent == NULL) 407 if (parent == NULL)
409 return -EINVAL; 408 return -EINVAL;
410 basename = parent->name; 409 snprintf(adapter->name, sizeof(adapter->name), "%pOFn %d",
410 parent,
411 pmac_i2c_get_channel(bus));
412 of_node_put(parent);
411 break; 413 break;
412 case pmac_i2c_bus_pmu: 414 case pmac_i2c_bus_pmu:
413 basename = "pmu"; 415 snprintf(adapter->name, sizeof(adapter->name), "pmu %d",
416 pmac_i2c_get_channel(bus));
414 break; 417 break;
415 case pmac_i2c_bus_smu: 418 case pmac_i2c_bus_smu:
416 /* This is not what we used to do but I'm fixing drivers at 419 /* This is not what we used to do but I'm fixing drivers at
417 * the same time as this change 420 * the same time as this change
418 */ 421 */
419 basename = "smu"; 422 snprintf(adapter->name, sizeof(adapter->name), "smu %d",
423 pmac_i2c_get_channel(bus));
420 break; 424 break;
421 default: 425 default:
422 return -EINVAL; 426 return -EINVAL;
423 } 427 }
424 snprintf(adapter->name, sizeof(adapter->name), "%s %d", basename,
425 pmac_i2c_get_channel(bus));
426 of_node_put(parent);
427 428
428 platform_set_drvdata(dev, adapter); 429 platform_set_drvdata(dev, adapter);
429 adapter->algo = &i2c_powermac_algorithm; 430 adapter->algo = &i2c_powermac_algorithm;
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index 9f2eb02481d3..527f55c8c4c7 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -201,21 +201,23 @@ static void geni_i2c_err(struct geni_i2c_dev *gi2c, int err)
201static irqreturn_t geni_i2c_irq(int irq, void *dev) 201static irqreturn_t geni_i2c_irq(int irq, void *dev)
202{ 202{
203 struct geni_i2c_dev *gi2c = dev; 203 struct geni_i2c_dev *gi2c = dev;
204 int j; 204 void __iomem *base = gi2c->se.base;
205 int j, p;
205 u32 m_stat; 206 u32 m_stat;
206 u32 rx_st; 207 u32 rx_st;
207 u32 dm_tx_st; 208 u32 dm_tx_st;
208 u32 dm_rx_st; 209 u32 dm_rx_st;
209 u32 dma; 210 u32 dma;
211 u32 val;
210 struct i2c_msg *cur; 212 struct i2c_msg *cur;
211 unsigned long flags; 213 unsigned long flags;
212 214
213 spin_lock_irqsave(&gi2c->lock, flags); 215 spin_lock_irqsave(&gi2c->lock, flags);
214 m_stat = readl_relaxed(gi2c->se.base + SE_GENI_M_IRQ_STATUS); 216 m_stat = readl_relaxed(base + SE_GENI_M_IRQ_STATUS);
215 rx_st = readl_relaxed(gi2c->se.base + SE_GENI_RX_FIFO_STATUS); 217 rx_st = readl_relaxed(base + SE_GENI_RX_FIFO_STATUS);
216 dm_tx_st = readl_relaxed(gi2c->se.base + SE_DMA_TX_IRQ_STAT); 218 dm_tx_st = readl_relaxed(base + SE_DMA_TX_IRQ_STAT);
217 dm_rx_st = readl_relaxed(gi2c->se.base + SE_DMA_RX_IRQ_STAT); 219 dm_rx_st = readl_relaxed(base + SE_DMA_RX_IRQ_STAT);
218 dma = readl_relaxed(gi2c->se.base + SE_GENI_DMA_MODE_EN); 220 dma = readl_relaxed(base + SE_GENI_DMA_MODE_EN);
219 cur = gi2c->cur; 221 cur = gi2c->cur;
220 222
221 if (!cur || 223 if (!cur ||
@@ -238,26 +240,17 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev)
238 240
239 /* Disable the TX Watermark interrupt to stop TX */ 241 /* Disable the TX Watermark interrupt to stop TX */
240 if (!dma) 242 if (!dma)
241 writel_relaxed(0, gi2c->se.base + 243 writel_relaxed(0, base + SE_GENI_TX_WATERMARK_REG);
242 SE_GENI_TX_WATERMARK_REG); 244 } else if (dma) {
243 goto irqret;
244 }
245
246 if (dma) {
247 dev_dbg(gi2c->se.dev, "i2c dma tx:0x%x, dma rx:0x%x\n", 245 dev_dbg(gi2c->se.dev, "i2c dma tx:0x%x, dma rx:0x%x\n",
248 dm_tx_st, dm_rx_st); 246 dm_tx_st, dm_rx_st);
249 goto irqret; 247 } else if (cur->flags & I2C_M_RD &&
250 } 248 m_stat & (M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN)) {
251
252 if (cur->flags & I2C_M_RD &&
253 m_stat & (M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN)) {
254 u32 rxcnt = rx_st & RX_FIFO_WC_MSK; 249 u32 rxcnt = rx_st & RX_FIFO_WC_MSK;
255 250
256 for (j = 0; j < rxcnt; j++) { 251 for (j = 0; j < rxcnt; j++) {
257 u32 val; 252 p = 0;
258 int p = 0; 253 val = readl_relaxed(base + SE_GENI_RX_FIFOn);
259
260 val = readl_relaxed(gi2c->se.base + SE_GENI_RX_FIFOn);
261 while (gi2c->cur_rd < cur->len && p < sizeof(val)) { 254 while (gi2c->cur_rd < cur->len && p < sizeof(val)) {
262 cur->buf[gi2c->cur_rd++] = val & 0xff; 255 cur->buf[gi2c->cur_rd++] = val & 0xff;
263 val >>= 8; 256 val >>= 8;
@@ -270,44 +263,39 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev)
270 m_stat & M_TX_FIFO_WATERMARK_EN) { 263 m_stat & M_TX_FIFO_WATERMARK_EN) {
271 for (j = 0; j < gi2c->tx_wm; j++) { 264 for (j = 0; j < gi2c->tx_wm; j++) {
272 u32 temp; 265 u32 temp;
273 u32 val = 0;
274 int p = 0;
275 266
267 val = 0;
268 p = 0;
276 while (gi2c->cur_wr < cur->len && p < sizeof(val)) { 269 while (gi2c->cur_wr < cur->len && p < sizeof(val)) {
277 temp = cur->buf[gi2c->cur_wr++]; 270 temp = cur->buf[gi2c->cur_wr++];
278 val |= temp << (p * 8); 271 val |= temp << (p * 8);
279 p++; 272 p++;
280 } 273 }
281 writel_relaxed(val, gi2c->se.base + SE_GENI_TX_FIFOn); 274 writel_relaxed(val, base + SE_GENI_TX_FIFOn);
282 /* TX Complete, Disable the TX Watermark interrupt */ 275 /* TX Complete, Disable the TX Watermark interrupt */
283 if (gi2c->cur_wr == cur->len) { 276 if (gi2c->cur_wr == cur->len) {
284 writel_relaxed(0, gi2c->se.base + 277 writel_relaxed(0, base + SE_GENI_TX_WATERMARK_REG);
285 SE_GENI_TX_WATERMARK_REG);
286 break; 278 break;
287 } 279 }
288 } 280 }
289 } 281 }
290irqret: 282
291 if (m_stat) 283 if (m_stat)
292 writel_relaxed(m_stat, gi2c->se.base + SE_GENI_M_IRQ_CLEAR); 284 writel_relaxed(m_stat, base + SE_GENI_M_IRQ_CLEAR);
285
286 if (dma && dm_tx_st)
287 writel_relaxed(dm_tx_st, base + SE_DMA_TX_IRQ_CLR);
288 if (dma && dm_rx_st)
289 writel_relaxed(dm_rx_st, base + SE_DMA_RX_IRQ_CLR);
293 290
294 if (dma) {
295 if (dm_tx_st)
296 writel_relaxed(dm_tx_st, gi2c->se.base +
297 SE_DMA_TX_IRQ_CLR);
298 if (dm_rx_st)
299 writel_relaxed(dm_rx_st, gi2c->se.base +
300 SE_DMA_RX_IRQ_CLR);
301 }
302 /* if this is err with done-bit not set, handle that through timeout. */ 291 /* if this is err with done-bit not set, handle that through timeout. */
303 if (m_stat & M_CMD_DONE_EN || m_stat & M_CMD_ABORT_EN) 292 if (m_stat & M_CMD_DONE_EN || m_stat & M_CMD_ABORT_EN ||
304 complete(&gi2c->done); 293 dm_tx_st & TX_DMA_DONE || dm_tx_st & TX_RESET_DONE ||
305 else if (dm_tx_st & TX_DMA_DONE || dm_tx_st & TX_RESET_DONE) 294 dm_rx_st & RX_DMA_DONE || dm_rx_st & RX_RESET_DONE)
306 complete(&gi2c->done);
307 else if (dm_rx_st & RX_DMA_DONE || dm_rx_st & RX_RESET_DONE)
308 complete(&gi2c->done); 295 complete(&gi2c->done);
309 296
310 spin_unlock_irqrestore(&gi2c->lock, flags); 297 spin_unlock_irqrestore(&gi2c->lock, flags);
298
311 return IRQ_HANDLED; 299 return IRQ_HANDLED;
312} 300}
313 301
@@ -365,29 +353,24 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
365 u32 m_param) 353 u32 m_param)
366{ 354{
367 dma_addr_t rx_dma; 355 dma_addr_t rx_dma;
368 enum geni_se_xfer_mode mode; 356 unsigned long time_left;
369 unsigned long time_left = XFER_TIMEOUT;
370 void *dma_buf; 357 void *dma_buf;
358 struct geni_se *se = &gi2c->se;
359 size_t len = msg->len;
371 360
372 gi2c->cur = msg;
373 mode = GENI_SE_FIFO;
374 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); 361 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
375 if (dma_buf) 362 if (dma_buf)
376 mode = GENI_SE_DMA; 363 geni_se_select_mode(se, GENI_SE_DMA);
377 364 else
378 geni_se_select_mode(&gi2c->se, mode); 365 geni_se_select_mode(se, GENI_SE_FIFO);
379 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_RX_TRANS_LEN); 366
380 geni_se_setup_m_cmd(&gi2c->se, I2C_READ, m_param); 367 writel_relaxed(len, se->base + SE_I2C_RX_TRANS_LEN);
381 if (mode == GENI_SE_DMA) { 368 geni_se_setup_m_cmd(se, I2C_READ, m_param);
382 int ret; 369
383 370 if (dma_buf && geni_se_rx_dma_prep(se, dma_buf, len, &rx_dma)) {
384 ret = geni_se_rx_dma_prep(&gi2c->se, dma_buf, msg->len, 371 geni_se_select_mode(se, GENI_SE_FIFO);
385 &rx_dma); 372 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
386 if (ret) { 373 dma_buf = NULL;
387 mode = GENI_SE_FIFO;
388 geni_se_select_mode(&gi2c->se, mode);
389 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
390 }
391 } 374 }
392 375
393 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); 376 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT);
@@ -395,12 +378,13 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
395 geni_i2c_abort_xfer(gi2c); 378 geni_i2c_abort_xfer(gi2c);
396 379
397 gi2c->cur_rd = 0; 380 gi2c->cur_rd = 0;
398 if (mode == GENI_SE_DMA) { 381 if (dma_buf) {
399 if (gi2c->err) 382 if (gi2c->err)
400 geni_i2c_rx_fsm_rst(gi2c); 383 geni_i2c_rx_fsm_rst(gi2c);
401 geni_se_rx_dma_unprep(&gi2c->se, rx_dma, msg->len); 384 geni_se_rx_dma_unprep(se, rx_dma, len);
402 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err); 385 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err);
403 } 386 }
387
404 return gi2c->err; 388 return gi2c->err;
405} 389}
406 390
@@ -408,45 +392,41 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
408 u32 m_param) 392 u32 m_param)
409{ 393{
410 dma_addr_t tx_dma; 394 dma_addr_t tx_dma;
411 enum geni_se_xfer_mode mode;
412 unsigned long time_left; 395 unsigned long time_left;
413 void *dma_buf; 396 void *dma_buf;
397 struct geni_se *se = &gi2c->se;
398 size_t len = msg->len;
414 399
415 gi2c->cur = msg;
416 mode = GENI_SE_FIFO;
417 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); 400 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
418 if (dma_buf) 401 if (dma_buf)
419 mode = GENI_SE_DMA; 402 geni_se_select_mode(se, GENI_SE_DMA);
420 403 else
421 geni_se_select_mode(&gi2c->se, mode); 404 geni_se_select_mode(se, GENI_SE_FIFO);
422 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_TX_TRANS_LEN); 405
423 geni_se_setup_m_cmd(&gi2c->se, I2C_WRITE, m_param); 406 writel_relaxed(len, se->base + SE_I2C_TX_TRANS_LEN);
424 if (mode == GENI_SE_DMA) { 407 geni_se_setup_m_cmd(se, I2C_WRITE, m_param);
425 int ret; 408
426 409 if (dma_buf && geni_se_tx_dma_prep(se, dma_buf, len, &tx_dma)) {
427 ret = geni_se_tx_dma_prep(&gi2c->se, dma_buf, msg->len, 410 geni_se_select_mode(se, GENI_SE_FIFO);
428 &tx_dma); 411 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
429 if (ret) { 412 dma_buf = NULL;
430 mode = GENI_SE_FIFO;
431 geni_se_select_mode(&gi2c->se, mode);
432 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
433 }
434 } 413 }
435 414
436 if (mode == GENI_SE_FIFO) /* Get FIFO IRQ */ 415 if (!dma_buf) /* Get FIFO IRQ */
437 writel_relaxed(1, gi2c->se.base + SE_GENI_TX_WATERMARK_REG); 416 writel_relaxed(1, se->base + SE_GENI_TX_WATERMARK_REG);
438 417
439 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); 418 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT);
440 if (!time_left) 419 if (!time_left)
441 geni_i2c_abort_xfer(gi2c); 420 geni_i2c_abort_xfer(gi2c);
442 421
443 gi2c->cur_wr = 0; 422 gi2c->cur_wr = 0;
444 if (mode == GENI_SE_DMA) { 423 if (dma_buf) {
445 if (gi2c->err) 424 if (gi2c->err)
446 geni_i2c_tx_fsm_rst(gi2c); 425 geni_i2c_tx_fsm_rst(gi2c);
447 geni_se_tx_dma_unprep(&gi2c->se, tx_dma, msg->len); 426 geni_se_tx_dma_unprep(se, tx_dma, len);
448 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err); 427 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err);
449 } 428 }
429
450 return gi2c->err; 430 return gi2c->err;
451} 431}
452 432
@@ -474,6 +454,7 @@ static int geni_i2c_xfer(struct i2c_adapter *adap,
474 454
475 m_param |= ((msgs[i].addr << SLV_ADDR_SHFT) & SLV_ADDR_MSK); 455 m_param |= ((msgs[i].addr << SLV_ADDR_SHFT) & SLV_ADDR_MSK);
476 456
457 gi2c->cur = &msgs[i];
477 if (msgs[i].flags & I2C_M_RD) 458 if (msgs[i].flags & I2C_M_RD)
478 ret = geni_i2c_rx_one_msg(gi2c, &msgs[i], m_param); 459 ret = geni_i2c_rx_one_msg(gi2c, &msgs[i], m_param);
479 else 460 else
diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
index c86c3ae1318f..e09cd0775ae9 100644
--- a/drivers/i2c/busses/i2c-qup.c
+++ b/drivers/i2c/busses/i2c-qup.c
@@ -1088,11 +1088,6 @@ static int qup_i2c_xfer(struct i2c_adapter *adap,
1088 writel(I2C_MINI_CORE | I2C_N_VAL, qup->base + QUP_CONFIG); 1088 writel(I2C_MINI_CORE | I2C_N_VAL, qup->base + QUP_CONFIG);
1089 1089
1090 for (idx = 0; idx < num; idx++) { 1090 for (idx = 0; idx < num; idx++) {
1091 if (msgs[idx].len == 0) {
1092 ret = -EINVAL;
1093 goto out;
1094 }
1095
1096 if (qup_i2c_poll_state_i2c_master(qup)) { 1091 if (qup_i2c_poll_state_i2c_master(qup)) {
1097 ret = -EIO; 1092 ret = -EIO;
1098 goto out; 1093 goto out;
@@ -1520,9 +1515,6 @@ qup_i2c_determine_mode_v2(struct qup_i2c_dev *qup,
1520 1515
1521 /* All i2c_msgs should be transferred using either dma or cpu */ 1516 /* All i2c_msgs should be transferred using either dma or cpu */
1522 for (idx = 0; idx < num; idx++) { 1517 for (idx = 0; idx < num; idx++) {
1523 if (msgs[idx].len == 0)
1524 return -EINVAL;
1525
1526 if (msgs[idx].flags & I2C_M_RD) 1518 if (msgs[idx].flags & I2C_M_RD)
1527 max_rx_len = max_t(unsigned int, max_rx_len, 1519 max_rx_len = max_t(unsigned int, max_rx_len,
1528 msgs[idx].len); 1520 msgs[idx].len);
@@ -1636,9 +1628,14 @@ static const struct i2c_algorithm qup_i2c_algo_v2 = {
1636 * which limits the possible read to 256 (QUP_READ_LIMIT) bytes. 1628 * which limits the possible read to 256 (QUP_READ_LIMIT) bytes.
1637 */ 1629 */
1638static const struct i2c_adapter_quirks qup_i2c_quirks = { 1630static const struct i2c_adapter_quirks qup_i2c_quirks = {
1631 .flags = I2C_AQ_NO_ZERO_LEN,
1639 .max_read_len = QUP_READ_LIMIT, 1632 .max_read_len = QUP_READ_LIMIT,
1640}; 1633};
1641 1634
1635static const struct i2c_adapter_quirks qup_i2c_quirks_v2 = {
1636 .flags = I2C_AQ_NO_ZERO_LEN,
1637};
1638
1642static void qup_i2c_enable_clocks(struct qup_i2c_dev *qup) 1639static void qup_i2c_enable_clocks(struct qup_i2c_dev *qup)
1643{ 1640{
1644 clk_prepare_enable(qup->clk); 1641 clk_prepare_enable(qup->clk);
@@ -1701,6 +1698,7 @@ static int qup_i2c_probe(struct platform_device *pdev)
1701 is_qup_v1 = true; 1698 is_qup_v1 = true;
1702 } else { 1699 } else {
1703 qup->adap.algo = &qup_i2c_algo_v2; 1700 qup->adap.algo = &qup_i2c_algo_v2;
1701 qup->adap.quirks = &qup_i2c_quirks_v2;
1704 is_qup_v1 = false; 1702 is_qup_v1 = false;
1705 if (acpi_match_device(qup_i2c_acpi_match, qup->dev)) 1703 if (acpi_match_device(qup_i2c_acpi_match, qup->dev))
1706 goto nodma; 1704 goto nodma;
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 818cab14e87c..a7a7a9c3bc7c 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -947,27 +947,9 @@ static int sh_mobile_i2c_remove(struct platform_device *dev)
947 return 0; 947 return 0;
948} 948}
949 949
950static int sh_mobile_i2c_runtime_nop(struct device *dev)
951{
952 /* Runtime PM callback shared between ->runtime_suspend()
953 * and ->runtime_resume(). Simply returns success.
954 *
955 * This driver re-initializes all registers after
956 * pm_runtime_get_sync() anyway so there is no need
957 * to save and restore registers here.
958 */
959 return 0;
960}
961
962static const struct dev_pm_ops sh_mobile_i2c_dev_pm_ops = {
963 .runtime_suspend = sh_mobile_i2c_runtime_nop,
964 .runtime_resume = sh_mobile_i2c_runtime_nop,
965};
966
967static struct platform_driver sh_mobile_i2c_driver = { 950static struct platform_driver sh_mobile_i2c_driver = {
968 .driver = { 951 .driver = {
969 .name = "i2c-sh_mobile", 952 .name = "i2c-sh_mobile",
970 .pm = &sh_mobile_i2c_dev_pm_ops,
971 .of_match_table = sh_mobile_i2c_dt_ids, 953 .of_match_table = sh_mobile_i2c_dt_ids,
972 }, 954 },
973 .probe = sh_mobile_i2c_probe, 955 .probe = sh_mobile_i2c_probe,
diff --git a/drivers/i2c/busses/i2c-synquacer.c b/drivers/i2c/busses/i2c-synquacer.c
index 915f5edbab33..2184b7c3580e 100644
--- a/drivers/i2c/busses/i2c-synquacer.c
+++ b/drivers/i2c/busses/i2c-synquacer.c
@@ -404,7 +404,7 @@ static irqreturn_t synquacer_i2c_isr(int irq, void *dev_id)
404 if (i2c->state == STATE_READ) 404 if (i2c->state == STATE_READ)
405 goto prepare_read; 405 goto prepare_read;
406 406
407 /* fallthru */ 407 /* fall through */
408 408
409 case STATE_WRITE: 409 case STATE_WRITE:
410 if (bsr & SYNQUACER_I2C_BSR_LRB) { 410 if (bsr & SYNQUACER_I2C_BSR_LRB) {
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 60c8561fbe65..437294ea2f0a 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -684,9 +684,6 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
684 684
685 tegra_i2c_flush_fifos(i2c_dev); 685 tegra_i2c_flush_fifos(i2c_dev);
686 686
687 if (msg->len == 0)
688 return -EINVAL;
689
690 i2c_dev->msg_buf = msg->buf; 687 i2c_dev->msg_buf = msg->buf;
691 i2c_dev->msg_buf_remaining = msg->len; 688 i2c_dev->msg_buf_remaining = msg->len;
692 i2c_dev->msg_err = I2C_ERR_NONE; 689 i2c_dev->msg_err = I2C_ERR_NONE;
@@ -831,6 +828,7 @@ static const struct i2c_algorithm tegra_i2c_algo = {
831 828
832/* payload size is only 12 bit */ 829/* payload size is only 12 bit */
833static const struct i2c_adapter_quirks tegra_i2c_quirks = { 830static const struct i2c_adapter_quirks tegra_i2c_quirks = {
831 .flags = I2C_AQ_NO_ZERO_LEN,
834 .max_read_len = 4096, 832 .max_read_len = 4096,
835 .max_write_len = 4096, 833 .max_write_len = 4096,
836}; 834};
diff --git a/drivers/i2c/busses/i2c-uniphier-f.c b/drivers/i2c/busses/i2c-uniphier-f.c
index a403e8579b65..dd384743dbbd 100644
--- a/drivers/i2c/busses/i2c-uniphier-f.c
+++ b/drivers/i2c/busses/i2c-uniphier-f.c
@@ -98,6 +98,7 @@ struct uniphier_fi2c_priv {
98 unsigned int flags; 98 unsigned int flags;
99 unsigned int busy_cnt; 99 unsigned int busy_cnt;
100 unsigned int clk_cycle; 100 unsigned int clk_cycle;
101 spinlock_t lock; /* IRQ synchronization */
101}; 102};
102 103
103static void uniphier_fi2c_fill_txfifo(struct uniphier_fi2c_priv *priv, 104static void uniphier_fi2c_fill_txfifo(struct uniphier_fi2c_priv *priv,
@@ -142,9 +143,10 @@ static void uniphier_fi2c_set_irqs(struct uniphier_fi2c_priv *priv)
142 writel(priv->enabled_irqs, priv->membase + UNIPHIER_FI2C_IE); 143 writel(priv->enabled_irqs, priv->membase + UNIPHIER_FI2C_IE);
143} 144}
144 145
145static void uniphier_fi2c_clear_irqs(struct uniphier_fi2c_priv *priv) 146static void uniphier_fi2c_clear_irqs(struct uniphier_fi2c_priv *priv,
147 u32 mask)
146{ 148{
147 writel(-1, priv->membase + UNIPHIER_FI2C_IC); 149 writel(mask, priv->membase + UNIPHIER_FI2C_IC);
148} 150}
149 151
150static void uniphier_fi2c_stop(struct uniphier_fi2c_priv *priv) 152static void uniphier_fi2c_stop(struct uniphier_fi2c_priv *priv)
@@ -162,12 +164,17 @@ static irqreturn_t uniphier_fi2c_interrupt(int irq, void *dev_id)
162 struct uniphier_fi2c_priv *priv = dev_id; 164 struct uniphier_fi2c_priv *priv = dev_id;
163 u32 irq_status; 165 u32 irq_status;
164 166
167 spin_lock(&priv->lock);
168
165 irq_status = readl(priv->membase + UNIPHIER_FI2C_INT); 169 irq_status = readl(priv->membase + UNIPHIER_FI2C_INT);
170 irq_status &= priv->enabled_irqs;
166 171
167 dev_dbg(&priv->adap.dev, 172 dev_dbg(&priv->adap.dev,
168 "interrupt: enabled_irqs=%04x, irq_status=%04x\n", 173 "interrupt: enabled_irqs=%04x, irq_status=%04x\n",
169 priv->enabled_irqs, irq_status); 174 priv->enabled_irqs, irq_status);
170 175
176 uniphier_fi2c_clear_irqs(priv, irq_status);
177
171 if (irq_status & UNIPHIER_FI2C_INT_STOP) 178 if (irq_status & UNIPHIER_FI2C_INT_STOP)
172 goto complete; 179 goto complete;
173 180
@@ -230,6 +237,8 @@ static irqreturn_t uniphier_fi2c_interrupt(int irq, void *dev_id)
230 goto handled; 237 goto handled;
231 } 238 }
232 239
240 spin_unlock(&priv->lock);
241
233 return IRQ_NONE; 242 return IRQ_NONE;
234 243
235data_done: 244data_done:
@@ -244,7 +253,7 @@ complete:
244 } 253 }
245 254
246handled: 255handled:
247 uniphier_fi2c_clear_irqs(priv); 256 spin_unlock(&priv->lock);
248 257
249 return IRQ_HANDLED; 258 return IRQ_HANDLED;
250} 259}
@@ -252,6 +261,8 @@ handled:
252static void uniphier_fi2c_tx_init(struct uniphier_fi2c_priv *priv, u16 addr) 261static void uniphier_fi2c_tx_init(struct uniphier_fi2c_priv *priv, u16 addr)
253{ 262{
254 priv->enabled_irqs |= UNIPHIER_FI2C_INT_TE; 263 priv->enabled_irqs |= UNIPHIER_FI2C_INT_TE;
264 uniphier_fi2c_set_irqs(priv);
265
255 /* do not use TX byte counter */ 266 /* do not use TX byte counter */
256 writel(0, priv->membase + UNIPHIER_FI2C_TBC); 267 writel(0, priv->membase + UNIPHIER_FI2C_TBC);
257 /* set slave address */ 268 /* set slave address */
@@ -284,6 +295,8 @@ static void uniphier_fi2c_rx_init(struct uniphier_fi2c_priv *priv, u16 addr)
284 priv->enabled_irqs |= UNIPHIER_FI2C_INT_RF; 295 priv->enabled_irqs |= UNIPHIER_FI2C_INT_RF;
285 } 296 }
286 297
298 uniphier_fi2c_set_irqs(priv);
299
287 /* set slave address with RD bit */ 300 /* set slave address with RD bit */
288 writel(UNIPHIER_FI2C_DTTX_CMD | UNIPHIER_FI2C_DTTX_RD | addr << 1, 301 writel(UNIPHIER_FI2C_DTTX_CMD | UNIPHIER_FI2C_DTTX_RD | addr << 1,
289 priv->membase + UNIPHIER_FI2C_DTTX); 302 priv->membase + UNIPHIER_FI2C_DTTX);
@@ -307,14 +320,16 @@ static void uniphier_fi2c_recover(struct uniphier_fi2c_priv *priv)
307} 320}
308 321
309static int uniphier_fi2c_master_xfer_one(struct i2c_adapter *adap, 322static int uniphier_fi2c_master_xfer_one(struct i2c_adapter *adap,
310 struct i2c_msg *msg, bool stop) 323 struct i2c_msg *msg, bool repeat,
324 bool stop)
311{ 325{
312 struct uniphier_fi2c_priv *priv = i2c_get_adapdata(adap); 326 struct uniphier_fi2c_priv *priv = i2c_get_adapdata(adap);
313 bool is_read = msg->flags & I2C_M_RD; 327 bool is_read = msg->flags & I2C_M_RD;
314 unsigned long time_left; 328 unsigned long time_left, flags;
315 329
316 dev_dbg(&adap->dev, "%s: addr=0x%02x, len=%d, stop=%d\n", 330 dev_dbg(&adap->dev, "%s: addr=0x%02x, len=%d, repeat=%d, stop=%d\n",
317 is_read ? "receive" : "transmit", msg->addr, msg->len, stop); 331 is_read ? "receive" : "transmit", msg->addr, msg->len,
332 repeat, stop);
318 333
319 priv->len = msg->len; 334 priv->len = msg->len;
320 priv->buf = msg->buf; 335 priv->buf = msg->buf;
@@ -326,22 +341,36 @@ static int uniphier_fi2c_master_xfer_one(struct i2c_adapter *adap,
326 priv->flags |= UNIPHIER_FI2C_STOP; 341 priv->flags |= UNIPHIER_FI2C_STOP;
327 342
328 reinit_completion(&priv->comp); 343 reinit_completion(&priv->comp);
329 uniphier_fi2c_clear_irqs(priv); 344 uniphier_fi2c_clear_irqs(priv, U32_MAX);
330 writel(UNIPHIER_FI2C_RST_TBRST | UNIPHIER_FI2C_RST_RBRST, 345 writel(UNIPHIER_FI2C_RST_TBRST | UNIPHIER_FI2C_RST_RBRST,
331 priv->membase + UNIPHIER_FI2C_RST); /* reset TX/RX FIFO */ 346 priv->membase + UNIPHIER_FI2C_RST); /* reset TX/RX FIFO */
332 347
348 spin_lock_irqsave(&priv->lock, flags);
349
333 if (is_read) 350 if (is_read)
334 uniphier_fi2c_rx_init(priv, msg->addr); 351 uniphier_fi2c_rx_init(priv, msg->addr);
335 else 352 else
336 uniphier_fi2c_tx_init(priv, msg->addr); 353 uniphier_fi2c_tx_init(priv, msg->addr);
337 354
338 uniphier_fi2c_set_irqs(priv);
339
340 dev_dbg(&adap->dev, "start condition\n"); 355 dev_dbg(&adap->dev, "start condition\n");
341 writel(UNIPHIER_FI2C_CR_MST | UNIPHIER_FI2C_CR_STA, 356 /*
342 priv->membase + UNIPHIER_FI2C_CR); 357 * For a repeated START condition, writing a slave address to the FIFO
358 * kicks the controller. So, the UNIPHIER_FI2C_CR register should be
359 * written only for a non-repeated START condition.
360 */
361 if (!repeat)
362 writel(UNIPHIER_FI2C_CR_MST | UNIPHIER_FI2C_CR_STA,
363 priv->membase + UNIPHIER_FI2C_CR);
364
365 spin_unlock_irqrestore(&priv->lock, flags);
343 366
344 time_left = wait_for_completion_timeout(&priv->comp, adap->timeout); 367 time_left = wait_for_completion_timeout(&priv->comp, adap->timeout);
368
369 spin_lock_irqsave(&priv->lock, flags);
370 priv->enabled_irqs = 0;
371 uniphier_fi2c_set_irqs(priv);
372 spin_unlock_irqrestore(&priv->lock, flags);
373
345 if (!time_left) { 374 if (!time_left) {
346 dev_err(&adap->dev, "transaction timeout.\n"); 375 dev_err(&adap->dev, "transaction timeout.\n");
347 uniphier_fi2c_recover(priv); 376 uniphier_fi2c_recover(priv);
@@ -394,6 +423,7 @@ static int uniphier_fi2c_master_xfer(struct i2c_adapter *adap,
394 struct i2c_msg *msgs, int num) 423 struct i2c_msg *msgs, int num)
395{ 424{
396 struct i2c_msg *msg, *emsg = msgs + num; 425 struct i2c_msg *msg, *emsg = msgs + num;
426 bool repeat = false;
397 int ret; 427 int ret;
398 428
399 ret = uniphier_fi2c_check_bus_busy(adap); 429 ret = uniphier_fi2c_check_bus_busy(adap);
@@ -404,9 +434,11 @@ static int uniphier_fi2c_master_xfer(struct i2c_adapter *adap,
404 /* Emit STOP if it is the last message or I2C_M_STOP is set. */ 434 /* Emit STOP if it is the last message or I2C_M_STOP is set. */
405 bool stop = (msg + 1 == emsg) || (msg->flags & I2C_M_STOP); 435 bool stop = (msg + 1 == emsg) || (msg->flags & I2C_M_STOP);
406 436
407 ret = uniphier_fi2c_master_xfer_one(adap, msg, stop); 437 ret = uniphier_fi2c_master_xfer_one(adap, msg, repeat, stop);
408 if (ret) 438 if (ret)
409 return ret; 439 return ret;
440
441 repeat = !stop;
410 } 442 }
411 443
412 return num; 444 return num;
@@ -529,6 +561,7 @@ static int uniphier_fi2c_probe(struct platform_device *pdev)
529 561
530 priv->clk_cycle = clk_rate / bus_speed; 562 priv->clk_cycle = clk_rate / bus_speed;
531 init_completion(&priv->comp); 563 init_completion(&priv->comp);
564 spin_lock_init(&priv->lock);
532 priv->adap.owner = THIS_MODULE; 565 priv->adap.owner = THIS_MODULE;
533 priv->adap.algo = &uniphier_fi2c_algo; 566 priv->adap.algo = &uniphier_fi2c_algo;
534 priv->adap.dev.parent = dev; 567 priv->adap.dev.parent = dev;
diff --git a/drivers/i2c/busses/i2c-zx2967.c b/drivers/i2c/busses/i2c-zx2967.c
index 48281c1b30c6..b8f9e020d80e 100644
--- a/drivers/i2c/busses/i2c-zx2967.c
+++ b/drivers/i2c/busses/i2c-zx2967.c
@@ -281,9 +281,6 @@ static int zx2967_i2c_xfer_msg(struct zx2967_i2c *i2c,
281 int ret; 281 int ret;
282 int i; 282 int i;
283 283
284 if (msg->len == 0)
285 return -EINVAL;
286
287 zx2967_i2c_flush_fifos(i2c); 284 zx2967_i2c_flush_fifos(i2c);
288 285
289 i2c->cur_trans = msg->buf; 286 i2c->cur_trans = msg->buf;
@@ -498,6 +495,10 @@ static const struct i2c_algorithm zx2967_i2c_algo = {
498 .functionality = zx2967_i2c_func, 495 .functionality = zx2967_i2c_func,
499}; 496};
500 497
498static const struct i2c_adapter_quirks zx2967_i2c_quirks = {
499 .flags = I2C_AQ_NO_ZERO_LEN,
500};
501
501static const struct of_device_id zx2967_i2c_of_match[] = { 502static const struct of_device_id zx2967_i2c_of_match[] = {
502 { .compatible = "zte,zx296718-i2c", }, 503 { .compatible = "zte,zx296718-i2c", },
503 { }, 504 { },
@@ -568,6 +569,7 @@ static int zx2967_i2c_probe(struct platform_device *pdev)
568 strlcpy(i2c->adap.name, "zx2967 i2c adapter", 569 strlcpy(i2c->adap.name, "zx2967 i2c adapter",
569 sizeof(i2c->adap.name)); 570 sizeof(i2c->adap.name));
570 i2c->adap.algo = &zx2967_i2c_algo; 571 i2c->adap.algo = &zx2967_i2c_algo;
572 i2c->adap.quirks = &zx2967_i2c_quirks;
571 i2c->adap.nr = pdev->id; 573 i2c->adap.nr = pdev->id;
572 i2c->adap.dev.parent = &pdev->dev; 574 i2c->adap.dev.parent = &pdev->dev;
573 i2c->adap.dev.of_node = pdev->dev.of_node; 575 i2c->adap.dev.of_node = pdev->dev.of_node;
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 9200e349f29e..dc78aa7369de 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -1922,6 +1922,11 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
1922{ 1922{
1923 int ret; 1923 int ret;
1924 1924
1925 if (!adap->algo->master_xfer) {
1926 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
1927 return -EOPNOTSUPP;
1928 }
1929
1925 /* REVISIT the fault reporting model here is weak: 1930 /* REVISIT the fault reporting model here is weak:
1926 * 1931 *
1927 * - When we get an error after receiving N bytes from a slave, 1932 * - When we get an error after receiving N bytes from a slave,
@@ -1938,35 +1943,19 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
1938 * one (discarding status on the second message) or errno 1943 * one (discarding status on the second message) or errno
1939 * (discarding status on the first one). 1944 * (discarding status on the first one).
1940 */ 1945 */
1941 1946 if (in_atomic() || irqs_disabled()) {
1942 if (adap->algo->master_xfer) { 1947 ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT);
1943#ifdef DEBUG 1948 if (!ret)
1944 for (ret = 0; ret < num; ret++) { 1949 /* I2C activity is ongoing. */
1945 dev_dbg(&adap->dev, 1950 return -EAGAIN;
1946 "master_xfer[%d] %c, addr=0x%02x, len=%d%s\n",
1947 ret, (msgs[ret].flags & I2C_M_RD) ? 'R' : 'W',
1948 msgs[ret].addr, msgs[ret].len,
1949 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
1950 }
1951#endif
1952
1953 if (in_atomic() || irqs_disabled()) {
1954 ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT);
1955 if (!ret)
1956 /* I2C activity is ongoing. */
1957 return -EAGAIN;
1958 } else {
1959 i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
1960 }
1961
1962 ret = __i2c_transfer(adap, msgs, num);
1963 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
1964
1965 return ret;
1966 } else { 1951 } else {
1967 dev_dbg(&adap->dev, "I2C level transfers not supported\n"); 1952 i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
1968 return -EOPNOTSUPP;
1969 } 1953 }
1954
1955 ret = __i2c_transfer(adap, msgs, num);
1956 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
1957
1958 return ret;
1970} 1959}
1971EXPORT_SYMBOL(i2c_transfer); 1960EXPORT_SYMBOL(i2c_transfer);
1972 1961
diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c
index 92cf5f48afe6..f60b670deff7 100644
--- a/drivers/i2c/muxes/i2c-mux-gpmux.c
+++ b/drivers/i2c/muxes/i2c-mux-gpmux.c
@@ -120,8 +120,8 @@ static int i2c_mux_probe(struct platform_device *pdev)
120 120
121 ret = of_property_read_u32(child, "reg", &chan); 121 ret = of_property_read_u32(child, "reg", &chan);
122 if (ret < 0) { 122 if (ret < 0) {
123 dev_err(dev, "no reg property for node '%s'\n", 123 dev_err(dev, "no reg property for node '%pOFn'\n",
124 child->name); 124 child);
125 goto err_children; 125 goto err_children;
126 } 126 }
127 127
diff --git a/drivers/i2c/muxes/i2c-mux-ltc4306.c b/drivers/i2c/muxes/i2c-mux-ltc4306.c
index a9af93259b19..83a714605cd6 100644
--- a/drivers/i2c/muxes/i2c-mux-ltc4306.c
+++ b/drivers/i2c/muxes/i2c-mux-ltc4306.c
@@ -208,7 +208,7 @@ MODULE_DEVICE_TABLE(of, ltc4306_of_match);
208 208
209static int ltc4306_probe(struct i2c_client *client) 209static int ltc4306_probe(struct i2c_client *client)
210{ 210{
211 struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 211 struct i2c_adapter *adap = client->adapter;
212 const struct chip_desc *chip; 212 const struct chip_desc *chip;
213 struct i2c_mux_core *muxc; 213 struct i2c_mux_core *muxc;
214 struct ltc4306 *data; 214 struct ltc4306 *data;
diff --git a/drivers/i2c/muxes/i2c-mux-mlxcpld.c b/drivers/i2c/muxes/i2c-mux-mlxcpld.c
index f2bf3e57ed67..5ed55ca4fe93 100644
--- a/drivers/i2c/muxes/i2c-mux-mlxcpld.c
+++ b/drivers/i2c/muxes/i2c-mux-mlxcpld.c
@@ -132,7 +132,7 @@ static int mlxcpld_mux_deselect(struct i2c_mux_core *muxc, u32 chan)
132static int mlxcpld_mux_probe(struct i2c_client *client, 132static int mlxcpld_mux_probe(struct i2c_client *client,
133 const struct i2c_device_id *id) 133 const struct i2c_device_id *id)
134{ 134{
135 struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 135 struct i2c_adapter *adap = client->adapter;
136 struct mlxcpld_mux_plat_data *pdata = dev_get_platdata(&client->dev); 136 struct mlxcpld_mux_plat_data *pdata = dev_get_platdata(&client->dev);
137 struct i2c_mux_core *muxc; 137 struct i2c_mux_core *muxc;
138 int num, force; 138 int num, force;
diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c
index 24bd9275fde5..bfabf985e830 100644
--- a/drivers/i2c/muxes/i2c-mux-pca954x.c
+++ b/drivers/i2c/muxes/i2c-mux-pca954x.c
@@ -347,7 +347,7 @@ static void pca954x_cleanup(struct i2c_mux_core *muxc)
347static int pca954x_probe(struct i2c_client *client, 347static int pca954x_probe(struct i2c_client *client,
348 const struct i2c_device_id *id) 348 const struct i2c_device_id *id)
349{ 349{
350 struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 350 struct i2c_adapter *adap = client->adapter;
351 struct pca954x_platform_data *pdata = dev_get_platdata(&client->dev); 351 struct pca954x_platform_data *pdata = dev_get_platdata(&client->dev);
352 struct device *dev = &client->dev; 352 struct device *dev = &client->dev;
353 struct device_node *np = dev->of_node; 353 struct device_node *np = dev->of_node;
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 7e50e1d6f58c..636ed7149793 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -106,23 +106,6 @@ static unsigned int at24_write_timeout = 25;
106module_param_named(write_timeout, at24_write_timeout, uint, 0); 106module_param_named(write_timeout, at24_write_timeout, uint, 0);
107MODULE_PARM_DESC(at24_write_timeout, "Time (in ms) to try writes (default 25)"); 107MODULE_PARM_DESC(at24_write_timeout, "Time (in ms) to try writes (default 25)");
108 108
109/*
110 * Both reads and writes fail if the previous write didn't complete yet. This
111 * macro loops a few times waiting at least long enough for one entire page
112 * write to work while making sure that at least one iteration is run before
113 * checking the break condition.
114 *
115 * It takes two parameters: a variable in which the future timeout in jiffies
116 * will be stored and a temporary variable holding the time of the last
117 * iteration of processing the request. Both should be unsigned integers
118 * holding at least 32 bits.
119 */
120#define at24_loop_until_timeout(tout, op_time) \
121 for (tout = jiffies + msecs_to_jiffies(at24_write_timeout), \
122 op_time = 0; \
123 op_time ? time_before(op_time, tout) : true; \
124 usleep_range(1000, 1500), op_time = jiffies)
125
126struct at24_chip_data { 109struct at24_chip_data {
127 /* 110 /*
128 * these fields mirror their equivalents in 111 * these fields mirror their equivalents in
@@ -308,13 +291,22 @@ static ssize_t at24_regmap_read(struct at24_data *at24, char *buf,
308 /* adjust offset for mac and serial read ops */ 291 /* adjust offset for mac and serial read ops */
309 offset += at24->offset_adj; 292 offset += at24->offset_adj;
310 293
311 at24_loop_until_timeout(timeout, read_time) { 294 timeout = jiffies + msecs_to_jiffies(at24_write_timeout);
295 do {
296 /*
297 * The timestamp shall be taken before the actual operation
298 * to avoid a premature timeout in case of high CPU load.
299 */
300 read_time = jiffies;
301
312 ret = regmap_bulk_read(regmap, offset, buf, count); 302 ret = regmap_bulk_read(regmap, offset, buf, count);
313 dev_dbg(&client->dev, "read %zu@%d --> %d (%ld)\n", 303 dev_dbg(&client->dev, "read %zu@%d --> %d (%ld)\n",
314 count, offset, ret, jiffies); 304 count, offset, ret, jiffies);
315 if (!ret) 305 if (!ret)
316 return count; 306 return count;
317 } 307
308 usleep_range(1000, 1500);
309 } while (time_before(read_time, timeout));
318 310
319 return -ETIMEDOUT; 311 return -ETIMEDOUT;
320} 312}
@@ -358,14 +350,23 @@ static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf,
358 regmap = at24_client->regmap; 350 regmap = at24_client->regmap;
359 client = at24_client->client; 351 client = at24_client->client;
360 count = at24_adjust_write_count(at24, offset, count); 352 count = at24_adjust_write_count(at24, offset, count);
353 timeout = jiffies + msecs_to_jiffies(at24_write_timeout);
354
355 do {
356 /*
357 * The timestamp shall be taken before the actual operation
358 * to avoid a premature timeout in case of high CPU load.
359 */
360 write_time = jiffies;
361 361
362 at24_loop_until_timeout(timeout, write_time) {
363 ret = regmap_bulk_write(regmap, offset, buf, count); 362 ret = regmap_bulk_write(regmap, offset, buf, count);
364 dev_dbg(&client->dev, "write %zu@%d --> %d (%ld)\n", 363 dev_dbg(&client->dev, "write %zu@%d --> %d (%ld)\n",
365 count, offset, ret, jiffies); 364 count, offset, ret, jiffies);
366 if (!ret) 365 if (!ret)
367 return count; 366 return count;
368 } 367
368 usleep_range(1000, 1500);
369 } while (time_before(write_time, timeout));
369 370
370 return -ETIMEDOUT; 371 return -ETIMEDOUT;
371} 372}