On Wed, Nov 14, 2018 at 11:07:19PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Keep track which planes need updating during the commit. For now this
> is just (was_visible || is_visible) but I'll have need to update

I still think it would be a good idea to mention was_slave || is_slave
here for completeness, but either way,

Reviewed-by: Matt Roper <matthew.d.ro...@intel.com>

> invisible planes later on for skl plane ddbs and for pre-skl pipe
> gamma/csc control (which lives in the primary plane control register).
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.v...@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_atomic.c       | 1 +
>  drivers/gpu/drm/i915/intel_atomic_plane.c | 8 ++++----
>  drivers/gpu/drm/i915/intel_display.c      | 5 ++++-
>  drivers/gpu/drm/i915/intel_drv.h          | 3 +++
>  4 files changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_atomic.c 
> b/drivers/gpu/drm/i915/intel_atomic.c
> index a5a2c8fe58a7..8cb02f28d30c 100644
> --- a/drivers/gpu/drm/i915/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> @@ -184,6 +184,7 @@ intel_crtc_duplicate_state(struct drm_crtc *crtc)
>       crtc_state->fifo_changed = false;
>       crtc_state->wm.need_postvbl_update = false;
>       crtc_state->fb_bits = 0;
> +     crtc_state->update_planes = 0;
>  
>       return &crtc_state->base;
>  }
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c 
> b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index 7d3685075201..010269a12390 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -137,6 +137,9 @@ int intel_plane_atomic_check_with_state(const struct 
> intel_crtc_state *old_crtc_
>       if (state->visible && state->fb->format->format == DRM_FORMAT_NV12)
>               crtc_state->nv12_planes |= BIT(intel_plane->id);
>  
> +     if (state->visible || old_plane_state->base.visible)
> +             crtc_state->update_planes |= BIT(intel_plane->id);
> +
>       return intel_plane_atomic_calc_changes(old_crtc_state,
>                                              &crtc_state->base,
>                                              old_plane_state,
> @@ -171,14 +174,11 @@ void intel_update_planes_on_crtc(struct 
> intel_atomic_state *old_state,
>                                struct intel_crtc_state *old_crtc_state,
>                                struct intel_crtc_state *new_crtc_state)
>  {
> +     u32 update_mask = new_crtc_state->update_planes;
>       struct intel_plane_state *new_plane_state;
>       struct intel_plane *plane;
> -     u32 update_mask;
>       int i;
>  
> -     update_mask = old_crtc_state->active_planes;
> -     update_mask |= new_crtc_state->active_planes;
> -
>       for_each_new_intel_plane_in_state(old_state, plane, new_plane_state, i) 
> {
>               if (crtc->pipe != plane->pipe ||
>                   !(update_mask & BIT(plane->id)))
> diff --git a/drivers/gpu/drm/i915/intel_display.c 
> b/drivers/gpu/drm/i915/intel_display.c
> index 3c760a2eacc8..065c8befc6f8 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -10808,8 +10808,10 @@ static int icl_check_nv12_planes(struct 
> intel_crtc_state *crtc_state)
>                       continue;
>  
>               plane_state->linked_plane = NULL;
> -             if (plane_state->slave && !plane_state->base.visible)
> +             if (plane_state->slave && !plane_state->base.visible) {
>                       crtc_state->active_planes &= ~BIT(plane->id);
> +                     crtc_state->update_planes |= BIT(plane->id);
> +             }
>  
>               plane_state->slave = false;
>       }
> @@ -10850,6 +10852,7 @@ static int icl_check_nv12_planes(struct 
> intel_crtc_state *crtc_state)
>               linked_state->slave = true;
>               linked_state->linked_plane = plane;
>               crtc_state->active_planes |= BIT(linked->id);
> +             crtc_state->update_planes |= BIT(linked->id);
>               DRM_DEBUG_KMS("Using %s as Y plane for %s\n", 
> linked->base.name, plane->base.name);
>       }
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h 
> b/drivers/gpu/drm/i915/intel_drv.h
> index 18b419f7f7fe..b0a24a81780a 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -925,6 +925,9 @@ struct intel_crtc_state {
>       u8 active_planes;
>       u8 nv12_planes;
>  
> +     /* bitmask of planes that will be updated during the commit */
> +     u8 update_planes;
> +
>       /* HDMI scrambling status */
>       bool hdmi_scrambling;
>  
> -- 
> 2.18.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to