This patch set enables BACO (Bus Active Chip Off) for power savings on VI+ asics. Similar to PowerXpress and Hybrid Graphics (PX/HG) laptops, we can disable GPUs at runtime when they are not in use if they support BACO. The runtime pm code in amdgpu was originally developed for PX/HG laptops, so it was pretty entangled with the vga_switcheroo and ACPI code. Since the GPU contains an audio codec for HDMI/DP, there is some interaction with the hda driver. I am by no means an expert on alsa, so any advice on those patches is much appreciated. I had to enable runtime pm on the hda device to allow the GPU to enter runtime pm because they are linked.
The full tree can be found here: https://cgit.freedesktop.org/~agd5f/linux/log/?h=baco
TODO: - Turn off runtime pm when KFD user queues are active
I've tested these pretty extensively on the asics I have access to. All seems to work properly. HDMI audio works fine with runtime pm both with and without the GPU BACO stuff.
I'd like to land the the audio patches and the first 15 GPU patches. I don't plan to enable this by default (last patch in the GPU set) until the KFD changes are in place to properly handle runtime pm, however it can be enabled via module parameter (runpm=1).
v2: - Split whitespace changes from baco callback addition - Fix pci ref counting in px/hg handling in hda driver - Handle CONFIG_ACPI properly - Split adding new hda pci ids from adding runpm flag
v3: - Don't enable BACO on Navi chips yet
Alex Deucher (20): drm/amdgpu: add asic callback for BACO support drm/amdgpu: add supports_baco callback for soc15 asics. (v2) drm/amdgpu: add supports_baco callback for SI asics. drm/amdgpu: add supports_baco callback for CIK asics. drm/amdgpu: add supports_baco callback for VI asics. drm/amdgpu: add supports_baco callback for NV asics. drm/amdgpu: add a amdgpu_device_supports_baco helper drm/amdgpu: rename amdgpu_device_is_px to amdgpu_device_supports_boco (v2) drm/amdgpu: add additional boco checks to runtime suspend/resume (v2) drm/amdgpu: split swSMU baco_reset into enter and exit drm/amdgpu: add helpers for baco entry and exit drm/amdgpu: add baco support to runtime suspend/resume drm/amdgpu: start to disentangle boco from runtime pm drm/amdgpu: disentangle runtime pm and vga_switcheroo drm/amdgpu: enable runtime pm on BACO capable boards if runpm=1 drm/amdgpu/runpm: enable runpm on baco capable VI+ asics (v2) ALSA: hda/hdmi - fix vgaswitcheroo detection for AMD ALSA: hda/hdmi - Add new pci ids for AMD GPU display audio ALSA: hda/hdmi - enable runtime pm for newer AMD display audio ALSA: hda/hdmi - enable automatic runtime pm for AMD HDMI codecs by default
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 11 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 106 ++++++++++++++++-- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 63 ++++++----- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 21 +++- drivers/gpu/drm/amd/amdgpu/cik.c | 18 +++ drivers/gpu/drm/amd/amdgpu/nv.c | 18 ++- drivers/gpu/drm/amd/amdgpu/si.c | 6 + drivers/gpu/drm/amd/amdgpu/soc15.c | 34 +++++- drivers/gpu/drm/amd/amdgpu/vi.c | 22 ++++ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 20 +++- drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 3 +- .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 6 +- drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h | 3 +- drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 3 +- drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 9 +- drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 3 +- sound/pci/hda/hda_intel.c | 80 ++++++++++++- sound/pci/hda/patch_hdmi.c | 1 + 18 files changed, 366 insertions(+), 61 deletions(-)