[PATCH u-boot-marvell v3 30/39] tools: kwboot: Check whether baudrate was set to requested value

Stefan Roese sr at denx.de
Fri Oct 1 08:29:11 CEST 2021


On 24.09.21 23:07, Marek Behún wrote:
> From: Marek Behún <marek.behun at nic.cz>
> 
> The tcsetattr() function can return 0 even if baudrate was not changed.
> Check whether baudrate was changed to requested value, and in case of
> arbitrary baudrate, check whether the set value is within 3% tolerance.
> 
> Signed-off-by: Marek Behún <marek.behun at nic.cz>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   tools/kwboot.c | 32 ++++++++++++++++++++++++++++++++
>   1 file changed, 32 insertions(+)
> 
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index 7ccab2993f..d8b950787b 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -567,6 +567,13 @@ kwboot_tty_baudrate_to_speed(int baudrate)
>   	}
>   }
>   
> +static int
> +_is_within_tolerance(int value, int reference, int tolerance)
> +{
> +	return 100 * value >= reference * (100 - tolerance) &&
> +	       100 * value <= reference * (100 + tolerance);
> +}
> +
>   static int
>   kwboot_tty_change_baudrate(int fd, int baudrate)
>   {
> @@ -601,7 +608,32 @@ kwboot_tty_change_baudrate(int fd, int baudrate)
>   	if (rc)
>   		return rc;
>   
> +	rc = tcgetattr(fd, &tio);
> +	if (rc)
> +		return rc;
> +
> +	if (cfgetospeed(&tio) != speed || cfgetispeed(&tio) != speed)
> +		goto baud_fail;
> +
> +#ifdef BOTHER
> +	/*
> +	 * Check whether set baudrate is within 3% tolerance.
> +	 * If BOTHER is defined, Linux always fills out c_ospeed / c_ispeed
> +	 * with real values.
> +	 */
> +	if (!_is_within_tolerance(tio.c_ospeed, baudrate, 3))
> +		goto baud_fail;
> +
> +	if (!_is_within_tolerance(tio.c_ispeed, baudrate, 3))
> +		goto baud_fail;
> +#endif
> +
>   	return 0;
> +
> +baud_fail:
> +	fprintf(stderr, "Could not set baudrate to requested value\n");
> +	errno = EINVAL;
> +	return -1;
>   }
>   
>   static int
> 


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