[Intel-gfx] [PATCH 2/4] drm/i915: Introduce do_async_flip flag to intel_plane_state
Ville Syrjälä
ville.syrjala at linux.intel.com
Fri Jan 21 11:48:50 UTC 2022
On Fri, Jan 21, 2022 at 10:06:13AM +0200, Stanislav Lisovskiy wrote:
> 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ä)
>
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_atomic_plane.c | 3 ++-
> drivers/gpu/drm/i915/display/intel_display.c | 9 +++++++--
> drivers/gpu/drm/i915/display/intel_display_types.h | 3 +++
> 3 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> index d1344e9c06de..9d79ab987b2e 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> @@ -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);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 55cd453c4ce5..9996daa036a0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -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);
> }
> }
> @@ -5027,6 +5029,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;
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 41e3dd25a78f..6b107872ad39 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -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;
>
> --
> 2.24.1.485.gad05a3d8e5
--
Ville Syrjälä
Intel
More information about the Intel-gfx
mailing list