i2c: ismt: kill transaction in hardware on timeout
authorVasily Khoruzhick <vasilykh@arista.com>
Mon, 19 Aug 2024 20:51:04 +0000 (13:51 -0700)
committerAndi Shyti <andi.shyti@kernel.org>
Mon, 9 Sep 2024 22:36:55 +0000 (00:36 +0200)
commit46b2dfc0aa79277c2ed119975de72f49bddd77c9
treeca23639ae533a92fb8991df21bff72ba18d89202
parent66049b33c042dab0df9a27117702f9398b9cab20
i2c: ismt: kill transaction in hardware on timeout

On Intel Denverton SoC ismt controller may enter weird state when
transaction gets stuck. It times out in the driver, but unless
transaction is explicitly killed in the controller, it won't be able to
perform new transactions anymore.

The issue is extremely difficult to reproduce and may take weeks of non-
stop smbus traffic.

Numerous hours with logic analyzer didn't yield any useful results, it
looks like the controller stops toggling SCK line, i.e. the issue is
likely in the controller, since device doesn't do clock stretching, so
nothing is driving SCK except the host.

Explicitly kill transaction on timeout to recover the controller from
this state.

Signed-off-by: Vasily Khoruzhick <vasilykh@arista.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
drivers/i2c/busses/i2c-ismt.c