diff options
author | Dong Aisheng <b29396@freescale.com> | 2011-11-16 17:46:59 +0800 |
---|---|---|
committer | Dong Aisheng <dong.aisheng@linaro.org> | 2011-11-16 19:52:03 +0800 |
commit | 8b828257c97b0c9e07de531f0d51a4e2c8dbac2e (patch) | |
tree | 233116468429f112d85b436b173d370d10ec9ed0 | |
parent | e07994d9c2cd6b282802ac68c47c1a7b4992417f (diff) |
ENGR00162364 flexcan: fix endless errors causing system hang
Clear state error to avoid ednless state error if error happens
which will call napi_schedule() each time, seems a little high load,
to cause system hang.
Signed-off-by: Dong Aisheng <b29396@freescale.com>
-rw-r--r-- | drivers/net/can/flexcan.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 3111365dc304..c216a0bd111a 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -435,11 +435,15 @@ static void do_state(struct net_device *dev, static int flexcan_poll_state(struct net_device *dev, u32 reg_esr) { struct flexcan_priv *priv = netdev_priv(dev); + struct flexcan_regs __iomem *regs = priv->base; struct sk_buff *skb; struct can_frame *cf; enum can_state new_state; int flt; + /* clear state error if any (write 1 to clear)*/ + writel(reg_esr, ®s->esr); + flt = reg_esr & FLEXCAN_ESR_FLT_CONF_MASK; if (likely(flt == FLEXCAN_ESR_FLT_CONF_ACTIVE)) { if (likely(!(reg_esr & (FLEXCAN_ESR_TX_WRN | |