Please try the attached patch it should fix your problem.

Thanks allot for this bug report, that was just a stupid typo in the original patch which would probably went unnoticed for years otherwise.

Christian.

Am 12.05.2014 18:32, schrieb Ken Moffat:
On Mon, May 12, 2014 at 09:32:54AM +0200, Christian König wrote:
Hi Ken,

*sigh* did I already mentioned that I hate PLLs? As soon as you fix
something another use case immediately starts to break.

Please provide dmesg output created with drm.debug=0xe with and without the
patch breaking it.

Thanks in advance,
Christian.

  The reverted version is from linus's tree after -rc5 with the patch
reverted, I assume the version -00010-gc9a25d0fc393 will NOT match
any public tree because I used git revert in a local branch.  That
one works fine.

  The bad version is from a random kernel which showed the problem
while I was bisecting, in this case rc2-00086.  I first tried
booting vanilla rc5, but for some reason my blind attempt to login
and run 'dmesg >dmesg.bad' failed.

  Thanks.  Sorry you are having to deal with PLLs.

ĸen

>From 8b5c70b48d73b533f0003639cdb68bcffe7c1293 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <[email protected]>
Date: Tue, 13 May 2014 12:50:54 +0200
Subject: [PATCH] drm/radeon: fix typo in finding PLL params
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Otherwise the limit is raised to high.

Signed-off-by: Christian König <[email protected]>
---
 drivers/gpu/drm/radeon/radeon_display.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 408b6ac..f00dbbf 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -999,7 +999,7 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
 
 	/* avoid high jitter with small fractional dividers */
 	if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV && (fb_div % 10)) {
-		fb_div_min = max(fb_div_min, (9 - (fb_div % 10)) * 20 + 60);
+		fb_div_min = max(fb_div_min, (9 - (fb_div % 10)) * 20 + 50);
 		if (fb_div < fb_div_min) {
 			unsigned tmp = DIV_ROUND_UP(fb_div_min, fb_div);
 			fb_div *= tmp;
-- 
1.9.1

Reply via email to