Skip to content

Commit

Permalink
can: c_can: Add timeout to c_can_hw_raminit_ti()
Browse files Browse the repository at this point in the history
TI's RAMINIT DONE mechanism is buggy on AM43xx SoC and may not always
be set after the START bit is set. Although it seems to work fine even
in that case. So add a timeout mechanism to c_can_hw_raminit_wait_ti().
Don't bail out in that failure case but just print an error message.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Roger Quadros authored and Marc Kleine-Budde committed Nov 17, 2014
1 parent 65622ed commit e7e26bc
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion drivers/net/can/c_can/c_can_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,19 @@ static void c_can_plat_write_reg_aligned_to_32bit(const struct c_can_priv *priv,
static void c_can_hw_raminit_wait_ti(const struct c_can_priv *priv, u32 mask,
u32 val)
{
int timeout = 0;

/* We look only at the bits of our instance. */
val &= mask;
while ((readl(priv->raminit_ctrlreg) & mask) != val)
while ((readl(priv->raminit_ctrlreg) & mask) != val) {
udelay(1);
timeout++;

if (timeout == 1000) {
dev_err(&priv->dev->dev, "%s: time out\n", __func__);
break;
}
}
}

static void c_can_hw_raminit_ti(const struct c_can_priv *priv, bool enable)
Expand Down

0 comments on commit e7e26bc

Please sign in to comment.