Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon/tn/si: 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, call vce_v1_0_enable_mgcg directly

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+16 -2
+8 -1
drivers/gpu/drm/radeon/si_dpm.c
··· 1740 1740 struct ni_ps *ni_get_ps(struct radeon_ps *rps); 1741 1741 1742 1742 extern int si_mc_load_microcode(struct radeon_device *rdev); 1743 + extern void vce_v1_0_enable_mgcg(struct radeon_device *rdev, bool enable); 1743 1744 1744 1745 static int si_populate_voltage_value(struct radeon_device *rdev, 1745 1746 const struct atom_voltage_table *table, ··· 5933 5932 struct radeon_ps *old_rps) 5934 5933 { 5935 5934 if ((old_rps->evclk != new_rps->evclk) || 5936 - (old_rps->ecclk != new_rps->ecclk)) 5935 + (old_rps->ecclk != new_rps->ecclk)) { 5936 + /* turn the clocks on when encoding, off otherwise */ 5937 + if (new_rps->evclk || new_rps->ecclk) 5938 + vce_v1_0_enable_mgcg(rdev, false); 5939 + else 5940 + vce_v1_0_enable_mgcg(rdev, true); 5937 5941 radeon_set_vce_clocks(rdev, new_rps->evclk, new_rps->ecclk); 5942 + } 5938 5943 } 5939 5944 5940 5945 void si_dpm_setup_asic(struct radeon_device *rdev)
+8 -1
drivers/gpu/drm/radeon/trinity_dpm.c
··· 336 336 0x00000204, 0x00000000, 337 337 }; 338 338 339 + extern void vce_v1_0_enable_mgcg(struct radeon_device *rdev, bool enable); 339 340 static void trinity_program_clk_gating_hw_sequence(struct radeon_device *rdev, 340 341 const u32 *seq, u32 count); 341 342 static void trinity_override_dynamic_mg_powergating(struct radeon_device *rdev); ··· 991 990 struct radeon_ps *old_rps) 992 991 { 993 992 if ((old_rps->evclk != new_rps->evclk) || 994 - (old_rps->ecclk != new_rps->ecclk)) 993 + (old_rps->ecclk != new_rps->ecclk)) { 994 + /* turn the clocks on when encoding, off otherwise */ 995 + if (new_rps->evclk || new_rps->ecclk) 996 + vce_v1_0_enable_mgcg(rdev, false); 997 + else 998 + vce_v1_0_enable_mgcg(rdev, true); 995 999 radeon_set_vce_clocks(rdev, new_rps->evclk, new_rps->ecclk); 1000 + } 996 1001 } 997 1002 998 1003 static void trinity_program_ttt(struct radeon_device *rdev)