mdp5_crtc
spin_lock_irqsave(&mdp5_crtc->cursor.lock, flags);
old_bo = mdp5_crtc->cursor.scanout_bo;
mdp5_crtc->cursor.scanout_bo = cursor_bo;
mdp5_crtc->cursor.width = width;
mdp5_crtc->cursor.height = height;
spin_unlock_irqrestore(&mdp5_crtc->cursor.lock, flags);
drm_flip_work_queue(&mdp5_crtc->unref_cursor_work, old_bo);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
if (!mdp5_crtc->lm_cursor_enabled) {
mdp5_crtc->cursor.x = x = max(x, -(int)mdp5_crtc->cursor.width);
mdp5_crtc->cursor.y = y = max(y, -(int)mdp5_crtc->cursor.height);
spin_lock_irqsave(&mdp5_crtc->cursor.lock, flags);
spin_unlock_irqrestore(&mdp5_crtc->cursor.lock, flags);
struct mdp5_crtc *mdp5_crtc = container_of(irq, struct mdp5_crtc, vblank);
struct drm_crtc *crtc = &mdp5_crtc->base;
mdp_irq_unregister(&get_kms(crtc)->base, &mdp5_crtc->vblank);
pending = atomic_xchg(&mdp5_crtc->pending, 0);
drm_flip_work_commit(&mdp5_crtc->unref_cursor_work, priv->kms->wq);
struct mdp5_crtc *mdp5_crtc = container_of(irq, struct mdp5_crtc, err);
DBG("%s: error: %08x", mdp5_crtc->base.name, irqstatus);
struct mdp5_crtc *mdp5_crtc = container_of(irq, struct mdp5_crtc,
complete_all(&mdp5_crtc->pp_completion);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
ret = wait_for_completion_timeout(&mdp5_crtc->pp_completion,
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
mdp5_crtc->flushed_mask) == 0),
dev_warn(dev->dev, "vblank time out, crtc=%d\n", mdp5_crtc->id);
mdp5_crtc->flushed_mask = 0;
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
return mdp5_crtc->vblank.irqmask;
struct mdp5_crtc *mdp5_crtc;
mdp5_crtc = drmm_crtc_alloc_with_planes(dev, struct mdp5_crtc, base,
if (IS_ERR(mdp5_crtc))
return ERR_CAST(mdp5_crtc);
crtc = &mdp5_crtc->base;
mdp5_crtc->id = id;
spin_lock_init(&mdp5_crtc->lm_lock);
spin_lock_init(&mdp5_crtc->cursor.lock);
init_completion(&mdp5_crtc->pp_completion);
mdp5_crtc->vblank.irq = mdp5_crtc_vblank_irq;
mdp5_crtc->err.irq = mdp5_crtc_err_irq;
mdp5_crtc->pp_done.irq = mdp5_crtc_pp_done_irq;
mdp5_crtc->lm_cursor_enabled = cursor_plane ? false : true;
drm_flip_work_init(&mdp5_crtc->unref_cursor_work,
ret = drmm_add_action_or_reset(dev, mdp5_crtc_flip_cleanup, mdp5_crtc);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
event = mdp5_crtc->event;
mdp5_crtc->event = NULL;
struct mdp5_crtc *mdp5_crtc =
container_of(work, struct mdp5_crtc, unref_cursor_work);
struct mdp5_kms *mdp5_kms = get_kms(&mdp5_crtc->base);
struct mdp5_crtc *mdp5_crtc = ptr;
drm_flip_work_cleanup(&mdp5_crtc->unref_cursor_work);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
spin_lock_irqsave(&mdp5_crtc->lm_lock, flags);
spin_unlock_irqrestore(&mdp5_crtc->lm_lock, flags);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
spin_lock_irqsave(&mdp5_crtc->lm_lock, flags);
spin_unlock_irqrestore(&mdp5_crtc->lm_lock, flags);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
if (WARN_ON(!mdp5_crtc->enabled))
mdp_irq_unregister(&mdp5_kms->base, &mdp5_crtc->pp_done);
mdp_irq_unregister(&mdp5_kms->base, &mdp5_crtc->err);
WARN_ON(mdp5_crtc->event);
mdp5_crtc->enabled = false;
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
if (WARN_ON(mdp5_crtc->enabled))
if (mdp5_crtc->lm_cursor_enabled) {
if (mdp5_crtc->cursor.iova) {
spin_lock_irqsave(&mdp5_crtc->cursor.lock, flags);
spin_unlock_irqrestore(&mdp5_crtc->cursor.lock, flags);
mdp_irq_register(&mdp5_kms->base, &mdp5_crtc->err);
mdp_irq_register(&mdp5_kms->base, &mdp5_crtc->pp_done);
mdp5_crtc->enabled = true;
#define to_mdp5_crtc(x) container_of(x, struct mdp5_crtc, base)
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
WARN_ON(mdp5_crtc->event);
mdp5_crtc->event = crtc->state->event;
atomic_or(pending, &mdp5_crtc->pending);
mdp_irq_register(&get_kms(crtc)->base, &mdp5_crtc->vblank);
mdp5_crtc->flushed_mask = crtc_flush_all(crtc);
mdp5_crtc->vblank.irqmask = mdp5_cstate->vblank_irqmask;
mdp5_crtc->err.irqmask = mdp5_cstate->err_irqmask;
mdp5_crtc->pp_done.irqmask = mdp5_cstate->pp_done_irqmask;
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
if (mdp5_crtc->cursor.x >= 0)
*roi_w = min(mdp5_crtc->cursor.width, xres -
mdp5_crtc->cursor.x);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
*roi_w = mdp5_crtc->cursor.width - abs(mdp5_crtc->cursor.x);
if (mdp5_crtc->cursor.y >= 0)
*roi_h = min(mdp5_crtc->cursor.height, yres -
mdp5_crtc->cursor.y);
*roi_h = mdp5_crtc->cursor.height - abs(mdp5_crtc->cursor.y);
reinit_completion(&mdp5_crtc->pp_completion);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
assert_spin_locked(&mdp5_crtc->cursor.lock);
x = mdp5_crtc->cursor.x;
y = mdp5_crtc->cursor.y;
width = mdp5_crtc->cursor.width;
height = mdp5_crtc->cursor.height;
if (mdp5_crtc->cursor.x < 0) {
src_x = abs(mdp5_crtc->cursor.x);
if (mdp5_crtc->cursor.y < 0) {
src_y = abs(mdp5_crtc->cursor.y);
mdp5_crtc->cursor.iova);
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
if (!mdp5_crtc->lm_cursor_enabled) {
mdp5_crtc->cursor.iova = 0;
&mdp5_crtc->cursor.iova);