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 <svenj...@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 <svenj...@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 <svenj...@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 <svenj...@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 <imir...@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 <imir...@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 <kei...@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 <kei...@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 <a...@redhat.com> Date: Tue Jul 19 10:03:56 2016 -0400 Adapt Block/WakeupHandler signature for ABI 23 Signed-off-by: Adam Jackson <a...@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 <hdego...@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 <hdego...@redhat.com> Signed-off-by: Ben Skeggs <bske...@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 <bske...@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 <bske...@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 <bske...@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 <bske...@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 <imir...@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. <thfr...@gmx.de> Signed-off-by: Ilia Mirkin <imir...@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;