ALSA: hda - Force runtime PM on Nvidia HDMI codecs
diff mbox series

Message ID 3086bc75135c1e3567c5bc4f3cc4ff5cbf7a56c2.1571324194.git.lukas@wunner.de
State New
Headers show
Series
  • ALSA: hda - Force runtime PM on Nvidia HDMI codecs
Related show

Commit Message

Lukas Wunner Oct. 17, 2019, 3:04 p.m. UTC
Przemysław Kopa reports that since commit b516ea586d71 ("PCI: Enable
NVIDIA HDA controllers"), the discrete GPU Nvidia GeForce GT 540M on his
2011 Samsung laptop refuses to runtime suspend, resulting in a power
regression and excessive heat.

Rivera Valdez witnesses the same issue with a GeForce GT 525M (GF108M)
of the same era, as does another Arch Linux user named "R0AR" with a
more recent GeForce GTX 1050 Ti (GP107M).

The commit exposes the discrete GPU's HDA controller and all four codecs
on the controller do not set the CLKSTOP and EPSS bits in the Supported
Power States Response.  They also do not set the PS-ClkStopOk bit in the
Get Power State Response.  hda_codec_runtime_suspend() therefore does
not call snd_hdac_codec_link_down(), which prevents each codec and the
PCI device from runtime suspending.

The same issue is present on some AMD discrete GPUs and we addressed it
by forcing runtime PM despite the bits not being set, see commit
57cb54e53bdd ("ALSA: hda - Force to link down at runtime suspend on
ATI/AMD HDMI").

Do the same for Nvidia HDMI codecs.

Fixes: b516ea586d71 ("PCI: Enable NVIDIA HDA controllers")
Link: https://bbs.archlinux.org/viewtopic.php?pid=1865512
Link: https://bugs.freedesktop.org/show_bug.cgi?id=75985#c81
Reported-by: Przemysław Kopa <prymoo@gmail.com>
Reported-by: Rivera Valdez <riveravaldez@ysinembargo.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: Daniel Drake <dan@reactivated.net>
Cc: stable@vger.kernel.org # v5.3+
---
 sound/pci/hda/patch_hdmi.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Takashi Iwai Oct. 17, 2019, 3:47 p.m. UTC | #1
On Thu, 17 Oct 2019 17:04:11 +0200,
Lukas Wunner wrote:
> 
> Przemysław Kopa reports that since commit b516ea586d71 ("PCI: Enable
> NVIDIA HDA controllers"), the discrete GPU Nvidia GeForce GT 540M on his
> 2011 Samsung laptop refuses to runtime suspend, resulting in a power
> regression and excessive heat.
> 
> Rivera Valdez witnesses the same issue with a GeForce GT 525M (GF108M)
> of the same era, as does another Arch Linux user named "R0AR" with a
> more recent GeForce GTX 1050 Ti (GP107M).
> 
> The commit exposes the discrete GPU's HDA controller and all four codecs
> on the controller do not set the CLKSTOP and EPSS bits in the Supported
> Power States Response.  They also do not set the PS-ClkStopOk bit in the
> Get Power State Response.  hda_codec_runtime_suspend() therefore does
> not call snd_hdac_codec_link_down(), which prevents each codec and the
> PCI device from runtime suspending.
> 
> The same issue is present on some AMD discrete GPUs and we addressed it
> by forcing runtime PM despite the bits not being set, see commit
> 57cb54e53bdd ("ALSA: hda - Force to link down at runtime suspend on
> ATI/AMD HDMI").
> 
> Do the same for Nvidia HDMI codecs.
> 
> Fixes: b516ea586d71 ("PCI: Enable NVIDIA HDA controllers")
> Link: https://bbs.archlinux.org/viewtopic.php?pid=1865512
> Link: https://bugs.freedesktop.org/show_bug.cgi?id=75985#c81
> Reported-by: Przemysław Kopa <prymoo@gmail.com>
> Reported-by: Rivera Valdez <riveravaldez@ysinembargo.com>
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Cc: Daniel Drake <dan@reactivated.net>
> Cc: stable@vger.kernel.org # v5.3+

Applied now.  Thanks.


Takashi


> ---
>  sound/pci/hda/patch_hdmi.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index bca5de7..795cbda 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -3474,6 +3474,8 @@ static int patch_nvhdmi(struct hda_codec *codec)
>  		nvhdmi_chmap_cea_alloc_validate_get_type;
>  	spec->chmap.ops.chmap_validate = nvhdmi_chmap_validate;
>  
> +	codec->link_down_at_suspend = 1;
> +
>  	generic_acomp_init(codec, &nvhdmi_audio_ops, nvhdmi_port2pin);
>  
>  	return 0;
> -- 
> 2.20.1
> 
>

Patch
diff mbox series

diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index bca5de7..795cbda 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -3474,6 +3474,8 @@  static int patch_nvhdmi(struct hda_codec *codec)
 		nvhdmi_chmap_cea_alloc_validate_get_type;
 	spec->chmap.ops.chmap_validate = nvhdmi_chmap_validate;
 
+	codec->link_down_at_suspend = 1;
+
 	generic_acomp_init(codec, &nvhdmi_audio_ops, nvhdmi_port2pin);
 
 	return 0;