[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#426548: bug in i810 X driver, fixed upstream



reassign 426548 xserver-xorg-video-intel
retitle 426548 BIOS timing issues cause hard freeze with i855 chips
tags 426548 fixed-upstream patch
thanks

I believe this issue had to do with a timing issue, which Keith
Packard fixed as follows:

diff --git a/src/i830_display.c b/src/i830_display.c
index 6965337..ce20864 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -361,8 +361,10 @@ i830FindBestPLL(xf86CrtcPtr crtc, int target, int refclk, intel_clock_t *best_cl
 void
 i830WaitForVblank(ScrnInfoPtr pScreen)
 {
-    /* Wait for 20ms, i.e. one cycle at 50hz. */
-    usleep(20000);
+    /* Wait for 30ms, i.e. one cycle at slightly less than 50hz. 
+     * THIS PATCHED BY KEITH
+     */
+    usleep(30000);
 }
 
 void


Also, commit fbbb41bc5e03478cb46ee8f64ef68b23ff3fc14b may be related:

Author: Keith Packard <keithp@neko.keithp.com>
Date:   Sun Jun 17 14:59:24 2007 +0100

    Let DPMS functions enable plane/pipe/output on 8xx hardware.
    
    On 855, letting crtc_mode_set enable the plane and pipe will occasionally
    hang the chip. Instead, wait for crtc_enable to light things up. For 9xx,
    leave things alone.

diff --git a/src/i830_display.c b/src/i830_display.c
index adc7479..6965337 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -958,11 +958,17 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
  else
      pipeconf &= ~PIPEACONF_DOUBLE_WIDE;
     }
-#if 1
-    dspcntr |= DISPLAY_PLANE_ENABLE;
-    pipeconf |= PIPEACONF_ENABLE;
-    dpll |= DPLL_VCO_ENABLE;
-#endif
+    /*
+     * This "shouldn't" be needed as the dpms on code
+     * will be run after the mode is set. On 9xx, it helps.
+     * On 855, it can lock up the chip (and the entire machine)
+     */
+    if (IS_I9XX (pI830))
+    {
+ dspcntr |= DISPLAY_PLANE_ENABLE;
+ pipeconf |= PIPEACONF_ENABLE;
+ dpll |= DPLL_VCO_ENABLE;
+    }
     
     /* Disable the panel fitter if it was on our pipe */
     if (i830_panel_fitter_pipe (pI830) == pipe)


-- 
 .''`.   martin f. krafft <madduck@debian.org>
: :'  :  proud Debian developer, author, administrator, and user
`. `'`   http://people.debian.org/~madduck - http://debiansystem.info
  `-  Debian - when you have better things to do than fixing systems

Attachment: signature.asc
Description: Digital signature (GPG/PGP)


Reply to: