Re: [PATCH 15/17] drm/i915: Steal power sequencer in vlv_power_sequencer_pipe()

Daniel Vetter
2014-10-28T08:30:26Z

On Thu, Oct 16, 2014 at 09:29:59PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@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.syrjala@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