diff mbox

[3/6] drm/i915: Splitting intel_dp_check_link_status

Message ID 1446468916-25295-4-git-send-email-shubhangi.shrivastava@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Shubhangi Shrivastava Nov. 2, 2015, 12:55 p.m. UTC
The link retraining part when EQ is not correct is
retained to intel_dp_check_link_status whereas other
operations are handled as part of intel_dp_short_pulse.
This change is required to avoid performing all DPCD
related operations on performing link retraining.

Signed-off-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
Signed-off-by: Shubhangi Shrivastava <shubhangi.shrivastava@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 48 +++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 18 deletions(-)

Comments

kernel test robot Nov. 2, 2015, 1:11 p.m. UTC | #1
Hi Shubhangi,

[auto build test WARNING on drm-intel/for-linux-next -- if it's inappropriate base, please suggest rules for selecting the more suitable base]

url:    https://github.com/0day-ci/linux/commits/Shubhangi-Shrivastava/Fixing-sink-count-related-detection-over/20151102-205435
config: i386-randconfig-x003-11010709 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/i915/intel_dp.c: In function 'intel_dp_short_pulse':
>> drivers/gpu/drm/i915/intel_dp.c:4461:24: warning: unused variable 'intel_encoder' [-Wunused-variable]
     struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
                           ^
   drivers/gpu/drm/i915/intel_dp.c: In function 'intel_dp_detect':
   drivers/gpu/drm/i915/intel_dp.c:4898:23: warning: passing argument 1 of 'intel_dp_long_pulse' from incompatible pointer type [-Wincompatible-pointer-types]
      intel_dp_long_pulse(intel_dp->attached_connector);
                          ^
   drivers/gpu/drm/i915/intel_dp.c:4803:1: note: expected 'struct drm_connector *' but argument is of type 'struct intel_connector *'
    intel_dp_long_pulse(struct drm_connector *connector)
    ^
   drivers/gpu/drm/i915/intel_dp.c: In function 'intel_dp_hpd_pulse':
   drivers/gpu/drm/i915/intel_dp.c:5228:23: warning: passing argument 1 of 'intel_dp_long_pulse' from incompatible pointer type [-Wincompatible-pointer-types]
      intel_dp_long_pulse(intel_dp->attached_connector);
                          ^
   drivers/gpu/drm/i915/intel_dp.c:4803:1: note: expected 'struct drm_connector *' but argument is of type 'struct intel_connector *'
    intel_dp_long_pulse(struct drm_connector *connector)
    ^

vim +/intel_encoder +4461 drivers/gpu/drm/i915/intel_dp.c

b2008584e Shubhangi Shrivastava 2015-11-02  4445  		intel_dp_stop_link_train(intel_dp);
b2008584e Shubhangi Shrivastava 2015-11-02  4446  	}
b2008584e Shubhangi Shrivastava 2015-11-02  4447  }
b2008584e Shubhangi Shrivastava 2015-11-02  4448  
a4fc5ed69 Keith Packard         2009-04-07  4449  /*
a4fc5ed69 Keith Packard         2009-04-07  4450   * According to DP spec
a4fc5ed69 Keith Packard         2009-04-07  4451   * 5.1.2:
a4fc5ed69 Keith Packard         2009-04-07  4452   *  1. Read DPCD
a4fc5ed69 Keith Packard         2009-04-07  4453   *  2. Configure link according to Receiver Capabilities
a4fc5ed69 Keith Packard         2009-04-07  4454   *  3. Use Link Training from 2.5.3.3 and 3.5.1.3
a4fc5ed69 Keith Packard         2009-04-07  4455   *  4. Check link status on receipt of hot-plug interrupt
a4fc5ed69 Keith Packard         2009-04-07  4456   */
a51462004 Damien Lespiau        2015-02-10  4457  static void
b2008584e Shubhangi Shrivastava 2015-11-02  4458  intel_dp_short_pulse(struct intel_dp *intel_dp)
a4fc5ed69 Keith Packard         2009-04-07  4459  {
5b215bcff Dave Airlie           2014-08-05  4460  	struct drm_device *dev = intel_dp_to_dev(intel_dp);
da63a9f2e Paulo Zanoni          2012-10-26 @4461  	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
a60f0e38d Jesse Barnes          2011-10-20  4462  	u8 sink_irq_vector;
93f62dad5 Keith Packard         2011-11-01  4463  	u8 link_status[DP_LINK_STATUS_SIZE];
a60f0e38d Jesse Barnes          2011-10-20  4464  
92fd8fd13 Keith Packard         2011-07-25  4465  	/* Try to read receiver status if the link appears to be up */
93f62dad5 Keith Packard         2011-11-01  4466  	if (!intel_dp_get_link_status(intel_dp, link_status)) {
a4fc5ed69 Keith Packard         2009-04-07  4467  		return;
a4fc5ed69 Keith Packard         2009-04-07  4468  	}
a4fc5ed69 Keith Packard         2009-04-07  4469  

:::::: The code at line 4461 was first introduced by commit
:::::: da63a9f2e4a1595f4890e38a0511d74bea1a51f0 drm/i915: create intel_digital_port and use it

:::::: TO: Paulo Zanoni <paulo.r.zanoni@intel.com>
:::::: CC: Daniel Vetter <daniel.vetter@ffwll.ch>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 1826a95..f19945f 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4421,6 +4421,31 @@  go_again:
 	return -EINVAL;
 }
 
