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