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

Chris Wilson ickle at kemper.freedesktop.org
Sun May 31 01:00:05 PDT 2015


 src/sna/kgem.c        |    2 +-
 src/sna/sna_display.c |   31 ++++++++++++++++++++++++++-----
 src/sna/sna_driver.c  |   12 +++---------
 3 files changed, 30 insertions(+), 15 deletions(-)

New commits:
commit ce4836b091bc10489ab876b2922ca3f004bc5bf4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sun May 31 08:58:02 2015 +0100

    sna: Detect when SET_TILING fails to change tiling
    
    If the swizzling is unknown, the SET_TILING ioctl silently converts the
    request back to I915_TILING_NONE. In order to detect this, we need to
    double check the ioctl parameters.
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=90725#c21
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 463f65f..a28f959 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -454,7 +454,7 @@ restart:
 	set_tiling.stride = stride;
 
 	if (ioctl(fd, DRM_IOCTL_I915_GEM_SET_TILING, &set_tiling) == 0)
-		return true;
+		return set_tiling.tiling_mode == tiling;
 
 	err = errno;
 	if (err == EINTR)
commit 401b9deef045aedbb60ac4fd3c3cc9efbd8339c1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu May 28 11:24:27 2015 +0100

    sna: Flag disabled CRTC to xrandr
    
    If we disable a CRTC, mark it as such and send an XRR event so that
    userspace can do any recovery, and so that hopefully xrandr remains
    consistent.
    
    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 c0c359c..6ef07a9 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -7181,7 +7181,8 @@ sna_wait_for_scanline(struct sna *sna,
 void sna_mode_check(struct sna *sna)
 {
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
-	int i;
+	bool disabled = false;
+	int c, o;
 
 	if (sna->flags & SNA_IS_HOSTED)
 		return;
@@ -7191,8 +7192,8 @@ void sna_mode_check(struct sna *sna)
 		return;
 
 	/* Validate CRTC attachments and force consistency upon the kernel */
-	for (i = 0; i < sna->mode.num_real_crtc; i++) {
-		xf86CrtcPtr crtc = config->crtc[i];
+	for (c = 0; c < sna->mode.num_real_crtc; c++) {
+		xf86CrtcPtr crtc = config->crtc[c];
 		struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
 		struct drm_mode_crtc mode;
 		uint32_t expected[2];
@@ -7220,11 +7221,28 @@ void sna_mode_check(struct sna *sna)
 				   "%s: invalid state found on pipe %d, disabling CRTC:%d\n",
 				   __FUNCTION__, __sna_crtc_pipe(sna_crtc), __sna_crtc_id(sna_crtc));
 			sna_crtc_disable(crtc, true);
+#if XF86_CRTC_VERSION >= 3
+			crtc->active = FALSE;
+#endif
+			if (crtc->enabled) {
+				crtc->enabled = FALSE;
+				disabled = true;
+			}
+
+			for (o = 0; o < sna->mode.num_real_output; o++) {
+				xf86OutputPtr output = config->output[o];
+
+				if (output->crtc != crtc)
+					continue;
+
+				output->funcs->dpms(output, DPMSModeOff);
+				output->crtc = NULL;
+			}
 		}
 	}
 
-	for (i = 0; i < config->num_output; i++) {
-		xf86OutputPtr output = config->output[i];
+	for (o = 0; o < config->num_output; o++) {
+		xf86OutputPtr output = config->output[o];
 		struct sna_output *sna_output;
 
 		if (output->crtc)
@@ -7238,6 +7256,9 @@ void sna_mode_check(struct sna *sna)
 	}
 
 	update_flush_interval(sna);
+
+	if (disabled)
+		xf86RandR12TellChanged(xf86ScrnToScreen(sna->scrn));
 }
 
 static bool
commit 5fa114d945fc4ee5d9e89dc18d99584b02baa678
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu May 28 11:23:35 2015 +0100

    sna: sna_set_desired_mode() always returns true, make it void
    
    Since sna_set_desired_mode() always returns true, we can make it void
    and remove some unreachable code.
    
    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 4e76fd0..b1011b7 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -199,7 +199,7 @@ sna_set_fallback_mode(ScrnInfoPtr scrn)
 #endif
 }
 
-static Bool sna_set_desired_mode(struct sna *sna)
+static void sna_set_desired_mode(struct sna *sna)
 {
 	ScrnInfoPtr scrn = sna->scrn;
 
@@ -212,7 +212,6 @@ static Bool sna_set_desired_mode(struct sna *sna)
 	}
 
 	sna_mode_check(sna);
-	return TRUE;
 }
 
 /**
@@ -282,7 +281,7 @@ static Bool sna_create_screen_resources(ScreenPtr screen)
 		if (serverGeneration == 1 && (sna->flags & SNA_IS_HOSTED) == 0)
 			sna_copy_fbcon(sna);
 
-		(void)sna_set_desired_mode(sna);
+		sna_set_desired_mode(sna);
 	}
 
 	return TRUE;
@@ -1217,13 +1216,8 @@ static Bool sna_enter_vt(VT_FUNC_ARGS_DECL)
 		sna_mode_discover(sna);
 		sna->flags &= ~SNA_REPROBE;
 	}
-	sna_mode_check(sna);
 
-	if (!sna_set_desired_mode(sna)) {
-		sna_accel_leave(sna);
-		intel_put_master(sna->dev);
-		return FALSE;
-	}
+	sna_set_desired_mode(sna);
 
 	return TRUE;
 }


More information about the xorg-commit mailing list