drivers/i2c/busses/i2c-imx.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-)
i2c-imx rejects an SMBus Block Read byte count of 0 (valid per SMBus 3.1
6.5.7) as -EPROTO and returns without emitting a NACK + STOP, leaving the
target holding SDA so the bus stays stuck until a power cycle.
It was triggered by an MPQ8785 PMBus regulator on a LX2160A i2c
bus: when the kernel binds it using the pmbus/hwmon framework, the bus
locks up and it does never recovers. It was confirmed with a scope, with
and without the fix.
The same bug is occuring with two independently introduced spots, so the
fix is two patches with their respective Fixes: tags and backport ranges
1/2 atomic/polling path Fixes: 8e8782c71595 v3.16+
2/2 IRQ-driven state machine Fixes: 5f5c2d4579ca v6.13+
Signed-off-by: Vincent Jardin <vjardin@free.fr>
---
Changes in v3:
- no functional change; collected the review tags received on v2:
Acked-by Oleksij Rempel, Acked-by Carlos Song, Reviewed-by Stefan
Eichenberger (both patches)
- cover letter: add the real-world trigger (MPQ8785 PMBus regulator
on the LX2160A) and how the fix was validated, asked by Carlos Song
- resend as a new thread, per Andi Shyti's request
- Link to v2: https://lore.kernel.org/r/20260525-for-upstream-i2c-lx2160-fix-v1-v2-0-26a3cc8cd055@free.fr
Changes in v2:
- Handle when count > I2C_SMBUS_BLOCK_MAX the same way as count == 0
Reported by the Sashiko AI review on v1.
---
Vincent Jardin (2):
i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)
i2c: imx: fix locked bus on SMBus block-read of 0 (IRQ)
drivers/i2c/busses/i2c-imx.c | 36 +++++++++++++++++++++++++++++++++---
1 file changed, 33 insertions(+), 3 deletions(-)
---
base-commit: a13c140cc289c0b7b3770bce5b3ad42ab35074aa
change-id: 20260525-for-upstream-i2c-lx2160-fix-v1-0cba0a0093e5
Best regards,
--
Vincent Jardin <vjardin@free.fr>
On Mon, Jul 13, 2026 at 08:11:58PM +0200, Vincent Jardin wrote: > i2c-imx rejects an SMBus Block Read byte count of 0 (valid per SMBus 3.1 > 6.5.7) as -EPROTO and returns without emitting a NACK + STOP, leaving the > target holding SDA so the bus stays stuck until a power cycle. Bigger picture: Linux does not support SMBus3 which also allows byte counts of up to 255. I started sketching support for all that but could never implement it. That being said, despite no SMBus3 support, it should not hang the bus like here.
On Tue, Jul 14, 2026 at 05:45:31PM +0200, Wolfram Sang wrote: > On Mon, Jul 13, 2026 at 08:11:58PM +0200, Vincent Jardin wrote: > > i2c-imx rejects an SMBus Block Read byte count of 0 (valid per SMBus 3.1 > > 6.5.7) as -EPROTO and returns without emitting a NACK + STOP, leaving the > > target holding SDA so the bus stays stuck until a power cycle. > > Bigger picture: Linux does not support SMBus3 which also allows byte > counts of up to 255. I started sketching support for all that but could > never implement it. Yeah... I have claimed many times to have patches that add support to smbus3. I also promised many times that I should update and send them over :-) Andi > That being said, despite no SMBus3 support, it should not hang the bus > like here.
Hi Vincent, > Vincent Jardin (2): > i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) > i2c: imx: fix locked bus on SMBus block-read of 0 (IRQ) merged to i2c/i2c-fixes. Thanks, Andi
© 2016 - 2026 Red Hat, Inc.