[Intel-gfx] [PATCH] drm/i915/ehl: Check VBT before updating the transcoder for pipe
Vivek Kasireddy
vivek.kasireddy at intel.com
Tue Feb 4 22:44:04 UTC 2020
On Tue, 4 Feb 2020 12:50:25 +0200
Jani Nikula <jani.nikula at linux.intel.com> wrote:
Hi Jani,
> On Mon, 03 Feb 2020, Vivek Kasireddy <vivek.kasireddy at intel.com>
> wrote:
> > Since the pipe->transcoder mapping is not expected to change unless
> > there is either eDP or DSI connectors present, check the VBT to
> > confirm their presence in addition to checking
> > TRANS_DDI_FUNC_CTL(transcoder). This additional check is needed on
> > platforms like Elkhart Lake because we cannot just rely on
> > GOP/Firmware programmed values in TRANS_DDI_FUNC_CTL(transcoder)
> > before updating the transcoder mapping.
> >
> > This patch is only relevant to EHL -- and a no-op on others --
> > because some of the PHYs are shared between the different DDIs and
> > we rely on the VBT to present the most accurate information to the
> > driver.
> >
> > Cc: Matt Roper <matthew.d.roper at intel.com>
> > Cc: José Roberto de Souza <jose.souza at intel.com>
> > Signed-off-by: Vivek Kasireddy <vivek.kasireddy at intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_display.c | 15 ++++++++++++++-
> > 1 file changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c index
> > c0e5002ce64c..4b38f293bd88 100644 ---
> > a/drivers/gpu/drm/i915/display/intel_display.c +++
> > b/drivers/gpu/drm/i915/display/intel_display.c @@ -10805,6
> > +10805,18 @@ static void hsw_get_ddi_pll(struct drm_i915_private
> > *dev_priv, enum port port, pipe_config->shared_dpll =
> > intel_get_shared_dpll_by_id(dev_priv, id); }
> > +static bool ehl_vbt_edp_dsi_present(struct drm_i915_private
> > *dev_priv,
> > + enum transcoder transcoder)
> > +{
> > + bool edp_present = intel_bios_is_port_present(dev_priv,
> > PORT_A);
> > + bool dsi_present = intel_bios_is_dsi_present(dev_priv,
> > NULL); +
> > + if (IS_ELKHARTLAKE(dev_priv))
> > + return transcoder == TRANSCODER_EDP ? edp_present
> > : dsi_present; +
> > + return true;
> > +}
>
> One of those things... this jumps out and immediately feels all wrong,
> just like ehl_vbt_ddi_d_present() feels all wrong in
> intel_combo_phy.c. But I don't know what would be the right thing to
> do without spending time that I don't have on this.
Is there a particular approach you want me to take to address this
issue? All I am trying to do is address the plausible scenario(s) where
the GOP/firmware may program the hardware in a certain way that seems
incorrect from what i915 does based on the info in the VBT. I noticed
this issue on the EHL board I am working on; therefore, I limited the
fix to EHL only.
Thanks,
Vivek
>
> BR,
> Jani.
>
>
>
> > +
> > static bool hsw_get_transcoder_state(struct intel_crtc *crtc,
> > struct intel_crtc_state
> > *pipe_config, u64 *power_domain_mask,
> > @@ -10844,7 +10856,8 @@ static bool hsw_get_transcoder_state(struct
> > intel_crtc *crtc,
> > tmp = intel_de_read(dev_priv,
> > TRANS_DDI_FUNC_CTL(panel_transcoder));
> > - if (!(tmp & TRANS_DDI_FUNC_ENABLE))
> > + if (!(tmp & TRANS_DDI_FUNC_ENABLE) ||
> > + !ehl_vbt_edp_dsi_present(dev_priv,
> > panel_transcoder)) continue;
> >
> > /*
>
More information about the Intel-gfx
mailing list