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@linux.intel.com> Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/3613b8c22e5022ebf61ab942e6bc81b717e8f520.1673873708.git.jani.nikula@intel.com
This commit is contained in:
parent
56e5be24e6
commit
c8c6e4f1f2
|
@ -112,6 +112,7 @@
|
|||
#include "intel_sprite.h"
|
||||
#include "intel_tc.h"
|
||||
#include "intel_tv.h"
|
||||
#include "intel_vblank.h"
|
||||
#include "intel_vdsc.h"
|
||||
#include "intel_vga.h"
|
||||
#include "intel_vrr.h"
|
||||
|
@ -384,41 +385,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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc)
|
||||
{
|
||||
wait_for_pipe_scanline_moving(crtc, true);
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
Loading…
Reference in New Issue