Lines Matching refs:drm
133 nouveau_accel_fini(struct nouveau_drm *drm) in nouveau_accel_fini() argument
135 nouveau_channel_del(&drm->channel); in nouveau_accel_fini()
136 nvif_object_fini(&drm->ntfy); in nouveau_accel_fini()
137 nvkm_gpuobj_ref(NULL, &drm->notify); in nouveau_accel_fini()
138 nvif_object_fini(&drm->nvsw); in nouveau_accel_fini()
139 nouveau_channel_del(&drm->cechan); in nouveau_accel_fini()
140 nvif_object_fini(&drm->ttm.copy); in nouveau_accel_fini()
141 if (drm->fence) in nouveau_accel_fini()
142 nouveau_fence(drm)->dtor(drm); in nouveau_accel_fini()
146 nouveau_accel_init(struct nouveau_drm *drm) in nouveau_accel_init() argument
148 struct nvif_device *device = &drm->device; in nouveau_accel_init()
167 ret = nv04_fence_create(drm); in nouveau_accel_init()
170 ret = nv10_fence_create(drm); in nouveau_accel_init()
174 ret = nv17_fence_create(drm); in nouveau_accel_init()
177 ret = nv50_fence_create(drm); in nouveau_accel_init()
180 ret = nv84_fence_create(drm); in nouveau_accel_init()
185 ret = nvc0_fence_create(drm); in nouveau_accel_init()
193 NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret); in nouveau_accel_init()
194 nouveau_accel_fini(drm); in nouveau_accel_init()
199 ret = nouveau_channel_new(drm, &drm->device, NVDRM_CHAN + 1, in nouveau_accel_init()
202 0, &drm->cechan); in nouveau_accel_init()
204 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_init()
212 ret = nouveau_channel_new(drm, &drm->device, NVDRM_CHAN + 1, in nouveau_accel_init()
213 NvDmaFB, NvDmaTT, &drm->cechan); in nouveau_accel_init()
215 NV_ERROR(drm, "failed to create ce channel, %d\n", ret); in nouveau_accel_init()
224 ret = nouveau_channel_new(drm, &drm->device, NVDRM_CHAN, arg0, arg1, in nouveau_accel_init()
225 &drm->channel); in nouveau_accel_init()
227 NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); in nouveau_accel_init()
228 nouveau_accel_fini(drm); in nouveau_accel_init()
232 ret = nvif_object_init(drm->channel->object, NULL, NVDRM_NVSW, in nouveau_accel_init()
233 nouveau_abi16_swclass(drm), NULL, 0, &drm->nvsw); in nouveau_accel_init()
236 ret = RING_SPACE(drm->channel, 2); in nouveau_accel_init()
239 BEGIN_NV04(drm->channel, NvSubSw, 0, 1); in nouveau_accel_init()
240 OUT_RING (drm->channel, NVDRM_NVSW); in nouveau_accel_init()
243 BEGIN_NVC0(drm->channel, FermiSw, 0, 1); in nouveau_accel_init()
244 OUT_RING (drm->channel, 0x001f0000); in nouveau_accel_init()
247 swch = (void *)nvxx_object(&drm->nvsw)->parent; in nouveau_accel_init()
249 swch->flip_data = drm->channel; in nouveau_accel_init()
253 NV_ERROR(drm, "failed to allocate software object, %d\n", ret); in nouveau_accel_init()
254 nouveau_accel_fini(drm); in nouveau_accel_init()
259 ret = nvkm_gpuobj_new(nvxx_object(&drm->device), NULL, 32, in nouveau_accel_init()
260 0, 0, &drm->notify); in nouveau_accel_init()
262 NV_ERROR(drm, "failed to allocate notifier, %d\n", ret); in nouveau_accel_init()
263 nouveau_accel_fini(drm); in nouveau_accel_init()
267 ret = nvif_object_init(drm->channel->object, NULL, NvNotify0, in nouveau_accel_init()
272 .start = drm->notify->addr, in nouveau_accel_init()
273 .limit = drm->notify->addr + 31 in nouveau_accel_init()
275 &drm->ntfy); in nouveau_accel_init()
277 nouveau_accel_fini(drm); in nouveau_accel_init()
283 nouveau_bo_move_init(drm); in nouveau_accel_init()
342 nouveau_get_hdmi_dev(struct nouveau_drm *drm) in nouveau_get_hdmi_dev() argument
344 struct pci_dev *pdev = drm->dev->pdev; in nouveau_get_hdmi_dev()
348 drm->hdmi_device = NULL; in nouveau_get_hdmi_dev()
353 drm->hdmi_device = pci_get_bus_and_slot((unsigned int)pdev->bus->number, in nouveau_get_hdmi_dev()
356 if (!drm->hdmi_device) { in nouveau_get_hdmi_dev()
357 NV_DEBUG(drm, "hdmi device not found %d %d %d\n", pdev->bus->number, PCI_SLOT(pdev->devfn), 1); in nouveau_get_hdmi_dev()
361 if ((drm->hdmi_device->class >> 8) != PCI_CLASS_MULTIMEDIA_HD_AUDIO) { in nouveau_get_hdmi_dev()
362 NV_DEBUG(drm, "possible hdmi device not audio %d\n", drm->hdmi_device->class); in nouveau_get_hdmi_dev()
363 pci_dev_put(drm->hdmi_device); in nouveau_get_hdmi_dev()
364 drm->hdmi_device = NULL; in nouveau_get_hdmi_dev()
373 struct nouveau_drm *drm; in nouveau_drm_load() local
376 ret = nouveau_cli_create(nouveau_name(dev), "DRM", sizeof(*drm), in nouveau_drm_load()
377 (void **)&drm); in nouveau_drm_load()
381 dev->dev_private = drm; in nouveau_drm_load()
382 drm->dev = dev; in nouveau_drm_load()
383 nvxx_client(&drm->client.base)->debug = in nouveau_drm_load()
386 INIT_LIST_HEAD(&drm->clients); in nouveau_drm_load()
387 spin_lock_init(&drm->tile.lock); in nouveau_drm_load()
389 nouveau_get_hdmi_dev(drm); in nouveau_drm_load()
400 ret = nvif_device_init(&drm->client.base.base, NULL, in nouveau_drm_load()
407 &drm->device); in nouveau_drm_load()
411 nouveau_agp_reset(drm); in nouveau_drm_load()
412 nvif_device_fini(&drm->device); in nouveau_drm_load()
415 ret = nvif_device_init(&drm->client.base.base, NULL, NVDRM_DEVICE, in nouveau_drm_load()
422 &drm->device); in nouveau_drm_load()
432 if (drm->device.info.chipset == 0xc1) in nouveau_drm_load()
433 nvif_mask(&drm->device, 0x00088080, 0x00000800, 0x00000000); in nouveau_drm_load()
435 nouveau_vga_init(drm); in nouveau_drm_load()
436 nouveau_agp_init(drm); in nouveau_drm_load()
438 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { in nouveau_drm_load()
439 ret = nvkm_vm_new(nvxx_device(&drm->device), 0, (1ULL << 40), in nouveau_drm_load()
440 0x1000, &drm->client.vm); in nouveau_drm_load()
444 nvxx_client(&drm->client.base)->vm = drm->client.vm; in nouveau_drm_load()
447 ret = nouveau_ttm_init(drm); in nouveau_drm_load()
467 nouveau_accel_init(drm); in nouveau_drm_load()
485 nouveau_ttm_fini(drm); in nouveau_drm_load()
487 nouveau_agp_fini(drm); in nouveau_drm_load()
488 nouveau_vga_fini(drm); in nouveau_drm_load()
490 nvif_device_fini(&drm->device); in nouveau_drm_load()
491 nouveau_cli_destroy(&drm->client); in nouveau_drm_load()
498 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_unload() local
502 nouveau_accel_fini(drm); in nouveau_drm_unload()
512 nouveau_ttm_fini(drm); in nouveau_drm_unload()
513 nouveau_agp_fini(drm); in nouveau_drm_unload()
514 nouveau_vga_fini(drm); in nouveau_drm_unload()
516 nvif_device_fini(&drm->device); in nouveau_drm_unload()
517 if (drm->hdmi_device) in nouveau_drm_unload()
518 pci_dev_put(drm->hdmi_device); in nouveau_drm_unload()
519 nouveau_cli_destroy(&drm->client); in nouveau_drm_unload()
526 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_device_remove() local
531 client = nvxx_client(&drm->client.base); in nouveau_drm_device_remove()
550 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_suspend() local
555 NV_INFO(drm, "suspending console...\n"); in nouveau_do_suspend()
557 NV_INFO(drm, "suspending display...\n"); in nouveau_do_suspend()
563 NV_INFO(drm, "evicting buffers...\n"); in nouveau_do_suspend()
564 ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); in nouveau_do_suspend()
566 NV_INFO(drm, "waiting for kernel channels to go idle...\n"); in nouveau_do_suspend()
567 if (drm->cechan) { in nouveau_do_suspend()
568 ret = nouveau_channel_idle(drm->cechan); in nouveau_do_suspend()
573 if (drm->channel) { in nouveau_do_suspend()
574 ret = nouveau_channel_idle(drm->channel); in nouveau_do_suspend()
579 NV_INFO(drm, "suspending client object trees...\n"); in nouveau_do_suspend()
580 if (drm->fence && nouveau_fence(drm)->suspend) { in nouveau_do_suspend()
581 if (!nouveau_fence(drm)->suspend(drm)) { in nouveau_do_suspend()
587 list_for_each_entry(cli, &drm->clients, head) { in nouveau_do_suspend()
593 NV_INFO(drm, "suspending kernel object tree...\n"); in nouveau_do_suspend()
594 ret = nvif_client_suspend(&drm->client.base); in nouveau_do_suspend()
598 nouveau_agp_fini(drm); in nouveau_do_suspend()
602 list_for_each_entry_continue_reverse(cli, &drm->clients, head) { in nouveau_do_suspend()
606 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_suspend()
607 nouveau_fence(drm)->resume(drm); in nouveau_do_suspend()
611 NV_INFO(drm, "resuming display...\n"); in nouveau_do_suspend()
620 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_do_resume() local
623 NV_INFO(drm, "re-enabling device...\n"); in nouveau_do_resume()
625 nouveau_agp_reset(drm); in nouveau_do_resume()
627 NV_INFO(drm, "resuming kernel object tree...\n"); in nouveau_do_resume()
628 nvif_client_resume(&drm->client.base); in nouveau_do_resume()
629 nouveau_agp_init(drm); in nouveau_do_resume()
631 NV_INFO(drm, "resuming client object trees...\n"); in nouveau_do_resume()
632 if (drm->fence && nouveau_fence(drm)->resume) in nouveau_do_resume()
633 nouveau_fence(drm)->resume(drm); in nouveau_do_resume()
635 list_for_each_entry(cli, &drm->clients, head) { in nouveau_do_resume()
642 NV_INFO(drm, "resuming display...\n"); in nouveau_do_resume()
644 NV_INFO(drm, "resuming console...\n"); in nouveau_do_resume()
774 struct nouveau_drm *drm = nouveau_drm(drm_dev); in nouveau_pmops_runtime_idle() local
790 if (drm->hdmi_device) { in nouveau_pmops_runtime_idle()
791 if (!drm->hdmi_device->driver) { in nouveau_pmops_runtime_idle()
798 list_for_each_entry(crtc, &drm->dev->mode_config.crtc_list, head) { in nouveau_pmops_runtime_idle()
813 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_open() local
834 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { in nouveau_drm_open()
835 ret = nvkm_vm_new(nvxx_device(&drm->device), 0, (1ULL << 40), in nouveau_drm_open()
847 mutex_lock(&drm->client.mutex); in nouveau_drm_open()
848 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
849 mutex_unlock(&drm->client.mutex); in nouveau_drm_open()
862 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_drm_preclose() local
871 mutex_lock(&drm->client.mutex); in nouveau_drm_preclose()
873 mutex_unlock(&drm->client.mutex); in nouveau_drm_preclose()
1059 struct drm_device *drm; in nouveau_platform_device_create_() local
1069 drm = drm_dev_alloc(&driver_platform, &pdev->dev); in nouveau_platform_device_create_()
1070 if (!drm) { in nouveau_platform_device_create_()
1075 err = drm_dev_set_unique(drm, "%s", dev_name(&pdev->dev)); in nouveau_platform_device_create_()
1079 drm->platformdev = pdev; in nouveau_platform_device_create_()
1080 platform_set_drvdata(pdev, drm); in nouveau_platform_device_create_()
1082 return drm; in nouveau_platform_device_create_()