drm/i915: Introduce do_async_flip flag to intel_plane_state
There might be various logical contructs when we might want to enable async flip, so lets calculate those and set this flag, so that there is no need in long conditions in other places. v2: - Set do_async_flip flag to False, if no async flip needed. Lets not rely that it will be 0-initialized, but set explicitly, so that the logic is clear as well. v3: - Clear do_async_flip in intel_plane_duplicate_state(Ville Syrjälä) - Check with do_async_flip also when calling intel_crtc_{enable,disable}_flip_done(Ville Syrjälä) Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220124090653.14547-3-stanislav.lisovskiy@intel.com
This commit is contained in:
parent
41e096da18
commit
20f6ac2d5e
@ -109,6 +109,7 @@ intel_plane_duplicate_state(struct drm_plane *plane)
|
||||
intel_state->ggtt_vma = NULL;
|
||||
intel_state->dpt_vma = NULL;
|
||||
intel_state->flags = 0;
|
||||
intel_state->do_async_flip = false;
|
||||
|
||||
/* add reference to fb */
|
||||
if (intel_state->hw.fb)
|
||||
@ -491,7 +492,7 @@ void intel_plane_update_arm(struct intel_plane *plane,
|
||||
|
||||
trace_intel_plane_update_arm(&plane->base, crtc);
|
||||
|
||||
if (crtc_state->uapi.async_flip && plane->async_flip)
|
||||
if (plane_state->do_async_flip)
|
||||
plane->async_flip(plane, crtc_state, plane_state, true);
|
||||
else
|
||||
plane->update_arm(plane, crtc_state, plane_state);
|
||||
|
@ -1369,7 +1369,8 @@ static void intel_crtc_enable_flip_done(struct intel_atomic_state *state,
|
||||
for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
|
||||
if (plane->enable_flip_done &&
|
||||
plane->pipe == crtc->pipe &&
|
||||
update_planes & BIT(plane->id))
|
||||
update_planes & BIT(plane->id) &&
|
||||
plane_state->do_async_flip)
|
||||
plane->enable_flip_done(plane);
|
||||
}
|
||||
}
|
||||
@ -1387,7 +1388,8 @@ static void intel_crtc_disable_flip_done(struct intel_atomic_state *state,
|
||||
for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
|
||||
if (plane->disable_flip_done &&
|
||||
plane->pipe == crtc->pipe &&
|
||||
update_planes & BIT(plane->id))
|
||||
update_planes & BIT(plane->id) &&
|
||||
plane_state->do_async_flip)
|
||||
plane->disable_flip_done(plane);
|
||||
}
|
||||
}
|
||||
@ -5024,6 +5026,9 @@ int intel_plane_atomic_calc_changes(const struct intel_crtc_state *old_crtc_stat
|
||||
needs_scaling(new_plane_state))))
|
||||
new_crtc_state->disable_lp_wm = true;
|
||||
|
||||
if (new_crtc_state->uapi.async_flip && plane->async_flip)
|
||||
new_plane_state->do_async_flip = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -634,6 +634,9 @@ struct intel_plane_state {
|
||||
|
||||
struct intel_fb_view view;
|
||||
|
||||
/* Indicates if async flip is required */
|
||||
bool do_async_flip;
|
||||
|
||||
/* Plane pxp decryption state */
|
||||
bool decrypt;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user