[PATCH] serial: a3720: Implement pending method for output direction
Stefan Roese
sr at denx.de
Fri Jan 15 15:50:46 CET 2021
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 <pali at kernel.org>
Reviewed-by: Stefan Roese <sr at 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: sr at denx.de
More information about the U-Boot
mailing list