mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
drm/i915/fbc: Extract intel_fbc_update()
Pull the fbc enable vs. disable stuff into a small helper so we don't have to have it pollute the higher level modeset code. Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210702204603.596-3-ville.syrjala@linux.intel.com
This commit is contained in:
parent
faca22fd50
commit
287d00d413
3 changed files with 26 additions and 7 deletions
|
@ -10405,10 +10405,7 @@ static void intel_update_crtc(struct intel_atomic_state *state,
|
|||
intel_encoders_update_pipe(state, crtc);
|
||||
}
|
||||
|
||||
if (new_crtc_state->update_pipe && !new_crtc_state->enable_fbc)
|
||||
intel_fbc_disable(crtc);
|
||||
else
|
||||
intel_fbc_enable(state, crtc);
|
||||
intel_fbc_update(state, crtc);
|
||||
|
||||
/* Perform vblank evasion around commit operation */
|
||||
intel_pipe_update_start(new_crtc_state);
|
||||
|
|
|
@ -1236,8 +1236,8 @@ void intel_fbc_choose_crtc(struct drm_i915_private *dev_priv,
|
|||
* intel_fbc_enable multiple times for the same pipe without an
|
||||
* intel_fbc_disable in the middle, as long as it is deactivated.
|
||||
*/
|
||||
void intel_fbc_enable(struct intel_atomic_state *state,
|
||||
struct intel_crtc *crtc)
|
||||
static void intel_fbc_enable(struct intel_atomic_state *state,
|
||||
struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
struct intel_plane *plane = to_intel_plane(crtc->base.primary);
|
||||
|
@ -1312,6 +1312,28 @@ void intel_fbc_disable(struct intel_crtc *crtc)
|
|||
mutex_unlock(&fbc->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_fbc_update: enable/disable FBC on the CRTC
|
||||
* @state: atomic state
|
||||
* @crtc: the CRTC
|
||||
*
|
||||
* This function checks if the given CRTC was chosen for FBC, then enables it if
|
||||
* possible. Notice that it doesn't activate FBC. It is valid to call
|
||||
* intel_fbc_update multiple times for the same pipe without an
|
||||
* intel_fbc_disable in the middle.
|
||||
*/
|
||||
void intel_fbc_update(struct intel_atomic_state *state,
|
||||
struct intel_crtc *crtc)
|
||||
{
|
||||
const struct intel_crtc_state *crtc_state =
|
||||
intel_atomic_get_new_crtc_state(state, crtc);
|
||||
|
||||
if (crtc_state->update_pipe && !crtc_state->enable_fbc)
|
||||
intel_fbc_disable(crtc);
|
||||
else
|
||||
intel_fbc_enable(state, crtc);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_fbc_global_disable - globally disable FBC
|
||||
* @dev_priv: i915 device instance
|
||||
|
|
|
@ -24,7 +24,7 @@ bool intel_fbc_pre_update(struct intel_atomic_state *state,
|
|||
void intel_fbc_post_update(struct intel_atomic_state *state,
|
||||
struct intel_crtc *crtc);
|
||||
void intel_fbc_init(struct drm_i915_private *dev_priv);
|
||||
void intel_fbc_enable(struct intel_atomic_state *state,
|
||||
void intel_fbc_update(struct intel_atomic_state *state,
|
||||
struct intel_crtc *crtc);
|
||||
void intel_fbc_disable(struct intel_crtc *crtc);
|
||||
void intel_fbc_global_disable(struct drm_i915_private *dev_priv);
|
||||
|
|
Loading…
Reference in a new issue