Lines Matching full:drm
33 #include <drm/drm_aperture.h>
34 #include <drm/drm_crtc_helper.h>
35 #include <drm/drm_drv.h>
36 #include <drm/drm_gem_ttm_helper.h>
37 #include <drm/drm_ioctl.h>
38 #include <drm/drm_vblank.h>
199 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
201 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
205 nouveau_cli_init(struct nouveau_drm *drm, const char *sname, in nouveau_cli_init() argument
231 u64 device = nouveau_name(drm->dev); in nouveau_cli_init()
235 cli->drm = drm; in nouveau_cli_init()
243 if (cli == &drm->master) { in nouveau_cli_init()
247 mutex_lock(&drm->master.lock); in nouveau_cli_init()
248 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
250 mutex_unlock(&drm->master.lock); in nouveau_cli_init()
308 nouveau_accel_ce_fini(struct nouveau_drm *drm) in nouveau_accel_ce_fini() argument
310 nouveau_channel_idle(drm->cechan); in nouveau_accel_ce_fini()
311 nvif_object_dtor(&drm->ttm.copy); in nouveau_accel_ce_fini()
312 nouveau_channel_del(&drm->cechan); in nouveau_accel_ce_fini()
316 nouveau_accel_ce_init(struct nouveau_drm *drm) in nouveau_accel_ce_init() argument
318 struct nvif_device *device = &drm->client.device; in nouveau_accel_ce_init()
325 ret = nouveau_channel_new(drm, device, in nouveau_accel_ce_init()
327 true, &drm->cechan); in nouveau_accel_ce_init()
337 ret = nouveau_channel_new(drm, device, NvDmaFB, NvDmaTT, false, in nouveau_accel_ce_init()
338 &drm->cechan); in nouveau_accel_ce_init()
342 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_ce_init()
346 nouveau_accel_gr_fini(struct nouveau_drm *drm) in nouveau_accel_gr_fini() argument
348 nouveau_channel_idle(drm->channel); in nouveau_accel_gr_fini()
349 nvif_object_dtor(&drm->ntfy); in nouveau_accel_gr_fini()
350 nvkm_gpuobj_del(&drm->notify); in nouveau_accel_gr_fini()
351 nouveau_channel_del(&drm->channel); in nouveau_accel_gr_fini()
355 nouveau_accel_gr_init(struct nouveau_drm *drm) in nouveau_accel_gr_init() argument
357 struct nvif_device *device = &drm->client.device; in nouveau_accel_gr_init()
373 ret = nouveau_channel_new(drm, device, arg0, arg1, false, in nouveau_accel_gr_init()
374 &drm->channel); in nouveau_accel_gr_init()
376 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); in nouveau_accel_gr_init()
377 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
385 if (!drm->channel->nvsw.client && device->info.family < NV_DEVICE_INFO_V0_TESLA) { in nouveau_accel_gr_init()
386 ret = nvif_object_ctor(&drm->channel->user, "drmNvsw", in nouveau_accel_gr_init()
387 NVDRM_NVSW, nouveau_abi16_swclass(drm), in nouveau_accel_gr_init()
388 NULL, 0, &drm->channel->nvsw); in nouveau_accel_gr_init()
390 struct nvif_push *push = drm->channel->chan.push; in nouveau_accel_gr_init()
393 PUSH_NVSQ(push, NV_SW, 0x0000, drm->channel->nvsw.handle); in nouveau_accel_gr_init()
397 NV_ERROR(drm, "failed to allocate sw class, %d\n", ret); in nouveau_accel_gr_init()
398 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
409 &drm->notify); in nouveau_accel_gr_init()
411 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_gr_init()
412 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
416 ret = nvif_object_ctor(&drm->channel->user, "drmM2mfNtfy", in nouveau_accel_gr_init()
421 .start = drm->notify->addr, in nouveau_accel_gr_init()
422 .limit = drm->notify->addr + 31 in nouveau_accel_gr_init()
424 &drm->ntfy); in nouveau_accel_gr_init()
426 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
433 nouveau_accel_fini(struct nouveau_drm *drm) in nouveau_accel_fini() argument
435 nouveau_accel_ce_fini(drm); in nouveau_accel_fini()
436 nouveau_accel_gr_fini(drm); in nouveau_accel_fini()
437 if (drm->fence) in nouveau_accel_fini()
438 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
442 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
444 struct nvif_device *device = &drm->client.device; in nouveau_accel_init()
452 ret = nouveau_channels_init(drm); in nouveau_accel_init()
466 ret = nv04_fence_create(drm); in nouveau_accel_init()
469 ret = nv10_fence_create(drm); in nouveau_accel_init()
473 ret = nv17_fence_create(drm); in nouveau_accel_init()
476 ret = nv50_fence_create(drm); in nouveau_accel_init()
479 ret = nv84_fence_create(drm); in nouveau_accel_init()
489 ret = nvc0_fence_create(drm); in nouveau_accel_init()
498 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
499 nouveau_accel_fini(drm); in nouveau_accel_init()
504 if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_VOLTA) { in nouveau_accel_init()
511 nouveau_accel_gr_init(drm); in nouveau_accel_init()
512 nouveau_accel_ce_init(drm); in nouveau_accel_init()
515 nouveau_bo_move_init(drm); in nouveau_accel_init()
521 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_errorf() local
528 NV_ERROR(drm, "%pV", &vaf); in nouveau_drm_errorf()
535 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_debugf() local
542 NV_DEBUG(drm, "%pV", &vaf); in nouveau_drm_debugf()
555 struct nouveau_drm *drm; in nouveau_drm_device_init() local
558 if (!(drm = kzalloc(sizeof(*drm), GFP_KERNEL))) in nouveau_drm_device_init()
560 dev->dev_private = drm; in nouveau_drm_device_init()
561 drm->dev = dev; in nouveau_drm_device_init()
563 nvif_parent_ctor(&nouveau_parent, &drm->parent); in nouveau_drm_device_init()
564 drm->master.base.object.parent = &drm->parent; in nouveau_drm_device_init()
566 ret = nouveau_cli_init(drm, "DRM-master", &drm->master); in nouveau_drm_device_init()
570 ret = nouveau_cli_init(drm, "DRM", &drm->client); in nouveau_drm_device_init()
574 nvxx_client(&drm->client.base)->debug = in nouveau_drm_device_init()
575 nvkm_dbgopt(nouveau_debug, "DRM"); in nouveau_drm_device_init()
577 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_device_init()
578 mutex_init(&drm->clients_lock); in nouveau_drm_device_init()
579 spin_lock_init(&drm->tile.lock); in nouveau_drm_device_init()
585 if (drm->client.device.info.chipset == 0xc1) in nouveau_drm_device_init()
586 nvif_mask(&drm->client.device.object, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_device_init()
588 nouveau_vga_init(drm); in nouveau_drm_device_init()
590 ret = nouveau_ttm_init(drm); in nouveau_drm_device_init()
598 nouveau_accel_init(drm); in nouveau_drm_device_init()
610 nouveau_debugfs_init(drm); in nouveau_drm_device_init()
612 nouveau_svm_init(drm); in nouveau_drm_device_init()
613 nouveau_dmem_init(drm); in nouveau_drm_device_init()
631 nouveau_accel_fini(drm); in nouveau_drm_device_init()
634 nouveau_ttm_fini(drm); in nouveau_drm_device_init()
636 nouveau_vga_fini(drm); in nouveau_drm_device_init()
637 nouveau_cli_fini(&drm->client); in nouveau_drm_device_init()
639 nouveau_cli_fini(&drm->master); in nouveau_drm_device_init()
641 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_init()
642 kfree(drm); in nouveau_drm_device_init()
650 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_fini() local
659 nouveau_dmem_fini(drm); in nouveau_drm_device_fini()
660 nouveau_svm_fini(drm); in nouveau_drm_device_fini()
662 nouveau_debugfs_fini(drm); in nouveau_drm_device_fini()
668 nouveau_accel_fini(drm); in nouveau_drm_device_fini()
671 nouveau_ttm_fini(drm); in nouveau_drm_device_fini()
672 nouveau_vga_fini(drm); in nouveau_drm_device_fini()
680 mutex_lock(&drm->clients_lock); in nouveau_drm_device_fini()
681 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) { in nouveau_drm_device_fini()
690 mutex_unlock(&drm->clients_lock); in nouveau_drm_device_fini()
692 nouveau_cli_fini(&drm->client); in nouveau_drm_device_fini()
693 nouveau_cli_fini(&drm->master); in nouveau_drm_device_fini()
694 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_fini()
695 mutex_destroy(&drm->clients_lock); in nouveau_drm_device_fini()
696 kfree(drm); in nouveau_drm_device_fini()
742 struct nouveau_drm *drm = nouveau_drm(dev); in quirk_broken_nv_runpm() local
750 drm->old_pm_cap = pdev->pm_cap; in quirk_broken_nv_runpm()
752 NV_INFO(drm, "Disabling PCI power management to avoid bug\n"); in quirk_broken_nv_runpm()
829 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
835 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
847 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_remove() local
850 if (drm->old_pm_cap) in nouveau_drm_remove()
851 pdev->pm_cap = drm->old_pm_cap; in nouveau_drm_remove()
859 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
863 nouveau_svm_suspend(drm); in nouveau_do_suspend()
864 nouveau_dmem_suspend(drm); in nouveau_do_suspend()
868 NV_DEBUG(drm, "suspending console...\n"); in nouveau_do_suspend()
870 NV_DEBUG(drm, "suspending display...\n"); in nouveau_do_suspend()
876 NV_DEBUG(drm, "evicting buffers...\n"); in nouveau_do_suspend()
878 man = ttm_manager_type(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
879 ttm_resource_manager_evict_all(&drm->ttm.bdev, man); in nouveau_do_suspend()
881 NV_DEBUG(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
882 if (drm->cechan) { in nouveau_do_suspend()
883 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
888 if (drm->channel) { in nouveau_do_suspend()
889 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
894 NV_DEBUG(drm, "suspending fence...\n"); in nouveau_do_suspend()
895 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
896 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
902 NV_DEBUG(drm, "suspending object tree...\n"); in nouveau_do_suspend()
903 ret = nvif_client_suspend(&drm->master.base); in nouveau_do_suspend()
910 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
911 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
915 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_suspend()
925 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
927 NV_DEBUG(drm, "resuming object tree...\n"); in nouveau_do_resume()
928 ret = nvif_client_resume(&drm->master.base); in nouveau_do_resume()
930 NV_ERROR(drm, "Client resume failed with error: %d\n", ret); in nouveau_do_resume()
934 NV_DEBUG(drm, "resuming fence...\n"); in nouveau_do_resume()
935 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
936 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
941 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_resume()
943 NV_DEBUG(drm, "resuming console...\n"); in nouveau_do_resume()
948 nouveau_dmem_resume(drm); in nouveau_do_resume()
949 nouveau_svm_resume(drm); in nouveau_do_resume()
1052 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_resume() local
1070 NV_ERROR(drm, "resume failed with: %d\n", ret); in nouveau_pmops_runtime_resume()
1101 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
1121 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1127 mutex_lock(&drm->clients_lock); in nouveau_drm_open()
1128 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1129 mutex_unlock(&drm->clients_lock); in nouveau_drm_open()
1146 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_postclose() local
1165 mutex_lock(&drm->clients_lock); in nouveau_drm_postclose()
1167 mutex_unlock(&drm->clients_lock); in nouveau_drm_postclose()
1335 struct drm_device *drm; in nouveau_platform_device_create() local
1343 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create()
1344 if (IS_ERR(drm)) { in nouveau_platform_device_create()
1345 err = PTR_ERR(drm); in nouveau_platform_device_create()
1349 err = nouveau_drm_device_init(drm); in nouveau_platform_device_create()
1353 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create()
1355 return drm; in nouveau_platform_device_create()
1358 drm_dev_put(drm); in nouveau_platform_device_create()