disp: msm: sde: update idlepc handling for wfd display

When wfd display is connected, qseed3 coefficient lut
programming is getting erased due to idle pc entry for wfd pipes.
On idlepc exit commit, plane properties are not reconfigured from
userspace since support is not present for writeback crtc. This patch
updates idle pc handling to avoid gdsc power off when writeback
crtc is connected.

Change-Id: Ic4a4b5a6e4ccd59aaa4a076d6d8f1f7cfa27974f
Signed-off-by: Jayaprakash Madisetty <quic_jmadiset@quicinc.com>
This commit is contained in:
Jayaprakash Madisetty
2022-12-12 11:38:06 +05:30
parent e9c7f9b630
commit a5b326dc2d
3 changed files with 15 additions and 11 deletions

View File

@@ -6652,16 +6652,6 @@ static void sde_crtc_install_properties(struct drm_crtc *crtc,
vfree(info);
}
static bool _is_crtc_intf_mode_wb(struct drm_crtc *crtc)
{
enum sde_intf_mode intf_mode = sde_crtc_get_intf_mode(crtc, crtc->state);
if ((intf_mode != INTF_MODE_WB_BLOCK) && (intf_mode != INTF_MODE_WB_LINE))
return false;
return true;
}
static int _sde_crtc_get_output_fence(struct drm_crtc *crtc,
const struct drm_crtc_state *state, uint64_t *val)
{

View File

@@ -950,6 +950,16 @@ static inline bool sde_crtc_state_in_clone_mode(struct drm_encoder *encoder,
return false;
}
static inline bool _is_crtc_intf_mode_wb(struct drm_crtc *crtc)
{
enum sde_intf_mode intf_mode = sde_crtc_get_intf_mode(crtc, crtc->state);
if ((intf_mode != INTF_MODE_WB_BLOCK) && (intf_mode != INTF_MODE_WB_LINE))
return false;
return true;
}
/**
* sde_crtc_get_ds_io_res - populates the destination scaler src/dst w/h
* @state: pointer to drm crtc state

View File

@@ -2232,7 +2232,11 @@ static int _sde_encoder_rc_idle(struct drm_encoder *drm_enc,
}
crtc_id = drm_crtc_index(crtc);
if (is_vid_mode) {
/**
* Avoid power collapse entry for writeback crtc since HAL does not repopulate
* crtc, plane properties like luts for idlepc exit commit.
*/
if (is_vid_mode || _is_crtc_intf_mode_wb(crtc)) {
sde_encoder_irq_control(drm_enc, false);
_sde_encoder_pm_qos_remove_request(drm_enc);
} else {