From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: "Benoît Monin" <benoit.monin@bootlin.com>
Cc: "Andi Shyti" <andi.shyti@kernel.org>,
"Mika Westerberg" <mika.westerberg@linux.intel.com>,
"Jan Dabros" <jsd@semihalf.com>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
"Clark Williams" <clrkwllms@kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
"Gregory CLEMENT" <gregory.clement@bootlin.com>,
"Théo Lebrun" <theo.lebrun@bootlin.com>,
"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>,
"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
"Dmitry Guzman" <dmitry.guzman@mobileye.com>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-rt-devel@lists.linux.dev
Subject: Re: [PATCH v5 6/6] i2c: designware: Support of controller with IC_EMPTYFIFO_HOLD_MASTER disabled
Date: Fri, 23 Jan 2026 08:03:02 +0100 [thread overview]
Message-ID: <aXMdJtaQ1eHj3PDJ@black.igk.intel.com> (raw)
In-Reply-To: <20260120-i2c-dw-v5-6-0e34d6d9455c@bootlin.com>
On Tue, Jan 20, 2026 at 10:28:06AM +0100, Benoît Monin wrote:
> If IC_EMPTYFIFO_HOLD_MASTER_EN parameter is 0, "Stop" and "Repeated Start"
> bits in command register does not exist, thus it is impossible to send
do not exist
> several consecutive write messages in a single hardware batch. The
> existing implementation worked with such configuration incorrectly:
> all consecutive write messages are joined into a single message without
> any Start/Stop or Repeated Start conditions. For example, the following
> command:
>
> i2ctransfer -y 0 w1@0x55 0x00 w1@0x55 0x01
>
> does the same as
>
> i2ctransfer -y 0 w2@0x55 0x00 0x01
>
> In i2c_dw_msg_is_valid(), we ensure that we do not have such sequence
> of messages requiring a RESTART, aborting the transfer on controller
> that cannot emit them explicitly.
>
> This behavior is activated by compatible entries because the state of
> the IC_EMPTYFIFO_HOLD_MASTER_EN parameter cannot be detected at runtime.
> The new flag emptyfifo_hold_master reflects the state of the parameter,
> it is set to true for all controllers except those found in Mobileye
> SoCs. For now, the controllers in Mobileye SoCs are the only ones known
> to need the workaround. The behavior of the driver is left unmodified
> for other controllers.
>
> There is another possible problem with this controller configuration:
> When the CPU is putting commands to the FIFO, this process must not be
> interrupted because if FIFO buffer gets empty, the controller finishes
> the I2C transaction and generates STOP condition on the bus.
>
> If we continue writing the remainder of the message to the FIFO, the
> controller will start emitting a new transaction with those data. This
> turns a single a single message into multiple I2C transactions. To
a single a single ?
> protect against FIFO underrun, two changes are done:
>
> First we flag the interrupt with IRQF_NO_THREAD, to prevent it from
> running in a thread on PREEMPT-RT kernel. This ensures that we are not
> interrupted when filling the FIFO as it is very time-senstive. For
> example, being preempted after writing a single byte in the FIFO with
> a 1MHz bus gives us only 18µs before an underrun.
>
> Second in i2c_dw_process_transfer(), we abort if a STOP is detected
> while a read or a write is in progress. This can occur when processing
> a message larger than the FIFO. In that case the message is processed in
> parts, and rely on the TX EMPTY interrupt to refill the FIFO when it gets
> below a threshold. If servicing this interrupt is delayed for too long,
> it can trigger a FIFO underrun, thus an unwanted STOP.
Can DMA enablement fix this issue?
...
> static const struct of_device_id dw_i2c_of_match[] = {
> { .compatible = "baikal,bt1-sys-i2c", .data = (void *)MODEL_BAIKAL_BT1 },
You need to rebase on top of the latest tip of i2c-host tree.
> + { .compatible = "mobileye,eyeq6lplus-i2c" },
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2026-01-23 7:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-20 9:28 [PATCH v5 0/6] i2c: designware: Improve support of multi-messages transfer Benoît Monin
2026-01-20 9:28 ` [PATCH v5 1/6] i2c: designware: Optimize flag reading in i2c_dw_read() Benoît Monin
2026-01-22 13:29 ` Andi Shyti
2026-01-20 9:28 ` [PATCH v5 2/6] i2c: designware: Sort compatible strings in alphabetical order Benoît Monin
2026-01-22 13:30 ` Andi Shyti
2026-01-20 9:28 ` [PATCH v5 3/6] i2c: designware: Add dedicated algorithm for AMD NAVI Benoît Monin
2026-01-20 9:39 ` Andy Shevchenko
2026-01-22 13:31 ` Andi Shyti
2026-01-20 9:28 ` [PATCH v5 4/6] i2c: designware: Implement I2C_M_STOP support Benoît Monin
2026-01-22 16:25 ` Andy Shevchenko
2026-01-23 14:25 ` Benoît Monin
2026-01-23 14:37 ` Andy Shevchenko
2026-01-20 9:28 ` [PATCH v5 5/6] i2c: designware: Use runtime PM macro for auto-cleanup Benoît Monin
2026-01-20 9:28 ` [PATCH v5 6/6] i2c: designware: Support of controller with IC_EMPTYFIFO_HOLD_MASTER disabled Benoît Monin
2026-01-23 7:03 ` Andy Shevchenko [this message]
2026-01-20 10:01 ` [PATCH v5 0/6] i2c: designware: Improve support of multi-messages transfer Mika Westerberg
2026-01-20 15:17 ` Benoît Monin
2026-01-22 13:33 ` Andi Shyti
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=aXMdJtaQ1eHj3PDJ@black.igk.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=andi.shyti@kernel.org \
--cc=benoit.monin@bootlin.com \
--cc=bigeasy@linutronix.de \
--cc=clrkwllms@kernel.org \
--cc=dmitry.guzman@mobileye.com \
--cc=gregory.clement@bootlin.com \
--cc=jsd@semihalf.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=mika.westerberg@linux.intel.com \
--cc=rostedt@goodmis.org \
--cc=tawfik.bayouk@mobileye.com \
--cc=theo.lebrun@bootlin.com \
--cc=thomas.petazzoni@bootlin.com \
--cc=vladimir.kondratiev@mobileye.com \
/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.