Hi Andrew, On Mon, 18 Aug 2025 at 14:54, Andrew Goodbody <andrew.goodb...@linaro.org> 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. > You can use read_poll_timeout instead of a while loop timeout?
Thanks -Anand > Signed-off-by: Andrew Goodbody <andrew.goodb...@linaro.org> > --- > Changes in v2: > - Refactor the code so it returns on success from the while loop > - Link to v1: > https://lore.kernel.org/r/20250806-net_xilinx_axi-v1-1-00be06069...@linaro.org > --- > drivers/net/xilinx_axi_emac.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c > index c8038ddef1b..22e119370c8 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) > > --- > base-commit: 007610da2cca405ea7739fc120d90085be4b6ac2 > change-id: 20250806-net_xilinx_axi-9ca9a791d611 > > Best regards, > -- > Andrew Goodbody <andrew.goodb...@linaro.org> >