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 <[email protected]>

Reviewed-by: Ville Syrjälä <[email protected]>

> ---
>  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

Reply via email to