lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 150/287] serial: 8250_dw: Store LSR into lsr_saved_flags in dw8250_tx_wait_empty()
    Date
    From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>

    [ Upstream commit af14f3007e2dca0d112f10f6717ba43093f74e81 ]

    Make sure LSR flags are preserved in dw8250_tx_wait_empty(). This
    function is called from a low-level out function and therefore cannot
    call serial_lsr_in() as it would lead to infinite recursion.

    It is borderline if the flags need to be saved here at all since this
    code relates to writing LCR register which usually implies no important
    characters should be arriving.

    Fixes: 914eaf935ec7 ("serial: 8250_dw: Allow TX FIFO to drain before writing to UART_LCR")
    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-7-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 | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
    index c73d0eddd9b8..cc9d1f416db8 100644
    --- a/drivers/tty/serial/8250/8250_dw.c
    +++ b/drivers/tty/serial/8250/8250_dw.c
    @@ -140,12 +140,15 @@ static void dw8250_check_lcr(struct uart_port *p, int value)
    /* Returns once the transmitter is empty or we run out of retries */
    static void dw8250_tx_wait_empty(struct uart_port *p)
    {
    + struct uart_8250_port *up = up_to_u8250p(p);
    unsigned int tries = 20000;
    unsigned int delay_threshold = tries - 1000;
    unsigned int lsr;

    while (tries--) {
    lsr = readb (p->membase + (UART_LSR << p->regshift));
    + up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
    +
    if (lsr & UART_LSR_TEMT)
    break;

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-23 12:48    [W:2.239 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site