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_sprite.h"
|
||||||
#include "intel_tc.h"
|
#include "intel_tc.h"
|
||||||
#include "intel_tv.h"
|
#include "intel_tv.h"
|
||||||
|
#include "intel_vblank.h"
|
||||||
#include "intel_vdsc.h"
|
#include "intel_vdsc.h"
|
||||||
#include "intel_vga.h"
|
#include "intel_vga.h"
|
||||||
#include "intel_vrr.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);
|
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
|
static void
|
||||||
intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state)
|
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;
|
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,
|
bool intel_crtc_get_vblank_timestamp(struct drm_crtc *crtc, int *max_error,
|
||||||
ktime_t *vblank_time, bool in_vblank_irq);
|
ktime_t *vblank_time, bool in_vblank_irq);
|
||||||
int intel_get_crtc_scanline(struct intel_crtc *crtc);
|
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__ */
|
#endif /* __INTEL_VBLANK_H__ */
|
||||||
|
|
Loading…
Reference in New Issue