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

xserver-xorg-video-nouveau: Changes to 'debian-unstable'



 configure.ac                    |    2 -
 debian/changelog                |    8 +++++
 debian/upstream/signing-key.asc |   64 ++++++++++++++++++++++++++++++++++++++++
 src/compat-api.h                |    9 +++++
 src/drmmode_display.c           |   46 +++++++++++++++++++++++++++-
 src/nouveau_copy.c              |   38 +++++++++++++----------
 src/nv50_exa.c                  |   48 +++++++++++++++---------------
 src/nvc0_exa.c                  |   48 +++++++++++++++---------------
 8 files changed, 197 insertions(+), 66 deletions(-)

New commits:
commit b894a423a357a70306ac499a95f3dfede6188395
Author: Sven Joachim <svenjoac@gmx.de>
Date:   Fri Sep 23 17:28:18 2016 +0200

    Add Maarten Lankhorst's key FE558C72A67013C3
    
    Used to sign the xf86-video-nouveau-1.0.13 tarball.

diff --git a/debian/changelog b/debian/changelog
index ed1c5af..47270c6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,8 @@
 xserver-xorg-video-nouveau (1:1.0.13-1) UNRELEASED; urgency=medium
 
   * New upstream release.
+  * Add Maarten Lankhorst's key FE558C72A67013C3 to
+    debian/upstream/signing-key.asc.
 
  -- Sven Joachim <svenjoac@gmx.de>  Fri, 23 Sep 2016 17:26:05 +0200
 
diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc
index dfe9054..df45a3e 100644
--- a/debian/upstream/signing-key.asc
+++ b/debian/upstream/signing-key.asc
@@ -109,3 +109,67 @@ xjRzzOuOtaxMftMlZwRNXm1zh5CTzMOYpXeetPXrLwUOSF5VeN8AK//gGlbjZt1o
 iQyTzgz/F98QzHzNrRk8DdK4kxVkpvk=
 =G7Eh
 -----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+GtLp6sJi2Q0t9a2IMD62a+dAj74J
+=Gywi
+-----END PGP PUBLIC KEY BLOCK-----

commit ffcd90a76ff7c1369c49212bf2224a4ae1a08a65
Author: Sven Joachim <svenjoac@gmx.de>
Date:   Fri Sep 23 17:26:16 2016 +0200

    New upstream release

diff --git a/debian/changelog b/debian/changelog
index f26fd99..ed1c5af 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xserver-xorg-video-nouveau (1:1.0.13-1) UNRELEASED; urgency=medium
+
+  * New upstream release.
+
+ -- Sven Joachim <svenjoac@gmx.de>  Fri, 23 Sep 2016 17:26:05 +0200
+
 xserver-xorg-video-nouveau (1:1.0.12-2) unstable; urgency=medium
 
   * Team upload.

commit e6479845ec0db20dc733c621b7967b751840a552
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Tue Sep 20 00:31:06 2016 -0400

    Bump version to 1.0.13
    
     - Fixes for reverse prime offload
     - ABI 23 support for Xorg 1.19
    
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu

diff --git a/configure.ac b/configure.ac
index 8da54f7..0e004d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-nouveau],
-        [1.0.12],
+        [1.0.13],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-nouveau])
 

commit 6473b68762b0dca2dfccfdfc74100398b7459296
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Jul 19 08:29:40 2016 -0700

    Use NotifyFd for drm and udev fds
    
    NotifyFd is available after API 22, and must be used after API 23.
    
    Signed-off-by: Keith Packard <keithp@keithp.com>

diff --git a/src/compat-api.h b/src/compat-api.h
index 5d63e10..fde2f4b 100644
--- a/src/compat-api.h
+++ b/src/compat-api.h
@@ -74,6 +74,10 @@
 
 #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
 
+#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(22,0)
+#define HAVE_NOTIFY_FD	1
+#endif
+
 #if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0)
 #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout
 #define BLOCKHANDLER_ARGS arg, pTimeout
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index f326e46..b6c9bb9 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1537,6 +1537,15 @@ drmmode_handle_uevents(ScrnInfoPtr scrn)
 }
 #endif
 
+#if HAVE_NOTIFY_FD
+static void
+drmmode_udev_notify(int fd, int notify, void *data)
+{
+	ScrnInfoPtr scrn = data;
+	drmmode_handle_uevents(scrn);
+}
+#endif
+
 static void
 drmmode_uevent_init(ScrnInfoPtr scrn)
 {
@@ -1563,7 +1572,11 @@ drmmode_uevent_init(ScrnInfoPtr scrn)
 		return;
 	}
 
