Commit 65fbb4e7 authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Don't try to ack sink irqs when there are none

My ASUS PB278 at least doesn't seem to appreciate when you try to
ack sink irqs when there are none. Results in this sort of dmesg spam
[drm:drm_dp_dpcd_access] too many retries, giving up

Let's skip the ack if there are no pending irqs. I have no clue why we
do this in two places. One of them likely should just go away. Oh, and
MST has its own sink irq handler too...
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1469717448-4297-12-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 1354f734
...@@ -3940,7 +3940,7 @@ static bool ...@@ -3940,7 +3940,7 @@ static bool
intel_dp_short_pulse(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 drm_device *dev = intel_dp_to_dev(intel_dp);
u8 sink_irq_vector; u8 sink_irq_vector = 0;
u8 old_sink_count = intel_dp->sink_count; u8 old_sink_count = intel_dp->sink_count;
bool ret; bool ret;
...@@ -3967,7 +3967,8 @@ intel_dp_short_pulse(struct intel_dp *intel_dp) ...@@ -3967,7 +3967,8 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
/* Try to read the source of the interrupt */ /* Try to read the source of the interrupt */
if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 && if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) { intel_dp_get_sink_irq(intel_dp, &sink_irq_vector) &&
sink_irq_vector != 0) {
/* Clear interrupt source */ /* Clear interrupt source */
drm_dp_dpcd_writeb(&intel_dp->aux, drm_dp_dpcd_writeb(&intel_dp->aux,
DP_DEVICE_SERVICE_IRQ_VECTOR, DP_DEVICE_SERVICE_IRQ_VECTOR,
...@@ -4251,7 +4252,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector) ...@@ -4251,7 +4252,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
enum drm_connector_status status; enum drm_connector_status status;
enum intel_display_power_domain power_domain; enum intel_display_power_domain power_domain;
u8 sink_irq_vector; u8 sink_irq_vector = 0;
power_domain = intel_display_port_aux_power_domain(intel_encoder); power_domain = intel_display_port_aux_power_domain(intel_encoder);
intel_display_power_get(to_i915(dev), power_domain); intel_display_power_get(to_i915(dev), power_domain);
...@@ -4330,7 +4331,8 @@ intel_dp_long_pulse(struct intel_connector *intel_connector) ...@@ -4330,7 +4331,8 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
/* Try to read the source of the interrupt */ /* Try to read the source of the interrupt */
if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 && if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) { intel_dp_get_sink_irq(intel_dp, &sink_irq_vector) &&
sink_irq_vector != 0) {
/* Clear interrupt source */ /* Clear interrupt source */
drm_dp_dpcd_writeb(&intel_dp->aux, drm_dp_dpcd_writeb(&intel_dp->aux,
DP_DEVICE_SERVICE_IRQ_VECTOR, DP_DEVICE_SERVICE_IRQ_VECTOR,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment