1fbf756c3SDave Airlie /* SPDX-License-Identifier: MIT */
2fbf756c3SDave Airlie /*
3fbf756c3SDave Airlie  * Copyright © 2020 Intel Corporation
4fbf756c3SDave Airlie  */
5fbf756c3SDave Airlie 
6fbf756c3SDave Airlie #ifndef _INTEL_CRTC_H_
7fbf756c3SDave Airlie #define _INTEL_CRTC_H_
8fbf756c3SDave Airlie 
9fbf756c3SDave Airlie #include <linux/types.h>
10fbf756c3SDave Airlie 
1192e9624aSJani Nikula enum i9xx_plane_id;
12fbf756c3SDave Airlie enum pipe;
1309f8fe4cSVille Syrjälä struct drm_display_mode;
14fbf756c3SDave Airlie struct drm_i915_private;
152bbc6fcaSVille Syrjälä struct intel_atomic_state;
16fbf756c3SDave Airlie struct intel_crtc;
17fbf756c3SDave Airlie struct intel_crtc_state;
18fbf756c3SDave Airlie 
198637e1c8SVille Syrjälä /*
208637e1c8SVille Syrjälä  * FIXME: We should instead only take spinlocks once for the entire update
218637e1c8SVille Syrjälä  * instead of once per mmio.
228637e1c8SVille Syrjälä  */
238637e1c8SVille Syrjälä #if IS_ENABLED(CONFIG_PROVE_LOCKING)
248637e1c8SVille Syrjälä #define VBLANK_EVASION_TIME_US 250
258637e1c8SVille Syrjälä #else
268637e1c8SVille Syrjälä #define VBLANK_EVASION_TIME_US 100
278637e1c8SVille Syrjälä #endif
288637e1c8SVille Syrjälä 
2909f8fe4cSVille Syrjälä int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
3009f8fe4cSVille Syrjälä 			     int usecs);
31fbf756c3SDave Airlie u32 intel_crtc_max_vblank_count(const struct intel_crtc_state *crtc_state);
32fbf756c3SDave Airlie int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe);
33fbf756c3SDave Airlie struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc);
34fbf756c3SDave Airlie void intel_crtc_state_reset(struct intel_crtc_state *crtc_state,
35fbf756c3SDave Airlie 			    struct intel_crtc *crtc);
367c53e628SJani Nikula u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
377c53e628SJani Nikula void intel_crtc_vblank_on(const struct intel_crtc_state *crtc_state);
387c53e628SJani Nikula void intel_crtc_vblank_off(const struct intel_crtc_state *crtc_state);
39e19dc8c4SVille Syrjälä void intel_pipe_update_start(struct intel_atomic_state *state,
40e19dc8c4SVille Syrjälä 			     struct intel_crtc *crtc);
41e19dc8c4SVille Syrjälä void intel_pipe_update_end(struct intel_atomic_state *state,
42e19dc8c4SVille Syrjälä 			   struct intel_crtc *crtc);
432bbc6fcaSVille Syrjälä void intel_wait_for_vblank_workers(struct intel_atomic_state *state);
447d41745aSVille Syrjälä struct intel_crtc *intel_first_crtc(struct drm_i915_private *i915);
4592e9624aSJani Nikula struct intel_crtc *intel_crtc_for_pipe(struct drm_i915_private *i915,
4692e9624aSJani Nikula 				       enum pipe pipe);
4792e9624aSJani Nikula void intel_wait_for_vblank_if_active(struct drm_i915_private *i915,
4892e9624aSJani Nikula 				     enum pipe pipe);
4992e9624aSJani Nikula void intel_crtc_wait_for_next_vblank(struct intel_crtc *crtc);
50fbf756c3SDave Airlie 
51fbf756c3SDave Airlie #endif
52