diff options
author | Mark Yacoub <markyacoub@google.com> | 2021-08-30 14:13:59 -0400 |
---|---|---|
committer | Rob Clark <robdclark@chromium.org> | 2021-10-15 12:59:20 -0700 |
commit | 885455d6bf829e71a9cfe51fca06ade509c088d6 (patch) | |
tree | 1d8f4f04582b093f4c31c0dd0a6856ffcbeb0a3c /drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | |
parent | f25f656608e3a54ac3e0747be415cf3d4a69cef8 (diff) | |
download | linux-885455d6bf829e71a9cfe51fca06ade509c088d6.tar.gz linux-885455d6bf829e71a9cfe51fca06ade509c088d6.tar.bz2 linux-885455d6bf829e71a9cfe51fca06ade509c088d6.zip |
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.c | 8 |
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, |