1
0

Revert "disp: msm: sde: remove vblank cache logic"

This reverts commit e6754ef40a.

Change-Id: If5921c6428b2b79ae5979d782138f10e4673d1fb
Signed-off-by: Manoj Kumar AVM <manojavm@codeaurora.org>
Este cometimento está contido em:
Manoj Kumar AVM
2019-05-21 18:32:40 -07:00
ascendente 51e46a53a0
cometimento 7fc5e5d45f
2 ficheiros modificados com 44 adições e 11 eliminações

Ver ficheiro

@@ -3621,6 +3621,7 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
static int _sde_crtc_vblank_enable_no_lock(
struct sde_crtc *sde_crtc, bool enable)
{
struct drm_device *dev;
struct drm_crtc *crtc;
struct drm_encoder *enc;
@@ -3630,6 +3631,7 @@ static int _sde_crtc_vblank_enable_no_lock(
}
crtc = &sde_crtc->base;
dev = crtc->dev;
if (enable) {
int ret;
@@ -3641,27 +3643,27 @@ static int _sde_crtc_vblank_enable_no_lock(
if (ret < 0)
return ret;
drm_for_each_encoder_mask(enc, crtc->dev,
crtc->state->encoder_mask) {
list_for_each_entry(enc, &dev->mode_config.encoder_list, head) {
if (enc->crtc != crtc)
continue;
SDE_EVT32(DRMID(&sde_crtc->base), DRMID(enc), enable,
sde_crtc->enabled,
sde_crtc->suspend);
sde_crtc->suspend,
sde_crtc->vblank_requested);
sde_encoder_register_vblank_callback(enc,
sde_crtc_vblank_cb, (void *)crtc);
}
} else {
drm_for_each_encoder_mask(enc, crtc->dev,
crtc->state->encoder_mask) {
list_for_each_entry(enc, &dev->mode_config.encoder_list, head) {
if (enc->crtc != crtc)
continue;
SDE_EVT32(DRMID(&sde_crtc->base), DRMID(enc), enable,
sde_crtc->enabled,
sde_crtc->suspend);
sde_crtc->suspend,
sde_crtc->vblank_requested);
sde_encoder_register_vblank_callback(enc, NULL, NULL);
}
@@ -3685,6 +3687,7 @@ static void _sde_crtc_set_suspend(struct drm_crtc *crtc, bool enable)
struct sde_crtc *sde_crtc;
struct msm_drm_private *priv;
struct sde_kms *sde_kms;
int ret = 0;
if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
SDE_ERROR("invalid crtc\n");
@@ -3709,10 +3712,16 @@ static void _sde_crtc_set_suspend(struct drm_crtc *crtc, bool enable)
* and take it back during resume (if it is still enabled).
*/
SDE_EVT32(DRMID(&sde_crtc->base), enable, sde_crtc->enabled,
sde_crtc->suspend);
sde_crtc->suspend, sde_crtc->vblank_requested);
if (sde_crtc->suspend == enable)
SDE_DEBUG("crtc%d suspend already set to %d, ignoring update\n",
crtc->base.id, enable);
else if (sde_crtc->enabled && sde_crtc->vblank_requested) {
ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, !enable);
if (ret)
SDE_ERROR("%s vblank enable failed: %d\n",
sde_crtc->name, ret);
}
sde_crtc->suspend = enable;
mutex_unlock(&sde_crtc->crtc_lock);
@@ -3772,11 +3781,14 @@ static void sde_crtc_reset(struct drm_crtc *crtc)
}
/* revert suspend actions, if necessary */
if (sde_kms_is_suspend_state(crtc->dev) &&
!sde_crtc_is_reset_required(crtc)) {
if (sde_kms_is_suspend_state(crtc->dev)) {
_sde_crtc_set_suspend(crtc, false);
if (!sde_crtc_is_reset_required(crtc)) {
SDE_DEBUG("avoiding reset for crtc:%d\n",
crtc->base.id);
return;
}
}
/* remove previous state, if present */
@@ -3985,7 +3997,15 @@ static void sde_crtc_disable(struct drm_crtc *crtc)
_sde_crtc_flush_event_thread(crtc);
SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend,
sde_crtc->vblank_requested,
crtc->state->active, crtc->state->enable);
if (sde_crtc->enabled && !sde_crtc->suspend &&
sde_crtc->vblank_requested) {
ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, false);
if (ret)
SDE_ERROR("%s vblank enable failed: %d\n",
sde_crtc->name, ret);
}
sde_crtc->enabled = false;
/* Try to disable uidle */
@@ -4097,7 +4117,8 @@ static void sde_crtc_enable(struct drm_crtc *crtc,
drm_crtc_vblank_on(crtc);
mutex_lock(&sde_crtc->crtc_lock);
SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend);
SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend,
sde_crtc->vblank_requested);
/*
* Try to enable uidle (if possible), we do this before the call
@@ -4124,6 +4145,13 @@ static void sde_crtc_enable(struct drm_crtc *crtc,
sde_crtc_frame_event_cb, crtc);
}
if (!sde_crtc->enabled && !sde_crtc->suspend &&
sde_crtc->vblank_requested) {
ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, true);
if (ret)
SDE_ERROR("%s vblank enable failed: %d\n",
sde_crtc->name, ret);
}
sde_crtc->enabled = true;
/* update color processing on resume */
@@ -4716,13 +4744,14 @@ int sde_crtc_vblank(struct drm_crtc *crtc, bool en)
mutex_lock(&sde_crtc->crtc_lock);
SDE_EVT32(DRMID(&sde_crtc->base), en, sde_crtc->enabled,
sde_crtc->suspend);
sde_crtc->suspend, sde_crtc->vblank_requested);
if (sde_crtc->enabled && !sde_crtc->suspend) {
ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, en);
if (ret)
SDE_ERROR("%s vblank enable failed: %d\n",
sde_crtc->name, ret);
}
sde_crtc->vblank_requested = en;
mutex_unlock(&sde_crtc->crtc_lock);
return 0;
@@ -5436,6 +5465,8 @@ static int _sde_debugfs_status_show(struct seq_file *s, void *data)
sde_crtc->vblank_cb_time = ktime_set(0, 0);
}
seq_printf(s, "vblank_enable:%d\n", sde_crtc->vblank_requested);
mutex_unlock(&sde_crtc->crtc_lock);
return 0;