Lines Matching refs:drm
132 nouveau_decode_mod(struct nouveau_drm *drm, in nouveau_decode_mod() argument
137 struct nouveau_display *disp = nouveau_display(drm->dev); in nouveau_decode_mod()
158 if (drm->client.device.info.chipset >= 0xc0) in nouveau_decode_mod()
169 struct nouveau_drm *drm = nouveau_drm(fb->dev); in nouveau_framebuffer_get_layout() local
171 nouveau_decode_mod(drm, fb->modifier, tile_mode, kind); in nouveau_framebuffer_get_layout()
191 nouveau_validate_decode_mod(struct nouveau_drm *drm, in nouveau_validate_decode_mod() argument
196 struct nouveau_display *disp = nouveau_display(drm->dev); in nouveau_validate_decode_mod()
199 if (drm->client.device.info.family < NV_DEVICE_INFO_V0_TESLA) { in nouveau_validate_decode_mod()
219 nouveau_decode_mod(drm, modifier, tile_mode, kind); in nouveau_validate_decode_mod()
225 nouveau_check_bl_size(struct nouveau_drm *drm, struct nouveau_bo *nvbo, in nouveau_check_bl_size() argument
232 BUG_ON(drm->client.device.info.family < NV_DEVICE_INFO_V0_TESLA); in nouveau_check_bl_size()
234 if (nouveau_check_tile_mode(tile_mode, drm->client.device.info.chipset)) in nouveau_check_bl_size()
237 gobs_in_block = nouveau_get_gobs_in_block(tile_mode, drm->client.device.info.chipset); in nouveau_check_bl_size()
239 bh = nouveau_get_height_in_blocks(h, gobs_in_block, drm->client.device.info.family); in nouveau_check_bl_size()
240 gob_size = nouveau_get_gob_size(drm->client.device.info.family); in nouveau_check_bl_size()
260 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_framebuffer_new() local
270 if (drm->client.device.info.family < NV_DEVICE_INFO_V0_TESLA && in nouveau_framebuffer_new()
287 if (nouveau_validate_decode_mod(drm, mode_cmd->modifier[0], in nouveau_framebuffer_new()
306 ret = nouveau_check_bl_size(drm, nvbo, in nouveau_framebuffer_new()
409 nouveau_display_hpd_resume(struct nouveau_drm *drm) in nouveau_display_hpd_resume() argument
411 if (drm->headless) in nouveau_display_hpd_resume()
414 spin_lock_irq(&drm->hpd_lock); in nouveau_display_hpd_resume()
415 drm->hpd_pending = ~0; in nouveau_display_hpd_resume()
416 spin_unlock_irq(&drm->hpd_lock); in nouveau_display_hpd_resume()
418 schedule_work(&drm->hpd_work); in nouveau_display_hpd_resume()
424 struct nouveau_drm *drm = container_of(work, typeof(*drm), hpd_work); in nouveau_display_hpd_work() local
425 struct drm_device *dev = drm->dev; in nouveau_display_hpd_work()
434 spin_lock_irq(&drm->hpd_lock); in nouveau_display_hpd_work()
435 pending = drm->hpd_pending; in nouveau_display_hpd_work()
436 drm->hpd_pending = 0; in nouveau_display_hpd_work()
437 spin_unlock_irq(&drm->hpd_lock); in nouveau_display_hpd_work()
454 spin_lock_irq(&drm->hpd_lock); in nouveau_display_hpd_work()
457 spin_unlock_irq(&drm->hpd_lock); in nouveau_display_hpd_work()
498 pm_runtime_mark_last_busy(drm->dev->dev); in nouveau_display_hpd_work()
509 struct nouveau_drm *drm = container_of(nb, typeof(*drm), acpi_nb); in nouveau_display_acpi_ntfy() local
515 ret = pm_runtime_get(drm->dev->dev); in nouveau_display_acpi_ntfy()
521 pm_runtime_put_autosuspend(drm->dev->dev); in nouveau_display_acpi_ntfy()
527 NV_DEBUG(drm, "ACPI requested connector reprobe\n"); in nouveau_display_acpi_ntfy()
528 pm_runtime_put_noidle(drm->dev->dev); in nouveau_display_acpi_ntfy()
530 NV_WARN(drm, "Dropped ACPI reprobe event due to RPM error: %d\n", in nouveau_display_acpi_ntfy()
579 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_display_fini() local
599 if (!runtime && !drm->headless) in nouveau_display_fini()
600 cancel_work_sync(&drm->hpd_work); in nouveau_display_fini()
645 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_display_create() local
649 disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL); in nouveau_display_create()
661 if (drm->client.device.info.family < NV_DEVICE_INFO_V0_CELSIUS) { in nouveau_display_create()
665 if (drm->client.device.info.family < NV_DEVICE_INFO_V0_TESLA) { in nouveau_display_create()
669 if (drm->client.device.info.family < NV_DEVICE_INFO_V0_FERMI) { in nouveau_display_create()
680 if (drm->client.device.info.chipset < 0x11) in nouveau_display_create()
689 ret = nvif_disp_ctor(&drm->client.device, "kmsDisp", 0, &disp->disp); in nouveau_display_create()
693 drm->headless = true; in nouveau_display_create()
697 if (!ret && (disp->disp.outp_mask || drm->vbios.dcb.entries)) { in nouveau_display_create()
724 INIT_WORK(&drm->hpd_work, nouveau_display_hpd_work); in nouveau_display_create()
725 spin_lock_init(&drm->hpd_lock); in nouveau_display_create()
727 drm->acpi_nb.notifier_call = nouveau_display_acpi_ntfy; in nouveau_display_create()
728 register_acpi_notifier(&drm->acpi_nb); in nouveau_display_create()
745 struct nouveau_drm *drm = nouveau_drm(dev); in nouveau_display_destroy() local
748 unregister_acpi_notifier(&drm->acpi_nb); in nouveau_display_destroy()
759 drm->display = NULL; in nouveau_display_destroy()