On Mon, Oct 18, 2021 at 02:50:25PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> The amount of plane registers we have to write has been steadily
> increasing, putting more pressure on the vblank evasion mechanism
> and forcing us to increase its time budget. Let's try to take some
> of the pressure off by splitting plane updates into two parts:
> 1) write all non-self arming plane registers, ie. the registers
>    where the write actually does nothing until a separate arming
>    register is also written which will cause the hardware to latch
>    the new register values at the next start of vblank
> 2) write all self arming plane registers, ie. registers which always
>    just latch at the next start of vblank, and registers which also
>    arm other registers to do so
> 
> Here we just provide the mechanism, but don't actually implement
> the split on any platform yet. so everything stays now in the _arm()
> hooks. Subsequently we can move a whole bunch of stuff into the
> _noarm() part, especially in more modern platforms where the number
> of registers we have to write is also the greatest. On older
> platforms this is less beneficial probably, but no real reason
> to deviate from a common behaviour.
> 
> And let's sprinkle some TODOs around the areas that will need
> adapting.
> 
> Cc: Stanislav Lisovskiy <stanislav.lisovs...@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/i9xx_plane.c     | 15 ++--
>  .../gpu/drm/i915/display/intel_atomic_plane.c | 88 ++++++++++++++-----
>  .../gpu/drm/i915/display/intel_atomic_plane.h | 23 +++--
>  drivers/gpu/drm/i915/display/intel_cursor.c   | 44 +++++-----
>  drivers/gpu/drm/i915/display/intel_display.c  | 12 +--
>  .../drm/i915/display/intel_display_types.h    | 12 ++-
>  drivers/gpu/drm/i915/display/intel_sprite.c   | 44 +++++-----
>  .../drm/i915/display/skl_universal_plane.c    | 15 ++--
>  drivers/gpu/drm/i915/i915_trace.h             | 33 ++++++-
>  9 files changed, 192 insertions(+), 94 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/i9xx_plane.c 
> b/drivers/gpu/drm/i915/display/i9xx_plane.c
> index b1439ba78f67..93163f9100a8 100644
> --- a/drivers/gpu/drm/i915/display/i9xx_plane.c
> +++ b/drivers/gpu/drm/i915/display/i9xx_plane.c
> @@ -418,9 +418,10 @@ static int i9xx_plane_min_cdclk(const struct 
> intel_crtc_state *crtc_state,
>       return DIV_ROUND_UP(pixel_rate * num, den);
>  }
>  
> -static void i9xx_update_plane(struct intel_plane *plane,
> -                           const struct intel_crtc_state *crtc_state,
> -                           const struct intel_plane_state *plane_state)
> +/* TODO: split into noarm+arm pair */
> +static void i9xx_plane_update_arm(struct intel_plane *plane,
> +                               const struct intel_crtc_state *crtc_state,
> +                               const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
> @@ -493,8 +494,8 @@ static void i9xx_update_plane(struct intel_plane *plane,
>       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> -static void i9xx_disable_plane(struct intel_plane *plane,
> -                            const struct intel_crtc_state *crtc_state)
> +static void i9xx_plane_disable_arm(struct intel_plane *plane,
> +                                const struct intel_crtc_state *crtc_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
> @@ -851,8 +852,8 @@ intel_primary_plane_create(struct drm_i915_private 
> *dev_priv, enum pipe pipe)
>                       plane->max_stride = ilk_primary_max_stride;
>       }
>  
> -     plane->update_plane = i9xx_update_plane;
> -     plane->disable_plane = i9xx_disable_plane;
> +     plane->update_arm = i9xx_plane_update_arm;
> +     plane->disable_arm = i9xx_plane_disable_arm;
>       plane->get_hw_state = i9xx_plane_get_hw_state;
>       plane->check_plane = i9xx_plane_check;
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c 
> b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> index 0be8c00e3db9..ae21770fc321 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> @@ -469,31 +469,72 @@ skl_next_plane_to_commit(struct intel_atomic_state 
> *state,
>       return NULL;
>  }
>  
> -void intel_update_plane(struct intel_plane *plane,
> -                     const struct intel_crtc_state *crtc_state,
> -                     const struct intel_plane_state *plane_state)
> +void intel_plane_update_noarm(struct intel_plane *plane,
> +                           const struct intel_crtc_state *crtc_state,
> +                           const struct intel_plane_state *plane_state)
>  {
>       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
>  
> -     trace_intel_update_plane(&plane->base, crtc);
> +     trace_intel_plane_update_noarm(&plane->base, crtc);
> +
> +     if (plane->update_noarm)
> +             plane->update_noarm(plane, crtc_state, plane_state);
> +}
> +
> +void intel_plane_update_arm(struct intel_plane *plane,
> +                         const struct intel_crtc_state *crtc_state,
> +                         const struct intel_plane_state *plane_state)
> +{
> +     struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> +
> +     trace_intel_plane_update_arm(&plane->base, crtc);
>  
>       if (crtc_state->uapi.async_flip && plane->async_flip)
>               plane->async_flip(plane, crtc_state, plane_state, true);
>       else
> -             plane->update_plane(plane, crtc_state, plane_state);
> +             plane->update_arm(plane, crtc_state, plane_state);
>  }
>  
> -void intel_disable_plane(struct intel_plane *plane,
> -                      const struct intel_crtc_state *crtc_state)
> +void intel_plane_disable_arm(struct intel_plane *plane,
> +                          const struct intel_crtc_state *crtc_state)
>  {
>       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
>  
> -     trace_intel_disable_plane(&plane->base, crtc);
> -     plane->disable_plane(plane, crtc_state);
> +     trace_intel_plane_disable_arm(&plane->base, crtc);
> +     plane->disable_arm(plane, crtc_state);
>  }
>  
> -void skl_update_planes_on_crtc(struct intel_atomic_state *state,
> -                            struct intel_crtc *crtc)
> +void intel_update_planes_on_crtc(struct intel_atomic_state *state,
> +                              struct intel_crtc *crtc)
> +{
> +     struct intel_crtc_state *new_crtc_state =
> +             intel_atomic_get_new_crtc_state(state, crtc);
> +     u32 update_mask = new_crtc_state->update_planes;
> +     struct intel_plane_state *new_plane_state;
> +     struct intel_plane *plane;
> +     int i;
> +
> +     if (new_crtc_state->uapi.async_flip)
> +             return;
> +
> +     /*
> +      * Since we only write non-arming registers here,
> +      * the order does not matter even for skl+.
> +      */
> +     for_each_new_intel_plane_in_state(state, plane, new_plane_state, i) {
> +             if (crtc->pipe != plane->pipe ||
> +                 !(update_mask & BIT(plane->id)))
> +                     continue;
> +
> +             /* TODO: for mailbox updates this should be skipped */
> +             if (new_plane_state->uapi.visible ||
> +                 new_plane_state->planar_slave)
> +                     intel_plane_update_noarm(plane, new_crtc_state, 
> new_plane_state);
> +     }
> +}
> +
> +void skl_arm_planes_on_crtc(struct intel_atomic_state *state,
> +                         struct intel_crtc *crtc)
>  {
>       struct intel_crtc_state *old_crtc_state =
>               intel_atomic_get_old_crtc_state(state, crtc);
> @@ -515,17 +556,20 @@ void skl_update_planes_on_crtc(struct 
> intel_atomic_state *state,
>               struct intel_plane_state *new_plane_state =
>                       intel_atomic_get_new_plane_state(state, plane);
>  
> +             /*
> +              * TODO: for mailbox updates intel_plane_update_noarm()
> +              * would have to be called here as well.
> +              */
>               if (new_plane_state->uapi.visible ||
> -                 new_plane_state->planar_slave) {
> -                     intel_update_plane(plane, new_crtc_state, 
> new_plane_state);
> -             } else {
> -                     intel_disable_plane(plane, new_crtc_state);
> -             }
> +                 new_plane_state->planar_slave)
> +                     intel_plane_update_arm(plane, new_crtc_state, 
> new_plane_state);
> +             else
> +                     intel_plane_disable_arm(plane, new_crtc_state);
>       }
>  }
>  
> -void i9xx_update_planes_on_crtc(struct intel_atomic_state *state,
> -                             struct intel_crtc *crtc)
> +void i9xx_arm_planes_on_crtc(struct intel_atomic_state *state,
> +                          struct intel_crtc *crtc)
>  {
>       struct intel_crtc_state *new_crtc_state =
>               intel_atomic_get_new_crtc_state(state, crtc);
> @@ -539,10 +583,14 @@ void i9xx_update_planes_on_crtc(struct 
> intel_atomic_state *state,
>                   !(update_mask & BIT(plane->id)))
>                       continue;
>  
> +             /*
> +              * TODO: for mailbox updates intel_plane_update_noarm()
> +              * would have to be called here as well.
> +              */
>               if (new_plane_state->uapi.visible)
> -                     intel_update_plane(plane, new_crtc_state, 
> new_plane_state);
> +                     intel_plane_update_arm(plane, new_crtc_state, 
> new_plane_state);
>               else
> -                     intel_disable_plane(plane, new_crtc_state);
> +                     intel_plane_disable_arm(plane, new_crtc_state);
>       }
>  }
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.h 
> b/drivers/gpu/drm/i915/display/intel_atomic_plane.h
> index 62e5a2a77fd4..7907f601598e 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.h
> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.h
> @@ -30,20 +30,25 @@ void intel_plane_copy_uapi_to_hw_state(struct 
> intel_plane_state *plane_state,
>                                      struct intel_crtc *crtc);
>  void intel_plane_copy_hw_state(struct intel_plane_state *plane_state,
>                              const struct intel_plane_state 
> *from_plane_state);
> -void intel_update_plane(struct intel_plane *plane,
> -                     const struct intel_crtc_state *crtc_state,
> -                     const struct intel_plane_state *plane_state);
> -void intel_disable_plane(struct intel_plane *plane,
> -                      const struct intel_crtc_state *crtc_state);
> +void intel_plane_update_noarm(struct intel_plane *plane,
> +                           const struct intel_crtc_state *crtc_state,
> +                           const struct intel_plane_state *plane_state);
> +void intel_plane_update_arm(struct intel_plane *plane,
> +                         const struct intel_crtc_state *crtc_state,
> +                         const struct intel_plane_state *plane_state);
> +void intel_plane_disable_arm(struct intel_plane *plane,
> +                          const struct intel_crtc_state *crtc_state);
>  struct intel_plane *intel_plane_alloc(void);
>  void intel_plane_free(struct intel_plane *plane);
>  struct drm_plane_state *intel_plane_duplicate_state(struct drm_plane *plane);
>  void intel_plane_destroy_state(struct drm_plane *plane,
>                              struct drm_plane_state *state);
> -void skl_update_planes_on_crtc(struct intel_atomic_state *state,
> -                            struct intel_crtc *crtc);
> -void i9xx_update_planes_on_crtc(struct intel_atomic_state *state,
> -                             struct intel_crtc *crtc);
> +void intel_update_planes_on_crtc(struct intel_atomic_state *state,
> +                              struct intel_crtc *crtc);
> +void skl_arm_planes_on_crtc(struct intel_atomic_state *state,
> +                         struct intel_crtc *crtc);
> +void i9xx_arm_planes_on_crtc(struct intel_atomic_state *state,
> +                          struct intel_crtc *crtc);
>  int intel_plane_atomic_check_with_state(const struct intel_crtc_state 
> *old_crtc_state,
>                                       struct intel_crtc_state *crtc_state,
>                                       const struct intel_plane_state 
> *old_plane_state,
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c 
> b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 11842f212613..826337a769b5 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -253,9 +253,10 @@ static int i845_check_cursor(struct intel_crtc_state 
> *crtc_state,
>       return 0;
>  }
>  
> -static void i845_update_cursor(struct intel_plane *plane,
> -                            const struct intel_crtc_state *crtc_state,
> -                            const struct intel_plane_state *plane_state)
> +/* TODO: split into noarm+arm pair */
> +static void i845_cursor_update_arm(struct intel_plane *plane,
> +                                const struct intel_crtc_state *crtc_state,
> +                                const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       u32 cntl = 0, base = 0, pos = 0, size = 0;
> @@ -298,10 +299,10 @@ static void i845_update_cursor(struct intel_plane 
> *plane,
>       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> -static void i845_disable_cursor(struct intel_plane *plane,
> -                             const struct intel_crtc_state *crtc_state)
> +static void i845_cursor_disable_arm(struct intel_plane *plane,
> +                                 const struct intel_crtc_state *crtc_state)
>  {
> -     i845_update_cursor(plane, crtc_state, NULL);
> +     i845_cursor_update_arm(plane, crtc_state, NULL);
>  }
>  
>  static bool i845_cursor_get_hw_state(struct intel_plane *plane,
> @@ -488,9 +489,10 @@ static int i9xx_check_cursor(struct intel_crtc_state 
> *crtc_state,
>       return 0;
>  }
>  
> -static void i9xx_update_cursor(struct intel_plane *plane,
> -                            const struct intel_crtc_state *crtc_state,
> -                            const struct intel_plane_state *plane_state)
> +/* TODO: split into noarm+arm pair */
> +static void i9xx_cursor_update_arm(struct intel_plane *plane,
> +                                const struct intel_crtc_state *crtc_state,
> +                                const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -562,10 +564,10 @@ static void i9xx_update_cursor(struct intel_plane 
> *plane,
>       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> -static void i9xx_disable_cursor(struct intel_plane *plane,
> -                             const struct intel_crtc_state *crtc_state)
> +static void i9xx_cursor_disable_arm(struct intel_plane *plane,
> +                                 const struct intel_crtc_state *crtc_state)
>  {
> -     i9xx_update_cursor(plane, crtc_state, NULL);
> +     i9xx_cursor_update_arm(plane, crtc_state, NULL);
>  }
>  
>  static bool i9xx_cursor_get_hw_state(struct intel_plane *plane,
> @@ -717,10 +719,12 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>        */
>       crtc_state->active_planes = new_crtc_state->active_planes;
>  
> -     if (new_plane_state->uapi.visible)
> -             intel_update_plane(plane, crtc_state, new_plane_state);
> -     else
> -             intel_disable_plane(plane, crtc_state);
> +     if (new_plane_state->uapi.visible) {
> +             intel_plane_update_noarm(plane, crtc_state, new_plane_state);
> +             intel_plane_update_arm(plane, crtc_state, new_plane_state);
> +     } else {
> +             intel_plane_disable_arm(plane, crtc_state);
> +     }
>  
>       intel_plane_unpin_fb(old_plane_state);
>  
> @@ -766,14 +770,14 @@ intel_cursor_plane_create(struct drm_i915_private 
> *dev_priv,
>  
>       if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) {
>               cursor->max_stride = i845_cursor_max_stride;
> -             cursor->update_plane = i845_update_cursor;
> -             cursor->disable_plane = i845_disable_cursor;
> +             cursor->update_arm = i845_cursor_update_arm;
> +             cursor->disable_arm = i845_cursor_disable_arm;
>               cursor->get_hw_state = i845_cursor_get_hw_state;
>               cursor->check_plane = i845_check_cursor;
>       } else {
>               cursor->max_stride = i9xx_cursor_max_stride;
> -             cursor->update_plane = i9xx_update_cursor;
> -             cursor->disable_plane = i9xx_disable_cursor;
> +             cursor->update_arm = i9xx_cursor_update_arm;
> +             cursor->disable_arm = i9xx_cursor_disable_arm;
>               cursor->get_hw_state = i9xx_cursor_get_hw_state;
>               cursor->check_plane = i9xx_check_cursor;
>       }
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 8bb87e839f4a..a685aad738f3 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1126,7 +1126,7 @@ void intel_plane_disable_noatomic(struct intel_crtc 
> *crtc,
>       if (DISPLAY_VER(dev_priv) == 2 && !crtc_state->active_planes)
>               intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, 
> false);
>  
> -     intel_disable_plane(plane, crtc_state);
> +     intel_plane_disable_arm(plane, crtc_state);
>       intel_wait_for_vblank(dev_priv, crtc->pipe);
>  }
>  
> @@ -2156,7 +2156,7 @@ static void intel_crtc_disable_planes(struct 
> intel_atomic_state *state,
>                   !(update_mask & BIT(plane->id)))
>                       continue;
>  
> -             intel_disable_plane(plane, new_crtc_state);
> +             intel_plane_disable_arm(plane, new_crtc_state);
>  
>               if (old_plane_state->uapi.visible)
>                       fb_bits |= plane->frontbuffer_bit;
> @@ -2423,7 +2423,7 @@ static void intel_disable_primary_plane(const struct 
> intel_crtc_state *crtc_stat
>       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
>       struct intel_plane *plane = to_intel_plane(crtc->base.primary);
>  
> -     plane->disable_plane(plane, crtc_state);
> +     plane->disable_arm(plane, crtc_state);
>  }
>  
>  static void ilk_crtc_enable(struct intel_atomic_state *state,
> @@ -9387,15 +9387,17 @@ static void intel_update_crtc(struct 
> intel_atomic_state *state,
>  
>       intel_fbc_update(state, crtc);
>  
> +     intel_update_planes_on_crtc(state, crtc);
> +
>       /* Perform vblank evasion around commit operation */
>       intel_pipe_update_start(new_crtc_state);
>  
>       commit_pipe_pre_planes(state, crtc);
>  
>       if (DISPLAY_VER(dev_priv) >= 9)
> -             skl_update_planes_on_crtc(state, crtc);
> +             skl_arm_planes_on_crtc(state, crtc);
>       else
> -             i9xx_update_planes_on_crtc(state, crtc);
> +             i9xx_arm_planes_on_crtc(state, crtc);
>  
>       commit_pipe_post_planes(state, crtc);
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 39e11eaec1a3..907389fd6f85 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1362,11 +1362,17 @@ struct intel_plane {
>       unsigned int (*max_stride)(struct intel_plane *plane,
>                                  u32 pixel_format, u64 modifier,
>                                  unsigned int rotation);
> -     void (*update_plane)(struct intel_plane *plane,
> +     /* Write all non-self arming plane registers */
> +     void (*update_noarm)(struct intel_plane *plane,
>                            const struct intel_crtc_state *crtc_state,
>                            const struct intel_plane_state *plane_state);
> -     void (*disable_plane)(struct intel_plane *plane,
> -                           const struct intel_crtc_state *crtc_state);
> +     /* Write all self-arming plane registers */
> +     void (*update_arm)(struct intel_plane *plane,
> +                        const struct intel_crtc_state *crtc_state,
> +                        const struct intel_plane_state *plane_state);
> +     /* Disable the plane, must arm */
> +     void (*disable_arm)(struct intel_plane *plane,
> +                         const struct intel_crtc_state *crtc_state);
>       bool (*get_hw_state)(struct intel_plane *plane, enum pipe *pipe);
>       int (*check_plane)(struct intel_crtc_state *crtc_state,
>                          struct intel_plane_state *plane_state);
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c 
> b/drivers/gpu/drm/i915/display/intel_sprite.c
> index 1daa3360cf02..9c36c1492b33 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/display/intel_sprite.c
> @@ -416,10 +416,11 @@ static void vlv_sprite_update_gamma(const struct 
> intel_plane_state *plane_state)
>                                 gamma[i] << 16 | gamma[i] << 8 | gamma[i]);
>  }
>  
> +/* TODO: split into noarm+arm pair */
>  static void
> -vlv_sprite_update(struct intel_plane *plane,
> -               const struct intel_crtc_state *crtc_state,
> -               const struct intel_plane_state *plane_state)
> +vlv_sprite_update_arm(struct intel_plane *plane,
> +                   const struct intel_crtc_state *crtc_state,
> +                   const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -485,8 +486,8 @@ vlv_sprite_update(struct intel_plane *plane,
>  }
>  
>  static void
> -vlv_sprite_disable(struct intel_plane *plane,
> -                const struct intel_crtc_state *crtc_state)
> +vlv_sprite_disable_arm(struct intel_plane *plane,
> +                    const struct intel_crtc_state *crtc_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -834,10 +835,11 @@ static void ivb_sprite_update_gamma(const struct 
> intel_plane_state *plane_state)
>       i++;
>  }
>  
> +/* TODO: split into noarm+arm pair */
>  static void
> -ivb_sprite_update(struct intel_plane *plane,
> -               const struct intel_crtc_state *crtc_state,
> -               const struct intel_plane_state *plane_state)
> +ivb_sprite_update_arm(struct intel_plane *plane,
> +                   const struct intel_crtc_state *crtc_state,
> +                   const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -908,8 +910,8 @@ ivb_sprite_update(struct intel_plane *plane,
>  }
>  
>  static void
> -ivb_sprite_disable(struct intel_plane *plane,
> -                const struct intel_crtc_state *crtc_state)
> +ivb_sprite_disable_arm(struct intel_plane *plane,
> +                    const struct intel_crtc_state *crtc_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -1163,9 +1165,9 @@ static void ilk_sprite_update_gamma(const struct 
> intel_plane_state *plane_state)
>  }
>  
>  static void
> -g4x_sprite_update(struct intel_plane *plane,
> -               const struct intel_crtc_state *crtc_state,
> -               const struct intel_plane_state *plane_state)
> +g4x_sprite_update_arm(struct intel_plane *plane,
> +                   const struct intel_crtc_state *crtc_state,
> +                   const struct intel_plane_state *plane_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -1232,8 +1234,8 @@ g4x_sprite_update(struct intel_plane *plane,
>  }
>  
>  static void
> -g4x_sprite_disable(struct intel_plane *plane,
> -                const struct intel_crtc_state *crtc_state)
> +g4x_sprite_disable_arm(struct intel_plane *plane,
> +                    const struct intel_crtc_state *crtc_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum pipe pipe = plane->pipe;
> @@ -1762,8 +1764,8 @@ intel_sprite_plane_create(struct drm_i915_private 
> *dev_priv,
>               return plane;
>  
>       if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
> -             plane->update_plane = vlv_sprite_update;
> -             plane->disable_plane = vlv_sprite_disable;
> +             plane->update_arm = vlv_sprite_update_arm;
> +             plane->disable_arm = vlv_sprite_disable_arm;
>               plane->get_hw_state = vlv_sprite_get_hw_state;
>               plane->check_plane = vlv_sprite_check;
>               plane->max_stride = i965_plane_max_stride;
> @@ -1780,8 +1782,8 @@ intel_sprite_plane_create(struct drm_i915_private 
> *dev_priv,
>  
>               plane_funcs = &vlv_sprite_funcs;
>       } else if (DISPLAY_VER(dev_priv) >= 7) {
> -             plane->update_plane = ivb_sprite_update;
> -             plane->disable_plane = ivb_sprite_disable;
> +             plane->update_arm = ivb_sprite_update_arm;
> +             plane->disable_arm = ivb_sprite_disable_arm;
>               plane->get_hw_state = ivb_sprite_get_hw_state;
>               plane->check_plane = g4x_sprite_check;
>  
> @@ -1799,8 +1801,8 @@ intel_sprite_plane_create(struct drm_i915_private 
> *dev_priv,
>  
>               plane_funcs = &snb_sprite_funcs;
>       } else {
> -             plane->update_plane = g4x_sprite_update;
> -             plane->disable_plane = g4x_sprite_disable;
> +             plane->update_arm = g4x_sprite_update_arm;
> +             plane->disable_arm = g4x_sprite_disable_arm;
>               plane->get_hw_state = g4x_sprite_get_hw_state;
>               plane->check_plane = g4x_sprite_check;
>               plane->max_stride = g4x_sprite_max_stride;
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
> b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> index e2f024449149..74f3870d39b1 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> @@ -642,8 +642,8 @@ static u32 skl_plane_stride(const struct 
> intel_plane_state *plane_state,
>  }
>  
>  static void
> -skl_disable_plane(struct intel_plane *plane,
> -               const struct intel_crtc_state *crtc_state)
> +skl_plane_disable_arm(struct intel_plane *plane,
> +                   const struct intel_crtc_state *crtc_state)
>  {
>       struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>       enum plane_id plane_id = plane->id;
> @@ -1199,10 +1199,11 @@ skl_plane_async_flip(struct intel_plane *plane,
>       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> +/* TODO: split into noarm+arm pair */
>  static void
> -skl_update_plane(struct intel_plane *plane,
> -              const struct intel_crtc_state *crtc_state,
> -              const struct intel_plane_state *plane_state)
> +skl_plane_update_arm(struct intel_plane *plane,
> +                  const struct intel_crtc_state *crtc_state,
> +                  const struct intel_plane_state *plane_state)
>  {
>       int color_plane = 0;
>  
> @@ -2158,8 +2159,8 @@ skl_universal_plane_create(struct drm_i915_private 
> *dev_priv,
>       }
>  
>       plane->max_stride = skl_plane_max_stride;
> -     plane->update_plane = skl_update_plane;
> -     plane->disable_plane = skl_disable_plane;
> +     plane->update_arm = skl_plane_update_arm;
> +     plane->disable_arm = skl_plane_disable_arm;
>       plane->get_hw_state = skl_plane_get_hw_state;
>       plane->check_plane = skl_plane_check;
>  
> diff --git a/drivers/gpu/drm/i915/i915_trace.h 
> b/drivers/gpu/drm/i915/i915_trace.h
> index 9795f456cccf..214696d6b270 100644
> --- a/drivers/gpu/drm/i915/i915_trace.h
> +++ b/drivers/gpu/drm/i915/i915_trace.h
> @@ -288,7 +288,7 @@ TRACE_EVENT(vlv_fifo_size,
>  
>  /* plane updates */
>  
> -TRACE_EVENT(intel_update_plane,
> +TRACE_EVENT(intel_plane_update_noarm,
>           TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc),
>           TP_ARGS(plane, crtc),
>  
> @@ -317,7 +317,36 @@ TRACE_EVENT(intel_update_plane,
>                     DRM_RECT_ARG((const struct drm_rect *)__entry->dst))
>  );
>  
> -TRACE_EVENT(intel_disable_plane,
> +TRACE_EVENT(intel_plane_update_arm,
> +         TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc),
> +         TP_ARGS(plane, crtc),
> +
> +         TP_STRUCT__entry(
> +                          __field(enum pipe, pipe)
> +                          __field(u32, frame)
> +                          __field(u32, scanline)
> +                          __array(int, src, 4)
> +                          __array(int, dst, 4)
> +                          __string(name, plane->name)
> +                          ),
> +
> +         TP_fast_assign(
> +                        __assign_str(name, plane->name);
> +                        __entry->pipe = crtc->pipe;
> +                        __entry->frame = intel_crtc_get_vblank_counter(crtc);
> +                        __entry->scanline = intel_get_crtc_scanline(crtc);
> +                        memcpy(__entry->src, &plane->state->src, 
> sizeof(__entry->src));
> +                        memcpy(__entry->dst, &plane->state->dst, 
> sizeof(__entry->dst));
> +                        ),
> +
> +         TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " 
> DRM_RECT_FP_FMT " -> " DRM_RECT_FMT,
> +                   pipe_name(__entry->pipe), __get_str(name),
> +                   __entry->frame, __entry->scanline,
> +                   DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src),
> +                   DRM_RECT_ARG((const struct drm_rect *)__entry->dst))
> +);
> +
> +TRACE_EVENT(intel_plane_disable_arm,
>           TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc),
>           TP_ARGS(plane, crtc),
>  
> -- 
> 2.32.0
> 

Reply via email to