[PATCH] net: axi_emac: Fix timeout test

Andrew Goodbody andrew.goodbody at linaro.org
Mon Aug 18 11:20:24 CEST 2025


On 18/08/2025 09:41, Michal Simek wrote:
> 
> 
> On 8/6/25 13:10, Andrew Goodbody wrote:
>> The timeout test in axi_dma_init is not correct due to the
>> post-decrement used on the timeout variable which will mean timeout is
>> not 0 if the timeout occurs. Make the timeout variable an int instead of
>> a u32 and then test for timeout being -1.
>>
>> This issue was found by Smatch.
>>
>> Signed-off-by: Andrew Goodbody <andrew.goodbody at linaro.org>
>> ---
>>   drivers/net/xilinx_axi_emac.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/ 
>> xilinx_axi_emac.c
>> index c8038ddef1b..c46678c1f3b 100644
>> --- a/drivers/net/xilinx_axi_emac.c
>> +++ b/drivers/net/xilinx_axi_emac.c
>> @@ -558,7 +558,7 @@ static int axiemac_write_hwaddr(struct udevice *dev)
>>   /* Reset DMA engine */
>>   static void axi_dma_init(struct axidma_priv *priv)
>>   {
>> -    u32 timeout = 500;
>> +    int timeout = 500;
>>       /* Reset the engine so the hardware starts from a known state */
>>       writel(XAXIDMA_CR_RESET_MASK, &priv->dmatx->control);
>> @@ -574,7 +574,7 @@ static void axi_dma_init(struct axidma_priv *priv)
>>               break;
>>           }
>>       }
>> -    if (!timeout)
>> +    if (timeout == -1)
>>           printf("%s: Timeout\n", __func__);
>>   }
>>
>> ---
>> base-commit: 007610da2cca405ea7739fc120d90085be4b6ac2
>> change-id: 20250806-net_xilinx_axi-9ca9a791d611
>>
>> Best regards,
> 
> 
> What about to do it like this?
> diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c
> index c8038ddef1b8..22e119370c84 100644
> --- a/drivers/net/xilinx_axi_emac.c
> +++ b/drivers/net/xilinx_axi_emac.c
> @@ -558,7 +558,7 @@ static int axiemac_write_hwaddr(struct udevice *dev)
>   /* Reset DMA engine */
>   static void axi_dma_init(struct axidma_priv *priv)
>   {
> -       u32 timeout = 500;
> +       int timeout = 500;
> 
>          /* Reset the engine so the hardware starts from a known state */
>          writel(XAXIDMA_CR_RESET_MASK, &priv->dmatx->control);
> @@ -571,11 +571,11 @@ static void axi_dma_init(struct axidma_priv *priv)
>                  if (!((readl(&priv->dmatx->control) |
>                                  readl(&priv->dmarx->control))
>                                                  & 
> XAXIDMA_CR_RESET_MASK)) {
> -                       break;
> +                       return;
>                  }
>          }
> -       if (!timeout)
> -               printf("%s: Timeout\n", __func__);
> +
> +       printf("%s: Timeout\n", __func__);
>   }
> 
>   static int axiemac_start(struct udevice *dev)
> 
> M

Sure. V2 coming.

Andrew


More information about the U-Boot mailing list