aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/ci_dpm.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-09-06 12:33:04 -0400
committerChristian König <christian.koenig@amd.com>2014-02-18 10:11:46 -0500
commita1d6f97c8cfa7c3554d0391c0b16505d1d97f380 (patch)
treeb99fc950e38a90fc25d9ccc066dd477c79699798 /drivers/gpu/drm/radeon/ci_dpm.c
parentb9fa18837610483b09a07f1419e6b9f333c46023 (diff)
drm/radeon/cik: enable/disable vce cg when encoding v2
Some of the vce clocks are automatic, others need to be manually enabled. For ease, just disable cg when vce is active. v2: rebased Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/ci_dpm.c')
-rw-r--r--drivers/gpu/drm/radeon/ci_dpm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
index 6669d3252f57..cad89a977527 100644
--- a/drivers/gpu/drm/radeon/ci_dpm.c
+++ b/drivers/gpu/drm/radeon/ci_dpm.c
@@ -172,6 +172,8 @@ extern void si_trim_voltage_table_to_fit_state_table(struct radeon_device *rdev,
172extern void cik_enter_rlc_safe_mode(struct radeon_device *rdev); 172extern void cik_enter_rlc_safe_mode(struct radeon_device *rdev);
173extern void cik_exit_rlc_safe_mode(struct radeon_device *rdev); 173extern void cik_exit_rlc_safe_mode(struct radeon_device *rdev);
174extern int ci_mc_load_microcode(struct radeon_device *rdev); 174extern int ci_mc_load_microcode(struct radeon_device *rdev);
175extern void cik_update_cg(struct radeon_device *rdev,
176 u32 block, bool enable);
175 177
176static int ci_get_std_voltage_value_sidd(struct radeon_device *rdev, 178static int ci_get_std_voltage_value_sidd(struct radeon_device *rdev,
177 struct atom_voltage_table_entry *voltage_table, 179 struct atom_voltage_table_entry *voltage_table,
@@ -3627,8 +3629,10 @@ static int ci_update_vce_dpm(struct radeon_device *rdev,
3627 3629
3628 if (radeon_current_state->evclk != radeon_new_state->evclk) { 3630 if (radeon_current_state->evclk != radeon_new_state->evclk) {
3629 if (radeon_new_state->evclk) { 3631 if (radeon_new_state->evclk) {
3630 pi->smc_state_table.VceBootLevel = ci_get_vce_boot_level(rdev); 3632 /* turn the clocks on when encoding */
3633 cik_update_cg(rdev, RADEON_CG_BLOCK_VCE, false);
3631 3634
3635 pi->smc_state_table.VceBootLevel = ci_get_vce_boot_level(rdev);
3632 tmp = RREG32_SMC(DPM_TABLE_475); 3636 tmp = RREG32_SMC(DPM_TABLE_475);
3633 tmp &= ~VceBootLevel_MASK; 3637 tmp &= ~VceBootLevel_MASK;
3634 tmp |= VceBootLevel(pi->smc_state_table.VceBootLevel); 3638 tmp |= VceBootLevel(pi->smc_state_table.VceBootLevel);
@@ -3636,6 +3640,9 @@ static int ci_update_vce_dpm(struct radeon_device *rdev,
3636 3640
3637 ret = ci_enable_vce_dpm(rdev, true); 3641 ret = ci_enable_vce_dpm(rdev, true);
3638 } else { 3642 } else {
3643 /* turn the clocks off when not encoding */
3644 cik_update_cg(rdev, RADEON_CG_BLOCK_VCE, true);
3645
3639 ret = ci_enable_vce_dpm(rdev, false); 3646 ret = ci_enable_vce_dpm(rdev, false);
3640 } 3647 }
3641 } 3648 }