diff mbox series

[v2] dmaengine: fsl-edma: remove dma_slave_config direction usage

Message ID 20181007141457.1137-1-vkoul@kernel.org
State Superseded
Headers show
Series [v2] dmaengine: fsl-edma: remove dma_slave_config direction usage | expand

Commit Message

Vinod Koul Oct. 7, 2018, 2:14 p.m. UTC
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(-)

-- 
2.14.4

Comments

Krzysztof Kozlowski Oct. 9, 2018, 7:22 a.m. UTC | #1
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
Vinod Koul Oct. 9, 2018, 7:30 a.m. UTC | #2
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

-- 
~Vinod
Angelo Dureghello Oct. 9, 2018, 8 a.m. UTC | #3
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
diff mbox series

Patch

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;