> Hi Brent,
>
> Thanks for the patch. Is this fix for a specific issue you're seeing?
> If so, could you please give us some details about it?
>
> Thanks,
> Ranjani
Hi Ranjani,
It's reported to happen on GLK Chromebook 'Fleex' that sometimes it
cannot output the audio stream to external display. The kernel is
Chrome v4.14 branch. Following is the reproduce step provided by
ODM but I could reproduce it simply running aplay or cras_test_client
so I think it's not about the cable plug/unplug handling.
What steps will reproduce the problem?
1. Play YouTube video on Chromebook and connect it to external monitor with Type C to DP dongle
2. Press monitor power button to turn off the monitor
3. Press monitor power button again to turn on the monitor
4. Continue to play YouTube video and check audio playback
5. No sound comes out from built-in speaker of external monitor when turn on external monitor
I added debug messages to print the RIRBWP register and realize that
response could come between the read of RIRBWP in the
snd_hdac_bus_update_rirb() function and the interrupt clear in the
hda_dsp_stream_interrupt() function. The response is not handled but
the interrupt is already cleared. It will cause timeout unless more
responses coming to RIRB.
[ 69.173507] sof-audio-pci 0000:00:0e.0: snd_hdac_bus_get_response: addr 0x2
[ 69.173567] sof-audio-pci 0000:00:0e.0: snd_hdac_bus_update_rirb: cmds 1 res 0 rp 21 wp 21
=> handle the response in slot 21
[ 69.173570] sof-audio-pci 0000:00:0e.0: snd_hdac_bus_update_rirb: updated wp 22
=> new response in slot 22 but not handled
[ 70.174089] sof-audio-pci 0000:00:0e.0: snd_hdac_bus_get_response: timeout, wp 22
[ 70.174106] HDMI HDA Codec ehdaudio0D2: codec_read: fail to read codec
I found there is a commit addressing this issue and cherry-pick it to the
Chrome v4.14 but the issue is still there. I think more loop does not help
because eventually there will be response coming in the
snd_hdac_bus_update_rirb() function and become unhandled response
in the last loop.
commit 6297a0dc4c14a62bea5a9137ceef280cb7a80665
Author: Ranjani Sridharan <[email protected]>
Date: Wed Jun 12 12:23:40 2019 -0500
ASoC: SOF: Intel: hda: modify stream interrupt handler
Modify the stream interrupt handler to always wake up the
IRQ thread if the status register is valid. The IRQ thread
performs the check for stream interrupts and RIRB interrupts
in a loop to handle the case of missed interrupts when an
unsolicited response from the codec is received just before the
stream interrupt handler is completed.
Regards,
Brent
On Thu, 11 Jun 2020 19:09:08 +0200,
Lu, Brent wrote:
>
> > Hi Brent,
> >
> > Thanks for the patch. Is this fix for a specific issue you're seeing?
> > If so, could you please give us some details about it?
> >
> > Thanks,
> > Ranjani
>
> Hi Ranjani,
>
> It's reported to happen on GLK Chromebook 'Fleex' that sometimes it
> cannot output the audio stream to external display. The kernel is
> Chrome v4.14 branch. Following is the reproduce step provided by
> ODM but I could reproduce it simply running aplay or cras_test_client
> so I think it's not about the cable plug/unplug handling.
>
> What steps will reproduce the problem?
> 1. Play YouTube video on Chromebook and connect it to external monitor with Type C to DP dongle
> 2. Press monitor power button to turn off the monitor
> 3. Press monitor power button again to turn on the monitor
> 4. Continue to play YouTube video and check audio playback
> 5. No sound comes out from built-in speaker of external monitor when turn on external monitor
>
> I added debug messages to print the RIRBWP register and realize that
> response could come between the read of RIRBWP in the
> snd_hdac_bus_update_rirb() function and the interrupt clear in the
> hda_dsp_stream_interrupt() function. The response is not handled but
> the interrupt is already cleared. It will cause timeout unless more
> responses coming to RIRB.
Now I noticed that the legacy driver already addressed it recently via
commit 6d011d5057ff
ALSA: hda: Clear RIRB status before reading WP
We should have checked SOF at the same time, too...
thanks,
Takashi
>
> Now I noticed that the legacy driver already addressed it recently via commit
> 6d011d5057ff
> ALSA: hda: Clear RIRB status before reading WP
>
> We should have checked SOF at the same time, too...
>
>
> thanks,
>
> Takashi
Hi Takashi-san,
Yes you are correct. I tested Chrome v5.4 on a CML Chromebook 'hatch' and
realize the SOF does no suffer from this issue because the 'sync write' feature
is enabled in hda_init. Soon I can reproduce the issue after turning it off. So I
think it's still worthy to have this fix in case we need to disable 'sync write'
someday.
Regards,
Brent