lkml.org 
[lkml]   [2022]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0901/1157] serial: 8250_dw: Use serial_lsr_in() in dw8250_handle_irq()
    Date
    From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>

    [ Upstream commit 197eb5c416ff0e52d152e6ff59b4e759d2f3e10d ]

    dw8250_handle_irq() reads LSR under a few conditions, convert both to
    use serial_lsr_in() in order to preserve LSR flags properly across
    reads.

    Fixes: 424d79183af0 ("serial: 8250_dw: Avoid "too much work" from bogus rx timeout interrupt")
    Fixes: aa63d786cea2 ("serial: 8250: dw: Add support for DMA flow controlling devices")
    Cc: Douglas Anderson <dianders@chromium.org>
    Cc: Phil Edworthy <phil.edworthy@renesas.com>
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Link: https://lore.kernel.org/r/20220608095431.18376-6-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/tty/serial/8250/8250_dw.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
    index bb6aca07ab56..7e05b431a314 100644
    --- a/drivers/tty/serial/8250/8250_dw.c
    +++ b/drivers/tty/serial/8250/8250_dw.c
    @@ -253,7 +253,7 @@ static int dw8250_handle_irq(struct uart_port *p)
    */
    if (!up->dma && rx_timeout) {
    spin_lock_irqsave(&p->lock, flags);
    - status = p->serial_in(p, UART_LSR);
    + status = serial_lsr_in(up);

    if (!(status & (UART_LSR_DR | UART_LSR_BI)))
    (void) p->serial_in(p, UART_RX);
    @@ -263,7 +263,7 @@ static int dw8250_handle_irq(struct uart_port *p)

    /* Manually stop the Rx DMA transfer when acting as flow controller */
    if (quirks & DW_UART_QUIRK_IS_DMA_FC && up->dma && up->dma->rx_running && rx_timeout) {
    - status = p->serial_in(p, UART_LSR);
    + status = serial_lsr_in(up);
    if (status & (UART_LSR_DR | UART_LSR_BI)) {
    dw8250_writel_ext(p, RZN1_UART_RDMACR, 0);
    dw8250_writel_ext(p, DW_UART_DMASA, 1);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 06:47    [W:2.231 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site