Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fa7da24 authored by Marc Kleine-Budde's avatar Marc Kleine-Budde
Browse files

can: flexcan: enable interrupts atomically at the end of flexcan_chip_start()



This patch defers the writing of the interrupts bits of the CTRL register order
to enables all interrupts atomically at the the of the flexcan_chip_start()
function.

Suggested-by: default avatarTorsten Lang <torsten.lang@uweschneider.de>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 1ba763d1
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -878,6 +878,8 @@ static int flexcan_chip_start(struct net_device *dev)

	/* save for later use */
	priv->reg_ctrl_default = reg_ctrl;
	/* leave interrupts disabled for now */
	reg_ctrl &= ~FLEXCAN_CTRL_ERR_ALL;
	netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl);
	flexcan_write(reg_ctrl, &regs->ctrl);

@@ -937,8 +939,11 @@ static int flexcan_chip_start(struct net_device *dev)

	priv->can.state = CAN_STATE_ERROR_ACTIVE;

	/* enable FIFO interrupts */
	/* enable interrupts atomically */
	disable_irq(dev->irq);
	flexcan_write(priv->reg_ctrl_default, &regs->ctrl);
	flexcan_write(FLEXCAN_IFLAG_DEFAULT, &regs->imask1);
	enable_irq(dev->irq);

	/* print chip status */
	netdev_dbg(dev, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__,