* [PATCH 0/3] dmaengine: fsl-edma: add error irq to help debug problem
@ 2025-02-28 17:42 Frank Li
2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Frank Li @ 2025-02-28 17:42 UTC (permalink / raw)
To: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam
Cc: imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel,
Frank Li, Joy Zou
Change binding to support optional error irq.
Add error irq handle for fsl-edma drivers.
imx93 dts add dma error irq interupt.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Joy Zou (3):
dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names
dmaegnine: fsl-edma: add edma error interrupt handler
arm64: dtsi: imx93: add edma error interrupt support
.../devicetree/bindings/dma/fsl,edma.yaml | 4 +-
arch/arm64/boot/dts/freescale/imx93.dtsi | 6 +-
drivers/dma/fsl-edma-common.c | 30 +++--
drivers/dma/fsl-edma-common.h | 18 +++
drivers/dma/fsl-edma-main.c | 121 +++++++++++++++++++--
5 files changed, 158 insertions(+), 21 deletions(-)
---
base-commit: 8433c776e1eb1371f5cd40b5fd3a61f9c7b7f3ad
change-id: 20250225-edma_err-5a7385e45800
Best regards,
---
Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names 2025-02-28 17:42 [PATCH 0/3] dmaengine: fsl-edma: add error irq to help debug problem Frank Li @ 2025-02-28 17:42 ` Frank Li 2025-02-28 18:13 ` Conor Dooley 2025-02-28 22:19 ` Rob Herring (Arm) 2025-02-28 17:42 ` [PATCH 2/3] dmaegnine: fsl-edma: add edma error interrupt handler Frank Li 2025-02-28 17:42 ` [PATCH 3/3] arm64: dtsi: imx93: add edma error interrupt support Frank Li 2 siblings, 2 replies; 7+ messages in thread From: Frank Li @ 2025-02-28 17:42 UTC (permalink / raw) To: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam Cc: imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel, Frank Li, Joy Zou From: Joy Zou <joy.zou@nxp.com> The edma controller support optional error interrupt, so update interrupts and interrupt-names's maxItems. Signed-off-by: Joy Zou <joy.zou@nxp.com> Signed-off-by: Frank Li <Frank.Li@nxp.com> --- Documentation/devicetree/bindings/dma/fsl,edma.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/dma/fsl,edma.yaml b/Documentation/devicetree/bindings/dma/fsl,edma.yaml index 4f925469533e7..900170b3606ef 100644 --- a/Documentation/devicetree/bindings/dma/fsl,edma.yaml +++ b/Documentation/devicetree/bindings/dma/fsl,edma.yaml @@ -40,11 +40,11 @@ properties: interrupts: minItems: 1 - maxItems: 64 + maxItems: 65 interrupt-names: minItems: 1 - maxItems: 64 + maxItems: 65 "#dma-cells": description: | -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names 2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li @ 2025-02-28 18:13 ` Conor Dooley 2025-02-28 20:03 ` Frank Li 2025-02-28 22:19 ` Rob Herring (Arm) 1 sibling, 1 reply; 7+ messages in thread From: Conor Dooley @ 2025-02-28 18:13 UTC (permalink / raw) To: Frank Li Cc: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel, Joy Zou [-- Attachment #1: Type: text/plain, Size: 1155 bytes --] On Fri, Feb 28, 2025 at 12:42:03PM -0500, Frank Li wrote: > From: Joy Zou <joy.zou@nxp.com> > > The edma controller support optional error interrupt, so update interrupts > and interrupt-names's maxItems. This seems like something were you would know based on the soc (or compatible) whether or not 64 or 65 is the correct maximum for that device? > > Signed-off-by: Joy Zou <joy.zou@nxp.com> > Signed-off-by: Frank Li <Frank.Li@nxp.com> > --- > Documentation/devicetree/bindings/dma/fsl,edma.yaml | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/Documentation/devicetree/bindings/dma/fsl,edma.yaml b/Documentation/devicetree/bindings/dma/fsl,edma.yaml > index 4f925469533e7..900170b3606ef 100644 > --- a/Documentation/devicetree/bindings/dma/fsl,edma.yaml > +++ b/Documentation/devicetree/bindings/dma/fsl,edma.yaml > @@ -40,11 +40,11 @@ properties: > > interrupts: > minItems: 1 > - maxItems: 64 > + maxItems: 65 > > interrupt-names: > minItems: 1 > - maxItems: 64 > + maxItems: 65 > > "#dma-cells": > description: | > > -- > 2.34.1 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names 2025-02-28 18:13 ` Conor Dooley @ 2025-02-28 20:03 ` Frank Li 0 siblings, 0 replies; 7+ messages in thread From: Frank Li @ 2025-02-28 20:03 UTC (permalink / raw) To: Conor Dooley Cc: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel, Joy Zou On Fri, Feb 28, 2025 at 06:13:50PM +0000, Conor Dooley wrote: > On Fri, Feb 28, 2025 at 12:42:03PM -0500, Frank Li wrote: > > From: Joy Zou <joy.zou@nxp.com> > > > > The edma controller support optional error interrupt, so update interrupts > > and interrupt-names's maxItems. > > This seems like something were you would know based on the soc (or > compatible) whether or not 64 or 65 is the correct maximum for that > device? Not exactly, 64 channel is maxium value, which IP supportted. There are difference instances in the same SOC. Some may only 31 dma channel, some may only 12, some have 64. Each channel have one irqs and one shared err irq. Ideally it should be property 'dma-channels' + 1. But not sure if schema can check such case. Frank > > > > > Signed-off-by: Joy Zou <joy.zou@nxp.com> > > Signed-off-by: Frank Li <Frank.Li@nxp.com> > > --- > > Documentation/devicetree/bindings/dma/fsl,edma.yaml | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/dma/fsl,edma.yaml b/Documentation/devicetree/bindings/dma/fsl,edma.yaml > > index 4f925469533e7..900170b3606ef 100644 > > --- a/Documentation/devicetree/bindings/dma/fsl,edma.yaml > > +++ b/Documentation/devicetree/bindings/dma/fsl,edma.yaml > > @@ -40,11 +40,11 @@ properties: > > > > interrupts: > > minItems: 1 > > - maxItems: 64 > > + maxItems: 65 > > > > interrupt-names: > > minItems: 1 > > - maxItems: 64 > > + maxItems: 65 > > > > "#dma-cells": > > description: | > > > > -- > > 2.34.1 > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names 2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li 2025-02-28 18:13 ` Conor Dooley @ 2025-02-28 22:19 ` Rob Herring (Arm) 1 sibling, 0 replies; 7+ messages in thread From: Rob Herring (Arm) @ 2025-02-28 22:19 UTC (permalink / raw) To: Frank Li Cc: dmaengine, devicetree, Pengutronix Kernel Team, Shawn Guo, linux-arm-kernel, Conor Dooley, Vinod Koul, Fabio Estevam, linux-kernel, Sascha Hauer, Krzysztof Kozlowski, Joy Zou, imx, Peng Fan On Fri, 28 Feb 2025 12:42:03 -0500, Frank Li wrote: > From: Joy Zou <joy.zou@nxp.com> > > The edma controller support optional error interrupt, so update interrupts > and interrupt-names's maxItems. > > Signed-off-by: Joy Zou <joy.zou@nxp.com> > Signed-off-by: Frank Li <Frank.Li@nxp.com> > --- > Documentation/devicetree/bindings/dma/fsl,edma.yaml | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > Reviewed-by: Rob Herring (Arm) <robh@kernel.org> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] dmaegnine: fsl-edma: add edma error interrupt handler 2025-02-28 17:42 [PATCH 0/3] dmaengine: fsl-edma: add error irq to help debug problem Frank Li 2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li @ 2025-02-28 17:42 ` Frank Li 2025-02-28 17:42 ` [PATCH 3/3] arm64: dtsi: imx93: add edma error interrupt support Frank Li 2 siblings, 0 replies; 7+ messages in thread From: Frank Li @ 2025-02-28 17:42 UTC (permalink / raw) To: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam Cc: imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel, Frank Li, Joy Zou From: Joy Zou <joy.zou@nxp.com> Add the edma error interrupt handler because it's useful to debug issue. i.MX8ULP edma has per channel error interrupt. i.MX91/93/95 and i.MX8QM/QXP/DXL edma share one error interrupt. Signed-off-by: Joy Zou <joy.zou@nxp.com> Signed-off-by: Frank Li <Frank.Li@nxp.com> --- drivers/dma/fsl-edma-common.c | 30 ++++++++--- drivers/dma/fsl-edma-common.h | 18 +++++++ drivers/dma/fsl-edma-main.c | 121 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 152 insertions(+), 17 deletions(-) diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index 443b2430466cb..4976d7dde0809 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -95,7 +95,7 @@ static void fsl_edma3_enable_request(struct fsl_edma_chan *fsl_chan) } val = edma_readl_chreg(fsl_chan, ch_csr); - val |= EDMA_V3_CH_CSR_ERQ; + val |= EDMA_V3_CH_CSR_ERQ | EDMA_V3_CH_CSR_EEI; edma_writel_chreg(fsl_chan, val, ch_csr); } @@ -821,7 +821,7 @@ void fsl_edma_issue_pending(struct dma_chan *chan) int fsl_edma_alloc_chan_resources(struct dma_chan *chan) { struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan); - int ret; + int ret = 0; if (fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_HAS_CHCLK) clk_prepare_enable(fsl_chan->clk); @@ -831,17 +831,29 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd), 32, 0); - if (fsl_chan->txirq) { + if (fsl_chan->txirq) ret = request_irq(fsl_chan->txirq, fsl_chan->irq_handler, IRQF_SHARED, fsl_chan->chan_name, fsl_chan); - if (ret) { - dma_pool_destroy(fsl_chan->tcd_pool); - return ret; - } - } + if (ret) + goto err_txirq; + + if (fsl_chan->errirq > 0) + ret = request_irq(fsl_chan->errirq, fsl_chan->errirq_handler, IRQF_SHARED, + fsl_chan->errirq_name, fsl_chan); + + if (ret) + goto err_errirq; return 0; + +err_errirq: + if (fsl_chan->txirq) + free_irq(fsl_chan->txirq, fsl_chan); +err_txirq: + dma_pool_destroy(fsl_chan->tcd_pool); + + return ret; } void fsl_edma_free_chan_resources(struct dma_chan *chan) @@ -862,6 +874,8 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan) if (fsl_chan->txirq) free_irq(fsl_chan->txirq, fsl_chan); + if (fsl_chan->errirq) + free_irq(fsl_chan->errirq, fsl_chan); vchan_dma_desc_free_list(&fsl_chan->vchan, &head); dma_pool_destroy(fsl_chan->tcd_pool); diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index 10a5565ddfd76..205a964890948 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -71,6 +71,18 @@ #define EDMA_V3_CH_ES_ERR BIT(31) #define EDMA_V3_MP_ES_VLD BIT(31) +#define EDMA_V3_CH_ERR_DBE BIT(0) +#define EDMA_V3_CH_ERR_SBE BIT(1) +#define EDMA_V3_CH_ERR_SGE BIT(2) +#define EDMA_V3_CH_ERR_NCE BIT(3) +#define EDMA_V3_CH_ERR_DOE BIT(4) +#define EDMA_V3_CH_ERR_DAE BIT(5) +#define EDMA_V3_CH_ERR_SOE BIT(6) +#define EDMA_V3_CH_ERR_SAE BIT(7) +#define EDMA_V3_CH_ERR_ECX BIT(8) +#define EDMA_V3_CH_ERR_UCE BIT(9) +#define EDMA_V3_CH_ERR BIT(31) + enum fsl_edma_pm_state { RUNNING = 0, SUSPENDED, @@ -162,6 +174,7 @@ struct fsl_edma_chan { u32 dma_dev_size; enum dma_data_direction dma_dir; char chan_name[32]; + char errirq_name[36]; void __iomem *tcd; void __iomem *mux_addr; u32 real_count; @@ -174,7 +187,9 @@ struct fsl_edma_chan { int priority; int hw_chanid; int txirq; + int errirq; irqreturn_t (*irq_handler)(int irq, void *dev_id); + irqreturn_t (*errirq_handler)(int irq, void *dev_id); bool is_rxchan; bool is_remote; bool is_multi_fifo; @@ -208,6 +223,9 @@ struct fsl_edma_desc { /* Need clean CHn_CSR DONE before enable TCD's MAJORELINK */ #define FSL_EDMA_DRV_CLEAR_DONE_E_LINK BIT(14) #define FSL_EDMA_DRV_TCD64 BIT(15) +/* All channel ERR IRQ share one IRQ line */ +#define FSL_EDMA_DRV_ERRIRQ_SHARE BIT(16) + #define FSL_EDMA_DRV_EDMA3 (FSL_EDMA_DRV_SPLIT_REG | \ FSL_EDMA_DRV_BUS_8BYTE | \ diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index 760c9e3e374ca..cf309bd0a9473 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -50,6 +50,83 @@ static irqreturn_t fsl_edma_tx_handler(int irq, void *dev_id) return IRQ_HANDLED; } +static void fsl_edma3_err_check(struct fsl_edma_chan *fsl_chan) +{ + unsigned int ch_err; + u32 val; + + scoped_guard(spinlock, &fsl_chan->vchan.lock) { + ch_err = edma_readl_chreg(fsl_chan, ch_es); + if (!(ch_err & EDMA_V3_CH_ERR)) + return; + + edma_writel_chreg(fsl_chan, EDMA_V3_CH_ERR, ch_es); + val = edma_readl_chreg(fsl_chan, ch_csr); + val &= ~EDMA_V3_CH_CSR_ERQ; + edma_writel_chreg(fsl_chan, val, ch_csr); + } + + /* Ignore this interrupt since channel has been disabled already */ + if (!fsl_chan->edesc) + return; + + if (ch_err & EDMA_V3_CH_ERR_DBE) + dev_err(&fsl_chan->pdev->dev, "Destination Bus Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_SBE) + dev_err(&fsl_chan->pdev->dev, "Source Bus Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_SGE) + dev_err(&fsl_chan->pdev->dev, "Scatter/Gather Configuration Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_NCE) + dev_err(&fsl_chan->pdev->dev, "NBYTES/CITER Configuration Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_DOE) + dev_err(&fsl_chan->pdev->dev, "Destination Offset Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_DAE) + dev_err(&fsl_chan->pdev->dev, "Destination Address Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_SOE) + dev_err(&fsl_chan->pdev->dev, "Source Offset Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_SAE) + dev_err(&fsl_chan->pdev->dev, "Source Address Error interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_ECX) + dev_err(&fsl_chan->pdev->dev, "Transfer Canceled interrupt.\n"); + + if (ch_err & EDMA_V3_CH_ERR_UCE) + dev_err(&fsl_chan->pdev->dev, "Uncorrectable TCD error during channel execution interrupt.\n"); + + fsl_chan->status = DMA_ERROR; +} + +static irqreturn_t fsl_edma3_err_handler_per_chan(int irq, void *dev_id) +{ + struct fsl_edma_chan *fsl_chan = dev_id; + + fsl_edma3_err_check(fsl_chan); + + return IRQ_HANDLED; +} + +static irqreturn_t fsl_edma3_err_handler_shared(int irq, void *dev_id) +{ + struct fsl_edma_engine *fsl_edma = dev_id; + unsigned int ch; + + for (ch = 0; ch < fsl_edma->n_chans; ch++) { + if (fsl_edma->chan_masked & BIT(ch)) + continue; + + fsl_edma3_err_check(&fsl_edma->chans[ch]); + } + + return IRQ_HANDLED; +} + static irqreturn_t fsl_edma3_tx_handler(int irq, void *dev_id) { struct fsl_edma_chan *fsl_chan = dev_id; @@ -309,7 +386,8 @@ fsl_edma_irq_init(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma static int fsl_edma3_irq_init(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) { - int i; + char *errirq_name; + int i, ret; for (i = 0; i < fsl_edma->n_chans; i++) { @@ -324,6 +402,27 @@ static int fsl_edma3_irq_init(struct platform_device *pdev, struct fsl_edma_engi return -EINVAL; fsl_chan->irq_handler = fsl_edma3_tx_handler; + + if (!(fsl_edma->drvdata->flags & FSL_EDMA_DRV_ERRIRQ_SHARE)) { + fsl_chan->errirq = fsl_chan->txirq; + fsl_chan->errirq_handler = fsl_edma3_err_handler_per_chan; + } + } + + /* All channel err use one irq number */ + if (fsl_edma->drvdata->flags & FSL_EDMA_DRV_ERRIRQ_SHARE) { + /* last one is error irq */ + fsl_edma->errirq = platform_get_irq_optional(pdev, fsl_edma->n_chans); + if (fsl_edma->errirq < 0) + return 0; /* dts miss err irq, treat as no err irq case */ + + errirq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s-err", + dev_name(&pdev->dev)); + + ret = devm_request_irq(&pdev->dev, fsl_edma->errirq, fsl_edma3_err_handler_shared, + 0, errirq_name, fsl_edma); + if (ret) + return dev_err_probe(&pdev->dev, ret, "Can't register eDMA err IRQ.\n"); } return 0; @@ -419,12 +518,11 @@ fsl_edma2_irq_init(struct platform_device *pdev, static void fsl_edma_irq_exit( struct platform_device *pdev, struct fsl_edma_engine *fsl_edma) { - if (fsl_edma->txirq == fsl_edma->errirq) { - devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); - } else { + if (fsl_edma->txirq) devm_free_irq(&pdev->dev, fsl_edma->txirq, fsl_edma); + + if (fsl_edma->errirq) devm_free_irq(&pdev->dev, fsl_edma->errirq, fsl_edma); - } } static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_clocks) @@ -460,7 +558,8 @@ static struct fsl_edma_drvdata imx7ulp_data = { }; static struct fsl_edma_drvdata imx8qm_data = { - .flags = FSL_EDMA_DRV_HAS_PD | FSL_EDMA_DRV_EDMA3 | FSL_EDMA_DRV_MEM_REMOTE, + .flags = FSL_EDMA_DRV_HAS_PD | FSL_EDMA_DRV_EDMA3 | FSL_EDMA_DRV_MEM_REMOTE + | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz = 0x10000, .chreg_off = 0x10000, .setup_irq = fsl_edma3_irq_init, @@ -477,14 +576,15 @@ static struct fsl_edma_drvdata imx8ulp_data = { }; static struct fsl_edma_drvdata imx93_data3 = { - .flags = FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA3, + .flags = FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA3 | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz = 0x10000, .chreg_off = 0x10000, .setup_irq = fsl_edma3_irq_init, }; static struct fsl_edma_drvdata imx93_data4 = { - .flags = FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA4, + .flags = FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA4 + | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz = 0x8000, .chreg_off = 0x10000, .mux_off = 0x10000 + offsetof(struct fsl_edma3_ch_reg, ch_mux), @@ -494,7 +594,7 @@ static struct fsl_edma_drvdata imx93_data4 = { static struct fsl_edma_drvdata imx95_data5 = { .flags = FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA4 | - FSL_EDMA_DRV_TCD64, + FSL_EDMA_DRV_TCD64 | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz = 0x8000, .chreg_off = 0x10000, .mux_off = 0x200, @@ -694,6 +794,9 @@ static int fsl_edma_probe(struct platform_device *pdev) snprintf(fsl_chan->chan_name, sizeof(fsl_chan->chan_name), "%s-CH%02d", dev_name(&pdev->dev), i); + snprintf(fsl_chan->errirq_name, sizeof(fsl_chan->errirq_name), + "%s-CH%02d-err", dev_name(&pdev->dev), i); + fsl_chan->edma = fsl_edma; fsl_chan->pm_state = RUNNING; fsl_chan->srcid = 0; -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] arm64: dtsi: imx93: add edma error interrupt support 2025-02-28 17:42 [PATCH 0/3] dmaengine: fsl-edma: add error irq to help debug problem Frank Li 2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li 2025-02-28 17:42 ` [PATCH 2/3] dmaegnine: fsl-edma: add edma error interrupt handler Frank Li @ 2025-02-28 17:42 ` Frank Li 2 siblings, 0 replies; 7+ messages in thread From: Frank Li @ 2025-02-28 17:42 UTC (permalink / raw) To: Vinod Koul, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Peng Fan, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam Cc: imx, dmaengine, devicetree, linux-kernel, linux-arm-kernel, Frank Li, Joy Zou From: Joy Zou <joy.zou@nxp.com> Add edma error irq for imx93. Signed-off-by: Joy Zou <joy.zou@nxp.com> Signed-off-by: Frank Li <Frank.Li@nxp.com> --- arch/arm64/boot/dts/freescale/imx93.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/imx93.dtsi b/arch/arm64/boot/dts/freescale/imx93.dtsi index 56766fdb0b1e5..d8e54b893f8cb 100644 --- a/arch/arm64/boot/dts/freescale/imx93.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93.dtsi @@ -297,7 +297,8 @@ edma1: dma-controller@44000000 { <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, // 27: TMP2 CH1/CH3 <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, // 28: TMP2 Overflow <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>, // 29: PDM - <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>; // 30: ADC1 + <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>, // 30: ADC1 + <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>; // err clocks = <&clk IMX93_CLK_EDMA1_GATE>; clock-names = "dma"; }; @@ -667,7 +668,8 @@ edma2: dma-controller@42000000 { <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>; + <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX93_CLK_EDMA2_GATE>; clock-names = "dma"; }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-02-28 22:19 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-02-28 17:42 [PATCH 0/3] dmaengine: fsl-edma: add error irq to help debug problem Frank Li 2025-02-28 17:42 ` [PATCH 1/3] dt-bindings: dma: fsl-edma: increase maxItems of interrupts and interrupt-names Frank Li 2025-02-28 18:13 ` Conor Dooley 2025-02-28 20:03 ` Frank Li 2025-02-28 22:19 ` Rob Herring (Arm) 2025-02-28 17:42 ` [PATCH 2/3] dmaegnine: fsl-edma: add edma error interrupt handler Frank Li 2025-02-28 17:42 ` [PATCH 3/3] arm64: dtsi: imx93: add edma error interrupt support Frank Li
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox