[xorg-x11-drv-intel] today's git snapshot

Dave Airlie airlied at fedoraproject.org
Tue Jun 12 08:48:18 UTC 2012


commit 0950f02ceb9eefbef19b2eed0990376df60bfe48
Author: Dave Airlie <airlied at gmail.com>
Date:   Tue Jun 12 09:47:54 2012 +0100

    today's git snapshot
    
    - resurrect copy-fb

 .gitignore              |    1 +
 copy-fb.patch           |  190 ++++++++++++++++++++++++++++++++---------------
 sources                 |    2 +-
 xorg-x11-drv-intel.spec |   10 ++-
 4 files changed, 139 insertions(+), 64 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index a5be97e..92d7d0f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ xf86-video-intel-2.10.0.tar.bz2
 /xf86-video-intel-2.18.0.tar.bz2
 /xf86-video-intel-2.19.0.tar.bz2
 /xf86-video-intel-20120529.tar.bz2
+/xf86-video-intel-20120612.tar.bz2
diff --git a/copy-fb.patch b/copy-fb.patch
index df1e589..a08c919 100644
--- a/copy-fb.patch
+++ b/copy-fb.patch
@@ -1,65 +1,78 @@
-diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.0/src/drmmode_display.c
---- xf86-video-intel-2.10.0/src/drmmode_display.c.jx	2010-02-08 11:23:25.000000000 -0500
-+++ xf86-video-intel-2.10.0/src/drmmode_display.c	2010-02-08 11:23:46.000000000 -0500
-@@ -35,6 +35,8 @@
+From 8545142db00d0877683394f42984e6a65d1f7a80 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied at gmail.com>
+Date: Mon, 11 Jun 2012 16:34:58 +0100
+Subject: [PATCH] intel/uxa: do copy fb at startup.
+
+---
+ src/intel.h         |    1 +
+ src/intel_display.c |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/intel_driver.c  |   15 +++++--
+ 3 files changed, 127 insertions(+), 3 deletions(-)
+
+diff --git a/src/intel.h b/src/intel.h
+index 20d8282..541c2d0 100644
+--- a/src/intel.h
++++ b/src/intel.h
+@@ -648,4 +648,5 @@ static inline Bool intel_pixmap_is_offscreen(PixmapPtr pixmap)
+ 	return priv && priv->offscreen;
+ }
+ 
++extern void drmmode_copy_fb(ScrnInfoPtr scrn);
+ #endif /* _I830_H_ */
+diff --git a/src/intel_display.c b/src/intel_display.c
+index 6f3f7e6..c7e2f0d 100644
+--- a/src/intel_display.c
++++ b/src/intel_display.c
+@@ -35,6 +35,7 @@
  #include <unistd.h>
  #include <errno.h>
- 
+ #include <poll.h>
 +#include <sys/ioctl.h>
-+
+ 
  #include "xorgVersion.h"
  
- #include "i830.h"
-@@ -1375,6 +1377,8 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scr
- 	if (old_front)
- 		i830_free_memory(scrn, old_front);
+@@ -45,6 +46,8 @@
+ #include "X11/Xatom.h"
+ #include "X11/extensions/dpmsconst.h"
+ #include "xf86DDC.h"
++#include "fb.h"
++#include "uxa.h"
  
-+	scrn->canDoBGNoneRoot = TRUE;
-+
- 	return TRUE;
+ #include "intel_glamor.h"
  
-  fail:
-@@ -1414,6 +1418,7 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, 
- 		return FALSE;
- 	}
+@@ -1748,3 +1751,114 @@ Bool intel_crtc_on(xf86CrtcPtr crtc)
  
-+	scrn->canDoBGNoneRoot = TRUE;
- 	xf86CrtcSetSizeRange(scrn, 320, 200, drmmode->mode_res->max_width,
- 			     drmmode->mode_res->max_height);
- 	for (i = 0; i < drmmode->mode_res->count_crtcs; i++)
-@@ -1458,3 +1463,98 @@ void drmmode_closefb(ScrnInfoPtr scrn)
- 	drmModeRmFB(drmmode->fd, drmmode->fb_id);
- 	drmmode->fb_id = 0;
+ 	return ret;
  }
 +
 +static PixmapPtr
-+drmmode_create_pixmap_for_fbcon(ScrnInfoPtr scrn)
++drmmode_create_pixmap_for_fbcon(ScrnInfoPtr scrn, int fbcon_id)
 +{
 +	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-+	drmmode_crtc_private_ptr drmmode_crtc = xf86_config->crtc[0]->driver_private;
-+	ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex];
-+	drmmode_ptr drmmode = drmmode_crtc->drmmode;
++	ScreenPtr pScreen = xf86ScrnToScreen(scrn);
 +	intel_screen_private *intel = intel_get_screen_private(scrn);
++	struct intel_mode *intel_mode = intel->modes;
 +	drmModeFBPtr fbcon;
 +	struct drm_gem_flink flink;
 +	drm_intel_bo *bo;
 +	PixmapPtr pixmap = NULL;
 +	int i;
 +
