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>
This commit is contained in:
Sinclair Yeh 2017-03-23 14:41:21 -07:00
Родитель 9aa8dcab7e
Коммит 5c6089a1df
1 изменённых файлов: 16 добавлений и 7 удалений

Просмотреть файл

@ -451,13 +451,15 @@ static int vmw_fb_kms_detach(struct vmw_fb_par *par,
} }
if (par->vmw_bo && detach_bo) { if (par->vmw_bo && detach_bo) {
struct vmw_private *vmw_priv = par->vmw_priv;
if (par->bo_ptr) { if (par->bo_ptr) {
ttm_bo_kunmap(&par->map); ttm_bo_kunmap(&par->map);
par->bo_ptr = NULL; par->bo_ptr = NULL;
} }
if (unref_bo) if (unref_bo)
vmw_dmabuf_unreference(&par->vmw_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); 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 * 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 (vmw_priv->active_display_unit != vmw_du_legacy) {
if (ret) { ret = vfb->pin(vfb);
DRM_ERROR("Could not pin the fbdev framebuffer.\n"); if (ret) {
goto out_unlock; DRM_ERROR("Could not pin the fbdev "
"framebuffer.\n");
goto out_unlock;
}
} }
ret = ttm_bo_kmap(&par->vmw_bo->base, 0, ret = ttm_bo_kmap(&par->vmw_bo->base, 0,
par->vmw_bo->base.num_pages, &par->map); par->vmw_bo->base.num_pages, &par->map);
if (ret) { 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"); DRM_ERROR("Could not map the fbdev framebuffer.\n");
goto out_unlock; goto out_unlock;
} }