[Intel-gfx] [PATCH v7 2/4] drm/i915: Save the old CDCLK atomic state

Imre Deak imre.deak at intel.com
Tue Mar 19 19:16:36 UTC 2019


On Tue, Mar 19, 2019 at 08:51:25PM +0200, Ville Syrjälä wrote:
> On Tue, Mar 19, 2019 at 08:36:16PM +0200, Imre Deak wrote:
> > The old state will be needed by an upcoming patch to determine if the
> > commit increases or decreases CDCLK, so move the old state to the atomic
> > state (while keeping the new one in dev_priv). cdclk.logical and
> > cdclk.actual in the atomic state isn't used atm anywhere after the
> > atomic check phase, so this should be safe.
> > 
> > Suggested-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Signed-off-by: Imre Deak <imre.deak at intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_cdclk.c   | 26 ++++++++++++++++++++++++++
> >  drivers/gpu/drm/i915/intel_display.c |  4 ++--
> >  drivers/gpu/drm/i915/intel_drv.h     |  1 +
> >  3 files changed, 29 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c
> > index 7dcca84f31d1..97007d76f9a7 100644
> > --- a/drivers/gpu/drm/i915/intel_cdclk.c
> > +++ b/drivers/gpu/drm/i915/intel_cdclk.c
> > @@ -2100,6 +2100,32 @@ bool intel_cdclk_changed(const struct intel_cdclk_state *a,
> >  		a->voltage_level != b->voltage_level;
> >  }
> >  
> > +/**
> > + * intel_cdclk_swap_state - make atomic CDCLK configuration effective
> > + * @state: atomic state
> > + *
> > + * This is the CDCLK version of drm_atomic_helper_swap_state() since the
> > + * helper does not handle driver-specific global state.
> > + *
> > + * Similarly to the atomic helpers this function does a complete swap,
> > + * i.e. it also puts the old state into @state. This is used by the commit
> > + * code to determine how CDCLK has changed (for instance did it increase or
> > + * decrease).
> > + */
> > +void intel_cdclk_swap_state(struct intel_atomic_state *state)
> > +{
> > +	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> > +	struct intel_cdclk_state tmp;
> > +
> > +	tmp = state->cdclk.logical;
> > +	state->cdclk.logical = dev_priv->cdclk.logical;
> > +	dev_priv->cdclk.logical = tmp;
> > +
> > +	tmp = state->cdclk.actual;
> > +	state->cdclk.actual = dev_priv->cdclk.actual;
> > +	dev_priv->cdclk.actual = tmp;
> 
> No love for swap()?

Didn't realize I can also use it for structs.. will fix that.

> 
> Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> > +}
> > +
> >  void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
> >  			    const char *context)
> >  {
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index b4199cd53349..9c4ad124302c 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -13663,10 +13663,10 @@ static int intel_atomic_commit(struct drm_device *dev,
> >  		       intel_state->min_voltage_level,
> >  		       sizeof(intel_state->min_voltage_level));
> >  		dev_priv->active_crtcs = intel_state->active_crtcs;
> > -		dev_priv->cdclk.logical = intel_state->cdclk.logical;
> > -		dev_priv->cdclk.actual = intel_state->cdclk.actual;
> >  		dev_priv->cdclk.force_min_cdclk =
> >  			intel_state->cdclk.force_min_cdclk;
> > +
> > +		intel_cdclk_swap_state(intel_state);
> >  	}
> >  
> >  	drm_atomic_state_get(state);
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 0b84e557c267..85dd6a9d1e42 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1698,6 +1698,7 @@ bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a,
> >  			       const struct intel_cdclk_state *b);
> >  bool intel_cdclk_changed(const struct intel_cdclk_state *a,
> >  			 const struct intel_cdclk_state *b);
> > +void intel_cdclk_swap_state(struct intel_atomic_state *state);
> >  void intel_set_cdclk(struct drm_i915_private *dev_priv,
> >  		     const struct intel_cdclk_state *cdclk_state);
> >  void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
> > -- 
> > 2.13.2
> 
> -- 
> Ville Syrjälä
> Intel


More information about the Intel-gfx mailing list