diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c index ab3b0283d..2d66a4b8f 100644 --- a/hw/xfree86/drivers/modesetting/driver.c +++ b/hw/xfree86/drivers/modesetting/driver.c @@ -973,6 +973,7 @@ msEnableSharedPixmapFlipping(RRCrtcPtr crtc, PixmapPtr front, PixmapPtr back) ScreenPtr screen = crtc->pScreen; ScrnInfoPtr scrn = xf86ScreenToScrn(screen); modesettingPtr ms = modesettingPTR(scrn); + EntityInfoPtr pEnt = ms->pEnt; xf86CrtcPtr xf86Crtc = crtc->devPrivate; if (!xf86Crtc) @@ -986,6 +987,19 @@ msEnableSharedPixmapFlipping(RRCrtcPtr crtc, PixmapPtr front, PixmapPtr back) if (ms->drmmode.reverse_prime_offload_mode) return FALSE; +#if XSERVER_PLATFORM_BUS + if (pEnt->location.type == BUS_PLATFORM) { + char *syspath = + xf86_platform_device_odev_attributes(pEnt->location.id.plat)-> + syspath; + + /* Not supported for devices using USB transport due to misbehaved + * vblank events */ + if (syspath && strstr(syspath, "usb")) + return FALSE; + } +#endif + return drmmode_EnableSharedPixmapFlipping(xf86Crtc, &ms->drmmode, front, back); }