[Intel-gfx] [PATCH] drm/i915: Try to re-use GOP / previous M-N-P settings for vlv DSI PLL
Daniel Vetter
daniel at ffwll.ch
Thu Nov 7 11:37:30 UTC 2019
On Thu, Nov 7, 2019 at 12:24 PM Ville Syrjälä
<ville.syrjala at linux.intel.com> wrote:
>
> On Sun, Oct 20, 2019 at 08:21:32PM +0200, Hans de Goede wrote:
> > Fastboot is not working on an Asus T100HA, it gives the following
> > relevant messages / errors:
> >
> > dsi pll div 000201e6, ctrl 80080100
> > fastset mismatch in dsi_pll.ctrl (expected 0x80100100, found 0x80080100)
> > fastset mismatch in dsi_pll.div (expected 0x0002008e, found 0x000201e6)
> >
> > The problem seems to be that the GOP picks 5 for the P divisor, where as
> > we end up picking 4.
> >
> > This commit fixes this by first checking of the currently configured
> > DSI PLL settings match the desired pclk and if they do, stick with
> > the currently configured PLL settings.
> >
> > Note that vlv_dsi_get_pclk() stores the read ctrl and div values inside
> > config->dsi_pll, so they are set to the GOP / previous values after
> > calling it.
> >
> > Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> > ---
> > drivers/gpu/drm/i915/display/vlv_dsi_pll.c | 26 +++++++++++++++-------
> > 1 file changed, 18 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/vlv_dsi_pll.c b/drivers/gpu/drm/i915/display/vlv_dsi_pll.c
> > index 95f39cd0ce02..4a09edecd597 100644
> > --- a/drivers/gpu/drm/i915/display/vlv_dsi_pll.c
> > +++ b/drivers/gpu/drm/i915/display/vlv_dsi_pll.c
> > @@ -119,15 +119,25 @@ int vlv_dsi_pll_compute(struct intel_encoder *encoder,
> > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> > int ret;
> > - u32 dsi_clk;
> > -
> > - dsi_clk = dsi_clk_from_pclk(intel_dsi->pclk, intel_dsi->pixel_format,
> > - intel_dsi->lane_count);
> > + u32 dsi_clk, current_pclk;
> >
> > - ret = dsi_calc_mnp(dev_priv, config, dsi_clk);
> > - if (ret) {
> > - DRM_DEBUG_KMS("dsi_calc_mnp failed\n");
> > - return ret;
> > + /*
> > + * For exact matches, the GOP may pick another set of divisors
> > + * then we do, if the GOP settings are an exact match keep them.
> > + */
> > + current_pclk = vlv_dsi_get_pclk(encoder, config);
>
> One is not allowed to touch the hw in .compute_config().
>
> The question is why does the GOP generate a different P divider?
> Does it use a slightly different clock?
Clock mismatches that we can ignore should be fixed in the fast-set
compare/fixup function, not here in compute_config. There's already
plenty of fixup code for other clocks (e.g. dp) in there.
And yes no touching hw, ever, from anything run in atomic_check context.
-Daniel
>
>
> > + if (current_pclk == intel_dsi->pclk) {
> > + config->dsi_pll.ctrl &= DSI_PLL_P1_POST_DIV_MASK;
> > + } else {
> > + dsi_clk = dsi_clk_from_pclk(intel_dsi->pclk,
> > + intel_dsi->pixel_format,
> > + intel_dsi->lane_count);
> > +
> > + ret = dsi_calc_mnp(dev_priv, config, dsi_clk);
> > + if (ret) {
> > + DRM_DEBUG_KMS("dsi_calc_mnp failed\n");
> > + return ret;
> > + }
> > }
> >
> > if (intel_dsi->ports & (1 << PORT_A))
> > --
> > 2.23.0
>
> --
> Ville Syrjälä
> Intel
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the Intel-gfx
mailing list