[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