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

Ville Syrjälä ville.syrjala at linux.intel.com
Tue Mar 19 18:51:25 UTC 2019


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()?

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