Message ID | 1446468916-25295-4-git-send-email-shubhangi.shrivastava@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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); } }