aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4546-drm-amdgpu-add-additional-boco-checks-to-runtime-sus.patch
diff options
context:
space:
mode:
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.patch94
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
+