Lines Matching refs:drm

139 nouveau_accel_fini(struct nouveau_drm *drm)  in nouveau_accel_fini()  argument
141 nouveau_channel_idle(drm->channel); in nouveau_accel_fini()
142 nvif_object_fini(&drm->ntfy); in nouveau_accel_fini()
143 nvkm_gpuobj_del(&drm->notify); in nouveau_accel_fini()
144 nvif_notify_fini(&drm->flip); in nouveau_accel_fini()
145 nvif_object_fini(&drm->nvsw); in nouveau_accel_fini()
146 nouveau_channel_del(&drm->channel); in nouveau_accel_fini()
148 nouveau_channel_idle(drm->cechan); in nouveau_accel_fini()
149 nvif_object_fini(&drm->ttm.copy); in nouveau_accel_fini()
150 nouveau_channel_del(&drm->cechan); in nouveau_accel_fini()
152 if (drm->fence) in nouveau_accel_fini()
153 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
157 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
159 struct nvif_device *device = &drm->device; in nouveau_accel_init()
178 ret = nv04_fence_create(drm); in nouveau_accel_init()
181 ret = nv10_fence_create(drm); in nouveau_accel_init()
185 ret = nv17_fence_create(drm); in nouveau_accel_init()
188 ret = nv50_fence_create(drm); in nouveau_accel_init()
191 ret = nv84_fence_create(drm); in nouveau_accel_init()
196 ret = nvc0_fence_create(drm); in nouveau_accel_init()
205 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
206 nouveau_accel_fini(drm); in nouveau_accel_init()
211 ret = nouveau_channel_new(drm, &drm->device, in nouveau_accel_init()
214 0, &drm->cechan); in nouveau_accel_init()
216 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_init()
224 ret = nouveau_channel_new(drm, &drm->device, in nouveau_accel_init()
225 NvDmaFB, NvDmaTT, &drm->cechan); in nouveau_accel_init()
227 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_init()
236 ret = nouveau_channel_new(drm, &drm->device, arg0, arg1, &drm->channel); in nouveau_accel_init()
238 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); in nouveau_accel_init()
239 nouveau_accel_fini(drm); in nouveau_accel_init()
243 ret = nvif_object_init(&drm->channel->user, NVDRM_NVSW, in nouveau_accel_init()
244 nouveau_abi16_swclass(drm), NULL, 0, &drm->nvsw); in nouveau_accel_init()
246 ret = RING_SPACE(drm->channel, 2); in nouveau_accel_init()
249 BEGIN_NV04(drm->channel, NvSubSw, 0, 1); in nouveau_accel_init()
250 OUT_RING (drm->channel, NVDRM_NVSW); in nouveau_accel_init()
253 BEGIN_NVC0(drm->channel, FermiSw, 0, 1); in nouveau_accel_init()
254 OUT_RING (drm->channel, 0x001f0000); in nouveau_accel_init()
258 ret = nvif_notify_init(&drm->nvsw, nouveau_flip_complete, in nouveau_accel_init()
260 &drm->flip); in nouveau_accel_init()
262 ret = nvif_notify_get(&drm->flip); in nouveau_accel_init()
264 nouveau_accel_fini(drm); in nouveau_accel_init()
270 NV_ERROR(drm, "failed to allocate software object, %d\n", ret); in nouveau_accel_init()
271 nouveau_accel_fini(drm); in nouveau_accel_init()
276 ret = nvkm_gpuobj_new(nvxx_device(&drm->device), 32, 0, false, in nouveau_accel_init()
277 NULL, &drm->notify); in nouveau_accel_init()
279 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_init()
280 nouveau_accel_fini(drm); in nouveau_accel_init()
284 ret = nvif_object_init(&drm->channel->user, NvNotify0, in nouveau_accel_init()
289 .start = drm->notify->addr, in nouveau_accel_init()
290 .limit = drm->notify->addr + 31 in nouveau_accel_init()
292 &drm->ntfy); in nouveau_accel_init()
294 nouveau_accel_fini(drm); in nouveau_accel_init()
300 nouveau_bo_move_init(drm); in nouveau_accel_init()
358 nouveau_get_hdmi_dev(struct nouveau_drm *drm) in nouveau_get_hdmi_dev() argument
360 struct pci_dev *pdev = drm->dev->pdev; in nouveau_get_hdmi_dev()
364 drm->hdmi_device = NULL; in nouveau_get_hdmi_dev()
369 drm->hdmi_device = pci_get_bus_and_slot((unsigned int)pdev->bus->number, in nouveau_get_hdmi_dev()
372 if (!drm->hdmi_device) { in nouveau_get_hdmi_dev()
373 NV_DEBUG(drm, "hdmi device not found %d %d %d\n", pdev->bus->number, PCI_SLOT(pdev->devfn), 1); in nouveau_get_hdmi_dev()
377 if ((drm->hdmi_device->class >> 8) != PCI_CLASS_MULTIMEDIA_HD_AUDIO) { in nouveau_get_hdmi_dev()
378 NV_DEBUG(drm, "possible hdmi device not audio %d\n", drm->hdmi_device->class); in nouveau_get_hdmi_dev()
379 pci_dev_put(drm->hdmi_device); in nouveau_get_hdmi_dev()
380 drm->hdmi_device = NULL; in nouveau_get_hdmi_dev()
388 struct nouveau_drm *drm; in nouveau_drm_load() local
391 ret = nouveau_cli_create(dev, "DRM", sizeof(*drm), (void **)&drm); in nouveau_drm_load()
395 dev->dev_private = drm; in nouveau_drm_load()
396 drm->dev = dev; in nouveau_drm_load()
397 nvxx_client(&drm->client.base)->debug = in nouveau_drm_load()
400 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_load()
401 spin_lock_init(&drm->tile.lock); in nouveau_drm_load()
403 nouveau_get_hdmi_dev(drm); in nouveau_drm_load()
405 ret = nvif_device_init(&drm->client.base.object, 0, NV_DEVICE, in nouveau_drm_load()
409 &drm->device); in nouveau_drm_load()
419 if (drm->device.info.chipset == 0xc1) in nouveau_drm_load()
420 nvif_mask(&drm->device.object, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_load()
422 nouveau_vga_init(drm); in nouveau_drm_load()
424 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { in nouveau_drm_load()
425 ret = nvkm_vm_new(nvxx_device(&drm->device), 0, (1ULL << 40), in nouveau_drm_load()
426 0x1000, NULL, &drm->client.vm); in nouveau_drm_load()
430 nvxx_client(&drm->client.base)->vm = drm->client.vm; in nouveau_drm_load()
433 ret = nouveau_ttm_init(drm); in nouveau_drm_load()
453 nouveau_accel_init(drm); in nouveau_drm_load()
471 nouveau_ttm_fini(drm); in nouveau_drm_load()
473 nouveau_vga_fini(drm); in nouveau_drm_load()
475 nvif_device_fini(&drm->device); in nouveau_drm_load()
476 nouveau_cli_destroy(&drm->client); in nouveau_drm_load()
483 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_unload() local
487 nouveau_accel_fini(drm); in nouveau_drm_unload()
497 nouveau_ttm_fini(drm); in nouveau_drm_unload()
498 nouveau_vga_fini(drm); in nouveau_drm_unload()
500 nvif_device_fini(&drm->device); in nouveau_drm_unload()
501 if (drm->hdmi_device) in nouveau_drm_unload()
502 pci_dev_put(drm->hdmi_device); in nouveau_drm_unload()
503 nouveau_cli_destroy(&drm->client); in nouveau_drm_unload()
510 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
515 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
533 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
538 NV_INFO(drm, "suspending console...\n"); in nouveau_do_suspend()
540 NV_INFO(drm, "suspending display...\n"); in nouveau_do_suspend()
546 NV_INFO(drm, "evicting buffers...\n"); in nouveau_do_suspend()
547 ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
549 NV_INFO(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
550 if (drm->cechan) { in nouveau_do_suspend()
551 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
556 if (drm->channel) { in nouveau_do_suspend()
557 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
562 NV_INFO(drm, "suspending client object trees...\n"); in nouveau_do_suspend()
563 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
564 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
570 list_for_each_entry(cli, &drm->clients, head) { in nouveau_do_suspend()
576 NV_INFO(drm, "suspending kernel object tree...\n"); in nouveau_do_suspend()
577 ret = nvif_client_suspend(&drm->client.base); in nouveau_do_suspend()
584 list_for_each_entry_continue_reverse(cli, &drm->clients, head) { in nouveau_do_suspend()
588 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
589 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
593 NV_INFO(drm, "resuming display...\n"); in nouveau_do_suspend()
602 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
605 NV_INFO(drm, "resuming kernel object tree...\n"); in nouveau_do_resume()
606 nvif_client_resume(&drm->client.base); in nouveau_do_resume()
608 NV_INFO(drm, "resuming client object trees...\n"); in nouveau_do_resume()
609 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
610 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
612 list_for_each_entry(cli, &drm->clients, head) { in nouveau_do_resume()
619 NV_INFO(drm, "resuming display...\n"); in nouveau_do_resume()
621 NV_INFO(drm, "resuming console...\n"); in nouveau_do_resume()
750 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_idle() local
766 if (drm->hdmi_device) { in nouveau_pmops_runtime_idle()
767 if (!drm->hdmi_device->driver) { in nouveau_pmops_runtime_idle()
774 list_for_each_entry(crtc, &drm->dev->mode_config.crtc_list, head) { in nouveau_pmops_runtime_idle()
789 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
809 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { in nouveau_drm_open()
810 ret = nvkm_vm_new(nvxx_device(&drm->device), 0, (1ULL << 40), in nouveau_drm_open()
822 mutex_lock(&drm->client.mutex); in nouveau_drm_open()
823 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
824 mutex_unlock(&drm->client.mutex); in nouveau_drm_open()
837 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_preclose() local
846 mutex_lock(&drm->client.mutex); in nouveau_drm_preclose()
848 mutex_unlock(&drm->client.mutex); in nouveau_drm_preclose()
1035 struct drm_device *drm; in nouveau_platform_device_create() local
1043 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create()
1044 if (!drm) { in nouveau_platform_device_create()
1049 err = drm_dev_set_unique(drm, "%s", dev_name(&pdev->dev)); in nouveau_platform_device_create()
1053 drm->platformdev = pdev; in nouveau_platform_device_create()
1054 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create()
1056 return drm; in nouveau_platform_device_create()