aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_drv.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 6e8cb1481376..24df6d6e0c08 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -327,6 +327,14 @@ static int vmw_request_device(struct vmw_private *dev_priv)
327 return ret; 327 return ret;
328 } 328 }
329 vmw_fence_fifo_up(dev_priv->fman); 329 vmw_fence_fifo_up(dev_priv->fman);
330 if (dev_priv->has_mob) {
331 ret = vmw_otables_setup(dev_priv);
332 if (unlikely(ret != 0)) {
333 DRM_ERROR("Unable to initialize "
334 "guest Memory OBjects.\n");
335 goto out_no_mob;
336 }
337 }
330 ret = vmw_dummy_query_bo_create(dev_priv); 338 ret = vmw_dummy_query_bo_create(dev_priv);
331 if (unlikely(ret != 0)) 339 if (unlikely(ret != 0))
332 goto out_no_query_bo; 340 goto out_no_query_bo;
@@ -335,6 +343,9 @@ static int vmw_request_device(struct vmw_private *dev_priv)
335 return 0; 343 return 0;
336 344
337out_no_query_bo: 345out_no_query_bo:
346 if (dev_priv->has_mob)
347 vmw_otables_takedown(dev_priv);
348out_no_mob:
338 vmw_fence_fifo_down(dev_priv->fman); 349 vmw_fence_fifo_down(dev_priv->fman);
339 vmw_fifo_release(dev_priv, &dev_priv->fifo); 350 vmw_fifo_release(dev_priv, &dev_priv->fifo);
340 return ret; 351 return ret;
@@ -350,10 +361,13 @@ static void vmw_release_device(struct vmw_private *dev_priv)
350 BUG_ON(dev_priv->pinned_bo != NULL); 361 BUG_ON(dev_priv->pinned_bo != NULL);
351 362
352 ttm_bo_unref(&dev_priv->dummy_query_bo); 363 ttm_bo_unref(&dev_priv->dummy_query_bo);
364 if (dev_priv->has_mob)
365 vmw_otables_takedown(dev_priv);
353 vmw_fence_fifo_down(dev_priv->fman); 366 vmw_fence_fifo_down(dev_priv->fman);
354 vmw_fifo_release(dev_priv, &dev_priv->fifo); 367 vmw_fifo_release(dev_priv, &dev_priv->fifo);
355} 368}
356 369
370
357/** 371/**
358 * Increase the 3d resource refcount. 372 * Increase the 3d resource refcount.
359 * If the count was prevously zero, initialize the fifo, switching to svga 373 * If the count was prevously zero, initialize the fifo, switching to svga
@@ -690,6 +704,9 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
690 dev_priv->has_gmr = false; 704 dev_priv->has_gmr = false;
691 } 705 }
692 706
707 if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS)
708 dev_priv->has_mob = true;
709
693 dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start, 710 dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start,
694 dev_priv->mmio_size); 711 dev_priv->mmio_size);
695 712