Sorry, the title should be: "[PATCH v2 0/4] Fix SiFive UART spurious IRQ
issue and misc updates" instead.
ping
Regards,
Frank Chang
On Wed, Dec 10, 2025 at 12:01 AM <frank.chang@sifive.com> wrote:
> From: Frank Chang <frank.chang@sifive.com>
>
> This patch series fixes the spurious IRQ issue in the SiFive UART on Linux
> introduced after commit [1], which changed character transmission from
> synchronous to asynchronous.
>
> Currently, the txwm interrupt pending status is only updated when the
> asynchronous transmit handler runs. This can cause the txwm interrupt
> state to become unsynchronized between the SiFive UART and the interrupt
> controller.
>
> This issue has been observed on resource-constrained systems, where
> Linux reports spurious IRQ errors. In these cases, the asynchronous
> transmit handler is unable to drain the TX FIFO quickly enough to update
> the txwm pending status before software reads the IP register, which
> derives the txwm pending state directly from the actual number of
> characters in the TX FIFO.
>
> The remaining patches contain miscellaneous updates, including
> implementing txctrl.txen and rxctrl.rxen, update IRQ when rxctrl is
> written and remove the unused ip variable.
>
> [1] 53c1557b230986ab6320a58e1b2c26216ecd86d5
>
> Frank Chang (4):
> hw/char: sifive_uart: Implement txctrl.txen and rxctrl.rxen
> hw/char: sifive_uart: Sync txwm interrupt pending status after TX FIFO
> enqueue
> hw/char: sifive_uart: Update IRQ when rxctrl is written
> hw/char: sifive_uart: Remove ip variable
>
> hw/char/sifive_uart.c | 46 ++++++++++++++++++++++++++++-------
> include/hw/char/sifive_uart.h | 3 ++-
> 2 files changed, 39 insertions(+), 10 deletions(-)
>
> --
> 2.43.0
>
>