summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/pm/swsmu
diff options
context:
space:
mode:
authorKenneth Feng <kenneth.feng@amd.com>2024-04-26 04:30:25 +0300
committerAlex Deucher <alexander.deucher@amd.com>2024-05-23 22:11:45 +0300
commit6b18376ef37c3dd2bbf34ed4b42fefaa1f348a3d (patch)
tree05095ddca19312a9d4ff61aa02f0518390887d56 /drivers/gpu/drm/amd/pm/swsmu
parente21e0b782430c7731b0f12ebb7a5e2ff7c20d86b (diff)
downloadlinux-6b18376ef37c3dd2bbf34ed4b42fefaa1f348a3d.tar.xz
drm/amd/pm: workaround to pass jpeg unit test
this is a workaround to pass jpeg unit test on vcn 5.0 now. will be removed later. Signed-off-by: Kenneth Feng <kenneth.feng@amd.com> Reviewed-by: Sonny Jiang <sonny.jiang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/pm/swsmu')
-rw-r--r--drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c3
-rw-r--r--drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c30
2 files changed, 31 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 52b99fc04a66..6f742d88867d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -237,6 +237,7 @@ static int smu_dpm_set_vcn_enable(struct smu_context *smu,
{
struct smu_power_context *smu_power = &smu->smu_power;
struct smu_power_gate *power_gate = &smu_power->power_gate;
+ struct amdgpu_device *adev = smu->adev;
int ret = 0;
/*
@@ -252,7 +253,7 @@ static int smu_dpm_set_vcn_enable(struct smu_context *smu,
return 0;
ret = smu->ppt_funcs->dpm_set_vcn_enable(smu, enable);
- if (!ret)
+ if (!ret && !adev->enable_jpeg_test)
atomic_set(&power_gate->vcn_gated, !enable);
return ret;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
index 98ea58d792ca..7179cdacf156 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
@@ -1869,6 +1869,34 @@ static ssize_t smu_v14_0_2_get_ecc_info(struct smu_context *smu,
return ret;
}
+static int smu_v14_0_2_set_vcn_enable(struct smu_context *smu,
+ bool enable)
+{
+ struct amdgpu_device *adev = smu->adev;
+ struct smu_power_gate *power_gate = &smu->smu_power.power_gate;
+ int i, ret = 0;
+
+ if (!adev->enable_jpeg_test)
+ return smu_v14_0_set_vcn_enable(smu, enable);
+
+ if (!atomic_read(&power_gate->vcn_gated) || !enable)
+ return 0;
+
+ for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+ if (adev->vcn.harvest_config & (1 << i))
+ continue;
+
+ ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn,
+ i << 16U, NULL);
+ if (ret)
+ return ret;
+ }
+
+ atomic_set(&power_gate->vcn_gated, 0);
+
+ return ret;
+}
+
static const struct pptable_funcs smu_v14_0_2_ppt_funcs = {
.get_allowed_feature_mask = smu_v14_0_2_get_allowed_feature_mask,
.set_default_dpm_table = smu_v14_0_2_set_default_dpm_table,
@@ -1891,7 +1919,7 @@ static const struct pptable_funcs smu_v14_0_2_ppt_funcs = {
.system_features_control = smu_v14_0_system_features_control,
.set_allowed_mask = smu_v14_0_set_allowed_mask,
.get_enabled_mask = smu_cmn_get_enabled_mask,
- .dpm_set_vcn_enable = smu_v14_0_set_vcn_enable,
+ .dpm_set_vcn_enable = smu_v14_0_2_set_vcn_enable,
.dpm_set_jpeg_enable = smu_v14_0_set_jpeg_enable,
.get_dpm_ultimate_freq = smu_v14_0_2_get_dpm_ultimate_freq,
.get_vbios_bootup_values = smu_v14_0_get_vbios_bootup_values,