Commit 4bbffbf3 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/i915: Convert to CRTC VBLANK callbacks

VBLANK callbacks in struct drm_driver are deprecated in favor of their
equivalents in struct drm_crtc_funcs. Convert i915 over.

The callback struct drm_driver.get_scanout_position() is deprecated
in favor of struct drm_crtc_helper_funcs.get_scanout_position().
i915 doesn't use CRTC helpers. Instead pass i915's implementation of
get_scanout_position() to DRM core's
drm_crtc_vblank_helper_get_vblank_timestamp_internal().

v3:
	* rename dcrtc to _crtc
	* use intel_ prefix for i915_crtc_get_vblank_timestamp()
	* update for drm_crtc_vblank_helper_get_vblank_timestamp_internal()
v2:
	* use DRM's implementation of get_vblank_timestamp()
	* simplify function names
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123135943.24140-8-tzimmermann@suse.de
parent 42eabbe5
...@@ -15939,6 +15939,7 @@ static const struct drm_crtc_funcs bdw_crtc_funcs = { ...@@ -15939,6 +15939,7 @@ static const struct drm_crtc_funcs bdw_crtc_funcs = {
.get_vblank_counter = g4x_get_vblank_counter, .get_vblank_counter = g4x_get_vblank_counter,
.enable_vblank = bdw_enable_vblank, .enable_vblank = bdw_enable_vblank,
.disable_vblank = bdw_disable_vblank, .disable_vblank = bdw_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs ilk_crtc_funcs = { static const struct drm_crtc_funcs ilk_crtc_funcs = {
...@@ -15947,6 +15948,7 @@ static const struct drm_crtc_funcs ilk_crtc_funcs = { ...@@ -15947,6 +15948,7 @@ static const struct drm_crtc_funcs ilk_crtc_funcs = {
.get_vblank_counter = g4x_get_vblank_counter, .get_vblank_counter = g4x_get_vblank_counter,
.enable_vblank = ilk_enable_vblank, .enable_vblank = ilk_enable_vblank,
.disable_vblank = ilk_disable_vblank, .disable_vblank = ilk_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs g4x_crtc_funcs = { static const struct drm_crtc_funcs g4x_crtc_funcs = {
...@@ -15955,6 +15957,7 @@ static const struct drm_crtc_funcs g4x_crtc_funcs = { ...@@ -15955,6 +15957,7 @@ static const struct drm_crtc_funcs g4x_crtc_funcs = {
.get_vblank_counter = g4x_get_vblank_counter, .get_vblank_counter = g4x_get_vblank_counter,
.enable_vblank = i965_enable_vblank, .enable_vblank = i965_enable_vblank,
.disable_vblank = i965_disable_vblank, .disable_vblank = i965_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs i965_crtc_funcs = { static const struct drm_crtc_funcs i965_crtc_funcs = {
...@@ -15963,6 +15966,7 @@ static const struct drm_crtc_funcs i965_crtc_funcs = { ...@@ -15963,6 +15966,7 @@ static const struct drm_crtc_funcs i965_crtc_funcs = {
.get_vblank_counter = i915_get_vblank_counter, .get_vblank_counter = i915_get_vblank_counter,
.enable_vblank = i965_enable_vblank, .enable_vblank = i965_enable_vblank,
.disable_vblank = i965_disable_vblank, .disable_vblank = i965_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs i915gm_crtc_funcs = { static const struct drm_crtc_funcs i915gm_crtc_funcs = {
...@@ -15971,6 +15975,7 @@ static const struct drm_crtc_funcs i915gm_crtc_funcs = { ...@@ -15971,6 +15975,7 @@ static const struct drm_crtc_funcs i915gm_crtc_funcs = {
.get_vblank_counter = i915_get_vblank_counter, .get_vblank_counter = i915_get_vblank_counter,
.enable_vblank = i915gm_enable_vblank, .enable_vblank = i915gm_enable_vblank,
.disable_vblank = i915gm_disable_vblank, .disable_vblank = i915gm_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs i915_crtc_funcs = { static const struct drm_crtc_funcs i915_crtc_funcs = {
...@@ -15979,6 +15984,7 @@ static const struct drm_crtc_funcs i915_crtc_funcs = { ...@@ -15979,6 +15984,7 @@ static const struct drm_crtc_funcs i915_crtc_funcs = {
.get_vblank_counter = i915_get_vblank_counter, .get_vblank_counter = i915_get_vblank_counter,
.enable_vblank = i8xx_enable_vblank, .enable_vblank = i8xx_enable_vblank,
.disable_vblank = i8xx_disable_vblank, .disable_vblank = i8xx_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static const struct drm_crtc_funcs i8xx_crtc_funcs = { static const struct drm_crtc_funcs i8xx_crtc_funcs = {
...@@ -15987,6 +15993,7 @@ static const struct drm_crtc_funcs i8xx_crtc_funcs = { ...@@ -15987,6 +15993,7 @@ static const struct drm_crtc_funcs i8xx_crtc_funcs = {
/* no hw vblank counter */ /* no hw vblank counter */
.enable_vblank = i8xx_enable_vblank, .enable_vblank = i8xx_enable_vblank,
.disable_vblank = i8xx_disable_vblank, .disable_vblank = i8xx_disable_vblank,
.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
}; };
static struct intel_crtc *intel_crtc_alloc(void) static struct intel_crtc *intel_crtc_alloc(void)
......
...@@ -2760,9 +2760,6 @@ static struct drm_driver driver = { ...@@ -2760,9 +2760,6 @@ static struct drm_driver driver = {
.gem_prime_export = i915_gem_prime_export, .gem_prime_export = i915_gem_prime_export,
.gem_prime_import = i915_gem_prime_import, .gem_prime_import = i915_gem_prime_import,
.get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos,
.get_scanout_position = i915_get_crtc_scanoutpos,
.dumb_create = i915_gem_dumb_create, .dumb_create = i915_gem_dumb_create,
.dumb_map_offset = i915_gem_dumb_mmap_offset, .dumb_map_offset = i915_gem_dumb_mmap_offset,
......
...@@ -762,13 +762,15 @@ static int __intel_get_crtc_scanline(struct intel_crtc *crtc) ...@@ -762,13 +762,15 @@ static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
return (position + crtc->scanline_offset) % vtotal; return (position + crtc->scanline_offset) % vtotal;
} }
bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int index, static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
bool in_vblank_irq, int *vpos, int *hpos, bool in_vblank_irq,
ktime_t *stime, ktime_t *etime, int *vpos, int *hpos,
const struct drm_display_mode *mode) ktime_t *stime, ktime_t *etime,
const struct drm_display_mode *mode)
{ {
struct drm_device *dev = _crtc->dev;
struct drm_i915_private *dev_priv = to_i915(dev); struct drm_i915_private *dev_priv = to_i915(dev);
struct intel_crtc *crtc = to_intel_crtc(drm_crtc_from_index(dev, index)); struct intel_crtc *crtc = to_intel_crtc(_crtc);
enum pipe pipe = crtc->pipe; enum pipe pipe = crtc->pipe;
int position; int position;
int vbl_start, vbl_end, hsync_start, htotal, vtotal; int vbl_start, vbl_end, hsync_start, htotal, vtotal;
...@@ -879,6 +881,14 @@ bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int index, ...@@ -879,6 +881,14 @@ bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int index,
return true; return true;
} }
bool intel_crtc_get_vblank_timestamp(struct drm_crtc *crtc, int *max_error,
ktime_t *vblank_time, bool in_vblank_irq)
{
return drm_crtc_vblank_helper_get_vblank_timestamp_internal(
crtc, max_error, vblank_time, in_vblank_irq,
i915_get_crtc_scanoutpos, NULL);
}
int intel_get_crtc_scanline(struct intel_crtc *crtc) int intel_get_crtc_scanline(struct intel_crtc *crtc)
{ {
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
......
...@@ -101,10 +101,8 @@ void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv, ...@@ -101,10 +101,8 @@ void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv, void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv,
u8 pipe_mask); u8 pipe_mask);
bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, bool intel_crtc_get_vblank_timestamp(struct drm_crtc *crtc, int *max_error,
bool in_vblank_irq, int *vpos, int *hpos, ktime_t *vblank_time, bool in_vblank_irq);
ktime_t *stime, ktime_t *etime,
const struct drm_display_mode *mode);
u32 i915_get_vblank_counter(struct drm_crtc *crtc); u32 i915_get_vblank_counter(struct drm_crtc *crtc);
u32 g4x_get_vblank_counter(struct drm_crtc *crtc); u32 g4x_get_vblank_counter(struct drm_crtc *crtc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment