Lines Matching full:drm
33 #include <drm/drm_aperture.h>
34 #include <drm/drm_drv.h>
35 #include <drm/drm_fbdev_generic.h>
36 #include <drm/drm_gem_ttm_helper.h>
37 #include <drm/drm_ioctl.h>
38 #include <drm/drm_vblank.h>
208 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
210 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
214 nouveau_cli_init(struct nouveau_drm *drm, const char *sname, in nouveau_cli_init() argument
240 u64 device = nouveau_name(drm->dev); in nouveau_cli_init()
244 cli->drm = drm; in nouveau_cli_init()
252 if (cli == &drm->master) { in nouveau_cli_init()
256 mutex_lock(&drm->master.lock); in nouveau_cli_init()
257 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
259 mutex_unlock(&drm->master.lock); in nouveau_cli_init()
310 ret = nouveau_sched_entity_init(&cli->sched_entity, &drm->sched, in nouveau_cli_init()
311 drm->sched_wq); in nouveau_cli_init()
323 nouveau_accel_ce_fini(struct nouveau_drm *drm) in nouveau_accel_ce_fini() argument
325 nouveau_channel_idle(drm->cechan); in nouveau_accel_ce_fini()
326 nvif_object_dtor(&drm->ttm.copy); in nouveau_accel_ce_fini()
327 nouveau_channel_del(&drm->cechan); in nouveau_accel_ce_fini()
331 nouveau_accel_ce_init(struct nouveau_drm *drm) in nouveau_accel_ce_init() argument
333 struct nvif_device *device = &drm->client.device; in nouveau_accel_ce_init()
342 NV_DEBUG(drm, "no ce runlist\n"); in nouveau_accel_ce_init()
346 ret = nouveau_channel_new(&drm->client, true, runm, NvDmaFB, NvDmaTT, &drm->cechan); in nouveau_accel_ce_init()
348 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_ce_init()
352 nouveau_accel_gr_fini(struct nouveau_drm *drm) in nouveau_accel_gr_fini() argument
354 nouveau_channel_idle(drm->channel); in nouveau_accel_gr_fini()
355 nvif_object_dtor(&drm->ntfy); in nouveau_accel_gr_fini()
356 nvkm_gpuobj_del(&drm->notify); in nouveau_accel_gr_fini()
357 nouveau_channel_del(&drm->channel); in nouveau_accel_gr_fini()
361 nouveau_accel_gr_init(struct nouveau_drm *drm) in nouveau_accel_gr_init() argument
363 struct nvif_device *device = &drm->client.device; in nouveau_accel_gr_init()
370 NV_DEBUG(drm, "no gr runlist\n"); in nouveau_accel_gr_init()
374 ret = nouveau_channel_new(&drm->client, false, runm, NvDmaFB, NvDmaTT, &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()
391 ret = nvif_object_ctor(&drm->channel->user, "drmBlit", in nouveau_accel_gr_init()
393 NULL, 0, &drm->channel->blit); in nouveau_accel_gr_init()
397 struct nvif_push *push = drm->channel->chan.push; in nouveau_accel_gr_init()
401 PUSH_NVSQ(push, NV05F, 0x0000, drm->channel->blit.handle); in nouveau_accel_gr_init()
406 PUSH_NVSQ(push, NV_SW, 0x0000, drm->channel->nvsw.handle); in nouveau_accel_gr_init()
411 NV_ERROR(drm, "failed to allocate sw or blit class, %d\n", ret); in nouveau_accel_gr_init()
412 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
423 &drm->notify); in nouveau_accel_gr_init()
425 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_gr_init()
426 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
430 ret = nvif_object_ctor(&drm->channel->user, "drmM2mfNtfy", in nouveau_accel_gr_init()
435 .start = drm->notify->addr, in nouveau_accel_gr_init()
436 .limit = drm->notify->addr + 31 in nouveau_accel_gr_init()
438 &drm->ntfy); in nouveau_accel_gr_init()
440 nouveau_accel_gr_fini(drm); in nouveau_accel_gr_init()
447 nouveau_accel_fini(struct nouveau_drm *drm) in nouveau_accel_fini() argument
449 nouveau_accel_ce_fini(drm); in nouveau_accel_fini()
450 nouveau_accel_gr_fini(drm); in nouveau_accel_fini()
451 if (drm->fence) in nouveau_accel_fini()
452 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
453 nouveau_channels_fini(drm); in nouveau_accel_fini()
457 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
459 struct nvif_device *device = &drm->client.device; in nouveau_accel_init()
467 ret = nouveau_channels_init(drm); in nouveau_accel_init()
481 ret = nv04_fence_create(drm); in nouveau_accel_init()
484 ret = nv10_fence_create(drm); in nouveau_accel_init()
488 ret = nv17_fence_create(drm); in nouveau_accel_init()
491 ret = nv50_fence_create(drm); in nouveau_accel_init()
494 ret = nv84_fence_create(drm); in nouveau_accel_init()
505 ret = nvc0_fence_create(drm); in nouveau_accel_init()
514 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
515 nouveau_accel_fini(drm); in nouveau_accel_init()
520 if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_VOLTA) { in nouveau_accel_init()
527 nouveau_accel_gr_init(drm); in nouveau_accel_init()
528 nouveau_accel_ce_init(drm); in nouveau_accel_init()
531 nouveau_bo_move_init(drm); in nouveau_accel_init()
537 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_errorf() local
544 NV_ERROR(drm, "%pV", &vaf); in nouveau_drm_errorf()
551 struct nouveau_drm *drm = container_of(object->parent, typeof(*drm), parent); in nouveau_drm_debugf() local
558 NV_DEBUG(drm, "%pV", &vaf); in nouveau_drm_debugf()
571 struct nouveau_drm *drm; in nouveau_drm_device_init() local
574 if (!(drm = kzalloc(sizeof(*drm), GFP_KERNEL))) in nouveau_drm_device_init()
576 dev->dev_private = drm; in nouveau_drm_device_init()
577 drm->dev = dev; in nouveau_drm_device_init()
579 nvif_parent_ctor(&nouveau_parent, &drm->parent); in nouveau_drm_device_init()
580 drm->master.base.object.parent = &drm->parent; in nouveau_drm_device_init()
582 ret = nouveau_sched_init(drm); in nouveau_drm_device_init()
586 ret = nouveau_cli_init(drm, "DRM-master", &drm->master); in nouveau_drm_device_init()
590 ret = nouveau_cli_init(drm, "DRM", &drm->client); in nouveau_drm_device_init()
594 nvxx_client(&drm->client.base)->debug = in nouveau_drm_device_init()
595 nvkm_dbgopt(nouveau_debug, "DRM"); in nouveau_drm_device_init()
597 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_device_init()
598 mutex_init(&drm->clients_lock); in nouveau_drm_device_init()
599 spin_lock_init(&drm->tile.lock); in nouveau_drm_device_init()
605 if (drm->client.device.info.chipset == 0xc1) in nouveau_drm_device_init()
606 nvif_mask(&drm->client.device.object, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_device_init()
608 nouveau_vga_init(drm); in nouveau_drm_device_init()
610 ret = nouveau_ttm_init(drm); in nouveau_drm_device_init()
618 nouveau_accel_init(drm); in nouveau_drm_device_init()
630 nouveau_debugfs_init(drm); in nouveau_drm_device_init()
632 nouveau_svm_init(drm); in nouveau_drm_device_init()
633 nouveau_dmem_init(drm); in nouveau_drm_device_init()
649 nouveau_accel_fini(drm); in nouveau_drm_device_init()
652 nouveau_ttm_fini(drm); in nouveau_drm_device_init()
654 nouveau_vga_fini(drm); in nouveau_drm_device_init()
655 nouveau_cli_fini(&drm->client); in nouveau_drm_device_init()
657 nouveau_cli_fini(&drm->master); in nouveau_drm_device_init()
659 nouveau_sched_fini(drm); in nouveau_drm_device_init()
661 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_init()
662 kfree(drm); in nouveau_drm_device_init()
670 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_fini() local
678 nouveau_dmem_fini(drm); in nouveau_drm_device_fini()
679 nouveau_svm_fini(drm); in nouveau_drm_device_fini()
681 nouveau_debugfs_fini(drm); in nouveau_drm_device_fini()
687 nouveau_accel_fini(drm); in nouveau_drm_device_fini()
690 nouveau_ttm_fini(drm); in nouveau_drm_device_fini()
691 nouveau_vga_fini(drm); in nouveau_drm_device_fini()
699 mutex_lock(&drm->clients_lock); in nouveau_drm_device_fini()
700 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) { in nouveau_drm_device_fini()
709 mutex_unlock(&drm->clients_lock); in nouveau_drm_device_fini()
711 nouveau_cli_fini(&drm->client); in nouveau_drm_device_fini()
712 nouveau_cli_fini(&drm->master); in nouveau_drm_device_fini()
714 nouveau_sched_fini(drm); in nouveau_drm_device_fini()
716 nvif_parent_dtor(&drm->parent); in nouveau_drm_device_fini()
717 mutex_destroy(&drm->clients_lock); in nouveau_drm_device_fini()
718 kfree(drm); in nouveau_drm_device_fini()
764 struct nouveau_drm *drm = nouveau_drm(dev); in quirk_broken_nv_runpm() local
772 drm->old_pm_cap = pdev->pm_cap; in quirk_broken_nv_runpm()
774 NV_INFO(drm, "Disabling PCI power management to avoid bug\n"); in quirk_broken_nv_runpm()
856 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
862 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
874 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_remove() local
877 if (drm->old_pm_cap) in nouveau_drm_remove()
878 pdev->pm_cap = drm->old_pm_cap; in nouveau_drm_remove()
886 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
890 nouveau_svm_suspend(drm); in nouveau_do_suspend()
891 nouveau_dmem_suspend(drm); in nouveau_do_suspend()
895 NV_DEBUG(drm, "suspending display...\n"); in nouveau_do_suspend()
901 NV_DEBUG(drm, "evicting buffers...\n"); in nouveau_do_suspend()
903 man = ttm_manager_type(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
904 ttm_resource_manager_evict_all(&drm->ttm.bdev, man); in nouveau_do_suspend()
906 NV_DEBUG(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
907 if (drm->cechan) { in nouveau_do_suspend()
908 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
913 if (drm->channel) { in nouveau_do_suspend()
914 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
919 NV_DEBUG(drm, "suspending fence...\n"); in nouveau_do_suspend()
920 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
921 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
927 NV_DEBUG(drm, "suspending object tree...\n"); in nouveau_do_suspend()
928 ret = nvif_client_suspend(&drm->master.base); in nouveau_do_suspend()
935 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
936 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
940 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_suspend()
950 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
952 NV_DEBUG(drm, "resuming object tree...\n"); in nouveau_do_resume()
953 ret = nvif_client_resume(&drm->master.base); in nouveau_do_resume()
955 NV_ERROR(drm, "Client resume failed with error: %d\n", ret); in nouveau_do_resume()
959 NV_DEBUG(drm, "resuming fence...\n"); in nouveau_do_resume()
960 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
961 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
966 NV_DEBUG(drm, "resuming display...\n"); in nouveau_do_resume()
971 nouveau_dmem_resume(drm); in nouveau_do_resume()
972 nouveau_svm_resume(drm); in nouveau_do_resume()
1075 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_resume() local
1093 NV_ERROR(drm, "resume failed with: %d\n", ret); in nouveau_pmops_runtime_resume()
1124 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
1147 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1153 mutex_lock(&drm->clients_lock); in nouveau_drm_open()
1154 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1155 mutex_unlock(&drm->clients_lock); in nouveau_drm_open()
1172 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_postclose() local
1191 mutex_lock(&drm->clients_lock); in nouveau_drm_postclose()
1193 mutex_unlock(&drm->clients_lock); in nouveau_drm_postclose()
1358 struct drm_device *drm; in nouveau_platform_device_create() local
1366 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create()
1367 if (IS_ERR(drm)) { in nouveau_platform_device_create()
1368 err = PTR_ERR(drm); in nouveau_platform_device_create()
1372 err = nouveau_drm_device_init(drm); in nouveau_platform_device_create()
1376 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create()
1378 return drm; in nouveau_platform_device_create()
1381 drm_dev_put(drm); in nouveau_platform_device_create()