65 lines
2.0 KiB
Diff
65 lines
2.0 KiB
Diff
|
From 86f82c429f5d7067c52d3b783988917869e13d1d Mon Sep 17 00:00:00 2001
|
||
|
From: Zhenyu Wang <zhenyu.z.wang@intel.com>
|
||
|
Date: Thu, 11 Sep 2008 15:49:41 +0800
|
||
|
Subject: [PATCH] Disable render standby
|
||
|
|
||
|
Render standby is known to cause possible hang issue on some
|
||
|
mobile chips, so always disable it.
|
||
|
---
|
||
|
src/i810_reg.h | 3 +++
|
||
|
src/i830_driver.c | 19 +++++++++++++++++++
|
||
|
2 files changed, 22 insertions(+), 0 deletions(-)
|
||
|
|
||
|
diff --git xf86-video-intel-2.4.2/src/i810_reg.h xf86-video-intel-2.4.2/src/i810_reg.h
|
||
|
index 8690954..af8c6a3 100644
|
||
|
--- xf86-video-intel-2.4.2/src/i810_reg.h
|
||
|
+++ xf86-video-intel-2.4.2/src/i810_reg.h
|
||
|
@@ -2815,4 +2815,7 @@ typedef enum {
|
||
|
|
||
|
#define PEG_BAND_GAP_DATA 0x14d68
|
||
|
|
||
|
+#define MCHBAR_RENDER_STANDBY 0x111B8
|
||
|
+#define RENDER_STANDBY_ENABLE (1 << 30)
|
||
|
+
|
||
|
#endif /* _I810_REG_H */
|
||
|
diff --git xf86-video-intel-2.4.2/src/i830_driver.c xf86-video-intel-2.4.2/src/i830_driver.c
|
||
|
index 6f87c51..209aa07 100644
|
||
|
--- xf86-video-intel-2.4.2/src/i830_driver.c
|
||
|
+++ xf86-video-intel-2.4.2/src/i830_driver.c
|
||
|
@@ -2718,6 +2718,23 @@ i830_memory_init(ScrnInfoPtr pScrn)
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
+static void
|
||
|
+i830_disable_render_standby(ScrnInfoPtr pScrn)
|
||
|
+{
|
||
|
+ I830Ptr pI830 = I830PTR(pScrn);
|
||
|
+ uint32_t render_standby;
|
||
|
+
|
||
|
+ /* Render Standby might cause hang issue, try always disable it.*/
|
||
|
+ if (IS_I965GM(pI830) || IS_GM45(pI830)) {
|
||
|
+ render_standby = INREG(MCHBAR_RENDER_STANDBY);
|
||
|
+ if (render_standby & RENDER_STANDBY_ENABLE) {
|
||
|
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Disable render standby.\n");
|
||
|
+ OUTREG(MCHBAR_RENDER_STANDBY,
|
||
|
+ (render_standby & (~RENDER_STANDBY_ENABLE)));
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
static Bool
|
||
|
I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
||
|
{
|
||
|
@@ -3053,6 +3070,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
||
|
if (!vgaHWMapMem(pScrn))
|
||
|
return FALSE;
|
||
|
|
||
|
+ i830_disable_render_standby(pScrn);
|
||
|
+
|
||
|
DPRINTF(PFX, "assert( if(!I830EnterVT(scrnIndex, 0)) )\n");
|
||
|
|
||
|
if (!pI830->useEXA) {
|
||
|
--
|
||
|
1.6.0.1
|
||
|
|