On Mon, Oct 18, 2021 at 02:50:22PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Async flips are only capable of changing PLANE_SURF, hence we
> they can't easily be used with planar formats.
> 
> Older platforms could require updating AUX_DIST as well, which
> is not possible. We'd have to make sure AUX_DIST doesn't change
> before allowing the async flip through. If we could get async
> flips with CCS then that might be interesting, but since the hw
> doesn't allow async flips with CCS I don't see much point in
> allowing this for planar formats either. No one renders their
> game content in YUV anyway.
> 
> icl+ could in theory do this I suppose since each color plane
> has its own PLANE_SURF register, but I don't know if there is
> some magic to guarantee that both the Y and UV plane would
> async flip synchronously if you will. Ie. beyond just a clean
> tear we'd potentially get some kind of weird tear with some
> random mix of luma and chroma from the old and new frames.
> 
> So let's just say no to async flips when scanning out planar
> formats.
> 
> Cc: Karthik B S <karthik....@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

Reviewed-by: Stanislav Lisovskiy <stanislav.lisovs...@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index ce5d6633029a..8bb87e839f4a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -8884,6 +8884,12 @@ static int intel_atomic_check_async(struct 
> intel_atomic_state *state)
>                       return -EINVAL;
>               }
>  
> +             if (new_plane_state->hw.fb->format->num_planes > 1) {
> +                     drm_dbg_kms(&i915->drm,
> +                                 "Planar formats not supported with async 
> flips\n");
> +                     return -EINVAL;
> +             }
> +
>               if (old_plane_state->view.color_plane[0].stride !=
>                   new_plane_state->view.color_plane[0].stride) {
>                       drm_dbg_kms(&i915->drm, "Stride cannot be changed in 
> async flip\n");
> -- 
> 2.32.0
> 

Reply via email to