+#if HAVE_NOTIFY_FD
+	SetNotifyFd(udev_monitor_get_fd(mon), drmmode_udev_notify, X_NOTIFY_READ, scrn);
+#else
 	AddGeneralSocket(udev_monitor_get_fd(mon));
+#endif
 	drmmode->uevent_monitor = mon;
 #endif
 }
@@ -1577,13 +1590,27 @@ drmmode_uevent_fini(ScrnInfoPtr scrn)
 	if (drmmode->uevent_monitor) {
 		struct udev *u = udev_monitor_get_udev(drmmode->uevent_monitor);
 
+#if HAVE_NOTIFY_FD
+		RemoveNotifyFd(udev_monitor_get_fd(drmmode->uevent_monitor));
+#else
 		RemoveGeneralSocket(udev_monitor_get_fd(drmmode->uevent_monitor));
+#endif
 		udev_monitor_unref(drmmode->uevent_monitor);
 		udev_unref(u);
 	}
 #endif
 }
 
+#if HAVE_NOTIFY_FD
+static void
+drmmode_notify_fd(int fd, int notify, void *data)
+{
+	ScrnInfoPtr scrn = data;
+	drmmode_ptr drmmode = drmmode_from_scrn(scrn);
+	drmHandleEvent(drmmode->fd, &drmmode->event_context);
+}
+#else
+
 static void
 drmmode_wakeup_handler(pointer data, int err, pointer p)
 {
@@ -1602,6 +1629,7 @@ drmmode_wakeup_handler(pointer data, int err, pointer p)
 		drmmode_handle_uevents(scrn);
 #endif
 }
+#endif
 
 void
 drmmode_screen_init(ScreenPtr pScreen)
@@ -1619,9 +1647,13 @@ drmmode_screen_init(ScreenPtr pScreen)
 	/* Register wakeup handler only once per servergen, so ZaphodHeads work */
 	if (pNVEnt->fd_wakeup_registered != serverGeneration) {
 		/* Register a wakeup handler to get informed on DRM events */
+#if HAVE_NOTIFY_FD
+		SetNotifyFd(drmmode->fd, drmmode_notify_fd, X_NOTIFY_READ, scrn);
+#else
 		AddGeneralSocket(drmmode->fd);
 		RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
 		                               drmmode_wakeup_handler, scrn);
+#endif
 		pNVEnt->fd_wakeup_registered = serverGeneration;
 		pNVEnt->fd_wakeup_ref = 1;
 	}
@@ -1640,10 +1672,14 @@ drmmode_screen_fini(ScreenPtr pScreen)
 	if (pNVEnt->fd_wakeup_registered == serverGeneration &&
 		!--pNVEnt->fd_wakeup_ref) {
 
+#if HAVE_NOTIFY_FD
+		RemoveNotifyFd(drmmode->fd);
+#else
 		/* Unregister wakeup handler */
 		RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
 		                             drmmode_wakeup_handler, scrn);
 		RemoveGeneralSocket(drmmode->fd);
+#endif
 	}
 
 	/* Tear down udev event handler */

commit a964931e8dc4e06c27749edb4993a656dc261d75
Author: Adam Jackson <ajax@redhat.com>
Date:   Tue Jul 19 10:03:56 2016 -0400

    Adapt Block/WakeupHandler signature for ABI 23
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/src/compat-api.h b/src/compat-api.h
index b1591b1..5d63e10 100644
--- a/src/compat-api.h
+++ b/src/compat-api.h
@@ -74,8 +74,13 @@
 
 #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
 
+#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0)
+#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout
+#define BLOCKHANDLER_ARGS arg, pTimeout
+#else
 #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask
 #define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask
+#endif
 
 #define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
 #define CLOSE_SCREEN_ARGS pScreen

