Lines Matching full:drm

33 #include <drm/drm_aperture.h>
34 #include <drm/drm_crtc_helper.h>
35 #include <drm/drm_gem_ttm_helper.h>
36 #include <drm/drm_ioctl.h>
37 #include <drm/drm_vblank.h>
186 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
188 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
192 nouveau_cli_init(struct nouveau_drm *drm, const char *sname, in nouveau_cli_init() argument
218 u64 device = nouveau_name(drm->dev); in nouveau_cli_init()
222 cli->drm = drm; in nouveau_cli_init()
230 if (cli == &drm->master) { in nouveau_cli_init()
234 mutex_lock(&drm->master.lock); in nouveau_cli_init()
235 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
237 mutex_unlock(&drm->master.lock); in nouveau_cli_init()
295 nouveau_accel_ce_fini(struct nouveau_drm *drm) in nouveau_accel_ce_fini() argument
297 nouveau_channel_idle(drm->cechan); in nouveau_accel_ce_fini()
298 nvif_object_dtor(&drm->ttm.copy); in nouveau_accel_ce_fini()
299 nouveau_channel_del(&drm->cechan); in nouveau_accel_ce_fini()
303 nouveau_accel_ce_init(struct nouveau_drm *drm) in nouveau_accel_ce_init() argument
305 struct nvif_device *device = &drm->client.device; in nouveau_accel_ce_init()
312 ret = nouveau_channel_new(drm, device, in nouveau_accel_ce_init()
314 true, &drm->cechan); in nouveau_accel_ce_init()
324 ret = nouveau_channel_new(drm, device, NvDmaFB, NvDmaTT, false, in nouveau_accel_ce_init()
325 &drm->cechan); in nouveau_accel_ce_init()
329 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_ce_init()
333 nouveau_accel_gr_fini(struct nouveau_drm *drm) in nouveau_accel_gr_fini() argument
335 nouveau_channel_idle(drm->channel); in nouveau_accel_gr_fini()
336 nvif_object_dtor(&drm->ntfy); in nouveau_accel_gr_fini()
337 nvkm_gpuobj_del(&drm->notify); in nouveau_accel_gr_fini()
338 nouveau_channel_del(&drm->channel); in nouveau_accel_gr_fini()
342 nouveau_accel_gr_init(struct nouveau_drm *drm) in nouveau_accel_gr_init() argument
344 struct nvif_device *device = &drm->client.device; in nouveau_accel_gr_init()
360 ret = nouveau_channel_new(drm, device, arg0, arg1, false, in nouveau_accel_gr_init()
361 &drm->channel); in nouveau_accel_gr_init()
363 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); in nouveau_accel_gr_init()
364 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
372 if (!drm->channel->nvsw.client && device->info.family < NV_DEVICE_INFO_V0_TESLA) { in nouveau_accel_gr_init()
373 ret = nvif_object_ctor(&drm->channel->user, "drmNvsw", in nouveau_accel_gr_init()
374 NVDRM_NVSW, nouveau_abi16_swclass(drm), in nouveau_accel_gr_init()
375 NULL, 0, &drm->channel->nvsw); in nouveau_accel_gr_init()
377 struct nvif_push *push = drm->channel->chan.push; in nouveau_accel_gr_init()
380 PUSH_NVSQ(push, NV_SW, 0x0000, drm->channel->nvsw.handle); in nouveau_accel_gr_init()
384 NV_ERROR(drm, "failed to allocate sw class, %d\n", ret); in nouveau_accel_gr_init()
385 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
396 &drm->notify); in nouveau_accel_gr_init()
398 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_gr_init()
399 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
403 ret = nvif_object_ctor(&drm->channel->user, "drmM2mfNtfy", in nouveau_accel_gr_init()
408 .start = drm->notify->addr, in nouveau_accel_gr_init()
409 .limit = drm->notify->addr + 31 in nouveau_accel_gr_init()
411 &drm->ntfy); in nouveau_accel_gr_init()
413 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
420 nouveau_accel_fini(struct nouveau_drm *drm) in nouveau_accel_fini() argument
422 nouveau_accel_ce_fini(drm); in nouveau_accel_fini()
423 nouveau_accel_gr_fini(drm); in nouveau_accel_fini()
424 if (drm->fence) in nouveau_accel_fini()
425 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
429 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
431 struct nvif_device *device = &drm->client.device; in nouveau_accel_init()
439 ret = nouveau_channels_init(drm); in nouveau_accel_init()
453 ret = nv04_fence_create(drm); in nouveau_accel_init()
456 ret = nv10_fence_create(drm); in nouveau_accel_init()
460 ret = nv17_fence_create(drm); in nouveau_accel_init()
463 ret = nv50_fence_create(drm); in nouveau_accel_init()
466 ret = nv84_fence_create(drm); in nouveau_accel_init()
476 ret = nvc0_fence_create(drm); in nouveau_accel_init()
485 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
486 nouveau_accel_fini(drm); in nouveau_accel_init()
491 if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_VOLTA) { in nouveau_accel_init()
498 nouveau_accel_gr_init(drm); in nouveau_accel_init()
499 nouveau_accel_ce_init(drm); in nouveau_accel_init()
502 nouveau_bo_move_init(drm); in nouveau_accel_init()
508 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_errorf() local
515 NV_ERROR(drm, "%pV", &vaf); in nouveau_drm_errorf()
522 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_debugf() local
529 NV_DEBUG(drm, "%pV", &vaf); in nouveau_drm_debugf()
542 struct nouveau_drm *drm; in nouveau_drm_device_init() local
545 if (!(drm = kzalloc(sizeof(*drm), GFP_KERNEL))) in nouveau_drm_device_init()
547 dev->dev_private = drm; in nouveau_drm_device_init()
548 drm->dev = dev; in nouveau_drm_device_init()
550 nvif_parent_ctor(&nouveau_parent, &drm->parent); in nouveau_drm_device_init()
551 drm->master.base.object.parent = &drm->parent; in nouveau_drm_device_init()
553 ret = nouveau_cli_init(drm, "DRM-master", &drm->master); in nouveau_drm_device_init()
557 ret = nouveau_cli_init(drm, "DRM", &drm->client); in nouveau_drm_device_init()
561 nvxx_client(&drm->client.base)->debug = in nouveau_drm_device_init()
562 nvkm_dbgopt(nouveau_debug, "DRM"); in nouveau_drm_device_init()
564 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_device_init()
565 spin_lock_init(&drm->tile.lock); in nouveau_drm_device_init()
571 if (drm->client.device.info.chipset == 0xc1) in nouveau_drm_device_init()
572 nvif_mask(&drm->client.device.object, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_device_init()
574 nouveau_vga_init(drm); in nouveau_drm_device_init()
576 ret = nouveau_ttm_init(drm); in nouveau_drm_device_init()
584 nouveau_accel_init(drm); in nouveau_drm_device_init()
596 nouveau_debugfs_init(drm); in nouveau_drm_device_init()
598 nouveau_svm_init(drm); in nouveau_drm_device_init()
599 nouveau_dmem_init(drm); in nouveau_drm_device_init()
617 nouveau_accel_fini(drm); in nouveau_drm_device_init()
620 nouveau_ttm_fini(drm); in nouveau_drm_device_init()
622 nouveau_vga_fini(drm); in nouveau_drm_device_init()
623 nouveau_cli_fini(&drm->client); in nouveau_drm_device_init()
625 nouveau_cli_fini(&drm->master); in nouveau_drm_device_init()
627 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_init()
628 kfree(drm); in nouveau_drm_device_init()
635 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_fini() local
644 nouveau_dmem_fini(drm); in nouveau_drm_device_fini()
645 nouveau_svm_fini(drm); in nouveau_drm_device_fini()
647 nouveau_debugfs_fini(drm); in nouveau_drm_device_fini()
653 nouveau_accel_fini(drm); in nouveau_drm_device_fini()
656 nouveau_ttm_fini(drm); in nouveau_drm_device_fini()
657 nouveau_vga_fini(drm); in nouveau_drm_device_fini()
659 nouveau_cli_fini(&drm->client); in nouveau_drm_device_fini()
660 nouveau_cli_fini(&drm->master); in nouveau_drm_device_fini()
661 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_fini()
662 kfree(drm); in nouveau_drm_device_fini()
708 struct nouveau_drm *drm = nouveau_drm(dev); in quirk_broken_nv_runpm() local
716 drm->old_pm_cap = pdev->pm_cap; in quirk_broken_nv_runpm()
718 NV_INFO(drm, "Disabling PCI power management to avoid bug\n"); in quirk_broken_nv_runpm()
795 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
801 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
813 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_remove() local
816 if (drm->old_pm_cap) in nouveau_drm_remove()
817 pdev->pm_cap = drm->old_pm_cap; in nouveau_drm_remove()
825 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
829 nouveau_svm_suspend(drm); in nouveau_do_suspend()
830 nouveau_dmem_suspend(drm); in nouveau_do_suspend()
834 NV_DEBUG(drm, "suspending console...\n"); in nouveau_do_suspend()
836 NV_DEBUG(drm, "suspending display...\n"); in nouveau_do_suspend()
842 NV_DEBUG(drm, "evicting buffers...\n"); in nouveau_do_suspend()
844 man = ttm_manager_type(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
845 ttm_resource_manager_evict_all(&drm->ttm.bdev, man); in nouveau_do_suspend()
847 NV_DEBUG(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
848 if (drm->cechan) { in nouveau_do_suspend()
849 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
854 if (drm->channel) { in nouveau_do_suspend()
855 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
860 NV_DEBUG(drm, "suspending fence...\n"); in nouveau_do_suspend()
861 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
862 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
868 NV_DEBUG(drm, "suspending object tree...\n"); in nouveau_do_suspend()
869 ret = nvif_client_suspend(&drm->master.base); in nouveau_do_suspend()
876 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
877 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
881 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_suspend()
891 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
893 NV_DEBUG(drm, "resuming object tree...\n"); in nouveau_do_resume()
894 ret = nvif_client_resume(&drm->master.base); in nouveau_do_resume()
896 NV_ERROR(drm, "Client resume failed with error: %d\n", ret); in nouveau_do_resume()
900 NV_DEBUG(drm, "resuming fence...\n"); in nouveau_do_resume()
901 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
902 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
907 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_resume()
909 NV_DEBUG(drm, "resuming console...\n"); in nouveau_do_resume()
914 nouveau_dmem_resume(drm); in nouveau_do_resume()
915 nouveau_svm_resume(drm); in nouveau_do_resume()
1018 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_resume() local
1036 NV_ERROR(drm, "resume failed with: %d\n", ret); in nouveau_pmops_runtime_resume()
1067 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
1087 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1093 mutex_lock(&drm->client.mutex); in nouveau_drm_open()
1094 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1095 mutex_unlock(&drm->client.mutex); in nouveau_drm_open()
1112 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_postclose() local
1121 mutex_lock(&drm->client.mutex); in nouveau_drm_postclose()
1123 mutex_unlock(&drm->client.mutex); in nouveau_drm_postclose()
1290 struct drm_device *drm; in nouveau_platform_device_create() local
1298 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create()
1299 if (IS_ERR(drm)) { in nouveau_platform_device_create()
1300 err = PTR_ERR(drm); in nouveau_platform_device_create()
1304 err = nouveau_drm_device_init(drm); in nouveau_platform_device_create()
1308 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create()
1310 return drm; in nouveau_platform_device_create()
1313 drm_dev_put(drm); in nouveau_platform_device_create()