On Mon, 2012-04-16 at 14:46 +0200, Nicolas Ferre wrote:
> This loop on EBCISR register was designed to clear IRQ sources before enabling
> a DMA channel. This register is clear-on-read so a race condition can appear 
> if
> another channel is already active and has just finished its transfer.
> Removing this read on EBCISR is fixing the issue as there is no case where an 
> IRQ
> could be pending: we already make sure that this register is drained at 
> probe()
> time and during resume.
> 
> Signed-off-by: Nicolas Ferre <[email protected]>
> Cc: stable <[email protected]>
Applied thanks.

> ---
>  drivers/dma/at_hdmac.c |    4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
> index 7aa58d2..445fdf8 100644
> --- a/drivers/dma/at_hdmac.c
> +++ b/drivers/dma/at_hdmac.c
> @@ -221,10 +221,6 @@ static void atc_dostart(struct at_dma_chan *atchan, 
> struct at_desc *first)
>  
>       vdbg_dump_regs(atchan);
>  
> -     /* clear any pending interrupt */
> -     while (dma_readl(atdma, EBCISR))
> -             cpu_relax();
> -
>       channel_writel(atchan, SADDR, 0);
>       channel_writel(atchan, DADDR, 0);
>       channel_writel(atchan, CTRLA, 0);


-- 
~Vinod

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to