On Wed, Nov 15, 2017 at 10:42:57AM -0800, Rodrigo Vivi wrote: > I confess I never fully understood that previous calculation, > so this is not a "fix". But let's simplify this math > so poor brains like mine can read and make some sense of > it in the future. > > v2: Don't follow the spec since that gives invalid > values and it is also confusing. This Ville's > version is much simpler. > v3: Use u64 cast instead of declaring a u64 dco. (Ville). > > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Cc: Mika Kahola <mika.kahola@xxxxxxxxx> > Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> > Cc: James Ausmus <james.ausmus@xxxxxxxxx> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_dpll_mgr.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c > index 361b7102b602..51c5ae4e9116 100644 > --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c > +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c > @@ -2153,6 +2153,8 @@ static void cnl_wrpll_params_populate(struct skl_wrpll_params *params, > u32 dco_freq, u32 ref_freq, > int pdiv, int qdiv, int kdiv) > { > + u32 dco; > + > switch (kdiv) { > case 1: > params->kdiv = 1; > @@ -2189,9 +2191,10 @@ static void cnl_wrpll_params_populate(struct skl_wrpll_params *params, > params->qdiv_ratio = qdiv; > params->qdiv_mode = (qdiv == 1) ? 0 : 1; > > - params->dco_integer = div_u64(dco_freq, ref_freq); > - params->dco_fraction = div_u64((div_u64((uint64_t)dco_freq<<15, (uint64_t)ref_freq) - > - ((uint64_t)params->dco_integer<<15)) * 0x8000, 0x8000); > + dco = div_u64((u64)dco_freq << 15, ref_freq); > + > + params->dco_integer = dco >> 15; > + params->dco_fraction = dco & 0x7fff; > } > > static bool > -- > 2.13.6 -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx