[alsa-devel] [PATCH] ALSA: hda - Force runtime PM on Nvidia HDMI codecs
Takashi Iwai
tiwai at suse.de
Thu Oct 17 17:47:23 CEST 2019
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 at gmail.com>
> Reported-by: Rivera Valdez <riveravaldez at ysinembargo.com>
> Signed-off-by: Lukas Wunner <lukas at wunner.de>
> Cc: Daniel Drake <dan at reactivated.net>
> Cc: stable at 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
>
>
More information about the Alsa-devel
mailing list