linux/drivers/i2c/busses
Shardar Shariff Md 77821b4678 i2c: tegra: proper handling of error cases
To summarize the issue observed in error cases:

SW Flow: For i2c message transfer, packet header and data payload is
posted and then required error/packet completion interrupts are enabled
later.

HW flow: HW process the packet just after packet header is posted, if
ARB lost/NACK error occurs (SW will not handle immediately when error
happens as error interrupts are not enabled at this point). HW assumes
error is acknowledged and clears current data in FIFO, But SW here posts
the remaining data payload which still stays in FIFO as stale data
(data without packet header).

Now once the interrupts are enabled, SW handles ARB lost/NACK error by
clearing the ARB lost/NACK interrupt. Now HW assumes that SW attended
the error and will parse/process stale data (data without packet header)
present in FIFO which causes invalid NACK errors.

Fix: Enable the error interrupts before posting the packet into FIFO
which make sure HW to not clear the fifo. Also disable the packet mode
before acknowledging errors (ARB lost/NACK error) to not process any
stale data. As error interrupts are enabled before posting the packet
header use spinlock to avoid preempting.

Signed-off-by: Shardar Shariff Md <smohammed@nvidia.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2016-09-08 22:34:58 +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: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-amd8111.c i2c: remove DEFINE_PCI_DEVICE_TABLE macro 2014-03-13 09:44:59 +01:00
i2c-at91.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-au1550.c i2c: au1550: Convert to devm_kzalloc and devm_ioremap_resource 2015-10-23 23:31:11 +02:00
i2c-axxia.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-bcm2835.c i2c: bcm2835: Don't complain on -EPROBE_DEFER from getting our clock 2016-07-22 09:23:53 +02:00
i2c-bcm-iproc.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-bcm-kona.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-bfin-twi.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-brcmstb.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-cadence.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02: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: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-cros-ec-tunnel.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-davinci.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-designware-baytrail.c i2c: designware-platform: Drop duplicate module information 2016-02-12 20:40:13 +01:00
i2c-designware-core.c i2c: designware: do not disable adapter after transfer 2016-08-26 00:42:16 +02:00
i2c-designware-core.h i2c: designware: detect when dynamic tar update is possible 2016-08-26 00:42:15 +02:00
i2c-designware-pcidrv.c i2c: designware-pci: clarify a comment for Merrifield 2016-07-06 00:42:17 +09:00
i2c-designware-platdrv.c i2c: designware: Find bus speed from ACPI 2016-08-26 00:42:11 +02:00
i2c-digicolor.c i2c: digicolor: remove duplicate include 2015-04-23 19:35:32 +02:00
i2c-diolan-u2c.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-dln2.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-efm32.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-eg20t.c i2c: eg20t: set i2c_adapter->dev.of_node 2015-12-03 22:11:46 +01:00
i2c-elektor.c i2c: elektor: Utilize the module_isa_driver macro 2016-06-19 19:45:43 +02:00
i2c-emev2.c i2c: emev2: add slave support 2015-12-05 19:55:36 +01:00
i2c-exynos5.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02: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 i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-hydra.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-i801.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-ibm_iic.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-ibm_iic.h
i2c-img-scb.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-imx.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-iop3xx.c i2c: iop3xx: use new 8 bit address helper function 2016-04-11 18:54:59 +02:00
i2c-iop3xx.h i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-isch.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-ismt.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-jz4780.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-kempld.c i2c: busses: drop owner assignment from platform_drivers 2014-10-20 16:20:37 +02:00
i2c-lpc2k.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-meson.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-mpc.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-mt65xx.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-mv64xxx.c i2c: mv64xxx: remove CONFIG_HAVE_CLK conditionals 2016-04-27 19:03:15 +02:00
i2c-mxs.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-nforce2-s4985.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-nforce2.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-nomadik.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-ocores.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-octeon-core.c i2c: octeon: Use booleon values for booleon variables 2016-08-26 00:42:00 +02:00
i2c-octeon-core.h i2c: octeon,thunderx: Move register offsets to struct 2016-08-26 00:41:57 +02:00
i2c-octeon-platdrv.c i2c: octeon: Sort include files alphabetically 2016-08-26 00:41:58 +02:00
i2c-omap.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-opal.c powerpc/opal: Add inline function to get rc from an ASYNC_COMP opal_msg 2016-06-29 17:33:18 +10:00
i2c-parport-light.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
i2c-parport.c i2c: parport: start using pr_fmt 2015-08-10 08:37:28 +02:00
i2c-parport.h i2c: parport: Add VCT-jig adapter 2015-08-10 08:37:34 +02:00
i2c-pasemi.c i2c: remove FSF address 2014-11-07 18:35:33 +01:00
i2c-pca-isa.c i2c: pca-isa: Utilize the module_isa_driver macro 2016-06-19 19:49:29 +02:00
i2c-pca-platform.c i2c: pca-platform: fix broken email address 2015-04-23 19:35:30 +02:00
i2c-piix4.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-pmcmsp.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-pnx.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-powermac.c i2c: powermac: use new 8 bit address helper function 2016-04-11 18:54:59 +02:00
i2c-puv3.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-pxa-pci.c i2c: remove DEFINE_PCI_DEVICE_TABLE macro 2014-03-13 09:44:59 +01:00
i2c-pxa.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-qup.c Merge branch 'i2c/for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2016-07-27 14:19:25 -07:00
i2c-rcar.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-riic.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-rk3x.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: Constify osif_table 2016-06-13 22:32:09 +02:00
i2c-s3c2410.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02: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: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-sh_mobile.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02: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: don't print error when adding adapter fails 2016-08-22 08:19:55 +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: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-stu300.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +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: taos-evm: replace simple_strtoul by kstrtou8 2015-11-30 18:37:22 +01:00
i2c-tegra.c i2c: tegra: proper handling of error cases 2016-09-08 22:34:58 +02:00
i2c-thunderx-pcidrv.c i2c: octeon,thunderx: Move register offsets to struct 2016-08-26 00:41:57 +02:00
i2c-tiny-usb.c i2c: i2c-tiny-usb: Remove RobotFuzz USB vendor:product ID 2014-01-13 13:56:52 +01:00
i2c-uniphier-f.c i2c: uniphier{-f}: don't print error when adding adapter fails 2016-08-22 08:19:56 +02:00
i2c-uniphier.c i2c: uniphier{-f}: don't print error when adding adapter fails 2016-08-22 08:19:56 +02:00
i2c-versatile.c i2c: versatile: Convert to use resource managed devm_* APIs 2016-07-14 21:21:56 +09: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: clean up inconsistent indenting 2015-08-10 08:37:38 +02:00
i2c-wmt.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-xgene-slimpro.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-xiic.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-xlp9xx.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
i2c-xlr.c i2c: don't print error when adding adapter fails 2016-08-22 08:19:55 +02:00
Kconfig i2c: shmobile: Use ARCH_SHMOBILE instead of SUPERH 2016-09-08 22:24:13 +02:00
Makefile i2c: thunderx: Add i2c driver for ThunderX SOC 2016-08-26 00:41:55 +02:00
scx200_acb.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00