On Thu, Mar 19, 2015 at 01:34:49PM -0700, Jesse Barnes wrote: > On 03/17/2015 02:40 AM, Imre Deak wrote: > > Prepare chv_find_best_dpll to be used for BXT too, where we want to > > consider the error between target and calculated frequency too when > > choosing a better PLL configuration. > > > > No functional change. > > > > Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/intel_display.c | 26 ++++++++++++++++++++------ > > 1 file changed, 20 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index 5874512..9ca84a2 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -786,6 +786,16 @@ static bool vlv_PLL_is_optimal(struct drm_device *dev, int target_freq, > > unsigned int best_error_ppm, > > unsigned int *error_ppm) > > { > > + /* > > + * For CHV ignore the error and consider only the P value. > > + * Prefer a bigger P value based on HW requirements. > > + */ > > + if (IS_CHERRYVIEW(dev)) { > > + *error_ppm = 0; > > + > > + return calculated_clock->p > best_clock->p; > > + } > > + > > if (WARN_ON_ONCE(!target_freq)) > > return false; > > > > @@ -864,11 +874,13 @@ chv_find_best_dpll(const intel_limit_t *limit, struct intel_crtc *crtc, > > intel_clock_t *best_clock) > > { > > struct drm_device *dev = crtc->base.dev; > > + unsigned int best_error_ppm; > > intel_clock_t clock; > > uint64_t m2; > > int found = false; > > > > memset(best_clock, 0, sizeof(*best_clock)); > > + best_error_ppm = 1000000; > > > > /* > > * Based on hardware doc, the n always set to 1, and m1 always > > @@ -882,6 +894,7 @@ chv_find_best_dpll(const intel_limit_t *limit, struct intel_crtc *crtc, > > for (clock.p2 = limit->p2.p2_fast; > > clock.p2 >= limit->p2.p2_slow; > > clock.p2 -= clock.p2 > 10 ? 2 : 1) { > > + unsigned int error_ppm; > > > > clock.p = clock.p1 * clock.p2; > > > > @@ -898,12 +911,13 @@ chv_find_best_dpll(const intel_limit_t *limit, struct intel_crtc *crtc, > > if (!intel_PLL_is_valid(dev, limit, &clock)) > > continue; > > > > - /* based on hardware requirement, prefer bigger p > > - */ > > - if (clock.p > best_clock->p) { > > - *best_clock = clock; > > - found = true; > > - } > > + if (!vlv_PLL_is_optimal(dev, target, &clock, best_clock, > > + best_error_ppm, &error_ppm)) > > + continue; > > + > > + *best_clock = clock; > > + best_error_ppm = error_ppm; > > + found = true; > > } > > } > > > > > > Looking at it again, maybe vlv_PLL_is_better() might be a better name. > > Also, could you just make the ppm variable a scratch one and ignore it? > It just gets set to 0 no matter what, right? > > Reviewed-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> Also merged to dinq. If there's other refactorings to existing platform code then I need to get that in in the next few days for it to make the 4.1 cutoff. Otherwise we can't pull the usual "separate branch&late pull" trick for new platforms. Thanks, Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx