drm/i915: Use new kms-native vblank functions
Only the low-level irq handling functions still use integer crtc indices with this. But fixing that will require a lot more sugery and some good ideas for backwards compat with old ums userspace. Both in drivers and in the drm core. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
89dd6a4b34
commit
87b6b10153
|
@ -3662,7 +3662,7 @@ static void ilk_crtc_disable_planes(struct drm_crtc *crtc)
|
||||||
int plane = intel_crtc->plane;
|
int plane = intel_crtc->plane;
|
||||||
|
|
||||||
intel_crtc_wait_for_pending_flips(crtc);
|
intel_crtc_wait_for_pending_flips(crtc);
|
||||||
drm_vblank_off(dev, pipe);
|
drm_crtc_vblank_off(crtc);
|
||||||
|
|
||||||
if (dev_priv->fbc.plane == plane)
|
if (dev_priv->fbc.plane == plane)
|
||||||
intel_disable_fbc(dev);
|
intel_disable_fbc(dev);
|
||||||
|
@ -3738,7 +3738,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
|
||||||
*/
|
*/
|
||||||
intel_wait_for_vblank(dev, intel_crtc->pipe);
|
intel_wait_for_vblank(dev, intel_crtc->pipe);
|
||||||
|
|
||||||
drm_vblank_on(dev, pipe);
|
drm_crtc_vblank_on(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IPS only exists on ULT machines and is tied to pipe A. */
|
/* IPS only exists on ULT machines and is tied to pipe A. */
|
||||||
|
@ -3831,7 +3831,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
|
||||||
haswell_mode_set_planes_workaround(intel_crtc);
|
haswell_mode_set_planes_workaround(intel_crtc);
|
||||||
ilk_crtc_enable_planes(crtc);
|
ilk_crtc_enable_planes(crtc);
|
||||||
|
|
||||||
drm_vblank_on(dev, pipe);
|
drm_crtc_vblank_on(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ironlake_pfit_disable(struct intel_crtc *crtc)
|
static void ironlake_pfit_disable(struct intel_crtc *crtc)
|
||||||
|
@ -4356,7 +4356,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
encoder->enable(encoder);
|
encoder->enable(encoder);
|
||||||
|
|
||||||
drm_vblank_on(dev, pipe);
|
drm_crtc_vblank_on(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i9xx_crtc_enable(struct drm_crtc *crtc)
|
static void i9xx_crtc_enable(struct drm_crtc *crtc)
|
||||||
|
@ -4405,7 +4405,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
encoder->enable(encoder);
|
encoder->enable(encoder);
|
||||||
|
|
||||||
drm_vblank_on(dev, pipe);
|
drm_crtc_vblank_on(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i9xx_pfit_disable(struct intel_crtc *crtc)
|
static void i9xx_pfit_disable(struct intel_crtc *crtc)
|
||||||
|
@ -4440,7 +4440,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
|
||||||
|
|
||||||
/* Give the overlay scaler a chance to disable if it's on this pipe */
|
/* Give the overlay scaler a chance to disable if it's on this pipe */
|
||||||
intel_crtc_wait_for_pending_flips(crtc);
|
intel_crtc_wait_for_pending_flips(crtc);
|
||||||
drm_vblank_off(dev, pipe);
|
drm_crtc_vblank_off(crtc);
|
||||||
|
|
||||||
if (dev_priv->fbc.plane == plane)
|
if (dev_priv->fbc.plane == plane)
|
||||||
intel_disable_fbc(dev);
|
intel_disable_fbc(dev);
|
||||||
|
@ -8520,7 +8520,7 @@ static void do_intel_finish_page_flip(struct drm_device *dev,
|
||||||
if (work->event)
|
if (work->event)
|
||||||
drm_send_vblank_event(dev, intel_crtc->pipe, work->event);
|
drm_send_vblank_event(dev, intel_crtc->pipe, work->event);
|
||||||
|
|
||||||
drm_vblank_put(dev, intel_crtc->pipe);
|
drm_crtc_vblank_put(crtc);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
|
|
||||||
|
@ -8912,7 +8912,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
|
||||||
work->old_fb_obj = to_intel_framebuffer(old_fb)->obj;
|
work->old_fb_obj = to_intel_framebuffer(old_fb)->obj;
|
||||||
INIT_WORK(&work->work, intel_unpin_work_fn);
|
INIT_WORK(&work->work, intel_unpin_work_fn);
|
||||||
|
|
||||||
ret = drm_vblank_get(dev, intel_crtc->pipe);
|
ret = drm_crtc_vblank_get(crtc);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto free_work;
|
goto free_work;
|
||||||
|
|
||||||
|
@ -8921,7 +8921,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
|
||||||
if (intel_crtc->unpin_work) {
|
if (intel_crtc->unpin_work) {
|
||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
kfree(work);
|
kfree(work);
|
||||||
drm_vblank_put(dev, intel_crtc->pipe);
|
drm_crtc_vblank_put(crtc);
|
||||||
|
|
||||||
DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
|
DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -8973,7 +8973,7 @@ cleanup:
|
||||||
intel_crtc->unpin_work = NULL;
|
intel_crtc->unpin_work = NULL;
|
||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
|
|
||||||
drm_vblank_put(dev, intel_crtc->pipe);
|
drm_crtc_vblank_put(crtc);
|
||||||
free_work:
|
free_work:
|
||||||
kfree(work);
|
kfree(work);
|
||||||
|
|
||||||
|
@ -10575,6 +10575,8 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
|
||||||
dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
|
dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
|
||||||
|
|
||||||
drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
|
drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
|
||||||
|
|
||||||
|
WARN_ON(drm_crtc_index(&intel_crtc->base) != intel_crtc->pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum pipe intel_get_pipe_from_connector(struct intel_connector *connector)
|
enum pipe intel_get_pipe_from_connector(struct intel_connector *connector)
|
||||||
|
|
Loading…
Reference in a new issue