From: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com>

Avoid a race condition where read transaction is started
keeping expected bytes as 0. Which sometimes would result in sending
STOP signal as no data is expected. Observed on QEMU platform.

Signed-off-by: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com>
Reviewed-by: Ashok Reddy Soma <ashok.reddy.s...@xilinx.com>
Signed-off-by: Michal Simek <michal.si...@xilinx.com>
---

 drivers/i2c/i2c-cdns.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/i2c-cdns.c b/drivers/i2c/i2c-cdns.c
index a650dd69b89f..5736afb45191 100644
--- a/drivers/i2c/i2c-cdns.c
+++ b/drivers/i2c/i2c-cdns.c
@@ -375,7 +375,6 @@ static int cdns_i2c_read_data(struct i2c_cdns_bus *i2c_bus, 
u32 addr, u8 *data,
                                curr_recv_count = recv_count;
                        }
                } else if (recv_count && !hold_quirk && !curr_recv_count) {
-                       writel(addr, &regs->address);
                        if (recv_count > CDNS_I2C_TRANSFER_SIZE) {
                                writel(CDNS_I2C_TRANSFER_SIZE,
                                       &regs->transfer_size);
@@ -384,6 +383,7 @@ static int cdns_i2c_read_data(struct i2c_cdns_bus *i2c_bus, 
u32 addr, u8 *data,
                                writel(recv_count, &regs->transfer_size);
                                curr_recv_count = recv_count;
                        }
+                       writel(addr, &regs->address);
                }
        }
 
-- 
2.35.1

Reply via email to