(for the series) Reviewed-by: Ander Conselvan de Oliveira <conselvan2@xxxxxxxxx> On Wed, 2015-03-11 at 18:52 +0200, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Ignore the current state of the pipe and just check crtc_state->enable > and the number of FDI lanes required. This means we don't accidentally > mistake the FDI lanes as being available of one of the pipes just > happens to be disabled at the time of the check. Also we no longer > consider pipe C to require FDI lanes when it's driving the eDP > transcoder. > > We also take the opportunity to make the code a bit nicer looking by > hiding the ugly bits in the new pipe_required_fdi_lanes() function. > > Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@xxxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 29 +++++++++++++++-------------- > 1 file changed, 15 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 242a8a7..72e9816 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -3152,12 +3152,6 @@ static void intel_fdi_normal_train(struct drm_crtc *crtc) > FDI_FE_ERRC_ENABLE); > } > > -static bool pipe_has_enabled_pch(struct intel_crtc *crtc) > -{ > - return crtc->base.state->enable && crtc->active && > - crtc->config->has_pch_encoder; > -} > - > /* The FDI link training functions for ILK/Ibexpeak. */ > static void ironlake_fdi_link_train(struct drm_crtc *crtc) > { > @@ -5548,13 +5542,21 @@ bool intel_connector_get_hw_state(struct intel_connector *connector) > return encoder->get_hw_state(encoder, &pipe); > } > > +static int pipe_required_fdi_lanes(struct drm_device *dev, enum pipe pipe) > +{ > + struct intel_crtc *crtc = > + to_intel_crtc(intel_get_crtc_for_pipe(dev, pipe)); > + > + if (crtc->base.state->enable && > + crtc->config->has_pch_encoder) > + return crtc->config->fdi_lanes; > + > + return 0; > +} > + > static bool ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe, > struct intel_crtc_state *pipe_config) > { > - struct drm_i915_private *dev_priv = dev->dev_private; > - struct intel_crtc *pipe_B_crtc = > - to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_B]); > - > DRM_DEBUG_KMS("checking fdi config on pipe %c, lanes %i\n", > pipe_name(pipe), pipe_config->fdi_lanes); > if (pipe_config->fdi_lanes > 4) { > @@ -5581,8 +5583,8 @@ static bool ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe, > case PIPE_A: > return true; > case PIPE_B: > - if (dev_priv->pipe_to_crtc_mapping[PIPE_C]->enabled && > - pipe_config->fdi_lanes > 2) { > + if (pipe_config->fdi_lanes > 2 && > + pipe_required_fdi_lanes(dev, PIPE_C) > 0) { > DRM_DEBUG_KMS("invalid shared fdi lane config on pipe %c: %i lanes\n", > pipe_name(pipe), pipe_config->fdi_lanes); > return false; > @@ -5594,8 +5596,7 @@ static bool ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe, > pipe_name(pipe), pipe_config->fdi_lanes); > return false; > } > - if (pipe_has_enabled_pch(pipe_B_crtc) && > - pipe_B_crtc->config->fdi_lanes > 2) { > + if (pipe_required_fdi_lanes(dev, PIPE_B) > 2) { > DRM_DEBUG_KMS("fdi link B uses too many lanes to enable link C\n"); > return false; > } _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx