|
@@ -3620,7 +3620,6 @@ 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,7 +3629,6 @@ static int _sde_crtc_vblank_enable_no_lock(
|
|
|
}
|
|
|
|
|
|
crtc = &sde_crtc->base;
|
|
|
- dev = crtc->dev;
|
|
|
|
|
|
if (enable) {
|
|
|
int ret;
|
|
@@ -3642,27 +3640,27 @@ static int _sde_crtc_vblank_enable_no_lock(
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- list_for_each_entry(enc, &dev->mode_config.encoder_list, head) {
|
|
|
+ drm_for_each_encoder_mask(enc, crtc->dev,
|
|
|
+ crtc->state->encoder_mask) {
|
|
|
if (enc->crtc != crtc)
|
|
|
continue;
|
|
|
|
|
|
SDE_EVT32(DRMID(&sde_crtc->base), DRMID(enc), enable,
|
|
|
sde_crtc->enabled,
|
|
|
- sde_crtc->suspend,
|
|
|
- sde_crtc->vblank_requested);
|
|
|
+ sde_crtc->suspend);
|
|
|
|
|
|
sde_encoder_register_vblank_callback(enc,
|
|
|
sde_crtc_vblank_cb, (void *)crtc);
|
|
|
}
|
|
|
} else {
|
|
|
- list_for_each_entry(enc, &dev->mode_config.encoder_list, head) {
|
|
|
+ drm_for_each_encoder_mask(enc, crtc->dev,
|
|
|
+ crtc->state->encoder_mask) {
|
|
|
if (enc->crtc != crtc)
|
|
|
continue;
|
|
|
|
|
|
SDE_EVT32(DRMID(&sde_crtc->base), DRMID(enc), enable,
|
|
|
sde_crtc->enabled,
|
|
|
- sde_crtc->suspend,
|
|
|
- sde_crtc->vblank_requested);
|
|
|
+ sde_crtc->suspend);
|
|
|
|
|
|
sde_encoder_register_vblank_callback(enc, NULL, NULL);
|
|
|
}
|
|
@@ -3686,7 +3684,6 @@ 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");
|
|
@@ -3711,16 +3708,10 @@ 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->vblank_requested);
|
|
|
+ sde_crtc->suspend);
|
|
|
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);
|
|
@@ -3780,14 +3771,11 @@ static void sde_crtc_reset(struct drm_crtc *crtc)
|
|
|
}
|
|
|
|
|
|
/* revert suspend actions, if necessary */
|
|
|
- if (sde_kms_is_suspend_state(crtc->dev)) {
|
|
|
- _sde_crtc_set_suspend(crtc, false);
|
|
|
-
|
|
|
- if (!sde_crtc_is_reset_required(crtc)) {
|
|
|
+ if (sde_kms_is_suspend_state(crtc->dev) &&
|
|
|
+ !sde_crtc_is_reset_required(crtc)) {
|
|
|
SDE_DEBUG("avoiding reset for crtc:%d\n",
|
|
|
crtc->base.id);
|
|
|
return;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/* remove previous state, if present */
|
|
@@ -3996,15 +3984,7 @@ 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 */
|
|
@@ -4116,8 +4096,7 @@ 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_crtc->vblank_requested);
|
|
|
+ SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend);
|
|
|
|
|
|
/*
|
|
|
* Try to enable uidle (if possible), we do this before the call
|
|
@@ -4144,13 +4123,6 @@ 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 */
|
|
@@ -4743,14 +4715,13 @@ 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->vblank_requested);
|
|
|
+ sde_crtc->suspend);
|
|
|
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;
|
|
@@ -5463,8 +5434,6 @@ 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;
|