diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_drv.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 17 |
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 | ||
337 | out_no_query_bo: | 345 | out_no_query_bo: |
346 | if (dev_priv->has_mob) | ||
347 | vmw_otables_takedown(dev_priv); | ||
348 | out_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 | ||