linux/drivers/i2c/busses
Doug Anderson 4489750fa5 i2c: rk3x: Increase wait timeout to 1 second
Although unlikely, it is remotely possible for an i2c command to need
more than 200ms complete. Unlike smbus, i2c devices can clock stretch
for an unspecified amount of time. The longest time I've seen
specified for a device is 144ms (bq27541 battery gas), but one could
imagine a device taking a bit slower. 1 second "ought to be enough for
anyone."

The above is not the only justifcation for going above 200ms for a
timeout, though.  It turns out that if you've got a large number of
printks going out to a serial console, interrupts on a CPU can be
disabled for hundreds of milliseconds. That's not a great situation to
be in to start with (maybe we should put a cap in vprintk_emit()) but
it's pretty annoying to start seeing unexplained i2c timeouts.

Note that to understand why we can timeout when printk has interrupts
disabled, you need to understand that on current Linux ARM kernels
interrupts are routed to a single CPU in a multicore system. Thus,
you can get:

1. CPU1 is running rk3x_i2c_xfer()
2. CPU0 calls vprintk_emit(), which disables all IRQs on CPU0.
3. I2C interrupt is ready but is set to only run on CPU0, where IRQs
   are disabled.
4. CPU1 timeout expires. I2C interrupt is still ready, but CPU0 is
   still sitting in the same vprintk_emit()
5. CPU1 sees that no interrupt happened in 200ms, so timeout.

