[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250812-m_can-fix-state-handling-v1-2-b739e06c0a3b@pengutronix.de>
Date: Tue, 12 Aug 2025 19:36:52 +0200
From: Marc Kleine-Budde <mkl@...gutronix.de>
To: Chandrasekar Ramakrishnan <rcsekar@...sung.com>,
Vincent Mailhol <mailhol.vincent@...adoo.fr>,
Patrik Flykt <patrik.flykt@...ux.intel.com>,
Dong Aisheng <b29396@...escale.com>, Fengguang Wu <fengguang.wu@...el.com>,
Varka Bhadram <varkabhadram@...il.com>, Wu Bo <wubo.oduw@...il.com>,
Markus Schneider-Pargmann <msp@...libre.com>,
Philipp Zabel <p.zabel@...gutronix.de>
Cc: linux-can@...r.kernel.org, linux-kernel@...r.kernel.org,
kernel@...gutronix.de, Marc Kleine-Budde <mkl@...gutronix.de>
Subject: [PATCH 2/7] can: m_can: m_can_rx_handler(): only handle active
interrupts
Among other things, the M_CAN IP core has an Interrupt Register (IR)
and an Interrupt Enable (IE) register. An interrupt is triggered if at
least 1 bit is set in the bitwise and of IR and IE.
Depending on the configuration not all interrupts are enabled in the
IE register. However the m_can_rx_handler() IRQ handler looks at all
interrupts not just the enabled ones. This may lead to handling of not
activated interrupts.
Fix the problem and mask the irqstatus (IR register) with the
active_interrupts (cache value of IE register).
Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support")
Signed-off-by: Marc Kleine-Budde <mkl@...gutronix.de>
---
drivers/net/can/m_can/m_can.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index fe74dbd2c966..a51dc0bb8124 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -1006,6 +1006,7 @@ static int m_can_rx_handler(struct net_device *dev, int quota, u32 irqstatus)
int rx_work_or_err;
int work_done = 0;
+ irqstatus &= cdev->active_interrupts;
if (!irqstatus)
goto end;
--
2.50.1
Powered by blists - more mailing lists