* [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection
@ 2026-03-24 12:01 Jun Guo
2026-03-24 12:01 ` [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies Jun Guo
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Jun Guo @ 2026-03-24 12:01 UTC (permalink / raw)
To: peter.chen, fugang.duan, robh, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li
Cc: dmaengine, devicetree, linux-kernel, cix-kernel-upstream,
linux-arm-kernel, Jun Guo
DMA-350 can be integrated with either one interrupt per channel or a
single combined interrupt for all channels. This series adds support
for the combined IRQ topology while keeping compatibility with the
per-channel topology.
Patch 1 updates the DT binding to describe both interrupt topologies
(1 combined IRQ or 8 per-channel IRQs).
Patch 2 updates the driver to detect IRQ topology at runtime via
platform_irq_count(), handle both modes in one code path, and enable
DMANSECCTRL.INTREN_ANYCHINTR only in combined IRQ mode.
Patch 3 adds the Sky1 DMA DT node using the combined IRQ topology.
Tested on CIX SKY1 with dmatest:
% echo 2000 > /sys/module/dmatest/parameters/timeout
% echo 1 > /sys/module/dmatest/parameters/iterations
% echo "" > /sys/module/dmatest/parameters/channel
% echo 1 > /sys/module/dmatest/parameters/run
Changes in v5:
- Fix the formatting issue in the AI tag.
- Remove the unnecessary "cix,sky1-dma-350".
Changes in v4:
- Reword binding text to align with kernel style.
- Revise the AI attribution to the standard format.
- Remove redundant links from the commit log.
Changes in v3:
- Rework binding compatible description to match generic-first model.
- Keep interrupts schema support for both 1-IRQ and 8-IRQ topologies.
- Drop SoC match-data dependency for IRQ mode selection.
- Detect IRQ topology via platform_irq_count() in probe path.
- Refactor IRQ handling into a shared channel handler.
- Enable DMANSECCTRL.INTREN_ANYCHINTR only in combined IRQ mode.
Changes in v2:
- Update to kernel standards, enhance patch description, and refactor
driver to use match data for hardware differentiation instead of
compatible strings.
Jun Guo (3):
dt-bindings: dma: arm-dma350: document combined and per-channel IRQ
topologies
dma: arm-dma350: support combined IRQ mode with runtime IRQ topology
detection
arm64: dts: cix: add DT nodes for DMA
.../devicetree/bindings/dma/arm,dma-350.yaml | 25 ++-
arch/arm64/boot/dts/cix/sky1.dtsi | 7 +
drivers/dma/arm-dma350.c | 164 +++++++++++++++---
3 files changed, 161 insertions(+), 35 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies
2026-03-24 12:01 [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
@ 2026-03-24 12:01 ` Jun Guo
2026-04-07 17:20 ` Rob Herring
2026-03-24 12:01 ` [PATCH v5 2/3] dma: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Jun Guo @ 2026-03-24 12:01 UTC (permalink / raw)
To: peter.chen, fugang.duan, robh, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li
Cc: dmaengine, devicetree, linux-kernel, cix-kernel-upstream,
linux-arm-kernel, Jun Guo
Document the interrupt topologies supported by DMA-350 integration:
- one combined interrupt for all channels, or
- one interrupt per channel (up to 8 channels).
Assisted-by: Cursor:GPT-5.3-Codex
Signed-off-by: Jun Guo <jun.guo@cixtech.com>
---
.../devicetree/bindings/dma/arm,dma-350.yaml | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
index 429f682f15d8..bec9dc32541b 100644
--- a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
+++ b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
@@ -22,15 +22,22 @@ properties:
interrupts:
minItems: 1
- items:
- - description: Channel 0 interrupt
- - description: Channel 1 interrupt
- - description: Channel 2 interrupt
- - description: Channel 3 interrupt
- - description: Channel 4 interrupt
- - description: Channel 5 interrupt
- - description: Channel 6 interrupt
- - description: Channel 7 interrupt
+ maxItems: 8
+ description:
+ Either one interrupt per channel (8 interrupts), or one
+ combined interrupt for all channels.
+ oneOf:
+ - items:
+ - description: Channel 0 interrupt
+ - description: Channel 1 interrupt
+ - description: Channel 2 interrupt
+ - description: Channel 3 interrupt
+ - description: Channel 4 interrupt
+ - description: Channel 5 interrupt
+ - description: Channel 6 interrupt
+ - description: Channel 7 interrupt
+ - items:
+ - description: Combined interrupt shared by all channels
"#dma-cells":
const: 1
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v5 2/3] dma: arm-dma350: support combined IRQ mode with runtime IRQ topology detection
2026-03-24 12:01 [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
2026-03-24 12:01 ` [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies Jun Guo
@ 2026-03-24 12:01 ` Jun Guo
2026-03-24 12:01 ` [PATCH v5 3/3] arm64: dts: cix: add DT nodes for DMA Jun Guo
2026-03-24 13:36 ` [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Robin Murphy
3 siblings, 0 replies; 7+ messages in thread
From: Jun Guo @ 2026-03-24 12:01 UTC (permalink / raw)
To: peter.chen, fugang.duan, robh, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li
Cc: dmaengine, devicetree, linux-kernel, cix-kernel-upstream,
linux-arm-kernel, Jun Guo
DMA-350 can be integrated with either per-channel IRQ lines or a single
combined IRQ line. Add support for both layouts in a unified way.
Detect IRQ topology at probe time via platform_irq_count(), then:
- request one global IRQ and enable DMANSECCTRL.INTREN_ANYCHINTR for
combined mode, or
- request per-channel IRQs for channel mode.
Refactor IRQ completion/error handling into a shared channel handler
used by both global and per-channel IRQ paths, and guard against IRQs
arriving without an active descriptor.
Assisted-by: Cursor:GPT-5.3-Codex
Signed-off-by: Jun Guo <jun.guo@cixtech.com>
---
drivers/dma/arm-dma350.c | 164 ++++++++++++++++++++++++++++++++-------
1 file changed, 138 insertions(+), 26 deletions(-)
diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
index 84220fa83029..9e42c34b74bb 100644
--- a/drivers/dma/arm-dma350.c
+++ b/drivers/dma/arm-dma350.c
@@ -14,6 +14,7 @@
#include "virt-dma.h"
#define DMAINFO 0x0f00
+#define DRIVER_NAME "arm-dma350"
#define DMA_BUILDCFG0 0xb0
#define DMA_CFG_DATA_WIDTH GENMASK(18, 16)
@@ -142,6 +143,9 @@
#define LINK_LINKADDR BIT(30)
#define LINK_LINKADDRHI BIT(31)
+/* DMA NONSECURE CONTROL REGISTER */
+#define DMANSECCTRL 0x20c
+#define INTREN_ANYCHINTR_EN BIT(0)
enum ch_ctrl_donetype {
CH_CTRL_DONETYPE_NONE = 0,
@@ -192,6 +196,7 @@ struct d350_chan {
struct d350 {
struct dma_device dma;
+ void __iomem *base;
int nchan;
int nreq;
struct d350_chan channels[] __counted_by(nchan);
@@ -461,18 +466,40 @@ static void d350_issue_pending(struct dma_chan *chan)
spin_unlock_irqrestore(&dch->vc.lock, flags);
}
-static irqreturn_t d350_irq(int irq, void *data)
+static void d350_handle_chan_irq(struct d350_chan *dch, struct device *dev,
+ int chan_id, u32 ch_status)
{
- struct d350_chan *dch = data;
- struct device *dev = dch->vc.chan.device->dev;
- struct virt_dma_desc *vd = &dch->desc->vd;
- u32 ch_status;
+ struct virt_dma_desc *vd;
+ bool intr_done = ch_status & CH_STAT_INTR_DONE;
+ bool intr_err = ch_status & CH_STAT_INTR_ERR;
- ch_status = readl(dch->base + CH_STATUS);
- if (!ch_status)
- return IRQ_NONE;
+ if (!intr_done && !intr_err) {
+ if (chan_id >= 0)
+ dev_warn(dev, "Channel %d unexpected IRQ: 0x%08x\n",
+ chan_id, ch_status);
+ else
+ dev_warn(dev, "Unexpected IRQ source? 0x%08x\n", ch_status);
+ writel_relaxed(ch_status, dch->base + CH_STATUS);
+ return;
+ }
+
+ writel_relaxed(ch_status, dch->base + CH_STATUS);
+
+ spin_lock(&dch->vc.lock);
+ if (!dch->desc) {
+ if (chan_id >= 0)
+ dev_warn(dev,
+ "Channel %d IRQ without active descriptor: 0x%08x\n",
+ chan_id, ch_status);
+ else
+ dev_warn(dev, "IRQ without active descriptor: 0x%08x\n",
+ ch_status);
+ spin_unlock(&dch->vc.lock);
+ return;
+ }
- if (ch_status & CH_STAT_INTR_ERR) {
+ vd = &dch->desc->vd;
+ if (intr_err) {
u32 errinfo = readl_relaxed(dch->base + CH_ERRINFO);
if (errinfo & (CH_ERRINFO_AXIRDPOISERR | CH_ERRINFO_AXIRDRESPERR))
@@ -483,14 +510,10 @@ static irqreturn_t d350_irq(int irq, void *data)
vd->tx_result.result = DMA_TRANS_ABORTED;
vd->tx_result.residue = d350_get_residue(dch);
- } else if (!(ch_status & CH_STAT_INTR_DONE)) {
- dev_warn(dev, "Unexpected IRQ source? 0x%08x\n", ch_status);
}
- writel_relaxed(ch_status, dch->base + CH_STATUS);
- spin_lock(&dch->vc.lock);
vchan_cookie_complete(vd);
- if (ch_status & CH_STAT_INTR_DONE) {
+ if (intr_done) {
dch->status = DMA_COMPLETE;
dch->residue = 0;
d350_start_next(dch);
@@ -499,6 +522,44 @@ static irqreturn_t d350_irq(int irq, void *data)
dch->residue = vd->tx_result.residue;
}
spin_unlock(&dch->vc.lock);
+}
+
+static irqreturn_t d350_global_irq(int irq, void *data)
+{
+ struct d350 *dmac = (struct d350 *)data;
+ irqreturn_t ret = IRQ_NONE;
+ int i;
+
+ (void)irq;
+
+ for (i = 0; i < dmac->nchan; i++) {
+ struct d350_chan *dch = &dmac->channels[i];
+ u32 ch_status;
+
+ ch_status = readl(dch->base + CH_STATUS);
+ if (!ch_status)
+ continue;
+
+ ret = IRQ_HANDLED;
+ d350_handle_chan_irq(dch, dmac->dma.dev, i, ch_status);
+ }
+
+ return ret;
+}
+
+static irqreturn_t d350_channel_irq(int irq, void *data)
+{
+ struct d350_chan *dch = data;
+ struct device *dev = dch->vc.chan.device->dev;
+ u32 ch_status;
+
+ (void)irq;
+
+ ch_status = readl(dch->base + CH_STATUS);
+ if (!ch_status)
+ return IRQ_NONE;
+
+ d350_handle_chan_irq(dch, dev, -1, ch_status);
return IRQ_HANDLED;
}
@@ -506,10 +567,18 @@ static irqreturn_t d350_irq(int irq, void *data)
static int d350_alloc_chan_resources(struct dma_chan *chan)
{
struct d350_chan *dch = to_d350_chan(chan);
- int ret = request_irq(dch->irq, d350_irq, IRQF_SHARED,
- dev_name(&dch->vc.chan.dev->device), dch);
- if (!ret)
- writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + CH_INTREN);
+ int ret = 0;
+
+ if (dch->irq >= 0) {
+ ret = request_irq(dch->irq, d350_channel_irq, IRQF_SHARED,
+ dev_name(&dch->vc.chan.dev->device), dch);
+ if (ret) {
+ dev_err(chan->device->dev, "Failed to request IRQ %d\n", dch->irq);
+ return ret;
+ }
+ }
+
+ writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + CH_INTREN);
return ret;
}
@@ -519,18 +588,21 @@ static void d350_free_chan_resources(struct dma_chan *chan)
struct d350_chan *dch = to_d350_chan(chan);
writel_relaxed(0, dch->base + CH_INTREN);
- free_irq(dch->irq, dch);
+ if (dch->irq >= 0) {
+ free_irq(dch->irq, dch);
+ dch->irq = -EINVAL;
+ }
vchan_free_chan_resources(&dch->vc);
}
static int d350_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct d350 *dmac;
+ struct d350 *dmac = NULL;
void __iomem *base;
u32 reg;
- int ret, nchan, dw, aw, r, p;
- bool coherent, memset;
+ int ret, nchan, dw, aw, r, p, irq_count;
+ bool coherent, memset, combined_irq;
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
@@ -556,6 +628,7 @@ static int d350_probe(struct platform_device *pdev)
return -ENOMEM;
dmac->nchan = nchan;
+ dmac->base = base;
reg = readl_relaxed(base + DMAINFO + DMA_BUILDCFG1);
dmac->nreq = FIELD_GET(DMA_CFG_NUM_TRIGGER_IN, reg);
@@ -582,12 +655,46 @@ static int d350_probe(struct platform_device *pdev)
dmac->dma.device_issue_pending = d350_issue_pending;
INIT_LIST_HEAD(&dmac->dma.channels);
+ irq_count = platform_irq_count(pdev);
+ if (irq_count < 0)
+ return dev_err_probe(dev, irq_count,
+ "Failed to count interrupts\n");
+
+ if (irq_count == 1) {
+ combined_irq = true;
+ } else if (irq_count >= nchan) {
+ combined_irq = false;
+ } else {
+ return dev_err_probe(dev, -EINVAL,
+ "Invalid IRQ count %d for %d channels\n",
+ irq_count, nchan);
+ }
+
+ if (combined_irq) {
+ int host_irq = platform_get_irq(pdev, 0);
+
+ if (host_irq < 0)
+ return dev_err_probe(dev, host_irq,
+ "Failed to get IRQ\n");
+
+ ret = devm_request_irq(&pdev->dev, host_irq, d350_global_irq,
+ IRQF_SHARED, DRIVER_NAME, dmac);
+ if (ret)
+ return dev_err_probe(
+ dev, ret,
+ "Failed to request the combined IRQ %d\n",
+ host_irq);
+ /* Combined Non-Secure Channel Interrupt Enable */
+ writel_relaxed(INTREN_ANYCHINTR_EN, dmac->base + DMANSECCTRL);
+ }
+
/* Would be nice to have per-channel caps for this... */
memset = true;
for (int i = 0; i < nchan; i++) {
struct d350_chan *dch = &dmac->channels[i];
dch->base = base + DMACH(i);
+ dch->irq = -EINVAL;
writel_relaxed(CH_CMD_CLEAR, dch->base + CH_CMD);
reg = readl_relaxed(dch->base + CH_BUILDCFG1);
@@ -595,10 +702,15 @@ static int d350_probe(struct platform_device *pdev)
dev_warn(dev, "No command link support on channel %d\n", i);
continue;
}
- dch->irq = platform_get_irq(pdev, i);
- if (dch->irq < 0)
- return dev_err_probe(dev, dch->irq,
- "Failed to get IRQ for channel %d\n", i);
+
+ if (!combined_irq) {
+ dch->irq = platform_get_irq(pdev, i);
+ if (dch->irq < 0)
+ return dev_err_probe(
+ dev, dch->irq,
+ "Failed to get IRQ for channel %d\n",
+ i);
+ }
dch->has_wrap = FIELD_GET(CH_CFG_HAS_WRAP, reg);
dch->has_trig = FIELD_GET(CH_CFG_HAS_TRIGIN, reg) &
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v5 3/3] arm64: dts: cix: add DT nodes for DMA
2026-03-24 12:01 [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
2026-03-24 12:01 ` [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies Jun Guo
2026-03-24 12:01 ` [PATCH v5 2/3] dma: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
@ 2026-03-24 12:01 ` Jun Guo
2026-03-24 13:36 ` [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Robin Murphy
3 siblings, 0 replies; 7+ messages in thread
From: Jun Guo @ 2026-03-24 12:01 UTC (permalink / raw)
To: peter.chen, fugang.duan, robh, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li
Cc: dmaengine, devicetree, linux-kernel, cix-kernel-upstream,
linux-arm-kernel, Jun Guo
Add the device tree node for the dma controller of the CIX SKY1 SoC.
Signed-off-by: Jun Guo <jun.guo@cixtech.com>
---
arch/arm64/boot/dts/cix/sky1.dtsi | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm64/boot/dts/cix/sky1.dtsi b/arch/arm64/boot/dts/cix/sky1.dtsi
index 210739beac6d..124a29147c6c 100644
--- a/arch/arm64/boot/dts/cix/sky1.dtsi
+++ b/arch/arm64/boot/dts/cix/sky1.dtsi
@@ -480,6 +480,13 @@ iomuxc: pinctrl@4170000 {
reg = <0x0 0x04170000 0x0 0x1000>;
};
+ fch_dmac: dma-controller@4190000 {
+ compatible = "arm,dma-350";
+ reg = <0x0 0x4190000 0x0 0x10000>;
+ interrupts = <GIC_SPI 303 IRQ_TYPE_LEVEL_HIGH 0>;
+ #dma-cells = <1>;
+ };
+
mbox_ap2se: mailbox@5060000 {
compatible = "cix,sky1-mbox";
reg = <0x0 0x05060000 0x0 0x10000>;
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection
2026-03-24 12:01 [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
` (2 preceding siblings ...)
2026-03-24 12:01 ` [PATCH v5 3/3] arm64: dts: cix: add DT nodes for DMA Jun Guo
@ 2026-03-24 13:36 ` Robin Murphy
3 siblings, 0 replies; 7+ messages in thread
From: Robin Murphy @ 2026-03-24 13:36 UTC (permalink / raw)
To: Jun Guo, peter.chen, fugang.duan, robh, krzk+dt, conor+dt, vkoul,
ychuang3, schung, Frank.Li
Cc: dmaengine, devicetree, linux-kernel, cix-kernel-upstream,
linux-arm-kernel
On 2026-03-24 12:01 pm, Jun Guo wrote:
> DMA-350 can be integrated with either one interrupt per channel or a
> single combined interrupt for all channels. This series adds support
> for the combined IRQ topology while keeping compatibility with the
> per-channel topology.
>
> Patch 1 updates the DT binding to describe both interrupt topologies
> (1 combined IRQ or 8 per-channel IRQs).
>
> Patch 2 updates the driver to detect IRQ topology at runtime via
> platform_irq_count(), handle both modes in one code path, and enable
> DMANSECCTRL.INTREN_ANYCHINTR only in combined IRQ mode.
>
> Patch 3 adds the Sky1 DMA DT node using the combined IRQ topology.
>
> Tested on CIX SKY1 with dmatest:
> % echo 2000 > /sys/module/dmatest/parameters/timeout
> % echo 1 > /sys/module/dmatest/parameters/iterations
> % echo "" > /sys/module/dmatest/parameters/channel
> % echo 1 > /sys/module/dmatest/parameters/run
>
> Changes in v5:
> - Fix the formatting issue in the AI tag.
> - Remove the unnecessary "cix,sky1-dma-350".
Please don't churn reposts of a series so quickly. I've only just had
time to finish the review of v3 that you posted only 3 working days ago,
that I already moved over as a reply to yesterday's v4 for visibility...
Thanks,
Robin.
> Changes in v4:
> - Reword binding text to align with kernel style.
> - Revise the AI attribution to the standard format.
> - Remove redundant links from the commit log.
>
> Changes in v3:
> - Rework binding compatible description to match generic-first model.
> - Keep interrupts schema support for both 1-IRQ and 8-IRQ topologies.
> - Drop SoC match-data dependency for IRQ mode selection.
> - Detect IRQ topology via platform_irq_count() in probe path.
> - Refactor IRQ handling into a shared channel handler.
> - Enable DMANSECCTRL.INTREN_ANYCHINTR only in combined IRQ mode.
>
> Changes in v2:
> - Update to kernel standards, enhance patch description, and refactor
> driver to use match data for hardware differentiation instead of
> compatible strings.
>
> Jun Guo (3):
> dt-bindings: dma: arm-dma350: document combined and per-channel IRQ
> topologies
> dma: arm-dma350: support combined IRQ mode with runtime IRQ topology
> detection
> arm64: dts: cix: add DT nodes for DMA
>
> .../devicetree/bindings/dma/arm,dma-350.yaml | 25 ++-
> arch/arm64/boot/dts/cix/sky1.dtsi | 7 +
> drivers/dma/arm-dma350.c | 164 +++++++++++++++---
> 3 files changed, 161 insertions(+), 35 deletions(-)
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies
2026-03-24 12:01 ` [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies Jun Guo
@ 2026-04-07 17:20 ` Rob Herring
2026-04-08 6:39 ` Jun Guo
0 siblings, 1 reply; 7+ messages in thread
From: Rob Herring @ 2026-04-07 17:20 UTC (permalink / raw)
To: Jun Guo
Cc: peter.chen, fugang.duan, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li, dmaengine, devicetree,
linux-kernel, cix-kernel-upstream, linux-arm-kernel
On Tue, Mar 24, 2026 at 08:01:11PM +0800, Jun Guo wrote:
> Document the interrupt topologies supported by DMA-350 integration:
> - one combined interrupt for all channels, or
> - one interrupt per channel (up to 8 channels).
>
> Assisted-by: Cursor:GPT-5.3-Codex
> Signed-off-by: Jun Guo <jun.guo@cixtech.com>
> ---
> .../devicetree/bindings/dma/arm,dma-350.yaml | 25 ++++++++++++-------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
> index 429f682f15d8..bec9dc32541b 100644
> --- a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
> +++ b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
> @@ -22,15 +22,22 @@ properties:
>
> interrupts:
> minItems: 1
> - items:
> - - description: Channel 0 interrupt
> - - description: Channel 1 interrupt
> - - description: Channel 2 interrupt
> - - description: Channel 3 interrupt
> - - description: Channel 4 interrupt
> - - description: Channel 5 interrupt
> - - description: Channel 6 interrupt
> - - description: Channel 7 interrupt
> + maxItems: 8
Don't need maxItems
> + description:
> + Either one interrupt per channel (8 interrupts), or one
> + combined interrupt for all channels.
> + oneOf:
> + - items:
> + - description: Channel 0 interrupt
> + - description: Channel 1 interrupt
> + - description: Channel 2 interrupt
> + - description: Channel 3 interrupt
> + - description: Channel 4 interrupt
> + - description: Channel 5 interrupt
> + - description: Channel 6 interrupt
> + - description: Channel 7 interrupt
> + - items:
> + - description: Combined interrupt shared by all channels
>
> "#dma-cells":
> const: 1
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies
2026-04-07 17:20 ` Rob Herring
@ 2026-04-08 6:39 ` Jun Guo
0 siblings, 0 replies; 7+ messages in thread
From: Jun Guo @ 2026-04-08 6:39 UTC (permalink / raw)
To: Rob Herring
Cc: peter.chen, fugang.duan, krzk+dt, conor+dt, vkoul, ychuang3,
schung, robin.murphy, Frank.Li, dmaengine, devicetree,
linux-kernel, cix-kernel-upstream, linux-arm-kernel
Hi Rob,
Thanks for your review. I have already resubmitted the V6 patch. Please
take a look at the latest v6 patch when you have time, as it includes
considerable changes compared to the v5 version.
On 4/8/2026 1:20 AM, Rob Herring wrote:
> EXTERNAL EMAIL
>
> On Tue, Mar 24, 2026 at 08:01:11PM +0800, Jun Guo wrote:
>> Document the interrupt topologies supported by DMA-350 integration:
>> - one combined interrupt for all channels, or
>> - one interrupt per channel (up to 8 channels).
>>
>> Assisted-by: Cursor:GPT-5.3-Codex
>> Signed-off-by: Jun Guo <jun.guo@cixtech.com>
>> ---
>> .../devicetree/bindings/dma/arm,dma-350.yaml | 25 ++++++++++++-------
>> 1 file changed, 16 insertions(+), 9 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
>> index 429f682f15d8..bec9dc32541b 100644
>> --- a/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
>> +++ b/Documentation/devicetree/bindings/dma/arm,dma-350.yaml
>> @@ -22,15 +22,22 @@ properties:
>>
>> interrupts:
>> minItems: 1
>> - items:
>> - - description: Channel 0 interrupt
>> - - description: Channel 1 interrupt
>> - - description: Channel 2 interrupt
>> - - description: Channel 3 interrupt
>> - - description: Channel 4 interrupt
>> - - description: Channel 5 interrupt
>> - - description: Channel 6 interrupt
>> - - description: Channel 7 interrupt
>> + maxItems: 8
>
> Don't need maxItems
>
>> + description:
>> + Either one interrupt per channel (8 interrupts), or one
>> + combined interrupt for all channels.
>> + oneOf:
>> + - items:
>> + - description: Channel 0 interrupt
>> + - description: Channel 1 interrupt
>> + - description: Channel 2 interrupt
>> + - description: Channel 3 interrupt
>> + - description: Channel 4 interrupt
>> + - description: Channel 5 interrupt
>> + - description: Channel 6 interrupt
>> + - description: Channel 7 interrupt
>> + - items:
>> + - description: Combined interrupt shared by all channels
>>
>> "#dma-cells":
>> const: 1
>> --
>> 2.34.1
>>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-04-08 6:39 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-24 12:01 [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
2026-03-24 12:01 ` [PATCH v5 1/3] dt-bindings: dma: arm-dma350: document combined and per-channel IRQ topologies Jun Guo
2026-04-07 17:20 ` Rob Herring
2026-04-08 6:39 ` Jun Guo
2026-03-24 12:01 ` [PATCH v5 2/3] dma: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Jun Guo
2026-03-24 12:01 ` [PATCH v5 3/3] arm64: dts: cix: add DT nodes for DMA Jun Guo
2026-03-24 13:36 ` [PATCH v5 0/3] dmaengine: arm-dma350: support combined IRQ mode with runtime IRQ topology detection Robin Murphy
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.