commit 12f77348e7a9579b167b41228dec9e6f97b74de8
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Jun 3 14:46:10 2016 +0200

    Properly cleanup fb for reverse-prime-offload
    
    drmmode_set_scanout_pixmap(pix) adds drmmod->fb_id through a call
    to drmmode_xf86crtc_resize(), but on a subsequent
    drmmode_set_scanout_pixmap(NULL) it would not remove the fb.
    
    This keeps the crtc marked as busy, which causes the dgpu to not
    being able to runtime suspend, after an output attached to the dgpu
    has been used once. Which causes burning through an additional 10W
    of power and the laptop to run quite hot.
    
    This commit adds the missing remove fb call, allowing the dgpu to runtime
    suspend after an external monitor has been plugged into the laptop.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index b950f42..f326e46 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -680,10 +680,16 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
 	PixmapPtr screenpix = screen->GetScreenPixmap(screen);
 	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
 	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+	drmmode_ptr drmmode = drmmode_crtc->drmmode;
 	int c, total_width = 0, max_height = 0, this_x = 0;
 	if (!ppix) {
-		if (crtc->randr_crtc->scanout_pixmap)
+		if (crtc->randr_crtc->scanout_pixmap) {
 			PixmapStopDirtyTracking(crtc->randr_crtc->scanout_pixmap, screenpix);
+			if (drmmode && drmmode->fb_id) {
+				drmModeRmFB(drmmode->fd, drmmode->fb_id);
+				drmmode->fb_id = 0;
+			}
+		}
 		drmmode_crtc->scanout_pixmap_x = 0;
 		return TRUE;
 	}

commit 1da8a937be19e41c51a3d516bd98cee988bca44b
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu Jun 2 11:23:53 2016 +1000

    exa/nv50-: fix some potential incomplete pushes
    
    I don't think these should actually be able to happen, given that we
    already reject the unknown formats in the Check() functions.  But,
    just in case...
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nv50_exa.c b/src/nv50_exa.c
index 221160d..7272065 100644
--- a/src/nv50_exa.c
+++ b/src/nv50_exa.c
@@ -575,82 +575,84 @@ NV50EXAPictTexture(NVPtr pNv, PixmapPtr ppix, PicturePtr ppict, unsigned unit)
 {
 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
+	uint32_t format;
 
 	/*XXX: Scanout buffer not tiled, someone needs to figure it out */
 	if (!nv50_style_tiled_pixmap(ppix))
 		NOUVEAU_FALLBACK("pixmap is scanout buffer\n");
 
-	PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
-	PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8);
 	switch (ppict->format) {
 	case PICT_a8r8g8b8:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8));
+		format = _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8);
 		break;
 	case PICT_a8b8g8r8:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 8_8_8_8));
+		format = _(R_C0, G_C1, B_C2, A_C3, 8_8_8_8);
 		break;
 	case PICT_x8r8g8b8:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 8_8_8_8));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 8_8_8_8);
 		break;
 	case PICT_x8b8g8r8:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 8_8_8_8));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 8_8_8_8);
 		break;
 	case PICT_r5g6b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 5_6_5));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 5_6_5);
 		break;
 	case PICT_a8:
-		PUSH_DATA (push, _(A_C0, B_ZERO, G_ZERO, R_ZERO, 8));
+		format = _(A_C0, B_ZERO, G_ZERO, R_ZERO, 8);
 		break;
 	case PICT_x1r5g5b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 1_5_5_5));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 1_5_5_5);
 		break;
 	case PICT_x1b5g5r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 1_5_5_5));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 1_5_5_5);
 		break;
 	case PICT_a1r5g5b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 1_5_5_5));
+		format = _(B_C0, G_C1, R_C2, A_C3, 1_5_5_5);
 		break;
 	case PICT_a1b5g5r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 1_5_5_5));
+		format = _(R_C0, G_C1, B_C2, A_C3, 1_5_5_5);
 		break;
 	case PICT_b5g6r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 5_6_5));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 5_6_5);
 		break;
 	case PICT_b8g8r8x8:
-		PUSH_DATA (push, _(A_ONE, R_C1, G_C2, B_C3, 8_8_8_8));
+		format = _(A_ONE, R_C1, G_C2, B_C3, 8_8_8_8);
 		break;
 	case PICT_b8g8r8a8:
-		PUSH_DATA (push, _(A_C0, R_C1, G_C2, B_C3, 8_8_8_8));
+		format = _(A_C0, R_C1, G_C2, B_C3, 8_8_8_8);
 		break;
 	case PICT_a2b10g10r10:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 2_10_10_10));
+		format = _(R_C0, G_C1, B_C2, A_C3, 2_10_10_10);
 		break;
 	case PICT_x2b10g10r10:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 2_10_10_10));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 2_10_10_10);
 		break;
 	case PICT_x2r10g10b10:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 2_10_10_10));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 2_10_10_10);
 		break;
 	case PICT_a2r10g10b10:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 2_10_10_10));
