Lines Matching refs:drm

33 #include <drm/drm_crtc_helper.h>
34 #include <drm/drm_ioctl.h>
35 #include <drm/drm_vblank.h>
190 mutex_lock(&cli->drm->master.lock);
192 mutex_unlock(&cli->drm->master.lock);
196 nouveau_cli_init(struct nouveau_drm *drm, const char *sname,
222 u64 device = nouveau_name(drm->dev);
226 cli->drm = drm;
234 if (cli == &drm->master) {
238 mutex_lock(&drm->master.lock);
239 ret = nvif_client_ctor(&drm->master.base, cli->name, device,
241 mutex_unlock(&drm->master.lock);
298 nouveau_accel_ce_fini(struct nouveau_drm *drm)
300 nouveau_channel_idle(drm->cechan);
301 nvif_object_dtor(&drm->ttm.copy);
302 nouveau_channel_del(&drm->cechan);
306 nouveau_accel_ce_init(struct nouveau_drm *drm)
308 struct nvif_device *device = &drm->client.device;
315 ret = nouveau_channel_new(drm, device,
317 true, &drm->cechan);
327 ret = nouveau_channel_new(drm, device, NvDmaFB, NvDmaTT, false,
328 &drm->cechan);
332 NV_ERROR(drm, "failed to create ce channel, %d\n", ret);
336 nouveau_accel_gr_fini(struct nouveau_drm *drm)
338 nouveau_channel_idle(drm->channel);
339 nvif_object_dtor(&drm->ntfy);
340 nvkm_gpuobj_del(&drm->notify);
341 nouveau_channel_del(&drm->channel);
345 nouveau_accel_gr_init(struct nouveau_drm *drm)
347 struct nvif_device *device = &drm->client.device;
360 ret = nouveau_channel_new(drm, device, arg0, arg1, false,
361 &drm->channel);
363 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret);
364 nouveau_accel_gr_fini(drm);
372 if (!drm->channel->nvsw.client && device->info.family < NV_DEVICE_INFO_V0_TESLA) {
373 ret = nvif_object_ctor(&drm->channel->user, "drmNvsw",
374 NVDRM_NVSW, nouveau_abi16_swclass(drm),
375 NULL, 0, &drm->channel->nvsw);
377 struct nvif_push *push = drm->channel->chan.push;
380 PUSH_NVSQ(push, NV_SW, 0x0000, drm->channel->nvsw.handle);
384 NV_ERROR(drm, "failed to allocate sw class, %d\n", ret);
385 nouveau_accel_gr_fini(drm);
396 &drm->notify);
398 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret);
399 nouveau_accel_gr_fini(drm);
403 ret = nvif_object_ctor(&drm->channel->user, "drmM2mfNtfy",
408 .start = drm->notify->addr,
409 .limit = drm->notify->addr + 31
411 &drm->ntfy);
413 nouveau_accel_gr_fini(drm);
420 nouveau_accel_fini(struct nouveau_drm *drm)
422 nouveau_accel_ce_fini(drm);
423 nouveau_accel_gr_fini(drm);
424 if (drm->fence)
425 nouveau_fence(drm)->dtor(drm);
429 nouveau_accel_init(struct nouveau_drm *drm)
431 struct nvif_device *device = &drm->client.device;
439 ret = nouveau_channels_init(drm);
453 ret = nv04_fence_create(drm);
456 ret = nv10_fence_create(drm);
460 ret = nv17_fence_create(drm);
463 ret = nv50_fence_create(drm);
466 ret = nv84_fence_create(drm);
475 ret = nvc0_fence_create(drm);
484 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret);
485 nouveau_accel_fini(drm);
490 if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_VOLTA) {
497 nouveau_accel_gr_init(drm);
498 nouveau_accel_ce_init(drm);
501 nouveau_bo_move_init(drm);
507 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent);
514 NV_ERROR(drm, "%pV", &vaf);
521 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent);
528 NV_DEBUG(drm, "%pV", &vaf);
541 struct nouveau_drm *drm;
544 if (!(drm = kzalloc(sizeof(*drm), GFP_KERNEL)))
546 dev->dev_private = drm;
547 drm->dev = dev;
549 nvif_parent_ctor(&nouveau_parent, &drm->parent);
550 drm->master.base.object.parent = &drm->parent;
552 ret = nouveau_cli_init(drm, "DRM-master", &drm->master);
556 ret = nouveau_cli_init(drm, "DRM", &drm->client);
562 nvxx_client(&drm->client.base)->debug =
565 INIT_LIST_HEAD(&drm->clients);
566 mutex_init(&drm->clients_lock);
567 spin_lock_init(&drm->tile.lock);
573 if (drm->client.device.info.chipset == 0xc1)
574 nvif_mask(&drm->client.device.object, 0x00088080, 0x00000800, 0x00000000);
576 nouveau_vga_init(drm);
578 ret = nouveau_ttm_init(drm);
586 nouveau_accel_init(drm);
598 nouveau_debugfs_init(drm);
600 nouveau_svm_init(drm);
601 nouveau_dmem_init(drm);
619 nouveau_accel_fini(drm);
622 nouveau_ttm_fini(drm);
624 nouveau_vga_fini(drm);
625 nouveau_cli_fini(&drm->client);
627 nouveau_cli_fini(&drm->master);
629 nvif_parent_dtor(&drm->parent);
630 kfree(drm);
638 struct nouveau_drm *drm = nouveau_drm(dev);
647 nouveau_dmem_fini(drm);
648 nouveau_svm_fini(drm);
650 nouveau_debugfs_fini(drm);
656 nouveau_accel_fini(drm);
659 nouveau_ttm_fini(drm);
660 nouveau_vga_fini(drm);
668 mutex_lock(&drm->clients_lock);
669 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
678 mutex_unlock(&drm->clients_lock);
680 nouveau_cli_fini(&drm->client);
681 nouveau_cli_fini(&drm->master);
682 nvif_parent_dtor(&drm->parent);
683 mutex_destroy(&drm->clients_lock);
684 kfree(drm);
730 struct nouveau_drm *drm = nouveau_drm(dev);
738 drm->old_pm_cap = pdev->pm_cap;
740 NV_INFO(drm, "Disabling PCI power management to avoid bug\n");
818 struct nouveau_drm *drm = nouveau_drm(dev);
825 client = nvxx_client(&drm->client.base);
837 struct nouveau_drm *drm = nouveau_drm(dev);
840 if (drm->old_pm_cap)
841 pdev->pm_cap = drm->old_pm_cap;
849 struct nouveau_drm *drm = nouveau_drm(dev);
852 nouveau_svm_suspend(drm);
853 nouveau_dmem_suspend(drm);
857 NV_DEBUG(drm, "suspending console...\n");
859 NV_DEBUG(drm, "suspending display...\n");
865 NV_DEBUG(drm, "evicting buffers...\n");
866 ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
868 NV_DEBUG(drm, "waiting for kernel channels to go idle...\n");
869 if (drm->cechan) {
870 ret = nouveau_channel_idle(drm->cechan);
875 if (drm->channel) {
876 ret = nouveau_channel_idle(drm->channel);
881 NV_DEBUG(drm, "suspending fence...\n");
882 if (drm->fence && nouveau_fence(drm)->suspend) {
883 if (!nouveau_fence(drm)->suspend(drm)) {
889 NV_DEBUG(drm, "suspending object tree...\n");
890 ret = nvif_client_suspend(&drm->master.base);
897 if (drm->fence && nouveau_fence(drm)->resume)
898 nouveau_fence(drm)->resume(drm);
902 NV_DEBUG(drm, "resuming display...\n");
912 struct nouveau_drm *drm = nouveau_drm(dev);
914 NV_DEBUG(drm, "resuming object tree...\n");
915 ret = nvif_client_resume(&drm->master.base);
917 NV_ERROR(drm, "Client resume failed with error: %d\n", ret);
921 NV_DEBUG(drm, "resuming fence...\n");
922 if (drm->fence && nouveau_fence(drm)->resume)
923 nouveau_fence(drm)->resume(drm);
928 NV_DEBUG(drm, "resuming display...\n");
930 NV_DEBUG(drm, "resuming console...\n");
935 nouveau_dmem_resume(drm);
936 nouveau_svm_resume(drm);
1039 struct nouveau_drm *drm = nouveau_drm(drm_dev);
1057 NV_ERROR(drm, "resume failed with: %d\n", ret);
1088 struct nouveau_drm *drm = nouveau_drm(dev);
1108 ret = nouveau_cli_init(drm, name, cli);
1116 mutex_lock(&drm->clients_lock);
1117 list_add(&cli->head, &drm->clients);
1118 mutex_unlock(&drm->clients_lock);
1135 struct nouveau_drm *drm = nouveau_drm(dev);
1154 mutex_lock(&drm->clients_lock);
1156 mutex_unlock(&drm->clients_lock);
1332 struct drm_device *drm;
1340 drm = drm_dev_alloc(&driver_platform, &pdev->dev);
1341 if (IS_ERR(drm)) {
1342 err = PTR_ERR(drm);
1346 err = nouveau_drm_device_init(drm);
1350 platform_set_drvdata(pdev, drm);
1352 return drm;
1355 drm_dev_put(drm);