forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/net/can/sja1000/sja1000.c
....@@ -405,9 +405,6 @@
405405 txerr = priv->read_reg(priv, SJA1000_TXERR);
406406 rxerr = priv->read_reg(priv, SJA1000_RXERR);
407407
408
- cf->data[6] = txerr;
409
- cf->data[7] = rxerr;
410
-
411408 if (isrc & IRQ_DOI) {
412409 /* data overrun interrupt */
413410 netdev_dbg(dev, "data overrun interrupt\n");
....@@ -428,6 +425,10 @@
428425 state = CAN_STATE_ERROR_WARNING;
429426 else
430427 state = CAN_STATE_ERROR_ACTIVE;
428
+ }
429
+ if (state != CAN_STATE_BUS_OFF) {
430
+ cf->data[6] = txerr;
431
+ cf->data[7] = rxerr;
431432 }
432433 if (isrc & IRQ_BEI) {
433434 /* bus error interrupt */
....@@ -474,7 +475,6 @@
474475 netdev_dbg(dev, "arbitration lost interrupt\n");
475476 alc = priv->read_reg(priv, SJA1000_ALC);
476477 priv->can.can_stats.arbitration_lost++;
477
- stats->tx_errors++;
478478 cf->can_id |= CAN_ERR_LOSTARB;
479479 cf->data[0] = alc & 0x1f;
480480 }