--- a/drivers/net/can/c_can/c_can_platform.c +++ b/drivers/net/can/c_can/c_can_platform.c @@ -76,19 +76,19 @@ static void c_can_hw_raminit_wait_syscon(const struct c_can_priv *priv, u32 mask, u32 val) { const struct c_can_raminit *raminit = &priv->raminit_sys; - int timeout = 0; + unsigned long timeout; u32 ctrl = 0; /* We look only at the bits of our instance. */ val &= mask; + timeout = jiffies + msecs_to_jiffies(10); do { udelay(1); - timeout++; regmap_read(raminit->syscon, raminit->reg, &ctrl); - if (timeout == 1000) { + if (time_after(jiffies, timeout)) { dev_err(&priv->dev->dev, "%s: time out\n", __func__); break; } } while ((ctrl & mask) != val); }