Merge "disp: msm: sde: avoid idlepc power collapse for wfd display"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
d883854ebb
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user