Skip to contentSkip to conversation

drm: ignore disconnected <-> unknown status changes

PATCH In review Knut Petersen 3 participants 3 messages Aug 2, 2012 – Aug 5, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 drm: ignore disconnected <-> unknown status changes

On an AOpen i915GMm-hfs the hotplug events generated by transitions between connector_status_unknown and connector_status_disconnected cause screen distortions.

The attached patch cures the problem by disabling the generation of hotplug events in those cases. That should be safe for everybody as the only relevant changes are those from / to connector_status_connected.

cu,
Knut

Quoted 1 line

From f631128c46f916eb58bbdabf867248a04a0d2fc5 Mon Sep 17 00:00:00 2001

From: Knut Petersen <[email protected]>
Date: Thu, 2 Aug 2012 08:52:04 +0200
Subject: [PATCH] drm: ignore disconnected <-> unknown status changes

Only generate a hotplug event if the status changed to / from connector_status_connected.

On some hardware the connector status is oscillating between disconnected and unknown, and the hotplug events mirroring these transitions cause screen distortions. As the only reasonable action on such a status change is to ignore it, it also is safe not to genereate a hotplug event at all.

Needed for / tested on AOpen i915GMm-hfs mobo.

---
 drivers/gpu/drm/drm_crtc_helper.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
drivers/gpu/drm/drm_crtc_helper.c +5 -1
index 3252e70..fb6160b 100644
@@ -954,7 +954,11 @@ static void output_poll_execute(struct work_struct *work)
 			      connector->base.id,
 			      drm_get_connector_name(connector),
 			      old_status, connector->status);
-		if (old_status != connector->status)
+		/* changes are only relevant if previous or
+		    current status is connector_status_connected */
+		if (old_status != connector->status &&
+		    (old_status == connector_status_connected ||
+		    connector->status == connector_status_connected))
 			changed = true;
 	}
 
Signature · 1 line
1.7.7
Reviewed-by on v1 1/1
#1 lore raw
Quoted 8 lines · Knut Petersen

On an AOpen i915GMm-hfs the hotplug events generated by transitions between connector_status_unknown and connector_status_disconnected cause screen distortions.

The attached patch cures the problem by disabling the generation of hotplug events in those cases. That should be safe for everybody as the only relevant changes are those from / to connector_status_connected.

Seems reasonable to me. We should just drop unknown.

Quoted 9 lines

cu,
Knut

_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reviewed-by
#2 lore raw
Quoted 11 lines · Alex Deucher
Quoted 8 lines · Knut Petersen

On an AOpen i915GMm-hfs the hotplug events generated by transitions between connector_status_unknown and connector_status_disconnected cause screen distortions.

The attached patch cures the problem by disabling the generation of hotplug events in those cases. That should be safe for everybody as the only relevant changes are those from / to connector_status_connected.

Seems reasonable to me. We should just drop unknown.

We (ab)use that in i915 to avoid some (more costly) load-detection tricks in the hotplug code (but only on rather ancient hw), instead returning unknown. When userspace then inquires the connector status, we flip-flop back to connected. The issue is that we need to avoid these, for the current kms locking would stall the cursor for a while, which is not acceptable to do every 10s. Until the kms locking is fixed, we hence can't drop the unknown state.

Quoted 1 line
Signature · 3 lines
Daniel Vetter
Mail: [email protected]
Mobile: +41 (0)79 365 57 48