.../bindings/net/can/fsl,flexcan.yaml | 30 ++++++++++- arch/arm64/boot/dts/freescale/s32n79-rdb.dts | 12 +++++ arch/arm64/boot/dts/freescale/s32n79.dtsi | 50 +++++++++++++++++++ drivers/net/can/flexcan/flexcan-core.c | 31 ++++++++++-- drivers/net/can/flexcan/flexcan.h | 2 + 5 files changed, 121 insertions(+), 4 deletions(-)
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
This patch series adds FlexCAN support for the NXP S32N79 SoC.
The S32N79 is an automotive-grade processor from NXP with multiple
FlexCAN instances. The FlexCAN IP integration on S32N79 differs from
other SoCs in the interrupt routing - it uses two separate interrupt
lines:
- one interrupt for mailboxes 0-127
- one interrupt for bus error detection and device state changes
The CAN controllers are connected through an irqsteer interrupt
controller in the RCU (Resource Control Unit) domain.
This series:
1. Adds dt-bindings documentation for S32N79 FlexCAN
2. Introduces FLEXCAN_QUIRK_IRQ_BERR to handle the two-interrupt
configuration
3. Adds S32N79 device data and compatible string to the driver
4. Adds FlexCAN device tree nodes for S32N79 SoC
5. Enables FlexCAN devices on the S32N79-RDB board
Tested on S32N79-RDB board with CAN and CAN FD communication.
v2 -> v1
- Renamed FLEXCAN_QUIRK_NR_IRQ_2 to FLEXCAN_QUIRK_IRQ_BERR to better
describe the actual hardware feature
- Appended new quirk at the end
- Switched from platform_get_irq to platform_get_irq_byname usage
- Updated interrupt description in dt-bindings
Ciprian Marian Costea (5):
dt-bindings: can: fsl,flexcan: add NXP S32N79 SoC support
can: flexcan: add FLEXCAN_QUIRK_IRQ_BERR quirk
can: flexcan: add NXP S32N79 SoC support
arm64: dts: s32n79: add FlexCAN nodes
arm64: dts: s32n79: enable FlexCAN devices
.../bindings/net/can/fsl,flexcan.yaml | 30 ++++++++++-
arch/arm64/boot/dts/freescale/s32n79-rdb.dts | 12 +++++
arch/arm64/boot/dts/freescale/s32n79.dtsi | 50 +++++++++++++++++++
drivers/net/can/flexcan/flexcan-core.c | 31 ++++++++++--
drivers/net/can/flexcan/flexcan.h | 2 +
5 files changed, 121 insertions(+), 4 deletions(-)
--
2.43.0
On 19.03.2026 10:40:27, Ciprian Costea wrote: > From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com> > > This patch series adds FlexCAN support for the NXP S32N79 SoC. > > The S32N79 is an automotive-grade processor from NXP with multiple > FlexCAN instances. The FlexCAN IP integration on S32N79 differs from > other SoCs in the interrupt routing - it uses two separate interrupt > lines: > - one interrupt for mailboxes 0-127 > - one interrupt for bus error detection and device state changes > > The CAN controllers are connected through an irqsteer interrupt > controller in the RCU (Resource Control Unit) domain. > > This series: > 1. Adds dt-bindings documentation for S32N79 FlexCAN > 2. Introduces FLEXCAN_QUIRK_IRQ_BERR to handle the two-interrupt > configuration > 3. Adds S32N79 device data and compatible string to the driver > 4. Adds FlexCAN device tree nodes for S32N79 SoC > 5. Enables FlexCAN devices on the S32N79-RDB board > > Tested on S32N79-RDB board with CAN and CAN FD communication. I think DTS changes go into a separate series. Please also have a look at the AI review: https://sashiko.dev/#/patchset/20260318092215.23505-1-ciprianmarian.costea%40oss.nxp.com Especially on patch#3. I think we should split the main IRQ handler into 3 parts, message buff, bus error and state change. 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 |
On 3/19/2026 1:56 PM, Marc Kleine-Budde wrote: > On 19.03.2026 10:40:27, Ciprian Costea wrote: >> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com> >> >> This patch series adds FlexCAN support for the NXP S32N79 SoC. >> >> The S32N79 is an automotive-grade processor from NXP with multiple >> FlexCAN instances. The FlexCAN IP integration on S32N79 differs from >> other SoCs in the interrupt routing - it uses two separate interrupt >> lines: >> - one interrupt for mailboxes 0-127 >> - one interrupt for bus error detection and device state changes >> >> The CAN controllers are connected through an irqsteer interrupt >> controller in the RCU (Resource Control Unit) domain. >> >> This series: >> 1. Adds dt-bindings documentation for S32N79 FlexCAN >> 2. Introduces FLEXCAN_QUIRK_IRQ_BERR to handle the two-interrupt >> configuration >> 3. Adds S32N79 device data and compatible string to the driver >> 4. Adds FlexCAN device tree nodes for S32N79 SoC >> 5. Enables FlexCAN devices on the S32N79-RDB board >> >> Tested on S32N79-RDB board with CAN and CAN FD communication. > > I think DTS changes go into a separate series. > Hi Marc, I added the devicetree list to this thread. > Please also have a look at the AI review: > > https://sashiko.dev/#/patchset/20260318092215.23505-1-ciprianmarian.costea%40oss.nxp.com > > Especially on patch#3. > > I think we should split the main IRQ handler into 3 parts, message buff, > bus error and state change. > > regards, > Marc > Thanks for pointing to the AI review. It raises two concerns: 1. Duplicate event processing (can be addressed by splitting the handler as you've suggested). This is a pre-existing issue affecting S32G2 (NR_IRQ_3 with 4 IRQ lines to the same handler) and MCF5441X (3 IRQ lines on the same handler). I'll include this as a preparatory patch in the next version of the series. 2. Concurrent skb_irq_queue access (pre-existing, separate scope) The __skb_queue_add_sort() calls on offload->skb_irq_queue are lockless. When the mb and esr handlers run concurrently on different CPUs, both can manipulate the list simultaneously. This is a valid concern, but it's also pre-existing. The fix requires changes in CAN core's rx-offload.c rather than in flexcan, so I think it would be better handled in a separate series. Would you agree ? Best regards, Ciprian
On 19.03.2026 16:14:46, Ciprian Marian Costea wrote: > > Please also have a look at the AI review: > > > > https://sashiko.dev/#/patchset/20260318092215.23505-1-ciprianmarian.costea%40oss.nxp.com > > > > Especially on patch#3. > > > > I think we should split the main IRQ handler into 3 parts, message buff, > > bus error and state change. > Thanks for pointing to the AI review. > > It raises two concerns: > > 1. Duplicate event processing (can be addressed by splitting the handler > as you've suggested). > > This is a pre-existing issue affecting S32G2 (NR_IRQ_3 with 4 IRQ lines > to the same handler) and MCF5441X (3 IRQ lines on the same handler). > I'll include this as a preparatory patch in the next version of the series. Thanks. Until the S32G2 was added multiple IRQ handlers was a niche problem. But now it's relevant. > 2. Concurrent skb_irq_queue access (pre-existing, separate scope) > > The __skb_queue_add_sort() calls on offload->skb_irq_queue are lockless. > When the mb and esr handlers run concurrently on different CPUs, both > can manipulate the list simultaneously. > This is a valid concern, but it's also pre-existing. > > The fix requires changes in CAN core's rx-offload.c rather than in > flexcan, so I think it would be better handled in a separate series. > > Would you agree ? ACK One option is to make struct can_rx_offload::skb_irq_queue per CPU. 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 |
© 2016 - 2026 Red Hat, Inc.