From: Viktor Babrian Date: Sun, 18 Jan 2015 19:01:40 +0000 (+0100) Subject: can: c_can: end pending transmission on network stop (ifdown) X-Git-Tag: v3.16.35~2938 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6a06b937ee44d2cf1802d619177a1a2b32c09443;p=thirdparty%2Fkernel%2Fstable.git can: c_can: end pending transmission on network stop (ifdown) commit 7ffd7b4e169d619e66928fe5d997723f2c6f1056 upstream. Put controller into init mode in network stop to end pending transmissions. The issue is observed in cases when transmitted frame is not acked. Signed-off-by: Viktor Babrian Signed-off-by: Marc Kleine-Budde [ luis: backported to 3.16: adjusted context ] Signed-off-by: Luis Henriques --- diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 8e78bb48f5a43..60285820f7b40 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c @@ -611,6 +611,10 @@ static void c_can_stop(struct net_device *dev) struct c_can_priv *priv = netdev_priv(dev); c_can_irq_control(priv, false); + + /* put ctrl to init on stop to end ongoing transmission */ + priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_INIT); + priv->can.state = CAN_STATE_STOPPED; }