[SRU][N:linux-bluefield][PATCH v1 1/5] Revert "UBUNTU: SAUCE: i2c-mlxbf: Repeated start support"

Chris Babroski cbabroski at nvidia.com
Wed Aug 6 19:02:55 UTC 2025


BugLink: https://bugs.launchpad.net/bugs/2119651

This reverts commit 9e9222c1a436bca94cded42c37460442623a9615.

Signed-off-by: Chris Babroski <cbabroski at nvidia.com>
---
 drivers/i2c/busses/i2c-mlxbf.c | 34 ++++++++--------------------------
 1 file changed, 8 insertions(+), 26 deletions(-)

diff --git a/drivers/i2c/busses/i2c-mlxbf.c b/drivers/i2c/busses/i2c-mlxbf.c
index a4920d000de8..a3c665bac6d4 100644
--- a/drivers/i2c/busses/i2c-mlxbf.c
+++ b/drivers/i2c/busses/i2c-mlxbf.c
@@ -224,7 +224,7 @@
 
 #define MLXBF_I2C_MASTER_ENABLE \
 	(MLXBF_I2C_MASTER_LOCK_BIT | MLXBF_I2C_MASTER_BUSY_BIT | \
-	 MLXBF_I2C_MASTER_START_BIT)
+	 MLXBF_I2C_MASTER_START_BIT | MLXBF_I2C_MASTER_STOP_BIT)
 
 #define MLXBF_I2C_MASTER_ENABLE_WRITE \
 	(MLXBF_I2C_MASTER_ENABLE | MLXBF_I2C_MASTER_CTL_WRITE_BIT)
@@ -338,7 +338,6 @@ enum {
 	MLXBF_I2C_F_SMBUS_BLOCK = BIT(5),
 	MLXBF_I2C_F_SMBUS_PEC = BIT(6),
 	MLXBF_I2C_F_SMBUS_PROCESS_CALL = BIT(7),
-	MLXBF_I2C_F_WRITE_WITHOUT_STOP = BIT(8),
 };
 
 /* Mellanox BlueField chip type. */
@@ -639,19 +638,16 @@ static void mlxbf_i2c_smbus_read_data(struct mlxbf_i2c_priv *priv,
 }
 
 static int mlxbf_i2c_smbus_enable(struct mlxbf_i2c_priv *priv, u8 slave,
-				  u8 len, u8 block_en, u8 pec_en, bool read,
-				  bool stop)
+				  u8 len, u8 block_en, u8 pec_en, bool read)
 {
-	u32 command = 0;
+	u32 command;
 
 	/* Set Master GW control word. */
-	if (stop)
-		command |= MLXBF_I2C_MASTER_STOP_BIT;
 	if (read) {
-		command |= MLXBF_I2C_MASTER_ENABLE_READ;
+		command = MLXBF_I2C_MASTER_ENABLE_READ;
 		command |= rol32(len, MLXBF_I2C_MASTER_READ_SHIFT);
 	} else {
-		command |= MLXBF_I2C_MASTER_ENABLE_WRITE;
+		command = MLXBF_I2C_MASTER_ENABLE_WRITE;
 		command |= rol32(len, MLXBF_I2C_MASTER_WRITE_SHIFT);
 	}
 	command |= rol32(slave, MLXBF_I2C_MASTER_SLV_ADDR_SHIFT);
@@ -686,10 +682,8 @@ mlxbf_i2c_smbus_start_transaction(struct mlxbf_i2c_priv *priv,
 	u8 op_idx, data_idx, data_len, write_len, read_len;
 	struct mlxbf_i2c_smbus_operation *operation;
 	u8 read_en, write_en, block_en, pec_en;
-	bool stop_after_write = true;
-	u8 slave, addr;
+	u8 slave, flags, addr;
 	u8 *read_buf;
-	u32 flags;
 	u32 bits;
 	int ret;
 
@@ -761,16 +755,7 @@ mlxbf_i2c_smbus_start_transaction(struct mlxbf_i2c_priv *priv,
 			memcpy(data_desc + data_idx,
 			       operation->buffer, operation->length);
 			data_idx += operation->length;
-
-			/*
-			 * The stop condition can be skipped when writing on the bus
-			 * to implement a repeated start condition on the next read
-			 * as required for several SMBus and I2C operations.
-			 */
-			if (flags & MLXBF_I2C_F_WRITE_WITHOUT_STOP)
-				stop_after_write = false;
 		}
-
 		/*
 		 * We assume that read operations are performed only once per
 		 * SMBus transaction. *TBD* protect this statement so it won't
@@ -796,7 +781,7 @@ mlxbf_i2c_smbus_start_transaction(struct mlxbf_i2c_priv *priv,
 
 	if (write_en) {
 		ret = mlxbf_i2c_smbus_enable(priv, slave, write_len, block_en,
-					 pec_en, 0, stop_after_write);
+					 pec_en, 0);
 		if (ret)
 			goto out_unlock;
 	}
@@ -806,7 +791,7 @@ mlxbf_i2c_smbus_start_transaction(struct mlxbf_i2c_priv *priv,
 		mlxbf_i2c_smbus_write_data(priv, (const u8 *)&addr, 1,
 					   MLXBF_I2C_MASTER_DATA_DESC_ADDR, true);
 		ret = mlxbf_i2c_smbus_enable(priv, slave, read_len, block_en,
-					 pec_en, 1, true);
+					 pec_en, 1);
 		if (!ret) {
 			/* Get Master GW data descriptor. */
 			mlxbf_i2c_smbus_read_data(priv, data_desc, read_len + 1,
@@ -912,9 +897,6 @@ mlxbf_i2c_smbus_i2c_block_func(struct mlxbf_i2c_smbus_request *request,
 	request->operation[0].flags |= pec_check ? MLXBF_I2C_F_SMBUS_PEC : 0;
 	request->operation[0].buffer = command;
 
-	if (read)
-		request->operation[0].flags |= MLXBF_I2C_F_WRITE_WITHOUT_STOP;
-
 	/*
 	 * As specified in the standard, the max number of bytes to read/write
 	 * per block operation is 32 bytes. In Golan code, the controller can
-- 
2.34.1




More information about the kernel-team mailing list