Commit 5bcc9240 authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/powerplay: enable Arcturus runtime VCN dpm on/off

Enable runtime VCN DPM on/off on Arcturus.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 372120f0
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "amdgpu.h" #include "amdgpu.h"
#include "amdgpu_vcn.h" #include "amdgpu_vcn.h"
#include "amdgpu_pm.h"
#include "soc15.h" #include "soc15.h"
#include "soc15d.h" #include "soc15d.h"
#include "vcn_v2_0.h" #include "vcn_v2_0.h"
...@@ -709,6 +710,9 @@ static int vcn_v2_5_start(struct amdgpu_device *adev) ...@@ -709,6 +710,9 @@ static int vcn_v2_5_start(struct amdgpu_device *adev)
uint32_t rb_bufsz, tmp; uint32_t rb_bufsz, tmp;
int i, j, k, r; int i, j, k, r;
if (adev->pm.dpm_enabled)
amdgpu_dpm_enable_uvd(adev, true);
for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
if (adev->vcn.harvest_config & (1 << i)) if (adev->vcn.harvest_config & (1 << i))
continue; continue;
...@@ -939,6 +943,9 @@ static int vcn_v2_5_stop(struct amdgpu_device *adev) ...@@ -939,6 +943,9 @@ static int vcn_v2_5_stop(struct amdgpu_device *adev)
~UVD_POWER_STATUS__UVD_POWER_STATUS_MASK); ~UVD_POWER_STATUS__UVD_POWER_STATUS_MASK);
} }
if (adev->pm.dpm_enabled)
amdgpu_dpm_enable_uvd(adev, false);
return 0; return 0;
} }
......
...@@ -1898,6 +1898,35 @@ static bool arcturus_is_dpm_running(struct smu_context *smu) ...@@ -1898,6 +1898,35 @@ static bool arcturus_is_dpm_running(struct smu_context *smu)
return !!(feature_enabled & SMC_DPM_FEATURE); return !!(feature_enabled & SMC_DPM_FEATURE);
} }
static int arcturus_dpm_set_uvd_enable(struct smu_context *smu, bool enable)
{
struct smu_power_context *smu_power = &smu->smu_power;
struct smu_power_gate *power_gate = &smu_power->power_gate;
int ret = 0;
if (enable) {
if (!smu_feature_is_enabled(smu, SMU_FEATURE_VCN_PG_BIT)) {
ret = smu_feature_set_enabled(smu, SMU_FEATURE_VCN_PG_BIT, 1);
if (ret) {
pr_err("[EnableVCNDPM] failed!\n");
return ret;
}
}
power_gate->vcn_gated = false;
} else {
if (smu_feature_is_enabled(smu, SMU_FEATURE_VCN_PG_BIT)) {
ret = smu_feature_set_enabled(smu, SMU_FEATURE_VCN_PG_BIT, 0);
if (ret) {
pr_err("[DisableVCNDPM] failed!\n");
return ret;
}
}
power_gate->vcn_gated = true;
}
return ret;
}
static const struct pptable_funcs arcturus_ppt_funcs = { static const struct pptable_funcs arcturus_ppt_funcs = {
/* translate smu index into arcturus specific index */ /* translate smu index into arcturus specific index */
.get_smu_msg_index = arcturus_get_smu_msg_index, .get_smu_msg_index = arcturus_get_smu_msg_index,
...@@ -1936,6 +1965,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = { ...@@ -1936,6 +1965,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
.dump_pptable = arcturus_dump_pptable, .dump_pptable = arcturus_dump_pptable,
.get_power_limit = arcturus_get_power_limit, .get_power_limit = arcturus_get_power_limit,
.is_dpm_running = arcturus_is_dpm_running, .is_dpm_running = arcturus_is_dpm_running,
.dpm_set_uvd_enable = arcturus_dpm_set_uvd_enable,
}; };
void arcturus_set_ppt_funcs(struct smu_context *smu) void arcturus_set_ppt_funcs(struct smu_context *smu)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment