disp: msm: sde: improve qsync trigger window accuracy
Currently, panel jitter and loss of precision are not compensated when calculating the trigger window size for a QSYNC panel. These errors can be signigicant on panels supporting very slow frame rate (10 Hz). This change improves fixed point calculation and take into account panel jitter when calculating the minimum qsync time period. Change-Id: Ibe620862afbd853580992fccec09cac8307b92bd Signed-off-by: Amine Najahi <quic_anajahi@quicinc.com>
这个提交包含在:

提交者
Gerrit - the friendly Code Review server

父节点
83cb3d44af
当前提交
88a24f8c45
@@ -5622,24 +5622,15 @@ int sde_encoder_wait_for_event(struct drm_encoder *drm_enc,
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sde_encoder_helper_get_jitter_bounds_ns(struct drm_encoder *drm_enc,
|
||||
u64 *l_bound, u64 *u_bound)
|
||||
void sde_encoder_helper_get_jitter_bounds_ns(u32 frame_rate,
|
||||
u32 jitter_num, u32 jitter_denom,
|
||||
ktime_t *l_bound, ktime_t *u_bound)
|
||||
{
|
||||
struct sde_encoder_virt *sde_enc;
|
||||
u64 jitter_ns, frametime_ns;
|
||||
struct msm_mode_info *info;
|
||||
ktime_t jitter_ns, frametime_ns;
|
||||
|
||||
if (!drm_enc) {
|
||||
SDE_ERROR("invalid encoder\n");
|
||||
return;
|
||||
}
|
||||
|
||||
sde_enc = to_sde_encoder_virt(drm_enc);
|
||||
info = &sde_enc->mode_info;
|
||||
|
||||
frametime_ns = (1 * 1000000000) / info->frame_rate;
|
||||
jitter_ns = info->jitter_numer * frametime_ns;
|
||||
do_div(jitter_ns, info->jitter_denom * 100);
|
||||
frametime_ns = (1 * 1000000000) / frame_rate;
|
||||
jitter_ns = jitter_num * frametime_ns;
|
||||
do_div(jitter_ns, jitter_denom * 100);
|
||||
|
||||
*l_bound = frametime_ns - jitter_ns;
|
||||
*u_bound = frametime_ns + jitter_ns;
|
||||
|
在新工单中引用
屏蔽一个用户