From 902ca46c21a2b4672d1714390e86a025e6fe6f09 Mon Sep 17 00:00:00 2001 From: Mahadevan Date: Tue, 28 Feb 2023 13:15:07 +0530 Subject: [PATCH 1/2] Revert "disp: msm: sde: update idlepc handling for wfd display" This reverts commit a5b326dc2d7b0af94099c08cf9d06e5b50de52ad. Change-Id: Ib2c4bd379807047bc5bc4dc8ebb8ec2dddfa45be Signed-off-by: Mahadevan --- msm/sde/sde_crtc.c | 10 ++++++++++ msm/sde/sde_crtc.h | 10 ---------- msm/sde/sde_encoder.c | 6 +----- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 56ae133b..b3f88239 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -6665,6 +6665,16 @@ 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) { diff --git a/msm/sde/sde_crtc.h b/msm/sde/sde_crtc.h index 18d7efe8..8294bc45 100644 --- a/msm/sde/sde_crtc.h +++ b/msm/sde/sde_crtc.h @@ -957,16 +957,6 @@ 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 diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index b06ffe37..76bf10c0 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2301,11 +2301,7 @@ static int _sde_encoder_rc_idle(struct drm_encoder *drm_enc, } crtc_id = drm_crtc_index(crtc); - /** - * 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)) { + if (is_vid_mode) { sde_encoder_irq_control(drm_enc, false); _sde_encoder_pm_qos_remove_request(drm_enc); } else { From f349b4b629c67a603f0b36857fae49b6e876d809 Mon Sep 17 00:00:00 2001 From: Mahadevan Date: Tue, 28 Feb 2023 13:36:51 +0530 Subject: [PATCH 2/2] disp: msm: sde: avoid idlepc power collapse 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 and for CWB encoder gdsc power off will happen on idle pc entry. Change-Id: I5dbab75bdc647b8f3c2a23cbb4e9d82239fe533d Signed-off-by: Mahadevan --- msm/sde/sde_encoder.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 76bf10c0..aa72982e 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2301,6 +2301,11 @@ static int _sde_encoder_rc_idle(struct drm_encoder *drm_enc, } crtc_id = drm_crtc_index(crtc); + /* + * Avoid power collapse entry for writeback crtc since HAL does not repopulate + * crtc, plane properties like luts for idlepc exit commit. Here is_vid_mode will + * represents video mode panels and wfd baring CWB. + */ if (is_vid_mode) { sde_encoder_irq_control(drm_enc, false); _sde_encoder_pm_qos_remove_request(drm_enc); @@ -2419,8 +2424,10 @@ static int sde_encoder_resource_control(struct drm_encoder *drm_enc, } sde_enc = to_sde_encoder_virt(drm_enc); priv = drm_enc->dev->dev_private; - if (sde_encoder_check_curr_mode(&sde_enc->base, MSM_DISPLAY_VIDEO_MODE)) - is_vid_mode = true; + + /* is_vid_mode represents vid mode panel and WFD for clocks and irq control. */ + is_vid_mode = !((sde_encoder_get_intf_mode(drm_enc) == INTF_MODE_CMD) || + sde_encoder_in_clone_mode(drm_enc)); /* * when idle_pc is not supported, process only KICKOFF, STOP and MODESET * events and return early for other events (ie wb display).