Skip to contentSkip to conversation

Patch "i2c: imx: Fix reset of I2SR_IAL flag" has been added to the 5.8-stable tree

DISCUSSION Christian Eggers 2 participants 4 messages Oct 12, 2020 1 message not in the archive Stable branch

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

Hi Greg,

the patch below has meanwhile been reverted by Wolfram Sang [1], because it has been superseded. Although the patch itself is not wrong, you also may want to revert it in order to avoid conflicts with the next version.

Best regards
Christian

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a02e7c429cb5e082e5d7be6e5b768828014ba70

Quoted 93 lines · On Sunday, 11 October 2020, 10:48:33 CEST, [email protected] wrote:

This is a note to let you know that I've just added the patch titled

i2c: imx: Fix reset of I2SR_IAL flag

to the 5.8-stable tree which can be found at:

http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=sum
mary

The filename of the patch is:
i2c-imx-fix-reset-of-i2sr_ial-flag.patch
and it can be found in the queue-5.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

From fa4d30556883f2eaab425b88ba9904865a4d00f3 Mon Sep 17 00:00:00 2001
From: Christian Eggers <[email protected]>
Date: Wed, 7 Oct 2020 10:45:22 +0200
Subject: i2c: imx: Fix reset of I2SR_IAL flag
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Christian Eggers <[email protected]>

commit fa4d30556883f2eaab425b88ba9904865a4d00f3 upstream.

According to the "VFxxx Controller Reference Manual" (and the comment block starting at line 97), Vybrid requires writing a one for clearing an interrupt flag. Syncing the method for clearing I2SR_IIF in i2c_imx_isr().

Fixes 4b775022f6fd ("i2c: imx: add struct to hold more configurable

quirks") Reviewed-by: Uwe Kleine-König <[email protected]>

---
 drivers/i2c/busses/i2c-imx.c |   20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)
drivers/i2c/busses/i2c-imx.c +14 -5
@@ -412,6 +412,19 @@ static void i2c_imx_dma_free(struct imx_
 	dma->chan_using = NULL;
 }
 
+static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int
 bits) +{
+	unsigned int temp;
+
+	/*
+	 * i2sr_clr_opcode is the value to clear all interrupts. Here we want to
+	 * clear only <bits>, so we write ~i2sr_clr_opcode with just <bits>
+	 * toggled. This is required because i.MX needs W1C and Vybrid uses W0C.
+	 */
+	temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits;
+	imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
+}
+
 static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy,
 bool atomic) {
 	unsigned long orig_jiffies = jiffies;
@@ -424,8 +437,7 @@ static int i2c_imx_bus_busy(struct imx_i
 
 		/* check for arbitration lost */
 		if (temp & I2SR_IAL) {
-			temp &= ~I2SR_IAL;
-			imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
+			i2c_imx_clear_irq(i2c_imx, I2SR_IAL);
 			return -EAGAIN;
 		}
 
@@ -623,9 +635,7 @@ static irqreturn_t i2c_imx_isr(int irq,
 	if (temp & I2SR_IIF) {
 		/* save status register */
 		i2c_imx->i2csr = temp;
-		temp &= ~I2SR_IIF;
-		temp |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF);
-		imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
+		i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
 		wake_up(&i2c_imx->queue);
 		return IRQ_HANDLED;
 	}

Patches currently in stable-queue which might be from [email protected] are

queue-5.8/i2c-imx-fix-reset-of-i2sr_ial-flag.patch

maintainer
#2 lore raw
Quoted 10 lines · Christian Eggers

Hi Greg,

the patch below has meanwhile been reverted by Wolfram Sang [1], because it has been superseded. Although the patch itself is not wrong, you also may want to revert it in order to avoid conflicts with the next version.

Best regards
Christian

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a02e7c429cb5e082e5d7be6e5b768828014ba70

Thanks for letting me know, now dropped.

greg k-h

#3 lore raw
Quoted 7 lines · Greg KH
Quoted 6 lines · Christian Eggers

Hi Greg,

the patch below has meanwhile been reverted by Wolfram Sang [1], because it has been superseded. Although the patch itself is not wrong, you also may want to revert it in order to avoid conflicts with the next version.

Quoted 8 lines
Quoted 5 lines

Best regards
Christian

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a02e7c429cb5e082e5d7be6e5b768828014ba70

Thanks for letting me know, now dropped.

greg k-h

Got just a bunch of notifications that this patch fa4d30556883 has (again) be applied to all stable trees. Somebody must have even backported it to < 5.8...

Best regards
Christian

maintainer
#4 lore raw
Quoted 11 lines · Christian Eggers
Quoted 10 lines · Greg KH
Quoted 9 lines · Christian Eggers

Hi Greg,

the patch below has meanwhile been reverted by Wolfram Sang [1], because it has been superseded. Although the patch itself is not wrong, you also may want to revert it in order to avoid conflicts with the next version.

Best regards
Christian

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a02e7c429cb5e082e5d7be6e5b768828014ba70

Thanks for letting me know, now dropped.

greg k-h

Got just a bunch of notifications that this patch fa4d30556883 has (again) be applied to all stable trees. Somebody must have even backported it to < 5.8...

Hah, that was my other scripts, ugh, sorry about that, and thanks for pointing it out again, my fault.

greg k-h