All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] can: m_can: m_can_isr(): disable mcan interrupts during tefn handling
@ 2022-04-08 12:26 Wouter van Herpen
  0 siblings, 0 replies; only message in thread
From: Wouter van Herpen @ 2022-04-08 12:26 UTC (permalink / raw)
  To: mkl; +Cc: linux-can, Wouter van Herpen

Under high mixed RX/TX interrupt load, the tcan4x5x's nINT signal
sometimes stays asserted, blocking any further interrupts.
Register M_CAN_IR is then set to 0x580d and never recovers.
This is caused by interrupts occurring during interrupt handling.
Disable MCAN interrupts during TX irq flag processing (from interrupt
context), as is the case for the RX irq flag processing.

Link: https://lore.kernel.org/linux-can/20220403105730.fnurim5vnnuxb7s5@pengutronix.de
Signed-off-by: Wouter van Herpen <wouter.van.herpen@prodrive-technologies.com>
---
Please note this patch was generated and tested with kernel base v5.4.
In the most recent kernel version, this patch is still required to fix
the issue described.

 drivers/net/can/m_can/m_can.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 562c8317e3aa..8cea1b946b71 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -949,11 +949,13 @@ static irqreturn_t m_can_isr(int irq, void *dev_id)
 	} else  {
 		if (ir & IR_TEFN) {
 			/* New TX FIFO Element arrived */
+			m_can_disable_all_interrupts(cdev);
 			m_can_echo_tx_event(dev);
 			can_led_event(dev, CAN_LED_EVENT_TX);
 			if (netif_queue_stopped(dev) &&
 			    !m_can_tx_fifo_full(cdev))
 				netif_wake_queue(dev);
+			m_can_enable_all_interrupts(cdev);
 		}
 	}
 

base-commit: 219d54332a09e8d8741c1e1982f5eae56099de85
-- 
2.30.2


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-08 12:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-08 12:26 [PATCH] can: m_can: m_can_isr(): disable mcan interrupts during tefn handling Wouter van Herpen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.