aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-10-13 11:35:06 -0400
committerAlex Deucher <alexander.deucher@amd.com>2014-10-13 11:35:06 -0400
commit1db7802418596880b51d78408f10f25e6fbd8656 (patch)
tree81c27f4680629a9ebae0f86e0a47d74891103560
parent60779143b5451095b4bbfb021d39955cb4794913 (diff)
Revert "drm/radeon/dpm: drop clk/voltage dependency filters for SI"
This reverts commit 186b1b2ba2a0684e3d2d3703427a993a3b35b16d. There are still some stability problems on some SI boards so bring this back.
-rw-r--r--drivers/gpu/drm/radeon/si_dpm.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index 9e4d5d7d348f..70e61ffeace2 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -2916,6 +2916,7 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
2916 bool disable_sclk_switching = false; 2916 bool disable_sclk_switching = false;
2917 u32 mclk, sclk; 2917 u32 mclk, sclk;
2918 u16 vddc, vddci; 2918 u16 vddc, vddci;
2919 u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc;
2919 int i; 2920 int i;
2920 2921
2921 if ((rdev->pm.dpm.new_active_crtc_count > 1) || 2922 if ((rdev->pm.dpm.new_active_crtc_count > 1) ||
@@ -2949,6 +2950,29 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
2949 } 2950 }
2950 } 2951 }
2951 2952
2953 /* limit clocks to max supported clocks based on voltage dependency tables */
2954 btc_get_max_clock_from_voltage_dependency_table(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk,
2955 &max_sclk_vddc);
2956 btc_get_max_clock_from_voltage_dependency_table(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk,
2957 &max_mclk_vddci);
2958 btc_get_max_clock_from_voltage_dependency_table(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk,
2959 &max_mclk_vddc);
2960
2961 for (i = 0; i < ps->performance_level_count; i++) {
2962 if (max_sclk_vddc) {
2963 if (ps->performance_levels[i].sclk > max_sclk_vddc)
2964 ps->performance_levels[i].sclk = max_sclk_vddc;
2965 }
2966 if (max_mclk_vddci) {
2967 if (ps->performance_levels[i].mclk > max_mclk_vddci)
2968 ps->performance_levels[i].mclk = max_mclk_vddci;
2969 }
2970 if (max_mclk_vddc) {
2971 if (ps->performance_levels[i].mclk > max_mclk_vddc)
2972 ps->performance_levels[i].mclk = max_mclk_vddc;
2973 }
2974 }
2975
2952 /* XXX validate the min clocks required for display */ 2976 /* XXX validate the min clocks required for display */
2953 2977
2954 if (disable_mclk_switching) { 2978 if (disable_mclk_switching) {