Re: [PATCH 5.8 101/186] drm/radeon: Prefer lower feedback dividers

From: Christian König
Date: Wed Sep 09 2020 - 07:42:48 EST


Hi Greg,

please drop that patch. It turned out to break a lot of different setups and we are going to revert it now.

Thanks,
Christian.

Am 08.09.20 um 17:24 schrieb Greg Kroah-Hartman:
From: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>

[ Upstream commit fc8c70526bd30733ea8667adb8b8ffebea30a8ed ]

Commit 2e26ccb119bd ("drm/radeon: prefer lower reference dividers")
fixed screen flicker for HP Compaq nx9420 but breaks other laptops like
Asus X50SL.

Turns out we also need to favor lower feedback dividers.

Users confirmed this change fixes the regression and doesn't regress the
original fix.

Fixes: 2e26ccb119bd ("drm/radeon: prefer lower reference dividers")
BugLink: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.launchpad.net%2Fbugs%2F1791312&amp;data=02%7C01%7Cchristian.koenig%40amd.com%7C9fcd8f691f97451da30608d8540e3896%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637351767352887370&amp;sdata=KKx0nGwITXVSg5Bg7XJHbVh0T30knZDioivKxO4%2F%2BB0%3D&amp;reserved=0
BugLink: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.launchpad.net%2Fbugs%2F1861554&amp;data=02%7C01%7Cchristian.koenig%40amd.com%7C9fcd8f691f97451da30608d8540e3896%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637351767352897339&amp;sdata=KWknTc75Zjw3clREsEfY6wtDcv%2F3gddeyHhrhlHN0nY%3D&amp;reserved=0
Reviewed-by: Christian König <christian.koenig@xxxxxxx>
Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
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 df1a7eb736517..840c4bf6307fd 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -933,7 +933,7 @@ static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div,
/* get matching reference and feedback divider */
*ref_div = min(max(den/post_div, 1u), ref_div_max);
- *fb_div = DIV_ROUND_CLOSEST(nom * *ref_div * post_div, den);
+ *fb_div = max(nom * *ref_div * post_div / den, 1u);
/* limit fb divider to its maximum */
if (*fb_div > fb_div_max) {