xf86-video-intel: src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Dec 1 02:55:09 PST 2014


 src/sna/sna_display.c |   23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

New commits:
commit 88e9bb760fbd1249bb364a6b68aceee0b442738c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Dec 1 10:47:32 2014 +0000

    sna: Explicitly disable unused pipes after an output reconfiguration
    
    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 aa5bdc3..1633333 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4064,7 +4064,7 @@ static void sort_randr_outputs(struct sna *sna, ScreenPtr screen)
 	}
 }
 
-static void disable_unused_crtc(struct sna *sna)
+static bool disable_unused_crtc(struct sna *sna)
 {
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
 	bool update = false;
@@ -4076,7 +4076,6 @@ static void disable_unused_crtc(struct sna *sna)
 		if (!crtc->enabled)
 			continue;
 
-
 		for (o = 0; o < sna->mode.num_real_output; o++) {
 			xf86OutputPtr output = config->output[o];
 			if (output->crtc == crtc)
@@ -4084,13 +4083,19 @@ static void disable_unused_crtc(struct sna *sna)
 		}
 
 		if (o == sna->mode.num_real_output) {
+			DBG(("%s: CRTC:%d was enabled with no outputs\n",
+			     __FUNCTION__, to_sna_crtc(crtc)->id));
 			crtc->enabled = false;
 			update = true;
 		}
 	}
 
-	if (update)
+	if (update) {
+		DBG(("%s: disabling unused functions\n", __FUNCTION__));
 		xf86DisableUnusedFunctions(sna->scrn);
+	}
+
+	return update;
 }
 
 void sna_mode_discover(struct sna *sna)
@@ -5790,13 +5795,19 @@ sna_crtc_config_notify(ScreenPtr screen)
 	if (!sna->mode.dirty)
 		return;
 
-	/* XXX DisableUnusedOutputs? */
+	if (disable_unused_crtc(sna)) {
+		/* This will have recursed, so simply bail at this point */
+		assert(sna->mode.dirty == false);
+#ifdef RANDR_12_INTERFACE
+		xf86RandR12TellChanged(screen);
+#endif
+		return;
+	}
 
-	probe_capabilities(sna);
 	update_flush_interval(sna);
-
 	sna_cursors_reload(sna);
 
+	probe_capabilities(sna);
 	sna_present_update(sna);
 
 	sna->mode.dirty = false;


More information about the xorg-commit mailing list