Skip to content

Commit 747213b

Browse files
bijudasvinodkoul
authored andcommitted
dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all()
After audio full duplex testing, playing the recorded file contains a few playback frames from the previous time. The rz_dmac_terminate_all() does not reset all the hardware descriptors queued previously, leading to the wrong descriptor being picked up during the next DMA transfer. Fix the above issue by resetting all the descriptor headers for a channel in rz_dmac_terminate_all() as rz_dmac_lmdesc_recycle() points to the proper descriptor header filled by the rz_dmac_prepare_descs_for_slave_sg(). Cc: stable@kernel.org Fixes: 5000d37 ("dmaengine: sh: Add DMAC driver for RZ/G2L SoC") Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Link: https://patch.msgid.link/20251113195052.564338-1-biju.das.jz@bp.renesas.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent c0732fe commit 747213b

1 file changed

Lines changed: 5 additions & 0 deletions

File tree

drivers/dma/sh/rz-dmac.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,11 +557,16 @@ rz_dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
557557
static int rz_dmac_terminate_all(struct dma_chan *chan)
558558
{
559559
struct rz_dmac_chan *channel = to_rz_dmac_chan(chan);
560+
struct rz_lmdesc *lmdesc = channel->lmdesc.base;
560561
unsigned long flags;
562+
unsigned int i;
561563
LIST_HEAD(head);
562564

563565
rz_dmac_disable_hw(channel);
564566
spin_lock_irqsave(&channel->vc.lock, flags);
567+
for (i = 0; i < DMAC_NR_LMDESC; i++)
568+
lmdesc[i].header = 0;
569+
565570
list_splice_tail_init(&channel->ld_active, &channel->ld_free);
566571
list_splice_tail_init(&channel->ld_queue, &channel->ld_free);
567572
vchan_get_all_descriptors(&channel->vc, &head);

0 commit comments

Comments
 (0)