From: Damien Lespiau <damien.lespiau@intel.com>
To: Paulo Zanoni <przanoni@gmail.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 12/13] drm/i915/skl: Replace the HDMI DPLL divider computation algorithm
Date: Thu, 25 Jun 2015 16:00:13 +0100 [thread overview]
Message-ID: <20150625150013.GA19147@strange.ger.corp.intel.com> (raw)
In-Reply-To: <CA+gsUGTbZi8hiwLVxoVNU0fVbgnQVMKx1in_cRoV1mL2rMRYJQ@mail.gmail.com>
On Wed, May 27, 2015 at 06:51:13PM -0300, Paulo Zanoni wrote:
> >> +static void skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
> >> + uint64_t central_freq,
> >> + uint64_t dco_freq,
> >> + unsigned int divider)
> >> +{
> >> + uint64_t deviation;
> >> +
> >> + deviation = div64_u64(10000 * abs_diff(dco_freq, central_freq),
> >> + central_freq);
> >> +
> >> + /* positive deviation */
> >> + if (dco_freq >= central_freq) {
> >> + if (deviation < ctx->min_pdeviation) {
> >> + ctx->min_pdeviation = deviation;
> >> + ctx->central_freq = central_freq;
> >> + ctx->dco_freq = dco_freq;
> >> + ctx->p = divider;
> >> + }
> >> + /* negative deviation */
> >> + } else if (deviation < ctx->min_ndeviation) {
> >> + ctx->min_ndeviation = deviation;
> >> + ctx->central_freq = central_freq;
> >> + ctx->dco_freq = dco_freq;
> >> + ctx->p = divider;
> >> + }
>
> Some additional comments:
>
> Don't we want to break the loop in case we reach a point where any of
> the deviations is zero?
We could, haven't done it in the v2 of the patch, could be done as a
follow up.
> Also notice that, due to the way we loop over the variables at the
> main func, we will always pick the last deviation that was "improved"
> (positive or negative), as opposed to the very minimal deviation. In
> other words, if the last thing our algorithm did was move the
> ndeviation from 600 to 599, we will pick this, even if, in previous
> iterations, we moved the pdeviation from 100 to 1. Is this really what
> we want? Maybe we want to compare min_pdeviation against
> min_ndeviation before picking central_freq, dco_freq and p?
That seems to be a (pretty big!) deficiency of the documented algorithm,
that's definitely something improving the average deviation in the i-g-t
test (average deviation 206.52 Vs 194.47)
> Also, if we loop over the *odd* dividers before looping over the
> *even* divers, and change the comparisons to "<=" instead of just "<",
> and don't "break the loop in case we reach 0 variation" for the odd
> dividers, then our algorithm will give preference to even dividers in
> case we find the same deviation on both odd and even dividers (in
> other words, this will give you the implementation of the alternative
> interpretation of the spec, which we're discussing on patch 13).
But then it would not use an even divider that has a slightly worse
deviation. My reading of the specs is:
- If there's an even divider with the deviation fitting in the +1%/-6%
constraint, choose it. (if there are several such even dividers,
choose the one minimizing the deviation)
- If we can't find an even divider within +1%/-6%, settle for an odd
divider that satisfies those constraints.
> I know you probably don't have any of these answers, so I won't block
> the patch review on the problems on this email. But I'd at least like
> to know your opinions here.Maybe we could send some additional
> questions to the spec writers.
I do have some answers :) at least assuming the interpreation above is
the correct one. The two big suggestions you have make quite a
difference in the 2 metrics I gather in the i-g-t test:
v1 of this series:
even/odd dividers: 338/35
average deviation: 206.52
v2 of this series:
even/odd dividers: 363/10
average deviation: 194.47
It's also easier to follow the changes as diffs in the corresponding
i-g-t series than the v2 of the kernel patches.
testdisplay still cycles through the modes on the HDMI displays I have.
--
Damien
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-06-25 15:00 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-07 17:38 [PATCH 00/13] Update of the HDMI DPLL dividers computation Damien Lespiau
2015-05-07 17:38 ` [PATCH 01/13] drm/i915/skl: Re-indent part of skl_ddi_calculate_wrpll() Damien Lespiau
2015-05-08 7:19 ` Daniel Vetter
2015-05-07 17:38 ` [PATCH 02/13] drm/i915/skl: Make sure to break when not finding suitable PLL dividers Damien Lespiau
2015-05-27 17:58 ` Paulo Zanoni
2015-05-28 6:31 ` Jani Nikula
2015-05-28 7:45 ` Daniel Vetter
2015-05-28 13:59 ` Paulo Zanoni
2015-05-07 17:38 ` [PATCH 03/13] drm/i915/skl: Display the WRPLL frequency we couldn't accomodate when failing Damien Lespiau
2015-05-28 7:48 ` Daniel Vetter
2015-05-07 17:38 ` [PATCH 04/13] drm/i915/skl: Propagate the error if we fail to find a suitable DPLL divider Damien Lespiau
2015-05-07 17:38 ` [PATCH 05/13] drm/i915/skl: Use a more idomatic early return Damien Lespiau
2015-05-07 17:38 ` [PATCH 06/13] drm/i915/skl: Factor out computing the DPLL paramaters from the dividers Damien Lespiau
2015-05-07 17:38 ` [PATCH 07/13] drm/i915/skl: Remove unnecessary () used with div_u64() Damien Lespiau
2015-05-07 17:38 ` [PATCH 08/13] drm/i915/skl: Remove unnecessary () used with abs_diff() Damien Lespiau
2015-05-27 18:42 ` Paulo Zanoni
2015-05-07 17:38 ` [PATCH 09/13] drm/i915/skl: Use MISSING_CASE() in skl_wrpll_params_populate() Damien Lespiau
2015-05-27 18:40 ` Paulo Zanoni
2015-05-28 7:51 ` Daniel Vetter
2015-05-28 14:06 ` Paulo Zanoni
2015-06-03 12:42 ` Damien Lespiau
2015-05-07 17:38 ` [PATCH 10/13] drm/i915: Correctly prefix HSW/BDW HDMI clock functions Damien Lespiau
2015-05-27 19:54 ` Paulo Zanoni
2015-05-07 17:38 ` [PATCH 11/13] drm/i915/skl: Don't try to store the wrong central frequency Damien Lespiau
2015-05-27 19:58 ` Paulo Zanoni
2015-05-28 7:53 ` Daniel Vetter
2015-05-07 17:38 ` [PATCH 12/13] drm/i915/skl: Replace the HDMI DPLL divider computation algorithm Damien Lespiau
2015-05-27 21:28 ` Paulo Zanoni
2015-05-27 21:51 ` Paulo Zanoni
2015-06-25 15:00 ` Damien Lespiau [this message]
2015-06-25 15:15 ` [PATCH 12/13 v2] " Damien Lespiau
2015-06-26 17:09 ` Paulo Zanoni
2015-06-25 10:21 ` [PATCH 12/13] " Damien Lespiau
2015-05-07 17:38 ` [PATCH 13/13] drm/i915/skl: Prefer even dividers for SKL DPLLs Damien Lespiau
2015-05-08 12:22 ` shuang.he
2015-05-27 21:39 ` Paulo Zanoni
2015-05-27 22:08 ` Paulo Zanoni
2015-06-25 15:18 ` Damien Lespiau
2015-06-25 15:19 ` [PATCH 13/13 v2] " Damien Lespiau
2015-06-26 17:08 ` Paulo Zanoni
2015-06-26 17:39 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150625150013.GA19147@strange.ger.corp.intel.com \
--to=damien.lespiau@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=przanoni@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox