alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ALSA: hda - Disable runtime PM on LynxPoint(-LP) controllers
@ 2013-11-19 16:51 Takashi Iwai
  2013-11-20  8:54 ` David Henningsson
  0 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2013-11-19 16:51 UTC (permalink / raw)
  To: alsa-devel

We got bug reports of the stalled HD-audio, typically after S3 or S4,
and it turned out that they seemed triggered by runtime PM on Lynx
Point and Lynx Point-LP controllers.  As there is no way to recover
properly from the stalled controller, it's safer to disable the
runtime PM support on these chips for now.

Further notes:
I actually could reproduce this on a few HP laptops here.
Go to S3 after runtime suspend, then the next playback fails,
resulting in either a codec stall or repeated sounds.

The problem seems lying in a deeper level.  The complete stall could
be avoided by disabling the call of azx_stop_chip() in
azx_runtime_suspend().  More specifically, it's the disablement of
CORB/RIRB in azx_free_cmd_io().  After removing this call, the sound
is resumed.

However, even with that workaround, the first playback after resume
stalls due to the missing RIRB interrupts (so you get "switch to
polling mode" kernel warning).  Interestingly, the codec communication
in the resume procedure does work.  The system goes to runtime suspend
immediately after resume, then something gets broken at that point.

This missing interrupt problem happens even if you do nothing in
runtime suspend/resume callback with empty callbacks.  This implies
that it's an issue in the underlying layer.  So, the only feasible
"fix" in the sound driver side to suppress the runtime PM, so far.

Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---

Yet another note: the patch is based on v3.12, not on linux-next, so
that it can be backported cleanly for 3.12 and earlier kernels.

 sound/pci/hda/hda_intel.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 6e61a019aa5e..27fc33e54a50 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -3973,7 +3973,7 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
 	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
 	/* Lynx Point */
 	{ PCI_DEVICE(0x8086, 0x8c20),
-	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
+	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
 	/* Wellsburg */
 	{ PCI_DEVICE(0x8086, 0x8d20),
 	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
@@ -3981,10 +3981,10 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
 	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
 	/* Lynx Point-LP */
 	{ PCI_DEVICE(0x8086, 0x9c20),
-	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
+	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
 	/* Lynx Point-LP */
 	{ PCI_DEVICE(0x8086, 0x9c21),
-	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
+	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
 	/* Haswell */
 	{ PCI_DEVICE(0x8086, 0x0a0c),
 	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH |
-- 
1.8.4.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-11-20 13:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-19 16:51 [PATCH] ALSA: hda - Disable runtime PM on LynxPoint(-LP) controllers Takashi Iwai
2013-11-20  8:54 ` David Henningsson
2013-11-20 12:05   ` Takashi Iwai
2013-11-20 13:32     ` Takashi Iwai
2013-11-20 13:35       ` David Henningsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).