RE: [PATCH v2 0/6] i2c: xiic: Fix broken locking
From: Raviteja Narayanam <hidden>
Date: 2021-08-27 08:31:33
-----Original Message----- From: Michal Simek <redacted> Sent: Tuesday, August 24, 2021 12:29 PM To: Marek Vasut <marex@denx.de>; linux-i2c@vger.kernel.org; Raviteja Narayanam [off-list ref] Cc: Michal Simek <redacted>; Shubhrajyoti Datta [off-list ref]; Wolfram Sang [off-list ref] Subject: Re: [PATCH v2 0/6] i2c: xiic: Fix broken locking +ravi On 8/23/21 11:41 PM, Marek Vasut wrote:quoted
Booting ZynqMP with XIIC I2C driver shows multitude of race conditions in the XIIC driver. This is because locking is completely missing from the driver, and there are odd corner cases where the hardware behaves strangely. Most of these races could be triggered easily when booting on SMP machines, like the ZynqMP which has up to 4 cores. It is sufficient for the interrupt handler to run on another core than xiic_start_xfer and the driver fails completely. This does not add support for long transfers, this only fixes the driver to be usable at all instead of being completely broken. The V2 fixes a few remaining details which cropped up in deployment over the last year or so, so I believe the result should be reasonably well tested.
Thanks a lot for the patches, Marek. I have tested these on our boards and they are working fine. I will rebase my patch series on top of this and send after rc1.
quoted
Marek Vasut (6): i2c: xiic: Fix broken locking on tx_msg i2c: xiic: Drop broken interrupt handler i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process() i2c: xiic: Switch from waitqueue to completion i2c: xiic: Only ever transfer single message i2c: xiic: Fix RX IRQ busy check drivers/i2c/busses/i2c-xiic.c | 161 +++++++++++++++------------------- 1 file changed, 69 insertions(+), 92 deletions(-) Cc: Michal Simek <redacted> Cc: Shubhrajyoti Datta <redacted> Cc: Wolfram Sang <wsa@kernel.org>