]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
serial: zynq: Change fifo behavior in debug mode
authorMichal Simek <michal.simek@xilinx.com>
Fri, 25 Mar 2022 10:50:07 +0000 (11:50 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 29 Mar 2022 07:19:59 +0000 (09:19 +0200)
Serial IP has output buffer which status is indicated by two bits. If fifo
if empty or full. Default configuration is that chars are pushed to fifo
till it is full. Time to time it is visible that chars are scambled and
logs are not visible. Not sure what it is exactly happening but all the
time it helps to change driver behavior to write only one char at a time.
That's why enable this mode when debug uart is enabled not to see scrambled
chars in debug by default.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Link: https://lore.kernel.org/r/332b2106d7a8190dd1001b5387f8bd1fba2e061b.1648205405.git.michal.simek@xilinx.com
drivers/serial/serial_zynq.c

index fd999368ab701d1c2639a5ef8abd08491b80376d..6bb003dc1558f43db0a7308455de35179137f061 100644 (file)
@@ -21,6 +21,7 @@
 
 #define ZYNQ_UART_SR_TXACTIVE  BIT(11) /* TX active */
 #define ZYNQ_UART_SR_TXFULL    BIT(4) /* TX FIFO full */
+#define ZYNQ_UART_SR_TXEMPTY   BIT(3) /* TX FIFO empty */
 #define ZYNQ_UART_SR_RXEMPTY   BIT(1) /* RX FIFO empty */
 
 #define ZYNQ_UART_CR_TX_EN     BIT(4) /* TX enabled */
@@ -107,8 +108,13 @@ static void _uart_zynq_serial_init(struct uart_zynq *regs)
 
 static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
 {
-       if (readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL)
-               return -EAGAIN;
+       if (CONFIG_IS_ENABLED(DEBUG_UART_ZYNQ)) {
+               if (!(readl(&regs->channel_sts) & ZYNQ_UART_SR_TXEMPTY))
+                       return -EAGAIN;
+       } else {
+               if (readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL)
+                       return -EAGAIN;
+       }
 
        writel(c, &regs->tx_rx_fifo);