* [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage
@ 2018-10-09 8:00 Angelo Dureghello
0 siblings, 0 replies; 4+ messages in thread
From: Angelo Dureghello @ 2018-10-09 8:00 UTC (permalink / raw)
To: Vinod; +Cc: Krzysztof Kozlowski, dmaengine
Hi Vinod,
On Tue, Oct 09, 2018 at 01:00:01PM +0530, Vinod wrote:
> On 09-10-18, 09:22, Krzysztof Kozlowski wrote:
> > On Sun, 7 Oct 2018 at 16:15, Vinod Koul <vkoul@kernel.org> wrote:
> > >
> > > dma_slave_config direction was marked as deprecated quite some
> > > time back, remove the usage from this driver so that the field
> > > can be removed
> > >
> > > Signed-off-by: Vinod Koul <vkoul@kernel.org>
> > > ---
> > > CC: Angelo Dureghello <angelo@sysam.it>
> > > CC: Krzysztof Kozlowski <krzk@kernel.org>
> > >
> > > Angelo, Krzysztof,
> > >
> > > I have rebased this against the latest fsl-edma changes, can you
> > > please verify this and let me know, thnx
> >
> > I applied it on top of linux next (20181008) and compilation fails:
> >
> > ../drivers/i2c/busses/i2c-imx.c: In function ‘i2c_imx_dma_request’:
> > ../drivers/i2c/busses/i2c-imx.c:298:13: error: ‘struct
> > dma_slave_config’ has no member named ‘direction’
> > dma_sconfig.direction = DMA_MEM_TO_DEV;
> > ^
> > ../drivers/i2c/busses/i2c-imx.c:315:13: error: ‘struct
> > dma_slave_config’ has no member named ‘direction’
> > dma_sconfig.direction = DMA_DEV_TO_MEM;
> > ^
> >
> > ../drivers/mmc/host/mmci.c: In function ‘__mmci_dma_prep_data’:
> > ../drivers/mmc/host/mmci.c:578:7: error: ‘struct dma_slave_config’ has
> > no member named ‘direction’
> > conf.direction = DMA_DEV_TO_MEM;
> > ^
> > ../drivers/mmc/host/mmci.c:581:7: error: ‘struct dma_slave_config’ has
> > no member named ‘direction’
> > conf.direction = DMA_MEM_TO_DEV;
> > ^
> > ../drivers/mmc/host/mmci.c:604:14: error: ‘struct dma_slave_config’
> > has no member named ‘direction’
> > conf.direction, flags);
> > ^
> >
> > Am I missing some dependencies?
>
> Nope, the dmaengine.h change I used to verify removing off all instances
> has crept up in this, sorry for that.
>
> Can you remove the deletion and try again, I will post v3 as well
>
Thanks for the patch, looks like i left this out from my previous set.
I re-added direction to struct dma_slave_config and tested the patch on both
stmark2 (ColdFire mcf5441x) and Colibri VF50 with Krzysztof Kozlowski
proceq_vf_bck_defconfig + vf500-colibri-eval-v3.dtb.
At least for ColdFire DSPI + DMA, and console + DMA on Colibri, all seems
to work properly.
Tested-by: Angelo Dureghello <angelo@sysam.it>
> --
> ~Vinod
Regards,
Angelo
^ permalink raw reply [flat|nested] 4+ messages in thread
* [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage
@ 2018-10-09 7:30 Vinod Koul
0 siblings, 0 replies; 4+ messages in thread
From: Vinod Koul @ 2018-10-09 7:30 UTC (permalink / raw)
To: Krzysztof Kozlowski; +Cc: dmaengine, angelo
On 09-10-18, 09:22, Krzysztof Kozlowski wrote:
> On Sun, 7 Oct 2018 at 16:15, Vinod Koul <vkoul@kernel.org> wrote:
> >
> > dma_slave_config direction was marked as deprecated quite some
> > time back, remove the usage from this driver so that the field
> > can be removed
> >
> > Signed-off-by: Vinod Koul <vkoul@kernel.org>
> > ---
> > CC: Angelo Dureghello <angelo@sysam.it>
> > CC: Krzysztof Kozlowski <krzk@kernel.org>
> >
> > Angelo, Krzysztof,
> >
> > I have rebased this against the latest fsl-edma changes, can you
> > please verify this and let me know, thnx
>
> I applied it on top of linux next (20181008) and compilation fails:
>
> ../drivers/i2c/busses/i2c-imx.c: In function ‘i2c_imx_dma_request’:
> ../drivers/i2c/busses/i2c-imx.c:298:13: error: ‘struct
> dma_slave_config’ has no member named ‘direction’
> dma_sconfig.direction = DMA_MEM_TO_DEV;
> ^
> ../drivers/i2c/busses/i2c-imx.c:315:13: error: ‘struct
> dma_slave_config’ has no member named ‘direction’
> dma_sconfig.direction = DMA_DEV_TO_MEM;
> ^
>
> ../drivers/mmc/host/mmci.c: In function ‘__mmci_dma_prep_data’:
> ../drivers/mmc/host/mmci.c:578:7: error: ‘struct dma_slave_config’ has
> no member named ‘direction’
> conf.direction = DMA_DEV_TO_MEM;
> ^
> ../drivers/mmc/host/mmci.c:581:7: error: ‘struct dma_slave_config’ has
> no member named ‘direction’
> conf.direction = DMA_MEM_TO_DEV;
> ^
> ../drivers/mmc/host/mmci.c:604:14: error: ‘struct dma_slave_config’
> has no member named ‘direction’
> conf.direction, flags);
> ^
>
> Am I missing some dependencies?
Nope, the dmaengine.h change I used to verify removing off all instances
has crept up in this, sorry for that.
Can you remove the deletion and try again, I will post v3 as well
^ permalink raw reply [flat|nested] 4+ messages in thread
* [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage
@ 2018-10-09 7:22 Krzysztof Kozlowski
0 siblings, 0 replies; 4+ messages in thread
From: Krzysztof Kozlowski @ 2018-10-09 7:22 UTC (permalink / raw)
To: vkoul; +Cc: dmaengine, angelo
On Sun, 7 Oct 2018 at 16:15, Vinod Koul <vkoul@kernel.org> wrote:
>
> dma_slave_config direction was marked as deprecated quite some
> time back, remove the usage from this driver so that the field
> can be removed
>
> Signed-off-by: Vinod Koul <vkoul@kernel.org>
> ---
> CC: Angelo Dureghello <angelo@sysam.it>
> CC: Krzysztof Kozlowski <krzk@kernel.org>
>
> Angelo, Krzysztof,
>
> I have rebased this against the latest fsl-edma changes, can you
> please verify this and let me know, thnx
I applied it on top of linux next (20181008) and compilation fails:
../drivers/i2c/busses/i2c-imx.c: In function ‘i2c_imx_dma_request’:
../drivers/i2c/busses/i2c-imx.c:298:13: error: ‘struct
dma_slave_config’ has no member named ‘direction’
dma_sconfig.direction = DMA_MEM_TO_DEV;
^
../drivers/i2c/busses/i2c-imx.c:315:13: error: ‘struct
dma_slave_config’ has no member named ‘direction’
dma_sconfig.direction = DMA_DEV_TO_MEM;
^
../drivers/mmc/host/mmci.c: In function ‘__mmci_dma_prep_data’:
../drivers/mmc/host/mmci.c:578:7: error: ‘struct dma_slave_config’ has
no member named ‘direction’
conf.direction = DMA_DEV_TO_MEM;
^
../drivers/mmc/host/mmci.c:581:7: error: ‘struct dma_slave_config’ has
no member named ‘direction’
conf.direction = DMA_MEM_TO_DEV;
^
../drivers/mmc/host/mmci.c:604:14: error: ‘struct dma_slave_config’
has no member named ‘direction’
conf.direction, flags);
^
Am I missing some dependencies?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 4+ messages in thread
* [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage
@ 2018-10-07 14:14 Vinod Koul
0 siblings, 0 replies; 4+ messages in thread
From: Vinod Koul @ 2018-10-07 14:14 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Angelo Dureghello, Krzysztof Kozlowski
dma_slave_config direction was marked as deprecated quite some
time back, remove the usage from this driver so that the field
can be removed
Signed-off-by: Vinod Koul <vkoul@kernel.org>
---
CC: Angelo Dureghello <angelo@sysam.it>
CC: Krzysztof Kozlowski <krzk@kernel.org>
Angelo, Krzysztof,
I have rebased this against the latest fsl-edma changes, can you
please verify this and let me know, thnx
drivers/dma/fsl-edma-common.c | 74 +++++++++++++++++++++++++------------------
drivers/dma/fsl-edma-common.h | 12 ++-----
include/linux/dmaengine.h | 1 -
3 files changed, 46 insertions(+), 41 deletions(-)
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index 8ba80f4b6f55..8876c4c1bb2c 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -178,19 +178,7 @@ int fsl_edma_slave_config(struct dma_chan *chan,
{
struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
- fsl_chan->fsc.dir = cfg->direction;
- if (cfg->direction == DMA_DEV_TO_MEM) {
- fsl_chan->fsc.dev_addr = cfg->src_addr;
- fsl_chan->fsc.addr_width = cfg->src_addr_width;
- fsl_chan->fsc.burst = cfg->src_maxburst;
- fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg->src_addr_width);
- } else if (cfg->direction == DMA_MEM_TO_DEV) {
- fsl_chan->fsc.dev_addr = cfg->dst_addr;
- fsl_chan->fsc.addr_width = cfg->dst_addr_width;
- fsl_chan->fsc.burst = cfg->dst_maxburst;
- fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg->dst_addr_width);
- } else
- return -EINVAL;
+ memcpy(&fsl_chan->cfg, cfg, sizeof(*cfg));
return 0;
}
@@ -202,7 +190,7 @@ static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan,
struct fsl_edma_desc *edesc = fsl_chan->edesc;
struct edma_regs *regs = &fsl_chan->edma->regs;
u32 ch = fsl_chan->vchan.chan.chan_id;
- enum dma_transfer_direction dir = fsl_chan->fsc.dir;
+ enum dma_transfer_direction dir = edesc->dirn;
dma_addr_t cur_addr, dma_addr;
size_t len, size;
int i;
@@ -387,7 +375,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
u32 src_addr, dst_addr, last_sg, nbytes;
u16 soff, doff, iter;
- if (!is_slave_direction(fsl_chan->fsc.dir))
+ if (!is_slave_direction(direction))
return NULL;
sg_len = buf_len / period_len;
@@ -395,9 +383,21 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
if (!fsl_desc)
return NULL;
fsl_desc->iscyclic = true;
+ fsl_desc->dirn = direction;
dma_buf_next = dma_addr;
- nbytes = fsl_chan->fsc.addr_width * fsl_chan->fsc.burst;
+ if (direction == DMA_MEM_TO_DEV) {
+ fsl_chan->attr =
+ fsl_edma_get_tcd_attr(fsl_chan->cfg.dst_addr_width);
+ nbytes = fsl_chan->cfg.dst_addr_width *
+ fsl_chan->cfg.dst_maxburst;
+ } else {
+ fsl_chan->attr =
+ fsl_edma_get_tcd_attr(fsl_chan->cfg.src_addr_width);
+ nbytes = fsl_chan->cfg.src_addr_width *
+ fsl_chan->cfg.src_maxburst;
+ }
+
iter = period_len / nbytes;
for (i = 0; i < sg_len; i++) {
@@ -407,20 +407,20 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
/* get next sg's physical address */
last_sg = fsl_desc->tcd[(i + 1) % sg_len].ptcd;
- if (fsl_chan->fsc.dir == DMA_MEM_TO_DEV) {
+ if (direction == DMA_MEM_TO_DEV) {
src_addr = dma_buf_next;
- dst_addr = fsl_chan->fsc.dev_addr;
- soff = fsl_chan->fsc.addr_width;
+ dst_addr = fsl_chan->cfg.dst_addr;
+ soff = fsl_chan->cfg.dst_addr_width;
doff = 0;
} else {
- src_addr = fsl_chan->fsc.dev_addr;
+ src_addr = fsl_chan->cfg.src_addr;
dst_addr = dma_buf_next;
soff = 0;
- doff = fsl_chan->fsc.addr_width;
+ doff = fsl_chan->cfg.src_addr_width;
}
fsl_edma_fill_tcd(fsl_desc->tcd[i].vtcd, src_addr, dst_addr,
- fsl_chan->fsc.attr, soff, nbytes, 0, iter,
+ fsl_chan->attr, soff, nbytes, 0, iter,
iter, doff, last_sg, true, false, true);
dma_buf_next += period_len;
}
@@ -441,42 +441,54 @@ struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg(
u16 soff, doff, iter;
int i;
- if (!is_slave_direction(fsl_chan->fsc.dir))
+ if (!is_slave_direction(direction))
return NULL;
fsl_desc = fsl_edma_alloc_desc(fsl_chan, sg_len);
if (!fsl_desc)
return NULL;
fsl_desc->iscyclic = false;
+ fsl_desc->dirn = direction;
+
+ if (direction == DMA_MEM_TO_DEV) {
+ fsl_chan->attr =
+ fsl_edma_get_tcd_attr(fsl_chan->cfg.dst_addr_width);
+ nbytes = fsl_chan->cfg.dst_addr_width *
+ fsl_chan->cfg.dst_maxburst;
+ } else {
+ fsl_chan->attr =
+ fsl_edma_get_tcd_attr(fsl_chan->cfg.src_addr_width);
+ nbytes = fsl_chan->cfg.src_addr_width *
+ fsl_chan->cfg.src_maxburst;
+ }
- nbytes = fsl_chan->fsc.addr_width * fsl_chan->fsc.burst;
for_each_sg(sgl, sg, sg_len, i) {
/* get next sg's physical address */
last_sg = fsl_desc->tcd[(i + 1) % sg_len].ptcd;
- if (fsl_chan->fsc.dir == DMA_MEM_TO_DEV) {
+ if (direction == DMA_MEM_TO_DEV) {
src_addr = sg_dma_address(sg);
- dst_addr = fsl_chan->fsc.dev_addr;
- soff = fsl_chan->fsc.addr_width;
+ dst_addr = fsl_chan->cfg.dst_addr;
+ soff = fsl_chan->cfg.dst_addr_width;
doff = 0;
} else {
- src_addr = fsl_chan->fsc.dev_addr;
+ src_addr = fsl_chan->cfg.src_addr;
dst_addr = sg_dma_address(sg);
soff = 0;
- doff = fsl_chan->fsc.addr_width;
+ doff = fsl_chan->cfg.src_addr_width;
}
iter = sg_dma_len(sg) / nbytes;
if (i < sg_len - 1) {
last_sg = fsl_desc->tcd[(i + 1)].ptcd;
fsl_edma_fill_tcd(fsl_desc->tcd[i].vtcd, src_addr,
- dst_addr, fsl_chan->fsc.attr, soff,
+ dst_addr, fsl_chan->attr, soff,
nbytes, 0, iter, iter, doff, last_sg,
false, false, true);
} else {
last_sg = 0;
fsl_edma_fill_tcd(fsl_desc->tcd[i].vtcd, src_addr,
- dst_addr, fsl_chan->fsc.attr, soff,
+ dst_addr, fsl_chan->attr, soff,
nbytes, 0, iter, iter, doff, last_sg,
true, true, false);
}
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index a6f5b99ee95f..8917e8865959 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -109,14 +109,6 @@ struct fsl_edma_sw_tcd {
struct fsl_edma_hw_tcd *vtcd;
};
-struct fsl_edma_slave_config {
- enum dma_transfer_direction dir;
- enum dma_slave_buswidth addr_width;
- u32 dev_addr;
- u32 burst;
- u32 attr;
-};
-
struct fsl_edma_chan {
struct virt_dma_chan vchan;
enum dma_status status;
@@ -125,7 +117,8 @@ struct fsl_edma_chan {
u32 slave_id;
struct fsl_edma_engine *edma;
struct fsl_edma_desc *edesc;
- struct fsl_edma_slave_config fsc;
+ struct dma_slave_config cfg;
+ u32 attr;
struct dma_pool *tcd_pool;
};
@@ -133,6 +126,7 @@ struct fsl_edma_desc {
struct virt_dma_desc vdesc;
struct fsl_edma_chan *echan;
bool iscyclic;
+ enum dma_transfer_direction dirn;
unsigned int n_tcds;
struct fsl_edma_sw_tcd tcd[];
};
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index d49ec5c31944..f158eaae0ef6 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -365,7 +365,6 @@ enum dma_slave_buswidth {
* data, then prefer to do that.
*/
struct dma_slave_config {
- enum dma_transfer_direction direction;
phys_addr_t src_addr;
phys_addr_t dst_addr;
enum dma_slave_buswidth src_addr_width;
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-10-09 8:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-09 8:00 [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage Angelo Dureghello
-- strict thread matches above, loose matches on Subject: below --
2018-10-09 7:30 Vinod Koul
2018-10-09 7:22 Krzysztof Kozlowski
2018-10-07 14:14 Vinod Koul
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.