[Intel-gfx] [PATCH v2 03/13] drm/i915: Introduce crtc_state->update_planes bitmask

2018-11-14 Thread Ville Syrjala
From: Ville Syrjälä 

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
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 
Signed-off-by: Ville Syrjälä 
---
 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


Re: [Intel-gfx] [PATCH v2 03/13] drm/i915: Introduce crtc_state->update_planes bitmask

2018-11-19 Thread Matt Roper
On Wed, Nov 14, 2018 at 11:07:19PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä 
> 
> 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 

> 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 
> Signed-off-by: Ville Syrjälä 
> ---
>  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

Re: [Intel-gfx] [PATCH v2 03/13] drm/i915: Introduce crtc_state->update_planes bitmask

2018-11-21 Thread Ville Syrjälä
On Mon, Nov 19, 2018 at 03:14:14PM -0800, Matt Roper wrote:
> On Wed, Nov 14, 2018 at 11:07:19PM +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä 
> > 
> > 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,

Ah, didn't even realize I didn't mention it. I'll add a few choice
words.

> 
> Reviewed-by: Matt Roper 
> 
> > 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 
> > Signed-off-by: Ville Syrjälä 
> > ---
> >  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.fr