[U-Boot] [PATCH v2 1/2] xilinx_xiic: Fix fill tx fifo loop

Marek Vasut marex at denx.de
Tue Jun 25 15:14:40 UTC 2019


On 6/25/19 3:29 PM, Melin Tomas wrote:
> Comparison should be against the actual message length, not loop index.
> 
> len is used for stopping while loop, pos is position in message.
> stop should be sent when entire message is sent, not when
> len and pos meet.

Thanks. Just be careful to clamp the transfer length to 65535 bytes,
otherwise you'll hit another overflow.

> Signed-off-by: Tomas Melin <tomas.melin at vaisala.com>
> ---
> 
> Changes in v2:
> - Added reasoning to commit message
> 
>  drivers/i2c/xilinx_xiic.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/xilinx_xiic.c b/drivers/i2c/xilinx_xiic.c
> index 83114ed510..e4ca0ab936 100644
> --- a/drivers/i2c/xilinx_xiic.c
> +++ b/drivers/i2c/xilinx_xiic.c
> @@ -149,7 +149,7 @@ static void xiic_fill_tx_fifo(struct xilinx_xiic_priv *priv,
>  	while (len--) {
>  		u16 data = msg->buf[pos++];
>  
> -		if (pos == len && nmsgs == 1) {
> +		if ((msg->len - pos == 0) && nmsgs == 1) {
>  			/* last message in transfer -> STOP */
>  			data |= XIIC_TX_DYN_STOP_MASK;
>  		}
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list