Commit 942bdf7f authored by Alex Deucher's avatar Alex Deucher

drm/radeon/dpm: implement UVD powergating for CI

Disable the UVD block when not in use to save power.
The block is not actually powergated on CI, but we
switch between UVD DPM (where the uvd clocks are
adjusted on demand) and clocks off.
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 77df508a
...@@ -677,7 +677,7 @@ static int ci_power_control_set_level(struct radeon_device *rdev) ...@@ -677,7 +677,7 @@ static int ci_power_control_set_level(struct radeon_device *rdev)
return ret; return ret;
} }
static void ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate) void ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate)
{ {
ci_update_uvd_dpm(rdev, gate); ci_update_uvd_dpm(rdev, gate);
} }
...@@ -4674,11 +4674,6 @@ int ci_dpm_set_power_state(struct radeon_device *rdev) ...@@ -4674,11 +4674,6 @@ int ci_dpm_set_power_state(struct radeon_device *rdev)
return ret; return ret;
} }
#endif #endif
ret = ci_update_uvd_dpm(rdev, false);
if (ret) {
DRM_ERROR("ci_update_uvd_dpm failed\n");
return ret;
}
ret = ci_update_sclk_t(rdev); ret = ci_update_sclk_t(rdev);
if (ret) { if (ret) {
DRM_ERROR("ci_update_sclk_t failed\n"); DRM_ERROR("ci_update_sclk_t failed\n");
......
...@@ -2470,6 +2470,7 @@ static struct radeon_asic ci_asic = { ...@@ -2470,6 +2470,7 @@ static struct radeon_asic ci_asic = {
.debugfs_print_current_performance_level = &ci_dpm_debugfs_print_current_performance_level, .debugfs_print_current_performance_level = &ci_dpm_debugfs_print_current_performance_level,
.force_performance_level = &ci_dpm_force_performance_level, .force_performance_level = &ci_dpm_force_performance_level,
.vblank_too_short = &ci_dpm_vblank_too_short, .vblank_too_short = &ci_dpm_vblank_too_short,
.powergate_uvd = &ci_dpm_powergate_uvd,
}, },
.pflip = { .pflip = {
.pre_page_flip = &evergreen_pre_page_flip, .pre_page_flip = &evergreen_pre_page_flip,
......
...@@ -766,6 +766,7 @@ void ci_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, ...@@ -766,6 +766,7 @@ void ci_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
int ci_dpm_force_performance_level(struct radeon_device *rdev, int ci_dpm_force_performance_level(struct radeon_device *rdev,
enum radeon_dpm_forced_level level); enum radeon_dpm_forced_level level);
bool ci_dpm_vblank_too_short(struct radeon_device *rdev); bool ci_dpm_vblank_too_short(struct radeon_device *rdev);
void ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
int kv_dpm_init(struct radeon_device *rdev); int kv_dpm_init(struct radeon_device *rdev);
int kv_dpm_enable(struct radeon_device *rdev); int kv_dpm_enable(struct radeon_device *rdev);
......
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