disp: msm: sde: software override for fal10 in cwb enable
When cwb is enabled enable software override for fal10 veto to block fal10 entry as MDSS can keep asserting uidle if there are no fetch clients like dim layer only usecase. Change-Id: Ief51499d370c20fcbdda79576aee0179578650fd Signed-off-by: Prabhanjan Kandula <quic_pkandula@quicinc.com> Signed-off-by: Nilaan Gunabalachandran <quic_ngunabal@quicinc.com>
这个提交包含在:

提交者
Nilaan Gunabalachandran

父节点
b67e836b6e
当前提交
ecc2d6e0ba
@@ -215,6 +215,36 @@ ktime_t sde_encoder_calc_last_vsync_timestamp(struct drm_encoder *drm_enc)
|
||||
return tvblank;
|
||||
}
|
||||
|
||||
static void _sde_encoder_control_fal10_veto(struct drm_encoder *drm_enc, bool veto)
|
||||
{
|
||||
bool clone_mode;
|
||||
struct sde_kms *sde_kms = sde_encoder_get_kms(drm_enc);
|
||||
struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc);
|
||||
struct sde_uidle_cfg *uidle_cfg;
|
||||
|
||||
if (!sde_kms->catalog || !sde_kms->hw_uidle ||
|
||||
!sde_kms->hw_uidle->ops.uidle_fal10_override) {
|
||||
SDE_ERROR("invalid args\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* clone mode is the only scenario where we want to enable software override
|
||||
* of fal10 veto.
|
||||
*/
|
||||
uidle_cfg = &sde_kms->catalog->uidle_cfg;
|
||||
clone_mode = sde_encoder_in_clone_mode(drm_enc);
|
||||
SDE_EVT32(DRMID(drm_enc), clone_mode, veto);
|
||||
|
||||
if (clone_mode && veto) {
|
||||
sde_kms->hw_uidle->ops.uidle_fal10_override(sde_kms->hw_uidle, veto);
|
||||
sde_enc->fal10_veto_override = true;
|
||||
} else if (sde_enc->fal10_veto_override && !veto) {
|
||||
sde_kms->hw_uidle->ops.uidle_fal10_override(sde_kms->hw_uidle, veto);
|
||||
sde_enc->fal10_veto_override = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc)
|
||||
{
|
||||
struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc);
|
||||
@@ -2802,6 +2832,7 @@ static void _sde_encoder_virt_enable_helper(struct drm_encoder *drm_enc)
|
||||
|
||||
memset(&sde_enc->prv_conn_roi, 0, sizeof(sde_enc->prv_conn_roi));
|
||||
memset(&sde_enc->cur_conn_roi, 0, sizeof(sde_enc->cur_conn_roi));
|
||||
_sde_encoder_control_fal10_veto(drm_enc, true);
|
||||
}
|
||||
|
||||
static void _sde_encoder_setup_dither(struct sde_encoder_phys *phys)
|
||||
@@ -3065,6 +3096,8 @@ void sde_encoder_virt_reset(struct drm_encoder *drm_enc)
|
||||
struct sde_kms *sde_kms = sde_encoder_get_kms(drm_enc);
|
||||
int i = 0;
|
||||
|
||||
_sde_encoder_control_fal10_veto(drm_enc, false);
|
||||
|
||||
for (i = 0; i < sde_enc->num_phys_encs; i++) {
|
||||
if (sde_enc->phys_encs[i]) {
|
||||
sde_enc->phys_encs[i]->cont_splash_enabled = false;
|
||||
|
在新工单中引用
屏蔽一个用户