Lines Matching full:display

5  * High level display driver entry points. This is a layer between top level
6 * driver code and low level display functionality; no low level display code or
12 #include <drm/display/drm_dp_mst_helper.h>
83 void intel_display_driver_init_hw(struct intel_display *display) in intel_display_driver_init_hw() argument
85 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_init_hw()
88 if (!HAS_DISPLAY(display)) in intel_display_driver_init_hw()
91 cdclk_state = to_intel_cdclk_state(display->cdclk.obj.state); in intel_display_driver_init_hw()
93 intel_update_cdclk(display); in intel_display_driver_init_hw()
94 intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK"); in intel_display_driver_init_hw()
95 cdclk_state->logical = cdclk_state->actual = display->cdclk.hw; in intel_display_driver_init_hw()
115 static void intel_mode_config_init(struct intel_display *display) in intel_mode_config_init() argument
117 struct drm_mode_config *mode_config = &display->drm->mode_config; in intel_mode_config_init()
119 drm_mode_config_init(display->drm); in intel_mode_config_init()
120 INIT_LIST_HEAD(&display->global.obj_list); in intel_mode_config_init()
131 mode_config->async_page_flip = HAS_ASYNC_FLIPS(display); in intel_mode_config_init()
137 if (DISPLAY_VER(display) >= 7) { in intel_mode_config_init()
140 } else if (DISPLAY_VER(display) >= 4) { in intel_mode_config_init()
143 } else if (DISPLAY_VER(display) == 3) { in intel_mode_config_init()
151 if (display->platform.i845g || display->platform.i865g) { in intel_mode_config_init()
152 mode_config->cursor_width = display->platform.i845g ? 64 : 512; in intel_mode_config_init()
154 } else if (display->platform.i830 || display->platform.i85x || in intel_mode_config_init()
155 display->platform.i915g || display->platform.i915gm) { in intel_mode_config_init()
164 static void intel_mode_config_cleanup(struct intel_display *display) in intel_mode_config_cleanup() argument
166 intel_atomic_global_obj_cleanup(display); in intel_mode_config_cleanup()
167 drm_mode_config_cleanup(display->drm); in intel_mode_config_cleanup()
170 static void intel_plane_possible_crtcs_init(struct intel_display *display) in intel_plane_possible_crtcs_init() argument
174 for_each_intel_plane(display->drm, plane) { in intel_plane_possible_crtcs_init()
175 struct intel_crtc *crtc = intel_crtc_for_pipe(display, in intel_plane_possible_crtcs_init()
182 void intel_display_driver_early_probe(struct intel_display *display) in intel_display_driver_early_probe() argument
184 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_early_probe()
186 if (!HAS_DISPLAY(display)) in intel_display_driver_early_probe()
189 spin_lock_init(&display->fb_tracking.lock); in intel_display_driver_early_probe()
190 mutex_init(&display->backlight.lock); in intel_display_driver_early_probe()
191 mutex_init(&display->audio.mutex); in intel_display_driver_early_probe()
192 mutex_init(&display->wm.wm_mutex); in intel_display_driver_early_probe()
193 mutex_init(&display->pps.mutex); in intel_display_driver_early_probe()
194 mutex_init(&display->hdcp.hdcp_mutex); in intel_display_driver_early_probe()
198 intel_color_init_hooks(display); in intel_display_driver_early_probe()
199 intel_init_cdclk_hooks(display); in intel_display_driver_early_probe()
204 intel_dmc_wl_init(display); in intel_display_driver_early_probe()
208 int intel_display_driver_probe_noirq(struct intel_display *display) in intel_display_driver_probe_noirq() argument
210 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe_noirq()
216 if (HAS_DISPLAY(display)) { in intel_display_driver_probe_noirq()
217 ret = drm_vblank_init(display->drm, in intel_display_driver_probe_noirq()
218 INTEL_NUM_PIPES(display)); in intel_display_driver_probe_noirq()
223 intel_bios_init(display); in intel_display_driver_probe_noirq()
225 ret = intel_vga_register(display); in intel_display_driver_probe_noirq()
230 ret = intel_power_domains_init(display); in intel_display_driver_probe_noirq()
234 intel_pmdemand_init_early(display); in intel_display_driver_probe_noirq()
236 intel_power_domains_init_hw(display, false); in intel_display_driver_probe_noirq()
238 if (!HAS_DISPLAY(display)) in intel_display_driver_probe_noirq()
241 intel_dmc_init(display); in intel_display_driver_probe_noirq()
243 display->wq.modeset = alloc_ordered_workqueue("i915_modeset", 0); in intel_display_driver_probe_noirq()
244 display->wq.flip = alloc_workqueue("i915_flip", WQ_HIGHPRI | in intel_display_driver_probe_noirq()
246 display->wq.cleanup = alloc_workqueue("i915_cleanup", WQ_HIGHPRI, 0); in intel_display_driver_probe_noirq()
248 intel_mode_config_init(display); in intel_display_driver_probe_noirq()
250 ret = intel_cdclk_init(display); in intel_display_driver_probe_noirq()
254 ret = intel_color_init(display); in intel_display_driver_probe_noirq()
266 ret = intel_pmdemand_init(display); in intel_display_driver_probe_noirq()
270 intel_init_quirks(display); in intel_display_driver_probe_noirq()
272 intel_fbc_init(display); in intel_display_driver_probe_noirq()
277 intel_dmc_fini(display); in intel_display_driver_probe_noirq()
278 intel_power_domains_driver_remove(display); in intel_display_driver_probe_noirq()
280 intel_vga_unregister(display); in intel_display_driver_probe_noirq()
282 intel_bios_driver_remove(display); in intel_display_driver_probe_noirq()
287 static void set_display_access(struct intel_display *display, in set_display_access() argument
295 err = drm_modeset_lock_all_ctx(display->drm, &ctx); in set_display_access()
299 display->access.any_task_allowed = any_task_allowed; in set_display_access()
300 display->access.allowed_task = allowed_task; in set_display_access()
303 drm_WARN_ON(display->drm, err); in set_display_access()
307 * intel_display_driver_enable_user_access - Enable display HW access for all threads
308 * @display: display device instance
310 * Enable the display HW access for all threads. Examples for such accesses
316 void intel_display_driver_enable_user_access(struct intel_display *display) in intel_display_driver_enable_user_access() argument
318 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_enable_user_access()
320 set_display_access(display, true, NULL); in intel_display_driver_enable_user_access()
326 * intel_display_driver_disable_user_access - Disable display HW access for user threads
327 * @display: display device instance
329 * Disable the display HW access for user threads. Examples for such accesses
342 void intel_display_driver_disable_user_access(struct intel_display *display) in intel_display_driver_disable_user_access() argument
344 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_disable_user_access()
348 set_display_access(display, false, current); in intel_display_driver_disable_user_access()
352 * intel_display_driver_suspend_access - Suspend display HW access for all threads
353 * @display: display device instance
355 * Disable the display HW access for all threads. Examples for such accesses
363 void intel_display_driver_suspend_access(struct intel_display *display) in intel_display_driver_suspend_access() argument
365 set_display_access(display, false, NULL); in intel_display_driver_suspend_access()
369 * intel_display_driver_resume_access - Resume display HW access for the resume thread
370 * @display: display device instance
372 * Enable the display HW access for the current resume thread, keeping the
382 void intel_display_driver_resume_access(struct intel_display *display) in intel_display_driver_resume_access() argument
384 set_display_access(display, false, current); in intel_display_driver_resume_access()
389 * @display: display device instance
391 * Check whether the current thread has display HW access, print a debug
395 * Returns %true if the current thread has display HW access, %false
398 bool intel_display_driver_check_access(struct intel_display *display) in intel_display_driver_check_access() argument
403 if (display->access.any_task_allowed || in intel_display_driver_check_access()
404 display->access.allowed_task == current) in intel_display_driver_check_access()
410 if (display->access.allowed_task) in intel_display_driver_check_access()
412 display->access.allowed_task->comm, in intel_display_driver_check_access()
413 task_pid_vnr(display->access.allowed_task)); in intel_display_driver_check_access()
415 drm_dbg_kms(display->drm, in intel_display_driver_check_access()
416 "Reject display access from task %s (allowed to %s)\n", in intel_display_driver_check_access()
423 int intel_display_driver_probe_nogem(struct intel_display *display) in intel_display_driver_probe_nogem() argument
425 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe_nogem()
429 if (!HAS_DISPLAY(display)) in intel_display_driver_probe_nogem()
436 intel_pps_setup(display); in intel_display_driver_probe_nogem()
438 intel_gmbus_setup(display); in intel_display_driver_probe_nogem()
440 drm_dbg_kms(display->drm, "%d display pipe%s available.\n", in intel_display_driver_probe_nogem()
441 INTEL_NUM_PIPES(display), in intel_display_driver_probe_nogem()
442 INTEL_NUM_PIPES(display) > 1 ? "s" : ""); in intel_display_driver_probe_nogem()
444 for_each_pipe(display, pipe) { in intel_display_driver_probe_nogem()
450 intel_plane_possible_crtcs_init(display); in intel_display_driver_probe_nogem()
455 intel_display_driver_init_hw(display); in intel_display_driver_probe_nogem()
458 if (display->cdclk.max_cdclk_freq == 0) in intel_display_driver_probe_nogem()
459 intel_update_max_cdclk(display); in intel_display_driver_probe_nogem()
461 intel_hti_init(display); in intel_display_driver_probe_nogem()
464 intel_vga_disable(display); in intel_display_driver_probe_nogem()
467 ret = intel_dp_tunnel_mgr_init(display); in intel_display_driver_probe_nogem()
471 intel_display_driver_disable_user_access(display); in intel_display_driver_probe_nogem()
473 drm_modeset_lock_all(display->drm); in intel_display_driver_probe_nogem()
474 intel_modeset_setup_hw_state(i915, display->drm->mode_config.acquire_ctx); in intel_display_driver_probe_nogem()
475 intel_acpi_assign_connector_fwnodes(display); in intel_display_driver_probe_nogem()
476 drm_modeset_unlock_all(display->drm); in intel_display_driver_probe_nogem()
478 intel_initial_plane_config(display); in intel_display_driver_probe_nogem()
485 if (!HAS_GMCH(display)) in intel_display_driver_probe_nogem()
491 intel_hdcp_component_fini(display); in intel_display_driver_probe_nogem()
493 intel_mode_config_cleanup(display); in intel_display_driver_probe_nogem()
499 int intel_display_driver_probe(struct intel_display *display) in intel_display_driver_probe() argument
501 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe()
504 if (!HAS_DISPLAY(display)) in intel_display_driver_probe()
512 intel_hdcp_component_init(display); in intel_display_driver_probe()
520 ret = intel_initial_commit(display->drm); in intel_display_driver_probe()
522 drm_dbg_kms(display->drm, "Initial modeset failed, %d\n", ret); in intel_display_driver_probe()
524 intel_overlay_setup(display); in intel_display_driver_probe()
534 void intel_display_driver_register(struct intel_display *display) in intel_display_driver_register() argument
536 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_register()
537 struct drm_printer p = drm_dbg_printer(display->drm, DRM_UT_KMS, in intel_display_driver_register()
538 "i915 display info:"); in intel_display_driver_register()
540 if (!HAS_DISPLAY(display)) in intel_display_driver_register()
544 intel_opregion_register(display); in intel_display_driver_register()
545 intel_acpi_video_register(display); in intel_display_driver_register()
549 intel_display_driver_enable_user_access(display); in intel_display_driver_register()
560 drm_kms_helper_poll_init(display->drm); in intel_display_driver_register()
565 intel_display_device_info_print(DISPLAY_INFO(display), in intel_display_driver_register()
566 DISPLAY_RUNTIME_INFO(display), &p); in intel_display_driver_register()
570 void intel_display_driver_remove(struct intel_display *display) in intel_display_driver_remove() argument
572 if (!HAS_DISPLAY(display)) in intel_display_driver_remove()
575 flush_workqueue(display->wq.flip); in intel_display_driver_remove()
576 flush_workqueue(display->wq.modeset); in intel_display_driver_remove()
577 flush_workqueue(display->wq.cleanup); in intel_display_driver_remove()
584 intel_dp_mst_suspend(display); in intel_display_driver_remove()
588 void intel_display_driver_remove_noirq(struct intel_display *display) in intel_display_driver_remove_noirq() argument
590 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_remove_noirq()
592 if (!HAS_DISPLAY(display)) in intel_display_driver_remove_noirq()
595 intel_display_driver_suspend_access(display); in intel_display_driver_remove_noirq()
608 intel_hdcp_component_fini(display); in intel_display_driver_remove_noirq()
610 intel_mode_config_cleanup(display); in intel_display_driver_remove_noirq()
612 intel_dp_tunnel_mgr_cleanup(display); in intel_display_driver_remove_noirq()
614 intel_overlay_cleanup(display); in intel_display_driver_remove_noirq()
616 intel_gmbus_teardown(display); in intel_display_driver_remove_noirq()
618 destroy_workqueue(display->wq.flip); in intel_display_driver_remove_noirq()
619 destroy_workqueue(display->wq.modeset); in intel_display_driver_remove_noirq()
620 destroy_workqueue(display->wq.cleanup); in intel_display_driver_remove_noirq()
622 intel_fbc_cleanup(display); in intel_display_driver_remove_noirq()
626 void intel_display_driver_remove_nogem(struct intel_display *display) in intel_display_driver_remove_nogem() argument
628 intel_dmc_fini(display); in intel_display_driver_remove_nogem()
630 intel_power_domains_driver_remove(display); in intel_display_driver_remove_nogem()
632 intel_vga_unregister(display); in intel_display_driver_remove_nogem()
634 intel_bios_driver_remove(display); in intel_display_driver_remove_nogem()
637 void intel_display_driver_unregister(struct intel_display *display) in intel_display_driver_unregister() argument
639 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_unregister()
641 if (!HAS_DISPLAY(display)) in intel_display_driver_unregister()
644 drm_client_dev_unregister(display->drm); in intel_display_driver_unregister()
651 drm_kms_helper_poll_fini(display->drm); in intel_display_driver_unregister()
653 intel_display_driver_disable_user_access(display); in intel_display_driver_unregister()
657 drm_atomic_helper_shutdown(display->drm); in intel_display_driver_unregister()
660 intel_opregion_unregister(display); in intel_display_driver_unregister()
667 int intel_display_driver_suspend(struct intel_display *display) in intel_display_driver_suspend() argument
672 if (!HAS_DISPLAY(display)) in intel_display_driver_suspend()
675 state = drm_atomic_helper_suspend(display->drm); in intel_display_driver_suspend()
678 drm_err(display->drm, "Suspending crtc's failed with %i\n", in intel_display_driver_suspend()
681 display->restore.modeset_state = state; in intel_display_driver_suspend()
684 flush_workqueue(display->wq.cleanup); in intel_display_driver_suspend()
686 intel_dp_mst_suspend(display); in intel_display_driver_suspend()
692 __intel_display_driver_resume(struct intel_display *display, in __intel_display_driver_resume() argument
696 struct drm_i915_private *i915 = to_i915(display->drm); in __intel_display_driver_resume()
702 intel_vga_redisable(display); in __intel_display_driver_resume()
722 if (!HAS_GMCH(display)) in __intel_display_driver_resume()
727 drm_WARN_ON(display->drm, ret == -EDEADLK); in __intel_display_driver_resume()
732 void intel_display_driver_resume(struct intel_display *display) in intel_display_driver_resume() argument
734 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_resume()
735 struct drm_atomic_state *state = display->restore.modeset_state; in intel_display_driver_resume()
739 if (!HAS_DISPLAY(display)) in intel_display_driver_resume()
743 intel_dp_mst_resume(display); in intel_display_driver_resume()
745 display->restore.modeset_state = NULL; in intel_display_driver_resume()
752 ret = drm_modeset_lock_all_ctx(display->drm, &ctx); in intel_display_driver_resume()
760 ret = __intel_display_driver_resume(display, state, &ctx); in intel_display_driver_resume()
767 drm_err(display->drm, in intel_display_driver_resume()