]> git.baikalelectronics.ru Git - kernel.git/commitdiff
tty: xilinx_uartps: Prevent writes when the controller is disabled
authorShubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Fri, 29 Jul 2022 11:47:46 +0000 (17:17 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 Aug 2022 11:26:01 +0000 (13:26 +0200)
Prevent writing to the fifo if the controller is disabled.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Link: https://lore.kernel.org/r/20220729114748.18332-6-shubhrajyoti.datta@xilinx.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/xilinx_uartps.c

index ae99e1164f0c46e0925d0f87d4b9e8e08aab95aa..d1aa44febaea7e5ebeb7d034f2ab68163f5b29d9 100644 (file)
@@ -1132,6 +1132,21 @@ static struct uart_driver cdns_uart_uart_driver;
  */
 static void cdns_uart_console_putchar(struct uart_port *port, unsigned char ch)
 {
+       unsigned int ctrl_reg;
+       unsigned long timeout;
+
+       timeout = jiffies + msecs_to_jiffies(1000);
+       while (1) {
+               ctrl_reg = readl(port->membase + CDNS_UART_CR);
+               if (!(ctrl_reg & CDNS_UART_CR_TX_DIS))
+                       break;
+               if (time_after(jiffies, timeout)) {
+                       dev_warn(port->dev,
+                                "timeout waiting for Enable\n");
+                       return;
+               }
+               cpu_relax();
+       }
        while (readl(port->membase + CDNS_UART_SR) & CDNS_UART_SR_TXFULL)
                cpu_relax();
        writel(ch, port->membase + CDNS_UART_FIFO);