+		format = _(B_C0, G_C1, R_C2, A_C3, 2_10_10_10);
 		break;
 	case PICT_x4r4g4b4:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 4_4_4_4));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 4_4_4_4);
 		break;
 	case PICT_x4b4g4r4:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 4_4_4_4));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 4_4_4_4);
 		break;
 	case PICT_a4r4g4b4:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 4_4_4_4));
+		format = _(B_C0, G_C1, R_C2, A_C3, 4_4_4_4);
 		break;
 	case PICT_a4b4g4r4:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 4_4_4_4));
+		format = _(R_C0, G_C1, B_C2, A_C3, 4_4_4_4);
 		break;
 	default:
 		NOUVEAU_FALLBACK("invalid picture format, this SHOULD NOT HAPPEN. Expect trouble.\n");
 	}
 #undef _
 
+	PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
+	PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8);
+	PUSH_DATA (push, format);
 	PUSH_DATA (push, bo->offset);
 	PUSH_DATA (push, (bo->offset >> 32) |
 			 (bo->config.nv50.tile_mode << 18) |
diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c
index 7aa98cf..6add60b 100644
--- a/src/nvc0_exa.c
+++ b/src/nvc0_exa.c
@@ -574,82 +574,84 @@ NVC0EXAPictTexture(NVPtr pNv, PixmapPtr ppix, PicturePtr ppict, unsigned unit)
 {
 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
+	uint32_t format;
 
 	/*XXX: Scanout buffer not tiled, someone needs to figure it out */
 	if (!nv50_style_tiled_pixmap(ppix))
 		NOUVEAU_FALLBACK("pixmap is scanout buffer\n");
 
-	PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
-	PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8);
 	switch (ppict->format) {
 	case PICT_a8r8g8b8:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8));
+		format = _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8);
 		break;
 	case PICT_a8b8g8r8:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 8_8_8_8));
+		format = _(R_C0, G_C1, B_C2, A_C3, 8_8_8_8);
 		break;
 	case PICT_x8r8g8b8:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 8_8_8_8));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 8_8_8_8);
 		break;
 	case PICT_x8b8g8r8:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 8_8_8_8));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 8_8_8_8);
 		break;
 	case PICT_r5g6b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 5_6_5));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 5_6_5);
 		break;
 	case PICT_a8:
-		PUSH_DATA (push, _(A_C0, B_ZERO, G_ZERO, R_ZERO, 8));
+		format = _(A_C0, B_ZERO, G_ZERO, R_ZERO, 8);
 		break;
 	case PICT_x1r5g5b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 1_5_5_5));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 1_5_5_5);
 		break;
 	case PICT_x1b5g5r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 1_5_5_5));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 1_5_5_5);
 		break;
 	case PICT_a1r5g5b5:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 1_5_5_5));
+		format = _(B_C0, G_C1, R_C2, A_C3, 1_5_5_5);
 		break;
 	case PICT_a1b5g5r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 1_5_5_5));
+		format = _(R_C0, G_C1, B_C2, A_C3, 1_5_5_5);
 		break;
 	case PICT_b5g6r5:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 5_6_5));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 5_6_5);
 		break;
 	case PICT_b8g8r8x8:
-		PUSH_DATA (push, _(A_ONE, R_C1, G_C2, B_C3, 8_8_8_8));
+		format = _(A_ONE, R_C1, G_C2, B_C3, 8_8_8_8);
 		break;
 	case PICT_b8g8r8a8:
-		PUSH_DATA (push, _(A_C0, R_C1, G_C2, B_C3, 8_8_8_8));
+		format = _(A_C0, R_C1, G_C2, B_C3, 8_8_8_8);
 		break;
 	case PICT_a2b10g10r10:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 2_10_10_10));
+		format = _(R_C0, G_C1, B_C2, A_C3, 2_10_10_10);
 		break;
 	case PICT_x2b10g10r10:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 2_10_10_10));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 2_10_10_10);
 		break;
 	case PICT_x2r10g10b10:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 2_10_10_10));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 2_10_10_10);
 		break;
 	case PICT_a2r10g10b10:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 2_10_10_10));
+		format = _(B_C0, G_C1, R_C2, A_C3, 2_10_10_10);
 		break;
 	case PICT_x4r4g4b4:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_ONE, 4_4_4_4));
+		format = _(B_C0, G_C1, R_C2, A_ONE, 4_4_4_4);
 		break;
 	case PICT_x4b4g4r4:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_ONE, 4_4_4_4));
+		format = _(R_C0, G_C1, B_C2, A_ONE, 4_4_4_4);
 		break;
 	case PICT_a4r4g4b4:
