diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch new file mode 100644 index 00000000..075294bc --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch @@ -0,0 +1,94 @@ +From 1d318cb06e47cb7a5235ba28549c45ec9f6d0c2c Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Fri, 4 Oct 2019 10:50:24 -0500 +Subject: [PATCH 4546/4736] drm/amdgpu: add additional boco checks to runtime + suspend/resume (v2) + +BACO - Bus Active, Chip Off +BOCO - Bus Off, Chip Off + +We will take slightly different paths for boco and baco. + +v2: fold together two consecutive if clauses + +Change-Id: I2467c2906f855140f909cff322be587850c16a25 +Reviewed-by: Evan Quan <evan.quan@amd.com> (v1) +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Rahul Kumar <rahul.kumar1@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 47 ++++++++++++++----------- + 1 file changed, 26 insertions(+), 21 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +index 3acdad16f0c2..db41bdba954e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -1253,18 +1253,21 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev) + return -EBUSY; + } + +- drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; ++ if (amdgpu_device_supports_boco(drm_dev)) ++ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; + drm_kms_helper_poll_disable(drm_dev); + + ret = amdgpu_device_suspend(drm_dev, false, false); +- pci_save_state(pdev); +- pci_disable_device(pdev); +- pci_ignore_hotplug(pdev); +- if (amdgpu_is_atpx_hybrid()) +- pci_set_power_state(pdev, PCI_D3cold); +- else if (!amdgpu_has_atpx_dgpu_power_cntl()) +- pci_set_power_state(pdev, PCI_D3hot); +- drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; ++ if (amdgpu_device_supports_boco(drm_dev)) { ++ pci_save_state(pdev); ++ pci_disable_device(pdev); ++ pci_ignore_hotplug(pdev); ++ if (amdgpu_is_atpx_hybrid()) ++ pci_set_power_state(pdev, PCI_D3cold); ++ else if (!amdgpu_has_atpx_dgpu_power_cntl()) ++ pci_set_power_state(pdev, PCI_D3hot); ++ drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; ++ } + + return 0; + } +@@ -1278,20 +1281,22 @@ static int amdgpu_pmops_runtime_resume(struct device *dev) + if (!amdgpu_device_supports_boco(drm_dev)) + return -EINVAL; + +- drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; +- +- if (amdgpu_is_atpx_hybrid() || +- !amdgpu_has_atpx_dgpu_power_cntl()) +- pci_set_power_state(pdev, PCI_D0); +- pci_restore_state(pdev); +- ret = pci_enable_device(pdev); +- if (ret) +- return ret; +- pci_set_master(pdev); +- ++ if (amdgpu_device_supports_boco(drm_dev)) { ++ drm_dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; ++ ++ if (amdgpu_is_atpx_hybrid() || ++ !amdgpu_has_atpx_dgpu_power_cntl()) ++ pci_set_power_state(pdev, PCI_D0); ++ pci_restore_state(pdev); ++ ret = pci_enable_device(pdev); ++ if (ret) ++ return ret; ++ pci_set_master(pdev); ++ } + ret = amdgpu_device_resume(drm_dev, false, false); + drm_kms_helper_poll_enable(drm_dev); +- drm_dev->switch_power_state = DRM_SWITCH_POWER_ON; ++ if (amdgpu_device_supports_boco(drm_dev)) ++ drm_dev->switch_power_state = DRM_SWITCH_POWER_ON; + return 0; + } + +-- +2.17.1 + |