On 13.01.2025 14:07:03, Ciprian Costea wrote: > From: Ciprian Marian Costea <ciprianmarian.costea@xxxxxxxxxxx> > > Introduce 'FLEXCAN_QUIRK_SECONDARY_MB_IRQ' quirk to handle a FlexCAN > hardware module integration particularity where two ranges of mailboxes > are controlled by separate hardware interrupt lines. > The same 'flexcan_irq' handler is used for both separate mailbox interrupt > lines, with no other changes. > > Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@xxxxxxxxxxx> > Reviewed-by: Vincent Mailhol <mailhol.vincent@xxxxxxxxxx> > --- > drivers/net/can/flexcan/flexcan-core.c | 24 +++++++++++++++++++++++- > drivers/net/can/flexcan/flexcan.h | 5 +++++ > 2 files changed, 28 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/can/flexcan/flexcan-core.c b/drivers/net/can/flexcan/flexcan-core.c > index ac1a860986df..3ae54305bf33 100644 > --- a/drivers/net/can/flexcan/flexcan-core.c > +++ b/drivers/net/can/flexcan/flexcan-core.c > @@ -1762,14 +1762,25 @@ static int flexcan_open(struct net_device *dev) > goto out_free_irq_boff; > } > > + if (priv->devtype_data.quirks & FLEXCAN_QUIRK_SECONDARY_MB_IRQ) { > + err = request_irq(priv->irq_secondary_mb, > + flexcan_irq, IRQF_SHARED, dev->name, dev); > + if (err) > + goto out_free_irq_err; > + } > + > flexcan_chip_interrupts_enable(dev); > > netif_start_queue(dev); > > return 0; > > + out_free_irq_err: > + if (priv->devtype_data.quirks & FLEXCAN_QUIRK_NR_IRQ_3) > + free_irq(priv->irq_err, dev); > out_free_irq_boff: > - free_irq(priv->irq_boff, dev); > + if (priv->devtype_data.quirks & FLEXCAN_QUIRK_NR_IRQ_3) > + free_irq(priv->irq_boff, dev); > out_free_irq: > free_irq(dev->irq, dev); > out_can_rx_offload_disable: > @@ -1799,6 +1810,9 @@ static int flexcan_close(struct net_device *dev) > free_irq(priv->irq_boff, dev); > } > > + if (priv->devtype_data.quirks & FLEXCAN_QUIRK_SECONDARY_MB_IRQ) > + free_irq(priv->irq_secondary_mb, dev); > + While applying, I've changed the order to free the secondary IRQ first, to be symmetrical to flexcan_open(). regards, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung Nürnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
Attachment:
signature.asc
Description: PGP signature