On 24-03-23, 09:49, Biju Das wrote: > Reinitialize link mode descriptor head during terminate_all(). > It fixes the incorrect serial messages during serial transfer when > DMA is enabled. > > Based on a patch in the BSP by Long Luu > <long.luu.ur@xxxxxxxxxxx> > > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > --- > drivers/dma/sh/rz-dmac.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c > index 6b62e01ba658..a04a37ce03fd 100644 > --- a/drivers/dma/sh/rz-dmac.c > +++ b/drivers/dma/sh/rz-dmac.c > @@ -534,11 +534,18 @@ rz_dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, > static int rz_dmac_terminate_all(struct dma_chan *chan) > { > struct rz_dmac_chan *channel = to_rz_dmac_chan(chan); > + struct rz_lmdesc *lmdesc = channel->lmdesc.base; > unsigned long flags; > + unsigned int i; > + > LIST_HEAD(head); > > rz_dmac_disable_hw(channel); > spin_lock_irqsave(&channel->vc.lock, flags); > + > + for (i = 0; i < DMAC_NR_LMDESC; i++) > + lmdesc[i].header = 0; Any reason not to use memset for this? > + > list_splice_tail_init(&channel->ld_active, &channel->ld_free); > list_splice_tail_init(&channel->ld_queue, &channel->ld_free); > spin_unlock_irqrestore(&channel->vc.lock, flags); > -- > 2.25.1 -- ~Vinod