On Thu, Oct 16, 2014 at 09:29:59PM +0300, ville.syrj...@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> In case we fumble something and end up picking an already used power
> seqeuencer in vlv_power_sequencer_pipe() at least try to steal it
> gracefully. In theory this should never happen though.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

Just an aside: I'm not terribly in favour of code "just in case" - it
tends to bitrot even faster than the code we actually use. But this
doesn't look too onerous, so I've merged it.
-Daniel

> ---
>  drivers/gpu/drm/i915/intel_dp.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 74a6514..b58c94f 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -114,6 +114,8 @@ static void intel_dp_link_down(struct intel_dp *intel_dp);
>  static bool edp_panel_vdd_on(struct intel_dp *intel_dp);
>  static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
>  static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp);
> +static void vlv_steal_power_sequencer(struct drm_device *dev,
> +                                   enum pipe pipe);
>  
>  int
>  intel_dp_max_link_bw(struct intel_dp *intel_dp)
> @@ -412,9 +414,13 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
>       struct drm_i915_private *dev_priv = dev->dev_private;
>       struct intel_encoder *encoder;
>       unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B);
> +     enum pipe pipe;
>  
>       lockdep_assert_held(&dev_priv->pps_mutex);
>  
> +     /* We should never land here with regular DP ports */
> +     WARN_ON(!is_edp(intel_dp));
> +
>       if (intel_dp->pps_pipe != INVALID_PIPE)
>               return intel_dp->pps_pipe;
>  
> @@ -440,9 +446,12 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
>        * are two power sequencers and up to two eDP ports.
>        */
>       if (WARN_ON(pipes == 0))
> -             return PIPE_A;
> +             pipe = PIPE_A;
> +     else
> +             pipe = ffs(pipes) - 1;
>  
> -     intel_dp->pps_pipe = ffs(pipes) - 1;
> +     vlv_steal_power_sequencer(dev, pipe);
> +     intel_dp->pps_pipe = pipe;
>  
>       DRM_DEBUG_KMS("picked pipe %c power sequencer for port %c\n",
>                     pipe_name(intel_dp->pps_pipe),
> -- 
> 2.0.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to