Commit ca2d6659 authored by Imre Deak's avatar Imre Deak Committed by Greg Kroah-Hartman

drm/i915: Save the old CDCLK atomic state

commit 48d9f87d upstream.

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.

v2:
- Use swap() instead of opencoding it. (Ville)
Suggested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190320135439.12201-2-imre.deak@intel.comSigned-off-by: default avatarJian-Hong Pan <jian-hong@endlessm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 64e3d1c9
...@@ -2100,6 +2100,26 @@ bool intel_cdclk_changed(const struct intel_cdclk_state *a, ...@@ -2100,6 +2100,26 @@ bool intel_cdclk_changed(const struct intel_cdclk_state *a,
a->voltage_level != b->voltage_level; 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);
swap(state->cdclk.logical, dev_priv->cdclk.logical);
swap(state->cdclk.actual, dev_priv->cdclk.actual);
}
void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
const char *context) const char *context)
{ {
......
...@@ -13483,10 +13483,10 @@ static int intel_atomic_commit(struct drm_device *dev, ...@@ -13483,10 +13483,10 @@ static int intel_atomic_commit(struct drm_device *dev,
intel_state->min_voltage_level, intel_state->min_voltage_level,
sizeof(intel_state->min_voltage_level)); sizeof(intel_state->min_voltage_level));
dev_priv->active_crtcs = intel_state->active_crtcs; 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 = dev_priv->cdclk.force_min_cdclk =
intel_state->cdclk.force_min_cdclk; intel_state->cdclk.force_min_cdclk;
intel_cdclk_swap_state(intel_state);
} }
drm_atomic_state_get(state); drm_atomic_state_get(state);
......
...@@ -1597,6 +1597,7 @@ bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a, ...@@ -1597,6 +1597,7 @@ bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a,
const struct intel_cdclk_state *b); const struct intel_cdclk_state *b);
bool intel_cdclk_changed(const struct intel_cdclk_state *a, bool intel_cdclk_changed(const struct intel_cdclk_state *a,
const struct intel_cdclk_state *b); 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, void intel_set_cdclk(struct drm_i915_private *dev_priv,
const struct intel_cdclk_state *cdclk_state); const struct intel_cdclk_state *cdclk_state);
void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment