* [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC
@ 2026-03-11 8:11 Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support Ciprian Costea
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
This series introduces initial device tree support for the NXP S32N79
automotive SoC and its Reference Design Board (RDB).
The S32N79 is an automotive-grade system-on-chip featuring eight Arm
Cortex-A78AE cores organized in four dual-core clusters. It is designed
for high-performance networking and gateway applications vehicle
architectures [1]
Hardware features included in this initial support:
- 8x Arm Cortex-A78AE cores (4 clusters of 2 cores each)
- 32GB DRAM Memory. 28GB are usable and 4GB are reserved for ECC logic
- Three-level cache hierarchy (L1/L2 per core, L3 per cluster)
- GICv3 interrupt controller with ITS
- SMMUv3 for IOMMU support
- Generic Timer
- IRQ steering controller
- PL011 UART controllers
- uSDHC controller
This series also includes the necessary driver updates:
- sdhci-esdhc-imx: Add S32N79 uSDHC controller support
- irq-imx-irqsteer: Add S32N79 IRQ steering support
- irqchip Kconfig: Add ARCH_S32 dependency for IMX_IRQSTEER
Future patches will add support for additional peripherals such as
networking controllers, PCIe, and other IP blocks.
[1] https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32n-vehicle-super-integration-processors:S32N
v6 -> v5
- Patches 2 and 4 from v5 have been applied, hence dropped from this series
- Removed redundant zero initialization in imx_data struct
v5 -> v4
- Squashed irqsteer 'Kconfig' changes with the actual driver updates.
- Fixed tabular layout in the irq-imx-irqsteer driver
- Added received 'Reviewed-by' and 'Acked-by' tags from V4.
v4 -> v3
- Added missing Signed-of-by's from one commit removed in v3 by mistake
v3 -> v2
- Split S32N79 SoC dtsi into separate standalone commit
- Renamed a memory node in the S32N79 board dts
- Fixed IRQ STEER DT-Bindings support for S32N79 addition
- Updated S32N79 usdhc driver support commit message
v2 -> v1
- added driver changes required for S32N79 uSDHC support
- added driver changes required for S32N79 IRQ_STEER support
- updated commit message for uSDHC dt-bindings
- implemented fixes for 'dt-format' tool findings on newly added S32N79 dts files
Ciprian Marian Costea (5):
dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support
dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board
irqchip/imx-irqsteer: add NXP S32N79 support
arm64: dts: freescale: Add NXP S32N79 SoC support
arm64: dts: freescale: Add NXP S32N79-RDB board support
.../devicetree/bindings/arm/fsl.yaml | 6 +
.../interrupt-controller/fsl,irqsteer.yaml | 4 +-
arch/arm64/boot/dts/freescale/Makefile | 1 +
arch/arm64/boot/dts/freescale/s32n79-rdb.dts | 70 ++++
arch/arm64/boot/dts/freescale/s32n79.dtsi | 362 ++++++++++++++++++
drivers/irqchip/Kconfig | 6 +-
drivers/irqchip/irq-imx-irqsteer.c | 53 ++-
7 files changed, 485 insertions(+), 17 deletions(-)
create mode 100644 arch/arm64/boot/dts/freescale/s32n79-rdb.dts
create mode 100644 arch/arm64/boot/dts/freescale/s32n79.dtsi
--
2.43.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
@ 2026-03-11 8:11 ` Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 2/5] dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board Ciprian Costea
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore, Krzysztof Kozlowski
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add compatible string for the interrupt steering controller used in NXP
S32N79 SoC.
The S32N79 SoC differs from the i.MX version by not implementing the
CHANCTRL register, but otherwise maintains the same programming model and
register layout.
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
.../bindings/interrupt-controller/fsl,irqsteer.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/interrupt-controller/fsl,irqsteer.yaml b/Documentation/devicetree/bindings/interrupt-controller/fsl,irqsteer.yaml
index 5c768c1e159c..13cd37bf48e4 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/fsl,irqsteer.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/fsl,irqsteer.yaml
@@ -12,7 +12,9 @@ maintainers:
properties:
compatible:
oneOf:
- - const: fsl,imx-irqsteer
+ - enum:
+ - fsl,imx-irqsteer
+ - nxp,s32n79-irqsteer
- items:
- enum:
- fsl,imx8m-irqsteer
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 2/5] dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support Ciprian Costea
@ 2026-03-11 8:11 ` Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support Ciprian Costea
` (4 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore, Krzysztof Kozlowski
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add device tree binding documentation for the NXP S32N79 automotive SoC
and the S32N79 Reference Design Board (S32N79-RDB).
The S32N79 is an automotive-grade SoC featuring eight ARM Cortex-A78AE
cores organized for high-performance networking and gateway applications
in vehicles.
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
Documentation/devicetree/bindings/arm/fsl.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
index 5716d701292c..415081423a30 100644
--- a/Documentation/devicetree/bindings/arm/fsl.yaml
+++ b/Documentation/devicetree/bindings/arm/fsl.yaml
@@ -1827,6 +1827,12 @@ properties:
- fsl,s32v234-evb # S32V234-EVB2 Customer Evaluation Board
- const: fsl,s32v234
+ - description: S32N79 based Boards
+ items:
+ - enum:
+ - nxp,s32n79-rdb
+ - const: nxp,s32n79
+
- description: Traverse LS1088A based Boards
items:
- enum:
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 2/5] dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board Ciprian Costea
@ 2026-03-11 8:11 ` Ciprian Costea
2026-03-11 8:58 ` [tip: irq/drivers] irqchip/imx-irqsteer: Add " tip-bot2 for Ciprian Marian Costea
2026-03-11 9:09 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add " Thomas Gleixner
2026-03-11 8:11 ` [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support Ciprian Costea
` (3 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add support for the interrupt steering controller found in NXP S32N79
series automotive SoCs.
The S32N79 IRQ_STEER variant differs from the i.MX version by not
implementing the CHANCTRL register. To handle this hardware difference,
introduce a device type data structure with quirks field. The
IRQSTEER_QUIRK_NO_CHANCTRL quirk skips CHANCTRL register access for S32N79
variants.
The interrupt routing functionality and register layout are otherwise
identical between the two variants.
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
---
drivers/irqchip/Kconfig | 6 ++--
drivers/irqchip/irq-imx-irqsteer.c | 53 ++++++++++++++++++++++--------
2 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index f07b00d7fef9..ad32a084afba 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -541,11 +541,11 @@ config CSKY_APB_INTC
config IMX_IRQSTEER
bool "i.MX IRQSTEER support"
- depends on ARCH_MXC || COMPILE_TEST
- default ARCH_MXC
+ depends on ARCH_MXC || ARCH_S32 || COMPILE_TEST
+ default y if ARCH_MXC || ARCH_S32
select IRQ_DOMAIN
help
- Support for the i.MX IRQSTEER interrupt multiplexer/remapper.
+ Support for the i.MX and S32 IRQSTEER interrupt multiplexer/remapper.
config IMX_INTMUX
bool "i.MX INTMUX support" if COMPILE_TEST
diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c
index 4682ce5bf8d3..fb3594b9a244 100644
--- a/drivers/irqchip/irq-imx-irqsteer.c
+++ b/drivers/irqchip/irq-imx-irqsteer.c
@@ -26,19 +26,38 @@
#define CHAN_MAX_OUTPUT_INT 0xF
+/* SoC does not implement the CHANCTRL register */
+#define IRQSTEER_QUIRK_NO_CHANCTRL BIT(0)
+
+struct irqsteer_devtype_data {
+ u32 quirks;
+};
+
struct irqsteer_data {
- void __iomem *regs;
- struct clk *ipg_clk;
- int irq[CHAN_MAX_OUTPUT_INT];
- int irq_count;
- raw_spinlock_t lock;
- int reg_num;
- int channel;
- struct irq_domain *domain;
- u32 *saved_reg;
- struct device *dev;
+ void __iomem *regs;
+ struct clk *ipg_clk;
+ int irq[CHAN_MAX_OUTPUT_INT];
+ int irq_count;
+ raw_spinlock_t lock;
+ int reg_num;
+ int channel;
+ struct irq_domain *domain;
+ u32 *saved_reg;
+ struct device *dev;
+ const struct irqsteer_devtype_data *devtype_data;
+};
+
+static const struct irqsteer_devtype_data imx_data = { };
+
+static const struct irqsteer_devtype_data s32n79_data = {
+ .quirks = IRQSTEER_QUIRK_NO_CHANCTRL,
};
+static bool irqsteer_has_chanctrl(const struct irqsteer_devtype_data *data)
+{
+ return !(data->quirks & IRQSTEER_QUIRK_NO_CHANCTRL);
+}
+
static int imx_irqsteer_get_reg_index(struct irqsteer_data *data,
unsigned long irqnum)
{
@@ -188,6 +207,10 @@ static int imx_irqsteer_probe(struct platform_device *pdev)
if (ret)
return ret;
+ data->devtype_data = device_get_match_data(&pdev->dev);
+ if (!data->devtype_data)
+ return dev_err_probe(&pdev->dev, -ENODEV, "failed to match device data\n");
+
/*
* There is one output irq for each group of 64 inputs.
* One register bit map can represent 32 input interrupts.
@@ -210,7 +233,8 @@ static int imx_irqsteer_probe(struct platform_device *pdev)
}
/* steer all IRQs into configured channel */
- writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+ if (irqsteer_has_chanctrl(data->devtype_data))
+ writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
data->domain = irq_domain_create_linear(dev_fwnode(&pdev->dev), data->reg_num * 32,
&imx_irqsteer_domain_ops, data);
@@ -279,7 +303,9 @@ static void imx_irqsteer_restore_regs(struct irqsteer_data *data)
{
int i;
- writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+ if (irqsteer_has_chanctrl(data->devtype_data))
+ writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+
for (i = 0; i < data->reg_num; i++)
writel_relaxed(data->saved_reg[i],
data->regs + CHANMASK(i, data->reg_num));
@@ -319,7 +345,8 @@ static const struct dev_pm_ops imx_irqsteer_pm_ops = {
};
static const struct of_device_id imx_irqsteer_dt_ids[] = {
- { .compatible = "fsl,imx-irqsteer", },
+ { .compatible = "fsl,imx-irqsteer", .data = &imx_data },
+ { .compatible = "nxp,s32n79-irqsteer", .data = &s32n79_data },
{},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
` (2 preceding siblings ...)
2026-03-11 8:11 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support Ciprian Costea
@ 2026-03-11 8:11 ` Ciprian Costea
2026-03-12 12:46 ` Ciprian Marian Costea
2026-03-11 8:11 ` [PATCH v6 5/5] arm64: dts: freescale: Add NXP S32N79-RDB board support Ciprian Costea
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore, Andra-Teodora Ilie,
Andrei Cherechesu
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add device tree support for the NXP S32N79 automotive SoC [1].
The S32N79 features eight Arm Cortex-A78AE cores organized in four
dual-core clusters, with a three-level cache hierarchy (L1/L2 per core,
L3 per dual-core cluster) and 32GB of DRAM memory. It includes an SMMUv3
for IOMMU functionality.
On S32N79 SoC, peripherals are organized into subsystems, such as:
- CIS (Coherent Interconnect Subsystem)
- COSS (Connectivity Subsystem)
- FSS (Foundation Subsystem)
This initial support includes basic peripherals:
- GICv3, SMMUv3 from CIS Subsystem
- PL011 UARTs and IRQ steering controller from COSS Subsystem
- uSDHC from FSS Subsystem
Clock and Pin multiplexing settings for the chip are managed over SCMI.
[1] https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32n-vehicle-super-integration-processors:S32N
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Co-developed-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
Signed-off-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
Co-developed-by: Andrei Cherechesu <andrei.cherechesu@nxp.com>
Signed-off-by: Andrei Cherechesu <andrei.cherechesu@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
---
arch/arm64/boot/dts/freescale/s32n79.dtsi | 362 ++++++++++++++++++++++
1 file changed, 362 insertions(+)
create mode 100644 arch/arm64/boot/dts/freescale/s32n79.dtsi
diff --git a/arch/arm64/boot/dts/freescale/s32n79.dtsi b/arch/arm64/boot/dts/freescale/s32n79.dtsi
new file mode 100644
index 000000000000..94ab58783fdc
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/s32n79.dtsi
@@ -0,0 +1,362 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
+/*
+ * NXP S32N79 SoC
+ *
+ * Copyright 2026 NXP
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ interrupt-parent = <&gic>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ cis-bus {
+ compatible = "simple-bus";
+ ranges = <0x4f200000 0x0 0x4f200000 0xc00000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ gic: interrupt-controller@4f200000 {
+ compatible = "arm,gic-v3";
+ reg = <0x4f200000 0x10000>, /* GIC Dist */
+ <0x4f260000 0x100000>;
+ #interrupt-cells = <3>;
+ interrupt-controller;
+ interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ /* GICR (RD_base + SGI_base) */
+ ranges;
+
+ its: msi-controller@4f240000 {
+ compatible = "arm,gic-v3-its";
+ reg = <0x4f240000 0x20000>;
+ #msi-cells = <1>;
+ msi-controller;
+ };
+ };
+
+ smmu: iommu@4fc00000 {
+ compatible = "arm,smmu-v3";
+ reg = <0x4fc00000 0x200000>;
+ interrupt-parent = <&gic>;
+ interrupts = <GIC_SPI 1 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 4 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 8 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>;
+ interrupt-names = "eventq", "gerror", "priq", "cmdq-sync";
+ #iommu-cells = <1>;
+ dma-coherent;
+ status = "disabled";
+ };
+ };
+
+ coss-bus {
+ compatible = "simple-bus";
+ ranges = <0x4a000000 0x0 0x4a000000 0xff0000>,
+ <0x4e000000 0x0 0x4e000000 0x1000000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ uart0: serial@4a030000 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x4a030000 0x1000>;
+ interrupt-parent = <&irqsteer_coss>;
+ interrupts = <264>;
+ clocks = <&clks 0x9a>, <&clks 0x9a>;
+ clock-names = "uartclk", "apb_pclk";
+ status = "disabled";
+ };
+
+ uart5: serial@4a060000 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x4a060000 0x1000>;
+ interrupt-parent = <&irqsteer_coss>;
+ interrupts = <269>;
+ clocks = <&clks 0x9a>, <&clks 0x9a>;
+ clock-names = "uartclk", "apb_pclk";
+ status = "disabled";
+ };
+
+ uart6: serial@4aa30000 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x4aa30000 0x1000>;
+ interrupt-parent = <&irqsteer_coss>;
+ interrupts = <270>;
+ clocks = <&clks 0x9a>, <&clks 0x9a>;
+ clock-names = "uartclk", "apb_pclk";
+ status = "disabled";
+ };
+
+ uart7: serial@4aa40000 {
+ compatible = "arm,pl011", "arm,primecell";
+ reg = <0x4aa40000 0x1000>;
+ interrupt-parent = <&irqsteer_coss>;
+ interrupts = <271>;
+ clocks = <&clks 0x9a>, <&clks 0x9a>;
+ clock-names = "uartclk", "apb_pclk";
+ status = "disabled";
+ };
+
+ irqsteer_coss: interrupt-controller@4ed00000 {
+ compatible = "nxp,s32n79-irqsteer";
+ reg = <0x4ed00000 0x10000>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupt-parent = <&gic>;
+ interrupts = <GIC_SPI 527 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 528 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 529 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 530 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 531 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 532 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 533 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 534 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clks 0x9a>;
+ clock-names = "ipg";
+ fsl,channel = <0>;
+ fsl,num-irqs = <512>;
+ status = "disabled";
+ };
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu-map {
+ cluster0 {
+ core0 {
+ cpu = <&cpu0>;
+ };
+
+ core1 {
+ cpu = <&cpu1>;
+ };
+ };
+
+ cluster1 {
+ core0 {
+ cpu = <&cpu2>;
+ };
+
+ core1 {
+ cpu = <&cpu3>;
+ };
+ };
+
+ cluster2 {
+ core0 {
+ cpu = <&cpu4>;
+ };
+
+ core1 {
+ cpu = <&cpu5>;
+ };
+ };
+
+ cluster3 {
+ core0 {
+ cpu = <&cpu6>;
+ };
+
+ core1 {
+ cpu = <&cpu7>;
+ };
+ };
+ };
+
+ l2_0: l2-cache0 {
+ compatible = "cache";
+ cache-level = <2>;
+ cache-line-size = <64>;
+ cache-sets = <512>;
+ cache-size = <524288>;
+ cache-unified;
+ next-level-cache = <&l3_0>;
+ };
+
+ l2_1: l2-cache1 {
+ compatible = "cache";
+ cache-level = <2>;
+ cache-line-size = <64>;
+ cache-sets = <512>;
+ cache-size = <524288>;
+ cache-unified;
+ next-level-cache = <&l3_1>;
+ };
+
+ l2_2: l2-cache2 {
+ compatible = "cache";
+ cache-level = <2>;
+ cache-line-size = <64>;
+ cache-sets = <512>;
+ cache-size = <524288>;
+ cache-unified;
+ next-level-cache = <&l3_2>;
+ };
+
+ l2_3: l2-cache3 {
+ compatible = "cache";
+ cache-level = <2>;
+ cache-line-size = <64>;
+ cache-sets = <512>;
+ cache-size = <524288>;
+ cache-unified;
+ next-level-cache = <&l3_3>;
+ };
+
+ l3_0: l3-cache0 {
+ compatible = "cache";
+ cache-level = <3>;
+ cache-line-size = <64>;
+ cache-sets = <1024>;
+ cache-size = <1048576>;
+ cache-unified;
+ };
+
+ l3_1: l3-cache1 {
+ compatible = "cache";
+ cache-level = <3>;
+ cache-line-size = <64>;
+ cache-sets = <1024>;
+ cache-size = <1048576>;
+ cache-unified;
+ };
+
+ l3_2: l3-cache2 {
+ compatible = "cache";
+ cache-level = <3>;
+ cache-line-size = <64>;
+ cache-sets = <1024>;
+ cache-size = <1048576>;
+ cache-unified;
+ };
+
+ l3_3: l3-cache3 {
+ compatible = "cache";
+ cache-level = <3>;
+ cache-line-size = <64>;
+ cache-sets = <1024>;
+ cache-size = <1048576>;
+ cache-unified;
+ };
+
+ cpu0: cpu@0 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x0>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_0>;
+ };
+
+ cpu1: cpu@100 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x100>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_0>;
+ };
+
+ cpu2: cpu@10000 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x10000>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_1>;
+ };
+
+ cpu3: cpu@10100 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x10100>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_1>;
+ };
+
+ cpu4: cpu@20000 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x20000>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_2>;
+ };
+
+ cpu5: cpu@20100 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x20100>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_2>;
+ };
+
+ cpu6: cpu@30000 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x30000>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_3>;
+ };
+
+ cpu7: cpu@30100 {
+ compatible = "arm,cortex-a78ae";
+ reg = <0x30100>;
+ device_type = "cpu";
+ enable-method = "psci";
+ next-level-cache = <&l2_3>;
+ };
+ };
+
+ firmware {
+ psci {
+ compatible = "arm,psci-1.0";
+ method = "smc";
+ };
+
+ scmi: scmi {
+ compatible = "arm,scmi-smc";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ shmem = <&scmi_shbuf>;
+ arm,smc-id = <0xc20000fe>;
+ status = "okay";
+
+ clks: protocol@14 {
+ reg = <0x14>;
+ #clock-cells = <1>;
+ };
+ };
+ };
+
+ fss-bus {
+ compatible = "simple-bus";
+ ranges = <0x5b490000 0x0 0x5b490000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ usdhc0: mmc@5b490000 {
+ compatible = "nxp,s32n79-usdhc";
+ reg = <0x5b490000 0x1000>;
+ interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clks 0x58>, <&clks 0x50>, <&clks 0x5f>;
+ clock-names = "ipg", "ahb", "per";
+ bus-width = <8>;
+ status = "disabled";
+ };
+ };
+
+ pmu: pmu {
+ compatible = "arm,armv8-pmuv3";
+ interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ timer: timer {
+ compatible = "arm,armv8-timer";
+ interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
+ <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
+ <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
+ <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 5/5] arm64: dts: freescale: Add NXP S32N79-RDB board support
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
` (3 preceding siblings ...)
2026-03-11 8:11 ` [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support Ciprian Costea
@ 2026-03-11 8:11 ` Ciprian Costea
2026-03-13 16:33 ` (subset) [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Frank Li
2026-03-13 16:37 ` Frank Li
6 siblings, 0 replies; 14+ messages in thread
From: Ciprian Costea @ 2026-03-11 8:11 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore, Andra-Teodora Ilie
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add device tree support for the NXP S32N79 Reference Design Board
(RDB) [1].
The S32N79-RDB enables the following peripherals:
- PL011 UART controllers (uart0, uart5, uart6, uart7)
- uSDHC controller
- IRQ steering controller
The board has 32GB of DRAM memory with 28GB usable and 4GB reserved
for ECC logic.
[1] https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32n-vehicle-super-integration-processors:S32N
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Co-developed-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
Signed-off-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
---
arch/arm64/boot/dts/freescale/Makefile | 1 +
arch/arm64/boot/dts/freescale/s32n79-rdb.dts | 70 ++++++++++++++++++++
2 files changed, 71 insertions(+)
create mode 100644 arch/arm64/boot/dts/freescale/s32n79-rdb.dts
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 700bab4d3e60..e79807bf1820 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -501,4 +501,5 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mm-phygate-tauri-l-rs232-rs485.dtb
dtb-$(CONFIG_ARCH_S32) += s32g274a-evb.dtb
dtb-$(CONFIG_ARCH_S32) += s32g274a-rdb2.dtb
dtb-$(CONFIG_ARCH_S32) += s32g399a-rdb3.dtb
+dtb-$(CONFIG_ARCH_S32) += s32n79-rdb.dtb
dtb-$(CONFIG_ARCH_S32) += s32v234-evb.dtb
diff --git a/arch/arm64/boot/dts/freescale/s32n79-rdb.dts b/arch/arm64/boot/dts/freescale/s32n79-rdb.dts
new file mode 100644
index 000000000000..1feccd61258e
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/s32n79-rdb.dts
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
+/*
+ * Copyright 2026 NXP
+ *
+ * NXP S32N79 Reference Design Board (S32N79-RDB)
+ */
+
+/dts-v1/;
+#include "s32n79.dtsi"
+
+/ {
+ compatible = "nxp,s32n79-rdb", "nxp,s32n79";
+ model = "NXP S32N79-RDB";
+
+ aliases {
+ serial0 = &uart0;
+ serial1 = &uart5;
+ serial2 = &uart6;
+ serial3 = &uart7;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ reserved-memory {
+ ranges;
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ scmi_shbuf: memory@93000000 {
+ compatible = "arm,scmi-shmem";
+ reg = <0x0 0x93000000 0x0 0x80>;
+ no-map;
+ };
+ };
+
+ memory@80000000 {
+ reg = <0x00 0x80000000 0x00 0x80000000>,
+ <0x88 0x00000000 0x03 0x40000000>,
+ <0xc0 0x00000000 0x03 0x40000000>;
+ device_type = "memory";
+ };
+};
+
+&irqsteer_coss {
+ status = "okay";
+};
+
+&uart0 {
+ status = "okay";
+};
+
+&uart5 {
+ status = "okay";
+};
+
+&uart6 {
+ status = "okay";
+};
+
+&uart7 {
+ status = "okay";
+};
+
+&usdhc0 {
+ disable-wp;
+ no-sdio;
+ status = "okay";
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [tip: irq/drivers] irqchip/imx-irqsteer: Add NXP S32N79 support
2026-03-11 8:11 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support Ciprian Costea
@ 2026-03-11 8:58 ` tip-bot2 for Ciprian Marian Costea
2026-03-11 9:09 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add " Thomas Gleixner
1 sibling, 0 replies; 14+ messages in thread
From: tip-bot2 for Ciprian Marian Costea @ 2026-03-11 8:58 UTC (permalink / raw)
To: linux-tip-commits
Cc: Larisa Grigore, Ciprian Marian Costea, Thomas Gleixner, x86,
linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 5e72917802dd65ad1ff57f2158a9d221b4fddf0b
Gitweb: https://git.kernel.org/tip/5e72917802dd65ad1ff57f2158a9d221b4fddf0b
Author: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
AuthorDate: Wed, 11 Mar 2026 09:11:52 +01:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Wed, 11 Mar 2026 09:55:26 +01:00
irqchip/imx-irqsteer: Add NXP S32N79 support
Add support for the interrupt steering controller found in NXP S32N79
series automotive SoCs.
The S32N79 IRQ_STEER variant differs from the i.MX version by not
implementing the CHANCTRL register. To handle this hardware difference,
introduce a device type data structure with quirks field. The
IRQSTEER_QUIRK_NO_CHANCTRL quirk skips CHANCTRL register access for S32N79
variants.
The interrupt routing functionality and register layout are otherwise
identical between the two variants.
Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260311081154.381881-4-ciprianmarian.costea@oss.nxp.com
---
drivers/irqchip/Kconfig | 6 +--
drivers/irqchip/irq-imx-irqsteer.c | 53 +++++++++++++++++++++--------
2 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index dc26eff..2feecfb 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -544,11 +544,11 @@ config CSKY_APB_INTC
config IMX_IRQSTEER
bool "i.MX IRQSTEER support"
- depends on ARCH_MXC || COMPILE_TEST
- default ARCH_MXC
+ depends on ARCH_MXC || ARCH_S32 || COMPILE_TEST
+ default y if ARCH_MXC || ARCH_S32
select IRQ_DOMAIN
help
- Support for the i.MX IRQSTEER interrupt multiplexer/remapper.
+ Support for the i.MX and S32 IRQSTEER interrupt multiplexer/remapper.
config IMX_INTMUX
bool "i.MX INTMUX support" if COMPILE_TEST
diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c
index 4682ce5..87b07f5 100644
--- a/drivers/irqchip/irq-imx-irqsteer.c
+++ b/drivers/irqchip/irq-imx-irqsteer.c
@@ -26,19 +26,38 @@
#define CHAN_MAX_OUTPUT_INT 0xF
+/* SoC does not implement the CHANCTRL register */
+#define IRQSTEER_QUIRK_NO_CHANCTRL BIT(0)
+
+struct irqsteer_devtype_data {
+ u32 quirks;
+};
+
struct irqsteer_data {
- void __iomem *regs;
- struct clk *ipg_clk;
- int irq[CHAN_MAX_OUTPUT_INT];
- int irq_count;
- raw_spinlock_t lock;
- int reg_num;
- int channel;
- struct irq_domain *domain;
- u32 *saved_reg;
- struct device *dev;
+ void __iomem *regs;
+ struct clk *ipg_clk;
+ int irq[CHAN_MAX_OUTPUT_INT];
+ int irq_count;
+ raw_spinlock_t lock;
+ int reg_num;
+ int channel;
+ struct irq_domain *domain;
+ u32 *saved_reg;
+ struct device *dev;
+ const struct irqsteer_devtype_data *devtype_data;
+};
+
+static const struct irqsteer_devtype_data imx_data = { };
+
+static const struct irqsteer_devtype_data s32n79_data = {
+ .quirks = IRQSTEER_QUIRK_NO_CHANCTRL,
};
+static bool irqsteer_has_chanctrl(const struct irqsteer_devtype_data *data)
+{
+ return !(data->quirks & IRQSTEER_QUIRK_NO_CHANCTRL);
+}
+
static int imx_irqsteer_get_reg_index(struct irqsteer_data *data,
unsigned long irqnum)
{
@@ -188,6 +207,10 @@ static int imx_irqsteer_probe(struct platform_device *pdev)
if (ret)
return ret;
+ data->devtype_data = device_get_match_data(&pdev->dev);
+ if (!data->devtype_data)
+ return dev_err_probe(&pdev->dev, -ENODEV, "failed to match device data\n");
+
/*
* There is one output irq for each group of 64 inputs.
* One register bit map can represent 32 input interrupts.
@@ -210,7 +233,8 @@ static int imx_irqsteer_probe(struct platform_device *pdev)
}
/* steer all IRQs into configured channel */
- writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+ if (irqsteer_has_chanctrl(data->devtype_data))
+ writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
data->domain = irq_domain_create_linear(dev_fwnode(&pdev->dev), data->reg_num * 32,
&imx_irqsteer_domain_ops, data);
@@ -279,7 +303,9 @@ static void imx_irqsteer_restore_regs(struct irqsteer_data *data)
{
int i;
- writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+ if (irqsteer_has_chanctrl(data->devtype_data))
+ writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
+
for (i = 0; i < data->reg_num; i++)
writel_relaxed(data->saved_reg[i],
data->regs + CHANMASK(i, data->reg_num));
@@ -319,7 +345,8 @@ static const struct dev_pm_ops imx_irqsteer_pm_ops = {
};
static const struct of_device_id imx_irqsteer_dt_ids[] = {
- { .compatible = "fsl,imx-irqsteer", },
+ { .compatible = "fsl,imx-irqsteer", .data = &imx_data },
+ { .compatible = "nxp,s32n79-irqsteer", .data = &s32n79_data },
{},
};
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support
2026-03-11 8:11 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support Ciprian Costea
2026-03-11 8:58 ` [tip: irq/drivers] irqchip/imx-irqsteer: Add " tip-bot2 for Ciprian Marian Costea
@ 2026-03-11 9:09 ` Thomas Gleixner
2026-03-11 15:50 ` Frank Li
1 sibling, 1 reply; 14+ messages in thread
From: Thomas Gleixner @ 2026-03-11 9:09 UTC (permalink / raw)
To: Ciprian Costea, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Frank Li, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Ciprian Marian Costea, Larisa Grigore
On Wed, Mar 11 2026 at 09:11, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> Add support for the interrupt steering controller found in NXP S32N79
> series automotive SoCs.
>
> The S32N79 IRQ_STEER variant differs from the i.MX version by not
> implementing the CHANCTRL register. To handle this hardware difference,
> introduce a device type data structure with quirks field. The
> IRQSTEER_QUIRK_NO_CHANCTRL quirk skips CHANCTRL register access for S32N79
> variants.
>
> The interrupt routing functionality and register layout are otherwise
> identical between the two variants.
>
> Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
> Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
> Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
I've picked up this one. Can the ARM64 folks please pick up the DT muck
as that really has close to zero relevance to irqchips.
Thanks,
tglx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support
2026-03-11 9:09 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add " Thomas Gleixner
@ 2026-03-11 15:50 ` Frank Li
2026-03-11 22:21 ` Rob Herring
0 siblings, 1 reply; 14+ messages in thread
From: Frank Li @ 2026-03-11 15:50 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ciprian Costea, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach,
Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet, Larisa Grigore
On Wed, Mar 11, 2026 at 10:09:37AM +0100, Thomas Gleixner wrote:
> On Wed, Mar 11 2026 at 09:11, Ciprian Costea wrote:
> > From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
> >
> > Add support for the interrupt steering controller found in NXP S32N79
> > series automotive SoCs.
> >
> > The S32N79 IRQ_STEER variant differs from the i.MX version by not
> > implementing the CHANCTRL register. To handle this hardware difference,
> > introduce a device type data structure with quirks field. The
> > IRQSTEER_QUIRK_NO_CHANCTRL quirk skips CHANCTRL register access for S32N79
> > variants.
> >
> > The interrupt routing functionality and register layout are otherwise
> > identical between the two variants.
> >
> > Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
> > Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
> > Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> I've picked up this one. Can the ARM64 folks please pick up the DT muck
> as that really has close to zero relevance to irqchips.
Did you pick binding one?
PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support
I have not founnd at linux-next yet.
Frank
>
> Thanks,
>
> tglx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support
2026-03-11 15:50 ` Frank Li
@ 2026-03-11 22:21 ` Rob Herring
2026-03-12 2:08 ` Frank Li
0 siblings, 1 reply; 14+ messages in thread
From: Rob Herring @ 2026-03-11 22:21 UTC (permalink / raw)
To: Frank Li
Cc: Thomas Gleixner, Ciprian Costea, Krzysztof Kozlowski,
Conor Dooley, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach,
Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet, Larisa Grigore
On Wed, Mar 11, 2026 at 11:50:44AM -0400, Frank Li wrote:
> On Wed, Mar 11, 2026 at 10:09:37AM +0100, Thomas Gleixner wrote:
> > On Wed, Mar 11 2026 at 09:11, Ciprian Costea wrote:
> > > From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
> > >
> > > Add support for the interrupt steering controller found in NXP S32N79
> > > series automotive SoCs.
> > >
> > > The S32N79 IRQ_STEER variant differs from the i.MX version by not
> > > implementing the CHANCTRL register. To handle this hardware difference,
> > > introduce a device type data structure with quirks field. The
> > > IRQSTEER_QUIRK_NO_CHANCTRL quirk skips CHANCTRL register access for S32N79
> > > variants.
> > >
> > > The interrupt routing functionality and register layout are otherwise
> > > identical between the two variants.
> > >
> > > Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
> > > Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
> > > Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
> >
> > I've picked up this one. Can the ARM64 folks please pick up the DT muck
> > as that really has close to zero relevance to irqchips.
>
> Did you pick binding one?
The replies to the thread clearly say what was applied.
> PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support
>
> I have not founnd at linux-next yet.
Please take the binding with the .dts file changes.
Rob
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support
2026-03-11 22:21 ` Rob Herring
@ 2026-03-12 2:08 ` Frank Li
0 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2026-03-12 2:08 UTC (permalink / raw)
To: Rob Herring
Cc: Thomas Gleixner, Ciprian Marian Costea (OSS), Krzysztof Kozlowski,
Conor Dooley, Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach,
Pengutronix Kernel Team, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, dl-S32, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet,
Larisa Ileana Grigore
> > >
> > > I've picked up this one. Can the ARM64 folks please pick up the DT muck
> > > as that really has close to zero relevance to irqchips.
> >
> > Did you pick binding one?
>
> The replies to the thread clearly say what was applied.
Sorry, I miss understand by thing it is dts file, not binding file.
Frank
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support
2026-03-11 8:11 ` [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support Ciprian Costea
@ 2026-03-12 12:46 ` Ciprian Marian Costea
0 siblings, 0 replies; 14+ messages in thread
From: Ciprian Marian Costea @ 2026-03-12 12:46 UTC (permalink / raw)
To: Frank Li
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet, Larisa Grigore,
Andra-Teodora Ilie, Andrei Cherechesu, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner, Sascha Hauer,
Fabio Estevam, Shawn Guo, Lucas Stach
On 3/11/2026 10:11 AM, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> Add device tree support for the NXP S32N79 automotive SoC [1].
>
> The S32N79 features eight Arm Cortex-A78AE cores organized in four
> dual-core clusters, with a three-level cache hierarchy (L1/L2 per core,
> L3 per dual-core cluster) and 32GB of DRAM memory. It includes an SMMUv3
> for IOMMU functionality.
>
> On S32N79 SoC, peripherals are organized into subsystems, such as:
> - CIS (Coherent Interconnect Subsystem)
> - COSS (Connectivity Subsystem)
> - FSS (Foundation Subsystem)
>
> This initial support includes basic peripherals:
> - GICv3, SMMUv3 from CIS Subsystem
> - PL011 UARTs and IRQ steering controller from COSS Subsystem
> - uSDHC from FSS Subsystem
>
> Clock and Pin multiplexing settings for the chip are managed over SCMI.
>
> [1] https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32n-vehicle-super-integration-processors:S32N
>
> Co-developed-by: Larisa Grigore <larisa.grigore@nxp.com>
> Signed-off-by: Larisa Grigore <larisa.grigore@nxp.com>
> Co-developed-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
> Signed-off-by: Andra-Teodora Ilie <andra.ilie@nxp.com>
> Co-developed-by: Andrei Cherechesu <andrei.cherechesu@nxp.com>
> Signed-off-by: Andrei Cherechesu <andrei.cherechesu@nxp.com>
> Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
> ---
> arch/arm64/boot/dts/freescale/s32n79.dtsi | 362 ++++++++++++++++++++++
> 1 file changed, 362 insertions(+)
> create mode 100644 arch/arm64/boot/dts/freescale/s32n79.dtsi
>
Hello Frank,
Sorry for reaching out again. Did you have a change to look at the
latest dtsi & dts patches from V6 ? I've addressed your previous
comments. Are they acceptable in the current state ?
Best Regards,
Ciprian
> diff --git a/arch/arm64/boot/dts/freescale/s32n79.dtsi b/arch/arm64/boot/dts/freescale/s32n79.dtsi
> new file mode 100644
> index 000000000000..94ab58783fdc
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/s32n79.dtsi
> @@ -0,0 +1,362 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> +/*
> + * NXP S32N79 SoC
> + *
> + * Copyright 2026 NXP
> + */
> +
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> +/ {
> + interrupt-parent = <&gic>;
> + #address-cells = <2>;
> + #size-cells = <2>;
> +
> + cis-bus {
> + compatible = "simple-bus";
> + ranges = <0x4f200000 0x0 0x4f200000 0xc00000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + gic: interrupt-controller@4f200000 {
> + compatible = "arm,gic-v3";
> + reg = <0x4f200000 0x10000>, /* GIC Dist */
> + <0x4f260000 0x100000>;
> + #interrupt-cells = <3>;
> + interrupt-controller;
> + interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + /* GICR (RD_base + SGI_base) */
> + ranges;
> +
> + its: msi-controller@4f240000 {
> + compatible = "arm,gic-v3-its";
> + reg = <0x4f240000 0x20000>;
> + #msi-cells = <1>;
> + msi-controller;
> + };
> + };
> +
> + smmu: iommu@4fc00000 {
> + compatible = "arm,smmu-v3";
> + reg = <0x4fc00000 0x200000>;
> + interrupt-parent = <&gic>;
> + interrupts = <GIC_SPI 1 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 4 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 8 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>;
> + interrupt-names = "eventq", "gerror", "priq", "cmdq-sync";
> + #iommu-cells = <1>;
> + dma-coherent;
> + status = "disabled";
> + };
> + };
> +
> + coss-bus {
> + compatible = "simple-bus";
> + ranges = <0x4a000000 0x0 0x4a000000 0xff0000>,
> + <0x4e000000 0x0 0x4e000000 0x1000000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + uart0: serial@4a030000 {
> + compatible = "arm,pl011", "arm,primecell";
> + reg = <0x4a030000 0x1000>;
> + interrupt-parent = <&irqsteer_coss>;
> + interrupts = <264>;
> + clocks = <&clks 0x9a>, <&clks 0x9a>;
> + clock-names = "uartclk", "apb_pclk";
> + status = "disabled";
> + };
> +
> + uart5: serial@4a060000 {
> + compatible = "arm,pl011", "arm,primecell";
> + reg = <0x4a060000 0x1000>;
> + interrupt-parent = <&irqsteer_coss>;
> + interrupts = <269>;
> + clocks = <&clks 0x9a>, <&clks 0x9a>;
> + clock-names = "uartclk", "apb_pclk";
> + status = "disabled";
> + };
> +
> + uart6: serial@4aa30000 {
> + compatible = "arm,pl011", "arm,primecell";
> + reg = <0x4aa30000 0x1000>;
> + interrupt-parent = <&irqsteer_coss>;
> + interrupts = <270>;
> + clocks = <&clks 0x9a>, <&clks 0x9a>;
> + clock-names = "uartclk", "apb_pclk";
> + status = "disabled";
> + };
> +
> + uart7: serial@4aa40000 {
> + compatible = "arm,pl011", "arm,primecell";
> + reg = <0x4aa40000 0x1000>;
> + interrupt-parent = <&irqsteer_coss>;
> + interrupts = <271>;
> + clocks = <&clks 0x9a>, <&clks 0x9a>;
> + clock-names = "uartclk", "apb_pclk";
> + status = "disabled";
> + };
> +
> + irqsteer_coss: interrupt-controller@4ed00000 {
> + compatible = "nxp,s32n79-irqsteer";
> + reg = <0x4ed00000 0x10000>;
> + #interrupt-cells = <1>;
> + interrupt-controller;
> + interrupt-parent = <&gic>;
> + interrupts = <GIC_SPI 527 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 528 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 529 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 530 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 531 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 532 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 533 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 534 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clks 0x9a>;
> + clock-names = "ipg";
> + fsl,channel = <0>;
> + fsl,num-irqs = <512>;
> + status = "disabled";
> + };
> + };
> +
> + cpus {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + cpu-map {
> + cluster0 {
> + core0 {
> + cpu = <&cpu0>;
> + };
> +
> + core1 {
> + cpu = <&cpu1>;
> + };
> + };
> +
> + cluster1 {
> + core0 {
> + cpu = <&cpu2>;
> + };
> +
> + core1 {
> + cpu = <&cpu3>;
> + };
> + };
> +
> + cluster2 {
> + core0 {
> + cpu = <&cpu4>;
> + };
> +
> + core1 {
> + cpu = <&cpu5>;
> + };
> + };
> +
> + cluster3 {
> + core0 {
> + cpu = <&cpu6>;
> + };
> +
> + core1 {
> + cpu = <&cpu7>;
> + };
> + };
> + };
> +
> + l2_0: l2-cache0 {
> + compatible = "cache";
> + cache-level = <2>;
> + cache-line-size = <64>;
> + cache-sets = <512>;
> + cache-size = <524288>;
> + cache-unified;
> + next-level-cache = <&l3_0>;
> + };
> +
> + l2_1: l2-cache1 {
> + compatible = "cache";
> + cache-level = <2>;
> + cache-line-size = <64>;
> + cache-sets = <512>;
> + cache-size = <524288>;
> + cache-unified;
> + next-level-cache = <&l3_1>;
> + };
> +
> + l2_2: l2-cache2 {
> + compatible = "cache";
> + cache-level = <2>;
> + cache-line-size = <64>;
> + cache-sets = <512>;
> + cache-size = <524288>;
> + cache-unified;
> + next-level-cache = <&l3_2>;
> + };
> +
> + l2_3: l2-cache3 {
> + compatible = "cache";
> + cache-level = <2>;
> + cache-line-size = <64>;
> + cache-sets = <512>;
> + cache-size = <524288>;
> + cache-unified;
> + next-level-cache = <&l3_3>;
> + };
> +
> + l3_0: l3-cache0 {
> + compatible = "cache";
> + cache-level = <3>;
> + cache-line-size = <64>;
> + cache-sets = <1024>;
> + cache-size = <1048576>;
> + cache-unified;
> + };
> +
> + l3_1: l3-cache1 {
> + compatible = "cache";
> + cache-level = <3>;
> + cache-line-size = <64>;
> + cache-sets = <1024>;
> + cache-size = <1048576>;
> + cache-unified;
> + };
> +
> + l3_2: l3-cache2 {
> + compatible = "cache";
> + cache-level = <3>;
> + cache-line-size = <64>;
> + cache-sets = <1024>;
> + cache-size = <1048576>;
> + cache-unified;
> + };
> +
> + l3_3: l3-cache3 {
> + compatible = "cache";
> + cache-level = <3>;
> + cache-line-size = <64>;
> + cache-sets = <1024>;
> + cache-size = <1048576>;
> + cache-unified;
> + };
> +
> + cpu0: cpu@0 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x0>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_0>;
> + };
> +
> + cpu1: cpu@100 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x100>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_0>;
> + };
> +
> + cpu2: cpu@10000 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x10000>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_1>;
> + };
> +
> + cpu3: cpu@10100 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x10100>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_1>;
> + };
> +
> + cpu4: cpu@20000 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x20000>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_2>;
> + };
> +
> + cpu5: cpu@20100 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x20100>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_2>;
> + };
> +
> + cpu6: cpu@30000 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x30000>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_3>;
> + };
> +
> + cpu7: cpu@30100 {
> + compatible = "arm,cortex-a78ae";
> + reg = <0x30100>;
> + device_type = "cpu";
> + enable-method = "psci";
> + next-level-cache = <&l2_3>;
> + };
> + };
> +
> + firmware {
> + psci {
> + compatible = "arm,psci-1.0";
> + method = "smc";
> + };
> +
> + scmi: scmi {
> + compatible = "arm,scmi-smc";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + shmem = <&scmi_shbuf>;
> + arm,smc-id = <0xc20000fe>;
> + status = "okay";
> +
> + clks: protocol@14 {
> + reg = <0x14>;
> + #clock-cells = <1>;
> + };
> + };
> + };
> +
> + fss-bus {
> + compatible = "simple-bus";
> + ranges = <0x5b490000 0x0 0x5b490000 0x1000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + usdhc0: mmc@5b490000 {
> + compatible = "nxp,s32n79-usdhc";
> + reg = <0x5b490000 0x1000>;
> + interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clks 0x58>, <&clks 0x50>, <&clks 0x5f>;
> + clock-names = "ipg", "ahb", "per";
> + bus-width = <8>;
> + status = "disabled";
> + };
> + };
> +
> + pmu: pmu {
> + compatible = "arm,armv8-pmuv3";
> + interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
> + };
> +
> + timer: timer {
> + compatible = "arm,armv8-timer";
> + interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
> + <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
> + <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
> + <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
> + };
> +};
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: (subset) [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
` (4 preceding siblings ...)
2026-03-11 8:11 ` [PATCH v6 5/5] arm64: dts: freescale: Add NXP S32N79-RDB board support Ciprian Costea
@ 2026-03-13 16:33 ` Frank Li
2026-03-13 16:37 ` Frank Li
6 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2026-03-13 16:33 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach,
Ciprian Costea
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet
On Wed, 11 Mar 2026 09:11:49 +0100, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> This series introduces initial device tree support for the NXP S32N79
> automotive SoC and its Reference Design Board (RDB).
>
> The S32N79 is an automotive-grade system-on-chip featuring eight Arm
> Cortex-A78AE cores organized in four dual-core clusters. It is designed
> for high-performance networking and gateway applications vehicle
> architectures [1]
>
> [...]
Applied, thanks!
[1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support
commit: 0c8fb9a7a1004b13adb921c637f06a7b9c2d0806
[2/5] dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board
commit: 14233f267406e6b991923a11e8eda2857a8ec948
Best regards,
--
Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: (subset) [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
` (5 preceding siblings ...)
2026-03-13 16:33 ` (subset) [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Frank Li
@ 2026-03-13 16:37 ` Frank Li
6 siblings, 0 replies; 14+ messages in thread
From: Frank Li @ 2026-03-13 16:37 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Thomas Gleixner,
Sascha Hauer, Fabio Estevam, Shawn Guo, Lucas Stach,
Ciprian Costea
Cc: Pengutronix Kernel Team, devicetree, linux-kernel, imx,
linux-arm-kernel, NXP S32 Linux Team, Christophe Lizzi,
Alberto Ruiz, Enric Balletbo, Eric Chanudet
On Wed, 11 Mar 2026 09:11:49 +0100, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> This series introduces initial device tree support for the NXP S32N79
> automotive SoC and its Reference Design Board (RDB).
>
> The S32N79 is an automotive-grade system-on-chip featuring eight Arm
> Cortex-A78AE cores organized in four dual-core clusters. It is designed
> for high-performance networking and gateway applications vehicle
> architectures [1]
>
> [...]
Applied, thanks!
[4/5] arm64: dts: freescale: Add NXP S32N79 SoC support
commit: e93e5057d86be6d3212ec6441b97e3af28726dc2
[5/5] arm64: dts: freescale: Add NXP S32N79-RDB board support
commit: 8c2bd27ac9cc41a68ee526e79850587064b3a074
Best regards,
--
Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2026-03-13 16:37 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 8:11 [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 1/5] dt-bindings: interrupt-controller: fsl,irqsteer: add S32N79 support Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 2/5] dt-bindings: arm: fsl: Add NXP S32N79 SoC and RDB board Ciprian Costea
2026-03-11 8:11 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add NXP S32N79 support Ciprian Costea
2026-03-11 8:58 ` [tip: irq/drivers] irqchip/imx-irqsteer: Add " tip-bot2 for Ciprian Marian Costea
2026-03-11 9:09 ` [PATCH v6 3/5] irqchip/imx-irqsteer: add " Thomas Gleixner
2026-03-11 15:50 ` Frank Li
2026-03-11 22:21 ` Rob Herring
2026-03-12 2:08 ` Frank Li
2026-03-11 8:11 ` [PATCH v6 4/5] arm64: dts: freescale: Add NXP S32N79 SoC support Ciprian Costea
2026-03-12 12:46 ` Ciprian Marian Costea
2026-03-11 8:11 ` [PATCH v6 5/5] arm64: dts: freescale: Add NXP S32N79-RDB board support Ciprian Costea
2026-03-13 16:33 ` (subset) [PATCH v6 0/5] arm64: Add initial support for NXP S32N79 SoC Frank Li
2026-03-13 16:37 ` Frank Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox