On Mon, Jan 20, 2020 at 07:47:26PM +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Extract a small helper to compute the active pipes bitmask > based on the old bitmask + the crtcs in the atomic state. > I want to decouple the cdclk state entirely from the current > global state so I want to track the active pipes also inside > the (to be introduced) full cdclk state. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_display.c | 34 ++++++++++++-------- > drivers/gpu/drm/i915/display/intel_display.h | 3 ++ > 2 files changed, 23 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index f5396c5c00c6..dc767efffd9a 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -14359,26 +14359,32 @@ static int hsw_mode_set_planes_workaround(struct intel_atomic_state *state) > return 0; > } > > +u8 intel_calc_active_pipes(struct intel_atomic_state *state, > + u8 active_pipes) > +{ > + const struct intel_crtc_state *crtc_state; > + struct intel_crtc *crtc; > + int i; > + > + for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { > + if (crtc_state->hw.active) > + active_pipes |= BIT(crtc->pipe); > + else > + active_pipes &= ~BIT(crtc->pipe); > + } > + > + return active_pipes; > +} > + > static int intel_modeset_checks(struct intel_atomic_state *state) > { > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > - struct intel_crtc_state *old_crtc_state, *new_crtc_state; > - struct intel_crtc *crtc; > - int ret, i; > + int ret; > > state->modeset = true; > - state->active_pipes = dev_priv->active_pipes; > + state->active_pipes = intel_calc_active_pipes(state, dev_priv->active_pipes); > > - for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, > - new_crtc_state, i) { > - if (new_crtc_state->hw.active) > - state->active_pipes |= BIT(crtc->pipe); > - else > - state->active_pipes &= ~BIT(crtc->pipe); > - > - if (old_crtc_state->hw.active != new_crtc_state->hw.active) > - state->active_pipe_changes |= BIT(crtc->pipe); > - } > + state->active_pipe_changes = state->active_pipes ^ dev_priv->active_pipes; > > if (state->active_pipe_changes) { > ret = _intel_atomic_lock_global_state(state); > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h > index 028aab728514..e2de0d9d22bf 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.h > +++ b/drivers/gpu/drm/i915/display/intel_display.h > @@ -44,6 +44,7 @@ struct drm_modeset_acquire_ctx; > struct drm_plane; > struct drm_plane_state; > struct i915_ggtt_view; > +struct intel_atomic_state; > struct intel_crtc; > struct intel_crtc_state; > struct intel_digital_port; > @@ -469,6 +470,8 @@ enum phy_fia { > ((connector) = to_intel_connector((__state)->base.connectors[__i].ptr), \ > (new_connector_state) = to_intel_digital_connector_state((__state)->base.connectors[__i].new_state), 1)) > > +u8 intel_calc_active_pipes(struct intel_atomic_state *state, > + u8 active_pipes); > void intel_link_compute_m_n(u16 bpp, int nlanes, > int pixel_clock, int link_clock, > struct intel_link_m_n *m_n, > -- > 2.24.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx