xf86-video-intel: 3 commits - src/sna/sna_display.c src/sna/sna_driver.c

Chris Wilson ickle at kemper.freedesktop.org
Wed May 7 04:37:09 PDT 2014


 src/sna/sna_display.c |   12 ++++++++----
 src/sna/sna_driver.c  |   25 +++++++++++--------------
 2 files changed, 19 insertions(+), 18 deletions(-)

New commits:
commit c410f0cd982cad8de440727b0ad7d9268b89a704
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed May 7 11:04:10 2014 +0100

    sna: Set desired mode after rediscover during VT switch
    
    When switching back to the VT, rerun the output discovery (if such an
    event was pending) before we attempt to set the desired modes.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index d57902e..f1a30dc 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -1093,9 +1093,6 @@ static Bool sna_enter_vt(VT_FUNC_ARGS_DECL)
 	if (intel_get_master(scrn))
 		return FALSE;
 
-	if (!sna_set_desired_mode(sna))
-		return FALSE;
-
 	if (sna->flags & SNA_REDISCOVER) {
 		DBG(("%s: reporting deferred discover event\n",
 		     __FUNCTION__));
@@ -1110,7 +1107,7 @@ static Bool sna_enter_vt(VT_FUNC_ARGS_DECL)
 		sna->flags &= ~SNA_REPROBE;
 	}
 
-	return TRUE;
+	return sna_set_desired_mode(sna);
 }
 
 static Bool sna_switch_mode(SWITCH_MODE_ARGS_DECL)
commit c38512e12e879ae8932528a9cac5ffbf4ea138c0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed May 7 11:01:30 2014 +0100

    sna: Run output discovery before modes query
    
    If we keep the separate discovery uevent, we need to run it first in the
    cases where we get combined discovery+hotplug events.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 80ff33b..d57902e 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -705,6 +705,16 @@ sna_handle_uevents(int fd, void *closure)
 		return;
 	}
 
+	str = udev_device_get_property_value(dev, "DISCOVER");
+	if (str && atoi(str) == 1) {
+		DBG(("%s: discover event (vtSema?=%d)\n",
+		     __FUNCTION__, sna->scrn->vtSema));
+		if (sna->scrn->vtSema)
+			sna_mode_discover(sna);
+		else
+			sna->flags |= SNA_REDISCOVER;
+	}
+
 	str = udev_device_get_property_value(dev, "HOTPLUG");
 	if (str && atoi(str) == 1) {
 		DBG(("%s: hotplug event (vtSema?=%d)\n",
@@ -716,16 +726,6 @@ sna_handle_uevents(int fd, void *closure)
 			sna->flags |= SNA_REPROBE;
 	}
 
-	str = udev_device_get_property_value(dev, "DISCOVER");
-	if (str && atoi(str) == 1) {
-		DBG(("%s: discover event (vtSema?=%d)\n",
-		     __FUNCTION__, sna->scrn->vtSema));
-		if (sna->scrn->vtSema)
-			sna_mode_discover(sna);
-		else
-			sna->flags |= SNA_REDISCOVER;
-	}
-
 	udev_device_unref(dev);
 }
 
commit 7aefd003bb65cc52a74dfcfd8af4b67a364343ff
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed May 7 10:13:53 2014 +0100

    sna: Fix unattached outputs for ZaphodHeads
    
    We need to preserve possible_crtcs for the later check that we can use
    the output with the particular ZaphodHead (which owns a CRTC).
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 468479b..4632019 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2760,7 +2760,7 @@ sna_output_add(struct sna *sna, int id, int serial)
 	struct drm_mode_modeinfo dummy;
 	struct sna_output *sna_output;
 	xf86OutputPtr *outputs, output;
-	unsigned possible_encoders, attached_encoders;
+	unsigned possible_encoders, attached_encoders, possible_crtcs;
 	const char *output_name;
 	char name[32];
 	int len, i;
@@ -2811,6 +2811,9 @@ sna_output_add(struct sna *sna, int id, int serial)
 			DBG(("%s: failed to find attached encoder\n", __FUNCTION__));
 			return 0;
 		}
+
+		possible_crtcs = enc.possible_crtcs;
+		assert(enc.encoder_id = compat_conn.conn.encoder_id);
 	} else {
 		DBG(("%s: unexpected number [%d] of encoders attached\n",
 		     __FUNCTION__, compat_conn.conn.count_encoders));
@@ -2820,6 +2823,7 @@ sna_output_add(struct sna *sna, int id, int serial)
 		}
 		possible_encoders = enc.possible_clones;
 		attached_encoders = enc.crtc_id;
+		possible_crtcs = enc.possible_crtcs;
 
 		memset(&enc, 0, sizeof(enc));
 		enc.encoder_id = compat_conn.conn.encoder_id;
@@ -2835,7 +2839,7 @@ sna_output_add(struct sna *sna, int id, int serial)
 			return 0;
 		}
 
-		if ((enc.possible_crtcs & (1 << scrn->confScreen->device->screen)) == 0) {
+		if ((possible_crtcs & (1 << scrn->confScreen->device->screen)) == 0) {
 			if (str) {
 				xf86DrvMsg(scrn->scrnIndex, X_ERROR,
 					   "%s is an invalid output for screen (pipe) %d\n",
@@ -2845,7 +2849,7 @@ sna_output_add(struct sna *sna, int id, int serial)
 				return 0;
 		}
 
-		enc.possible_crtcs = 1;
+		possible_crtcs = 1;
 	}
 
 	sna_output = calloc(sizeof(struct sna_output), 1);
@@ -2923,7 +2927,7 @@ sna_output_add(struct sna *sna, int id, int serial)
 	if (sna_output->is_panel)
 		sna_output_backlight_init(output);
 
-	output->possible_crtcs = enc.possible_crtcs & count_to_mask(sna->mode.num_real_crtc);
+	output->possible_crtcs = possible_crtcs & count_to_mask(sna->mode.num_real_crtc);
 	output->interlaceAllowed = TRUE;
 
 	if (serial) {


More information about the xorg-commit mailing list