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

Chris Wilson ickle at kemper.freedesktop.org
Tue Sep 17 02:16:01 PDT 2013


 src/sna/sna_display.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

New commits:
commit 825557ce44b16b59438df31fd6df2ed82462be89
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Sep 17 10:12:13 2013 +0100

    sna: Clamp the possible-crtc mask to the real CRTCs
    
    A minor bit of sanitizing of the kernel output.
    
    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 f148234..0579503 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1892,6 +1892,9 @@ sna_output_attach_edid(xf86OutputPtr output)
 	blob.length = sna_output->edid_len;
 
 	blob.blob_id = sna_output->prop_values[sna_output->edid_idx];
+	DBG(("%s: attaching EDID id=%d, current=%d\n",
+	     __FUNCTION__, blob.blob_id, sna_output->edid_blob_id));
+
 	if (blob.blob_id == sna_output->edid_blob_id) {
 		if (output->MonInfo) {
 			/* XXX the property keeps on disappearing... */
@@ -2601,12 +2604,16 @@ cleanup:
  * can have more than one output hanging off the same encoder.
  */
 static void
-sna_mode_compute_possible_clones(ScrnInfoPtr scrn)
+sna_mode_compute_possible_outputs(ScrnInfoPtr scrn)
 {
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
+	unsigned crtc_mask;
 	int i, j;
 
-	assert(config->num_output <= 32);
+	assert(config->num_output < 32);
+	assert(config->num_crtc < 32);
+
+	crtc_mask = (1 << (config->num_crtc + 1)) - 1;
 
 	/* Convert from encoder numbering to output numbering */
 	for (i = 0; i < config->num_output; i++) {
@@ -2620,6 +2627,8 @@ sna_mode_compute_possible_clones(ScrnInfoPtr scrn)
 		}
 
 		output->possible_clones = clones;
+		output->possible_crtcs &= crtc_mask;
+
 		DBG(("%s: updated output '%s' %d [%d] (possible crtc:%x, possible clones:%x)\n",
 		     __FUNCTION__, output->name, i, to_connector_id(output),
 		     (uint32_t)output->possible_crtcs,
@@ -3231,7 +3240,7 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna)
 				return false;
 
 		if (!xf86IsEntityShared(scrn->entityList[0]))
-			sna_mode_compute_possible_clones(scrn);
+			sna_mode_compute_possible_outputs(scrn);
 	} else {
 		if (num_fake == 0)
 			num_fake = 1;


More information about the xorg-commit mailing list