diff options
author | Oliver Hartkopp <socketcan@hartkopp.net> | 2015-11-21 12:41:20 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2015-11-23 03:37:34 -0500 |
commit | ffd461f80d536336811d573f197f3e6d9872d054 (patch) | |
tree | 2bbab4a1de8d6f21b063f85648ddf68a6d21f88c /drivers/net/can/rcar_can.c | |
parent | 7cecd9ab80f43972c056dc068338f7bcc407b71c (diff) |
can: fix assignment of error location in CAN error messages
As Dan Carpenter reported in http://marc.info/?l=linux-can&m=144793696016187
the assignment of the error location in CAN error messages had some bit wise
overlaps. Indeed the value to be assigned in data[3] is no bitfield but defines
a single value which points to a location inside the CAN frame on the wire.
This patch fixes the assignments for the error locations in error messages.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers/net/can/rcar_can.c')
-rw-r--r-- | drivers/net/can/rcar_can.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c index 7bd54191f962..9161f045d44c 100644 --- a/drivers/net/can/rcar_can.c +++ b/drivers/net/can/rcar_can.c | |||
@@ -251,7 +251,7 @@ static void rcar_can_error(struct net_device *ndev) | |||
251 | tx_errors++; | 251 | tx_errors++; |
252 | writeb(~RCAR_CAN_ECSR_ADEF, &priv->regs->ecsr); | 252 | writeb(~RCAR_CAN_ECSR_ADEF, &priv->regs->ecsr); |
253 | if (skb) | 253 | if (skb) |
254 | cf->data[3] |= CAN_ERR_PROT_LOC_ACK_DEL; | 254 | cf->data[3] = CAN_ERR_PROT_LOC_ACK_DEL; |
255 | } | 255 | } |
256 | if (ecsr & RCAR_CAN_ECSR_BE0F) { | 256 | if (ecsr & RCAR_CAN_ECSR_BE0F) { |
257 | netdev_dbg(priv->ndev, "Bit Error (dominant)\n"); | 257 | netdev_dbg(priv->ndev, "Bit Error (dominant)\n"); |
@@ -272,7 +272,7 @@ static void rcar_can_error(struct net_device *ndev) | |||
272 | rx_errors++; | 272 | rx_errors++; |
273 | writeb(~RCAR_CAN_ECSR_CEF, &priv->regs->ecsr); | 273 | writeb(~RCAR_CAN_ECSR_CEF, &priv->regs->ecsr); |
274 | if (skb) | 274 | if (skb) |
275 | cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ; | 275 | cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; |
276 | } | 276 | } |
277 | if (ecsr & RCAR_CAN_ECSR_AEF) { | 277 | if (ecsr & RCAR_CAN_ECSR_AEF) { |
278 | netdev_dbg(priv->ndev, "ACK Error\n"); | 278 | netdev_dbg(priv->ndev, "ACK Error\n"); |
@@ -280,7 +280,7 @@ static void rcar_can_error(struct net_device *ndev) | |||
280 | writeb(~RCAR_CAN_ECSR_AEF, &priv->regs->ecsr); | 280 | writeb(~RCAR_CAN_ECSR_AEF, &priv->regs->ecsr); |
281 | if (skb) { | 281 | if (skb) { |
282 | cf->can_id |= CAN_ERR_ACK; | 282 | cf->can_id |= CAN_ERR_ACK; |
283 | cf->data[3] |= CAN_ERR_PROT_LOC_ACK; | 283 | cf->data[3] = CAN_ERR_PROT_LOC_ACK; |
284 | } | 284 | } |
285 | } | 285 | } |
286 | if (ecsr & RCAR_CAN_ECSR_FEF) { | 286 | if (ecsr & RCAR_CAN_ECSR_FEF) { |