From 9038fae6bddb6dd9c0af4cfde90d88a9ea021635 Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Mon, 6 Nov 2023 09:50:18 +0800 Subject: [PATCH] net: can: rockchip: fix rx stuck and timeout In some special applications, tx has read data from the fifo, rx to read the fifo is 0 when there is no need to do timeout waiting. Signed-off-by: Elaine Zhang Change-Id: I7f4bc88ace026088228396da96d628bebb9e4b94 --- drivers/net/can/rockchip/rockchip_canfd.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/rockchip/rockchip_canfd.c b/drivers/net/can/rockchip/rockchip_canfd.c index 3f9fa214b335..3189abc20ad7 100644 --- a/drivers/net/can/rockchip/rockchip_canfd.c +++ b/drivers/net/can/rockchip/rockchip_canfd.c @@ -852,7 +852,10 @@ static irqreturn_t rockchip_canfd_interrupt(int irq, void *dev_id) rockchip_canfd_write(rcan, CAN_INT_MASK, 0x1); napi_schedule(&rcan->napi); } else { - quota = rockchip_canfd_get_rx_fifo_cnt(ndev); + work_done = 0; + quota = (rockchip_canfd_read(rcan, CAN_RXFC) & + rcan->rx_fifo_mask) >> + rcan->rx_fifo_shift; if (quota) { while (work_done < quota) work_done += rockchip_canfd_rx(ndev);