drm/radeon: avoid high jitter with small frac divs
Signed-off-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
695daf1a8e
commit
3b333c5548
|
@ -830,14 +830,14 @@ static void avivo_reduce_ratio(unsigned *nom, unsigned *den,
|
||||||
|
|
||||||
/* make sure nominator is large enough */
|
/* make sure nominator is large enough */
|
||||||
if (*nom < nom_min) {
|
if (*nom < nom_min) {
|
||||||
tmp = (nom_min + *nom - 1) / *nom;
|
tmp = DIV_ROUND_UP(nom_min, *nom);
|
||||||
*nom *= tmp;
|
*nom *= tmp;
|
||||||
*den *= tmp;
|
*den *= tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure the denominator is large enough */
|
/* make sure the denominator is large enough */
|
||||||
if (*den < den_min) {
|
if (*den < den_min) {
|
||||||
tmp = (den_min + *den - 1) / *den;
|
tmp = DIV_ROUND_UP(den_min, *den);
|
||||||
*nom *= tmp;
|
*nom *= tmp;
|
||||||
*den *= tmp;
|
*den *= tmp;
|
||||||
}
|
}
|
||||||
|
@ -997,6 +997,16 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||||
/* this also makes sure that the reference divider is large enough */
|
/* this also makes sure that the reference divider is large enough */
|
||||||
avivo_reduce_ratio(&fb_div, &ref_div, fb_div_min, ref_div_min);
|
avivo_reduce_ratio(&fb_div, &ref_div, fb_div_min, ref_div_min);
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
if (fb_div < fb_div_min) {
|
||||||
|
unsigned tmp = DIV_ROUND_UP(fb_div_min, fb_div);
|
||||||
|
fb_div *= tmp;
|
||||||
|
ref_div *= tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* and finally save the result */
|
/* and finally save the result */
|
||||||
if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
|
if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
|
||||||
*fb_div_p = fb_div / 10;
|
*fb_div_p = fb_div / 10;
|
||||||
|
|
Loading…
Reference in New Issue