u-boot/drivers/i2c
Michael Auchter 3104162a8b i2c: i2c_cdns: fix write timeout on fifo boundary
This fixes an issue that would cause I2C writes to timeout when the
number of bytes is a multiple of the FIFO depth (i.e. 16 bytes).

Within the transfer loop, after writing the data register with a new
byte to transfer, if the transfer size equals the FIFO depth, the loop
pauses until the INTERRUPT_COMP bit asserts to indicate data has been
sent. This same check is performed after the loop as well to ensure data
has been transferred prior to returning.

In the case where the amount of data to be written is a multiple of the
FIFO depth, the transfer loop would wait for the INTERRUPT_COMP bit to
assert after writing the final byte, and then wait for this bit to
assert once more. However, since the transfer has finished at this
point, no new data has been written to the data register, and hence
INTERRUPT_COMP will never assert.

Fix this by only waiting for INTERRUPT_COMP in the transfer loop if
there's still data to be written.

Signed-off-by: Michael Auchter <michael.auchter@ni.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2019-12-11 06:25:13 +01:00
..
muxes i2c-mux-gpio: Fix GPIO request flag issue 2019-08-27 06:19:50 +02:00
ast_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ast_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
at91_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
at91_i2c.h i2c: atmel: add i2c driver 2016-08-15 22:12:00 +02:00
cros_ec_ldo.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
cros_ec_tunnel.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
davinci_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
davinci_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
designware_i2c.c i2c: designware: Get clock rate from clock DM 2019-07-09 07:02:11 +02:00
designware_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
exynos_hs_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
fsl_i2c.c common: Move some time functions out of common.h 2019-12-02 18:23:11 -05:00
i2c-cdns.c i2c: i2c_cdns: fix write timeout on fifo boundary 2019-12-11 06:25:13 +01:00
i2c-emul-uclass.c dm: sandbox: i2c: Add a new 'emulation parent' uclass 2018-11-29 09:30:05 -07:00
i2c-gpio.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
i2c-uclass.c DM: I2C: Introduce 'u-boot, i2c-transaction-bytes' property 2019-04-11 15:21:33 +02:00
i2c-uniphier-f.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
i2c-uniphier.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
i2c-versatile.c i2c: Add support for the Arm's Versatile Express I2C controller. 2018-10-03 06:08:06 +02:00
i2c_core.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ihs_i2c.c i2c: ihs: Improve error handling 2019-05-21 07:52:34 +02:00
imx_lpi2c.c i2c: imx_lpi2c: add ipg clk 2019-10-14 09:31:41 +02:00
intel_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
Kconfig i2c: remove i2c driver-model compatibility layer 2019-07-29 17:58:52 -04:00
kona_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
lpc32xx_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
Makefile i2c: remove i2c driver-model compatibility layer 2019-07-29 17:58:52 -04:00
meson_i2c.c i2c: meson: add configurable divider factors 2019-04-10 16:50:02 +02:00
mv_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mv_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mvtwsi.c i2c: mvtwsi: fix reading status register after interrupt 2019-05-03 08:14:39 +02:00
mxc_i2c.c i2c: mxc: add CONFIG_CLK support 2019-09-02 06:35:08 +02:00
omap24xx_i2c.c i2c: omap24xx_i2c: Use platdata to probe the device 2018-12-10 06:11:18 +01:00
omap24xx_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
rcar_i2c.c i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover 2019-03-08 05:53:40 +01:00
rcar_iic.c i2c: rcar_iic: Read ICSR only once 2019-03-07 06:20:09 +01:00
rk_i2c.c rockchip: i2c: don't sent stop bit after each message 2019-11-23 22:29:49 +08:00
s3c24x0_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
s3c24x0_i2c.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
sandbox_i2c.c dm: sandbox: i2c: Use new emulator parent uclass 2018-11-29 09:30:05 -07:00
sh_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
soft_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
stm32f7_i2c.c i2c: stm32f7_i2c: Fix warnings when compiling with W=1 2019-07-12 11:50:55 +02:00
tegra186_bpmp_i2c.c i2c: tegra: Fix regression by implementing a dummy probe_chip() callback 2018-12-12 06:06:14 +01:00
tegra_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
xilinx_xiic.c xilinx_xiic: Fix transfer initialisation 2019-07-09 07:02:11 +02:00