drm/i915: PSR simplify port and link standby checks.
authorRodrigo Vivi <rodrigo.vivi@intel.com>
Mon, 1 Feb 2016 20:02:06 +0000 (12:02 -0800)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Mon, 1 Feb 2016 20:03:36 +0000 (12:03 -0800)
Current code not just block link_standby for non DDI platforms but also
block PSR from work on other ports B/C/D/E.

So, besides change any behaviour let's just fix the mess a bit here and
reuse HSW check to block the other ports and reduce the second if only to
link stadnby request.

Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
drivers/gpu/drm/i915/intel_psr.c

index 9ccff3011523378d59338253f61c96bc7b944648..3c80b86e45f87fea5adb6fe4a35867d8d22f1533 100644 (file)
@@ -304,8 +304,15 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
 
        dev_priv->psr.source_ok = false;
 
-       if (IS_HASWELL(dev) && dig_port->port != PORT_A) {
-               DRM_DEBUG_KMS("HSW ties PSR to DDI A (eDP)\n");
+       /*
+        * HSW spec explicitly says PSR is tied to port A.
+        * BDW+ platforms with DDI implementation of PSR have different
+        * PSR registers per transcoder and we only implement transcoder EDP
+        * ones. Since by Display design transcoder EDP is tied to port A
+        * we can safely escape based on the port A.
+        */
+       if (HAS_DDI(dev) && dig_port->port != PORT_A) {
+               DRM_DEBUG_KMS("PSR condition failed: Port not supported\n");
                return false;
        }
 
@@ -328,7 +335,7 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
        }
 
        if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
-           ((dev_priv->vbt.psr.full_link) || (dig_port->port != PORT_A))) {
+           dev_priv->vbt.psr.full_link) {
                DRM_DEBUG_KMS("PSR condition failed: Link Standby requested/needed but not supported on this platform\n");
                return false;
        }