A normal system shouldn't see i2c timeouts anyway, so increasing the
timeout should help people debugging without hurting other people
excessively.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Tested-by: Caesar Wang <wxt@rock-chips.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2015-05-12 15:15:17 +02:00
..
i2c-acorn.c i2c: acorn: is tristate and should use module.h 2014-01-24 18:21:11 +01:00
i2c-ali15x3.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-ali1535.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-ali1563.c i2c: ali1563: fix checkpatch.pl issues 2014-05-22 10:09:21 +02:00
i2c-amd756-s4882.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-amd756.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-amd8111.c i2c: remove DEFINE_PCI_DEVICE_TABLE macro 2014-03-13 09:44:59 +01:00
i2c-at91.c i2c: at91: fixup return type of wait_for_completion_timeout 2015-03-15 10:54:08 +01:00
i2c-au1550.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-axxia.c i2c: axxia: fixup return type of wait_for_completion_timeout 2015-03-15 10:51:34 +01:00
i2c-bcm2835.c i2c: i2c-bcm2835: match return type of wait_for_completion_timeout 2015-03-15 10:28:34 +01:00
i2c-bcm-iproc.c i2c: bcm-iproc: make use of the new infrastructure for quirks 2015-03-13 15:10:59 +01:00
i2c-bcm-kona.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-bfin-twi.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-cadence.c i2c: cadence: fixup wait_for_completion_timeout return handling 2015-03-15 10:20:45 +01:00
i2c-cbus-gpio.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-cpm.c i2c: cpm: make use of the new infrastructure for quirks 2015-03-13 15:10:54 +01:00
i2c-cros-ec-tunnel.c mfd: cros_ec: Use fixed size arrays to transfer data with the EC 2015-02-26 15:44:52 -08:00
i2c-davinci.c i2c: davinci: use ICPFUNC to toggle I2C as gpio for bus recovery 2015-04-10 17:57:28 +02:00
i2c-designware-baytrail.c i2c: designware-baytrail: baytrail_i2c_acquire() might sleep 2015-03-07 01:08:26 +01:00
i2c-designware-core.c i2c: designware: fixup return handling of wait_for_completion_timeout 2015-03-15 10:22:38 +01:00
i2c-designware-core.h i2c: designware: Add Intel Baytrail PMIC I2C bus support 2015-01-26 12:26:25 +01:00
i2c-designware-pcidrv.c i2c: designware-pci: update Intel copyright line 2015-02-17 16:42:43 +01:00
i2c-designware-platdrv.c Power management and ACPI updates for v4.1-rc1 2015-04-14 20:21:54 -07:00
i2c-digicolor.c i2c: digicolor: remove duplicate include 2015-04-23 19:35:32 +02:00
i2c-diolan-u2c.c i2c: remove unnecessary OOM messages 2014-06-02 19:24:33 +02:00
i2c-dln2.c i2c: dln2: set the device tree node of the adapter 2015-03-27 16:56:21 +01:00
i2c-efm32.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-eg20t.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-elektor.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-exynos5.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-gpio.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-highlander.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-hix5hd2.c PM: Merge the SET*_RUNTIME_PM_OPS() macros 2014-12-04 00:51:30 +01:00
i2c-hydra.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-i801.c i2c: i801: Use managed pcim_* PCI device initialization and reservation 2015-03-09 10:51:59 +01:00
i2c-ibm_iic.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-ibm_iic.h
i2c-img-scb.c i2c: img-scb: fixup of wait_for_completion_timeout return handling 2015-03-15 10:54:09 +01:00
i2c-imx.c i2c: imx: match return type of wait_for_completion_timeout 2015-03-15 10:50:28 +01:00
i2c-iop3xx.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-iop3xx.h i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-isch.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-ismt.c i2c: ismt: fix type of return var of wait_for_completion_timeout 2015-03-15 10:50:02 +01:00
i2c-jz4780.c i2c: jz4780: Fix build for m68k and sparc64 2015-04-15 17:57:26 +02:00
i2c-kempld.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-meson.c i2c: add support for Amlogic Meson I2C controller 2014-11-18 16:16:44 +01:00
i2c-mpc.c i2c: mpc: Fix ISR return value 2015-03-27 16:53:41 +01:00
i2c-mv64xxx.c i2c: mv64xxx: rework offload support to fix several problems 2014-12-17 19:26:03 +01:00
i2c-mxs.c i2c: mxs: fix broken email address 2015-04-23 19:35:29 +02:00
i2c-nforce2-s4985.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-nforce2.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-nomadik.c i2c: nomadik: match status to return type of read_i2c 2015-03-15 10:51:13 +01:00
i2c-ocores.c i2c: ocores: rework clk code to handle NULL cookie 2015-02-20 18:01:23 +01:00
i2c-octeon.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-omap.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-opal.c i2c: opal: Update quirk flags to do write-then-anything 2015-03-14 12:08:21 +01:00
i2c-parport-light.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-parport.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-parport.h i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-pasemi.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-pca-isa.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-pca-platform.c i2c: pca-platform: fix broken email address 2015-04-23 19:35:30 +02:00
i2c-piix4.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-pmcmsp.c i2c: pmcmsp: make use of the new infrastructure for quirks 2015-03-13 15:10:58 +01:00
i2c-pnx.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-powermac.c i2c: powermac: make use of the new infrastructure for quirks 2015-03-13 15:10:57 +01:00
i2c-puv3.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-pxa-pci.c i2c: remove DEFINE_PCI_DEVICE_TABLE macro 2014-03-13 09:44:59 +01:00
i2c-pxa.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-qup.c i2c: qup: make use of the new infrastructure for quirks 2015-03-13 15:10:53 +01:00
i2c-rcar.c i2c: slave: rework the slave API 2015-03-27 16:53:38 +01:00
i2c-riic.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-rk3x.c i2c: rk3x: Increase wait timeout to 1 second 2015-05-12 15:15:17 +02:00
i2c-robotfuzz-osif.c i2c: Add bus driver for for OSIF USB i2c device. 2014-01-13 13:56:56 +01:00
i2c-s3c2410.c i2c: s3c2410: fix ABBA deadlock by keeping clock prepared 2015-01-24 05:43:45 +01:00
i2c-scmi.c i2c: delete non-required instances of include <linux/init.h> 2014-01-24 18:24:31 +01:00
i2c-sh7760.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-sh_mobile.c i2c: sh_mobile: terminate DMA reads properly 2015-01-30 17:58:43 +01:00
i2c-sibyte.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-simtec.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-sirf.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-sis96x.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-sis630.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-sis5595.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-st.c i2c: st: add include for pinctrl 2015-04-23 19:35:33 +02:00
i2c-stu300.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-sun6i-p2wi.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-taos-evm.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-tegra.c i2c: tegra: match return type of wait_for_completion_timeout 2015-03-15 10:16:17 +01:00
i2c-tiny-usb.c i2c: i2c-tiny-usb: Remove RobotFuzz USB vendor:product ID 2014-01-13 13:56:52 +01:00
i2c-versatile.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-via.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-viapro.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-viperboard.c i2c: viperboard: make use of the new infrastructure for quirks 2015-03-13 15:10:57 +01:00
i2c-wmt.c i2c: wmt: match return type of wait_for_completion_timeout 2015-03-15 10:29:53 +01:00
i2c-xiic.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-xlp9xx.c i2c: xlp9xx: Driver for Netlogic XLP9XX/5XX I2C controller 2015-04-10 18:59:49 +02:00
i2c-xlr.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
Kconfig i2c: xlp9xx: Driver for Netlogic XLP9XX/5XX I2C controller 2015-04-10 18:59:49 +02:00
Makefile i2c: xlp9xx: Driver for Netlogic XLP9XX/5XX I2C controller 2015-04-10 18:59:49 +02:00
scx200_acb.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00