net: axi_emac: Fix timeout test
authorAndrew Goodbody <andrew.goodbody@linaro.org>
Mon, 18 Aug 2025 09:24:36 +0000 (10:24 +0100)
committerMichal Simek <michal.simek@amd.com>
Mon, 25 Aug 2025 14:20:48 +0000 (16:20 +0200)
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@linaro.org>
Link: https://lore.kernel.org/r/20250806-net_xilinx_axi-v2-1-6311cf59451d@linaro.org
Signed-off-by: Michal Simek <michal.simek@amd.com>
drivers/net/xilinx_axi_emac.c

index c8038dd..22e1193 100644 (file)
@@ -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)