On 14.01.21 15:46, Pali Rohár wrote:
To check if some output characters are waiting either in Transmitter
Holding Register or Transmitter Shift Register we need to look at
TX_EMPTY bit of UART Status Register.

Signed-off-by: Pali Rohár <p...@kernel.org>

Reviewed-by: Stefan Roese <s...@denx.de>

BTW: How did you detect this issue?

Thanks,
Stefan

---
  drivers/serial/serial_mvebu_a3700.c | 10 ++++++++--
  1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/serial/serial_mvebu_a3700.c 
b/drivers/serial/serial_mvebu_a3700.c
index fb43f88eaf..909901c9f0 100644
--- a/drivers/serial/serial_mvebu_a3700.c
+++ b/drivers/serial/serial_mvebu_a3700.c
@@ -23,6 +23,7 @@ struct mvebu_platdata {
  #define UART_POSSR_REG                0x14
#define UART_STATUS_RX_RDY 0x10
+#define UART_STATUS_TX_EMPTY   0x40
  #define UART_STATUS_TXFIFO_FULL       0x800
#define UART_CTRL_RXFIFO_RESET 0x4000
@@ -59,8 +60,13 @@ static int mvebu_serial_pending(struct udevice *dev, bool 
input)
        struct mvebu_platdata *plat = dev_get_platdata(dev);
        void __iomem *base = plat->base;
- if (readl(base + UART_STATUS_REG) & UART_STATUS_RX_RDY)
-               return 1;
+       if (input) {
+               if (readl(base + UART_STATUS_REG) & UART_STATUS_RX_RDY)
+                       return 1;
+       } else {
+               if (!(readl(base + UART_STATUS_REG) & UART_STATUS_TX_EMPTY))
+                       return 1;
+       }
return 0;
  }



Viele Grüße,
Stefan

--
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: s...@denx.de

Reply via email to