aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch
new file mode 100644
index 00000000..f3fe7ccb
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch
@@ -0,0 +1,100 @@
+From 34656170efd682732e9b3e565cb013055295dbbe Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 15 Oct 2019 14:27:01 -0400
+Subject: [PATCH 4149/4736] drm/amdgpu/soc15: add support for baco reset with
+ swSMU
+
+Add support for vega20 when the swSMU path is used.
+
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/soc15.c | 53 ++++++++++++++++++++----------
+ 1 file changed, 35 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
+index 5fadb237d103..438722c0b76a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
+@@ -477,15 +477,22 @@ static int soc15_asic_mode1_reset(struct amdgpu_device *adev)
+
+ static int soc15_asic_get_baco_capability(struct amdgpu_device *adev, bool *cap)
+ {
+- void *pp_handle = adev->powerplay.pp_handle;
+- const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
++ if (is_support_sw_smu(adev)) {
++ struct smu_context *smu = &adev->smu;
+
+- if (!pp_funcs || !pp_funcs->get_asic_baco_capability) {
+- *cap = false;
+- return -ENOENT;
+- }
++ *cap = smu_baco_is_support(smu);
++ 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_capability) {
++ *cap = false;
++ return -ENOENT;
++ }
+
+- return pp_funcs->get_asic_baco_capability(pp_handle, cap);
++ return pp_funcs->get_asic_baco_capability(pp_handle, cap);
++ }
+ }
+
+ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
+@@ -494,27 +501,37 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
+ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
+ struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
+
+- if (!pp_funcs ||!pp_funcs->get_asic_baco_state ||!pp_funcs->set_asic_baco_state)
+- return -ENOENT;
+-
+ /* avoid NBIF got stuck when do RAS recovery in BACO reset */
+ if (ras && ras->supported)
+ adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
+
+- /* enter BACO state */
+- if (pp_funcs->set_asic_baco_state(pp_handle, 1))
+- return -EIO;
++ dev_info(adev->dev, "GPU BACO reset\n");
++
++ if (is_support_sw_smu(adev)) {
++ struct smu_context *smu = &adev->smu;
++
++ if (smu_baco_reset(smu))
++ return -EIO;
++ } 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;
+
+- /* exit BACO state */
+- if (pp_funcs->set_asic_baco_state(pp_handle, 0))
+- return -EIO;
++ /* exit BACO state */
++ if (pp_funcs->set_asic_baco_state(pp_handle, 0))
++ return -EIO;
++ }
+
+ /* re-enable doorbell interrupt after BACO exit */
+ if (ras && ras->supported)
+ adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
+
+- dev_info(adev->dev, "GPU BACO reset\n");
+-
+ return 0;
+ }
+
+--
+2.17.1
+