[PATCH v3 0/2] i2c: i2c-xiic: fix clearing of bnb irq and waiting/ clearing while atomic
From: Thilo Zirnstein
Date: Fri Oct 16 2026 - 08:54:06 EST
Dear all,
This patch-series fixes the clearing routine for the bus not busy (bnb) irq
plus the waiting and clearing routines while in atomic context.
The bnb is used to indicate that the current transfer is done.
A high level view of the software flow for tx:
* init i2c controller
* prepare all registers ( fill fifo, enable irqs, ... )
* start i2c txfer
* clear and enable bnb
* wait for completion
* ( serve interrupts )
* ( bnb interrupt ): complete completion
The datasheet ( pg090-axi-iic, Interrupt-Status-Register ISR)
states that the bnb bit can only be cleared if
the bus busy bit in the status register is set.
So the iic controller must have recognized that their is some activity
on the bus. ( Start condition )
Currently the bnb bit is cleared without checking or waiting for this
condition. This can lead to spurious bnb interrupts.
Andi suggested to use an atomic-save function to wait for bnb.
This was applied for other waiting/ clearing functions, too.
One question left:
Are the timeouts fine, while in an atomic context ?
One second seems to be rather high.
Kind regards,
Thilo Zirnstein
---
Changes in v3
- Use atomic-save functions for waiting and clearing.
- Fix intendation
- Unintentional changes removed
Changes in v2:
- Unintentional changes removed.
Thilo Zirnstein (2):
i2c: i2c-xiic: fix clearing of bnb irq
i2c: i2c-xiic: fix waiting/clearing while atomic
drivers/i2c/busses/i2c-xiic.c | 68 ++++++++++++++++++++++++++++-------
1 file changed, 55 insertions(+), 13 deletions(-)
--
2.43.0