Message ID | 1443559488-2416-6-git-send-email-hamzahfrq.sub@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On Tue, Sep 29, 2015 at 10:44:47PM +0200, hamzahfrq.sub@gmail.com wrote:
> From: Muhammad Hamza Farooq <mfarooq@visteon.com>
Pls add why this is helpful
Hi Muhammad, Thank you for the patch. On Tuesday 29 September 2015 22:44:47 hamzahfrq.sub@gmail.com wrote: > From: Muhammad Hamza Farooq <mfarooq@visteon.com> > > Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com> > --- > drivers/dma/sh/rcar-dmac.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c > index 0b5a367..6eec878 100644 > --- a/drivers/dma/sh/rcar-dmac.c > +++ b/drivers/dma/sh/rcar-dmac.c > @@ -327,7 +327,8 @@ static void rcar_dmac_chan_start_xfer(struct > rcar_dmac_chan *chan) struct rcar_dmac_desc *desc = chan->desc.running; > u32 chcr = desc->chcr; > > - WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan)); > + WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan) || > + rcar_dmac_last_tx_complete(chan)); Why is that a problem ? > if (chan->mid_rid >= 0) > rcar_dmac_chan_write(chan, RCAR_DMARS, chan->mid_rid);
Hi Laurent, On Thu, Oct 15, 2015 at 6:53 PM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > Hi Muhammad, > > Thank you for the patch. > > On Tuesday 29 September 2015 22:44:47 hamzahfrq.sub@gmail.com wrote: >> From: Muhammad Hamza Farooq <mfarooq@visteon.com> >> >> Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com> >> --- >> drivers/dma/sh/rcar-dmac.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c >> index 0b5a367..6eec878 100644 >> --- a/drivers/dma/sh/rcar-dmac.c >> +++ b/drivers/dma/sh/rcar-dmac.c >> @@ -327,7 +327,8 @@ static void rcar_dmac_chan_start_xfer(struct >> rcar_dmac_chan *chan) struct rcar_dmac_desc *desc = chan->desc.running; >> u32 chcr = desc->chcr; >> >> - WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan)); >> + WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan) || >> + rcar_dmac_last_tx_complete(chan)); > > Why is that a problem ? According to the datasheet, new dma transfer cannot start new transfer if TE = 1. May be rcar_dmac_last_tx_complete is a misnomer. It is used when TE is set to 1 by hardware but the ISR has not yet run > >> if (chan->mid_rid >= 0) >> rcar_dmac_chan_write(chan, RCAR_DMARS, chan->mid_rid); > > -- > Regards, > > Laurent Pinchart > -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c index 0b5a367..6eec878 100644 --- a/drivers/dma/sh/rcar-dmac.c +++ b/drivers/dma/sh/rcar-dmac.c @@ -327,7 +327,8 @@ static void rcar_dmac_chan_start_xfer(struct rcar_dmac_chan *chan) struct rcar_dmac_desc *desc = chan->desc.running; u32 chcr = desc->chcr; - WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan)); + WARN_ON_ONCE(rcar_dmac_chan_is_busy(chan) || + rcar_dmac_last_tx_complete(chan)); if (chan->mid_rid >= 0) rcar_dmac_chan_write(chan, RCAR_DMARS, chan->mid_rid);