diff mbox

[v1,2/4] dmaengine: imx-sdma: add check_bd_buswidth() to kill the dulicated code

Message ID 1531239793-11781-3-git-send-email-yibin.gong@nxp.com (mailing list archive)
State New, archived
Headers show

Commit Message

Robin Gong July 10, 2018, 4:23 p.m. UTC
Add check_bd_buswidth() to minimize the code size.

Signed-off-by: Robin Gong <yibin.gong@nxp.com>
---
 drivers/dma/imx-sdma.c | 64 +++++++++++++++++++++++---------------------------
 1 file changed, 29 insertions(+), 35 deletions(-)

Comments

Vinod Koul July 10, 2018, 3:31 p.m. UTC | #1
On 11-07-18, 00:23, Robin Gong wrote:
> Add check_bd_buswidth() to minimize the code size.

this looks mostly fine and I think this should be first patch..

> 
> Signed-off-by: Robin Gong <yibin.gong@nxp.com>
> ---
>  drivers/dma/imx-sdma.c | 64 +++++++++++++++++++++++---------------------------
>  1 file changed, 29 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index 27ccabf..ed2267d 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -1326,6 +1326,33 @@ static struct sdma_desc *sdma_transfer_init(struct sdma_channel *sdmac,
>  	return NULL;
>  }
>  
> +static int check_bd_buswidth(struct sdma_buffer_descriptor *bd,
> +			     struct sdma_channel *sdmac, int count,
> +			     dma_addr_t dma_dst, dma_addr_t dma_src)
> +{
> +	int ret = 0;
> +
> +	switch (sdmac->word_size) {
> +	case DMA_SLAVE_BUSWIDTH_4_BYTES:
> +		bd->mode.command = 0;
> +		if ((count | dma_dst | dma_src) & 3)
> +			ret = -EINVAL;
> +		break;

empty line after each break please

> +	case DMA_SLAVE_BUSWIDTH_2_BYTES:
> +		bd->mode.command = 2;
> +		if ((count | dma_dst | dma_src) & 1)
> +			ret = -EINVAL;
> +		break;
> +	case DMA_SLAVE_BUSWIDTH_1_BYTE:
> +		 bd->mode.command = 1;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	return ret;
> +}
> +
Robin Gong July 11, 2018, 5:36 a.m. UTC | #2
> -----Original Message-----

> From: Vinod [mailto:vkoul@kernel.org]

> Sent: 2018年7月10日 23:31

> To: Robin Gong <yibin.gong@nxp.com>

> Cc: dan.j.williams@intel.com; shawnguo@kernel.org;

> s.hauer@pengutronix.de; Fabio Estevam <fabio.estevam@nxp.com>;

> linux@armlinux.org.uk; linux-arm-kernel@lists.infradead.org;

> kernel@pengutronix.de; dmaengine@vger.kernel.org;

> linux-kernel@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>

> Subject: Re: [PATCH v1 2/4] dmaengine: imx-sdma: add check_bd_buswidth() to

> kill the dulicated code

> 

> On 11-07-18, 00:23, Robin Gong wrote:

> > Add check_bd_buswidth() to minimize the code size.

> 

> this looks mostly fine and I think this should be first patch..

Since no need to check bus width in memcpy case, I'll remove this patch too.
> 

> >

> > Signed-off-by: Robin Gong <yibin.gong@nxp.com>

> > ---

> >  drivers/dma/imx-sdma.c | 64

> > +++++++++++++++++++++++---------------------------

> >  1 file changed, 29 insertions(+), 35 deletions(-)

> >

> > diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index

> > 27ccabf..ed2267d 100644

> > --- a/drivers/dma/imx-sdma.c

> > +++ b/drivers/dma/imx-sdma.c

> > @@ -1326,6 +1326,33 @@ static struct sdma_desc

> *sdma_transfer_init(struct sdma_channel *sdmac,

> >  	return NULL;

> >  }

> >

> > +static int check_bd_buswidth(struct sdma_buffer_descriptor *bd,

> > +			     struct sdma_channel *sdmac, int count,

> > +			     dma_addr_t dma_dst, dma_addr_t dma_src) {

> > +	int ret = 0;

> > +

> > +	switch (sdmac->word_size) {

> > +	case DMA_SLAVE_BUSWIDTH_4_BYTES:

> > +		bd->mode.command = 0;

> > +		if ((count | dma_dst | dma_src) & 3)

> > +			ret = -EINVAL;

> > +		break;

> 

> empty line after each break please

> 

> > +	case DMA_SLAVE_BUSWIDTH_2_BYTES:

> > +		bd->mode.command = 2;

> > +		if ((count | dma_dst | dma_src) & 1)

> > +			ret = -EINVAL;

> > +		break;

> > +	case DMA_SLAVE_BUSWIDTH_1_BYTE:

> > +		 bd->mode.command = 1;

> > +		break;

> > +	default:

> > +		return -EINVAL;

> > +	}

> > +

> > +	return ret;

> > +}

> > +

> --

> ~Vinod
Sascha Hauer July 11, 2018, 6:32 a.m. UTC | #3
On Wed, Jul 11, 2018 at 12:23:11AM +0800, Robin Gong wrote:
> Add check_bd_buswidth() to minimize the code size.
> 
> Signed-off-by: Robin Gong <yibin.gong@nxp.com>
> ---
>  drivers/dma/imx-sdma.c | 64 +++++++++++++++++++++++---------------------------
>  1 file changed, 29 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index 27ccabf..ed2267d 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -1326,6 +1326,33 @@ static struct sdma_desc *sdma_transfer_init(struct sdma_channel *sdmac,
>  	return NULL;
>  }
>  
> +static int check_bd_buswidth(struct sdma_buffer_descriptor *bd,
> +			     struct sdma_channel *sdmac, int count,
> +			     dma_addr_t dma_dst, dma_addr_t dma_src)
> +{

Better name this function set_bd_buswidth. I would assume that a
function named check_foo actually checks something, but doesn't set
anything.

Sascha
diff mbox

Patch

diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 27ccabf..ed2267d 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -1326,6 +1326,33 @@  static struct sdma_desc *sdma_transfer_init(struct sdma_channel *sdmac,
 	return NULL;
 }
 
+static int check_bd_buswidth(struct sdma_buffer_descriptor *bd,
+			     struct sdma_channel *sdmac, int count,
+			     dma_addr_t dma_dst, dma_addr_t dma_src)
+{
+	int ret = 0;
+
+	switch (sdmac->word_size) {
+	case DMA_SLAVE_BUSWIDTH_4_BYTES:
+		bd->mode.command = 0;
+		if ((count | dma_dst | dma_src) & 3)
+			ret = -EINVAL;
+		break;
+	case DMA_SLAVE_BUSWIDTH_2_BYTES:
+		bd->mode.command = 2;
+		if ((count | dma_dst | dma_src) & 1)
+			ret = -EINVAL;
+		break;
+	case DMA_SLAVE_BUSWIDTH_1_BYTE:
+		 bd->mode.command = 1;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return ret;
+}
+
 static struct dma_async_tx_descriptor *sdma_prep_memcpy(
 		struct dma_chan *chan, dma_addr_t dma_dst,
 		dma_addr_t dma_src, size_t len, unsigned long flags)
@@ -1357,23 +1384,8 @@  static struct dma_async_tx_descriptor *sdma_prep_memcpy(
 		bd->mode.count = count;
 		desc->chn_count += count;
 
-		switch (sdmac->word_size) {
-		case DMA_SLAVE_BUSWIDTH_4_BYTES:
-			bd->mode.command = 0;
-			if ((count | dma_src | dma_dst) & 3)
-				goto err_bd_out;
-			break;
-		case DMA_SLAVE_BUSWIDTH_2_BYTES:
-			bd->mode.command = 2;
-			if ((count | dma_src | dma_dst) & 1)
-				goto err_bd_out;
-			break;
-		case DMA_SLAVE_BUSWIDTH_1_BYTE:
-			bd->mode.command = 1;
-			break;
-		default:
+		if (check_bd_buswidth(bd, sdmac, count, dma_dst, dma_src))
 			goto err_bd_out;
-		}
 
 		dma_src += count;
 		dma_dst += count;
@@ -1440,27 +1452,9 @@  static struct dma_async_tx_descriptor *sdma_prep_slave_sg(
 		bd->mode.count = count;
 		desc->chn_count += count;
 
-		if (sdmac->word_size > DMA_SLAVE_BUSWIDTH_4_BYTES)
+		if (check_bd_buswidth(bd, sdmac, count, 0, sg->dma_address))
 			goto err_bd_out;
 
-		switch (sdmac->word_size) {
-		case DMA_SLAVE_BUSWIDTH_4_BYTES:
-			bd->mode.command = 0;
-			if (count & 3 || sg->dma_address & 3)
-				goto err_bd_out;
-			break;
-		case DMA_SLAVE_BUSWIDTH_2_BYTES:
-			bd->mode.command = 2;
-			if (count & 1 || sg->dma_address & 1)
-				goto err_bd_out;
-			break;
-		case DMA_SLAVE_BUSWIDTH_1_BYTE:
-			bd->mode.command = 1;
-			break;
-		default:
-			goto err_bd_out;
-		}
-
 		param = BD_DONE | BD_EXTD | BD_CONT;
 
 		if (i + 1 == sg_len) {