aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodrigo Vivi <rodrigo.vivi@intel.com>2016-02-01 15:02:08 -0500
committerRodrigo Vivi <rodrigo.vivi@intel.com>2016-02-01 15:03:36 -0500
commit65f61b426ddba160699fd64bf94f14eff339616c (patch)
tree60cf9b2b8d58c2136d9c6eca80ed47d4f5cb4b56
parent60e5ffe329b090155ec860e2f31dc8d505ec7acd (diff)
drm/i915: Instrument PSR parameter for debuging with link standby x link off.
Unfortunately we don't know all panels and platforms out there and we found internal prototypes without VBT proper set but where only link in standby worked well. So, before enable PSR by default let's instrument the PSR parameter in a way that we can identify different panels out there that might require or work better with link standby mode. It is also useful to say that for backward compatibility I'm not changing the meaning of this flag. So "0" still means disabled and "1" means enabled with full support and maximum power savings. v2: Use positive value instead of negative for different operation mode as suggested by Daniel. v3: As Paulo suggested use 2 to force link standby and 3 to force link fully on. Also split the link_standby introduction in a separated patch. v4: Use DRM_ERROR for link off request on platforms that don't support and Remove the quirk promise. Cc: Jani Nikula <jani.nikula@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1454356928-19779-1-git-send-email-rodrigo.vivi@intel.com
-rw-r--r--drivers/gpu/drm/i915/i915_params.c3
-rw-r--r--drivers/gpu/drm/i915/intel_psr.c17
2 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 8d90c256520a..8b9f36814165 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -127,7 +127,8 @@ MODULE_PARM_DESC(enable_execlists,
127 "(-1=auto [default], 0=disabled, 1=enabled)"); 127 "(-1=auto [default], 0=disabled, 1=enabled)");
128 128
129module_param_named_unsafe(enable_psr, i915.enable_psr, int, 0600); 129module_param_named_unsafe(enable_psr, i915.enable_psr, int, 0600);
130MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)"); 130MODULE_PARM_DESC(enable_psr, "Enable PSR "
131 "(0=disabled [default], 1=enabled - link mode chosen per-platform, 2=force link-standby mode, 3=force link-off mode)");
131 132
132module_param_named_unsafe(preliminary_hw_support, i915.preliminary_hw_support, int, 0600); 133module_param_named_unsafe(preliminary_hw_support, i915.preliminary_hw_support, int, 0600);
133MODULE_PARM_DESC(preliminary_hw_support, 134MODULE_PARM_DESC(preliminary_hw_support,
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index b99a105ae58b..4ab757947f15 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -329,6 +329,12 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
329 return false; 329 return false;
330 } 330 }
331 331
332 if ((IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) &&
333 !dev_priv->psr.link_standby) {
334 DRM_ERROR("PSR condition failed: Link off requested but not supported on this platform\n");
335 return false;
336 }
337
332 if (IS_HASWELL(dev) && 338 if (IS_HASWELL(dev) &&
333 I915_READ(HSW_STEREO_3D_CTL(intel_crtc->config->cpu_transcoder)) & 339 I915_READ(HSW_STEREO_3D_CTL(intel_crtc->config->cpu_transcoder)) &
334 S3D_ENABLE) { 340 S3D_ENABLE) {
@@ -772,6 +778,7 @@ void intel_psr_init(struct drm_device *dev)
772 dev_priv->psr_mmio_base = IS_HASWELL(dev_priv) ? 778 dev_priv->psr_mmio_base = IS_HASWELL(dev_priv) ?
773 HSW_EDP_PSR_BASE : BDW_EDP_PSR_BASE; 779 HSW_EDP_PSR_BASE : BDW_EDP_PSR_BASE;
774 780
781 /* Set link_standby x link_off defaults */
775 if (IS_HASWELL(dev) || IS_BROADWELL(dev)) 782 if (IS_HASWELL(dev) || IS_BROADWELL(dev))
776 /* HSW and BDW require workarounds that we don't implement. */ 783 /* HSW and BDW require workarounds that we don't implement. */
777 dev_priv->psr.link_standby = false; 784 dev_priv->psr.link_standby = false;
@@ -782,6 +789,16 @@ void intel_psr_init(struct drm_device *dev)
782 /* For new platforms let's respect VBT back again */ 789 /* For new platforms let's respect VBT back again */
783 dev_priv->psr.link_standby = dev_priv->vbt.psr.full_link; 790 dev_priv->psr.link_standby = dev_priv->vbt.psr.full_link;
784 791
792 /* Override link_standby x link_off defaults */
793 if (i915.enable_psr == 2 && !dev_priv->psr.link_standby) {
794 DRM_DEBUG_KMS("PSR: Forcing link standby\n");
795 dev_priv->psr.link_standby = true;
796 }
797 if (i915.enable_psr == 3 && dev_priv->psr.link_standby) {
798 DRM_DEBUG_KMS("PSR: Forcing main link off\n");
799 dev_priv->psr.link_standby = false;
800 }
801
785 INIT_DELAYED_WORK(&dev_priv->psr.work, intel_psr_work); 802 INIT_DELAYED_WORK(&dev_priv->psr.work, intel_psr_work);
786 mutex_init(&dev_priv->psr.lock); 803 mutex_init(&dev_priv->psr.lock);
787} 804}