mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-27 09:46:28 +00:00
skl_compute_wrpll: Don't try other dividers if we find a 0 central freq deviation
Paulo suggested that we could short-circuit the search for a good divider if we find a 0 deviation of the DCO frequency from the central frequency. Out of the 373 test frequencies, 34 hit that fast path. Suggested-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
This commit is contained in:
parent
26336385ac
commit
de774ed31e
@ -274,7 +274,12 @@ static void skl_wrpll_context_init(struct skl_wrpll_context *ctx)
|
||||
#define SKL_MAX_PDEVIATION 100
|
||||
#define SKL_MAX_NDEVIATION 600
|
||||
|
||||
static void skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
|
||||
|
||||
/*
|
||||
* Returns true if we're sure to have found the definitive divider (ie
|
||||
* deviation == 0).
|
||||
*/
|
||||
static bool skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
|
||||
uint64_t central_freq,
|
||||
uint64_t dco_freq,
|
||||
unsigned int divider)
|
||||
@ -297,6 +302,10 @@ static void skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
|
||||
found = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* we can't improve a 0 deviation */
|
||||
if (deviation == 0)
|
||||
return true;
|
||||
/* negative deviation */
|
||||
} else if (deviation < SKL_MAX_NDEVIATION &&
|
||||
deviation < ctx->min_deviation) {
|
||||
@ -315,6 +324,8 @@ static void skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
|
||||
printf("dco_freq: %"PRIu64", dco_central_freq %"PRIu64"\n",
|
||||
dco_freq, central_freq);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void skl_wrpll_get_multipliers(unsigned int p,
|
||||
@ -433,13 +444,15 @@ skl_ddi_calculate_wrpll2(int clock /* in Hz */,
|
||||
unsigned int p = dividers[d].list[i];
|
||||
uint64_t dco_freq = p * afe_clock;
|
||||
|
||||
skl_wrpll_try_divider(&ctx,
|
||||
if (skl_wrpll_try_divider(&ctx,
|
||||
dco_central_freq[dco],
|
||||
dco_freq,
|
||||
p);
|
||||
p))
|
||||
goto skip_remaining_dividers;
|
||||
}
|
||||
}
|
||||
|
||||
skip_remaining_dividers:
|
||||
/*
|
||||
* If a solution is found with an even divider, prefer
|
||||
* this one.
|
||||
|
Loading…
x
Reference in New Issue
Block a user