Revert "drm/radeon/kms: remove some pll algo flags"
This reverts commit f28488c282
.
On my rv610 test machine the monitor failed to light up after this.
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
c9220b0f7c
commit
5480f727dc
4 changed files with 52 additions and 7 deletions
|
@ -501,9 +501,21 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
(rdev->family == CHIP_RS740))
|
||||
pll->flags |= (/*RADEON_PLL_USE_FRAC_FB_DIV |*/
|
||||
RADEON_PLL_PREFER_CLOSEST_LOWER);
|
||||
} else
|
||||
|
||||
if (ASIC_IS_DCE32(rdev) && mode->clock > 200000) /* range limits??? */
|
||||
pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;
|
||||
else
|
||||
pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
|
||||
} else {
|
||||
pll->flags |= RADEON_PLL_LEGACY;
|
||||
|
||||
if (mode->clock > 200000) /* range limits??? */
|
||||
pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;
|
||||
else
|
||||
pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
|
||||
|
||||
}
|
||||
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
if (encoder->crtc == crtc) {
|
||||
radeon_encoder = to_radeon_encoder(encoder);
|
||||
|
|
|
@ -611,8 +611,7 @@ void radeon_compute_pll(struct radeon_pll *pll,
|
|||
if ((best_vco == 0 && error < best_error) ||
|
||||
(best_vco != 0 &&
|
||||
((best_error > 100 && error < best_error - 100) ||
|
||||
(abs(error - best_error) < 100 &&
|
||||
vco_diff < best_vco_diff)))) {
|
||||
(abs(error - best_error) < 100 && vco_diff < best_vco_diff)))) {
|
||||
best_post_div = post_div;
|
||||
best_ref_div = ref_div;
|
||||
best_feedback_div = feedback_div;
|
||||
|
@ -620,6 +619,29 @@ void radeon_compute_pll(struct radeon_pll *pll,
|
|||
best_freq = current_freq;
|
||||
best_error = error;
|
||||
best_vco_diff = vco_diff;
|
||||
} else if (current_freq == freq) {
|
||||
if (best_freq == -1) {
|
||||
best_post_div = post_div;
|
||||
best_ref_div = ref_div;
|
||||
best_feedback_div = feedback_div;
|
||||
best_frac_feedback_div = frac_feedback_div;
|
||||
best_freq = current_freq;
|
||||
best_error = error;
|
||||
best_vco_diff = vco_diff;
|
||||
} else if (((pll->flags & RADEON_PLL_PREFER_LOW_REF_DIV) && (ref_div < best_ref_div)) ||
|
||||
((pll->flags & RADEON_PLL_PREFER_HIGH_REF_DIV) && (ref_div > best_ref_div)) ||
|
||||
((pll->flags & RADEON_PLL_PREFER_LOW_FB_DIV) && (feedback_div < best_feedback_div)) ||
|
||||
((pll->flags & RADEON_PLL_PREFER_HIGH_FB_DIV) && (feedback_div > best_feedback_div)) ||
|
||||
((pll->flags & RADEON_PLL_PREFER_LOW_POST_DIV) && (post_div < best_post_div)) ||
|
||||
((pll->flags & RADEON_PLL_PREFER_HIGH_POST_DIV) && (post_div > best_post_div))) {
|
||||
best_post_div = post_div;
|
||||
best_ref_div = ref_div;
|
||||
best_feedback_div = feedback_div;
|
||||
best_frac_feedback_div = frac_feedback_div;
|
||||
best_freq = current_freq;
|
||||
best_error = error;
|
||||
best_vco_diff = vco_diff;
|
||||
}
|
||||
}
|
||||
if (current_freq < freq)
|
||||
min_frac_feed_div = frac_feedback_div + 1;
|
||||
|
|
|
@ -745,6 +745,11 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
|
|||
|
||||
pll->flags = RADEON_PLL_LEGACY;
|
||||
|
||||
if (mode->clock > 200000) /* range limits??? */
|
||||
pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;
|
||||
else
|
||||
pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
|
||||
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
if (encoder->crtc == crtc) {
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
|
|
|
@ -139,10 +139,16 @@ struct radeon_tmds_pll {
|
|||
#define RADEON_PLL_NO_ODD_POST_DIV (1 << 1)
|
||||
#define RADEON_PLL_USE_REF_DIV (1 << 2)
|
||||
#define RADEON_PLL_LEGACY (1 << 3)
|
||||
#define RADEON_PLL_USE_FRAC_FB_DIV (1 << 4)
|
||||
#define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 5)
|
||||
#define RADEON_PLL_USE_POST_DIV (1 << 6)
|
||||
#define RADEON_PLL_IS_LCD (1 << 7)
|
||||
#define RADEON_PLL_PREFER_LOW_REF_DIV (1 << 4)
|
||||
#define RADEON_PLL_PREFER_HIGH_REF_DIV (1 << 5)
|
||||
#define RADEON_PLL_PREFER_LOW_FB_DIV (1 << 6)
|
||||
#define RADEON_PLL_PREFER_HIGH_FB_DIV (1 << 7)
|
||||
#define RADEON_PLL_PREFER_LOW_POST_DIV (1 << 8)
|
||||
#define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9)
|
||||
#define RADEON_PLL_USE_FRAC_FB_DIV (1 << 10)
|
||||
#define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11)
|
||||
#define RADEON_PLL_USE_POST_DIV (1 << 12)
|
||||
#define RADEON_PLL_IS_LCD (1 << 13)
|
||||
|
||||
struct radeon_pll {
|
||||
/* reference frequency */
|
||||
|
|
Loading…
Reference in a new issue