+static void
+intel_dp_check_link_status(struct intel_dp *intel_dp)
+{
+	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
+	u8 link_status[DP_LINK_STATUS_SIZE];
+
+	if (!intel_dp_get_link_status(intel_dp, link_status)) {
+		DRM_ERROR("Failed to get link status\n");
+		return;
+	}
+
+	if (!intel_encoder->base.crtc)
+		return;
+
+	if (!to_intel_crtc(intel_encoder->base.crtc)->active)
+		return;
+
+	if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
+		DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
+				intel_encoder->base.name);
+		intel_dp_start_link_train(intel_dp);
+		intel_dp_stop_link_train(intel_dp);
+	}
+}
+
 /*
  * According to DP spec
  * 5.1.2:
@@ -4430,21 +4455,13 @@  go_again:
  *  4. Check link status on receipt of hot-plug interrupt
  */
 static void
-intel_dp_check_link_status(struct intel_dp *intel_dp)
+intel_dp_short_pulse(struct intel_dp *intel_dp)
 {
 	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
 	u8 sink_irq_vector;
 	u8 link_status[DP_LINK_STATUS_SIZE];
 
-	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
-
-	if (!intel_encoder->base.crtc)
-		return;
-
-	if (!to_intel_crtc(intel_encoder->base.crtc)->active)
-		return;
-
 	/* Try to read receiver status if the link appears to be up */
 	if (!intel_dp_get_link_status(intel_dp, link_status)) {
 		return;
@@ -4469,12 +4486,9 @@  intel_dp_check_link_status(struct intel_dp *intel_dp)
 			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
 	}
 
-	if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
-		DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
-			      intel_encoder->base.name);
-		intel_dp_start_link_train(intel_dp);
-		intel_dp_stop_link_train(intel_dp);
-	}
+	drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+	intel_dp_check_link_status(intel_dp);
+	drm_modeset_unlock(&dev->mode_config.connection_mutex);
 }
 
 /* XXX this is probably wrong for multiple downstream ports */
@@ -5221,9 +5235,7 @@  intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
 		}
 
 		if (!intel_dp->is_mst) {
-			drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
-			intel_dp_check_link_status(intel_dp);
-			drm_modeset_unlock(&dev->mode_config.connection_mutex);
+			intel_dp_short_pulse(intel_dp);
 		}
 	}