From: Vincent Jardin <vjardin@free.fr>
To: "Carlos Song (OSS)" <carlos.song@oss.nxp.com>
Cc: Oleksij Rempel <o.rempel@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Andi Shyti <andi.shyti@kernel.org>, Frank Li <frank.li@nxp.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>, Wolfram Sang <wsa@kernel.org>,
Kaushal Butala <kaushalkernelmailinglist@gmail.com>,
Shawn Guo <shawn.guo@freescale.com>,
Stefan Eichenberger <stefan.eichenberger@toradex.com>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
"imx@lists.linux.dev" <imx@lists.linux.dev>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: Re: [PATCH v2 0/2] i2c: imx: fix SMBus block-read of 0 locking the bus
Date: Tue, 26 May 2026 10:12:05 +0200 [thread overview]
Message-ID: <ahVV1X_cdhHDmRwc@L30177.local> (raw)
In-Reply-To: <AM0PR04MB6802B906706F0CDE5BA73696E80B2@AM0PR04MB6802.eurprd04.prod.outlook.com>
Hi Carlos,
> Thanks for working on this fix, this looks good to me.
thanks for checking it. It took some times to isolate this issue and
then find a fix.
> SMBus block reads with a length of 0 seem quite uncommon in practice.
> Was this triggered by a specific device behavior, or mainly found
> during boundary / compliance testing?
It is trigger by the usage of a mpq8785 on the i2c bus: when the kernel attaches
on it using its pmsbus/hwmon framework, then the i2c bus get locked on lx2160 !
> Regarding the handling of len == 0,
> I see that the patch sets:
>
> msg->buf[0] = 0;
> msg->len = 2;
>
> It relies on the last-byte STOP handling together with TXAK. It will help I2C-IMX generate NACK + STOP and
> release the bus, right?
Yes, exactly. Reading I2DR for the length byte has already armed the
next byte, so we set TXAK to NACK it and extend msg->len to 2.
Next then i2c_imx_isr_read_continue() at msg_buf_idx == msg->len - 1,
ie the normal last-byte path, which clears MSTA to emit STOP. So NACK + STOP,
and THEN the bus is released. I do not see any other means to handle it.
> len = 0 is a legal behavior, So it go into a successful path.
Yes. count == 0 is legal (SMBus 3.1 6.5.7), so the transfer reaches
STATE_DONE and returns success.
> But len > I2C_SMBUS_BLOCK_MAX is abnormal behavior. So it go into a fail path.
Correct, and it is a protocol error, so it needs to end up with a -EPROTO while
a count of 0 is an ok case.
> Do I understand it right?
yes. I do not see any other means to handle it.
> Also, if possible could you briefly describe how you validated this change
> (e.g. test setup or steps, with and without the fix)?
On a lx2160a board, on its i2c, bind a mpq8785, and enable the Kernel pmbus/hwmon
framework, then the i2c bus becomes un-useable. Using a scope, we can confirm that
the lx21260a i2c cannot recover.
Best regards,
Vincent
next prev parent reply other threads:[~2026-05-26 8:12 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-25 11:24 [PATCH 0/2] i2c: imx: fix SMBus block-read of 0 locking the bus Vincent Jardin
2026-05-25 11:24 ` [PATCH 1/2] i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) Vincent Jardin
2026-05-25 12:04 ` sashiko-bot
2026-05-25 15:11 ` Vincent Jardin
2026-05-25 11:24 ` [PATCH 2/2] i2c: imx: fix locked bus on SMBus block-read of 0 (IRQ) Vincent Jardin
2026-05-25 13:33 ` sashiko-bot
2026-05-25 15:18 ` Vincent Jardin
2026-05-25 16:43 ` [PATCH v2 0/2] i2c: imx: fix SMBus block-read of 0 locking the bus Vincent Jardin
2026-05-25 16:43 ` [PATCH v2 1/2] i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) Vincent Jardin
2026-05-25 17:18 ` sashiko-bot
2026-05-26 8:24 ` Vincent Jardin
2026-05-25 16:43 ` [PATCH v2 2/2] i2c: imx: fix locked bus on SMBus block-read of 0 (IRQ) Vincent Jardin
2026-05-25 18:24 ` sashiko-bot
2026-05-26 8:26 ` Vincent Jardin
2026-05-26 7:00 ` [PATCH v2 0/2] i2c: imx: fix SMBus block-read of 0 locking the bus Carlos Song (OSS)
2026-05-26 8:12 ` Vincent Jardin [this message]
2026-05-26 9:00 ` Carlos Song (OSS)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ahVV1X_cdhHDmRwc@L30177.local \
--to=vjardin@free.fr \
--cc=andi.shyti@kernel.org \
--cc=carlos.song@oss.nxp.com \
--cc=festevam@gmail.com \
--cc=frank.li@nxp.com \
--cc=imx@lists.linux.dev \
--cc=kaushalkernelmailinglist@gmail.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=s.hauer@pengutronix.de \
--cc=shawn.guo@freescale.com \
--cc=stable@vger.kernel.org \
--cc=stefan.eichenberger@toradex.com \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.