Skip to content

Conversation

@tlauda
Copy link
Contributor

@tlauda tlauda commented Aug 2, 2018

Stops DMA unconditionally on xrun without waiting.
Data flush is not needed as pipeline will go through
prepare and restart anyway. Waiting here during xrun
recovery with multiple tasks running causes interrupt
stack overflow. Waiti instruction lowers irq level to
0, which allows to run multiple scheduled tasks in the
same time on the same irq level and ends in DSP panic.

Signed-off-by: Tomasz Lauda tomasz.lauda@linux.intel.com

Stops DMA unconditionally on xrun without waiting.
Data flush is not needed as pipeline will go through
prepare and restart anyway. Waiting here during xrun
recovery with multiple tasks running causes interrupt
stack overflow. Waiti instruction lowers irq level to
0, which allows to run multiple scheduled tasks in the
same time on the same irq level and ends in DSP panic.

Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
@tlauda
Copy link
Contributor Author

tlauda commented Aug 3, 2018

@lgirdwood Updated the stop sequence to match the one, we've been using in cAVS platforms for years. We've been always stopping DMA channels asynchronously and never observed any problems after that. Anyway, I think previously in SOF we've never really stopped DMA channels with empty FIFO, because DMA was running in realtime mode and has never waited for clearing DONE bit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants