Lines Matching +full:display +full:- +full:related
1 // SPDX-License-Identifier: MIT
41 return HAS_DISPLAY(&xe->display); in has_display()
45 * xe_display_driver_probe_defer - Detect if we need to wait for other drivers
60 * xe_display_driver_set_hooks - Add driver flags and hooks for display
64 * display IP. This sets the driver's capability of driving display, regardless
73 driver->fbdev_probe = intel_fbdev_driver_fbdev_probe; in xe_display_driver_set_hooks()
76 driver->driver_features |= DRIVER_MODESET | DRIVER_ATOMIC; in xe_display_driver_set_hooks()
81 xe->drm.driver_features &= ~(DRIVER_MODESET | DRIVER_ATOMIC); in unset_display_features()
88 destroy_workqueue(xe->display.hotplug.dp_wq); in display_destroy()
92 * xe_display_create - create display struct
95 * Initialize all fields used by the display part.
98 * to the rest of xe and return it to be xe->display.
104 spin_lock_init(&xe->display.fb_tracking.lock); in xe_display_create()
106 xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0); in xe_display_create()
108 return drmm_add_action_or_reset(&xe->drm, display_destroy, NULL); in xe_display_create()
114 struct intel_display *display = &xe->display; in xe_display_fini_early() local
116 if (!xe->info.probe_display) in xe_display_fini_early()
119 intel_display_driver_remove_nogem(display); in xe_display_fini_early()
120 intel_display_driver_remove_noirq(display); in xe_display_fini_early()
121 intel_opregion_cleanup(display); in xe_display_fini_early()
122 intel_power_domains_cleanup(display); in xe_display_fini_early()
127 struct intel_display *display = &xe->display; in xe_display_init_early() local
130 if (!xe->info.probe_display) in xe_display_init_early()
134 spin_lock_init(&xe->uncore.lock); in xe_display_init_early()
139 intel_display_driver_early_probe(display); in xe_display_init_early()
141 /* Early display init.. */ in xe_display_init_early()
142 intel_opregion_setup(display); in xe_display_init_early()
152 intel_display_device_info_runtime_init(display); in xe_display_init_early()
154 err = intel_display_driver_probe_noirq(display); in xe_display_init_early()
158 err = intel_display_driver_probe_nogem(display); in xe_display_init_early()
162 return devm_add_action_or_reset(xe->drm.dev, xe_display_fini_early, xe); in xe_display_init_early()
164 intel_display_driver_remove_noirq(display); in xe_display_init_early()
165 intel_power_domains_cleanup(display); in xe_display_init_early()
167 intel_opregion_cleanup(display); in xe_display_init_early()
174 struct intel_display *display = &xe->display; in xe_display_fini() local
177 intel_hdcp_component_fini(display); in xe_display_fini()
178 intel_audio_deinit(display); in xe_display_fini()
179 intel_display_driver_remove(display); in xe_display_fini()
184 struct intel_display *display = &xe->display; in xe_display_init() local
187 if (!xe->info.probe_display) in xe_display_init()
190 err = intel_display_driver_probe(display); in xe_display_init()
194 return devm_add_action_or_reset(xe->drm.dev, xe_display_fini, xe); in xe_display_init()
199 struct intel_display *display = &xe->display; in xe_display_register() local
201 if (!xe->info.probe_display) in xe_display_register()
204 intel_display_driver_register(display); in xe_display_register()
205 intel_power_domains_enable(display); in xe_display_register()
210 struct intel_display *display = &xe->display; in xe_display_unregister() local
212 if (!xe->info.probe_display) in xe_display_unregister()
215 intel_power_domains_disable(display); in xe_display_unregister()
216 intel_display_driver_unregister(display); in xe_display_unregister()
219 /* IRQ-related functions */
223 if (!xe->info.probe_display) in xe_display_irq_handler()
232 struct intel_display *display = &xe->display; in xe_display_irq_enable() local
234 if (!xe->info.probe_display) in xe_display_irq_enable()
238 intel_opregion_asle_intr(display); in xe_display_irq_enable()
243 if (!xe->info.probe_display) in xe_display_irq_reset()
251 if (!xe->info.probe_display) in xe_display_irq_postinstall()
254 if (gt->info.id == XE_GT0) in xe_display_irq_postinstall()
271 for_each_intel_crtc(&xe->drm, crtc) { in xe_display_flush_cleanup_work()
274 spin_lock(&crtc->base.commit_lock); in xe_display_flush_cleanup_work()
275 commit = list_first_entry_or_null(&crtc->base.commit_list, in xe_display_flush_cleanup_work()
279 spin_unlock(&crtc->base.commit_lock); in xe_display_flush_cleanup_work()
282 wait_for_completion(&commit->cleanup_done); in xe_display_flush_cleanup_work()
290 struct intel_display *display = &xe->display; in xe_display_enable_d3cold() local
292 if (!xe->info.probe_display) in xe_display_enable_d3cold()
299 intel_power_domains_disable(display); in xe_display_enable_d3cold()
303 intel_opregion_suspend(display, PCI_D3cold); in xe_display_enable_d3cold()
305 intel_dmc_suspend(display); in xe_display_enable_d3cold()
313 struct intel_display *display = &xe->display; in xe_display_disable_d3cold() local
315 if (!xe->info.probe_display) in xe_display_disable_d3cold()
318 intel_dmc_resume(display); in xe_display_disable_d3cold()
321 drm_mode_config_reset(&xe->drm); in xe_display_disable_d3cold()
323 intel_display_driver_init_hw(display); in xe_display_disable_d3cold()
330 intel_opregion_resume(display); in xe_display_disable_d3cold()
332 intel_power_domains_enable(display); in xe_display_disable_d3cold()
337 struct intel_display *display = &xe->display; in xe_display_pm_suspend() local
340 if (!xe->info.probe_display) in xe_display_pm_suspend()
347 intel_power_domains_disable(display); in xe_display_pm_suspend()
348 drm_client_dev_suspend(&xe->drm, false); in xe_display_pm_suspend()
351 drm_kms_helper_poll_disable(&xe->drm); in xe_display_pm_suspend()
352 intel_display_driver_disable_user_access(display); in xe_display_pm_suspend()
353 intel_display_driver_suspend(display); in xe_display_pm_suspend()
361 intel_display_driver_suspend_access(display); in xe_display_pm_suspend()
362 intel_encoder_suspend_all(&xe->display); in xe_display_pm_suspend()
365 intel_opregion_suspend(display, s2idle ? PCI_D1 : PCI_D3cold); in xe_display_pm_suspend()
367 intel_dmc_suspend(display); in xe_display_pm_suspend()
372 struct intel_display *display = &xe->display; in xe_display_pm_shutdown() local
374 if (!xe->info.probe_display) in xe_display_pm_shutdown()
377 intel_power_domains_disable(display); in xe_display_pm_shutdown()
378 drm_client_dev_suspend(&xe->drm, false); in xe_display_pm_shutdown()
381 drm_kms_helper_poll_disable(&xe->drm); in xe_display_pm_shutdown()
382 intel_display_driver_disable_user_access(display); in xe_display_pm_shutdown()
383 intel_display_driver_suspend(display); in xe_display_pm_shutdown()
387 intel_dp_mst_suspend(display); in xe_display_pm_shutdown()
391 intel_display_driver_suspend_access(display); in xe_display_pm_shutdown()
393 intel_encoder_suspend_all(display); in xe_display_pm_shutdown()
394 intel_encoder_shutdown_all(display); in xe_display_pm_shutdown()
396 intel_opregion_suspend(display, PCI_D3cold); in xe_display_pm_shutdown()
398 intel_dmc_suspend(display); in xe_display_pm_shutdown()
403 if (!xe->info.probe_display) in xe_display_pm_runtime_suspend()
406 if (xe->d3cold.allowed) { in xe_display_pm_runtime_suspend()
416 struct intel_display *display = &xe->display; in xe_display_pm_suspend_late() local
419 if (!xe->info.probe_display) in xe_display_pm_suspend_late()
422 intel_display_power_suspend_late(display, s2idle); in xe_display_pm_suspend_late()
427 struct intel_display *display = &xe->display; in xe_display_pm_runtime_suspend_late() local
429 if (!xe->info.probe_display) in xe_display_pm_runtime_suspend_late()
432 if (xe->d3cold.allowed) in xe_display_pm_runtime_suspend_late()
440 intel_dmc_wl_flush_release_work(display); in xe_display_pm_runtime_suspend_late()
445 struct intel_display *display = &xe->display; in xe_display_pm_shutdown_late() local
447 if (!xe->info.probe_display) in xe_display_pm_shutdown_late()
451 * The only requirement is to reboot with display DC states disabled, in xe_display_pm_shutdown_late()
452 * for now leaving all display power wells in the INIT power domain in xe_display_pm_shutdown_late()
455 intel_power_domains_driver_remove(display); in xe_display_pm_shutdown_late()
460 struct intel_display *display = &xe->display; in xe_display_pm_resume_early() local
462 if (!xe->info.probe_display) in xe_display_pm_resume_early()
465 intel_display_power_resume_early(display); in xe_display_pm_resume_early()
470 struct intel_display *display = &xe->display; in xe_display_pm_resume() local
472 if (!xe->info.probe_display) in xe_display_pm_resume()
475 intel_dmc_resume(display); in xe_display_pm_resume()
478 drm_mode_config_reset(&xe->drm); in xe_display_pm_resume()
480 intel_display_driver_init_hw(display); in xe_display_pm_resume()
483 intel_display_driver_resume_access(display); in xe_display_pm_resume()
488 intel_display_driver_resume(display); in xe_display_pm_resume()
489 drm_kms_helper_poll_enable(&xe->drm); in xe_display_pm_resume()
490 intel_display_driver_enable_user_access(display); in xe_display_pm_resume()
496 intel_opregion_resume(display); in xe_display_pm_resume()
498 drm_client_dev_resume(&xe->drm, false); in xe_display_pm_resume()
500 intel_power_domains_enable(display); in xe_display_pm_resume()
505 if (!xe->info.probe_display) in xe_display_pm_runtime_resume()
508 if (xe->d3cold.allowed) { in xe_display_pm_runtime_resume()
521 struct intel_display *display = arg; in display_device_remove() local
523 intel_display_device_remove(display); in display_device_remove()
528 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_display_probe()
529 struct intel_display *display; in xe_display_probe() local
532 if (!xe->info.probe_display) in xe_display_probe()
535 display = intel_display_device_probe(pdev); in xe_display_probe()
537 err = drmm_add_action_or_reset(&xe->drm, display_device_remove, display); in xe_display_probe()
545 xe->info.probe_display = false; in xe_display_probe()