tty: xilinx_uartps: Add timeout waiting for loop

There is a potential infinite loop while waiting for the
the TXFULL to deassert. Adds the error message and timeout to
avoid infinite loop if it fails to get the TX fifo not full.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Link: https://lore.kernel.org/r/20220729114748.18332-7-shubhrajyoti.datta@xilinx.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Shubhrajyoti Datta 2022-07-29 17:17:47 +05:30 committed by Greg Kroah-Hartman
parent b36962896f
commit a17fa1216c

View File

@ -1147,8 +1147,20 @@ static void cdns_uart_console_putchar(struct uart_port *port, unsigned char ch)
}
cpu_relax();
}
while (readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_TXFULL)
timeout = jiffies + msecs_to_jiffies(1000);
while (1) {
ctrl_reg = readl(port->membase + CDNS_UART_SR);
if (!(ctrl_reg & CDNS_UART_SR_TXFULL))
break;
if (time_after(jiffies, timeout)) {
dev_warn(port->dev,
"timeout waiting for TX fifo\n");
return;
}
cpu_relax();
}
writel(ch, port->membase + CDNS_UART_FIFO);
}