aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch210
1 files changed, 210 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch
new file mode 100644
index 00000000..dc2324a2
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4547-drm-amdgpu-split-swSMU-baco_reset-into-enter-and-exi.patch
@@ -0,0 +1,210 @@
+From 35d91a87c879ace6c7a7936a0b11a9a319f0268e Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 28 Oct 2019 15:20:03 -0400
+Subject: [PATCH 4547/4736] drm/amdgpu: split swSMU baco_reset into enter and
+ exit
+
+BACO - Bus Active, Chip Off
+
+So we can use it for power savings rather than just reset.
+
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/nv.c | 7 ++++++-
+ drivers/gpu/drm/amd/amdgpu/soc15.c | 10 ++++++++--
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 20 ++++++++++++++++---
+ drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 3 ++-
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 6 ++++--
+ drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h | 3 ++-
+ drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 3 ++-
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 9 ++++++++-
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 3 ++-
+ 9 files changed, 51 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c
+index 5cdd6528f011..66af92e7dcdf 100644
+--- a/drivers/gpu/drm/amd/amdgpu/nv.c
++++ b/drivers/gpu/drm/amd/amdgpu/nv.c
+@@ -352,7 +352,12 @@ static int nv_asic_reset(struct amdgpu_device *adev)
+ if (nv_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
+ if (!adev->in_suspend)
+ amdgpu_inc_vram_lost(adev);
+- ret = smu_baco_reset(smu);
++ ret = smu_baco_enter(smu);
++ if (ret)
++ return ret;
++ ret = smu_baco_exit(smu);
++ if (ret)
++ return ret;
+ } else {
+ if (!adev->in_suspend)
+ amdgpu_inc_vram_lost(adev);
+diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
+index 92230f1af2dd..805a92f87bf3 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
+@@ -510,9 +510,15 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
+
+ if (is_support_sw_smu(adev)) {
+ struct smu_context *smu = &adev->smu;
++ int ret;
+
+- if (smu_baco_reset(smu))
+- return -EIO;
++ ret = smu_baco_enter(smu);
++ if (ret)
++ return ret;
++
++ ret = smu_baco_exit(smu);
++ if (ret)
++ return ret;
+ } else {
+ void *pp_handle = adev->powerplay.pp_handle;
+ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index 9483f5ff64e7..acbbafeea01c 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -2456,14 +2456,28 @@ int smu_baco_get_state(struct smu_context *smu, enum smu_baco_state *state)
+ return 0;
+ }
+
+-int smu_baco_reset(struct smu_context *smu)
++int smu_baco_enter(struct smu_context *smu)
+ {
+ int ret = 0;
+
+ mutex_lock(&smu->mutex);
+
+- if (smu->ppt_funcs->baco_reset)
+- ret = smu->ppt_funcs->baco_reset(smu);
++ if (smu->ppt_funcs->baco_enter)
++ ret = smu->ppt_funcs->baco_enter(smu);
++
++ mutex_unlock(&smu->mutex);
++
++ return ret;
++}
++
++int smu_baco_exit(struct smu_context *smu)
++{
++ int ret = 0;
++
++ mutex_lock(&smu->mutex);
++
++ if (smu->ppt_funcs->baco_exit)
++ ret = smu->ppt_funcs->baco_exit(smu);
+
+ mutex_unlock(&smu->mutex);
+
+diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+index 06c331d1e3e7..cf3c31b0524c 100644
+--- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+@@ -2163,7 +2163,8 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
+ .baco_is_support= smu_v11_0_baco_is_support,
+ .baco_get_state = smu_v11_0_baco_get_state,
+ .baco_set_state = smu_v11_0_baco_set_state,
+- .baco_reset = smu_v11_0_baco_reset,
++ .baco_enter = smu_v11_0_baco_enter,
++ .baco_exit = smu_v11_0_baco_exit,
+ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
+ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
+ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 5bac7efcd6ee..ada4a8dc4112 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -546,7 +546,8 @@ struct pptable_funcs {
+ bool (*baco_is_support)(struct smu_context *smu);
+ enum smu_baco_state (*baco_get_state)(struct smu_context *smu);
+ int (*baco_set_state)(struct smu_context *smu, enum smu_baco_state state);
+- int (*baco_reset)(struct smu_context *smu);
++ int (*baco_enter)(struct smu_context *smu);
++ int (*baco_exit)(struct smu_context *smu);
+ int (*mode2_reset)(struct smu_context *smu);
+ int (*get_dpm_ultimate_freq)(struct smu_context *smu, enum smu_clk_type clk_type, uint32_t *min, uint32_t *max);
+ int (*set_soft_freq_limited_range)(struct smu_context *smu, enum smu_clk_type clk_type, uint32_t min, uint32_t max);
+@@ -628,7 +629,8 @@ bool smu_baco_is_support(struct smu_context *smu);
+
+ int smu_baco_get_state(struct smu_context *smu, enum smu_baco_state *state);
+
+-int smu_baco_reset(struct smu_context *smu);
++int smu_baco_enter(struct smu_context *smu);
++int smu_baco_exit(struct smu_context *smu);
+
+ int smu_mode2_reset(struct smu_context *smu);
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
+index e71445548c6f..716fcb274191 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
+@@ -249,7 +249,8 @@ enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
+
+ int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state);
+
+-int smu_v11_0_baco_reset(struct smu_context *smu);
++int smu_v11_0_baco_enter(struct smu_context *smu);
++int smu_v11_0_baco_exit(struct smu_context *smu);
+
+ int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t *min, uint32_t *max);
+diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+index 8d5f33baaa77..24765e813cc2 100644
+--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+@@ -2109,7 +2109,8 @@ static const struct pptable_funcs navi10_ppt_funcs = {
+ .baco_is_support= smu_v11_0_baco_is_support,
+ .baco_get_state = smu_v11_0_baco_get_state,
+ .baco_set_state = smu_v11_0_baco_set_state,
+- .baco_reset = smu_v11_0_baco_reset,
++ .baco_enter = smu_v11_0_baco_enter,
++ .baco_exit = smu_v11_0_baco_exit,
+ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
+ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
+ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 52aadbaaabda..dd4437a9b3d0 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -1714,7 +1714,7 @@ int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state)
+ return ret;
+ }
+
+-int smu_v11_0_baco_reset(struct smu_context *smu)
++int smu_v11_0_baco_enter(struct smu_context *smu)
+ {
+ struct amdgpu_device *adev = smu->adev;
+ int ret = 0;
+@@ -1732,6 +1732,13 @@ int smu_v11_0_baco_reset(struct smu_context *smu)
+
+ msleep(10);
+
++ return ret;
++}
++
++int smu_v11_0_baco_exit(struct smu_context *smu)
++{
++ int ret = 0;
++
+ ret = smu_v11_0_baco_set_state(smu, SMU_BACO_STATE_EXIT);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index 399697a2ad7f..83862544a45c 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -3257,7 +3257,8 @@ static const struct pptable_funcs vega20_ppt_funcs = {
+ .baco_is_support= smu_v11_0_baco_is_support,
+ .baco_get_state = smu_v11_0_baco_get_state,
+ .baco_set_state = smu_v11_0_baco_set_state,
+- .baco_reset = smu_v11_0_baco_reset,
++ .baco_enter = smu_v11_0_baco_enter,
++ .baco_exit = smu_v11_0_baco_exit,
+ .get_dpm_ultimate_freq = smu_v11_0_get_dpm_ultimate_freq,
+ .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range,
+ .override_pcie_parameters = smu_v11_0_override_pcie_parameters,
+--
+2.17.1
+