2010-06-18 13:33:59

by Viresh Kumar

[permalink] [raw]
Subject: Query dw_dmac driver: All descriptors done, but channel not idle!

Hello,

We have Synopsys Designware DMAC Controller on ST SPEAr13xx platform.
When i run dmatest for all 8 channels then i see following error some times.

"dma dma0chan7: BUG: All descriptors done, but channel not idle!"

I saw the code in driver, and i think it looks to be a known issue for this
peripheral, that's why special handling is done in driver.

Can somebody please confirm, if it a known issue or not? Or if there
are some solutions for this problem.

viresh.


2010-06-18 13:52:49

by Haavard Skinnemoen

[permalink] [raw]
Subject: Re: Query dw_dmac driver: All descriptors done, but channel not idle!

Viresh KUMAR <[email protected]> wrote:
> Can somebody please confirm, if it a known issue or not? Or if there
> are some solutions for this problem.

I'm not aware of any such issue. The code was added as a purely
defensive thing; when writing it, I just thought about what might
happen if we go through all our descriptors without finding the current
one, and added some code to report the issue and try to recover.

I suppose it might be caused by some issue with the peripheral itself,
but I think it's more likely to be caused by some race condition in the
driver, i.e. something goes wrong when inserting or removing
descriptors in the chain.

What might be very good to know at this point is the value of
the llp variable, and perhaps also the value of the CH_EN register to
see if the channel is idle or not.

Haavard

2010-06-18 13:56:17

by Viresh Kumar

[permalink] [raw]
Subject: Re: Query dw_dmac driver: All descriptors done, but channel not idle!

On 6/18/2010 7:22 PM, Haavard Skinnemoen wrote:
> Viresh KUMAR <[email protected]> wrote:
>> Can somebody please confirm, if it a known issue or not? Or if there
>> are some solutions for this problem.
>
> I'm not aware of any such issue. The code was added as a purely
> defensive thing; when writing it, I just thought about what might
> happen if we go through all our descriptors without finding the current
> one, and added some code to report the issue and try to recover.
>
> I suppose it might be caused by some issue with the peripheral itself,
> but I think it's more likely to be caused by some race condition in the
> driver, i.e. something goes wrong when inserting or removing
> descriptors in the chain.
>
> What might be very good to know at this point is the value of
> the llp variable, and perhaps also the value of the CH_EN register to
> see if the channel is idle or not.
>

Thanks Haavard,

Will debug it further.

viresh.