• Home
  • Raw
  • Download

Lines Matching full:drm

33 #include <drm/drm_crtc_helper.h>
34 #include <drm/drm_ioctl.h>
35 #include <drm/drm_vblank.h>
184 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
186 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
190 nouveau_cli_init(struct nouveau_drm *drm, const char *sname, in nouveau_cli_init() argument
216 u64 device = nouveau_name(drm->dev); in nouveau_cli_init()
220 cli->drm = drm; in nouveau_cli_init()
228 if (cli == &drm->master) { in nouveau_cli_init()
232 mutex_lock(&drm->master.lock); in nouveau_cli_init()
233 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
235 mutex_unlock(&drm->master.lock); in nouveau_cli_init()
292 nouveau_accel_ce_fini(struct nouveau_drm *drm) in nouveau_accel_ce_fini() argument
294 nouveau_channel_idle(drm->cechan); in nouveau_accel_ce_fini()
295 nvif_object_dtor(&drm->ttm.copy); in nouveau_accel_ce_fini()
296 nouveau_channel_del(&drm->cechan); in nouveau_accel_ce_fini()
300 nouveau_accel_ce_init(struct nouveau_drm *drm) in nouveau_accel_ce_init() argument
302 struct nvif_device *device = &drm->client.device; in nouveau_accel_ce_init()
309 ret = nouveau_channel_new(drm, device, in nouveau_accel_ce_init()
311 true, &drm->cechan); in nouveau_accel_ce_init()
321 ret = nouveau_channel_new(drm, device, NvDmaFB, NvDmaTT, false, in nouveau_accel_ce_init()
322 &drm->cechan); in nouveau_accel_ce_init()
326 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_ce_init()
330 nouveau_accel_gr_fini(struct nouveau_drm *drm) in nouveau_accel_gr_fini() argument
332 nouveau_channel_idle(drm->channel); in nouveau_accel_gr_fini()
333 nvif_object_dtor(&drm->ntfy); in nouveau_accel_gr_fini()
334 nvkm_gpuobj_del(&drm->notify); in nouveau_accel_gr_fini()
335 nouveau_channel_del(&drm->channel); in nouveau_accel_gr_fini()
339 nouveau_accel_gr_init(struct nouveau_drm *drm) in nouveau_accel_gr_init() argument
341 struct nvif_device *device = &drm->client.device; in nouveau_accel_gr_init()
354 ret = nouveau_channel_new(drm, device, arg0, arg1, false, in nouveau_accel_gr_init()
355 &drm->channel); in nouveau_accel_gr_init()
357 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); in nouveau_accel_gr_init()
358 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
366 if (!drm->channel->nvsw.client && device->info.family < NV_DEVICE_INFO_V0_TESLA) { in nouveau_accel_gr_init()
367 ret = nvif_object_ctor(&drm->channel->user, "drmNvsw", in nouveau_accel_gr_init()
368 NVDRM_NVSW, nouveau_abi16_swclass(drm), in nouveau_accel_gr_init()
369 NULL, 0, &drm->channel->nvsw); in nouveau_accel_gr_init()
371 struct nvif_push *push = drm->channel->chan.push; in nouveau_accel_gr_init()
374 PUSH_NVSQ(push, NV_SW, 0x0000, drm->channel->nvsw.handle); in nouveau_accel_gr_init()
378 NV_ERROR(drm, "failed to allocate sw class, %d\n", ret); in nouveau_accel_gr_init()
379 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
390 &drm->notify); in nouveau_accel_gr_init()
392 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_gr_init()
393 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
397 ret = nvif_object_ctor(&drm->channel->user, "drmM2mfNtfy", in nouveau_accel_gr_init()
402 .start = drm->notify->addr, in nouveau_accel_gr_init()
403 .limit = drm->notify->addr + 31 in nouveau_accel_gr_init()
405 &drm->ntfy); in nouveau_accel_gr_init()
407 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
414 nouveau_accel_fini(struct nouveau_drm *drm) in nouveau_accel_fini() argument
416 nouveau_accel_ce_fini(drm); in nouveau_accel_fini()
417 nouveau_accel_gr_fini(drm); in nouveau_accel_fini()
418 if (drm->fence) in nouveau_accel_fini()
419 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
423 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
425 struct nvif_device *device = &drm->client.device; in nouveau_accel_init()
433 ret = nouveau_channels_init(drm); in nouveau_accel_init()
447 ret = nv04_fence_create(drm); in nouveau_accel_init()
450 ret = nv10_fence_create(drm); in nouveau_accel_init()
454 ret = nv17_fence_create(drm); in nouveau_accel_init()
457 ret = nv50_fence_create(drm); in nouveau_accel_init()
460 ret = nv84_fence_create(drm); in nouveau_accel_init()
469 ret = nvc0_fence_create(drm); in nouveau_accel_init()
478 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
479 nouveau_accel_fini(drm); in nouveau_accel_init()
484 if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_VOLTA) { in nouveau_accel_init()
491 nouveau_accel_gr_init(drm); in nouveau_accel_init()
492 nouveau_accel_ce_init(drm); in nouveau_accel_init()
495 nouveau_bo_move_init(drm); in nouveau_accel_init()
501 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_errorf() local
508 NV_ERROR(drm, "%pV", &vaf); in nouveau_drm_errorf()
515 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_debugf() local
522 NV_DEBUG(drm, "%pV", &vaf); in nouveau_drm_debugf()
535 struct nouveau_drm *drm; in nouveau_drm_device_init() local
538 if (!(drm = kzalloc(sizeof(*drm), GFP_KERNEL))) in nouveau_drm_device_init()
540 dev->dev_private = drm; in nouveau_drm_device_init()
541 drm->dev = dev; in nouveau_drm_device_init()
543 nvif_parent_ctor(&nouveau_parent, &drm->parent); in nouveau_drm_device_init()
544 drm->master.base.object.parent = &drm->parent; in nouveau_drm_device_init()
546 ret = nouveau_cli_init(drm, "DRM-master", &drm->master); in nouveau_drm_device_init()
550 ret = nouveau_cli_init(drm, "DRM", &drm->client); in nouveau_drm_device_init()
556 nvxx_client(&drm->client.base)->debug = in nouveau_drm_device_init()
557 nvkm_dbgopt(nouveau_debug, "DRM"); in nouveau_drm_device_init()
559 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_device_init()
560 mutex_init(&drm->clients_lock); in nouveau_drm_device_init()
561 spin_lock_init(&drm->tile.lock); in nouveau_drm_device_init()
567 if (drm->client.device.info.chipset == 0xc1) in nouveau_drm_device_init()
568 nvif_mask(&drm->client.device.object, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_device_init()
570 nouveau_vga_init(drm); in nouveau_drm_device_init()
572 ret = nouveau_ttm_init(drm); in nouveau_drm_device_init()
580 nouveau_accel_init(drm); in nouveau_drm_device_init()
592 nouveau_debugfs_init(drm); in nouveau_drm_device_init()
594 nouveau_svm_init(drm); in nouveau_drm_device_init()
595 nouveau_dmem_init(drm); in nouveau_drm_device_init()
613 nouveau_accel_fini(drm); in nouveau_drm_device_init()
616 nouveau_ttm_fini(drm); in nouveau_drm_device_init()
618 nouveau_vga_fini(drm); in nouveau_drm_device_init()
619 nouveau_cli_fini(&drm->client); in nouveau_drm_device_init()
621 nouveau_cli_fini(&drm->master); in nouveau_drm_device_init()
623 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_init()
624 kfree(drm); in nouveau_drm_device_init()
632 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_fini() local
641 nouveau_dmem_fini(drm); in nouveau_drm_device_fini()
642 nouveau_svm_fini(drm); in nouveau_drm_device_fini()
644 nouveau_debugfs_fini(drm); in nouveau_drm_device_fini()
650 nouveau_accel_fini(drm); in nouveau_drm_device_fini()
653 nouveau_ttm_fini(drm); in nouveau_drm_device_fini()
654 nouveau_vga_fini(drm); in nouveau_drm_device_fini()
662 mutex_lock(&drm->clients_lock); in nouveau_drm_device_fini()
663 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) { in nouveau_drm_device_fini()
672 mutex_unlock(&drm->clients_lock); in nouveau_drm_device_fini()
674 nouveau_cli_fini(&drm->client); in nouveau_drm_device_fini()
675 nouveau_cli_fini(&drm->master); in nouveau_drm_device_fini()
676 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_fini()
677 mutex_destroy(&drm->clients_lock); in nouveau_drm_device_fini()
678 kfree(drm); in nouveau_drm_device_fini()
724 struct nouveau_drm *drm = nouveau_drm(dev); in quirk_broken_nv_runpm() local
732 drm->old_pm_cap = pdev->pm_cap; in quirk_broken_nv_runpm()
734 NV_INFO(drm, "Disabling PCI power management to avoid bug\n"); in quirk_broken_nv_runpm()
812 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
819 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
831 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_remove() local
834 if (drm->old_pm_cap) in nouveau_drm_remove()
835 pdev->pm_cap = drm->old_pm_cap; in nouveau_drm_remove()
843 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
846 nouveau_svm_suspend(drm); in nouveau_do_suspend()
847 nouveau_dmem_suspend(drm); in nouveau_do_suspend()
851 NV_DEBUG(drm, "suspending console...\n"); in nouveau_do_suspend()
853 NV_DEBUG(drm, "suspending display...\n"); in nouveau_do_suspend()
859 NV_DEBUG(drm, "evicting buffers...\n"); in nouveau_do_suspend()
860 ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
862 NV_DEBUG(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
863 if (drm->cechan) { in nouveau_do_suspend()
864 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
869 if (drm->channel) { in nouveau_do_suspend()
870 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
875 NV_DEBUG(drm, "suspending fence...\n"); in nouveau_do_suspend()
876 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
877 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
883 NV_DEBUG(drm, "suspending object tree...\n"); in nouveau_do_suspend()
884 ret = nvif_client_suspend(&drm->master.base); in nouveau_do_suspend()
891 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
892 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
896 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_suspend()
906 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
908 NV_DEBUG(drm, "resuming object tree...\n"); in nouveau_do_resume()
909 ret = nvif_client_resume(&drm->master.base); in nouveau_do_resume()
911 NV_ERROR(drm, "Client resume failed with error: %d\n", ret); in nouveau_do_resume()
915 NV_DEBUG(drm, "resuming fence...\n"); in nouveau_do_resume()
916 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
917 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
922 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_resume()
924 NV_DEBUG(drm, "resuming console...\n"); in nouveau_do_resume()
929 nouveau_dmem_resume(drm); in nouveau_do_resume()
930 nouveau_svm_resume(drm); in nouveau_do_resume()
1033 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_resume() local
1051 NV_ERROR(drm, "resume failed with: %d\n", ret); in nouveau_pmops_runtime_resume()
1082 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
1102 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1110 mutex_lock(&drm->clients_lock); in nouveau_drm_open()
1111 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1112 mutex_unlock(&drm->clients_lock); in nouveau_drm_open()
1129 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_postclose() local
1148 mutex_lock(&drm->clients_lock); in nouveau_drm_postclose()
1150 mutex_unlock(&drm->clients_lock); in nouveau_drm_postclose()
1326 struct drm_device *drm; in nouveau_platform_device_create() local
1334 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create()
1335 if (IS_ERR(drm)) { in nouveau_platform_device_create()
1336 err = PTR_ERR(drm); in nouveau_platform_device_create()
1340 err = nouveau_drm_device_init(drm); in nouveau_platform_device_create()
1344 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create()
1346 return drm; in nouveau_platform_device_create()
1349 drm_dev_put(drm); in nouveau_platform_device_create()