hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
....@@ -59,6 +59,8 @@
5959 struct drr_params {
6060 uint32_t vertical_total_min;
6161 uint32_t vertical_total_max;
62
+ uint32_t vertical_total_mid;
63
+ uint32_t vertical_total_mid_frame_num;
6264 bool immediate_flip;
6365 };
6466
....@@ -68,14 +70,6 @@
6870 enum crtc_state {
6971 CRTC_STATE_VBLANK = 0,
7072 CRTC_STATE_VACTIVE
71
-};
72
-
73
-struct _dlg_otg_param {
74
- int vstartup_start;
75
- int vupdate_offset;
76
- int vupdate_width;
77
- int vready_offset;
78
- enum signal_type signal;
7973 };
8074
8175 struct vupdate_keepout_params {
....@@ -104,6 +98,21 @@
10498 INTERSECT_WINDOW_NOT_A_NOT_B,
10599 };
106100
101
+#ifdef CONFIG_DRM_AMD_DC_DCN3_0
102
+enum otg_out_mux_dest {
103
+ OUT_MUX_DIO = 0,
104
+};
105
+#endif
106
+
107
+enum h_timing_div_mode {
108
+ H_TIMING_NO_DIV,
109
+ H_TIMING_DIV_BY2,
110
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
111
+ H_TIMING_RESERVED,
112
+ H_TIMING_DIV_BY4,
113
+#endif
114
+};
115
+
107116 struct crc_params {
108117 /* Regions used to calculate CRC*/
109118 uint16_t windowa_x_start;
....@@ -118,6 +127,9 @@
118127
119128 enum crc_selection selection;
120129
130
+ uint8_t dsc_mode;
131
+ uint8_t odm_mode;
132
+
121133 bool continuous_mode;
122134 bool enable;
123135 };
....@@ -126,7 +138,6 @@
126138 const struct timing_generator_funcs *funcs;
127139 struct dc_bios *bp;
128140 struct dc_context *ctx;
129
- struct _dlg_otg_param dlg_otg_param;
130141 int inst;
131142 };
132143
....@@ -134,15 +145,30 @@
134145
135146 struct drr_params;
136147
148
+
137149 struct timing_generator_funcs {
138150 bool (*validate_timing)(struct timing_generator *tg,
139151 const struct dc_crtc_timing *timing);
140152 void (*program_timing)(struct timing_generator *tg,
141153 const struct dc_crtc_timing *timing,
142
- bool use_vbios);
143
- void (*program_vline_interrupt)(struct timing_generator *optc,
144
- const struct dc_crtc_timing *dc_crtc_timing,
145
- unsigned long long vsync_delta);
154
+ int vready_offset,
155
+ int vstartup_start,
156
+ int vupdate_offset,
157
+ int vupdate_width,
158
+ const enum signal_type signal,
159
+ bool use_vbios
160
+ );
161
+ void (*setup_vertical_interrupt0)(
162
+ struct timing_generator *optc,
163
+ uint32_t start_line,
164
+ uint32_t end_line);
165
+ void (*setup_vertical_interrupt1)(
166
+ struct timing_generator *optc,
167
+ uint32_t start_line);
168
+ void (*setup_vertical_interrupt2)(
169
+ struct timing_generator *optc,
170
+ uint32_t start_line);
171
+
146172 bool (*enable_crtc)(struct timing_generator *tg);
147173 bool (*disable_crtc)(struct timing_generator *tg);
148174 bool (*is_counter_moving)(struct timing_generator *tg);
....@@ -159,6 +185,8 @@
159185 bool (*get_otg_active_size)(struct timing_generator *optc,
160186 uint32_t *otg_active_width,
161187 uint32_t *otg_active_height);
188
+ bool (*is_matching_timing)(struct timing_generator *tg,
189
+ const struct dc_crtc_timing *otg_timing);
162190 void (*set_early_control)(struct timing_generator *tg,
163191 uint32_t early_cntl);
164192 void (*wait_for_state)(struct timing_generator *tg,
....@@ -178,6 +206,10 @@
178206 const struct dcp_gsl_params *gsl_params);
179207 void (*unlock)(struct timing_generator *tg);
180208 void (*lock)(struct timing_generator *tg);
209
+ void (*lock_doublebuffer_disable)(struct timing_generator *tg);
210
+ void (*lock_doublebuffer_enable)(struct timing_generator *tg);
211
+ void(*triplebuffer_unlock)(struct timing_generator *tg);
212
+ void(*triplebuffer_lock)(struct timing_generator *tg);
181213 void (*enable_reset_trigger)(struct timing_generator *tg,
182214 int source_tg_inst);
183215 void (*enable_crtc_reset)(struct timing_generator *tg,
....@@ -189,7 +221,8 @@
189221 bool enable, const struct dc_crtc_timing *timing);
190222 void (*set_drr)(struct timing_generator *tg, const struct drr_params *params);
191223 void (*set_static_screen_control)(struct timing_generator *tg,
192
- uint32_t value);
224
+ uint32_t event_triggers,
225
+ uint32_t num_frames);
193226 void (*set_test_pattern)(
194227 struct timing_generator *tg,
195228 enum controller_dp_test_pattern test_pattern,
....@@ -197,7 +230,11 @@
197230
198231 bool (*arm_vert_intr)(struct timing_generator *tg, uint8_t width);
199232
200
- void (*program_global_sync)(struct timing_generator *tg);
233
+ void (*program_global_sync)(struct timing_generator *tg,
234
+ int vready_offset,
235
+ int vstartup_start,
236
+ int vupdate_offset,
237
+ int vupdate_width);
201238 void (*enable_optc_clock)(struct timing_generator *tg, bool enable);
202239 void (*program_stereo)(struct timing_generator *tg,
203240 const struct dc_crtc_timing *timing, struct crtc_stereo_flags *flags);
....@@ -209,6 +246,14 @@
209246 bool (*is_tg_enabled)(struct timing_generator *tg);
210247 bool (*is_optc_underflow_occurred)(struct timing_generator *tg);
211248 void (*clear_optc_underflow)(struct timing_generator *tg);
249
+
250
+ void (*set_dwb_source)(struct timing_generator *optc,
251
+ uint32_t dwb_pipe_inst);
252
+
253
+ void (*get_optc_source)(struct timing_generator *optc,
254
+ uint32_t *num_of_input_segments,
255
+ uint32_t *seg0_src_sel,
256
+ uint32_t *seg1_src_sel);
212257
213258 /**
214259 * Configure CRCs for the given timing generator. Return false if TG is
....@@ -224,6 +269,34 @@
224269 bool (*get_crc)(struct timing_generator *tg,
225270 uint32_t *r_cr, uint32_t *g_y, uint32_t *b_cb);
226271
272
+ void (*program_manual_trigger)(struct timing_generator *optc);
273
+ void (*setup_manual_trigger)(struct timing_generator *optc);
274
+ bool (*get_hw_timing)(struct timing_generator *optc,
275
+ struct dc_crtc_timing *hw_crtc_timing);
276
+
277
+ void (*set_vtg_params)(struct timing_generator *optc,
278
+ const struct dc_crtc_timing *dc_crtc_timing);
279
+
280
+ void (*set_dsc_config)(struct timing_generator *optc,
281
+ enum optc_dsc_mode dsc_mode,
282
+ uint32_t dsc_bytes_per_pixel,
283
+ uint32_t dsc_slice_width);
284
+ void (*set_odm_bypass)(struct timing_generator *optc, const struct dc_crtc_timing *dc_crtc_timing);
285
+ void (*set_odm_combine)(struct timing_generator *optc, int *opp_id, int opp_cnt,
286
+ struct dc_crtc_timing *timing);
287
+ void (*set_gsl)(struct timing_generator *optc, const struct gsl_params *params);
288
+ void (*set_gsl_source_select)(struct timing_generator *optc,
289
+ int group_idx,
290
+ uint32_t gsl_ready_signal);
291
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
292
+ void (*set_out_mux)(struct timing_generator *tg, enum otg_out_mux_dest dest);
293
+ void (*set_vrr_m_const)(struct timing_generator *optc,
294
+ double vtotal_avg);
295
+ void (*set_drr_trigger_window)(struct timing_generator *optc,
296
+ uint32_t window_start, uint32_t window_end);
297
+ void (*set_vtotal_change_limit)(struct timing_generator *optc,
298
+ uint32_t limit);
299
+#endif
227300 };
228301
229302 #endif