disp: msm: sde: add support for INTF WD long term jitter restore from ipc

Change adds support for storing the INTF watchdog timer long term jitter
curve state. The state before collapse is stored in wd_jitter and
restore back during power restore.

Change-Id: Id83b5cc754daea89d7844ab67b38e12199525ff8
Signed-off-by: Shamika Joshi <quic_shamjosh@quicinc.com>
这个提交包含在:
Shamika Joshi
2022-10-06 15:49:40 -07:00
提交者 Gerrit - the friendly Code Review server
父节点 38c0d4cdba
当前提交 f28d9e0a6a
修改 9 个文件,包含 123 行新增40 行删除

查看文件

@@ -1453,6 +1453,29 @@ static void _sde_encoder_update_vsync_source(struct sde_encoder_virt *sde_enc,
}
}
static void sde_encoder_control_te(struct drm_encoder *drm_enc, bool enable)
{
struct sde_encoder_virt *sde_enc;
struct sde_encoder_phys *phys;
int i;
if (!drm_enc) {
SDE_ERROR("invalid parameters\n");
return;
}
sde_enc = to_sde_encoder_virt(drm_enc);
if (!sde_enc) {
SDE_ERROR("invalid sde encoder\n");
return;
}
for (i = 0; i < sde_enc->num_phys_encs; i++) {
phys = sde_enc->phys_encs[i];
if (phys && phys->ops.control_te)
phys->ops.control_te(phys, enable);
}
}
int sde_encoder_helper_switch_vsync(struct drm_encoder *drm_enc,
@@ -2728,28 +2751,28 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
sde_encoder_virt_modeset_rc(drm_enc, adj_mode, msm_mode, false);
}
void sde_encoder_control_te(struct drm_encoder *drm_enc, bool enable)
void sde_encoder_idle_pc_enter(struct drm_encoder *drm_enc)
{
struct sde_encoder_virt *sde_enc;
struct sde_encoder_phys *phys;
int i;
struct sde_encoder_virt *sde_enc = NULL;
if (!drm_enc) {
SDE_ERROR("invalid parameters\n");
SDE_ERROR("invalid encoder\n");
return;
}
/*
* disable the vsync source after updating the
* rsc state. rsc state update might have vsync wait
* and vsync source must be disabled after it.
* It will avoid generating any vsync from this point
* till mode-2 entry. It is SW workaround for HW
* limitation and should not be removed without
* checking the updated design.
*/
sde_encoder_control_te(drm_enc, false);
sde_enc = to_sde_encoder_virt(drm_enc);
if (!sde_enc) {
SDE_ERROR("invalid sde encoder\n");
return;
}
for (i = 0; i < sde_enc->num_phys_encs; i++) {
phys = sde_enc->phys_encs[i];
if (phys && phys->ops.control_te)
phys->ops.control_te(phys, enable);
}
if (sde_enc->cur_master && sde_enc->cur_master->ops.idle_pc_cache_display_status)
sde_enc->cur_master->ops.idle_pc_cache_display_status(sde_enc->cur_master);
}
static int _sde_encoder_input_connect(struct input_handler *handler,