Commit 86dfb76c authored by Rodrigo Vivi's avatar Rodrigo Vivi Committed by Jani Nikula

Revert "drm/i915/psr: Make idle_frames sensible again"

This reverts

commit 1c80c25f
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Wed May 18 18:47:12 2016 +0200

    drm/i915/psr: Make idle_frames sensible again

There are panels that needs 4 idle frames before entering PSR,
but VBT is unproperly set.

Also lately it was identified that idle frame count calculated at HW
can be off by 1, what makes the minimum of 2, at least.

Without the current vbt+1 we are with the risk of having HW calculating
0 idle frames and entering PSR when it shouldn't. Regardless the lack
of link training.

[Jani: there is some disagreement on the explanation, but the commit
regresses so revert it is.]

References: http://marc.info/?i=20160904191153.GA2328@light.dominikbrodowski.net
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Fixes: 1c80c25f ("drm/i915/psr: Make idle_frames sensible again")
Cc: drm-intel-fixes@lists.freedesktop.org # v4.8-rc1+
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1473295351-8766-1-git-send-email-rodrigo.vivi@intel.com
(cherry picked from commit 40918e0b)
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 74712339
...@@ -255,14 +255,14 @@ static void hsw_psr_enable_source(struct intel_dp *intel_dp) ...@@ -255,14 +255,14 @@ static void hsw_psr_enable_source(struct intel_dp *intel_dp)
struct drm_i915_private *dev_priv = to_i915(dev); struct drm_i915_private *dev_priv = to_i915(dev);
uint32_t max_sleep_time = 0x1f; uint32_t max_sleep_time = 0x1f;
/* Lately it was identified that depending on panel idle frame count /*
* calculated at HW can be off by 1. So let's use what came * Let's respect VBT in case VBT asks a higher idle_frame value.
* from VBT + 1. * Let's use 6 as the minimum to cover all known cases including
* There are also other cases where panel demands at least 4 * the off-by-one issue that HW has in some cases. Also there are
* but VBT is not being set. To cover these 2 cases lets use * cases where sink should be able to train
* at least 5 when VBT isn't set to be on the safest side. * with the 5 or 6 idle patterns.
*/ */
uint32_t idle_frames = dev_priv->vbt.psr.idle_frames + 1; uint32_t idle_frames = max(6, dev_priv->vbt.psr.idle_frames);
uint32_t val = EDP_PSR_ENABLE; uint32_t val = EDP_PSR_ENABLE;
val |= max_sleep_time << EDP_PSR_MAX_SLEEP_TIME_SHIFT; val |= max_sleep_time << EDP_PSR_MAX_SLEEP_TIME_SHIFT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment