xref: /linux/drivers/gpu/drm/i915/display/intel_dp_tunnel.h (revision 3a2c4d55e32ad65efebdb6de44eef3bfa08bb49d)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2023 Intel Corporation
4  */
5 
6 #ifndef __INTEL_DP_TUNNEL_H__
7 #define __INTEL_DP_TUNNEL_H__
8 
9 #include <linux/errno.h>
10 #include <linux/types.h>
11 
12 struct drm_connector_state;
13 struct drm_modeset_acquire_ctx;
14 struct intel_atomic_state;
15 struct intel_connector;
16 struct intel_crtc;
17 struct intel_crtc_state;
18 struct intel_display;
19 struct intel_dp;
20 struct intel_encoder;
21 struct intel_link_bw_limits;
22 
23 #if (IS_ENABLED(CONFIG_DRM_I915_DP_TUNNEL) && defined(I915)) || \
24 	(IS_ENABLED(CONFIG_DRM_XE_DP_TUNNEL) && !defined(I915))
25 
26 int intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx);
27 void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp);
28 void intel_dp_tunnel_destroy(struct intel_dp *intel_dp);
29 void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
30 			    const struct intel_crtc_state *crtc_state,
31 			    bool dpcd_updated);
32 void intel_dp_tunnel_suspend(struct intel_dp *intel_dp);
33 
34 bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp);
35 bool intel_dp_tunnel_pr_optimization_supported(struct intel_dp *intel_dp);
36 
37 void
38 intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state);
39 
40 int intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
41 					     struct intel_dp *intel_dp,
42 					     const struct intel_connector *connector,
43 					     struct intel_crtc_state *crtc_state);
44 int intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
45 					   struct intel_crtc_state *crtc_state);
46 
47 int intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
48 					      struct intel_crtc *crtc);
49 int intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
50 				      struct intel_link_bw_limits *limits);
51 int intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
52 				       struct intel_dp *intel_dp,
53 				       struct intel_connector *connector);
54 
55 void intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state);
56 
57 void intel_dp_tunnel_uhbr_lanes_wa_apply(struct intel_dp *intel_dp);
58 bool intel_dp_tunnel_uhbr_lanes_wa_setup(struct intel_dp *intel_dp);
59 void intel_dp_tunnel_uhbr_lanes_wa_reset(struct intel_dp *intel_dp);
60 
61 int intel_dp_tunnel_mgr_init(struct intel_display *display);
62 void intel_dp_tunnel_mgr_cleanup(struct intel_display *display);
63 
64 #else
65 
66 static inline int
67 intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx)
68 {
69 	return -EOPNOTSUPP;
70 }
71 
72 static inline void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp) {}
73 static inline void intel_dp_tunnel_destroy(struct intel_dp *intel_dp) {}
74 static inline void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
75 					  const struct intel_crtc_state *crtc_state,
76 					  bool dpcd_updated) {}
77 static inline void intel_dp_tunnel_suspend(struct intel_dp *intel_dp) {}
78 
79 static inline bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp)
80 {
81 	return false;
82 }
83 
84 static inline bool intel_dp_tunnel_pr_optimization_supported(struct intel_dp *intel_dp)
85 {
86 	return false;
87 }
88 
89 static inline void
90 intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state) {}
91 
92 static inline int
93 intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
94 					 struct intel_dp *intel_dp,
95 					 const struct intel_connector *connector,
96 					 struct intel_crtc_state *crtc_state)
97 {
98 	return 0;
99 }
100 
101 static inline int
102 intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
103 				       struct intel_crtc_state *crtc_state)
104 {
105 	return 0;
106 }
107 
108 static inline int
109 intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
110 					  struct intel_crtc *crtc)
111 {
112 	return 0;
113 }
114 
115 static inline int
116 intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
117 				  struct intel_link_bw_limits *limits)
118 {
119 	return 0;
120 }
121 
122 static inline int
123 intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
124 				   struct intel_dp *intel_dp,
125 				   struct intel_connector *connector)
126 {
127 	return 0;
128 }
129 
130 static inline int
131 intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state)
132 {
133 	return 0;
134 }
135 
136 static inline void intel_dp_tunnel_uhbr_lanes_wa_apply(struct intel_dp *intel_dp)
137 {
138 }
139 
140 static inline bool intel_dp_tunnel_uhbr_lanes_wa_setup(struct intel_dp *intel_dp)
141 {
142 	return false;
143 }
144 
145 static inline void intel_dp_tunnel_uhbr_lanes_wa_reset(struct intel_dp *intel_dp)
146 {
147 }
148 
149 static inline int
150 intel_dp_tunnel_mgr_init(struct intel_display *display)
151 {
152 	return 0;
153 }
154 
155 static inline void intel_dp_tunnel_mgr_cleanup(struct intel_display *display) {}
156 
157 #endif /* CONFIG_DRM_I915_DP_TUNNEL || CONFIG_DRM_XE_DP_TUNNEL */
158 
159 #endif /* __INTEL_DP_TUNNEL_H__ */
160