[Sound-open-firmware] The issue of XRUN happened in Kernel and PANIC in firmware
zhigangw
zhigang.wu at linux.intel.com
Wed Jun 13 10:08:46 CEST 2018
Hello All:
When we use the "aplay" tool to play the audio wave file, a
XRUN (under-run) would happen.
It is high possibility on my APL-GPMRB platform (100%).
Which is detected by Linux kernel in snd_pcm_update_state() function.
This means the "hw_ptr" reaches "appl_ptr".
From the log, before XRUN happened, the "hw_ptr" is updated by DSP side
(through the IPC) without any problem.
The "appl_ptr" is updated with about 8ms interval, but in some case, the
"appl_ptr" is not updated in time.
The "appl_ptr" is updated by main thread (in __snd_pcm_lib_xfer() function).
Then the XRUN happens!
Below is the call-stack of the "aplay" tool. The *safe_read()* function
reads the audio data into local buffer from wave file.
I add the timestamp log before and after this function. Usually the
delta time should be very small (less than 1ms).
But sometimes, the safe_read() will take more than 50ms! Note: It reads
the audio data successfully at last.
In this time, the underrun issue will be detected by kernel.
playback_go()
*safe_read()*
pcm_write()
writei_func()
snd_pcm_writei()
_snd_pcm_writei()
pcm->fast_ops->writei()
snd_pcm_hw_writei()
ioctl(fd, SNDRV_PCM_IOCTL_WRITEI_FRAMES, &xferi)
When the XRUN is detected by kernel, the recover process will start.
the kernel will send STOP command to DSP by IPC, then send the START
command to DSP.
During the recover process, our DSP will hits panic!!! This possibility
is very high on my platform (100%).
Summary:
1) From the dump data of the DSP(when panic happens),
DSP panic happened in the wait_for_completion_timeout() function.
When it is waken up by other interrupt (slept by waiti
instruction), it hits crash when loading a data into register.
I checked there is no stack-overflow in this time.
I do not understand the log: Exception Cause:
LoadStorePIFDataErrorCause, Synchronous PIF data error during LoadStore
access.
Do you have any idea?
2) For the "aplay" tool's issue. the safe_read() function wastes
too much time sometimes.
I have no idea how to debug this issue. or we should report
this issue to any other team?
thanks
br
~zhigang
More information about the Sound-open-firmware
mailing list