[PATCH v3 9/9] modesetting: Blacklist UDL from PRIME sync

Alex Goins agoins at nvidia.com
Wed Feb 3 05:22:50 CET 2016


UDL (USB 2.0 DisplayLink DRM driver) has strange semantics when it comes to
vblank events and damage tracking when page flipping.

When doing a page flip, it will instantly raise a vblank event without
waiting for vblank. However, it has no support for DRM_IOCTL_WAIT_VBLANK.
It also seems to have some issues with damage tracking when page flipping.

It's possible to get something semi-working by hacking around these issues,
but even then there isn't much value-add vs single buffered PRIME, and it
reduces maintainability and adds additional risks to the modesetting driver
when running with more well-behaved DRM drivers.

Work needs to be done on UDL in order to properly support synchronized
PRIME. For now, just blacklist it, causing RandR to fall back to
unsynchronized PRIME.

v1: N/A
v2: N/A
v3: Initial commit

Signed-off-by: Alex Goins <agoins at nvidia.com>
---
 hw/xfree86/drivers/modesetting/drmmode_display.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
index d074682..0b0f01d 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -416,8 +416,14 @@ drmmode_EnableSharedPixmapFlipping(xf86CrtcPtr crtc, drmmode_ptr drmmode)
 {
     drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
 
+    drmVersionPtr version = drmGetVersion(drmmode->fd);
+
     drmmode_crtc->enable_flipping = TRUE;
 
+    /* UDL has several issues that prevent double buffering */
+    if (!strncmp("udl", version->name, version->name_len))
+        drmmode_crtc->enable_flipping = FALSE;
+
     return drmmode_crtc->enable_flipping;
 }
 
-- 
1.9.1



More information about the xorg-devel mailing list