aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4567-drm-amdgpu-simplify-runtime-suspend.patch
diff options
context:
space:
mode:
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.patch77
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
+