From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukas Wunner Subject: [PATCH 0/7] Modernize vga_switcheroo by using device link for HDA Date: Sun, 18 Feb 2018 09:38:32 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, "Rafael J. Wysocki" , Takashi Iwai , Jaroslav Kysela , Hans de Goede , Bastien Nocera , linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Alex Deucher , Dave Airlie , Bjorn Helgaas , Ben Skeggs List-Id: alsa-devel@alsa-project.org TW9kZXJuaXplIHZnYV9zd2l0Y2hlcm9vIGJ5IHVzaW5nIGEgImRldmljZSBsaW5rIiB0byBlbmZv cmNlIGEgcnVudGltZSBQTQpkZXBlbmRlbmN5IGZyb20gYW4gSERBIGNvbnRyb2xsZXIgdG8gdGhl IEdQVSBpdCdzIGludGVncmF0ZWQgaW50by4KUmVtb3ZlIHRoZXJlYnkgb2Jzb2xldGVkIGNvZGUg YW5kIGZpeCBhIGJ1bmNoIG9mIGJ1Z3MuCkRldmljZSBsaW5rcyB3ZXJlIGludHJvZHVjZWQgaW4g djQuMTAuCgpVc2VycyBtaWdodCBzZWUgYSBzbWFsbCBwb3dlciBzYXZpbmcgaWYgdGhlIGRpc2Ny ZXRlIEdQVSBpcyBpbiB1c2UgYW5kCml0cyBIREEgY29udHJvbGxlciBpcyBub3QsIGJlY2F1c2Ug dGhlIEhEQSBjb250cm9sbGVyIGlzIG5vdyBhbGxvd2VkCnRvIHJ1bnRpbWUgc3VzcGVuZCB0byBE M2hvdC4gIFByb2JpbmcgYW5kIGFjY2Vzc2luZyB0aGUgSERBIGNvbnRyb2xsZXIKd2hpbGUgdGhl IEdQVSBpcyBpbiBEM2NvbGQgc2hvdWxkIGJlIHZlcnkgcm9idXN0LCB1bmxpa2UgYmVmb3JlLgpV bmRlciB0aGUgaG9vZCB0aGluZ3MgYmVjb21lIHF1aXRlIGEgYml0IGxlYW5lci4KCkFsc28sIHRo aXMgc2VyaWVzIGdldHMgdXMgb25lIHN0ZXAgY2xvc2VyIHRvIHN1cHBvcnRpbmcgcnVudGltZSBQ TSBvbgptdXhlZCBsYXB0b3BzIHN1Y2ggYXMgdGhlIE1hY0Jvb2sgUHJvIGJlY2F1c2UgaXQgZml4 ZXMgYSBkZWFkbG9jawpvY2N1cnJpbmcgd2hlbiBydW50aW1lIHJlc3VtaW5nIHRoZSBkaXNjcmV0 ZSBHUFUgb24gc3dpdGNoaW5nIHRoZSBtdXguCihUaGUgZGVhZGxvY2sgb2NjdXJzIGluIHZnYV9z d2l0Y2hlcm9vX3NldF9keW5hbWljX3N3aXRjaCgpIGFuZCB0aGF0CmZ1bmN0aW9uIGlzIG9ic29s ZXRlZCBhbmQgcmVtb3ZlZCBieSB0aGlzIHNlcmllcy4pCgpUaGUgbWVhdCBvZiB0aGUgc2VyaWVz IGlzIGluIHBhdGNoIFs1LzddLCByZWFkIGl0cyBjb21taXQgbWVzc2FnZSBmb3IKZGV0YWlscy4g IFRoZSBvdGhlciBwYXRjaGVzIGNvbnRhaW4gcHJlcCBhbmQgY2xlYW51cCB3b3JrLgoKUGF0Y2hl cyBbMS83XSwgWzIvN10gYW5kIFs1LzddIHJlcXVpcmUgYW4gYWNrIGZyb20gQmpvcm4gKGFuZCBS YWZhZWw/KSwKcGF0Y2ggWzUvN10gcmVxdWlyZXMgYW4gYWNrIGZyb20gVGFrYXNoaS4KQWRkaXRp b25hbGx5IEknZCBhcHByZWNpYXRlIGEgVGVzdGVkLWJ5IGFuZC9vciBBY2tlZC1ieSBmcm9tIFBl dGVyIFd1LAp0aGUgcmVzaWRlbnQgTnZpZGlhIE9wdGltdXMgZXhwZXJ0LCBhbmQgZnJvbSBBbGV4 IGZvciBBTUQgUG93ZXJYcHJlc3MKYmVjYXVzZSBteSBvd24gdGVzdGluZyBvbmx5IGNvdmVycyB0 aGUgTWFjQm9vayBQcm8uClRlc3RpbmcgYW5kIGNvbW1lbnRzIGZyb20gYW55b25lIGVsc2UgYXJl IG1vc3Qgd2VsY29tZSBvZiBjb3Vyc2UuCgpUaGUgc2VyaWVzIGlzIGJhc2VkIG9uIDQuMTYtcmMx LiAgVG8gdGVzdCBpdCBvbiA0LjE1LCB5b3UgbmVlZCB0bwpjaGVycnktcGljayA3NTA2ZGM3OTg5 OTMgYW5kIDJmYTZkNmNkYWYyOC4gIEZvciB5b3VyIGNvbnZlbmllbmNlCkkndmUgcHVzaGVkIGEg NC4xNS1iYXNlZCBicmFuY2ggdG86Cmh0dHBzOi8vZ2l0aHViLmNvbS9sMWsvbGludXgvY29tbWl0 cy9zd2l0Y2hlcm9vX2RldmxpbmtfdjEKCk1pbmltYWwgdGVzdCBwcm9jZWR1cmUgZm9yIG5vbi1N YWNzOgoKLSBOb3RlIHdlbGw6IFJlY2VudCBPcHRpbXVzIHJlcXVpcmUgdGhhdCBhIE1pbmktRFAg b3IgSERNSSBjYWJsZSBpcwogIHBsdWdnZWQgaW4gb24gYm9vdCBmb3IgdGhlIEhEQSBkZXZpY2Ug dG8gYmUgcHJlc2VudC4KCi0gQ2hlY2sgdGhhdCBIREEsIEdQVSBhbmQgcm9vdCBwb3J0IGF1dG9z dXNwZW5kIHdoZW4gbm90IGluIHVzZToKICBjYXQgL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDow MTowMC4xL3Bvd2VyL3J1bnRpbWVfc3RhdHVzICAjIEhEQQogIGNhdCAvc3lzL2J1cy9wY2kvZGV2 aWNlcy8wMDAwOjAxOjAwLjAvcG93ZXIvcnVudGltZV9zdGF0dXMgICMgR1BVCiAgY2F0IC9zeXMv YnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MDEuMC9wb3dlci9ydW50aW1lX3N0YXR1cyAgIyBSb290 IFBvcnQKCi0gQ2hlY2sgdGhhdCBhbGwgdGhyZWUgYXV0b3Jlc3VtZSB3aGVuIGFjY2Vzc2luZyB0 aGUgSERBOgogIGhkYWphY2tzZW5zZXRlc3QgLWMgMQoKLSBVbmJpbmQgdGhlIEhEQSBjb250cm9s bGVyOgogIGVjaG8gMDAwMDowMTowMC4xID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvc25kX2hkYV9p bnRlbC91bmJpbmQKICBXYWl0IGZvciBHUFUgdG8gcG93ZXIgb2ZmLCB0aGVuIHJlYmluZCB0aGUg SERBIGNvbnRyb2xsZXI6CiAgZWNobyAwMDAwOjAxOjAwLjEgPiAvc3lzL2J1cy9wY2kvZHJpdmVy cy9zbmRfaGRhX2ludGVsL2JpbmQKICBDaGVjayBkbWVzZyBmb3IgZXJyb3JzLCB0cnkgYWNjZXNz aW5nIEhEQSB3aXRoIGhkYWphY2tzZW5zZXRlc3QuCgotIElmIHlvdXIgbGFwdG9wIHVzZXMgdGhl IHJvb3QgcG9ydCdzIF9QUjMgdG8gY3V0IHBvd2VyIHRvIHRoZSBHUFU6CiAgVW5iaW5kIHRoZSBH UFU6CiAgZWNobyAwMDAwOjAxOjAwLjAgPiAvc3lzL2J1cy9wY2kvZHJpdmVycy97bm91dmVhdSxh bWRncHUscmFkZW9ufS91bmJpbmQKICBBbGxvdyBydW50aW1lIFBNIG9uIHRoZSBHUFU6CiAgZWNo byBhdXRvID4gL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMTowMC4wL3Bvd2VyL2NvbnRyb2wK ICBXYWl0IGZvciBHUFUgdG8gcG93ZXIgb2ZmLCB0aGVuIHJlYmluZCBpdDoKICBlY2hvIDAwMDA6 MDE6MDAuMCA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzL3tub3V2ZWF1LGFtZGdwdSxyYWRlb259L2Jp bmQKICBDaGVjayBkbWVzZyBmb3IgZXJyb3JzLiAgSWYgeW91IHNlZSBhbnkgdGhlbiB3ZSBtYXkg bmVlZCB0byBwZXJmb3JtCiAgZnVydGhlciBhY3Rpb25zIGluIHBjaV9wbV9ydW50aW1lX3Jlc3Vt ZSgpLCBzZWUgcGF0Y2ggWzEvN10uCgpUaGFua3MsCgpMdWthcwoKTHVrYXMgV3VubmVyICg3KToK ICBQQ0k6IFJlc3RvcmUgQkFScyBvbiBydW50aW1lIHJlc3VtZSBkZXNwaXRlIGJlaW5nIHVuYm91 bmQKICBQQ0k6IE1ha2UgcGNpX3dha2V1cF9idXMoKSAmIHBjaV9idXNfc2V0X2N1cnJlbnRfc3Rh dGUoKSBwdWJsaWMKICB2Z2Ffc3dpdGNoZXJvbzogVXBkYXRlIFBDSSBjdXJyZW50X3N0YXRlIG9u IHBvd2VyIGNoYW5nZQogIHZnYV9zd2l0Y2hlcm9vOiBEZWR1cGxpY2F0ZSBwb3dlciBzdGF0ZSB0 cmFja2luZwogIHZnYV9zd2l0Y2hlcm9vOiBVc2UgZGV2aWNlIGxpbmsgZm9yIEhEQSBjb250cm9s bGVyCiAgdmdhX3N3aXRjaGVyb286IExldCBIREEgYXV0b3N1c3BlbmQgb24gbXV4IGNoYW5nZQog IGRybS9ub3V2ZWF1OiBSdW50aW1lIHN1c3BlbmQgZGVzcGl0ZSBIREEgYmVpbmcgdW5ib3VuZAoK IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYyB8ICAgMiAtCiBkcml2ZXJz L2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jICAgfCAgNDYgLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX2Rydi5jICAgICB8ICAgMiAtCiBkcml2ZXJzL2dwdS92Z2EvdmdhX3N3 aXRjaGVyb28uYyAgICAgICAgfCAxNTIgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyAgICAgICAgICAgICAgICB8ICAgOCArLQogZHJpdmVy cy9wY2kvcGNpLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICstLQogZHJpdmVycy9wY2kv cGNpLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvcGNpL3F1aXJrcy5j ICAgICAgICAgICAgICAgICAgICB8ICAzOSArKysrKysrKwogaW5jbHVkZS9saW51eC9wY2kuaCAg ICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGluY2x1ZGUvbGludXgvcGNpX2lkcy5oICAgICAg ICAgICAgICAgICB8ICAgMSArCiBpbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmggICAgICAg ICAgfCAgIDYgLS0KIGluY2x1ZGUvc291bmQvaGRhdWRpby5oICAgICAgICAgICAgICAgICB8ICAg MyAtCiBzb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jICAgICAgICAgICAgICAgfCAgMzYgKysrKyst LS0KIHNvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmggICAgICAgICAgICAgICB8ICAgMyAtCiAxNSBm aWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgMTk4IGRlbGV0aW9ucygtKQoKLS0gCjIu MTUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91 dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout1.hostsharing.net ([83.223.95.204]:57951 "EHLO mailout1.hostsharing.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751052AbeBRIio (ORCPT ); Sun, 18 Feb 2018 03:38:44 -0500 Message-Id: From: Lukas Wunner Date: Sun, 18 Feb 2018 09:38:32 +0100 Subject: [PATCH 0/7] Modernize vga_switcheroo by using device link for HDA To: dri-devel@lists.freedesktop.org Cc: Peter Wu , Alex Deucher , Dave Airlie , nouveau@lists.freedesktop.org, Ben Skeggs , Lyude Paul , Hans de Goede , alsa-devel@alsa-project.org, Takashi Iwai , Jaroslav Kysela , linux-pm@vger.kernel.org, "Rafael J. Wysocki" , Pierre Moreau , Bastien Nocera , Bjorn Helgaas , linux-pci@vger.kernel.org Sender: linux-pci-owner@vger.kernel.org List-ID: Modernize vga_switcheroo by using a "device link" to enforce a runtime PM dependency from an HDA controller to the GPU it's integrated into. Remove thereby obsoleted code and fix a bunch of bugs. Device links were introduced in v4.10. Users might see a small power saving if the discrete GPU is in use and its HDA controller is not, because the HDA controller is now allowed to runtime suspend to D3hot. Probing and accessing the HDA controller while the GPU is in D3cold should be very robust, unlike before. Under the hood things become quite a bit leaner. Also, this series gets us one step closer to supporting runtime PM on muxed laptops such as the MacBook Pro because it fixes a deadlock occurring when runtime resuming the discrete GPU on switching the mux. (The deadlock occurs in vga_switcheroo_set_dynamic_switch() and that function is obsoleted and removed by this series.) The meat of the series is in patch [5/7], read its commit message for details. The other patches contain prep and cleanup work. Patches [1/7], [2/7] and [5/7] require an ack from Bjorn (and Rafael?), patch [5/7] requires an ack from Takashi. Additionally I'd appreciate a Tested-by and/or Acked-by from Peter Wu, the resident Nvidia Optimus expert, and from Alex for AMD PowerXpress because my own testing only covers the MacBook Pro. Testing and comments from anyone else are most welcome of course. The series is based on 4.16-rc1. To test it on 4.15, you need to cherry-pick 7506dc798993 and 2fa6d6cdaf28. For your convenience I've pushed a 4.15-based branch to: https://github.com/l1k/linux/commits/switcheroo_devlink_v1 Minimal test procedure for non-Macs: - Note well: Recent Optimus require that a Mini-DP or HDMI cable is plugged in on boot for the HDA device to be present. - Check that HDA, GPU and root port autosuspend when not in use: cat /sys/bus/pci/devices/0000:01:00.1/power/runtime_status # HDA cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status # GPU cat /sys/bus/pci/devices/0000:00:01.0/power/runtime_status # Root Port - Check that all three autoresume when accessing the HDA: hdajacksensetest -c 1 - Unbind the HDA controller: echo 0000:01:00.1 > /sys/bus/pci/drivers/snd_hda_intel/unbind Wait for GPU to power off, then rebind the HDA controller: echo 0000:01:00.1 > /sys/bus/pci/drivers/snd_hda_intel/bind Check dmesg for errors, try accessing HDA with hdajacksensetest. - If your laptop uses the root port's _PR3 to cut power to the GPU: Unbind the GPU: echo 0000:01:00.0 > /sys/bus/pci/drivers/{nouveau,amdgpu,radeon}/unbind Allow runtime PM on the GPU: echo auto > /sys/bus/pci/devices/0000:01:00.0/power/control Wait for GPU to power off, then rebind it: echo 0000:01:00.0 > /sys/bus/pci/drivers/{nouveau,amdgpu,radeon}/bind Check dmesg for errors. If you see any then we may need to perform further actions in pci_pm_runtime_resume(), see patch [1/7]. Thanks, Lukas Lukas Wunner (7): PCI: Restore BARs on runtime resume despite being unbound PCI: Make pci_wakeup_bus() & pci_bus_set_current_state() public vga_switcheroo: Update PCI current_state on power change vga_switcheroo: Deduplicate power state tracking vga_switcheroo: Use device link for HDA controller vga_switcheroo: Let HDA autosuspend on mux change drm/nouveau: Runtime suspend despite HDA being unbound drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 - drivers/gpu/drm/nouveau/nouveau_drm.c | 46 ---------- drivers/gpu/drm/nouveau/nouveau_drv.h | 1 - drivers/gpu/drm/radeon/radeon_drv.c | 2 - drivers/gpu/vga/vga_switcheroo.c | 152 ++++++++------------------------ drivers/pci/pci-driver.c | 8 +- drivers/pci/pci.c | 10 +-- drivers/pci/pci.h | 1 + drivers/pci/quirks.c | 39 ++++++++ include/linux/pci.h | 2 + include/linux/pci_ids.h | 1 + include/linux/vga_switcheroo.h | 6 -- include/sound/hdaudio.h | 3 - sound/pci/hda/hda_intel.c | 36 +++++--- sound/pci/hda/hda_intel.h | 3 - 15 files changed, 114 insertions(+), 198 deletions(-) -- 2.15.1