lkml.org 
[lkml]   [2021]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 03/13] serial: stm32: fix incorrect characters on console
    Date
    Incorrect characters are observed on console during boot. This issue occurs
    when init/main.c is modifying termios settings to open /dev/console on the
    rootfs.

    This patch adds a waiting loop in set_termios to wait for TX shift register
    empty (and TX FIFO if any) before stopping serial port.

    Fixes: 48a6092fb41f ("serial: stm32-usart: Add STM32 USART Driver")
    Signed-off-by: Erwan Le Ray <erwan.leray@foss.st.com>

    diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c
    index c6ca8f964c69..eae54b8cf5e2 100644
    --- a/drivers/tty/serial/stm32-usart.c
    +++ b/drivers/tty/serial/stm32-usart.c
    @@ -738,8 +738,9 @@ static void stm32_usart_set_termios(struct uart_port *port,
    unsigned int baud, bits;
    u32 usartdiv, mantissa, fraction, oversampling;
    tcflag_t cflag = termios->c_cflag;
    - u32 cr1, cr2, cr3;
    + u32 cr1, cr2, cr3, isr;
    unsigned long flags;
    + int ret;

    if (!stm32_port->hw_flow_control)
    cflag &= ~CRTSCTS;
    @@ -748,6 +749,15 @@ static void stm32_usart_set_termios(struct uart_port *port,

    spin_lock_irqsave(&port->lock, flags);

    + ret = readl_relaxed_poll_timeout_atomic(port->membase + ofs->isr,
    + isr,
    + (isr & USART_SR_TC),
    + 10, 100000);
    +
    + /* Send the TC error message only when ISR_TC is not set. */
    + if (ret)
    + dev_err(port->dev, "Transmission is not complete\n");
    +
    /* Stop serial port and reset value */
    writel_relaxed(0, port->membase + ofs->cr1);

    --
    2.17.1
    \
     
     \ /
      Last update: 2021-03-04 17:26    [W:4.422 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site