From: Todd Previte <tprevite@gmail.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 06/12] drm/i915: Update intel_dp_hpd_pulse() for non-MST operation
Date: Thu, 16 Apr 2015 00:22:02 -0700 [thread overview]
Message-ID: <1429168922-28381-1-git-send-email-tprevite@gmail.com> (raw)
In-Reply-To: <1429112327-7695-7-git-send-email-tprevite@gmail.com>
Update the hot plug function to handle the SST case. Instead of placing
the SST case within the long/short pulse block, it is now handled after
determining that MST mode is not in use. This way, the topology management
layer can handle any MST-related operations while SST operations are still
correctly handled afterwards.
This patch also corrects the problem of SST mode only being handled in the
case of a short (0.5ms - 1.0ms) HPD pulse. For compliance testing purposes
both short and long pulses are used by the different tests, thus both cases
need to be addressed for SST.
One additional change is the removal of the return of IRQ_HANDLED for the
SST case. This corrects an issue where the normal hot plug functions were
not being called under certain circumstances while implementing the
compliance testing.
This patch replaces [PATCH 10/10] drm/i915: Fix intel_dp_hot_plug() in the
previous compliance testing patch sequence. Review feedback on that patch
indicated that updating intel_dp_hot_plug() was not the correct place for
the test handler.
V2:
- N/A
V3:
- Place the SST mode link status check into the mst_fail case
- Remove obsolete comment regarding SST mode operation
- Removed an erroneous line of code that snuck in during rebasing
V4:
- Added a disable of the main stream (DP transport) for the long pulse case
for SST to support compliance testing
V5:
- Reworked SST handling to support tests 4.2.2.7 and 4.2.2.8
V6:
- Reformatted a comment
V7:
- Moved a comment again that was inadvertently moved
- Updated the code to properly handle all permutations of MST/SST and
short/long pulse.
- Adds a new 'connected' flag that prevents unnecessary operations when
the link is disconnected.
- Added a function to encapsulate detection of the HPD pin status in
in order to determine connected status
- Reformatted the if-statements in the function so the braces are
consistent for those with single statements after the if-statement
- Main link disable that was added in V4 has been removed
V8:
- Updated to account for long_hpd flag propagation
V9:
- Change the return type for the SST case to IRQ_NONE to allow for
proper invocation of other hot plug functions
Signed-off-by: Todd Previte <tprevite@gmail.com>
---
drivers/gpu/drm/i915/intel_dp.c | 54 ++++++++++++++++++++++++----------------
drivers/gpu/drm/i915/intel_drv.h | 1 +
2 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 97224ff..1ba5247 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4746,6 +4746,7 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
struct drm_i915_private *dev_priv = dev->dev_private;
enum intel_display_power_domain power_domain;
enum irqreturn ret = IRQ_NONE;
+ bool connected = false;
if (intel_dig_port->base.type != INTEL_OUTPUT_EDP)
intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT;
@@ -4769,19 +4770,15 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
power_domain = intel_display_port_power_domain(intel_encoder);
intel_display_power_get(dev_priv, power_domain);
+ connected = intel_dp_digital_port_connected(intel_dp);
+
if (long_hpd) {
- if (HAS_PCH_SPLIT(dev)) {
- if (!ibx_digital_port_connected(dev_priv, intel_dig_port))
- goto mst_fail;
- } else {
- if (g4x_digital_port_connected(dev, intel_dig_port) != 1)
- goto mst_fail;
- }
+ if (!connected)
+ goto mst_fail;
- if (!intel_dp_get_dpcd(intel_dp)) {
+ if (!intel_dp_get_dpcd(intel_dp))
goto mst_fail;
- }
intel_dp_probe_oui(intel_dp);
@@ -4789,20 +4786,9 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
goto mst_fail;
} else {
- if (intel_dp->is_mst) {
+ if (intel_dp->is_mst)
if (intel_dp_check_mst_status(intel_dp) == -EINVAL)
goto mst_fail;
- }
-
- if (!intel_dp->is_mst) {
- /*
- * we'll check the link status via the normal hot plug path later -
- * but for short hpds we should check it now
- */
- drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
- intel_dp_check_link_status(intel_dp, long_hpd);
- drm_modeset_unlock(&dev->mode_config.connection_mutex);
- }
}
ret = IRQ_HANDLED;
@@ -4816,6 +4802,14 @@ mst_fail:
drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
}
put_power:
+ /* SST mode - handle short/long pulses here */
+ if (!intel_dp->is_mst) {
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ if (connected)
+ intel_dp_check_link_status(intel_dp, long_hpd);
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
+ }
intel_display_power_put(dev_priv, power_domain);
return ret;
@@ -5802,3 +5796,21 @@ void intel_dp_mst_resume(struct drm_device *dev)
}
}
}
+
+bool intel_dp_digital_port_connected(struct intel_dp *intel_dp)
+{
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+ struct drm_device *dev = intel_dig_port->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool connected = true;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ if (!ibx_digital_port_connected(dev_priv, intel_dig_port))
+ connected = false;
+ } else {
+ if (g4x_digital_port_connected(dev, intel_dig_port) != 1)
+ connected = false;
+ }
+
+ return connected;
+}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a4675fa..accf08b 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1173,6 +1173,7 @@ void intel_edp_drrs_disable(struct intel_dp *intel_dp);
void intel_edp_drrs_invalidate(struct drm_device *dev,
unsigned frontbuffer_bits);
void intel_edp_drrs_flush(struct drm_device *dev, unsigned frontbuffer_bits);
+bool intel_dp_digital_port_connected(struct intel_dp *intel_dp);
/* intel_dp_mst.c */
int intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_id);
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-04-16 7:22 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-15 15:38 [PATCH V6] Displayport compliance testing V6 Todd Previte
2015-04-15 15:38 ` [PATCH 01/10] drm/i915: Add automated testing support for Displayport compliance testing Todd Previte
2015-04-16 11:32 ` Daniel Vetter
2015-04-15 15:38 ` [PATCH 02/10] drm/i915: Update intel_dp_check_link_status() " Todd Previte
2015-04-15 19:28 ` [PATCH 02/12] " Todd Previte
2015-04-15 19:45 ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 03/10] drm/i915: Add EDID read in intel_dp_check_link_status() for Link CTS 4.2.2.1 Todd Previte
2015-04-15 17:15 ` [PATCH 03/12] " Todd Previte
2015-04-15 19:29 ` Todd Previte
2015-04-15 15:38 ` [PATCH 04/10] drm/i915: Add a delay in Displayport AUX transactions for compliance testing Todd Previte
2015-04-16 12:37 ` Daniel Vetter
2015-04-15 15:38 ` [PATCH 05/10] drm: Add supporting structure for Displayport Link CTS test 4.2.2.6 Todd Previte
2015-04-15 17:15 ` [PATCH 05/12] " Todd Previte
2015-04-15 20:25 ` [Intel-gfx] " Paulo Zanoni
2015-04-15 21:59 ` Todd Previte
2015-04-15 22:03 ` Todd Previte
2015-04-16 13:34 ` Paulo Zanoni
2015-04-16 14:02 ` Todd Previte
2015-04-16 15:47 ` Todd Previte
2015-04-15 15:38 ` [PATCH 06/10] drm/i915: Update intel_dp_hpd_pulse() for non-MST operation Todd Previte
2015-04-15 17:15 ` [PATCH 06/12] " Todd Previte
2015-04-16 7:22 ` Todd Previte [this message]
2015-04-15 15:38 ` [PATCH 07/10] drm/i915: Support EDID compliance tests with the intel_dp_autotest_edid() function Todd Previte
2015-04-15 17:16 ` [PATCH 07/12] " Todd Previte
2015-04-15 15:38 ` [PATCH 08/10] drm: Fix for DP CTS test 4.2.2.5 - I2C DEFER handling Todd Previte
2015-04-16 20:23 ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 09/10] drm/i915: Add debugfs test control files for Displayport compliance testing Todd Previte
2015-04-16 21:25 ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 10/10] drm: Fix the 'native defer' message in drm_dp_i2c_do_msg() Todd Previte
2015-04-16 12:42 ` Daniel Vetter
2015-04-16 12:44 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1429168922-28381-1-git-send-email-tprevite@gmail.com \
--to=tprevite@gmail.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox