Lines Matching refs:dev_priv

297 static int vmw_dummy_query_bo_create(struct vmw_private *dev_priv)  in vmw_dummy_query_bo_create()  argument
310 ret = ttm_bo_create(&dev_priv->bdev, in vmw_dummy_query_bo_create()
338 dev_priv->dummy_query_bo = bo; in vmw_dummy_query_bo_create()
343 static int vmw_request_device(struct vmw_private *dev_priv) in vmw_request_device() argument
347 ret = vmw_fifo_init(dev_priv, &dev_priv->fifo); in vmw_request_device()
352 vmw_fence_fifo_up(dev_priv->fman); in vmw_request_device()
353 if (dev_priv->has_mob) { in vmw_request_device()
354 ret = vmw_otables_setup(dev_priv); in vmw_request_device()
361 ret = vmw_dummy_query_bo_create(dev_priv); in vmw_request_device()
368 if (dev_priv->has_mob) in vmw_request_device()
369 vmw_otables_takedown(dev_priv); in vmw_request_device()
371 vmw_fence_fifo_down(dev_priv->fman); in vmw_request_device()
372 vmw_fifo_release(dev_priv, &dev_priv->fifo); in vmw_request_device()
376 static void vmw_release_device(struct vmw_private *dev_priv) in vmw_release_device() argument
383 BUG_ON(dev_priv->pinned_bo != NULL); in vmw_release_device()
385 ttm_bo_unref(&dev_priv->dummy_query_bo); in vmw_release_device()
386 if (dev_priv->has_mob) in vmw_release_device()
387 vmw_otables_takedown(dev_priv); in vmw_release_device()
388 vmw_fence_fifo_down(dev_priv->fman); in vmw_release_device()
389 vmw_fifo_release(dev_priv, &dev_priv->fifo); in vmw_release_device()
399 int vmw_3d_resource_inc(struct vmw_private *dev_priv, in vmw_3d_resource_inc() argument
404 mutex_lock(&dev_priv->release_mutex); in vmw_3d_resource_inc()
405 if (unlikely(dev_priv->num_3d_resources++ == 0)) { in vmw_3d_resource_inc()
406 ret = vmw_request_device(dev_priv); in vmw_3d_resource_inc()
408 --dev_priv->num_3d_resources; in vmw_3d_resource_inc()
410 vmw_write(dev_priv, SVGA_REG_ENABLE, in vmw_3d_resource_inc()
411 vmw_read(dev_priv, SVGA_REG_ENABLE) & in vmw_3d_resource_inc()
415 mutex_unlock(&dev_priv->release_mutex); in vmw_3d_resource_inc()
427 void vmw_3d_resource_dec(struct vmw_private *dev_priv, in vmw_3d_resource_dec() argument
432 mutex_lock(&dev_priv->release_mutex); in vmw_3d_resource_dec()
433 if (unlikely(--dev_priv->num_3d_resources == 0)) in vmw_3d_resource_dec()
434 vmw_release_device(dev_priv); in vmw_3d_resource_dec()
436 vmw_write(dev_priv, SVGA_REG_ENABLE, in vmw_3d_resource_dec()
437 vmw_read(dev_priv, SVGA_REG_ENABLE) | in vmw_3d_resource_dec()
440 n3d = (int32_t) dev_priv->num_3d_resources; in vmw_3d_resource_dec()
441 mutex_unlock(&dev_priv->release_mutex); in vmw_3d_resource_dec()
455 static void vmw_get_initial_size(struct vmw_private *dev_priv) in vmw_get_initial_size() argument
460 width = vmw_read(dev_priv, SVGA_REG_WIDTH); in vmw_get_initial_size()
461 height = vmw_read(dev_priv, SVGA_REG_HEIGHT); in vmw_get_initial_size()
466 if (width > dev_priv->fb_max_width || in vmw_get_initial_size()
467 height > dev_priv->fb_max_height) { in vmw_get_initial_size()
477 dev_priv->initial_width = width; in vmw_get_initial_size()
478 dev_priv->initial_height = height; in vmw_get_initial_size()
494 static int vmw_dma_select_mode(struct vmw_private *dev_priv) in vmw_dma_select_mode() argument
502 const struct dma_map_ops *dma_ops = get_dma_ops(dev_priv->dev->dev); in vmw_dma_select_mode()
506 dev_priv->map_mode = vmw_dma_map_populate; in vmw_dma_select_mode()
512 dev_priv->map_mode = vmw_dma_phys; in vmw_dma_select_mode()
513 DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]); in vmw_dma_select_mode()
517 dev_priv->map_mode = vmw_dma_map_populate; in vmw_dma_select_mode()
520 dev_priv->map_mode = vmw_dma_alloc_coherent; in vmw_dma_select_mode()
523 dev_priv->map_mode = vmw_dma_map_populate; in vmw_dma_select_mode()
529 if (dev_priv->map_mode == vmw_dma_map_populate && in vmw_dma_select_mode()
531 dev_priv->map_mode = vmw_dma_map_bind; in vmw_dma_select_mode()
534 dev_priv->map_mode = vmw_dma_alloc_coherent; in vmw_dma_select_mode()
540 if (dev_priv->map_mode == vmw_dma_alloc_coherent) in vmw_dma_select_mode()
545 dev_priv->map_mode = vmw_dma_map_populate; in vmw_dma_select_mode()
548 DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]); in vmw_dma_select_mode()
562 static int vmw_dma_masks(struct vmw_private *dev_priv) in vmw_dma_masks() argument
564 struct drm_device *dev = dev_priv->dev; in vmw_dma_masks()
574 static int vmw_dma_masks(struct vmw_private *dev_priv) in vmw_dma_masks() argument
582 struct vmw_private *dev_priv; in vmw_driver_load() local
588 dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); in vmw_driver_load()
589 if (unlikely(dev_priv == NULL)) { in vmw_driver_load()
596 dev_priv->dev = dev; in vmw_driver_load()
597 dev_priv->vmw_chipset = chipset; in vmw_driver_load()
598 dev_priv->last_read_seqno = (uint32_t) -100; in vmw_driver_load()
599 mutex_init(&dev_priv->cmdbuf_mutex); in vmw_driver_load()
600 mutex_init(&dev_priv->release_mutex); in vmw_driver_load()
601 mutex_init(&dev_priv->binding_mutex); in vmw_driver_load()
602 rwlock_init(&dev_priv->resource_lock); in vmw_driver_load()
603 ttm_lock_init(&dev_priv->reservation_sem); in vmw_driver_load()
604 spin_lock_init(&dev_priv->hw_lock); in vmw_driver_load()
605 spin_lock_init(&dev_priv->waiter_lock); in vmw_driver_load()
606 spin_lock_init(&dev_priv->cap_lock); in vmw_driver_load()
609 idr_init(&dev_priv->res_idr[i]); in vmw_driver_load()
610 INIT_LIST_HEAD(&dev_priv->res_lru[i]); in vmw_driver_load()
613 mutex_init(&dev_priv->init_mutex); in vmw_driver_load()
614 init_waitqueue_head(&dev_priv->fence_queue); in vmw_driver_load()
615 init_waitqueue_head(&dev_priv->fifo_queue); in vmw_driver_load()
616 dev_priv->fence_queue_waiters = 0; in vmw_driver_load()
617 atomic_set(&dev_priv->fifo_queue_waiters, 0); in vmw_driver_load()
619 dev_priv->used_memory_size = 0; in vmw_driver_load()
621 dev_priv->io_start = pci_resource_start(dev->pdev, 0); in vmw_driver_load()
622 dev_priv->vram_start = pci_resource_start(dev->pdev, 1); in vmw_driver_load()
623 dev_priv->mmio_start = pci_resource_start(dev->pdev, 2); in vmw_driver_load()
625 dev_priv->enable_fb = enable_fbdev; in vmw_driver_load()
627 vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); in vmw_driver_load()
628 svga_id = vmw_read(dev_priv, SVGA_REG_ID); in vmw_driver_load()
635 dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES); in vmw_driver_load()
636 ret = vmw_dma_select_mode(dev_priv); in vmw_driver_load()
642 dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE); in vmw_driver_load()
643 dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE); in vmw_driver_load()
644 dev_priv->fb_max_width = vmw_read(dev_priv, SVGA_REG_MAX_WIDTH); in vmw_driver_load()
645 dev_priv->fb_max_height = vmw_read(dev_priv, SVGA_REG_MAX_HEIGHT); in vmw_driver_load()
647 vmw_get_initial_size(dev_priv); in vmw_driver_load()
649 if (dev_priv->capabilities & SVGA_CAP_GMR2) { in vmw_driver_load()
650 dev_priv->max_gmr_ids = in vmw_driver_load()
651 vmw_read(dev_priv, SVGA_REG_GMR_MAX_IDS); in vmw_driver_load()
652 dev_priv->max_gmr_pages = in vmw_driver_load()
653 vmw_read(dev_priv, SVGA_REG_GMRS_MAX_PAGES); in vmw_driver_load()
654 dev_priv->memory_size = in vmw_driver_load()
655 vmw_read(dev_priv, SVGA_REG_MEMORY_SIZE); in vmw_driver_load()
656 dev_priv->memory_size -= dev_priv->vram_size; in vmw_driver_load()
662 dev_priv->memory_size = 512*1024*1024; in vmw_driver_load()
664 dev_priv->max_mob_pages = 0; in vmw_driver_load()
665 dev_priv->max_mob_size = 0; in vmw_driver_load()
666 if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) { in vmw_driver_load()
668 vmw_read(dev_priv, in vmw_driver_load()
671 dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE; in vmw_driver_load()
672 dev_priv->prim_bb_mem = in vmw_driver_load()
673 vmw_read(dev_priv, in vmw_driver_load()
675 dev_priv->max_mob_size = in vmw_driver_load()
676 vmw_read(dev_priv, SVGA_REG_MOB_MAX_SIZE); in vmw_driver_load()
678 dev_priv->prim_bb_mem = dev_priv->vram_size; in vmw_driver_load()
680 ret = vmw_dma_masks(dev_priv); in vmw_driver_load()
688 if (dev_priv->prim_bb_mem > dev_priv->vram_size) in vmw_driver_load()
689 dev_priv->prim_bb_mem = dev_priv->vram_size; in vmw_driver_load()
691 vmw_print_capabilities(dev_priv->capabilities); in vmw_driver_load()
693 if (dev_priv->capabilities & SVGA_CAP_GMR2) { in vmw_driver_load()
695 (unsigned)dev_priv->max_gmr_ids); in vmw_driver_load()
697 (unsigned)dev_priv->max_gmr_pages); in vmw_driver_load()
699 (unsigned)dev_priv->memory_size / 1024); in vmw_driver_load()
702 dev_priv->prim_bb_mem / 1024); in vmw_driver_load()
704 dev_priv->vram_start, dev_priv->vram_size / 1024); in vmw_driver_load()
706 dev_priv->mmio_start, dev_priv->mmio_size / 1024); in vmw_driver_load()
708 ret = vmw_ttm_global_init(dev_priv); in vmw_driver_load()
713 vmw_master_init(&dev_priv->fbdev_master); in vmw_driver_load()
714 ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM); in vmw_driver_load()
715 dev_priv->active_master = &dev_priv->fbdev_master; in vmw_driver_load()
718 ret = ttm_bo_device_init(&dev_priv->bdev, in vmw_driver_load()
719 dev_priv->bo_global_ref.ref.object, in vmw_driver_load()
729 dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start, in vmw_driver_load()
730 dev_priv->mmio_size); in vmw_driver_load()
732 dev_priv->mmio_virt = ioremap_wc(dev_priv->mmio_start, in vmw_driver_load()
733 dev_priv->mmio_size); in vmw_driver_load()
735 if (unlikely(dev_priv->mmio_virt == NULL)) { in vmw_driver_load()
742 if (!(dev_priv->capabilities & SVGA_CAP_DISPLAY_TOPOLOGY) && in vmw_driver_load()
743 !(dev_priv->capabilities & SVGA_CAP_PITCHLOCK) && in vmw_driver_load()
744 !vmw_fifo_have_pitchlock(dev_priv)) { in vmw_driver_load()
750 dev_priv->tdev = ttm_object_device_init in vmw_driver_load()
751 (dev_priv->mem_global_ref.object, 12, &vmw_prime_dmabuf_ops); in vmw_driver_load()
753 if (unlikely(dev_priv->tdev == NULL)) { in vmw_driver_load()
759 dev->dev_private = dev_priv; in vmw_driver_load()
762 dev_priv->stealth = (ret != 0); in vmw_driver_load()
763 if (dev_priv->stealth) { in vmw_driver_load()
777 if (dev_priv->capabilities & SVGA_CAP_IRQMASK) { in vmw_driver_load()
785 dev_priv->fman = vmw_fence_manager_init(dev_priv); in vmw_driver_load()
786 if (unlikely(dev_priv->fman == NULL)) { in vmw_driver_load()
792 ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM, in vmw_driver_load()
793 (dev_priv->vram_size >> PAGE_SHIFT)); in vmw_driver_load()
799 dev_priv->has_gmr = true; in vmw_driver_load()
800 if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) || in vmw_driver_load()
801 refuse_dma || ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR, in vmw_driver_load()
805 dev_priv->has_gmr = false; in vmw_driver_load()
808 if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS) { in vmw_driver_load()
809 dev_priv->has_mob = true; in vmw_driver_load()
810 if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_MOB, in vmw_driver_load()
814 dev_priv->has_mob = false; in vmw_driver_load()
818 vmw_kms_save_vga(dev_priv); in vmw_driver_load()
821 ret = vmw_kms_init(dev_priv); in vmw_driver_load()
824 vmw_overlay_init(dev_priv); in vmw_driver_load()
826 if (dev_priv->enable_fb) { in vmw_driver_load()
827 ret = vmw_3d_resource_inc(dev_priv, true); in vmw_driver_load()
830 vmw_fb_init(dev_priv); in vmw_driver_load()
833 dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier; in vmw_driver_load()
834 register_pm_notifier(&dev_priv->pm_nb); in vmw_driver_load()
839 vmw_overlay_close(dev_priv); in vmw_driver_load()
840 vmw_kms_close(dev_priv); in vmw_driver_load()
842 vmw_kms_restore_vga(dev_priv); in vmw_driver_load()
843 if (dev_priv->has_mob) in vmw_driver_load()
844 (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); in vmw_driver_load()
845 if (dev_priv->has_gmr) in vmw_driver_load()
846 (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); in vmw_driver_load()
847 (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); in vmw_driver_load()
849 vmw_fence_manager_takedown(dev_priv->fman); in vmw_driver_load()
851 if (dev_priv->capabilities & SVGA_CAP_IRQMASK) in vmw_driver_load()
852 drm_irq_uninstall(dev_priv->dev); in vmw_driver_load()
854 if (dev_priv->stealth) in vmw_driver_load()
859 ttm_object_device_release(&dev_priv->tdev); in vmw_driver_load()
861 iounmap(dev_priv->mmio_virt); in vmw_driver_load()
863 arch_phys_wc_del(dev_priv->mmio_mtrr); in vmw_driver_load()
864 (void)ttm_bo_device_release(&dev_priv->bdev); in vmw_driver_load()
866 vmw_ttm_global_release(dev_priv); in vmw_driver_load()
869 idr_destroy(&dev_priv->res_idr[i]); in vmw_driver_load()
871 kfree(dev_priv); in vmw_driver_load()
877 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_driver_unload() local
880 unregister_pm_notifier(&dev_priv->pm_nb); in vmw_driver_unload()
882 if (dev_priv->ctx.res_ht_initialized) in vmw_driver_unload()
883 drm_ht_remove(&dev_priv->ctx.res_ht); in vmw_driver_unload()
884 vfree(dev_priv->ctx.cmd_bounce); in vmw_driver_unload()
885 if (dev_priv->enable_fb) { in vmw_driver_unload()
886 vmw_fb_close(dev_priv); in vmw_driver_unload()
887 vmw_kms_restore_vga(dev_priv); in vmw_driver_unload()
888 vmw_3d_resource_dec(dev_priv, false); in vmw_driver_unload()
890 vmw_kms_close(dev_priv); in vmw_driver_unload()
891 vmw_overlay_close(dev_priv); in vmw_driver_unload()
893 if (dev_priv->has_mob) in vmw_driver_unload()
894 (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); in vmw_driver_unload()
895 if (dev_priv->has_gmr) in vmw_driver_unload()
896 (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); in vmw_driver_unload()
897 (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); in vmw_driver_unload()
899 vmw_fence_manager_takedown(dev_priv->fman); in vmw_driver_unload()
900 if (dev_priv->capabilities & SVGA_CAP_IRQMASK) in vmw_driver_unload()
901 drm_irq_uninstall(dev_priv->dev); in vmw_driver_unload()
902 if (dev_priv->stealth) in vmw_driver_unload()
907 ttm_object_device_release(&dev_priv->tdev); in vmw_driver_unload()
908 iounmap(dev_priv->mmio_virt); in vmw_driver_unload()
909 arch_phys_wc_del(dev_priv->mmio_mtrr); in vmw_driver_unload()
910 (void)ttm_bo_device_release(&dev_priv->bdev); in vmw_driver_unload()
911 vmw_ttm_global_release(dev_priv); in vmw_driver_unload()
914 idr_destroy(&dev_priv->res_idr[i]); in vmw_driver_unload()
916 kfree(dev_priv); in vmw_driver_unload()
925 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_preclose() local
927 vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events); in vmw_preclose()
952 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_driver_open() local
961 vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev, 10); in vmw_driver_open()
1146 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_master_set() local
1148 struct vmw_master *active = dev_priv->active_master; in vmw_master_set()
1152 if (!dev_priv->enable_fb) { in vmw_master_set()
1153 ret = vmw_3d_resource_inc(dev_priv, true); in vmw_master_set()
1156 vmw_kms_save_vga(dev_priv); in vmw_master_set()
1157 vmw_write(dev_priv, SVGA_REG_TRACES, 0); in vmw_master_set()
1161 BUG_ON(active != &dev_priv->fbdev_master); in vmw_master_set()
1167 ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM); in vmw_master_set()
1173 dev_priv->active_master = NULL; in vmw_master_set()
1183 dev_priv->active_master = vmaster; in vmw_master_set()
1188 if (!dev_priv->enable_fb) { in vmw_master_set()
1189 vmw_kms_restore_vga(dev_priv); in vmw_master_set()
1190 vmw_3d_resource_dec(dev_priv, true); in vmw_master_set()
1191 vmw_write(dev_priv, SVGA_REG_TRACES, 1); in vmw_master_set()
1200 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_master_drop() local
1218 vmw_execbuf_release_pinned_bo(dev_priv); in vmw_master_drop()
1220 if (!dev_priv->enable_fb) { in vmw_master_drop()
1221 ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM); in vmw_master_drop()
1224 vmw_kms_restore_vga(dev_priv); in vmw_master_drop()
1225 vmw_3d_resource_dec(dev_priv, true); in vmw_master_drop()
1226 vmw_write(dev_priv, SVGA_REG_TRACES, 1); in vmw_master_drop()
1229 dev_priv->active_master = &dev_priv->fbdev_master; in vmw_master_drop()
1230 ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM); in vmw_master_drop()
1231 ttm_vt_unlock(&dev_priv->fbdev_master.lock); in vmw_master_drop()
1233 if (dev_priv->enable_fb) in vmw_master_drop()
1234 vmw_fb_on(dev_priv); in vmw_master_drop()
1249 struct vmw_private *dev_priv = in vmwgfx_pm_notifier() local
1255 ttm_suspend_lock(&dev_priv->reservation_sem); in vmwgfx_pm_notifier()
1261 vmw_execbuf_release_pinned_bo(dev_priv); in vmwgfx_pm_notifier()
1262 vmw_resource_evict_all(dev_priv); in vmwgfx_pm_notifier()
1263 ttm_bo_swapout_all(&dev_priv->bdev); in vmwgfx_pm_notifier()
1269 ttm_suspend_unlock(&dev_priv->reservation_sem); in vmwgfx_pm_notifier()
1287 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_pci_suspend() local
1289 if (dev_priv->num_3d_resources != 0) { in vmw_pci_suspend()
1329 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_pm_prepare() local
1335 dev_priv->suspended = true; in vmw_pm_prepare()
1336 if (dev_priv->enable_fb) in vmw_pm_prepare()
1337 vmw_3d_resource_dec(dev_priv, true); in vmw_pm_prepare()
1339 if (dev_priv->num_3d_resources != 0) { in vmw_pm_prepare()
1344 if (dev_priv->enable_fb) in vmw_pm_prepare()
1345 vmw_3d_resource_inc(dev_priv, true); in vmw_pm_prepare()
1346 dev_priv->suspended = false; in vmw_pm_prepare()
1357 struct vmw_private *dev_priv = vmw_priv(dev); in vmw_pm_complete() local
1359 vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); in vmw_pm_complete()
1360 (void) vmw_read(dev_priv, SVGA_REG_ID); in vmw_pm_complete()
1366 if (dev_priv->enable_fb) in vmw_pm_complete()
1367 vmw_3d_resource_inc(dev_priv, false); in vmw_pm_complete()
1369 dev_priv->suspended = false; in vmw_pm_complete()