[Intel-gfx] [PATCH] drm/i915: Simplify i830 DVO 2x clock handling

Ville Syrjälä ville.syrjala at linux.intel.com
Mon Mar 4 16:16:32 UTC 2019


On Mon, Mar 04, 2019 at 03:52:30PM +0000, Chris Wilson wrote:
> Quoting Ville Syrjala (2019-03-04 13:41:13)
> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > 
> > Let's just always enable the DVO 2x clock on i830. This way we don't
> > have to track if DVO is being used or not. The spec does suggest we
> > should disable the clock when it isn't needed, but this does appear
> > to work just fine.
> 
> And after i830, 2X_MODE seems to be the default? Whereas the only reason
> for i830 being special is that both pipes must be using the same mode,
> ergo we didn't do either (or something like that).

Post i830 the hw was fixed so we only have to enable the 2x clock
when the pipe is driving a DVO port. Driving the CRT and LVDS ports
does not require the 2x clock.

> 
> > This removes another crtc->config usage.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> > @@ -1468,26 +1455,12 @@ static void i9xx_enable_pll(struct intel_crtc *crtc,
> >         /*
> >          * Apparently we need to have VGA mode enabled prior to changing
> >          * the P1/P2 dividers. Otherwise the DPLL will keep using the old
> >          * dividers, even though the register value does change.
> >          */
> > -       I915_WRITE(reg, 0);
> > -
> > +       I915_WRITE(reg, dpll & ~DPLL_VGA_MODE_DIS);
> 
> This looks to be a separate tweak?

I didn't want to termporarily disable the DPLL, even for a miniscule
amount of time. Since the old code did work I suppose it's not
really needed, but this seems more consistent with the whole premise
of keeping both DPLLs on all the time.

I suppose I could extract this to a separate patch for clarity.

> 
> >         I915_WRITE(reg, dpll);
> >  
> >         /* Wait for the clocks to stabilize. */
> 
> > @@ -7494,7 +7457,19 @@ static void i8xx_compute_dpll(struct intel_crtc *crtc,
> >                         dpll |= PLL_P2_DIVIDE_BY_4;
> >         }
> >  
> > -       if (!IS_I830(dev_priv) &&
> > +       /*
> > +        * Bspec:
> > +        * "[Almador Errata}: For the correct operation of the muxed DVO pins
> > +        *  (GDEVSELB/ I 2 Cdata, GIRDBY/I 2 CClk) and (GFRAMEB/DVI_Data,
> > +        *  GTRDYB/DVI_Clk): Bit 31 (DPLL VCO Enable) and Bit 30 (2X Clock
> > +        *  Enable) must be set to “1” in both the DPLL A Control Register
> > +        *  (06014h-06017h) and DPLL B Control Register (06018h-0601Bh)."
> > +        *
> > +        * For simplicity We simply keep both bits always enabled in
> > +        * both DPLLS. The spec says we should disable the DVO 2X clock
> > +        * when not needed, but this seems to work fine in practice.
> > +        */
> > +       if (IS_I830(dev_priv) ||
> >             intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DVO))
> >                 dpll |= DPLL_DVO_2X_MODE;
> 
> Is VGA/CRT a native encoder? That might be a useful test to check that
> still works.

Yes, and yes it still works.

> 
> I couldn't see anything you missed for DPLL_DVO_2X_MODE, so happy that
> this does what it says on the tin, and I trust that you actually ran
> this on an i830...

Indeed I did. And I also tested the 's/0/dpll & ~DPLL_VGA_MODE_DIS/'
change on my ctg as those are known to suffer from the p1/p2 dividers
not latching issue. The new sequence still forces p1/p2 to latch.

> 
> Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

Thanks. 

-- 
Ville Syrjälä
Intel


More information about the Intel-gfx mailing list