Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5480f727 authored by Dave Airlie's avatar Dave Airlie
Browse files

Revert "drm/radeon/kms: remove some pll algo flags"



This reverts commit f28488c2.

On my rv610 test machine the monitor failed to light up after this.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent c9220b0f
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -501,9 +501,21 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
		    (rdev->family == CHIP_RS740))
		    (rdev->family == CHIP_RS740))
			pll->flags |= (/*RADEON_PLL_USE_FRAC_FB_DIV |*/
			pll->flags |= (/*RADEON_PLL_USE_FRAC_FB_DIV |*/
				       RADEON_PLL_PREFER_CLOSEST_LOWER);
				       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;
		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) {
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
		if (encoder->crtc == crtc) {
		if (encoder->crtc == crtc) {
			radeon_encoder = to_radeon_encoder(encoder);
			radeon_encoder = to_radeon_encoder(encoder);
+24 −2
Original line number Original line Diff line number Diff line
@@ -611,8 +611,7 @@ void radeon_compute_pll(struct radeon_pll *pll,
					if ((best_vco == 0 && error < best_error) ||
					if ((best_vco == 0 && error < best_error) ||
					    (best_vco != 0 &&
					    (best_vco != 0 &&
					     ((best_error > 100 && error < best_error - 100) ||
					     ((best_error > 100 && error < best_error - 100) ||
					      (abs(error - best_error) < 100 &&
					      (abs(error - best_error) < 100 && vco_diff < best_vco_diff)))) {
					       vco_diff < best_vco_diff)))) {
						best_post_div = post_div;
						best_post_div = post_div;
						best_ref_div = ref_div;
						best_ref_div = ref_div;
						best_feedback_div = feedback_div;
						best_feedback_div = feedback_div;
@@ -620,6 +619,29 @@ void radeon_compute_pll(struct radeon_pll *pll,
						best_freq = current_freq;
						best_freq = current_freq;
						best_error = error;
						best_error = error;
						best_vco_diff = vco_diff;
						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)
					if (current_freq < freq)
						min_frac_feed_div = frac_feedback_div + 1;
						min_frac_feed_div = frac_feedback_div + 1;
+5 −0
Original line number Original line Diff line number Diff line
@@ -745,6 +745,11 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)


	pll->flags = RADEON_PLL_LEGACY;
	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) {
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
		if (encoder->crtc == crtc) {
		if (encoder->crtc == crtc) {
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+10 −4
Original line number Original line Diff line number Diff line
@@ -139,10 +139,16 @@ struct radeon_tmds_pll {
#define RADEON_PLL_NO_ODD_POST_DIV      (1 << 1)
#define RADEON_PLL_NO_ODD_POST_DIV      (1 << 1)
#define RADEON_PLL_USE_REF_DIV          (1 << 2)
#define RADEON_PLL_USE_REF_DIV          (1 << 2)
#define RADEON_PLL_LEGACY               (1 << 3)
#define RADEON_PLL_LEGACY               (1 << 3)
#define RADEON_PLL_USE_FRAC_FB_DIV      (1 << 4)
#define RADEON_PLL_PREFER_LOW_REF_DIV   (1 << 4)
#define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 5)
#define RADEON_PLL_PREFER_HIGH_REF_DIV  (1 << 5)
#define RADEON_PLL_USE_POST_DIV         (1 << 6)
#define RADEON_PLL_PREFER_LOW_FB_DIV    (1 << 6)
#define RADEON_PLL_IS_LCD               (1 << 7)
#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 {
struct radeon_pll {
	/* reference frequency */
	/* reference frequency */