kernel-ark/drivers/i2c/busses
Paul Walmsley 0cbbcffdf5 i2c-omap: Close suspected race between omap_i2c_idle() and omap_i2c_isr()
omap_i2c_idle() sets an internal flag, "dev->idle", instructing its
ISR to decline interrupts.  It sets this flag before it actually masks
the interrupts on the I2C controller.  This is problematic, since an
I2C interrupt could arrive after dev->idle is set, but before the
interrupt source is masked.  When this happens, Linux disables the I2C
controller's IRQ, causing all future transactions on the bus to fail.

Symptoms, happening on about 7% of boots:

   irq 56: nobody cared (try booting with the "irqpoll" option)
   <warning traceback here>
   Disabling IRQ #56
   i2c_omap i2c_omap.1: controller timed out

In omap_i2c_idle(), this patch sets dev->idle only after the interrupt
mask write to the I2C controller has left the ARM write buffer.
That's probably the major offender.  For additional prophylaxis, in
omap_i2c_unidle(), the patch clears the dev->idle flag before
interrupts are enabled, rather than afterwards.

The patch has survived twenty-two reboots on the 3430SDP here without
wedging I2C1.  Not absolutely dispositive, but promising!

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2008-11-21 13:39:45 -08:00
..
i2c-acorn.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
i2c-ali15x3.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-ali1535.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-ali1563.c i2c: Check for ACPI resource conflicts 2008-07-14 22:38:33 +02:00
i2c-amd756-s4882.c i2c: Fix oops on bus multiplexer driver loading 2008-08-10 22:56:15 +02:00
i2c-amd756.c PCI: Check dynids driver_data value for validity 2008-10-20 10:48:35 -07:00
i2c-amd8111.c i2c: Check for ACPI resource conflicts 2008-07-14 22:38:33 +02:00
i2c-at91.c removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
i2c-au1550.c i2c-au1550: Fix PM support 2008-07-14 22:38:34 +02:00
i2c-bfin-twi.c i2c: Blackfin I2C Driver: Functional power management support 2008-07-28 12:41:03 +01:00
i2c-cpm.c i2c-cpm: Suppress autoprobing for devices 2008-10-20 23:31:24 -05:00
i2c-davinci.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
i2c-elektor.c i2c-algo-pcf: Pass adapter data into ->waitforpin() method 2008-10-22 20:21:29 +02:00
i2c-gpio.c i2c: i2c_gpio: keep probe resident for hotplugged devices. 2008-07-28 12:40:44 +01:00
i2c-highlander.c i2c: Renesas Highlander FPGA SMBus support 2008-10-14 17:30:03 +02:00
i2c-hydra.c i2c: Use pci_ioremap_bar() 2008-10-22 20:21:32 +02:00
i2c-i801.c i2c-i801: Add support for Intel Ibex Peak 2008-10-22 20:21:29 +02:00
i2c-ibm_iic.c i2c-ibm_iic: Register child nodes 2008-07-14 22:38:36 +02:00
i2c-ibm_iic.h i2c-ibm_iic: Whitespace cleanup 2008-01-27 18:14:45 +01:00
i2c-iop3xx.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-iop3xx.h
i2c-isch.c i2c: Check for ACPI resource conflicts 2008-07-14 22:38:33 +02:00
i2c-ixp2000.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
i2c-mpc.c i2c-mpc: suppress I2C device probing 2008-10-08 11:36:42 -06:00
i2c-mv64xxx.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-nforce2-s4985.c i2c: Fix oops on bus multiplexer driver loading 2008-08-10 22:56:15 +02:00
i2c-nforce2.c i2c: Check for ACPI resource conflicts 2008-07-14 22:38:33 +02:00
i2c-ocores.c i2c-ocores: basic PM support 2008-07-14 22:38:33 +02:00
i2c-omap.c i2c-omap: Close suspected race between omap_i2c_idle() and omap_i2c_isr() 2008-11-21 13:39:45 -08:00
i2c-parport-light.c i2c-parport-light: Don't register a platform device resource 2008-10-14 17:30:04 +02:00
i2c-parport.c Convert files to UTF-8 and some cleanups 2007-10-19 23:21:04 +02:00
i2c-parport.h i2c-parport: Add support for One For All remote JP1 interface 2007-02-13 22:09:02 +01:00
i2c-pasemi.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-pca-isa.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2008-10-15 08:07:35 -07:00
i2c-pca-platform.c i2c-pca-platform: Fix error code 2008-07-14 22:38:26 +02:00
i2c-piix4.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-pmcmsp.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-pnx.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
i2c-powermac.c hwmon: (ams) Convert to a new-style i2c driver 2008-10-17 17:51:12 +02:00
i2c-pxa.c [ARM] pxa: move i2c register and bit definitions into i2c-pxa.c 2008-10-07 19:12:55 +01:00
i2c-s3c2410.c i2c-s3c2410: Correct use of ! and & 2008-10-30 15:55:47 +01:00
i2c-sh7760.c i2c: Renesas SH7760 I2C master driver 2008-04-22 22:16:47 +02:00
i2c-sh_mobile.c i2c: fix i2c-sh_mobile rx underrun 2008-11-13 15:37:07 +09:00
i2c-sibyte.c i2c-sibyte: SWARM I2C board initialization 2008-07-14 22:38:33 +02:00
i2c-simtec.c i2c: Fix platform driver hotplug/coldplug 2008-04-22 22:16:49 +02:00
i2c-sis96x.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-sis630.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-sis5595.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-stub.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-taos-evm.c i2c: Consistently reject unsupported transactions 2008-07-14 22:38:25 +02:00
i2c-tiny-usb.c i2c-tiny-usb: New VID/PID pair 2008-04-11 12:07:05 +02:00
i2c-versatile.c i2c: Fix platform driver hotplug/coldplug 2008-04-22 22:16:49 +02:00
i2c-via.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
i2c-viapro.c PCI: Check dynids driver_data value for validity 2008-10-20 10:48:35 -07:00
i2c-voodoo3.c i2c: Drop stray references to lm_sensors 2008-07-14 22:38:34 +02:00
Kconfig i2c-i801: Add support for Intel Ibex Peak 2008-10-22 20:21:29 +02:00
Makefile i2c: Renesas Highlander FPGA SMBus support 2008-10-14 17:30:03 +02:00
scx200_acb.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
scx200_i2c.c scx200_i2c: Add missing class parameter 2008-10-30 15:55:47 +01:00