net: can: rockchip: use soft reset for bus off

Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
Change-Id: I8950b7ee8fa677376600599922aa6c40d1af2d0a
This commit is contained in:
Elaine Zhang
2023-11-06 09:56:50 +08:00
committed by Tao Huang
parent 9038fae6bd
commit 64ab42efa5

View File

@@ -215,6 +215,7 @@ enum {
#define CAN_RX_FILTER_MASK 0x1fffffff
#define NOACK_ERR_FLAG 0xc200800
#define CAN_BUSOFF_FLAG 0x20
#define DRV_NAME "rockchip_canfd"
@@ -795,8 +796,14 @@ static int rockchip_canfd_err(struct net_device *ndev, u32 isr)
}
if (rcan->can.state >= CAN_STATE_BUS_OFF ||
((sta_reg & 0x20) == 0x20))
can_bus_off(ndev);
((sta_reg & CAN_BUSOFF_FLAG) == CAN_BUSOFF_FLAG)) {
cancel_delayed_work(&rcan->tx_err_work);
netif_stop_queue(ndev);
rockchip_canfd_stop(ndev);
can_free_echo_skb(ndev, 0);
rockchip_canfd_start(ndev);
netif_start_queue(ndev);
}
stats->rx_packets++;
stats->rx_bytes += cf->can_dlc;