Lines Matching +full:needs +full:- +full:hpd
1 // SPDX-License-Identifier: MIT
3 * Copyright © 2022-2023 Intel Corporation
67 * apple-gmux is needed on dual GPU MacBook Pro in intel_display_driver_probe_defer()
73 /* If the LCD panel has a privacy-screen, wait for it */ in intel_display_driver_probe_defer()
74 privacy_screen = drm_privacy_screen_get(&pdev->dev, NULL); in intel_display_driver_probe_defer()
75 if (IS_ERR(privacy_screen) && PTR_ERR(privacy_screen) == -EPROBE_DEFER) in intel_display_driver_probe_defer()
85 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_init_hw()
91 cdclk_state = to_intel_cdclk_state(display->cdclk.obj.state); 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()
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()
122 mode_config->min_width = 0; in intel_mode_config_init()
123 mode_config->min_height = 0; in intel_mode_config_init()
125 mode_config->preferred_depth = 24; in intel_mode_config_init()
126 mode_config->prefer_shadow = 1; in intel_mode_config_init()
128 mode_config->funcs = &intel_mode_funcs; in intel_mode_config_init()
129 mode_config->helper_private = &intel_mode_config_funcs; in intel_mode_config_init()
131 mode_config->async_page_flip = HAS_ASYNC_FLIPS(display); in intel_mode_config_init()
138 mode_config->max_width = 16384; in intel_mode_config_init()
139 mode_config->max_height = 16384; in intel_mode_config_init()
141 mode_config->max_width = 8192; in intel_mode_config_init()
142 mode_config->max_height = 8192; in intel_mode_config_init()
144 mode_config->max_width = 4096; in intel_mode_config_init()
145 mode_config->max_height = 4096; in intel_mode_config_init()
147 mode_config->max_width = 2048; in intel_mode_config_init()
148 mode_config->max_height = 2048; 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()
153 mode_config->cursor_height = 1023; 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()
156 mode_config->cursor_width = 64; in intel_mode_config_init()
157 mode_config->cursor_height = 64; in intel_mode_config_init()
159 mode_config->cursor_width = 256; in intel_mode_config_init()
160 mode_config->cursor_height = 256; in intel_mode_config_init()
167 drm_mode_config_cleanup(display->drm); in intel_mode_config_cleanup()
174 for_each_intel_plane(display->drm, plane) { in intel_plane_possible_crtcs_init()
176 plane->pipe); in intel_plane_possible_crtcs_init()
178 plane->base.possible_crtcs = drm_crtc_mask(&crtc->base); in intel_plane_possible_crtcs_init()
184 struct drm_i915_private *i915 = to_i915(display->drm); 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()
210 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe_noirq()
214 return -ENODEV; in intel_display_driver_probe_noirq()
217 ret = drm_vblank_init(display->drm, 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()
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
318 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_enable_user_access()
326 * intel_display_driver_disable_user_access - Disable display HW access for user threads
344 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_disable_user_access()
352 * intel_display_driver_suspend_access - Suspend display HW access for all threads
369 * intel_display_driver_resume_access - Resume display HW access for the resume thread
388 * intel_display_driver_check_access - Check if the current thread has disaplay HW access
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()
408 current->comm, task_pid_vnr(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()
425 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe_nogem()
440 drm_dbg_kms(display->drm, "%d display pipe%s available.\n", in intel_display_driver_probe_nogem()
458 if (display->cdclk.max_cdclk_freq == 0) 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()
476 drm_modeset_unlock_all(display->drm); in intel_display_driver_probe_nogem()
483 * since the watermark calculation done here will use pstate->fb. in intel_display_driver_probe_nogem()
501 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_probe()
508 * This will bind stuff into ggtt, so it needs to be done after in intel_display_driver_probe()
522 drm_dbg_kms(display->drm, "Initial modeset failed, %d\n", ret); in intel_display_driver_probe()
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()
558 * fbdev->async_cookie. in intel_display_driver_register()
560 drm_kms_helper_poll_init(display->drm); in intel_display_driver_register()
577 flush_workqueue(display->wq.flip); in intel_display_driver_remove()
578 flush_workqueue(display->wq.modeset); in intel_display_driver_remove()
579 flush_workqueue(display->wq.cleanup); in intel_display_driver_remove()
582 * MST topology needs to be suspended so we don't have any calls to in intel_display_driver_remove()
592 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_remove_noirq()
600 * Due to the hpd irq storm handling the hotplug work can re-arm the in intel_display_driver_remove_noirq()
601 * poll handlers. Hence disable polling after hpd handling is shut down. in intel_display_driver_remove_noirq()
608 flush_workqueue(i915->unordered_wq); in intel_display_driver_remove_noirq()
620 destroy_workqueue(display->wq.flip); in intel_display_driver_remove_noirq()
621 destroy_workqueue(display->wq.modeset); in intel_display_driver_remove_noirq()
622 destroy_workqueue(display->wq.cleanup); in intel_display_driver_remove_noirq()
646 drm_client_dev_unregister(display->drm); in intel_display_driver_unregister()
653 drm_kms_helper_poll_fini(display->drm); in intel_display_driver_unregister()
659 drm_atomic_helper_shutdown(display->drm); in intel_display_driver_unregister()
677 state = drm_atomic_helper_suspend(display->drm); in intel_display_driver_suspend()
680 drm_err(display->drm, "Suspending crtc's failed with %i\n", in intel_display_driver_suspend()
683 display->restore.modeset_state = state; in intel_display_driver_suspend()
686 flush_workqueue(display->wq.cleanup); in intel_display_driver_suspend()
698 struct drm_i915_private *i915 = to_i915(display->drm); in __intel_display_driver_resume()
720 crtc_state->mode_changed = true; in __intel_display_driver_resume()
725 to_intel_atomic_state(state)->skip_intermediate_wm = true; in __intel_display_driver_resume()
729 drm_WARN_ON(display->drm, ret == -EDEADLK); in __intel_display_driver_resume()
736 struct drm_i915_private *i915 = to_i915(display->drm); in intel_display_driver_resume()
737 struct drm_atomic_state *state = display->restore.modeset_state; in intel_display_driver_resume()
744 /* MST sideband requires HPD interrupts enabled */ in intel_display_driver_resume()
747 display->restore.modeset_state = NULL; in intel_display_driver_resume()
749 state->acquire_ctx = &ctx; in intel_display_driver_resume()
754 ret = drm_modeset_lock_all_ctx(display->drm, &ctx); in intel_display_driver_resume()
755 if (ret != -EDEADLK) in intel_display_driver_resume()
769 drm_err(display->drm, in intel_display_driver_resume()