* [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address
@ 2023-11-16 22:27 Frank Li
2023-11-16 22:27 ` [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd() Frank Li
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
Change from v1 to v2:
- fixed mcf-edma-main.c build error.
- fixed readq build error. readq actually is not atomic read in imx95.
So split to two ioread32\iowrite32.
It needs read at least twice to avoid lower 32 bit part wrap during read
up 32bit part.
first 2 patch is prepare, No function change.
3rd patch is dt-bind doc
4rd patch is actuall support TCD64
Frank Li (5):
dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd()
dmaengine: fsl-edma: add address for channel mux register in
fsl_edma_chan
dmaengine: mcf-edma: force type conversion for TCD pointer
dt-bindings: fsl-dma: fsl-edma: add fsl,imx95-edma5 compatible string
dmaengine: fsl-edma: integrate TCD64 support for i.MX95
.../devicetree/bindings/dma/fsl,edma.yaml | 2 +
drivers/dma/fsl-edma-common.c | 101 +++++++------
drivers/dma/fsl-edma-common.h | 134 ++++++++++++++++--
drivers/dma/fsl-edma-main.c | 17 +++
drivers/dma/mcf-edma-main.c | 2 +-
5 files changed, 198 insertions(+), 58 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd()
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
@ 2023-11-16 22:27 ` Frank Li
2023-11-17 19:50 ` kernel test robot
2023-11-16 22:27 ` [PATCH v2 2/5] dmaengine: fsl-edma: add address for channel mux register in fsl_edma_chan Frank Li
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
Using help macro fsl_edma_set(get)_tcd() to handle difference field size.
This is not function change and prepare for 64bit tcd in imx95.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/fsl-edma-common.c | 61 ++++++++++++++++++-----------------
drivers/dma/fsl-edma-common.h | 20 ++++++++++++
2 files changed, 51 insertions(+), 30 deletions(-)
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index 6a3abe5b17908..1cd9cf51b16eb 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -358,10 +358,10 @@ static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
/* calculate the total size in this desc */
for (len = i = 0; i < fsl_chan->edesc->n_tcds; i++) {
- nbytes = le32_to_cpu(edesc->tcd[i].vtcd->nbytes);
+ nbytes = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, nbytes);
if (nbytes & (EDMA_V3_TCD_NBYTES_DMLOE | EDMA_V3_TCD_NBYTES_SMLOE))
nbytes = EDMA_V3_TCD_NBYTES_MLOFF_NBYTES(nbytes);
- len += nbytes * le16_to_cpu(edesc->tcd[i].vtcd->biter);
+ len += nbytes * fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, biter);
}
if (!in_progress)
@@ -374,16 +374,16 @@ static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
/* figure out the finished and calculate the residue */
for (i = 0; i < fsl_chan->edesc->n_tcds; i++) {
- nbytes = le32_to_cpu(edesc->tcd[i].vtcd->nbytes);
+ nbytes = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, nbytes);
if (nbytes & (EDMA_V3_TCD_NBYTES_DMLOE | EDMA_V3_TCD_NBYTES_SMLOE))
nbytes = EDMA_V3_TCD_NBYTES_MLOFF_NBYTES(nbytes);
- size = nbytes * le16_to_cpu(edesc->tcd[i].vtcd->biter);
+ size = nbytes * fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, biter);
if (dir == DMA_MEM_TO_DEV)
- dma_addr = le32_to_cpu(edesc->tcd[i].vtcd->saddr);
+ dma_addr = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, saddr);
else
- dma_addr = le32_to_cpu(edesc->tcd[i].vtcd->daddr);
+ dma_addr = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, daddr);
len -= size;
if (cur_addr >= dma_addr && cur_addr < dma_addr + size) {
@@ -439,26 +439,26 @@ static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,
*/
edma_write_tcdreg(fsl_chan, 0, csr);
- edma_write_tcdreg(fsl_chan, tcd->saddr, saddr);
- edma_write_tcdreg(fsl_chan, tcd->daddr, daddr);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, saddr), saddr);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, daddr), daddr);
- edma_write_tcdreg(fsl_chan, tcd->attr, attr);
- edma_write_tcdreg(fsl_chan, tcd->soff, soff);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, attr), attr);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, soff), soff);
- edma_write_tcdreg(fsl_chan, tcd->nbytes, nbytes);
- edma_write_tcdreg(fsl_chan, tcd->slast, slast);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, nbytes), nbytes);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, slast), slast);
- edma_write_tcdreg(fsl_chan, tcd->citer, citer);
- edma_write_tcdreg(fsl_chan, tcd->biter, biter);
- edma_write_tcdreg(fsl_chan, tcd->doff, doff);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, citer), citer);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, biter), biter);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, doff), doff);
- edma_write_tcdreg(fsl_chan, tcd->dlast_sga, dlast_sga);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, dlast_sga), dlast_sga);
- csr = le16_to_cpu(tcd->csr);
+ csr = fsl_edma_get_tcd_to_cpu(fsl_chan, tcd, csr);
if (fsl_chan->is_sw) {
csr |= EDMA_TCD_CSR_START;
- tcd->csr = cpu_to_le16(csr);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, csr, csr);
}
/*
@@ -473,7 +473,7 @@ static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,
edma_writel_chreg(fsl_chan, edma_readl_chreg(fsl_chan, ch_csr), ch_csr);
- edma_write_tcdreg(fsl_chan, tcd->csr, csr);
+ edma_write_tcdreg(fsl_chan, fsl_edma_get_tcd(fsl_chan, tcd, csr), csr);
}
static inline
@@ -493,12 +493,12 @@ void fsl_edma_fill_tcd(struct fsl_edma_chan *fsl_chan,
* So we put the value in little endian in memory, waiting
* for fsl_edma_set_tcd_regs doing the swap.
*/
- tcd->saddr = cpu_to_le32(src);
- tcd->daddr = cpu_to_le32(dst);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, src, saddr);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, dst, daddr);
- tcd->attr = cpu_to_le16(attr);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, attr, attr);
- tcd->soff = cpu_to_le16(soff);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, soff, soff);
if (fsl_chan->is_multi_fifo) {
/* set mloff to support multiple fifo */
@@ -515,15 +515,16 @@ void fsl_edma_fill_tcd(struct fsl_edma_chan *fsl_chan,
}
}
- tcd->nbytes = cpu_to_le32(nbytes);
- tcd->slast = cpu_to_le32(slast);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, nbytes, nbytes);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, slast, slast);
- tcd->citer = cpu_to_le16(EDMA_TCD_CITER_CITER(citer));
- tcd->doff = cpu_to_le16(doff);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, EDMA_TCD_CITER_CITER(citer), citer);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, doff, doff);
- tcd->dlast_sga = cpu_to_le32(dlast_sga);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, dlast_sga, dlast_sga);
+
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, EDMA_TCD_BITER_BITER(biter), biter);
- tcd->biter = cpu_to_le16(EDMA_TCD_BITER_BITER(biter));
if (major_int)
csr |= EDMA_TCD_CSR_INT_MAJOR;
@@ -539,7 +540,7 @@ void fsl_edma_fill_tcd(struct fsl_edma_chan *fsl_chan,
if (fsl_chan->is_sw)
csr |= EDMA_TCD_CSR_START;
- tcd->csr = cpu_to_le16(csr);
+ fsl_edma_set_tcd_to_le(fsl_chan, tcd, csr, csr);
}
static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan *fsl_chan,
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index bb5221158a770..72104d775e562 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -246,6 +246,26 @@ struct fsl_edma_engine {
edma_writel(chan->edma, val, \
(void __iomem *)&(container_of(chan->tcd, struct fsl_edma3_ch_reg, tcd)->__name))
+#define fsl_edma_get_tcd(_chan, _tcd, _field) ((_tcd)->_field)
+
+#define fsl_edma_le_to_cpu(x) \
+(sizeof(x) == sizeof(u32) ? le32_to_cpu(x) : le16_to_cpu(x))
+
+#define fsl_edma_get_tcd_to_cpu(_chan, _tcd, _field) \
+fsl_edma_le_to_cpu(fsl_edma_get_tcd(_chan, _tcd, _field))
+
+#define fsl_edma_set_tcd_to_le(_fsl_chan, _tcd, _val, _field) \
+do { \
+ switch (sizeof((_tcd)->_field)) { \
+ case sizeof(u32): \
+ (_tcd)->_field = cpu_to_le32(_val); \
+ break; \
+ case sizeof(u16): \
+ (_tcd)->_field = cpu_to_le16(_val); \
+ break; \
+ } \
+} while (0)
+
/*
* R/W functions for big- or little-endian registers:
* The eDMA controller's endian is independent of the CPU core's endian.
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/5] dmaengine: fsl-edma: add address for channel mux register in fsl_edma_chan
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
2023-11-16 22:27 ` [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd() Frank Li
@ 2023-11-16 22:27 ` Frank Li
2023-11-16 22:27 ` [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer Frank Li
` (2 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
iMX95 move channel mux register to management page address space. This
prepare to support iMX95.
Add mux_addr in struct fsl_edma_chan. No function change.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/fsl-edma-common.c | 6 +++---
drivers/dma/fsl-edma-common.h | 3 +++
drivers/dma/fsl-edma-main.c | 3 +++
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index 1cd9cf51b16eb..d29824ed7c80f 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -97,8 +97,8 @@ static void fsl_edma3_enable_request(struct fsl_edma_chan *fsl_chan)
* ch_mux: With the exception of 0, attempts to write a value
* already in use will be forced to 0.
*/
- if (!edma_readl_chreg(fsl_chan, ch_mux))
- edma_writel_chreg(fsl_chan, fsl_chan->srcid, ch_mux);
+ if (!edma_readl(fsl_chan->edma, fsl_chan->mux_addr))
+ edma_writel(fsl_chan->edma, fsl_chan->srcid, fsl_chan->mux_addr);
}
val = edma_readl_chreg(fsl_chan, ch_csr);
@@ -134,7 +134,7 @@ static void fsl_edma3_disable_request(struct fsl_edma_chan *fsl_chan)
flags = fsl_edma_drvflags(fsl_chan);
if (flags & FSL_EDMA_DRV_HAS_CHMUX)
- edma_writel_chreg(fsl_chan, 0, ch_mux);
+ edma_writel(fsl_chan->edma, 0, fsl_chan->mux_addr);
val &= ~EDMA_V3_CH_CSR_ERQ;
edma_writel_chreg(fsl_chan, val, ch_csr);
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index 72104d775e562..6c738c5cad118 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -145,6 +145,7 @@ struct fsl_edma_chan {
enum dma_data_direction dma_dir;
char chan_name[32];
struct fsl_edma_hw_tcd __iomem *tcd;
+ void __iomem *mux_addr;
u32 real_count;
struct work_struct issue_worker;
struct platform_device *pdev;
@@ -206,6 +207,8 @@ struct fsl_edma_drvdata {
u32 chreg_off;
u32 chreg_space_sz;
u32 flags;
+ u32 mux_off; /* channel mux register offset */
+ u32 mux_skip; /* how much skip for each channel */
int (*setup_irq)(struct platform_device *pdev,
struct fsl_edma_engine *fsl_edma);
};
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
index f53b0ec17bcbc..e7a847e010dd9 100644
--- a/drivers/dma/fsl-edma-main.c
+++ b/drivers/dma/fsl-edma-main.c
@@ -359,6 +359,8 @@ static struct fsl_edma_drvdata imx93_data4 = {
.flags = FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA4,
.chreg_space_sz = 0x8000,
.chreg_off = 0x10000,
+ .mux_off = 0x10000 + offsetof(struct fsl_edma3_ch_reg, ch_mux),
+ .mux_skip = 0x8000,
.setup_irq = fsl_edma3_irq_init,
};
@@ -533,6 +535,7 @@ static int fsl_edma_probe(struct platform_device *pdev)
offsetof(struct fsl_edma3_ch_reg, tcd) : 0;
fsl_chan->tcd = fsl_edma->membase
+ i * drvdata->chreg_space_sz + drvdata->chreg_off + len;
+ fsl_chan->mux_addr = fsl_edma->membase + drvdata->mux_off + i * drvdata->mux_skip;
fsl_chan->pdev = pdev;
vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev);
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
2023-11-16 22:27 ` [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd() Frank Li
2023-11-16 22:27 ` [PATCH v2 2/5] dmaengine: fsl-edma: add address for channel mux register in fsl_edma_chan Frank Li
@ 2023-11-16 22:27 ` Frank Li
2023-11-17 21:38 ` kernel test robot
2023-11-19 23:52 ` kernel test robot
2023-11-16 22:27 ` [PATCH v2 4/5] dt-bindings: fsl-dma: fsl-edma: add fsl,imx95-edma5 compatible string Frank Li
2023-11-16 22:27 ` [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95 Frank Li
4 siblings, 2 replies; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
The TCD structure undergoes changes, with some fields extending to 64 bits.
When TCD64 is enabled, the type of TCD changes to 'void *' . This addresses
the need to force the type conversion to 'struct fsl_edma_hw_tcd *' at
here.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/mcf-edma-main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
index ab21455d9c3a4..204a0a7bdea35 100644
--- a/drivers/dma/mcf-edma-main.c
+++ b/drivers/dma/mcf-edma-main.c
@@ -202,7 +202,7 @@ static int mcf_edma_probe(struct platform_device *pdev)
vchan_init(&mcf_chan->vchan, &mcf_edma->dma_dev);
mcf_chan->tcd = mcf_edma->membase + EDMA_TCD
+ i * sizeof(struct fsl_edma_hw_tcd);
- iowrite32(0x0, &mcf_chan->tcd->csr);
+ iowrite32(0x0, &((struct fsl_edma_hw_tcd *)mcf_chan->tcd)->csr);
}
iowrite32(~0, regs->inth);
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 4/5] dt-bindings: fsl-dma: fsl-edma: add fsl,imx95-edma5 compatible string
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
` (2 preceding siblings ...)
2023-11-16 22:27 ` [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer Frank Li
@ 2023-11-16 22:27 ` Frank Li
2023-11-16 22:27 ` [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95 Frank Li
4 siblings, 0 replies; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
Add the compatible string 'fsl,imx95-edma5' to support the i.MX95's eDMA,
which features 64-bit physical address support.
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Documentation/devicetree/bindings/dma/fsl,edma.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/dma/fsl,edma.yaml b/Documentation/devicetree/bindings/dma/fsl,edma.yaml
index 437db0c62339f..aa51d278cb67b 100644
--- a/Documentation/devicetree/bindings/dma/fsl,edma.yaml
+++ b/Documentation/devicetree/bindings/dma/fsl,edma.yaml
@@ -25,6 +25,7 @@ properties:
- fsl,imx8qm-edma
- fsl,imx93-edma3
- fsl,imx93-edma4
+ - fsl,imx95-edma5
- items:
- const: fsl,ls1028a-edma
- const: fsl,vf610-edma
@@ -83,6 +84,7 @@ allOf:
- fsl,imx8qm-edma
- fsl,imx93-edma3
- fsl,imx93-edma4
+ - fsl,imx95-edma5
then:
properties:
"#dma-cells":
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
` (3 preceding siblings ...)
2023-11-16 22:27 ` [PATCH v2 4/5] dt-bindings: fsl-dma: fsl-edma: add fsl,imx95-edma5 compatible string Frank Li
@ 2023-11-16 22:27 ` Frank Li
2023-11-17 23:03 ` kernel test robot
4 siblings, 1 reply; 10+ messages in thread
From: Frank Li @ 2023-11-16 22:27 UTC (permalink / raw)
To: frank.li, vkoul
Cc: devicetree, dmaengine, imx, joy.zou, krzysztof.kozlowski+dt,
linux-kernel, peng.fan, robh+dt, shenwei.wang
In i.MX95's edma version 5, the TCD structure is extended to support 64-bit
addresses for fields like saddr and daddr. To prevent code duplication,
employ help macros to handle the fields, as the field names remain the same
between TCD and TCD64.
Change local variables related to TCD addresses from 'u32' to 'dma_addr_t'
to accept 64-bit DMA addresses.
Change 'vtcd' type to 'void *' to avoid direct use. Use helper macros to
access the TCD fields correctly.
Call 'dma_set_mask_and_coherent(64)' when TCD64 is supported.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/fsl-edma-common.c | 34 ++++++----
drivers/dma/fsl-edma-common.h | 117 ++++++++++++++++++++++++++++++----
drivers/dma/fsl-edma-main.c | 14 ++++
3 files changed, 138 insertions(+), 27 deletions(-)
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index d29824ed7c80f..ed7da18b79262 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -351,7 +351,7 @@ static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
{
struct fsl_edma_desc *edesc = fsl_chan->edesc;
enum dma_transfer_direction dir = edesc->dirn;
- dma_addr_t cur_addr, dma_addr;
+ dma_addr_t cur_addr, dma_addr, old_addr;
size_t len, size;
u32 nbytes = 0;
int i;
@@ -367,10 +367,16 @@ static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
if (!in_progress)
return len;
- if (dir == DMA_MEM_TO_DEV)
- cur_addr = edma_read_tcdreg(fsl_chan, saddr);
- else
- cur_addr = edma_read_tcdreg(fsl_chan, daddr);
+ /* 64bit read is not atomic, need read retry when high 32bit changed */
+ do {
+ if (dir == DMA_MEM_TO_DEV) {
+ old_addr = edma_read_tcdreg(fsl_chan, saddr);
+ cur_addr = edma_read_tcdreg(fsl_chan, saddr);
+ } else {
+ old_addr = edma_read_tcdreg(fsl_chan, daddr);
+ cur_addr = edma_read_tcdreg(fsl_chan, daddr);
+ }
+ } while (upper_32_bits(cur_addr) != upper_32_bits(old_addr));
/* figure out the finished and calculate the residue */
for (i = 0; i < fsl_chan->edesc->n_tcds; i++) {
@@ -426,8 +432,7 @@ enum dma_status fsl_edma_tx_status(struct dma_chan *chan,
return fsl_chan->status;
}
-static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,
- struct fsl_edma_hw_tcd *tcd)
+static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan, void *tcd)
{
u16 csr = 0;
@@ -478,9 +483,9 @@ static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan,
static inline
void fsl_edma_fill_tcd(struct fsl_edma_chan *fsl_chan,
- struct fsl_edma_hw_tcd *tcd, u32 src, u32 dst,
- u16 attr, u16 soff, u32 nbytes, u32 slast, u16 citer,
- u16 biter, u16 doff, u32 dlast_sga, bool major_int,
+ struct fsl_edma_hw_tcd *tcd, dma_addr_t src, dma_addr_t dst,
+ u16 attr, u16 soff, u32 nbytes, dma_addr_t slast, u16 citer,
+ u16 biter, u16 doff, dma_addr_t dlast_sga, bool major_int,
bool disable_req, bool enable_sg)
{
struct dma_slave_config *cfg = &fsl_chan->cfg;
@@ -581,8 +586,9 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
dma_addr_t dma_buf_next;
bool major_int = true;
int sg_len, i;
- u32 src_addr, dst_addr, last_sg, nbytes;
+ dma_addr_t src_addr, dst_addr, last_sg;
u16 soff, doff, iter;
+ u32 nbytes;
if (!is_slave_direction(direction))
return NULL;
@@ -654,8 +660,9 @@ struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg(
struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
struct fsl_edma_desc *fsl_desc;
struct scatterlist *sg;
- u32 src_addr, dst_addr, last_sg, nbytes;
+ dma_addr_t src_addr, dst_addr, last_sg;
u16 soff, doff, iter;
+ u32 nbytes;
int i;
if (!is_slave_direction(direction))
@@ -804,7 +811,8 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan)
struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
fsl_chan->tcd_pool = dma_pool_create("tcd_pool", chan->device->dev,
- sizeof(struct fsl_edma_hw_tcd),
+ fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_TCD64 ?
+ sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd),
32, 0);
return 0;
}
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index 6c738c5cad118..432d5ae798ae4 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -87,6 +87,20 @@ struct fsl_edma_hw_tcd {
__le16 biter;
};
+struct fsl_edma_hw_tcd64 {
+ __le64 saddr;
+ __le16 soff;
+ __le16 attr;
+ __le32 nbytes;
+ __le64 slast;
+ __le64 daddr;
+ __le64 dlast_sga;
+ __le16 doff;
+ __le16 citer;
+ __le16 csr;
+ __le16 biter;
+} __packed;
+
struct fsl_edma3_ch_reg {
__le32 ch_csr;
__le32 ch_es;
@@ -96,7 +110,10 @@ struct fsl_edma3_ch_reg {
__le32 ch_mux;
__le32 ch_mattr; /* edma4, reserved for edma3 */
__le32 ch_reserved;
- struct fsl_edma_hw_tcd tcd;
+ union {
+ struct fsl_edma_hw_tcd tcd;
+ struct fsl_edma_hw_tcd tcd64;
+ };
} __packed;
/*
@@ -125,7 +142,7 @@ struct edma_regs {
struct fsl_edma_sw_tcd {
dma_addr_t ptcd;
- struct fsl_edma_hw_tcd *vtcd;
+ void *vtcd;
};
struct fsl_edma_chan {
@@ -144,7 +161,7 @@ struct fsl_edma_chan {
u32 dma_dev_size;
enum dma_data_direction dma_dir;
char chan_name[32];
- struct fsl_edma_hw_tcd __iomem *tcd;
+ void __iomem *tcd;
void __iomem *mux_addr;
u32 real_count;
struct work_struct issue_worker;
@@ -188,6 +205,7 @@ struct fsl_edma_desc {
#define FSL_EDMA_DRV_CLEAR_DONE_E_SG BIT(13)
/* 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)
#define FSL_EDMA_DRV_EDMA3 (FSL_EDMA_DRV_SPLIT_REG | \
FSL_EDMA_DRV_BUS_8BYTE | \
@@ -231,15 +249,44 @@ struct fsl_edma_engine {
struct fsl_edma_chan chans[] __counted_by(n_chans);
};
+#define edma_read_tcdreg_c(chan, _tcd, __name) \
+(sizeof(_tcd->__name) == sizeof(u64) ? \
+ edma_readq(chan->edma, &_tcd->__name) : \
+ ((sizeof(_tcd->__name) == sizeof(u32)) ? \
+ edma_readl(chan->edma, &_tcd->__name) : \
+ edma_readw(chan->edma, &_tcd->__name) \
+ ))
+
#define edma_read_tcdreg(chan, __name) \
-(sizeof(chan->tcd->__name) == sizeof(u32) ? \
- edma_readl(chan->edma, &chan->tcd->__name) : \
- edma_readw(chan->edma, &chan->tcd->__name))
+((fsl_edma_drvflags(chan) & FSL_EDMA_DRV_TCD64) ? \
+ edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd64 *)chan->tcd), __name) : \
+ edma_read_tcdreg_c(chan, ((struct fsl_edma_hw_tcd *)chan->tcd), __name) \
+)
+
+#define edma_write_tcdreg_c(chan, _tcd, _val, __name) \
+do { \
+ switch (sizeof(_tcd->__name)) { \
+ case sizeof(u64): \
+ edma_writeq(chan->edma, (u64 __force)_val, &_tcd->__name); \
+ break; \
+ case sizeof(u32): \
+ edma_writel(chan->edma, (u32 __force)_val, &_tcd->__name); \
+ break; \
+ case sizeof(u16): \
+ edma_writew(chan->edma, (u16 __force)_val, &_tcd->__name); \
+ break; \
+ case sizeof(u8): \
+ edma_writeb(chan->edma, _val, &_tcd->__name); \
+ break; \
+ } \
+} while (0)
-#define edma_write_tcdreg(chan, val, __name) \
-(sizeof(chan->tcd->__name) == sizeof(u32) ? \
- edma_writel(chan->edma, (u32 __force)val, &chan->tcd->__name) : \
- edma_writew(chan->edma, (u16 __force)val, &chan->tcd->__name))
+#define edma_write_tcdreg(chan, val, __name) \
+do { if (fsl_edma_drvflags(chan) & FSL_EDMA_DRV_TCD64) \
+ edma_write_tcdreg_c(chan, ((struct fsl_edma_hw_tcd64 *)chan->tcd), val, __name);\
+ else \
+ edma_write_tcdreg_c(chan, ((struct fsl_edma_hw_tcd *)chan->tcd), val, __name); \
+} while (0)
#define edma_readl_chreg(chan, __name) \
edma_readl(chan->edma, \
@@ -249,17 +296,24 @@ struct fsl_edma_engine {
edma_writel(chan->edma, val, \
(void __iomem *)&(container_of(chan->tcd, struct fsl_edma3_ch_reg, tcd)->__name))
-#define fsl_edma_get_tcd(_chan, _tcd, _field) ((_tcd)->_field)
+#define fsl_edma_get_tcd(_chan, _tcd, _field) \
+(fsl_edma_drvflags(_chan) & FSL_EDMA_DRV_TCD64 ? (((struct fsl_edma_hw_tcd64 *)_tcd)->_field) : \
+ (((struct fsl_edma_hw_tcd *)_tcd)->_field))
#define fsl_edma_le_to_cpu(x) \
-(sizeof(x) == sizeof(u32) ? le32_to_cpu(x) : le16_to_cpu(x))
+(sizeof(x) == sizeof(u64) ? le64_to_cpu(x) : \
+ (sizeof(x) == sizeof(u32) ? le32_to_cpu(x) : le16_to_cpu(x)))
+
#define fsl_edma_get_tcd_to_cpu(_chan, _tcd, _field) \
fsl_edma_le_to_cpu(fsl_edma_get_tcd(_chan, _tcd, _field))
-#define fsl_edma_set_tcd_to_le(_fsl_chan, _tcd, _val, _field) \
+#define fsl_edma_set_tcd_to_le_c(_tcd, _val, _field) \
do { \
- switch (sizeof((_tcd)->_field)) { \
+ switch (sizeof((_tcd)->_field)) { \
+ case sizeof(u64): \
+ (_tcd)->_field = cpu_to_le64(_val); \
+ break; \
case sizeof(u32): \
(_tcd)->_field = cpu_to_le32(_val); \
break; \
@@ -269,12 +323,35 @@ do { \
} \
} while (0)
+#define fsl_edma_set_tcd_to_le(_chan, _tcd, _val, _field) \
+do { \
+ if (fsl_edma_drvflags(_chan) & FSL_EDMA_DRV_TCD64) \
+ fsl_edma_set_tcd_to_le_c((struct fsl_edma_hw_tcd64 *)_tcd, _val, _field); \
+ else \
+ fsl_edma_set_tcd_to_le_c((struct fsl_edma_hw_tcd *)_tcd, _val, _field); \
+} while (0)
+
/*
* R/W functions for big- or little-endian registers:
* The eDMA controller's endian is independent of the CPU core's endian.
* For the big-endian IP module, the offset for 8-bit or 16-bit registers
* should also be swapped opposite to that in little-endian IP.
*/
+static inline u64 edma_readq(struct fsl_edma_engine *edma, void __iomem *addr)
+{
+ u64 l, h;
+
+ if (edma->big_endian) {
+ l = ioread32be(addr);
+ h = ioread32be(addr + 4);
+ } else {
+ l = ioread32(addr);
+ h = ioread32(addr + 4);
+ }
+
+ return (h << 32) | l;
+}
+
static inline u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *addr)
{
if (edma->big_endian)
@@ -320,6 +397,18 @@ static inline void edma_writel(struct fsl_edma_engine *edma,
iowrite32(val, addr);
}
+static inline void edma_writeq(struct fsl_edma_engine *edma,
+ u64 val, void __iomem *addr)
+{
+ if (edma->big_endian) {
+ iowrite32be(val & 0xFFFFFFFF, addr);
+ iowrite32be(val >> 32, addr + 4);
+ } else {
+ iowrite32(val & 0xFFFFFFFF, addr);
+ iowrite32(val >> 32, addr + 4);
+ }
+}
+
static inline struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan *chan)
{
return container_of(chan, struct fsl_edma_chan, vchan.chan);
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
index e7a847e010dd9..d0d59961aa072 100644
--- a/drivers/dma/fsl-edma-main.c
+++ b/drivers/dma/fsl-edma-main.c
@@ -364,6 +364,16 @@ static struct fsl_edma_drvdata imx93_data4 = {
.setup_irq = fsl_edma3_irq_init,
};
+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,
+ .chreg_space_sz = 0x8000,
+ .chreg_off = 0x10000,
+ .mux_off = 0x200,
+ .mux_skip = sizeof(u32),
+ .setup_irq = fsl_edma3_irq_init,
+};
+
static const struct of_device_id fsl_edma_dt_ids[] = {
{ .compatible = "fsl,vf610-edma", .data = &vf610_data},
{ .compatible = "fsl,ls1028a-edma", .data = &ls1028a_data},
@@ -372,6 +382,7 @@ static const struct of_device_id fsl_edma_dt_ids[] = {
{ .compatible = "fsl,imx8qm-adma", .data = &imx8qm_audio_data},
{ .compatible = "fsl,imx93-edma3", .data = &imx93_data3},
{ .compatible = "fsl,imx93-edma4", .data = &imx93_data4},
+ { .compatible = "fsl,imx95-edma5", .data = &imx95_data5},
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, fsl_edma_dt_ids);
@@ -513,6 +524,9 @@ static int fsl_edma_probe(struct platform_device *pdev)
return ret;
}
+ if (drvdata->flags & FSL_EDMA_DRV_TCD64)
+ dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
+
INIT_LIST_HEAD(&fsl_edma->dma_dev.channels);
for (i = 0; i < fsl_edma->n_chans; i++) {
struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i];
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd()
2023-11-16 22:27 ` [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd() Frank Li
@ 2023-11-17 19:50 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2023-11-17 19:50 UTC (permalink / raw)
To: Frank Li, vkoul
Cc: oe-kbuild-all, devicetree, dmaengine, imx, joy.zou,
krzysztof.kozlowski+dt, linux-kernel, peng.fan, robh+dt,
shenwei.wang
Hi Frank,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on linus/master v6.7-rc1 next-20231117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-edma-involve-help-macro-fsl_edma_set-get-_tcd/20231117-062946
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20231116222743.2984776-2-Frank.Li%40nxp.com
patch subject: [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd()
config: x86_64-randconfig-r113-20231117 (https://download.01.org/0day-ci/archive/20231118/202311180346.xzja9J4E-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231118/202311180346.xzja9J4E-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311180346.xzja9J4E-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/dma/fsl-edma-common.c:76:15: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:93:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:100:22: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:101:25: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:104:15: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:106:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:131:19: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:137:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:140:9: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast from restricted __le32
>> drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast to restricted __le32
drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:377:26: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:377:26: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:381:33: sparse: sparse: cast to restricted __le32
drivers/dma/fsl-edma-common.c:381:33: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:384:36: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:384:36: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:386:36: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:386:36: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:457:15: sparse: sparse: cast to restricted __le32
drivers/dma/fsl-edma-common.c:457:15: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:461:17: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] csr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:461:17: sparse: expected restricted __le16 [usertype] csr
drivers/dma/fsl-edma-common.c:461:17: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:473:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:473:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:496:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] saddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:496:9: sparse: expected restricted __le32 [usertype] saddr
drivers/dma/fsl-edma-common.c:496:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:497:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] daddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:497:9: sparse: expected restricted __le32 [usertype] daddr
drivers/dma/fsl-edma-common.c:497:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:499:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] attr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:499:9: sparse: expected restricted __le16 [usertype] attr
drivers/dma/fsl-edma-common.c:499:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:501:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] soff @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:501:9: sparse: expected restricted __le16 [usertype] soff
drivers/dma/fsl-edma-common.c:501:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:518:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] nbytes @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:518:9: sparse: expected restricted __le32 [usertype] nbytes
drivers/dma/fsl-edma-common.c:518:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:519:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] slast @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:519:9: sparse: expected restricted __le32 [usertype] slast
drivers/dma/fsl-edma-common.c:519:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:521:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] citer @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:521:9: sparse: expected restricted __le16 [usertype] citer
drivers/dma/fsl-edma-common.c:521:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:522:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] doff @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:522:9: sparse: expected restricted __le16 [usertype] doff
drivers/dma/fsl-edma-common.c:522:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:524:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] dlast_sga @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:524:9: sparse: expected restricted __le32 [usertype] dlast_sga
drivers/dma/fsl-edma-common.c:524:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:526:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] biter @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:526:9: sparse: expected restricted __le16 [usertype] biter
drivers/dma/fsl-edma-common.c:526:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:543:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] csr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:543:9: sparse: expected restricted __le16 [usertype] csr
drivers/dma/fsl-edma-common.c:543:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:496:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] saddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:496:9: sparse: expected restricted __le32 [usertype] saddr
drivers/dma/fsl-edma-common.c:496:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:497:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] daddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:497:9: sparse: expected restricted __le32 [usertype] daddr
drivers/dma/fsl-edma-common.c:497:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:499:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] attr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:499:9: sparse: expected restricted __le16 [usertype] attr
drivers/dma/fsl-edma-common.c:499:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:501:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] soff @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:501:9: sparse: expected restricted __le16 [usertype] soff
drivers/dma/fsl-edma-common.c:501:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:518:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] nbytes @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:518:9: sparse: expected restricted __le32 [usertype] nbytes
drivers/dma/fsl-edma-common.c:518:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:519:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] slast @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:519:9: sparse: expected restricted __le32 [usertype] slast
drivers/dma/fsl-edma-common.c:519:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:521:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] citer @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:521:9: sparse: expected restricted __le16 [usertype] citer
drivers/dma/fsl-edma-common.c:521:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:522:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] doff @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:522:9: sparse: expected restricted __le16 [usertype] doff
drivers/dma/fsl-edma-common.c:522:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:524:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] dlast_sga @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:524:9: sparse: expected restricted __le32 [usertype] dlast_sga
drivers/dma/fsl-edma-common.c:524:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:526:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] biter @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:526:9: sparse: expected restricted __le16 [usertype] biter
drivers/dma/fsl-edma-common.c:526:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:543:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] csr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:543:9: sparse: expected restricted __le16 [usertype] csr
drivers/dma/fsl-edma-common.c:543:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:496:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] saddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:496:9: sparse: expected restricted __le32 [usertype] saddr
drivers/dma/fsl-edma-common.c:496:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:497:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] daddr @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:497:9: sparse: expected restricted __le32 [usertype] daddr
drivers/dma/fsl-edma-common.c:497:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:499:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] attr @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:499:9: sparse: expected restricted __le16 [usertype] attr
drivers/dma/fsl-edma-common.c:499:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:501:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] soff @@ got restricted __le32 [usertype] @@
drivers/dma/fsl-edma-common.c:501:9: sparse: expected restricted __le16 [usertype] soff
drivers/dma/fsl-edma-common.c:501:9: sparse: got restricted __le32 [usertype]
drivers/dma/fsl-edma-common.c:518:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] nbytes @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:518:9: sparse: expected restricted __le32 [usertype] nbytes
drivers/dma/fsl-edma-common.c:518:9: sparse: got restricted __le16 [usertype]
drivers/dma/fsl-edma-common.c:519:9: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] slast @@ got restricted __le16 [usertype] @@
drivers/dma/fsl-edma-common.c:519:9: sparse: expected restricted __le32 [usertype] slast
drivers/dma/fsl-edma-common.c:519:9: sparse: got restricted __le16 [usertype]
vim +361 drivers/dma/fsl-edma-common.c
348
349 static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
350 struct virt_dma_desc *vdesc, bool in_progress)
351 {
352 struct fsl_edma_desc *edesc = fsl_chan->edesc;
353 enum dma_transfer_direction dir = edesc->dirn;
354 dma_addr_t cur_addr, dma_addr;
355 size_t len, size;
356 u32 nbytes = 0;
357 int i;
358
359 /* calculate the total size in this desc */
360 for (len = i = 0; i < fsl_chan->edesc->n_tcds; i++) {
> 361 nbytes = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, nbytes);
362 if (nbytes & (EDMA_V3_TCD_NBYTES_DMLOE | EDMA_V3_TCD_NBYTES_SMLOE))
363 nbytes = EDMA_V3_TCD_NBYTES_MLOFF_NBYTES(nbytes);
> 364 len += nbytes * fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, biter);
365 }
366
367 if (!in_progress)
368 return len;
369
370 if (dir == DMA_MEM_TO_DEV)
371 cur_addr = edma_read_tcdreg(fsl_chan, saddr);
372 else
373 cur_addr = edma_read_tcdreg(fsl_chan, daddr);
374
375 /* figure out the finished and calculate the residue */
376 for (i = 0; i < fsl_chan->edesc->n_tcds; i++) {
377 nbytes = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, nbytes);
378 if (nbytes & (EDMA_V3_TCD_NBYTES_DMLOE | EDMA_V3_TCD_NBYTES_SMLOE))
379 nbytes = EDMA_V3_TCD_NBYTES_MLOFF_NBYTES(nbytes);
380
381 size = nbytes * fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, biter);
382
383 if (dir == DMA_MEM_TO_DEV)
384 dma_addr = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, saddr);
385 else
386 dma_addr = fsl_edma_get_tcd_to_cpu(fsl_chan, edesc->tcd[i].vtcd, daddr);
387
388 len -= size;
389 if (cur_addr >= dma_addr && cur_addr < dma_addr + size) {
390 len += dma_addr + size - cur_addr;
391 break;
392 }
393 }
394
395 return len;
396 }
397
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer
2023-11-16 22:27 ` [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer Frank Li
@ 2023-11-17 21:38 ` kernel test robot
2023-11-19 23:52 ` kernel test robot
1 sibling, 0 replies; 10+ messages in thread
From: kernel test robot @ 2023-11-17 21:38 UTC (permalink / raw)
To: Frank Li, vkoul
Cc: oe-kbuild-all, devicetree, dmaengine, imx, joy.zou,
krzysztof.kozlowski+dt, linux-kernel, peng.fan, robh+dt,
shenwei.wang
Hi Frank,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on linus/master v6.7-rc1 next-20231117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-edma-involve-help-macro-fsl_edma_set-get-_tcd/20231117-062946
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20231116222743.2984776-4-Frank.Li%40nxp.com
patch subject: [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer
config: csky-randconfig-r123-20231117 (https://download.01.org/0day-ci/archive/20231118/202311180508.h4QYgZRC-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231118/202311180508.h4QYgZRC-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311180508.h4QYgZRC-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/dma/mcf-edma-main.c:205:35: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/mcf-edma-main.c:205:35: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/mcf-edma-main.c:205:35: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/mcf-edma-main.c:205:35: sparse: got restricted __le16 *
drivers/dma/mcf-edma-main.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/umh.h, include/linux/kmod.h, ...):
include/linux/page-flags.h:242:46: sparse: sparse: self-comparison always evaluates to false
vim +/__iomem +205 drivers/dma/mcf-edma-main.c
152
153 static int mcf_edma_probe(struct platform_device *pdev)
154 {
155 struct mcf_edma_platform_data *pdata;
156 struct fsl_edma_engine *mcf_edma;
157 struct edma_regs *regs;
158 int ret, i, chans;
159
160 pdata = dev_get_platdata(&pdev->dev);
161 if (!pdata) {
162 dev_err(&pdev->dev, "no platform data supplied\n");
163 return -EINVAL;
164 }
165
166 if (!pdata->dma_channels) {
167 dev_info(&pdev->dev, "setting default channel number to 64");
168 chans = 64;
169 } else {
170 chans = pdata->dma_channels;
171 }
172
173 mcf_edma = devm_kzalloc(&pdev->dev, struct_size(mcf_edma, chans, chans),
174 GFP_KERNEL);
175 if (!mcf_edma)
176 return -ENOMEM;
177
178 mcf_edma->n_chans = chans;
179
180 /* Set up drvdata for ColdFire edma */
181 mcf_edma->drvdata = &mcf_data;
182 mcf_edma->big_endian = 1;
183
184 mutex_init(&mcf_edma->fsl_edma_mutex);
185
186 mcf_edma->membase = devm_platform_ioremap_resource(pdev, 0);
187 if (IS_ERR(mcf_edma->membase))
188 return PTR_ERR(mcf_edma->membase);
189
190 fsl_edma_setup_regs(mcf_edma);
191 regs = &mcf_edma->regs;
192
193 INIT_LIST_HEAD(&mcf_edma->dma_dev.channels);
194 for (i = 0; i < mcf_edma->n_chans; i++) {
195 struct fsl_edma_chan *mcf_chan = &mcf_edma->chans[i];
196
197 mcf_chan->edma = mcf_edma;
198 mcf_chan->slave_id = i;
199 mcf_chan->idle = true;
200 mcf_chan->dma_dir = DMA_NONE;
201 mcf_chan->vchan.desc_free = fsl_edma_free_desc;
202 vchan_init(&mcf_chan->vchan, &mcf_edma->dma_dev);
203 mcf_chan->tcd = mcf_edma->membase + EDMA_TCD
204 + i * sizeof(struct fsl_edma_hw_tcd);
> 205 iowrite32(0x0, &((struct fsl_edma_hw_tcd *)mcf_chan->tcd)->csr);
206 }
207
208 iowrite32(~0, regs->inth);
209 iowrite32(~0, regs->intl);
210
211 ret = mcf_edma->drvdata->setup_irq(pdev, mcf_edma);
212 if (ret)
213 return ret;
214
215 dma_cap_set(DMA_PRIVATE, mcf_edma->dma_dev.cap_mask);
216 dma_cap_set(DMA_SLAVE, mcf_edma->dma_dev.cap_mask);
217 dma_cap_set(DMA_CYCLIC, mcf_edma->dma_dev.cap_mask);
218
219 mcf_edma->dma_dev.dev = &pdev->dev;
220 mcf_edma->dma_dev.device_alloc_chan_resources =
221 fsl_edma_alloc_chan_resources;
222 mcf_edma->dma_dev.device_free_chan_resources =
223 fsl_edma_free_chan_resources;
224 mcf_edma->dma_dev.device_config = fsl_edma_slave_config;
225 mcf_edma->dma_dev.device_prep_dma_cyclic =
226 fsl_edma_prep_dma_cyclic;
227 mcf_edma->dma_dev.device_prep_slave_sg = fsl_edma_prep_slave_sg;
228 mcf_edma->dma_dev.device_tx_status = fsl_edma_tx_status;
229 mcf_edma->dma_dev.device_pause = fsl_edma_pause;
230 mcf_edma->dma_dev.device_resume = fsl_edma_resume;
231 mcf_edma->dma_dev.device_terminate_all = fsl_edma_terminate_all;
232 mcf_edma->dma_dev.device_issue_pending = fsl_edma_issue_pending;
233
234 mcf_edma->dma_dev.src_addr_widths = FSL_EDMA_BUSWIDTHS;
235 mcf_edma->dma_dev.dst_addr_widths = FSL_EDMA_BUSWIDTHS;
236 mcf_edma->dma_dev.directions =
237 BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
238
239 mcf_edma->dma_dev.filter.fn = mcf_edma_filter_fn;
240 mcf_edma->dma_dev.filter.map = pdata->slave_map;
241 mcf_edma->dma_dev.filter.mapcnt = pdata->slavecnt;
242
243 platform_set_drvdata(pdev, mcf_edma);
244
245 ret = dma_async_device_register(&mcf_edma->dma_dev);
246 if (ret) {
247 dev_err(&pdev->dev,
248 "Can't register Freescale eDMA engine. (%d)\n", ret);
249 return ret;
250 }
251
252 /* Enable round robin arbitration */
253 iowrite32(EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr);
254
255 return 0;
256 }
257
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95
2023-11-16 22:27 ` [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95 Frank Li
@ 2023-11-17 23:03 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2023-11-17 23:03 UTC (permalink / raw)
To: Frank Li, vkoul
Cc: oe-kbuild-all, devicetree, dmaengine, imx, joy.zou,
krzysztof.kozlowski+dt, linux-kernel, peng.fan, robh+dt,
shenwei.wang
Hi Frank,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on linus/master v6.7-rc1 next-20231117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-edma-involve-help-macro-fsl_edma_set-get-_tcd/20231117-062946
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20231116222743.2984776-6-Frank.Li%40nxp.com
patch subject: [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95
config: x86_64-randconfig-r113-20231117 (https://download.01.org/0day-ci/archive/20231118/202311180609.osug47KZ-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231118/202311180609.osug47KZ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311180609.osug47KZ-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/dma/fsl-edma-main.c:59:16: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:63:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-main.c:554:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:554:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:554:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-main.c:676:17: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le16 * @@
drivers/dma/fsl-edma-main.c:676:17: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-main.c:676:17: sparse: got restricted __le16 *
--
drivers/dma/fsl-edma-common.c:76:15: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:93:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:104:15: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:106:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:131:19: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:140:9: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast from restricted __le32
>> drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast to restricted __le64
drivers/dma/fsl-edma-common.c:361:26: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast to restricted __le32
drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast to restricted __le64
drivers/dma/fsl-edma-common.c:364:33: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/fsl-edma-common.c:373:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:373:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:373:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:374:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:374:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:374:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:376:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:376:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:376:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le32 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le32 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: cast removes address space '__iomem' of expression
drivers/dma/fsl-edma-common.c:377:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got restricted __le64 * @@
drivers/dma/fsl-edma-common.c:377:36: sparse: expected void [noderef] __iomem *addr
drivers/dma/fsl-edma-common.c:377:36: sparse: got restricted __le64 *
drivers/dma/fsl-edma-common.c:383:26: sparse: sparse: cast to restricted __le16
drivers/dma/fsl-edma-common.c:383:26: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:383:26: sparse: sparse: cast to restricted __le64
drivers/dma/fsl-edma-common.c:383:26: sparse: sparse: cast from restricted __le32
drivers/dma/fsl-edma-common.c:387:33: sparse: sparse: cast to restricted __le32
drivers/dma/fsl-edma-common.c:387:33: sparse: sparse: cast from restricted __le16
drivers/dma/fsl-edma-common.c:387:33: sparse: sparse: cast to restricted __le64
drivers/dma/fsl-edma-common.c:387:33: sparse: sparse: cast from restricted __le16
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le64 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le32 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le64 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le32 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le64 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le32 degrades to integer
drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: cast to restricted __le16
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le64 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le32 degrades to integer
drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: cast to restricted __le32
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le64 degrades to integer
>> drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: restricted __le32 degrades to integer
drivers/dma/fsl-edma-common.c:390:36: sparse: sparse: cast to restricted __le64
drivers/dma/fsl-edma-common.c:392:36: sparse: sparse: too many warnings
vim +554 drivers/dma/fsl-edma-main.c
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 427
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 428 static int fsl_edma_probe(struct platform_device *pdev)
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 429 {
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 430 struct device_node *np = pdev->dev.of_node;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 431 struct fsl_edma_engine *fsl_edma;
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 432 const struct fsl_edma_drvdata *drvdata = NULL;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 433 u32 chan_mask[2] = {0, 0};
377eaf3b3c4ad7 drivers/dma/fsl-edma.c Angelo Dureghello 2018-08-19 434 struct edma_regs *regs;
33a0b734543ed5 drivers/dma/fsl-edma.c Yu Liao 2023-08-21 435 int chans;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 436 int ret, i;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 437
a67ba97dfb3048 drivers/dma/fsl-edma-main.c Rob Herring 2023-10-06 438 drvdata = device_get_match_data(&pdev->dev);
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 439 if (!drvdata) {
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 440 dev_err(&pdev->dev, "unable to find driver data\n");
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 441 return -EINVAL;
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 442 }
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 443
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 444 ret = of_property_read_u32(np, "dma-channels", &chans);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 445 if (ret) {
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 446 dev_err(&pdev->dev, "Can't get dma-channels.\n");
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 447 return ret;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 448 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 449
33a0b734543ed5 drivers/dma/fsl-edma.c Yu Liao 2023-08-21 450 fsl_edma = devm_kzalloc(&pdev->dev, struct_size(fsl_edma, chans, chans),
33a0b734543ed5 drivers/dma/fsl-edma.c Yu Liao 2023-08-21 451 GFP_KERNEL);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 452 if (!fsl_edma)
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 453 return -ENOMEM;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 454
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 455 fsl_edma->drvdata = drvdata;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 456 fsl_edma->n_chans = chans;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 457 mutex_init(&fsl_edma->fsl_edma_mutex);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 458
4b23603a251d24 drivers/dma/fsl-edma.c Tudor Ambarus 2022-11-10 459 fsl_edma->membase = devm_platform_ioremap_resource(pdev, 0);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 460 if (IS_ERR(fsl_edma->membase))
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 461 return PTR_ERR(fsl_edma->membase);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 462
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 463 if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)) {
377eaf3b3c4ad7 drivers/dma/fsl-edma.c Angelo Dureghello 2018-08-19 464 fsl_edma_setup_regs(fsl_edma);
377eaf3b3c4ad7 drivers/dma/fsl-edma.c Angelo Dureghello 2018-08-19 465 regs = &fsl_edma->regs;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 466 }
377eaf3b3c4ad7 drivers/dma/fsl-edma.c Angelo Dureghello 2018-08-19 467
9e006b243962a4 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 468 if (drvdata->flags & FSL_EDMA_DRV_HAS_DMACLK) {
a9903de3aa1673 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 469 fsl_edma->dmaclk = devm_clk_get_enabled(&pdev->dev, "dma");
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 470 if (IS_ERR(fsl_edma->dmaclk)) {
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 471 dev_err(&pdev->dev, "Missing DMA block clock.\n");
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 472 return PTR_ERR(fsl_edma->dmaclk);
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 473 }
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 474 }
232a7f18cf8ecb drivers/dma/fsl-edma.c Robin Gong 2019-07-24 475
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 476 if (drvdata->flags & FSL_EDMA_DRV_HAS_CHCLK) {
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 477 fsl_edma->chclk = devm_clk_get_enabled(&pdev->dev, "mp");
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 478 if (IS_ERR(fsl_edma->chclk)) {
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 479 dev_err(&pdev->dev, "Missing MP block clock.\n");
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 480 return PTR_ERR(fsl_edma->chclk);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 481 }
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 482 }
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 483
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 484 ret = of_property_read_variable_u32_array(np, "dma-channel-mask", chan_mask, 1, 2);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 485
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 486 if (ret > 0) {
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 487 fsl_edma->chan_masked = chan_mask[1];
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 488 fsl_edma->chan_masked <<= 32;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 489 fsl_edma->chan_masked |= chan_mask[0];
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 490 }
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 491
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 492 for (i = 0; i < fsl_edma->drvdata->dmamuxs; i++) {
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 493 char clkname[32];
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 494
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 495 /* eDMAv3 mux register move to TCD area if ch_mux exist */
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 496 if (drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 497 break;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 498
4b23603a251d24 drivers/dma/fsl-edma.c Tudor Ambarus 2022-11-10 499 fsl_edma->muxbase[i] = devm_platform_ioremap_resource(pdev,
4b23603a251d24 drivers/dma/fsl-edma.c Tudor Ambarus 2022-11-10 500 1 + i);
2610acf46b9ed5 drivers/dma/fsl-edma.c Andreas Platschek 2017-12-14 501 if (IS_ERR(fsl_edma->muxbase[i])) {
2610acf46b9ed5 drivers/dma/fsl-edma.c Andreas Platschek 2017-12-14 502 /* on error: disable all previously enabled clks */
2610acf46b9ed5 drivers/dma/fsl-edma.c Andreas Platschek 2017-12-14 503 fsl_disable_clocks(fsl_edma, i);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 504 return PTR_ERR(fsl_edma->muxbase[i]);
2610acf46b9ed5 drivers/dma/fsl-edma.c Andreas Platschek 2017-12-14 505 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 506
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 507 sprintf(clkname, "dmamux%d", i);
a9903de3aa1673 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 508 fsl_edma->muxclk[i] = devm_clk_get_enabled(&pdev->dev, clkname);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 509 if (IS_ERR(fsl_edma->muxclk[i])) {
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 510 dev_err(&pdev->dev, "Missing DMAMUX block clock.\n");
2610acf46b9ed5 drivers/dma/fsl-edma.c Andreas Platschek 2017-12-14 511 /* on error: disable all previously enabled clks */
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 512 return PTR_ERR(fsl_edma->muxclk[i]);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 513 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 514 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 515
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 516 fsl_edma->big_endian = of_property_read_bool(np, "big-endian");
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 517
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 518 if (drvdata->flags & FSL_EDMA_DRV_HAS_PD) {
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 519 ret = fsl_edma3_attach_pd(pdev, fsl_edma);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 520 if (ret)
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 521 return ret;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 522 }
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 523
718250845ce432 drivers/dma/fsl-edma-main.c Frank Li 2023-11-16 524 if (drvdata->flags & FSL_EDMA_DRV_TCD64)
718250845ce432 drivers/dma/fsl-edma-main.c Frank Li 2023-11-16 525 dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
718250845ce432 drivers/dma/fsl-edma-main.c Frank Li 2023-11-16 526
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 527 INIT_LIST_HEAD(&fsl_edma->dma_dev.channels);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 528 for (i = 0; i < fsl_edma->n_chans; i++) {
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 529 struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i];
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 530 int len;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 531
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 532 if (fsl_edma->chan_masked & BIT(i))
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 533 continue;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 534
9b05554c5ca682 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 535 snprintf(fsl_chan->chan_name, sizeof(fsl_chan->chan_name), "%s-CH%02d",
9b05554c5ca682 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 536 dev_name(&pdev->dev), i);
9b05554c5ca682 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 537
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 538 fsl_chan->edma = fsl_edma;
82d149b86d31e1 drivers/dma/fsl-edma.c Yuan Yao 2015-10-30 539 fsl_chan->pm_state = RUNNING;
82d149b86d31e1 drivers/dma/fsl-edma.c Yuan Yao 2015-10-30 540 fsl_chan->slave_id = 0;
82d149b86d31e1 drivers/dma/fsl-edma.c Yuan Yao 2015-10-30 541 fsl_chan->idle = true;
0fa89f972da607 drivers/dma/fsl-edma.c Laurentiu Tudor 2019-01-18 542 fsl_chan->dma_dir = DMA_NONE;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 543 fsl_chan->vchan.desc_free = fsl_edma_free_desc;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 544
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 545 len = (drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) ?
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 546 offsetof(struct fsl_edma3_ch_reg, tcd) : 0;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 547 fsl_chan->tcd = fsl_edma->membase
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 548 + i * drvdata->chreg_space_sz + drvdata->chreg_off + len;
9dc1dc9f63c698 drivers/dma/fsl-edma-main.c Frank Li 2023-11-16 549 fsl_chan->mux_addr = fsl_edma->membase + drvdata->mux_off + i * drvdata->mux_skip;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 550
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 551 fsl_chan->pdev = pdev;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 552 vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 553
7536f8b371adcc drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 @554 edma_write_tcdreg(fsl_chan, 0, csr);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 555 fsl_edma_chan_mux(fsl_chan, 0, false);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 556 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 557
af802728e4ab07 drivers/dma/fsl-edma.c Robin Gong 2019-06-25 558 ret = fsl_edma->drvdata->setup_irq(pdev, fsl_edma);
0fe25d61102d44 drivers/dma/fsl-edma.c Stefan Agner 2015-06-07 559 if (ret)
0fe25d61102d44 drivers/dma/fsl-edma.c Stefan Agner 2015-06-07 560 return ret;
0fe25d61102d44 drivers/dma/fsl-edma.c Stefan Agner 2015-06-07 561
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 562 dma_cap_set(DMA_PRIVATE, fsl_edma->dma_dev.cap_mask);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 563 dma_cap_set(DMA_SLAVE, fsl_edma->dma_dev.cap_mask);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 564 dma_cap_set(DMA_CYCLIC, fsl_edma->dma_dev.cap_mask);
e0674853943287 drivers/dma/fsl-edma.c Joy Zou 2021-10-26 565 dma_cap_set(DMA_MEMCPY, fsl_edma->dma_dev.cap_mask);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 566
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 567 fsl_edma->dma_dev.dev = &pdev->dev;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 568 fsl_edma->dma_dev.device_alloc_chan_resources
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 569 = fsl_edma_alloc_chan_resources;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 570 fsl_edma->dma_dev.device_free_chan_resources
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 571 = fsl_edma_free_chan_resources;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 572 fsl_edma->dma_dev.device_tx_status = fsl_edma_tx_status;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 573 fsl_edma->dma_dev.device_prep_slave_sg = fsl_edma_prep_slave_sg;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 574 fsl_edma->dma_dev.device_prep_dma_cyclic = fsl_edma_prep_dma_cyclic;
e0674853943287 drivers/dma/fsl-edma.c Joy Zou 2021-10-26 575 fsl_edma->dma_dev.device_prep_dma_memcpy = fsl_edma_prep_memcpy;
d80f381f321ab7 drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 576 fsl_edma->dma_dev.device_config = fsl_edma_slave_config;
d80f381f321ab7 drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 577 fsl_edma->dma_dev.device_pause = fsl_edma_pause;
d80f381f321ab7 drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 578 fsl_edma->dma_dev.device_resume = fsl_edma_resume;
d80f381f321ab7 drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 579 fsl_edma->dma_dev.device_terminate_all = fsl_edma_terminate_all;
ba1cab79cfc629 drivers/dma/fsl-edma.c Andrey Smirnov 2019-07-31 580 fsl_edma->dma_dev.device_synchronize = fsl_edma_synchronize;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 581 fsl_edma->dma_dev.device_issue_pending = fsl_edma_issue_pending;
f45c431148e1ba drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 582
f45c431148e1ba drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 583 fsl_edma->dma_dev.src_addr_widths = FSL_EDMA_BUSWIDTHS;
f45c431148e1ba drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 584 fsl_edma->dma_dev.dst_addr_widths = FSL_EDMA_BUSWIDTHS;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 585
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 586 if (drvdata->flags & FSL_EDMA_DRV_BUS_8BYTE) {
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 587 fsl_edma->dma_dev.src_addr_widths |= BIT(DMA_SLAVE_BUSWIDTH_8_BYTES);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 588 fsl_edma->dma_dev.dst_addr_widths |= BIT(DMA_SLAVE_BUSWIDTH_8_BYTES);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 589 }
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 590
f45c431148e1ba drivers/dma/fsl-edma.c Maxime Ripard 2014-11-17 591 fsl_edma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 592 if (drvdata->flags & FSL_EDMA_DRV_DEV_TO_DEV)
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 593 fsl_edma->dma_dev.directions |= BIT(DMA_DEV_TO_DEV);
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 594
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 595 fsl_edma->dma_dev.copy_align = drvdata->flags & FSL_EDMA_DRV_ALIGN_64BYTE ?
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 596 DMAENGINE_ALIGN_64_BYTES :
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 597 DMAENGINE_ALIGN_32_BYTES;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 598
e0674853943287 drivers/dma/fsl-edma.c Joy Zou 2021-10-26 599 /* Per worst case 'nbytes = 1' take CITER as the max_seg_size */
e0674853943287 drivers/dma/fsl-edma.c Joy Zou 2021-10-26 600 dma_set_max_seg_size(fsl_edma->dma_dev.dev, 0x3fff);
e0674853943287 drivers/dma/fsl-edma.c Joy Zou 2021-10-26 601
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 602 fsl_edma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT;
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 603
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 604 platform_set_drvdata(pdev, fsl_edma);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 605
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 606 ret = dma_async_device_register(&fsl_edma->dma_dev);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 607 if (ret) {
a86144da9d1a43 drivers/dma/fsl-edma.c Peter Griffin 2016-06-07 608 dev_err(&pdev->dev,
a86144da9d1a43 drivers/dma/fsl-edma.c Peter Griffin 2016-06-07 609 "Can't register Freescale eDMA engine. (%d)\n", ret);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 610 return ret;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 611 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 612
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 613 ret = of_dma_controller_register(np,
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 614 drvdata->flags & FSL_EDMA_DRV_SPLIT_REG ? fsl_edma3_xlate : fsl_edma_xlate,
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 615 fsl_edma);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 616 if (ret) {
a86144da9d1a43 drivers/dma/fsl-edma.c Peter Griffin 2016-06-07 617 dev_err(&pdev->dev,
a86144da9d1a43 drivers/dma/fsl-edma.c Peter Griffin 2016-06-07 618 "Can't register Freescale eDMA of_dma. (%d)\n", ret);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 619 dma_async_device_unregister(&fsl_edma->dma_dev);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 620 return ret;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 621 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 622
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 623 /* enable round robin arbitration */
72f5801a4e2b71 drivers/dma/fsl-edma-main.c Frank Li 2023-08-21 624 if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG))
377eaf3b3c4ad7 drivers/dma/fsl-edma.c Angelo Dureghello 2018-08-19 625 edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr);
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 626
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 627 return 0;
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 628 }
d6be34fbd39b7d drivers/dma/fsl-edma.c Jingchang Lu 2014-02-18 629
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer
2023-11-16 22:27 ` [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer Frank Li
2023-11-17 21:38 ` kernel test robot
@ 2023-11-19 23:52 ` kernel test robot
1 sibling, 0 replies; 10+ messages in thread
From: kernel test robot @ 2023-11-19 23:52 UTC (permalink / raw)
To: Frank Li, vkoul
Cc: oe-kbuild-all, devicetree, dmaengine, imx, joy.zou,
krzysztof.kozlowski+dt, linux-kernel, peng.fan, robh+dt,
shenwei.wang
Hi Frank,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on linus/master v6.7-rc1 next-20231117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-edma-involve-help-macro-fsl_edma_set-get-_tcd/20231117-062946
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20231116222743.2984776-4-Frank.Li%40nxp.com
patch subject: [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer
config: hexagon-randconfig-r121-20231119 (https://download.01.org/0day-ci/archive/20231120/202311200733.Dq7bx5cj-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20231120/202311200733.Dq7bx5cj-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311200733.Dq7bx5cj-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/dma/mcf-edma-main.c:205:35: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/dma/mcf-edma-main.c:205:35: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got restricted __le16 * @@
drivers/dma/mcf-edma-main.c:205:35: sparse: expected void [noderef] __iomem *
drivers/dma/mcf-edma-main.c:205:35: sparse: got restricted __le16 *
drivers/dma/mcf-edma-main.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/umh.h, include/linux/kmod.h, ...):
include/linux/page-flags.h:242:46: sparse: sparse: self-comparison always evaluates to false
vim +205 drivers/dma/mcf-edma-main.c
152
153 static int mcf_edma_probe(struct platform_device *pdev)
154 {
155 struct mcf_edma_platform_data *pdata;
156 struct fsl_edma_engine *mcf_edma;
157 struct edma_regs *regs;
158 int ret, i, chans;
159
160 pdata = dev_get_platdata(&pdev->dev);
161 if (!pdata) {
162 dev_err(&pdev->dev, "no platform data supplied\n");
163 return -EINVAL;
164 }
165
166 if (!pdata->dma_channels) {
167 dev_info(&pdev->dev, "setting default channel number to 64");
168 chans = 64;
169 } else {
170 chans = pdata->dma_channels;
171 }
172
173 mcf_edma = devm_kzalloc(&pdev->dev, struct_size(mcf_edma, chans, chans),
174 GFP_KERNEL);
175 if (!mcf_edma)
176 return -ENOMEM;
177
178 mcf_edma->n_chans = chans;
179
180 /* Set up drvdata for ColdFire edma */
181 mcf_edma->drvdata = &mcf_data;
182 mcf_edma->big_endian = 1;
183
184 mutex_init(&mcf_edma->fsl_edma_mutex);
185
186 mcf_edma->membase = devm_platform_ioremap_resource(pdev, 0);
187 if (IS_ERR(mcf_edma->membase))
188 return PTR_ERR(mcf_edma->membase);
189
190 fsl_edma_setup_regs(mcf_edma);
191 regs = &mcf_edma->regs;
192
193 INIT_LIST_HEAD(&mcf_edma->dma_dev.channels);
194 for (i = 0; i < mcf_edma->n_chans; i++) {
195 struct fsl_edma_chan *mcf_chan = &mcf_edma->chans[i];
196
197 mcf_chan->edma = mcf_edma;
198 mcf_chan->slave_id = i;
199 mcf_chan->idle = true;
200 mcf_chan->dma_dir = DMA_NONE;
201 mcf_chan->vchan.desc_free = fsl_edma_free_desc;
202 vchan_init(&mcf_chan->vchan, &mcf_edma->dma_dev);
203 mcf_chan->tcd = mcf_edma->membase + EDMA_TCD
204 + i * sizeof(struct fsl_edma_hw_tcd);
> 205 iowrite32(0x0, &((struct fsl_edma_hw_tcd *)mcf_chan->tcd)->csr);
206 }
207
208 iowrite32(~0, regs->inth);
209 iowrite32(~0, regs->intl);
210
211 ret = mcf_edma->drvdata->setup_irq(pdev, mcf_edma);
212 if (ret)
213 return ret;
214
215 dma_cap_set(DMA_PRIVATE, mcf_edma->dma_dev.cap_mask);
216 dma_cap_set(DMA_SLAVE, mcf_edma->dma_dev.cap_mask);
217 dma_cap_set(DMA_CYCLIC, mcf_edma->dma_dev.cap_mask);
218
219 mcf_edma->dma_dev.dev = &pdev->dev;
220 mcf_edma->dma_dev.device_alloc_chan_resources =
221 fsl_edma_alloc_chan_resources;
222 mcf_edma->dma_dev.device_free_chan_resources =
223 fsl_edma_free_chan_resources;
224 mcf_edma->dma_dev.device_config = fsl_edma_slave_config;
225 mcf_edma->dma_dev.device_prep_dma_cyclic =
226 fsl_edma_prep_dma_cyclic;
227 mcf_edma->dma_dev.device_prep_slave_sg = fsl_edma_prep_slave_sg;
228 mcf_edma->dma_dev.device_tx_status = fsl_edma_tx_status;
229 mcf_edma->dma_dev.device_pause = fsl_edma_pause;
230 mcf_edma->dma_dev.device_resume = fsl_edma_resume;
231 mcf_edma->dma_dev.device_terminate_all = fsl_edma_terminate_all;
232 mcf_edma->dma_dev.device_issue_pending = fsl_edma_issue_pending;
233
234 mcf_edma->dma_dev.src_addr_widths = FSL_EDMA_BUSWIDTHS;
235 mcf_edma->dma_dev.dst_addr_widths = FSL_EDMA_BUSWIDTHS;
236 mcf_edma->dma_dev.directions =
237 BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
238
239 mcf_edma->dma_dev.filter.fn = mcf_edma_filter_fn;
240 mcf_edma->dma_dev.filter.map = pdata->slave_map;
241 mcf_edma->dma_dev.filter.mapcnt = pdata->slavecnt;
242
243 platform_set_drvdata(pdev, mcf_edma);
244
245 ret = dma_async_device_register(&mcf_edma->dma_dev);
246 if (ret) {
247 dev_err(&pdev->dev,
248 "Can't register Freescale eDMA engine. (%d)\n", ret);
249 return ret;
250 }
251
252 /* Enable round robin arbitration */
253 iowrite32(EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr);
254
255 return 0;
256 }
257
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-11-20 0:04 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-16 22:27 [PATCH v2 0/5] dmaengine: fsl-edma: integrate TCD64 support for 64bit physical address Frank Li
2023-11-16 22:27 ` [PATCH v2 1/5] dmaengine: fsl-edma: involve help macro fsl_edma_set(get)_tcd() Frank Li
2023-11-17 19:50 ` kernel test robot
2023-11-16 22:27 ` [PATCH v2 2/5] dmaengine: fsl-edma: add address for channel mux register in fsl_edma_chan Frank Li
2023-11-16 22:27 ` [PATCH v2 3/5] dmaengine: mcf-edma: force type conversion for TCD pointer Frank Li
2023-11-17 21:38 ` kernel test robot
2023-11-19 23:52 ` kernel test robot
2023-11-16 22:27 ` [PATCH v2 4/5] dt-bindings: fsl-dma: fsl-edma: add fsl,imx95-edma5 compatible string Frank Li
2023-11-16 22:27 ` [PATCH v2 5/5] dmaengine: fsl-edma: integrate TCD64 support for i.MX95 Frank Li
2023-11-17 23:03 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).