Commit 5c6089a1 authored by Sinclair Yeh's avatar Sinclair Yeh
Browse files

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: default avatarSinclair Yeh <syeh@vmware.com>
Reviewed-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
parent 9aa8dcab
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -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
		 */
		if (vmw_priv->active_display_unit != vmw_du_legacy) {
			ret = vfb->pin(vfb);
			if (ret) {
			DRM_ERROR("Could not pin the fbdev framebuffer.\n");
				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) {
			if (vmw_priv->active_display_unit != vmw_du_legacy)
				vfb->unpin(vfb);

			DRM_ERROR("Could not map the fbdev framebuffer.\n");
			goto out_unlock;
		}