Re: [PATCH v2 03/19] dmaengine: dw-edma: Factor out linked-list transfer start
From: Frank Li
Date: Thu Jul 23 2026 - 12:43:51 EST
On Thu, Jul 23, 2026 at 05:41:34PM +0900, Koichiro Den wrote:
> Move linked-list programming into dw_edma_core_ll_start(). It can derive
> the first-batch state from desc->start_burst, so dw_edma_core_start() no
> longer needs a pass-through argument.
>
> No functional change intended.
>
> Signed-off-by: Koichiro Den <den@xxxxxxxxxxxxx>
> ---
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
> Changes in v2:
> - New patch.
>
> drivers/dma/dw-edma/dw-edma-core.c | 29 +++++++++++++++++++----------
> 1 file changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c
> index 1f893dc54c79..6a25a050b89c 100644
> --- a/drivers/dma/dw-edma/dw-edma-core.c
> +++ b/drivers/dma/dw-edma/dw-edma-core.c
> @@ -67,17 +67,11 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc)
> kfree(vd2dw_edma_desc(vdesc));
> }
>
> -static void dw_edma_core_start(struct dw_edma_desc *desc, bool first)
> +static void dw_edma_core_ll_start(struct dw_edma_desc *desc)
> {
> struct dw_edma_chan *chan = desc->chan;
> - size_t i = 0;
> -
> - if (chan->non_ll) {
> - chan->dw->core->non_ll_start(chan, &desc->burst[desc->start_burst]);
> - desc->done_burst = desc->start_burst;
> - desc->start_burst += 1;
> - return;
> - }
> + size_t i;
> + bool first = !desc->start_burst;
>
> for (i = 0; i + desc->start_burst < desc->nburst; i++) {
> u32 idx = i + desc->start_burst;
> @@ -101,6 +95,21 @@ static void dw_edma_core_start(struct dw_edma_desc *desc, bool first)
> dw_edma_core_ch_doorbell(chan);
> }
>
> +static void dw_edma_core_start(struct dw_edma_desc *desc)
> +{
> + struct dw_edma_chan *chan = desc->chan;
> +
> + if (chan->non_ll) {
> + chan->dw->core->non_ll_start(chan,
> + &desc->burst[desc->start_burst]);
> + desc->done_burst = desc->start_burst;
> + desc->start_burst += 1;
> + return;
> + }
> +
> + dw_edma_core_ll_start(desc);
> +}
> +
> static int dw_edma_start_transfer(struct dw_edma_chan *chan)
> {
> struct dw_edma_desc *desc;
> @@ -114,7 +123,7 @@ static int dw_edma_start_transfer(struct dw_edma_chan *chan)
> if (!desc)
> return 0;
>
> - dw_edma_core_start(desc, !desc->start_burst);
> + dw_edma_core_start(desc);
>
> desc->cb = !desc->cb;
>
> --
> 2.51.0
>