diff mbox

[v3,5/6] dma: rcar-dma: warn if transfer cannot start as TE = 1

Message ID 1443559488-2416-6-git-send-email-hamzahfrq.sub@gmail.com
State Under Review
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

hamzahfrq.sub@gmail.com Sept. 29, 2015, 8:44 p.m. UTC
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(-)

Comments

Vinod Koul Oct. 12, 2015, 3:13 p.m. UTC | #1
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
Laurent Pinchart Oct. 15, 2015, 4:53 p.m. UTC | #2
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);
hamzahfrq.sub@gmail.com Oct. 19, 2015, 8:58 p.m. UTC | #3
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 linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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);