[Nouveau] [PATCH] ALSA: hda - Force runtime PM on Nvidia HDMI codecs

Takashi Iwai tiwai at suse.de
Thu Oct 17 15:47:23 UTC 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 Nouveau mailing list