-+	for (i = 0; i < drmmode->mode_res->count_crtcs; i++) {
-+		drmmode_crtc = xf86_config->crtc[i]->driver_private;
-+		if (drmmode_crtc->mode_crtc->buffer_id == 0)
-+			continue;
-+		fbcon = drmModeGetFB(drmmode->fd,
-+				     drmmode_crtc->mode_crtc->buffer_id);
-+		if (fbcon != NULL)
-+			break;
-+	}
-+	if (i == drmmode->mode_res->count_crtcs)
++	fbcon = drmModeGetFB(intel_mode->fd, fbcon_id);
++	if (fbcon == NULL)
 +		return NULL;
 +
++        if (fbcon->depth != scrn->depth ||
++            fbcon->width != scrn->virtualX ||
++            fbcon->height != scrn->virtualY) {
++		ErrorF("incorrect res %d %d %d vs %d %d %d\n",
++			fbcon->depth, fbcon->width, fbcon->height,
++			scrn->depth, scrn->virtualX, scrn->virtualY);
++                goto out_free_fb;
++	}
++
 +	flink.handle = fbcon->handle;
-+	if (ioctl(drmmode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) {
++	if (ioctl(intel_mode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) {
 +		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
 +			   "Couldn't flink fbcon handle\n");
 +		return NULL;
@@ -83,8 +96,9 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.
 +		return NULL;
 +	}
 +
-+	i830_set_pixmap_bo(pixmap, bo);
++	intel_set_pixmap_bo(pixmap, bo);
 +	drm_intel_bo_unreference(bo);
++out_free_fb:
 +	drmModeFreeFB(fbcon);
 +
 +	return pixmap;
@@ -92,12 +106,23 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.
 +
 +void drmmode_copy_fb(ScrnInfoPtr scrn)
 +{
-+	ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex];
++	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
++	ScreenPtr pScreen = xf86ScrnToScreen(scrn);
 +	intel_screen_private *intel = intel_get_screen_private(scrn);
 +	PixmapPtr src, dst;
 +	unsigned int pitch = scrn->displayWidth * intel->cpp;
++	struct intel_crtc *intel_crtc;
++	int i;
++	int fbcon_id = 0;
++	for (i = 0; i < xf86_config->num_crtc; i++) {
++		intel_crtc = xf86_config->crtc[i]->driver_private;
++		if (intel_crtc->mode_crtc->buffer_id)
++			fbcon_id = intel_crtc->mode_crtc->buffer_id;
++	}
++	if (!fbcon_id)
++		goto fallback;
 +
-+	src = drmmode_create_pixmap_for_fbcon(scrn);
++	src = drmmode_create_pixmap_for_fbcon(scrn, fbcon_id);
 +	if (src == NULL) {
 +		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
 +			   "Couldn't create pixmap for fbcon\n");
@@ -110,7 +135,7 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.
 +				     scrn->depth, scrn->bitsPerPixel,
 +				     pitch,
 +				     NULL);
-+	i830_set_pixmap_bo(dst, intel->front_buffer->bo);
++	intel_set_pixmap_bo(dst, intel->front_buffer);
 +
 +	intel->uxa_driver->prepare_copy(src, dst, -1, -1, GXcopy, FB_ALLONES);
 +
@@ -124,28 +149,73 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.
 +
 +	(*pScreen->DestroyPixmap)(src);
 +	(*pScreen->DestroyPixmap)(dst);
-+}
 +
-diff -up xf86-video-intel-2.10.0/src/i830_driver.c.jx xf86-video-intel-2.10.0/src/i830_driver.c
---- xf86-video-intel-2.10.0/src/i830_driver.c.jx	2010-01-04 17:09:52.000000000 -0500
-+++ xf86-video-intel-2.10.0/src/i830_driver.c	2010-02-08 11:23:46.000000000 -0500
-@@ -1507,6 +1507,8 @@ static Bool I830EnterVT(int scrnIndex, i
- 	if (IS_I965G(intel))
- 		gen4_render_state_init(scrn);
++	pScreen->canDoBGNoneRoot = TRUE;
++	return;
++fallback:
++	return;
++}
+diff --git a/src/intel_driver.c b/src/intel_driver.c
+index 67cec48..85456d8 100644
+--- a/src/intel_driver.c
++++ b/src/intel_driver.c
+@@ -83,6 +83,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
+ static void i830AdjustFrame(ADJUST_FRAME_ARGS_DECL);
+ static Bool I830CloseScreen(CLOSE_SCREEN_ARGS_DECL);
+ static Bool I830EnterVT(VT_FUNC_ARGS_DECL);
++static Bool I830EnterVT_flag(ScrnInfoPtr pScrn, Bool flag);
+ 
+ /* temporary */
+ extern void xf86SetCursor(ScreenPtr screen, CursorPtr pCurs, int x, int y);
+@@ -167,6 +168,7 @@ static Bool i830CreateScreenResources(ScreenPtr screen)
+ 	if (!(*screen->CreateScreenResources) (screen))
+ 		return FALSE;
  
 +	drmmode_copy_fb(scrn);
