[PATCH] net: axi_emac: Fix timeout test

Michal Simek michal.simek at amd.com
Mon Aug 18 10:41:44 CEST 2025



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


More information about the U-Boot mailing list