Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932106AbbFAIOC (ORCPT ); Mon, 1 Jun 2015 04:14:02 -0400 Received: from eusmtp01.atmel.com ([212.144.249.242]:46627 "EHLO eusmtp01.atmel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752746AbbFAINj (ORCPT ); Mon, 1 Jun 2015 04:13:39 -0400 Date: Mon, 1 Jun 2015 10:14:01 +0200 From: Ludovic Desroches To: Maxime Ripard CC: Vinod Koul , , Nicolas Ferre , Alexandre Belloni , Ludovic Desroches , Thomas Petazzoni , , Subject: Re: [PATCH 1/2] dmaengine: Move icg helpers to global header Message-ID: <20150601081401.GG25118@odux.rfo.atmel.com> Mail-Followup-To: Maxime Ripard , Vinod Koul , dmaengine@vger.kernel.org, Nicolas Ferre , Alexandre Belloni , Thomas Petazzoni , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <1432735313-481-1-git-send-email-maxime.ripard@free-electrons.com> <1432735313-481-2-git-send-email-maxime.ripard@free-electrons.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1432735313-481-2-git-send-email-maxime.ripard@free-electrons.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4304 Lines: 135 On Wed, May 27, 2015 at 04:01:52PM +0200, Maxime Ripard wrote: > Now that we can have ICGs set for both the source and destination (using > the icg field of struct data_chunk) or for only the source or the > destination (using the dst_icg or src_icg respectively), and that these > fields can be ignored depending on other parameters (src_inc, src_sgl, > etc.), the logic to get the actual ICG value can be quite tricky. > > The XDMAC driver was already implementing it, but since we will need it in > other drivers, we can move it to the main header file. > > Signed-off-by: Maxime Ripard Acked-by: Ludovic Desroches > --- > drivers/dma/at_xdmac.c | 46 ++++------------------------------------------ > include/linux/dmaengine.h | 27 +++++++++++++++++++++++++++ > 2 files changed, 31 insertions(+), 42 deletions(-) > > diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c > index 9b602a67d40d..80e46e571bdd 100644 > --- a/drivers/dma/at_xdmac.c > +++ b/drivers/dma/at_xdmac.c > @@ -862,20 +862,8 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan, > > desc->lld.mbr_sa = src; > desc->lld.mbr_da = dst; > - > - if (xt->src_inc && xt->src_sgl) { > - if (chunk->src_icg) > - desc->lld.mbr_sus = chunk->src_icg; > - else > - desc->lld.mbr_sus = chunk->icg; > - } > - > - if (xt->dst_inc && xt->dst_sgl) { > - if (chunk->dst_icg) > - desc->lld.mbr_dus = chunk->dst_icg; > - else > - desc->lld.mbr_dus = chunk->icg; > - } > + desc->lld.mbr_sus = dmaengine_get_src_icg(xt, chunk); > + desc->lld.mbr_dus = dmaengine_get_dst_icg(xt, chunk); > > desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV3 > | AT_XDMAC_MBR_UBC_NDEN > @@ -895,32 +883,6 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan, > return desc; > } > > -static size_t at_xdmac_get_icg(bool inc, bool sgl, size_t icg, size_t dir_icg) > -{ > - if (inc) { > - if (dir_icg) > - return dir_icg; > - else if (sgl) > - return icg; > - } > - > - return 0; > -} > - > -static size_t at_xdmac_get_dst_icg(struct dma_interleaved_template *xt, > - struct data_chunk *chunk) > -{ > - return at_xdmac_get_icg(xt->dst_inc, xt->dst_sgl, > - chunk->icg, chunk->dst_icg); > -} > - > -static size_t at_xdmac_get_src_icg(struct dma_interleaved_template *xt, > - struct data_chunk *chunk) > -{ > - return at_xdmac_get_icg(xt->src_inc, xt->src_sgl, > - chunk->icg, chunk->src_icg); > -} > - > static struct dma_async_tx_descriptor * > at_xdmac_prep_interleaved(struct dma_chan *chan, > struct dma_interleaved_template *xt, > @@ -950,8 +912,8 @@ at_xdmac_prep_interleaved(struct dma_chan *chan, > > chunk = xt->sgl + i; > > - dst_icg = at_xdmac_get_dst_icg(xt, chunk); > - src_icg = at_xdmac_get_src_icg(xt, chunk); > + dst_icg = dmaengine_get_dst_icg(xt, chunk); > + src_icg = dmaengine_get_src_icg(xt, chunk); > > src_skip = chunk->size + src_icg; > dst_skip = chunk->size + dst_icg; > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h > index 8faf6a2dd9d8..43a9a397b2d7 100644 > --- a/include/linux/dmaengine.h > +++ b/include/linux/dmaengine.h > @@ -899,6 +899,33 @@ static inline int dma_maxpq(struct dma_device *dma, enum dma_ctrl_flags flags) > BUG(); > } > > +static inline size_t dmaengine_get_icg(bool inc, bool sgl, size_t icg, > + size_t dir_icg) > +{ > + if (inc) { > + if (dir_icg) > + return dir_icg; > + else if (sgl) > + return icg; > + } > + > + return 0; > +} > + > +static inline size_t dmaengine_get_dst_icg(struct dma_interleaved_template *xt, > + struct data_chunk *chunk) > +{ > + return dmaengine_get_icg(xt->dst_inc, xt->dst_sgl, > + chunk->icg, chunk->dst_icg); > +} > + > +static inline size_t dmaengine_get_src_icg(struct dma_interleaved_template *xt, > + struct data_chunk *chunk) > +{ > + return dmaengine_get_icg(xt->src_inc, xt->src_sgl, > + chunk->icg, chunk->src_icg); > +} > + > /* --- public DMA engine API --- */ > > #ifdef CONFIG_DMA_ENGINE > -- > 2.4.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/