+ 	return intel_uxa_create_screen_resources(screen);
+ }
+ 
+@@ -1007,7 +1009,7 @@ I830ScreenInit(SCREEN_INIT_ARGS_DECL)
+ 	 * later memory should be bound when allocating, e.g rotate_mem */
+ 	scrn->vtSema = TRUE;
+ 
+-	return I830EnterVT(VT_FUNC_ARGS(0));
++	return I830EnterVT_flag(scrn, TRUE);
+ }
+ 
+ static void i830AdjustFrame(ADJUST_FRAME_ARGS_DECL)
+@@ -1048,9 +1050,8 @@ static void I830LeaveVT(VT_FUNC_ARGS_DECL)
+ /*
+  * This gets called when gaining control of the VT, and from ScreenInit().
+  */
+-static Bool I830EnterVT(VT_FUNC_ARGS_DECL)
++static Bool I830EnterVT_flag(ScrnInfoPtr scrn, Bool flag)
+ {
+-	SCRN_INFO_PTR(arg);
+ 	intel_screen_private *intel = intel_get_screen_private(scrn);
+ 	int ret;
+ 
+@@ -1061,12 +1062,20 @@ static Bool I830EnterVT(VT_FUNC_ARGS_DECL)
+ 			   strerror(errno));
+ 	}
+ 
++	if (!flag)
++		drmmode_copy_fb(scrn);
 +
  	if (!xf86SetDesiredModes(scrn))
  		return FALSE;
  
-diff -up xf86-video-intel-2.10.0/src/i830.h.jx xf86-video-intel-2.10.0/src/i830.h
---- xf86-video-intel-2.10.0/src/i830.h.jx	2010-01-04 17:09:52.000000000 -0500
-+++ xf86-video-intel-2.10.0/src/i830.h	2010-02-08 11:23:46.000000000 -0500
-@@ -430,6 +430,7 @@ extern void drmmode_closefb(ScrnInfoPtr 
- extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr * bufmgr,
- 					 xf86CrtcPtr crtc);
- extern int drmmode_output_dpms_status(xf86OutputPtr output);
-+extern void drmmode_copy_fb(ScrnInfoPtr scrn);
- extern int drmmode_crtc_id(xf86CrtcPtr crtc);
- void drmmode_crtc_set_cursor_bo(xf86CrtcPtr crtc, dri_bo * cursor);
+ 	return TRUE;
+ }
  
++static Bool I830EnterVT(VT_FUNC_ARGS_DECL)
++{
++	SCRN_INFO_PTR(arg);
++	return I830EnterVT_flag(scrn, FALSE);
++}
+ static Bool I830SwitchMode(SWITCH_MODE_ARGS_DECL)
+ {
+ 	SCRN_INFO_PTR(arg);
+-- 
+1.7.10.2
+
diff --git a/sources b/sources
index 6b1ea0e..f96f004 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
 3ad323489a5a8b821fd24811242a9eea  intel-gpu-tools-20110817.tar.bz2
-191b8547a87396a50b2989a50f8c1f3d  xf86-video-intel-20120529.tar.bz2
+adaa68473d6cbfc6bfb45e2cdd8da373  xf86-video-intel-20120612.tar.bz2
diff --git a/xorg-x11-drv-intel.spec b/xorg-x11-drv-intel.spec
index 696b247..6117997 100644
--- a/xorg-x11-drv-intel.spec
+++ b/xorg-x11-drv-intel.spec
@@ -1,12 +1,12 @@
 %define moduledir %(pkg-config xorg-server --variable=moduledir )
 %define driverdir	%{moduledir}/drivers
 %define gputoolsdate 20110817
-%define gitdate 20120529
+%define gitdate 20120612
 
 Summary:   Xorg X11 Intel video driver
 Name:      xorg-x11-drv-intel
 Version:   2.19.0
-Release:   4.%{gitdate}%{?dist}
+Release:   5.%{gitdate}%{?dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X Hardware Support
@@ -63,7 +63,7 @@ Debugging tools for Intel graphics chips
 
 %prep
 %setup -q -n xf86-video-intel-%{?gitdate:%{gitdate}}%{!?gitdate:%{dirsuffix}} -b3
-#patch23 -p1 -b .legacy
+%patch2 -p1 -b .legacy
 %patch3 -p1 -b .build-fix
 
 %build
@@ -121,6 +121,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/intel_*.1*
 
 %changelog
+* Tue Jun 12 2012 Dave Airlie <airlied at redhat.com> 2.19.0-5.20120612
+- today's git snapshot
+- resurrect copy-fb
+
 * Tue May 29 2012 Adam Jackson <ajax at redhat.com> 2.19.0-4.20120529
 - Today's git snapshot
 - Enable SNA (default is still UXA, use Option "AccelMethod" to switch)


More information about the scm-commits mailing list