summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
diff options
context:
space:
mode:
authorSinclair Yeh <syeh@vmware.com>2017-03-23 14:41:21 -0700
committerSinclair Yeh <syeh@vmware.com>2017-03-31 15:21:15 -0700
commit5c6089a1dfa6e699a9c8ca95df02e8c39b4e8e15 (patch)
tree2f449acee7366c111dafa0474865330b17437f6d /drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
parent9aa8dcab7e44288c6fd620c5b831d2ca535866c2 (diff)
drm/vmwgfx: Skipping fbdev fb pinning for ldu
Pinning fbdev's FB at the start of VRAM prevents X from pinning its FB. Since for ldu, the fb would be pinned anyway during a mode set, just skip pinning it in fbdev. This is not the best solution, but since ldu is not used much anymore, it seems like a reasonable workaround. Signed-off-by: Sinclair Yeh <syeh@vmware.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_fb.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_fb.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
index 7d3d5e3bcd32..09e120d50e65 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
@@ -451,13 +451,15 @@ static int vmw_fb_kms_detach(struct vmw_fb_par *par,
}
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);
}
@@ -585,18 +587,25 @@ static int vmw_fb_set_par(struct fb_info *info)
/*
* 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;
}