On Wed, 2025-12-03 at 15:15 +0200, Ville Syrjälä wrote: > On Mon, Dec 01, 2025 at 03:24:55PM +0200, Jouni Högander wrote: > > Currently plane id bit is set in crtc_state->async_flip_planes only > > when > > async flip toggle workaround is needed. We want to utilize > > crtc_state->async_flip_planes further in Selective Fetch > > calculation. > > > > Signed-off-by: Jouni Högander <[email protected]> > > --- > > drivers/gpu/drm/i915/display/intel_plane.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_plane.c > > b/drivers/gpu/drm/i915/display/intel_plane.c > > index 7b7619d59251..de0a69c55582 100644 > > --- a/drivers/gpu/drm/i915/display/intel_plane.c > > +++ b/drivers/gpu/drm/i915/display/intel_plane.c > > @@ -603,8 +603,7 @@ static int > > intel_plane_atomic_calc_changes(const struct intel_crtc_state > > *old_cr > > if (intel_plane_do_async_flip(plane, old_crtc_state, > > new_crtc_state)) { > > new_crtc_state->do_async_flip = true; > > new_crtc_state->async_flip_planes |= BIT(plane- > > >id); > > - } else if (plane->need_async_flip_toggle_wa && > > - new_crtc_state->uapi.async_flip) { > > + } else if (new_crtc_state->uapi.async_flip) { > > I'd get rid of the if-else construct here now, and just do something > like: > > if (intel_plane_do_async_flip(...)) > new_crtc_state->do_async_flip = true; > > if (new_crtc_state->uapi.async_flip) { > /* ... */ > new_crtc_state->async_flip_planes |= BIT(plane->id); > }
> > We should probably also move the plane->async_flip check > out from intel_plane_do_async_flip() and just make it a > drm_WARN_ON(..., uapi.async_flip && !plane->async_flip). > But that's probably better left for a separate patch. Sent new version, please check. Left out this drm_WARN_ON change. I will send it afterwards. BR, Jouni Högander > > > /* > > * On platforms with double buffered async flip > > bit we > > * set the bit already one frame early during the > > sync > > @@ -612,6 +611,13 @@ static int > > intel_plane_atomic_calc_changes(const struct intel_crtc_state > > *old_cr > > * hardware will therefore be ready to perform a > > real > > * async flip during the next commit, without > > having > > * to wait yet another frame for the bit to latch. > > + * > > + * async_flip_planes bitmask is also used by > > selective > > + * fetch calculation to continue full frame > > updates as > > + * long as there may be pending async flip on any > > + * plane which is part of selective > > + * update. I.e. old_crtc_state->async_flip_planes > > & > > + * BIT(<plane in su area>->id). > > */ > > new_crtc_state->async_flip_planes |= BIT(plane- > > >id); > > } > > -- > > 2.43.0 >
