disp: msm: sde: compute timeouts based on refresh rate

Current timeout values in sde driver for vblank, kickoff and
frame complete timeouts are fixed and can be much lower than
a vsync incase of low refresh rate display. Compute timeouts
based on refresh rate for low refresh rate displays.

Change-Id: I9dda41feb15446de7451824e185321de421ad575
Signed-off-by: Prabhanjan Kandula <pkandula@codeaurora.org>
此提交包含在:
Prabhanjan Kandula
2021-08-02 12:12:06 -07:00
父節點 6bf96605eb
當前提交 642c86fee9
共有 8 個檔案被更改,包括 91 行新增15 行删除

查看文件

@@ -61,7 +61,7 @@
(p) ? ((p)->hw_pp ? (p)->hw_pp->idx - PINGPONG_0 : -1) : -1, \
##__VA_ARGS__)
#define SEC_TO_MILLI_SEC 1000
#define MISR_BUFF_SIZE 256
@@ -4488,6 +4488,32 @@ void sde_encoder_get_transfer_time(struct drm_encoder *drm_enc,
*transfer_time_us = info->mdp_transfer_time_us;
}
u32 sde_encoder_helper_get_kickoff_timeout_ms(struct drm_encoder *drm_enc)
{
struct drm_encoder *src_enc = drm_enc;
struct sde_encoder_virt *sde_enc;
u32 fps;
if (!drm_enc) {
SDE_ERROR("invalid encoder\n");
return DEFAULT_KICKOFF_TIMEOUT_MS;
}
if (sde_encoder_in_clone_mode(drm_enc))
src_enc = sde_crtc_get_src_encoder_of_clone(drm_enc->crtc);
if (!src_enc)
return DEFAULT_KICKOFF_TIMEOUT_MS;
sde_enc = to_sde_encoder_virt(src_enc);
fps = sde_enc->mode_info.frame_rate;
if (!fps || fps >= DEFAULT_TIMEOUT_FPS_THRESHOLD)
return DEFAULT_KICKOFF_TIMEOUT_MS;
else
return (SEC_TO_MILLI_SEC / fps) * 2;
}
int sde_encoder_get_avr_status(struct drm_encoder *drm_enc)
{
struct sde_encoder_virt *sde_enc;