[Intel-gfx] [PATCH 2/7] drm/i915/display: move more scanline functions to intel_vblank.[ch]

Murthy, Arun R arun.r.murthy at intel.com
Thu Dec 15 02:11:11 UTC 2022


> -----Original Message-----
> From: Nikula, Jani <jani.nikula at intel.com>
> Sent: Wednesday, December 14, 2022 2:45 PM
> To: Murthy, Arun R <arun.r.murthy at intel.com>; intel-
> gfx at lists.freedesktop.org
> Subject: RE: [Intel-gfx] [PATCH 2/7] drm/i915/display: move more scanline
> functions to intel_vblank.[ch]
> 
> On Wed, 14 Dec 2022, "Murthy, Arun R" <arun.r.murthy at intel.com> wrote:
> >> -----Original Message-----
> >> From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf
> >> Of Jani Nikula
> >> Sent: Monday, December 12, 2022 7:59 PM
> >> To: intel-gfx at lists.freedesktop.org
> >> Cc: Nikula, Jani <jani.nikula at intel.com>
> >> Subject: [Intel-gfx] [PATCH 2/7] drm/i915/display: move more scanline
> >> functions to intel_vblank.[ch]
> >>
> >> Reduce clutter in intel_display.c by moving the scanline
> >> moving/stopped wait functions to intel_vblank.[ch].
> >>
> >> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> >> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/display/intel_display.c | 36
> >> +------------------- drivers/gpu/drm/i915/display/intel_vblank.c  |
> >> 35 +++++++++++++++++++ drivers/gpu/drm/i915/display/intel_vblank.h  |
> >> 2 ++
> >>  3 files changed, 38 insertions(+), 35 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> >> b/drivers/gpu/drm/i915/display/intel_display.c
> >> index 6cdfdae2c712..0cdb514d7ee0 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> >> @@ -115,6 +115,7 @@
> >>  #include "intel_quirks.h"
> >>  #include "intel_sprite.h"
> >>  #include "intel_tc.h"
> >> +#include "intel_vblank.h"
> >>  #include "intel_vga.h"
> >>  #include "i9xx_plane.h"
> >>  #include "skl_scaler.h"
> >> @@ -386,41 +387,6 @@ struct intel_crtc *intel_master_crtc(const
> >> struct intel_crtc_state *crtc_state)
> >>               return to_intel_crtc(crtc_state->uapi.crtc);
> >>  }
> >>
> >> -static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv,
> >> -                                 enum pipe pipe)
> >> -{
> >> -     i915_reg_t reg = PIPEDSL(pipe);
> >> -     u32 line1, line2;
> >> -
> >> -     line1 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
> >> -     msleep(5);
> >> -     line2 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
> >> -
> >> -     return line1 != line2;
> >> -}
> >> -
> >> -static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc,
> >> bool state) -{
> >> -     struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> >> -     enum pipe pipe = crtc->pipe;
> >> -
> >> -     /* Wait for the display line to settle/start moving */
> >> -     if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100))
> >> -             drm_err(&dev_priv->drm,
> >> -                     "pipe %c scanline %s wait timed out\n",
> >> -                     pipe_name(pipe), str_on_off(state));
> >> -}
> >> -
> >> -static void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc) -{
> >> -     wait_for_pipe_scanline_moving(crtc, false);
> >> -}
> >> -
> >> -static void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc) -{
> >> -     wait_for_pipe_scanline_moving(crtc, true);
> >> -}
> >> -
> >>  static void
> >>  intel_wait_for_pipe_off(const struct intel_crtc_state
> >> *old_crtc_state)  { diff -- git
> >> a/drivers/gpu/drm/i915/display/intel_vblank.c
> >> b/drivers/gpu/drm/i915/display/intel_vblank.c
> >> index 78a579496ad1..f25ec643a0a3 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_vblank.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_vblank.c
> >> @@ -417,3 +417,38 @@ int intel_get_crtc_scanline(struct intel_crtc
> >> *crtc)
> >>
> >>       return position;
> >>  }
> >> +
> >> +static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv,
> >> +                                 enum pipe pipe) {
> >> +     i915_reg_t reg = PIPEDSL(pipe);
> >> +     u32 line1, line2;
> >> +
> >> +     line1 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
> >> +     msleep(5);
> >> +     line2 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
> >> +
> >> +     return line1 != line2;
> >> +}
> >> +
> >> +static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc,
> >> +bool
> >> +state) {
> >> +     struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> >> +     enum pipe pipe = crtc->pipe;
> >> +
> >> +     /* Wait for the display line to settle/start moving */
> >> +     if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100))
> >> +             drm_err(&dev_priv->drm,
> >> +                     "pipe %c scanline %s wait timed out\n",
> >> +                     pipe_name(pipe), str_on_off(state)); }
> >> +
> >> +void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc) {
> >> +     wait_for_pipe_scanline_moving(crtc, false); }
> >> +
> > Is this wrapper function required, since nothing else is being other
> > than calling the function wait_for_pipe_scanline_moving, can this be
> > replaced?
> 
> Well, first, this patch is only about code *movement*. Any changes like that
> would have to be separate.
> 
Ok.
Reviewed-by: Arun R Murthy <arun.r.murthy at intel.com>

> And how would you propose to drop the wrapper? The wrappers are all
> about readability in the caller side:
> 
I didn’t mean to drop the wrapper, understand that wrapper is more readable, what I meant is to replace wait_for_pipe_scanline_moving/stopped with its function contents.

Thanks and Regards,
Arun R Murthy
--------------------
> intel_wait_for_pipe_scanline_stopped(crtc)
> 
> vs.
> 
> intel_wait_for_pipe_scanline_moving(crtc, false)
> 
> BR,
> Jani.
> 
> >
> > Thanks and Regards,
> > Arun R Murthy
> > --------------------
> >
> >> +void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc) {
> >> +     wait_for_pipe_scanline_moving(crtc, true); }
> >> diff --git a/drivers/gpu/drm/i915/display/intel_vblank.h
> >> b/drivers/gpu/drm/i915/display/intel_vblank.h
> >> index 9c0034d7454d..54870cabd734 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_vblank.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_vblank.h
> >> @@ -17,5 +17,7 @@ u32 g4x_get_vblank_counter(struct drm_crtc *crtc);
> >> bool intel_crtc_get_vblank_timestamp(struct drm_crtc *crtc, int
> *max_error,
> >>                                    ktime_t *vblank_time, bool
> >> in_vblank_irq); int intel_get_crtc_scanline(struct intel_crtc *crtc);
> >> +void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc);
> >> +void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc);
> >>
> >>  #endif /* __INTEL_VBLANK_H__ */
> >> --
> >> 2.34.1
> >
> 
> --
> Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list