Lines Matching +full:0 +full:xe
37 /* Xe device functions */
39 static bool has_display(struct xe_device *xe) in has_display() argument
41 return HAS_DISPLAY(&xe->display); in has_display()
54 return 0; in xe_display_driver_probe_defer()
79 static void unset_display_features(struct xe_device *xe) in unset_display_features() argument
81 xe->drm.driver_features &= ~(DRIVER_MODESET | DRIVER_ATOMIC); in unset_display_features()
86 struct xe_device *xe = to_xe_device(dev); in display_destroy() local
88 destroy_workqueue(xe->display.hotplug.dp_wq); in display_destroy()
93 * @xe: XE device instance
98 * to the rest of xe and return it to be xe->display.
100 * Returns: 0 on success
102 int xe_display_create(struct xe_device *xe) in xe_display_create() argument
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()
113 struct xe_device *xe = arg; in xe_display_fini_early() local
114 struct intel_display *display = &xe->display; in xe_display_fini_early()
116 if (!xe->info.probe_display) in xe_display_fini_early()
125 int xe_display_init_early(struct xe_device *xe) in xe_display_init_early() argument
127 struct intel_display *display = &xe->display; in xe_display_init_early()
130 if (!xe->info.probe_display) in xe_display_init_early()
131 return 0; in xe_display_init_early()
134 spin_lock_init(&xe->uncore.lock); in xe_display_init_early()
137 intel_detect_pch(xe); in xe_display_init_early()
148 intel_dram_detect(xe); in xe_display_init_early()
150 intel_bw_init_hw(xe); 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()
173 struct xe_device *xe = arg; in xe_display_fini() local
174 struct intel_display *display = &xe->display; in xe_display_fini()
176 intel_hpd_poll_fini(xe); in xe_display_fini()
182 int xe_display_init(struct xe_device *xe) in xe_display_init() argument
184 struct intel_display *display = &xe->display; in xe_display_init()
187 if (!xe->info.probe_display) in xe_display_init()
188 return 0; in xe_display_init()
194 return devm_add_action_or_reset(xe->drm.dev, xe_display_fini, xe); in xe_display_init()
197 void xe_display_register(struct xe_device *xe) in xe_display_register() argument
199 struct intel_display *display = &xe->display; in xe_display_register()
201 if (!xe->info.probe_display) in xe_display_register()
208 void xe_display_unregister(struct xe_device *xe) in xe_display_unregister() argument
210 struct intel_display *display = &xe->display; in xe_display_unregister()
212 if (!xe->info.probe_display) in xe_display_unregister()
221 void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl) in xe_display_irq_handler() argument
223 if (!xe->info.probe_display) in xe_display_irq_handler()
227 gen11_display_irq_handler(xe); in xe_display_irq_handler()
230 void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir) in xe_display_irq_enable() argument
232 struct intel_display *display = &xe->display; in xe_display_irq_enable()
234 if (!xe->info.probe_display) in xe_display_irq_enable()
241 void xe_display_irq_reset(struct xe_device *xe) in xe_display_irq_reset() argument
243 if (!xe->info.probe_display) in xe_display_irq_reset()
246 gen11_display_irq_reset(xe); in xe_display_irq_reset()
249 void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt) in xe_display_irq_postinstall() argument
251 if (!xe->info.probe_display) in xe_display_irq_postinstall()
255 gen11_de_irq_postinstall(xe); in xe_display_irq_postinstall()
267 static void xe_display_flush_cleanup_work(struct xe_device *xe) in xe_display_flush_cleanup_work() argument
271 for_each_intel_crtc(&xe->drm, crtc) { in xe_display_flush_cleanup_work()
288 static void xe_display_enable_d3cold(struct xe_device *xe) in xe_display_enable_d3cold() argument
290 struct intel_display *display = &xe->display; in xe_display_enable_d3cold()
292 if (!xe->info.probe_display) in xe_display_enable_d3cold()
301 xe_display_flush_cleanup_work(xe); in xe_display_enable_d3cold()
307 if (has_display(xe)) in xe_display_enable_d3cold()
308 intel_hpd_poll_enable(xe); in xe_display_enable_d3cold()
311 static void xe_display_disable_d3cold(struct xe_device *xe) in xe_display_disable_d3cold() argument
313 struct intel_display *display = &xe->display; in xe_display_disable_d3cold()
315 if (!xe->info.probe_display) in xe_display_disable_d3cold()
320 if (has_display(xe)) in xe_display_disable_d3cold()
321 drm_mode_config_reset(&xe->drm); in xe_display_disable_d3cold()
325 intel_hpd_init(xe); in xe_display_disable_d3cold()
327 if (has_display(xe)) in xe_display_disable_d3cold()
328 intel_hpd_poll_disable(xe); in xe_display_disable_d3cold()
335 void xe_display_pm_suspend(struct xe_device *xe) in xe_display_pm_suspend() argument
337 struct intel_display *display = &xe->display; in xe_display_pm_suspend()
340 if (!xe->info.probe_display) in xe_display_pm_suspend()
348 drm_client_dev_suspend(&xe->drm, false); in xe_display_pm_suspend()
350 if (has_display(xe)) { in xe_display_pm_suspend()
351 drm_kms_helper_poll_disable(&xe->drm); in xe_display_pm_suspend()
356 xe_display_flush_cleanup_work(xe); in xe_display_pm_suspend()
358 intel_hpd_cancel_work(xe); in xe_display_pm_suspend()
360 if (has_display(xe)) { in xe_display_pm_suspend()
362 intel_encoder_suspend_all(&xe->display); in xe_display_pm_suspend()
370 void xe_display_pm_shutdown(struct xe_device *xe) in xe_display_pm_shutdown() argument
372 struct intel_display *display = &xe->display; in xe_display_pm_shutdown()
374 if (!xe->info.probe_display) in xe_display_pm_shutdown()
378 drm_client_dev_suspend(&xe->drm, false); in xe_display_pm_shutdown()
380 if (has_display(xe)) { in xe_display_pm_shutdown()
381 drm_kms_helper_poll_disable(&xe->drm); in xe_display_pm_shutdown()
386 xe_display_flush_cleanup_work(xe); in xe_display_pm_shutdown()
388 intel_hpd_cancel_work(xe); in xe_display_pm_shutdown()
390 if (has_display(xe)) in xe_display_pm_shutdown()
401 void xe_display_pm_runtime_suspend(struct xe_device *xe) in xe_display_pm_runtime_suspend() argument
403 if (!xe->info.probe_display) in xe_display_pm_runtime_suspend()
406 if (xe->d3cold.allowed) { in xe_display_pm_runtime_suspend()
407 xe_display_enable_d3cold(xe); in xe_display_pm_runtime_suspend()
411 intel_hpd_poll_enable(xe); in xe_display_pm_runtime_suspend()
414 void xe_display_pm_suspend_late(struct xe_device *xe) in xe_display_pm_suspend_late() argument
416 struct intel_display *display = &xe->display; in xe_display_pm_suspend_late()
419 if (!xe->info.probe_display) in xe_display_pm_suspend_late()
425 void xe_display_pm_runtime_suspend_late(struct xe_device *xe) in xe_display_pm_runtime_suspend_late() argument
427 struct intel_display *display = &xe->display; in xe_display_pm_runtime_suspend_late()
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()
433 xe_display_pm_suspend_late(xe); in xe_display_pm_runtime_suspend_late()
443 void xe_display_pm_shutdown_late(struct xe_device *xe) in xe_display_pm_shutdown_late() argument
445 struct intel_display *display = &xe->display; in xe_display_pm_shutdown_late()
447 if (!xe->info.probe_display) in xe_display_pm_shutdown_late()
458 void xe_display_pm_resume_early(struct xe_device *xe) in xe_display_pm_resume_early() argument
460 struct intel_display *display = &xe->display; in xe_display_pm_resume_early()
462 if (!xe->info.probe_display) in xe_display_pm_resume_early()
468 void xe_display_pm_resume(struct xe_device *xe) in xe_display_pm_resume() argument
470 struct intel_display *display = &xe->display; in xe_display_pm_resume()
472 if (!xe->info.probe_display) in xe_display_pm_resume()
477 if (has_display(xe)) in xe_display_pm_resume()
478 drm_mode_config_reset(&xe->drm); in xe_display_pm_resume()
482 if (has_display(xe)) in xe_display_pm_resume()
485 intel_hpd_init(xe); in xe_display_pm_resume()
487 if (has_display(xe)) { in xe_display_pm_resume()
489 drm_kms_helper_poll_enable(&xe->drm); in xe_display_pm_resume()
493 if (has_display(xe)) in xe_display_pm_resume()
494 intel_hpd_poll_disable(xe); in xe_display_pm_resume()
498 drm_client_dev_resume(&xe->drm, false); in xe_display_pm_resume()
503 void xe_display_pm_runtime_resume(struct xe_device *xe) in xe_display_pm_runtime_resume() argument
505 if (!xe->info.probe_display) in xe_display_pm_runtime_resume()
508 if (xe->d3cold.allowed) { in xe_display_pm_runtime_resume()
509 xe_display_disable_d3cold(xe); in xe_display_pm_runtime_resume()
513 intel_hpd_init(xe); in xe_display_pm_runtime_resume()
514 intel_hpd_poll_disable(xe); in xe_display_pm_runtime_resume()
515 skl_watermark_ipc_update(xe); in xe_display_pm_runtime_resume()
526 int xe_display_probe(struct xe_device *xe) in xe_display_probe() argument
528 struct pci_dev *pdev = to_pci_dev(xe->drm.dev); in xe_display_probe()
532 if (!xe->info.probe_display) in xe_display_probe()
537 err = drmm_add_action_or_reset(&xe->drm, display_device_remove, display); in xe_display_probe()
541 if (has_display(xe)) in xe_display_probe()
542 return 0; in xe_display_probe()
545 xe->info.probe_display = false; in xe_display_probe()
546 unset_display_features(xe); in xe_display_probe()
547 return 0; in xe_display_probe()