Patch "ALSA: hda: Allow HDA to be runtime suspended when dGPU is not bound to a driver" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ALSA: hda: Allow HDA to be runtime suspended when dGPU is not bound to a driver

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     alsa-hda-allow-hda-to-be-runtime-suspended-when-dgpu.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f5a58a678524e042bbd48c372a4d0f20e189ff09
Author: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
Date:   Fri Oct 18 15:38:48 2019 +0800

    ALSA: hda: Allow HDA to be runtime suspended when dGPU is not bound to a driver
    
    [ Upstream commit bacd861452d2be86a4df341b12e32db7dac8021e ]
    
    Nvidia proprietary driver doesn't support runtime power management, so
    when a user only wants to use the integrated GPU, it's a common practice
    to let dGPU not to bind any driver, and let its upstream port to be
    runtime suspended. At the end of runtime suspension the port uses
    platform power management to disable power through _OFF method of power
    resource, which is listed by _PR3.
    
    After commit b516ea586d71 ("PCI: Enable NVIDIA HDA controllers"), when
    the dGPU comes with an HDA function, the HDA won't be suspended if the
    dGPU is unbound, so the power resource can't be turned off by its
    upstream port driver.
    
    Commit 37a3a98ef601 ("ALSA: hda - Enable runtime PM only for
    discrete GPU") only allows HDA to be runtime suspended once GPU is
    bound, to keep APU's HDA working.
    
    However, HDA on dGPU isn't that useful if dGPU is not bound to any
    driver.  So let's relax the runtime suspend requirement for dGPU's HDA
    function, to disable the power source to save lots of power.
    
    BugLink: https://bugs.launchpad.net/bugs/1840835
    Fixes: b516ea586d71 ("PCI: Enable NVIDIA HDA controllers")
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20191018073848.14590-2-kai.heng.feng@xxxxxxxxxxxxx
    Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 86a416cdeb29..4e757aa9d322 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1280,11 +1280,17 @@ static void init_vga_switcheroo(struct azx *chip)
 {
 	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
 	struct pci_dev *p = get_bound_vga(chip->pci);
+	struct pci_dev *parent;
 	if (p) {
 		dev_info(chip->card->dev,
 			 "Handle vga_switcheroo audio client\n");
 		hda->use_vga_switcheroo = 1;
-		chip->bus.keep_power = 1; /* cleared in either gpu_bound op or codec probe */
+
+		/* cleared in either gpu_bound op or codec probe, or when its
+		 * upstream port has _PR3 (i.e. dGPU).
+		 */
+		parent = pci_upstream_bridge(p);
+		chip->bus.keep_power = parent ? !pci_pr3_present(parent) : 1;
 		chip->driver_caps |= AZX_DCAPS_PM_RUNTIME;
 		pci_dev_put(p);
 	}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux