]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
serial: pl01x: Modify pending callback to test if transmit FIFO is empty
authorLukasz Majewski <lukma@denx.de>
Fri, 19 May 2023 10:43:53 +0000 (12:43 +0200)
committerStefano Babic <sbabic@denx.de>
Tue, 11 Jul 2023 12:40:04 +0000 (14:40 +0200)
Before this change the FR_TXFF (Transmit FIFO full) bit (5 in
HW_UARTDBG_FR) has been used to assess if there is still data pending
to be sent via UART.

This approach is problematic, as it may happen that serial is in the
middle of transmission (so the TX FIFO is NOT full anymore) and this
test returns true infinitely. As a result, for example in _serial_flush()
DM serial function we are locked in endless while().

The fix here is to test explicitly if the TX FIFO is empty.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
drivers/serial/serial_pl01x.c

index dbf2b2df34e2662527e10c78b6e262ead99c27b0..428a4d210de57c78f02472ebdc14afb47fca148c 100644 (file)
@@ -329,7 +329,7 @@ int pl01x_serial_pending(struct udevice *dev, bool input)
        if (input)
                return pl01x_tstc(priv->regs);
        else
-               return fr & UART_PL01x_FR_TXFF ? 0 : 1;
+               return fr & UART_PL01x_FR_TXFE ? 0 : 1;
 }
 
 static const struct dm_serial_ops pl01x_serial_ops = {