[PATCH v2 2/2] serial: mxc: have putc use the TXFIFO

SCHNEIDER Johannes johannes.schneider at leica-geosystems.com
Tue Sep 6 05:38:11 CEST 2022


Hi Peng Fan,

... well i'm actually not sure why the messages get corrupted; it's just what i observed on a connected oscilloscope :-s
the code that does uses the transmit functions is making use of the returned -EAGAIN and retries - and even strewing in some delays to wait for the buffer or checking the status register didn't resolve the issue -- switching the serical driver from locking onto the single send-register to actually checking the fifo fixed it though.

i can put these "vague reasons" in the commit message... but i dont/didn't think theyd help much (?)


regards
________________________________
From: Peng Fan <peng.fan at oss.nxp.com>
Sent: Tuesday, September 6, 2022 02:54
To: SCHNEIDER Johannes <johannes.schneider at leica-geosystems.com>; u-boot at lists.denx.de <u-boot at lists.denx.de>
Cc: trini <trini at konsulko.com>; GEO-CHHER-bsp-development <bsp-development.geo at leica-geosystems.com>; festevam at denx.de <festevam at denx.de>; sbabic at denx.de <sbabic at denx.de>; Pali Rohár <pali at kernel.org>
Subject: Re: [PATCH v2 2/2] serial: mxc: have putc use the TXFIFO

This email is not from Hexagon’s Office 365 instance. Please be careful while clicking links, opening attachments, or replying to this email.


On 9/5/2022 5:58 PM, Johannes Schneider wrote:
> only waiting for TXEMPTY leads to corrupted messages going over the
> wire - which is fixed by making use of the FIFO

Could you please explain a bit more, why waiting TXEMPTY could lead
to corrupted message?

Thanks,
Peng.

>
> Signed-off-by: Johannes Schneider <johannes.schneider at leica-geosystems.com>
> ---
>
> (no changes since v1)
>
>   drivers/serial/serial_mxc.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c
> index 5f283cc635..1e0add7281 100644
> --- a/drivers/serial/serial_mxc.c
> +++ b/drivers/serial/serial_mxc.c
> @@ -309,7 +309,7 @@ static int mxc_serial_putc(struct udevice *dev, const char ch)
>       struct mxc_serial_plat *plat = dev_get_plat(dev);
>       struct mxc_uart *const uart = plat->reg;
>
> -     if (!(readl(&uart->ts) & UTS_TXEMPTY))
> +     if (readl(&uart->ts) & UTS_TXFULL)
>               return -EAGAIN;
>
>       writel(ch, &uart->txd);


More information about the U-Boot mailing list