-		PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 4_4_4_4));
+		format = _(B_C0, G_C1, R_C2, A_C3, 4_4_4_4);
 		break;
 	case PICT_a4b4g4r4:
-		PUSH_DATA (push, _(R_C0, G_C1, B_C2, A_C3, 4_4_4_4));
+		format = _(R_C0, G_C1, B_C2, A_C3, 4_4_4_4);
 		break;
 	default:
 		NOUVEAU_FALLBACK("invalid picture format, this SHOULD NOT HAPPEN. Expect trouble.\n");
 	}
 #undef _
 
+	PUSH_REFN (push, bo, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
+	PUSH_DATAu(push, pNv->scratch, TIC_OFFSET + (unit * 32), 8);
+	PUSH_DATA (push, format);
 	PUSH_DATA (push, bo->offset);
 	PUSH_DATA (push, (bo->offset >> 32) |
 			 (bo->config.nvc0.tile_mode << 18) |

commit bb57f9af9d179af0962456dca369953521ea8c2c
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu Jun 2 10:17:58 2016 +1000

    fix use of out-of-scope data
    
    Reported by Coverity.
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/src/nouveau_copy.c b/src/nouveau_copy.c
index d0b868d..e152a53 100644
--- a/src/nouveau_copy.c
+++ b/src/nouveau_copy.c
@@ -50,8 +50,7 @@ nouveau_copy_init(ScreenPtr pScreen)
 	}, *method = methods;
 	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
-	void *data;
-	int ret, size;
+	int ret;
 
 	if (pNv->AccelMethod == NONE) {
 		xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
@@ -65,30 +64,35 @@ nouveau_copy_init(ScreenPtr pScreen)
 		    pNv->dev->chipset == 0xaa ||
 		    pNv->dev->chipset == 0xac)
 			return FALSE;
-		data = &(struct nv04_fifo) {
-			.vram = NvDmaFB,
-			.gart = NvDmaTT,
-		};
-		size = sizeof(struct nv04_fifo);
+
+		ret = nouveau_object_new(&pNv->dev->object, 0,
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
+					 &(struct nv04_fifo) {
+						.vram = NvDmaFB,
+						.gart = NvDmaTT,
+					 }, sizeof(struct nv04_fifo),
+					 &pNv->ce_channel);
 		break;
 	case NV_FERMI:
-		data = &(struct nvc0_fifo) {};
-		size = sizeof(struct nvc0_fifo);
+		ret = nouveau_object_new(&pNv->dev->object, 0,
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
+					 &(struct nvc0_fifo) {
+					 }, sizeof(struct nvc0_fifo),
+					 &pNv->ce_channel);
 		break;
 	case NV_KEPLER:
-		data = &(struct nve0_fifo) {
-			.engine = NVE0_FIFO_ENGINE_CE0 |
-				  NVE0_FIFO_ENGINE_CE1,
-		};
-		size = sizeof(struct nvc0_fifo);
+		ret = nouveau_object_new(&pNv->dev->object, 0,
+					 NOUVEAU_FIFO_CHANNEL_CLASS,
+					 &(struct nve0_fifo) {
+						.engine = NVE0_FIFO_ENGINE_CE0 |
+							  NVE0_FIFO_ENGINE_CE1,
+					 }, sizeof(struct nve0_fifo),
+					 &pNv->ce_channel);
 		break;
 	default:
 		return FALSE;
 	}
 
-	ret = nouveau_object_new(&pNv->dev->object, 0,
-				 NOUVEAU_FIFO_CHANNEL_CLASS, data, size,
-				 &pNv->ce_channel);
 	if (ret) {
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			   "[COPY] error allocating channel: %d\n", ret);

commit b824d36c28124955eda4aced5e637aa75eea4d6c
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Wed Jan 13 11:55:06 2016 -0500

    HAS_DIRTYTRACKING_ROTATION also supports multiple CRTCs
    
    A port of commit ff9a6b6f from xf86-video-ati.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93670
    Reported-by: Thomas D. <thfrdue@gmx.de>
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 1dc48c5..b950f42 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -704,7 +704,7 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
 			if (max_height < iter->mode.VDisplay)
 				max_height = iter->mode.VDisplay;
 		}
-#ifndef HAS_DIRTYTRACKING2
+#if !defined(HAS_DIRTYTRACKING_ROTATION) && !defined(HAS_DIRTYTRACKING2)
 	if (iter != crtc) {
 		ErrorF("Cannot do multiple crtcs without X server dirty tracking 2 interface\n");
 		return FALSE;


Reply to: