summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
diff options
context:
space:
mode:
authorMark Yacoub <markyacoub@google.com>2021-08-30 21:13:59 +0300
committerRob Clark <robdclark@chromium.org>2021-10-15 22:59:20 +0300
commit885455d6bf829e71a9cfe51fca06ade509c088d6 (patch)
tree1d8f4f04582b093f4c31c0dd0a6856ffcbeb0a3c /drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
parentf25f656608e3a54ac3e0747be415cf3d4a69cef8 (diff)
downloadlinux-885455d6bf829e71a9cfe51fca06ade509c088d6.tar.xz
drm/msm: Change dpu_crtc_get_vblank_counter to use vsync count.
[why] vsync_cnt atomic counter increments for every hw vsync. On the other hand, frame count is a register that increments when the frame gets actually pushed out. We cannnot read this register whenever the timing engine is off, but vblank counter should still return a valid number. This behavior also matches the downstream driver. [How] Read the encoder vsync count instead of the dpu_encoder_phys frame count. Suggested-by: Abhinav Kumar <abhinavk@codeaurora.org> CC: Rob Clark <robdclark@chromium.org> Signed-off-by: Mark Yacoub <markyacoub@chromium.org> Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> Link: https://lore.kernel.org/r/20210830181359.124267-1-markyacoub@chromium.org Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c')
-rw-r--r--drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
index 768012243b44..eecfa88517e0 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
@@ -72,15 +72,13 @@ static struct drm_encoder *get_encoder_from_crtc(struct drm_crtc *crtc)
static u32 dpu_crtc_get_vblank_counter(struct drm_crtc *crtc)
{
- struct drm_encoder *encoder;
-
- encoder = get_encoder_from_crtc(crtc);
+ struct drm_encoder *encoder = get_encoder_from_crtc(crtc);
if (!encoder) {
DRM_ERROR("no encoder found for crtc %d\n", crtc->index);
- return false;
+ return 0;
}
- return dpu_encoder_get_frame_count(encoder);
+ return dpu_encoder_get_vsync_count(encoder);
}
static bool dpu_crtc_get_scanout_position(struct drm_crtc *crtc,