drm/msm/sde: add frame done callback event to crtc
Frame done is signaled when the current commit request
completes after wb/pp/cmd done or vsync are received. Frame
done callback is used by crtc to control clock and bandwidth
setting dynamically.
CRs-Fixed: 2005348
Change-Id: I48d633bfc1174dec5084487da17faa91ec5fa52d
Signed-off-by: Alan Kwong <akwong@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
index 768f59c..3aa4e16 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c
@@ -537,10 +537,14 @@
SDE_DEBUG("[wb:%d,%u]\n", hw_wb->idx - WB_0,
wb_enc->frame_count);
- complete_all(&wb_enc->wbdone_complete);
+ if (phys_enc->parent_ops.handle_frame_done)
+ phys_enc->parent_ops.handle_frame_done(phys_enc->parent,
+ phys_enc, SDE_ENCODER_FRAME_EVENT_DONE);
phys_enc->parent_ops.handle_vblank_virt(phys_enc->parent,
phys_enc);
+
+ complete_all(&wb_enc->wbdone_complete);
}
/**
@@ -689,6 +693,10 @@
} else {
SDE_ERROR("wb:%d kickoff timed out\n",
wb_enc->wb_dev->wb_idx - WB_0);
+ if (phys_enc->parent_ops.handle_frame_done)
+ phys_enc->parent_ops.handle_frame_done(
+ phys_enc->parent, phys_enc,
+ SDE_ENCODER_FRAME_EVENT_ERROR);
rc = -ETIMEDOUT;
}
}