After the merge of stable v5.15.122 stable kernel (commit 4900bde55da2),
two blocks to handle the BNB (bus not busy) interrupt were introduced.
One was added by SDK commit 622176d24add ("i2c: xiic: Fix Tx Interrupt
path for grouped messages"), and the other was added by stable commit
9eaef43fef90 ("i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in
xiic_process()"). So drop the codes introduced by the SDK commit and
also restore a bug fix in the original code introduced by SDK commit
19d54cfd5ccb ("i2c: xiic: Add smbus_block_read functionality").

Signed-off-by: Kevin Hao <kexin....@windriver.com>
---
Hi Bruce,

Please help me merge this into the following two branches:
  v5.15/standard/sdkv5.15/xlnx-soc
  v5.15/standard/preempt-rt/sdkv5.15/xlnx-soc

 drivers/i2c/busses/i2c-xiic.c | 29 ++++++-----------------------
 1 file changed, 6 insertions(+), 23 deletions(-)

diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index c63cd2e50e13..c490f0ee250e 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -700,6 +700,12 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
                /* The bus is not busy, disable BusNotBusy interrupt */
                xiic_irq_dis(i2c, XIIC_INTR_BNB_MASK);
 
+               if (i2c->tx_msg && i2c->smbus_block_read) {
+                       i2c->smbus_block_read = false;
+                       /* Set requested message len=1 to indicate STATE_DONE */
+                       i2c->tx_msg->len = 1;
+               }
+
                if (!i2c->tx_msg)
                        goto out;
 
@@ -751,29 +757,6 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
                        xiic_irq_dis(i2c, XIIC_INTR_TX_HALF_MASK);
        }
 
-       if (pend & XIIC_INTR_BNB_MASK) {
-               /* IIC bus has transitioned to not busy */
-               clr |= XIIC_INTR_BNB_MASK;
-
-               /* The bus is not busy, disable BusNotBusy interrupt */
-               xiic_irq_dis(i2c, XIIC_INTR_BNB_MASK);
-
-               if (i2c->tx_msg && i2c->smbus_block_read) {
-                       i2c->smbus_block_read = false;
-                       /* Set requested message len=1 to indicate STATE_DONE */
-                       i2c->tx_msg->len = 1;
-               }
-
-               if (!i2c->tx_msg)
-                       goto out;
-
-               if (i2c->nmsgs == 1 && !i2c->rx_msg &&
-                   xiic_tx_space(i2c) == 0)
-                       xiic_wakeup(i2c, STATE_DONE);
-               else
-                       xiic_wakeup(i2c, STATE_ERROR);
-       }
-
 out:
        dev_dbg(i2c->adap.dev.parent, "%s clr: 0x%x\n", __func__, clr);
 
-- 
2.39.2

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#12894): 
https://lists.yoctoproject.org/g/linux-yocto/message/12894
Mute This Topic: https://lists.yoctoproject.org/mt/100385712/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to