aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch
new file mode 100644
index 00000000..59ef9498
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4548-drm-amdgpu-add-helpers-for-baco-entry-and-exit.patch
@@ -0,0 +1,106 @@
+From f98544ea9af75cdf57211c6a55b63dcf1ffeb999 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 4 Oct 2019 12:33:09 -0500
+Subject: [PATCH 4548/4736] drm/amdgpu: add helpers for baco entry and exit
+
+BACO - Bus Active, Chip Off
+
+Will be used for runtime pm. Entry will enter the BACO
+state (chip off). Exit will exit the BACO state (chip on).
+
+Change-Id: I051a4b9996af9ee7c7639be65fbd5009a4379ab3
+Reviewed-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.h | 3 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 62 ++++++++++++++++++++++
+ 2 files changed, 64 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index e0423a9efe14..9679649082cb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1192,7 +1192,8 @@ bool amdgpu_device_supports_boco(struct drm_device *dev);
+ bool amdgpu_device_supports_baco(struct drm_device *dev);
+ bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
+ struct amdgpu_device *peer_adev);
+-
++int amdgpu_device_baco_enter(struct drm_device *dev);
++int amdgpu_device_baco_exit(struct drm_device *dev);
+ /* atpx handler */
+ #if defined(CONFIG_VGA_SWITCHEROO)
+ void amdgpu_register_atpx_handler(void);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+index ac0dd28ca0a1..ebdf775ab9b0 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -4333,3 +4333,65 @@ bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
+ !(adev->gmc.aper_base & address_mask ||
+ aper_limit & address_mask);
+ }
++
++int amdgpu_device_baco_enter(struct drm_device *dev)
++{
++ struct amdgpu_device *adev = dev->dev_private;
++
++ if (!amdgpu_device_supports_baco(adev->ddev))
++ return -ENOTSUPP;
++
++ if (is_support_sw_smu(adev)) {
++ struct smu_context *smu = &adev->smu;
++ int ret;
++
++ ret = smu_baco_enter(smu);
++ if (ret)
++ return ret;
++
++ return 0;
++ } else {
++ void *pp_handle = adev->powerplay.pp_handle;
++ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
++
++ if (!pp_funcs ||!pp_funcs->get_asic_baco_state ||!pp_funcs->set_asic_baco_state)
++ return -ENOENT;
++
++ /* enter BACO state */
++ if (pp_funcs->set_asic_baco_state(pp_handle, 1))
++ return -EIO;
++
++ return 0;
++ }
++}
++
++int amdgpu_device_baco_exit(struct drm_device *dev)
++{
++ struct amdgpu_device *adev = dev->dev_private;
++
++ if (!amdgpu_device_supports_baco(adev->ddev))
++ return -ENOTSUPP;
++
++ if (is_support_sw_smu(adev)) {
++ struct smu_context *smu = &adev->smu;
++ int ret;
++
++ ret = smu_baco_exit(smu);
++ if (ret)
++ return ret;
++
++ return 0;
++ } else {
++ void *pp_handle = adev->powerplay.pp_handle;
++ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
++
++ if (!pp_funcs ||!pp_funcs->get_asic_baco_state ||!pp_funcs->set_asic_baco_state)
++ return -ENOENT;
++
++ /* exit BACO state */
++ if (pp_funcs->set_asic_baco_state(pp_handle, 0))
++ return -EIO;
++
++ return 0;
++ }
++}
+--
+2.17.1
+