[PATCH] serial: stm32: extend TC timeout

Patrice CHOTARD patrice.chotard at foss.st.com
Wed Aug 16 15:38:44 CEST 2023



On 8/4/23 16:09, Patrice Chotard wrote:
> From: Valentin Caron <valentin.caron at foss.st.com>
> 
> Waiting 150us TC bit couldn't be enough.
> 
> If TFA lets 16 bits in USART fifo, we has to wait 16 times 87 us (time
> of 10 bits (1 byte in most use cases) at a baud rate of 115200).
> 
> Fixes: b4dbc5d65a67 ("serial: stm32: Wait TC bit before performing initialization")
> 
> Signed-off-by: Valentin Caron <valentin.caron at foss.st.com>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
> 
>  drivers/serial/serial_stm32.c | 18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/serial/serial_stm32.c b/drivers/serial/serial_stm32.c
> index 0085113f674..23d476fba28 100644
> --- a/drivers/serial/serial_stm32.c
> +++ b/drivers/serial/serial_stm32.c
> @@ -22,6 +22,14 @@
>  #include "serial_stm32.h"
>  #include <dm/device_compat.h>
>  
> +/*
> + * At 115200 bits/s
> + * 1 bit = 1 / 115200 = 8,68 us
> + * 8 bits = 69,444 us
> + * 10 bits are needed for worst case (8 bits + 1 start + 1 stop) = 86.806 us
> + */
> +#define ONE_BYTE_B115200_US		87
> +
>  static void _stm32_serial_setbrg(fdt_addr_t base,
>  				 struct stm32_uart_info *uart_info,
>  				 u32 clock_rate,
> @@ -209,12 +217,10 @@ static int stm32_serial_probe(struct udevice *dev)
>  	 * before uart initialization, wait for TC bit (Transmission Complete)
>  	 * in case there is still chars from previous bootstage to transmit
>  	 */
> -	ret = read_poll_timeout(readl, isr, isr & USART_ISR_TC, 10, 150,
> -				plat->base + ISR_OFFSET(stm32f4));
> -	if (ret) {
> -		clk_disable(&clk);
> -		return ret;
> -	}
> +	ret = read_poll_timeout(readl, isr, isr & USART_ISR_TC, 50,
> +				16 * ONE_BYTE_B115200_US, plat->base + ISR_OFFSET(stm32f4));
> +	if (ret)
> +		dev_dbg(dev, "FIFO not empty, some character can be lost (%d)\n", ret);
>  
>  	ret = reset_get_by_index(dev, 0, &reset);
>  	if (!ret) {
Applied on stm32-master



More information about the U-Boot mailing list