From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BFDA230D14 for ; Wed, 26 Nov 2025 10:46:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764154011; cv=none; b=FRc77OPc1jlrbXQjUtJI5mYSYp6vqJyJ5JIYWYx0HGR4ai3hTeVSq0/v6Zjz7BZL3Ymy1TMlPxm5R2kjxlt9NElKjT1lsUVCjU/imsLp5039kOMoUjlQXOz5dOPtTmA/fAqng4QyQQxmIKSyxTc52GIPRzCHepeBYoNkRQzcNUo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764154011; c=relaxed/simple; bh=mIiAraEhSTgJhM9r59CMhCNViKT0ulb2M8CujRugpok=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=a/YSqwFWq8De91IkhiZl9ShA8ca4lDLjLPzd7P6mlYXec+p9LbSTxfrC1h+/NUJzQz+IY1rtH81TrB1F6RF8IxsNo+/Z8nhpBXIROe81WxWnHst6sWQpLSxw0iwi0+2RuUsZx/Vjs2XB9Od6raRnqzvSYCMIIEAkXgEgsv+lsGI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=eKD/KeAe; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="eKD/KeAe" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 8FA3A1A1D6E; Wed, 26 Nov 2025 10:46:43 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 6229660721; Wed, 26 Nov 2025 10:46:43 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id B044C102F0828; Wed, 26 Nov 2025 11:46:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1764154002; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding; bh=yb84UQ4K4Vt3Jb+5rolXm9Z3vaTMJXGhobv4cyvcfeA=; b=eKD/KeAejqF+84cJpJ7wGV8gLEV9V1LWeVBYAGqnFD68y/W8XuLv7nm+ZMY7nRxM+vEgqq VgEgXjs9ErRaMYE92VLFdw389B+MbFax4LARm+boT3jXKLJOaFTPJ+WeXioarAPCM4kuir hmMUEWGyJEVcqZKR/PQz2uk5nNYbBVeX8YRu4OoeJdB7X0VVRX5GgIBRvVn3XssUw1wflt B2g+6m9J+RphlOqUM1s4UzCPdWCf1aiT3k/MVaGEC0tRd9kO1MHYQcmjQWlFQe5lQK0MYl XdTx3NuLK+QLSzCOL/4cKfJOtnqtXJavcA72gm4qL92pwLl3YQn85fjqiqLy6Q== From: =?utf-8?q?Beno=C3=AEt_Monin?= Subject: [PATCH v4 0/7] i2c: designware: Improve support of multi-messages transfer Date: Wed, 26 Nov 2025 11:46:23 +0100 Message-Id: <20251126-i2c-dw-v4-0-b0654598e7c5@bootlin.com> Precedence: bulk X-Mailing-List: linux-rt-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-B4-Tracking: v=1; b=H4sIAH/aJmkC/2XMTQ6CMBCG4auQrq3p9IeCK+9hXLRDkSZKDZCqI dzdQgJqXH6Ted6R9K7zrieHbCSdi773oU1D7jKCjWkvjvoqbcIZV8BAUs+RVg9aGQGq1qrgZU7 S871ztX8uodM57cb3Q+heSzfCfF0Tek1EoIxqWyirAbUp9NGGMFx9u8dwI3Mk8i8oYIM8wZJJy Asta0T2D8UHApQbFAlalBa54WgN/sJpmt4KjiQQEAEAAA== X-Change-ID: 20251014-i2c-dw-da315f758296 To: Andi Shyti , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jarkko Nikula , Mika Westerberg , Andy Shevchenko , Jan Dabros , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt Cc: Thomas Petazzoni , Gregory CLEMENT , =?utf-8?q?Th=C3=A9o_Lebrun?= , Tawfik Bayouk , Vladimir Kondratiev , Dmitry Guzman , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev, =?utf-8?q?Beno=C3=AEt_Monin?= , Krzysztof Kozlowski X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 Add support for the I2C_M_STOP flag to the .xfer() function of the designware driver. This allows grouping multiple accesses in a single call and changing the target address after a STOP flag. This is achieved by splitting i2c_dw_xfer() in two functions. The core logic handling the transaction is now in __i2c_dw_xfer_one_part(), while i2c_dw_xfer() loops over the messages to search for the I2C_M_STOP flag and calls __i2c_dw_xfer_one_part(). Handle controllers that lack the ability to emit a RESTART when two consecutive messages have the same address and direction by aborting transfers that contain such a sequence of messages. For those controllers, we also check that we do not get any unwanted STOP caused by a Tx FIFO underrun, as they lack the ability to hold the clock during a transaction. And we set the irq as non-threaded to prevent underrun on PREEMPT-RT kernel when filling the FIFO. The I2C controllers found in the EyeQ6Lplus and EyeQ7H SoCs from Mobileye lack such capability, so a compatible string is added because this cannot be detected at runtime. This patch series also brings four cleanups: * Optimize the read of the message flags in i2c_dw_read(). * Sort the compatible strings alphabetically in dw_i2c_of_match[]. * Simplify runtime PM handling in i2c_dw_xfer() with guard. * Add a dedicated i2c_algorithm for AMD NAVI controller. Signed-off-by: Benoît Monin --- Changes in v4: - Use a boolean property instead of a flag for handling controllers IC_EMPTYFIFO_HOLD_MASTER_EN. - Reorder the patches so goto and runtime PM auto-cleanup are not mixed in i2c_dw_xfer(). - Drop goto in __i2c_dw_xfer_one_part() and use return. - Tidy up comments for i2c_dw_msg_is_valid() and irq_flags. - Link to v3: https://lore.kernel.org/r/20251119-i2c-dw-v3-0-bc4bc2a2cbac@bootlin.com Changes in v3: - Add a compatible entry for Mobileye EyeQ7H i2c controllers. - Use runtime PM macro for auto-cleanup in i2c_dw_xfer(). - Add a dedicated i2c_algorithm for AMD NAVI controllers. - Rename __i2c_dw_xfer_unlocked() as it is not about locking at all. - Rework the validity check of i2c_msg. - Flag the irq as non-threaded for controllers that cannot hold the clock to avoid underrun. - Link to v2: https://lore.kernel.org/r/20251031-i2c-dw-v2-0-90416874fcc0@bootlin.com Changes in v2: - Add a single compatible for mobileye i2c controllers based in DesignWare IP. - Handle the I2C_M_STOP flag instead of emitting a STOP on target address change. - Abort transfer when it requires a RESTART on controller that cannot emit them. - Detect FIFO underrun instead of disabling threaded interrupt on PREEMPT_RT kernel. - Sort the compatible entries in a separate patch. - Add a cleanup patch on flag reading in i2c_dw_read(). - Link to v1: https://lore.kernel.org/r/20251017-i2c-dw-v1-0-7b85b71c7a87@bootlin.com --- Benoît Monin (7): dt-bindings: i2c: dw: Add Mobileye I2C controllers i2c: designware: Optimize flag reading in i2c_dw_read() i2c: designware: Sort compatible strings in alphabetical order i2c: designware: Add dedicated algorithm for AMD NAVI i2c: designware: Implement I2C_M_STOP support i2c: designware: Use runtime PM macro for auto-cleanup i2c: designware: Support of controller with IC_EMPTYFIFO_HOLD_MASTER disabled .../bindings/i2c/snps,designware-i2c.yaml | 7 + drivers/i2c/busses/i2c-designware-common.c | 6 + drivers/i2c/busses/i2c-designware-core.h | 3 + drivers/i2c/busses/i2c-designware-master.c | 197 +++++++++++++++------ drivers/i2c/busses/i2c-designware-platdrv.c | 5 +- 5 files changed, 160 insertions(+), 58 deletions(-) --- base-commit: 6772718099e29703ed50dcd0941a135d1fb6e612 change-id: 20251014-i2c-dw-da315f758296 Best regards, -- Benoît Monin, Bootlin Embedded Linux and Kernel engineering https://bootlin.com