diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch new file mode 100644 index 00000000..ba5d8b73 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch @@ -0,0 +1,77 @@ +From d01273461600fcd798305122d28fec38aa5e2773 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Wed, 20 Nov 2019 14:20:32 -0500 +Subject: [PATCH 4567/4736] drm/amdgpu: simplify runtime suspend + +In the standard _PR3 case, the pci core handles the pci state. +The driver only needs to handle it in the legacy ATPX case. + +This may fix issues with runtime suspend/resume on certain +hybrid graphics laptops. + +Change-Id: Ifa10d4905a885132c9f8d1168eac5bbd550d1ceb +Acked-by: Evan Quan <evan.quan@amd.com> +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 | 35 ++++++++++++++++--------- + 1 file changed, 22 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +index 6957ef4ef514..4ca9b9bde917 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -1261,13 +1261,17 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev) + + ret = amdgpu_device_suspend(drm_dev, false, false); + if (amdgpu_device_supports_boco(drm_dev)) { +- pci_save_state(pdev); +- pci_disable_device(pdev); +- pci_ignore_hotplug(pdev); +- if (amdgpu_is_atpx_hybrid()) ++ /* Only need to handle PCI state in the driver for ATPX ++ * PCI core handles it for _PR3. ++ */ ++ if (amdgpu_is_atpx_hybrid()) { ++ pci_ignore_hotplug(pdev); ++ } else { ++ pci_save_state(pdev); ++ pci_disable_device(pdev); ++ pci_ignore_hotplug(pdev); + 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; + } else if (amdgpu_device_supports_baco(drm_dev)) { + amdgpu_device_baco_enter(drm_dev); +@@ -1289,14 +1293,19 @@ static int amdgpu_pmops_runtime_resume(struct device *dev) + 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()) ++ /* Only need to handle PCI state in the driver for ATPX ++ * PCI core handles it for _PR3. ++ */ ++ if (amdgpu_is_atpx_hybrid()) { ++ pci_set_master(pdev); ++ } else { + pci_set_power_state(pdev, PCI_D0); +- pci_restore_state(pdev); +- ret = pci_enable_device(pdev); +- if (ret) +- return ret; +- pci_set_master(pdev); ++ pci_restore_state(pdev); ++ ret = pci_enable_device(pdev); ++ if (ret) ++ return ret; ++ pci_set_master(pdev); ++ } + } else if (amdgpu_device_supports_baco(drm_dev)) { + amdgpu_device_baco_exit(drm_dev); + } +-- +2.17.1 + |