i2c: cadence: Clear HOLD bit before xfer_size register rolls over
authorRaviteja Narayanam <raviteja.narayanam@xilinx.com>
Tue, 24 Nov 2020 07:46:05 +0000 (13:16 +0530)
committerWolfram Sang <wsa@kernel.org>
Wed, 23 Jun 2021 16:17:08 +0000 (18:17 +0200)
commitdd66b39f600b0c4d17008226e76ff0f98a2ef674
treeccf79450032605edede4a2449277fd1068ddd700
parent4aa908fe4704ef9c09a6b2c19b4b49855a3d6055
i2c: cadence: Clear HOLD bit before xfer_size register rolls over

On Xilinx zynq SOC if the delay between address register write and
control register write in cdns_mrecv function is more, the xfer size
register rolls over and controller is stuck. This is an IP bug and
is resolved in later versions of IP.

To avoid this scenario, disable the interrupts on the current processor
core between the two register writes and enable them later. This can
help achieve the timing constraint.

Signed-off-by: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Acked-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-cadence.c