Merge "disp: msm: sde: avoid idlepc power collapse for wfd display"

This commit is contained in:
qctecmdr
2023-04-05 17:11:31 -07:00
committed by Gerrit - the friendly Code Review server
3 changed files with 18 additions and 15 deletions

View File

@@ -6662,6 +6662,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)
{

View File

@@ -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

View File

@@ -2308,11 +2308,12 @@ 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.
* 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 || _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 {
@@ -2434,8 +2435,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).