Hi Valentin, On Tue, Apr 19, 2022 at 10:54 AM Valentin Caron <valentin.caron@xxxxxxxxxxx> wrote: > Rework stm32_usart_console_putchar() function in order to anticipate > the case where the character can never be sent. > > Signed-off-by: Valentin Caron <valentin.caron@xxxxxxxxxxx> Thanks for your patch! > --- a/drivers/tty/serial/stm32-usart.c > +++ b/drivers/tty/serial/stm32-usart.c > @@ -1640,10 +1640,16 @@ static void stm32_usart_console_putchar(struct uart_port *port, unsigned char ch > { > struct stm32_port *stm32_port = to_stm32_port(port); > const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; > + u32 isr; > + int ret; > > - while (!(readl_relaxed(port->membase + ofs->isr) & USART_SR_TXE)) > - cpu_relax(); > - > + ret = readl_relaxed_poll_timeout_atomic(port->membase + ofs->isr, isr, > + (isr & USART_SR_TXE), 100, > + STM32_USART_TIMEOUT_USEC); > + if (ret != 0) { > + dev_err(port->dev, "Error while sending data in UART TX : %d\n", ret); Does it make sense to print this message, i.e. will the user ever see it? Or is the failure above temporary? I assume that you have seen this trigger? > + return; > + } > writel_relaxed(ch, port->membase + ofs->tdr); > } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds