mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
serial: sh-sci: Fix deadlock during RSCI FIFO overrun error
On RSCI IP, a deadlock occurs during a FIFO overrun error, as it uses a
different register to clear the FIFO overrun error status.
Cc: stable@kernel.org
Fixes: 0666e3fe95 ("serial: sh-sci: Add support for RZ/T2H SCI")
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20251114101350.106699-3-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a6cdfd69ad
commit
75a9f4c547
@@ -1198,8 +1198,16 @@ static int sci_handle_fifo_overrun(struct uart_port *port)
|
||||
|
||||
status = s->ops->read_reg(port, s->params->overrun_reg);
|
||||
if (status & s->params->overrun_mask) {
|
||||
status &= ~s->params->overrun_mask;
|
||||
s->ops->write_reg(port, s->params->overrun_reg, status);
|
||||
if (s->type == SCI_PORT_RSCI) {
|
||||
/*
|
||||
* All of the CFCLR_*C clearing bits match the corresponding
|
||||
* CSR_*status bits. So, reuse the overrun mask for clearing.
|
||||
*/
|
||||
s->ops->clear_SCxSR(port, s->params->overrun_mask);
|
||||
} else {
|
||||
status &= ~s->params->overrun_mask;
|
||||
s->ops->write_reg(port, s->params->overrun_reg, status);
|
||||
}
|
||||
|
||||
port->icount.overrun++;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user