Hello community,
here is the log from the commit of package xorg-x11-driver-video
checked in at Mon Aug 6 21:02:30 CEST 2007.
--------
--- xorg-x11-driver-video/xorg-x11-driver-video.changes 2007-08-04 11:45:36.000000000 +0200
+++ /mounts/work_src_done/STABLE/xorg-x11-driver-video/xorg-x11-driver-video.changes 2007-08-06 15:26:33.000000000 +0200
@@ -1,0 +2,16 @@
+Mon Aug 6 15:22:56 CEST 2007 - sndirsch@suse.de
+
+- xf86-video-intel-commit-6f18300.diff:
+ * fixes 1680x1050 mode on TMDS-1 output again
+ (commit 6f18300aed1340348c6d395f326061b5315be643
+ Author: Keith Packard
+ Date: Mon Jul 9 21:29:55 2007 -0700
+ Eliminate bogus (and harmful) blanking adjustment for load detect.
+ Instead of always adding blanking to mode lines, use the FORCE_BORDER
+ option on i9xx hardware where it works, and dynamically add a bit of
+ border if necessary on i8xx hardware to make load detection work.
+ This may cause flashing when a usable crtc is not otherwise idle when
+ load detection is requested.
+- obsoletes xf86-video-intel-commit-1e2e301.diff
+
+-------------------------------------------------------------------
Old:
----
xf86-video-intel-commit-1e2e301.diff
New:
----
xf86-video-intel-commit-6f18300.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xorg-x11-driver-video.spec ++++++
--- /var/tmp/diff_new_pack.r28871/_old 2007-08-06 21:00:07.000000000 +0200
+++ /var/tmp/diff_new_pack.r28871/_new 2007-08-06 21:00:07.000000000 +0200
@@ -15,7 +15,7 @@
BuildRequires: Mesa-devel libdrm-devel pkgconfig xorg-x11-proto-devel xorg-x11-server-sdk
URL: http://xorg.freedesktop.org/
Version: 7.2
-Release: 142
+Release: 144
License: X11/MIT
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Group: System/X11/Servers/XF86_4
@@ -89,7 +89,7 @@
Patch31: xf86-video-ati-mergedfb-disable.diff
Patch33: bug-263199_radeon-autocrt.diff
Patch34: radeon-Fix-CRT-on-RS400.diff
-Patch37: xf86-video-intel-commit-1e2e301.diff
+Patch35: xf86-video-intel-commit-6f18300.diff
%description
This package contains X.Org video drivers.
@@ -107,7 +107,7 @@
%patch30
pushd xf86-video-intel-*
%patch -p0
-%patch37 -p1 -R
+%patch35 -p1
popd
pushd xf86-video-ati-*/src
%patch1 -p1
@@ -270,6 +270,19 @@
%{_mandir}/man4/*
%changelog
+* Mon Aug 06 2007 - sndirsch@suse.de
+- xf86-video-intel-commit-6f18300.diff:
+ * fixes 1680x1050 mode on TMDS-1 output again
+ (commit 6f18300aed1340348c6d395f326061b5315be643
+ Author: Keith Packard
+ Date: Mon Jul 9 21:29:55 2007 -0700
+ Eliminate bogus (and harmful) blanking adjustment for load detect.
+ Instead of always adding blanking to mode lines, use the FORCE_BORDER
+ option on i9xx hardware where it works, and dynamically add a bit of
+ border if necessary on i8xx hardware to make load detection work.
+ This may cause flashing when a usable crtc is not otherwise idle when
+ load detection is requested.
+- obsoletes xf86-video-intel-commit-1e2e301.diff
* Sat Aug 04 2007 - sndirsch@suse.de
- update ati driver to release 6.6.193:
* This is another ati driver RC aimed at server 1.3. Still not
++++++ xf86-video-intel-commit-6f18300.diff ++++++
diff --git a/src/i830_crt.c b/src/i830_crt.c
index 6d70f39..1900dfb 100644
--- a/src/i830_crt.c
+++ b/src/i830_crt.c
@@ -209,10 +209,8 @@ i830_crt_detect_load (xf86CrtcPtr crtc,
CARD32 dsl;
CARD8 st00;
int bclrpat_reg, pipeconf_reg, pipe_dsl_reg;
- int vtotal_reg;
- int vblank_reg;
+ int vtotal_reg, vblank_reg, vsync_reg;
int pipe = i830_crtc->pipe;
- int count, detect;
Bool present;
if (pipe == 0)
@@ -220,6 +218,7 @@ i830_crt_detect_load (xf86CrtcPtr crtc,
bclrpat_reg = BCLRPAT_A;
vtotal_reg = VTOTAL_A;
vblank_reg = VBLANK_A;
+ vsync_reg = VSYNC_A;
pipeconf_reg = PIPEACONF;
pipe_dsl_reg = PIPEA_DSL;
}
@@ -228,6 +227,7 @@ i830_crt_detect_load (xf86CrtcPtr crtc,
bclrpat_reg = BCLRPAT_B;
vtotal_reg = VTOTAL_B;
vblank_reg = VBLANK_B;
+ vsync_reg = VSYNC_B;
pipeconf_reg = PIPEBCONF;
pipe_dsl_reg = PIPEB_DSL;
}
@@ -242,45 +242,78 @@ i830_crt_detect_load (xf86CrtcPtr crtc,
vblank_start = (vblank & 0xfff) + 1;
vblank_end = ((vblank >> 16) & 0xfff) + 1;
- /* sample in the vertical border, selecting the larger one */
- if (vblank_start - vactive >= vtotal - vblank_end)
- vsample = (vblank_start + vactive) >> 1;
- else
- vsample = (vtotal + vblank_end) >> 1;
-
/* Set the border color to purple. */
OUTREG(bclrpat_reg, 0x500050);
- /*
- * Wait for the border to be displayed
- */
- while (INREG(pipe_dsl_reg) >= vactive)
- ;
- while ((dsl = INREG(pipe_dsl_reg)) <= vsample)
- ;
- /*
- * Watch ST00 for an entire scanline
- */
- detect = 0;
- count = 0;
- do {
- count++;
- /* Read the ST00 VGA status register */
- st00 = pI830->readStandard(pI830, 0x3c2);
- if (st00 & (1 << 4))
- detect++;
- } while ((INREG(pipe_dsl_reg) == dsl));
+ if (IS_I9XX (pI830))
+ {
+ CARD32 pipeconf = INREG(pipeconf_reg);
+ OUTREG(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER);
+
+ st00 = pI830->readStandard (pI830, 0x3c2);
+ present = (st00 & (1 << 4)) != 0;
+ OUTREG(pipeconf_reg, pipeconf);
+ }
+ else
+ {
+ Bool restore_vblank = FALSE;
+ int count, detect;
+
+ /*
+ * If there isn't any border, add some.
+ * Yes, this will flicker
+ */
+ if (vblank_start <= vactive && vblank_end >= vtotal)
+ {
+ CARD32 vsync = INREG(vsync_reg);
+ CARD32 vsync_start = (vsync & 0xffff) + 1;
+
+ vblank_start = vsync_start;
+ OUTREG(vblank_reg, (vblank_start - 1) | ((vblank_end - 1) << 16));
+ restore_vblank = TRUE;
+ }
+
+ /* sample in the vertical border, selecting the larger one */
+ if (vblank_start - vactive >= vtotal - vblank_end)
+ vsample = (vblank_start + vactive) >> 1;
+ else
+ vsample = (vtotal + vblank_end) >> 1;
+
+ /*
+ * Wait for the border to be displayed
+ */
+ while (INREG(pipe_dsl_reg) >= vactive)
+ ;
+ while ((dsl = INREG(pipe_dsl_reg)) <= vsample)
+ ;
+ /*
+ * Watch ST00 for an entire scanline
+ */
+ detect = 0;
+ count = 0;
+ do {
+ count++;
+ /* Read the ST00 VGA status register */
+ st00 = pI830->readStandard(pI830, 0x3c2);
+ if (st00 & (1 << 4))
+ detect++;
+ } while ((INREG(pipe_dsl_reg) == dsl));
+
+ /* restore vblank if necessary */
+ if (restore_vblank)
+ OUTREG(vblank_reg, vblank);
+ /*
+ * If more than 3/4 of the scanline detected a monitor,
+ * then it is assumed to be present. This works even on i830,
+ * where there isn't any way to force the border color across
+ * the screen
+ */
+ present = detect * 4 > count * 3;
+ }
/* Restore previous settings */
OUTREG(bclrpat_reg, save_bclrpat);
- /*
- * If more than 3/4 of the scanline detected a monitor,
- * then it is assumed to be present. This works even on i830,
- * where there isn't any way to force the border color across
- * the screen
- */
- present = detect * 4 > count * 3;
return present;
}
@@ -352,10 +385,17 @@ i830_crt_detect(xf86OutputPtr output)
if (!crtc->enabled)
{
xf86SetModeCrtc (&mode, INTERLACE_HALVE_V);
+ /*
+ * Give us some border at the bottom for load detection on i8xx
+ */
+ mode.CrtcVBlankStart = mode.CrtcVSyncStart;
+ if (mode.CrtcVBlankEnd - mode.CrtcVBlankStart < 3)
+ mode.CrtcVBlankStart = mode.CrtcVBlankEnd - 3;
xf86CrtcSetMode (crtc, &mode, RR_Rotate_0, 0, 0);
}
else if (intel_output->load_detect_temp)
{
+ /* Add this output to the crtc */
output->funcs->mode_set (output, &crtc->mode, &crtc->mode);
output->funcs->commit (output);
}
diff --git a/src/i830_display.c b/src/i830_display.c
index f3b5c50..ff25b29 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -1169,13 +1169,6 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
OUTREG(vtot_reg, (adjusted_mode->CrtcVDisplay - 1) |
((adjusted_mode->CrtcVTotal - 1) << 16));
- /*
- * Give us some border at the bottom for load detection
- */
- adjusted_mode->CrtcVBlankStart = adjusted_mode->CrtcVSyncStart;
- if (adjusted_mode->CrtcVBlankEnd - adjusted_mode->CrtcVBlankStart < 3)
- adjusted_mode->CrtcVBlankStart = adjusted_mode->CrtcVBlankEnd - 3;
-
OUTREG(vblank_reg, (adjusted_mode->CrtcVBlankStart - 1) |
((adjusted_mode->CrtcVBlankEnd - 1) << 16));
OUTREG(vsync_reg, (adjusted_mode->CrtcVSyncStart - 1) |
@@ -1437,25 +1430,36 @@ i830GetLoadDetectPipe(xf86OutputPtr output)
ScrnInfoPtr pScrn = output->scrn;
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
I830OutputPrivatePtr intel_output = output->driver_private;
- xf86CrtcPtr crtc;
+ xf86CrtcPtr supported_crtc =NULL;
+ xf86CrtcPtr detect_crtc = NULL;
int i;
if (output->crtc)
return output->crtc;
for (i = 0; i < xf86_config->num_crtc; i++)
- if (output->possible_crtcs & (1 << i))
+ {
+ xf86CrtcPtr crtc;
+ if (!(output->possible_crtcs & (1 << i)))
+ continue;
+ crtc = xf86_config->crtc[i];
+ if (!crtc->enabled)
+ {
+ detect_crtc = crtc;
break;
-
- if (i == xf86_config->num_crtc)
+ }
+ if (!supported_crtc)
+ supported_crtc = crtc;
+ }
+ if (!detect_crtc)
+ detect_crtc = supported_crtc;
+ if (!detect_crtc)
return NULL;
- crtc = xf86_config->crtc[i];
-
- output->crtc = crtc;
+ output->crtc = detect_crtc;
intel_output->load_detect_temp = TRUE;
- return crtc;
+ return detect_crtc;
}
void
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org