}
 
        if (par->vmw_bo && detach_bo) {
+               struct vmw_private *vmw_priv = par->vmw_priv;
+
                if (par->bo_ptr) {
                        ttm_bo_kunmap(&par->map);
                        par->bo_ptr = NULL;
                }
                if (unref_bo)
                        vmw_dmabuf_unreference(&par->vmw_bo);
-               else
+               else if (vmw_priv->active_display_unit != vmw_du_legacy)
                        vmw_dmabuf_unpin(par->vmw_priv, par->vmw_bo, false);
        }
 
 
                /*
                 * Pin before mapping. Since we don't know in what placement
-                * to pin, call into KMS to do it for us.
+                * to pin, call into KMS to do it for us.  LDU doesn't require
+                * additional pinning because set_config() would've pinned
+                * it already
                 */
-               ret = vfb->pin(vfb);
-               if (ret) {
-                       DRM_ERROR("Could not pin the fbdev framebuffer.\n");
-                       goto out_unlock;
+               if (vmw_priv->active_display_unit != vmw_du_legacy) {
+                       ret = vfb->pin(vfb);
+                       if (ret) {
+                               DRM_ERROR("Could not pin the fbdev "
+                                         "framebuffer.\n");
+                               goto out_unlock;
+                       }
                }
 
                ret = ttm_bo_kmap(&par->vmw_bo->base, 0,
                                  par->vmw_bo->base.num_pages, &par->map);
                if (ret) {
-                       vfb->unpin(vfb);
+                       if (vmw_priv->active_display_unit != vmw_du_legacy)
+                               vfb->unpin(vfb);
+
                        DRM_ERROR("Could not map the fbdev framebuffer.\n");
                        goto out_unlock;
                }