lkml.org 
[lkml]   [2021]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 139/260] serial: sh-sci: fix break handling for sysrq
    Date
    From: Ulrich Hecht <uli+renesas@fpond.eu>

    [ Upstream commit 87b8061bad9bd4b549b2daf36ffbaa57be2789a2 ]

    This fixes two issues that cause the sysrq sequence to be inadvertently
    aborted on SCIF serial consoles:

    - a NUL character remains in the RX queue after a break has been detected,
    which is then passed on to uart_handle_sysrq_char()
    - the break interrupt is handled twice on controllers with multiplexed ERI
    and BRI interrupts

    Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
    Link: https://lore.kernel.org/r/20210816162201.28801-1-uli+renesas@fpond.eu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/tty/serial/sh-sci.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
    index 97ee1fc1cd24..ecff9b208808 100644
    --- a/drivers/tty/serial/sh-sci.c
    +++ b/drivers/tty/serial/sh-sci.c
    @@ -1763,6 +1763,10 @@ static irqreturn_t sci_br_interrupt(int irq, void *ptr)

    /* Handle BREAKs */
    sci_handle_breaks(port);
    +
    + /* drop invalid character received before break was detected */
    + serial_port_in(port, SCxRDR);
    +
    sci_clear_SCxSR(port, SCxSR_BREAK_CLEAR(port));

    return IRQ_HANDLED;
    @@ -1842,7 +1846,8 @@ static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr)
    ret = sci_er_interrupt(irq, ptr);

    /* Break Interrupt */
    - if ((ssr_status & SCxSR_BRK(port)) && err_enabled)
    + if (s->irqs[SCIx_ERI_IRQ] != s->irqs[SCIx_BRI_IRQ] &&
    + (ssr_status & SCxSR_BRK(port)) && err_enabled)
    ret = sci_br_interrupt(irq, ptr);

    /* Overrun Interrupt */
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-20 20:37    [W:3.260 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site