aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
diff options
context:
space:
mode:
authorLeo (Sunpeng) Li <sunpeng.li@amd.com>2017-07-25 20:51:26 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:15:46 -0400
commit4fa086b9b6640818c053c79d4d7104790ba76cb7 (patch)
tree8ec8380842a1642020ff8df2074677fdefc875d3 /drivers/gpu/drm/amd/display/modules/freesync/freesync.c
parent2248eb6b4f1fdd7aded987d178a95b021d3a1d91 (diff)
drm/amd/display: Roll core_stream into dc_stream
Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com> Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/modules/freesync/freesync.c')
-rw-r--r--drivers/gpu/drm/amd/display/modules/freesync/freesync.c60
1 files changed, 27 insertions, 33 deletions
diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
index a989d5de9f3c..358f8a855a59 100644
--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
@@ -111,7 +111,7 @@ struct freesync_state {
111}; 111};
112 112
113struct freesync_entity { 113struct freesync_entity {
114 const struct dc_stream *stream; 114 struct dc_stream *stream;
115 struct mod_freesync_caps *caps; 115 struct mod_freesync_caps *caps;
116 struct freesync_state state; 116 struct freesync_state state;
117 struct mod_freesync_user_enable user_enable; 117 struct mod_freesync_user_enable user_enable;
@@ -229,7 +229,7 @@ void mod_freesync_destroy(struct mod_freesync *mod_freesync)
229 * on the core_freesync->map and returns the corresponding index 229 * on the core_freesync->map and returns the corresponding index
230 */ 230 */
231static unsigned int map_index_from_stream(struct core_freesync *core_freesync, 231static unsigned int map_index_from_stream(struct core_freesync *core_freesync,
232 const struct dc_stream *stream) 232 struct dc_stream *stream)
233{ 233{
234 unsigned int index = 0; 234 unsigned int index = 0;
235 235
@@ -244,9 +244,8 @@ static unsigned int map_index_from_stream(struct core_freesync *core_freesync,
244} 244}
245 245
246bool mod_freesync_add_stream(struct mod_freesync *mod_freesync, 246bool mod_freesync_add_stream(struct mod_freesync *mod_freesync,
247 const struct dc_stream *stream, struct mod_freesync_caps *caps) 247 struct dc_stream *stream, struct mod_freesync_caps *caps)
248{ 248{
249 struct core_stream *core_stream = NULL;
250 struct core_dc *core_dc = NULL; 249 struct core_dc *core_dc = NULL;
251 struct core_freesync *core_freesync = NULL; 250 struct core_freesync *core_freesync = NULL;
252 int persistent_freesync_enable = 0; 251 int persistent_freesync_enable = 0;
@@ -258,7 +257,6 @@ bool mod_freesync_add_stream(struct mod_freesync *mod_freesync,
258 return false; 257 return false;
259 258
260 core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); 259 core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync);
261 core_stream = DC_STREAM_TO_CORE(stream);
262 core_dc = DC_TO_CORE(core_freesync->dc); 260 core_dc = DC_TO_CORE(core_freesync->dc);
263 261
264 flag.save_per_edid = true; 262 flag.save_per_edid = true;
@@ -315,7 +313,7 @@ bool mod_freesync_add_stream(struct mod_freesync *mod_freesync,
315 if (caps->supported && 313 if (caps->supported &&
316 nom_refresh_rate_uhz >= caps->min_refresh_in_micro_hz && 314 nom_refresh_rate_uhz >= caps->min_refresh_in_micro_hz &&
317 nom_refresh_rate_uhz <= caps->max_refresh_in_micro_hz) 315 nom_refresh_rate_uhz <= caps->max_refresh_in_micro_hz)
318 core_stream->public.ignore_msa_timing_param = 1; 316 stream->ignore_msa_timing_param = 1;
319 317
320 core_freesync->num_entities++; 318 core_freesync->num_entities++;
321 return true; 319 return true;
@@ -324,7 +322,7 @@ bool mod_freesync_add_stream(struct mod_freesync *mod_freesync,
324} 322}
325 323
326bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync, 324bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync,
327 const struct dc_stream *stream) 325 struct dc_stream *stream)
328{ 326{
329 int i = 0; 327 int i = 0;
330 struct core_freesync *core_freesync = NULL; 328 struct core_freesync *core_freesync = NULL;
@@ -346,14 +344,12 @@ bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync,
346} 344}
347 345
348static void update_stream_freesync_context(struct core_freesync *core_freesync, 346static void update_stream_freesync_context(struct core_freesync *core_freesync,
349 const struct dc_stream *stream) 347 struct dc_stream *stream)
350{ 348{
351 unsigned int index; 349 unsigned int index;
352 struct freesync_context *ctx; 350 struct freesync_context *ctx;
353 struct core_stream *core_stream;
354 351
355 core_stream = DC_STREAM_TO_CORE(stream); 352 ctx = &stream->freesync_ctx;
356 ctx = &core_stream->public.freesync_ctx;
357 353
358 index = map_index_from_stream(core_freesync, stream); 354 index = map_index_from_stream(core_freesync, stream);
359 355
@@ -372,19 +368,17 @@ static void update_stream_freesync_context(struct core_freesync *core_freesync,
372} 368}
373 369
374static void update_stream(struct core_freesync *core_freesync, 370static void update_stream(struct core_freesync *core_freesync,
375 const struct dc_stream *stream) 371 struct dc_stream *stream)
376{ 372{
377 struct core_stream *core_stream = DC_STREAM_TO_CORE(stream);
378
379 unsigned int index = map_index_from_stream(core_freesync, stream); 373 unsigned int index = map_index_from_stream(core_freesync, stream);
380 if (core_freesync->map[index].caps->supported) { 374 if (core_freesync->map[index].caps->supported) {
381 core_stream->public.ignore_msa_timing_param = 1; 375 stream->ignore_msa_timing_param = 1;
382 update_stream_freesync_context(core_freesync, stream); 376 update_stream_freesync_context(core_freesync, stream);
383 } 377 }
384} 378}
385 379
386static void calc_freesync_range(struct core_freesync *core_freesync, 380static void calc_freesync_range(struct core_freesync *core_freesync,
387 const struct dc_stream *stream, 381 struct dc_stream *stream,
388 struct freesync_state *state, 382 struct freesync_state *state,
389 unsigned int min_refresh_in_uhz, 383 unsigned int min_refresh_in_uhz,
390 unsigned int max_refresh_in_uhz) 384 unsigned int max_refresh_in_uhz)
@@ -458,7 +452,7 @@ static void calc_freesync_range(struct core_freesync *core_freesync,
458 min_frame_duration_in_ns) / 2000; 452 min_frame_duration_in_ns) / 2000;
459} 453}
460 454
461static void calc_v_total_from_duration(const struct dc_stream *stream, 455static void calc_v_total_from_duration(struct dc_stream *stream,
462 unsigned int duration_in_ns, int *v_total_nominal) 456 unsigned int duration_in_ns, int *v_total_nominal)
463{ 457{
464 *v_total_nominal = div64_u64(div64_u64(((unsigned long long)( 458 *v_total_nominal = div64_u64(div64_u64(((unsigned long long)(
@@ -467,7 +461,7 @@ static void calc_v_total_from_duration(const struct dc_stream *stream,
467} 461}
468 462
469static void calc_v_total_for_static_ramp(struct core_freesync *core_freesync, 463static void calc_v_total_for_static_ramp(struct core_freesync *core_freesync,
470 const struct dc_stream *stream, 464 struct dc_stream *stream,
471 unsigned int index, int *v_total) 465 unsigned int index, int *v_total)
472{ 466{
473 unsigned int frame_duration = 0; 467 unsigned int frame_duration = 0;
@@ -563,7 +557,7 @@ static void reset_freesync_state_variables(struct freesync_state* state)
563 * Sets freesync mode on a stream depending on current freesync state. 557 * Sets freesync mode on a stream depending on current freesync state.
564 */ 558 */
565static bool set_freesync_on_streams(struct core_freesync *core_freesync, 559static bool set_freesync_on_streams(struct core_freesync *core_freesync,
566 const struct dc_stream **streams, int num_streams) 560 struct dc_stream **streams, int num_streams)
567{ 561{
568 int v_total_nominal = 0, v_total_min = 0, v_total_max = 0; 562 int v_total_nominal = 0, v_total_min = 0, v_total_max = 0;
569 unsigned int stream_idx, map_index = 0; 563 unsigned int stream_idx, map_index = 0;
@@ -735,7 +729,7 @@ static void set_static_ramp_variables(struct core_freesync *core_freesync,
735} 729}
736 730
737void mod_freesync_handle_v_update(struct mod_freesync *mod_freesync, 731void mod_freesync_handle_v_update(struct mod_freesync *mod_freesync,
738 const struct dc_stream **streams, int num_streams) 732 struct dc_stream **streams, int num_streams)
739{ 733{
740 unsigned int index, v_total, inserted_frame_v_total = 0; 734 unsigned int index, v_total, inserted_frame_v_total = 0;
741 unsigned int min_frame_duration_in_ns, vmax, vmin = 0; 735 unsigned int min_frame_duration_in_ns, vmax, vmin = 0;
@@ -845,7 +839,7 @@ void mod_freesync_handle_v_update(struct mod_freesync *mod_freesync,
845} 839}
846 840
847void mod_freesync_update_state(struct mod_freesync *mod_freesync, 841void mod_freesync_update_state(struct mod_freesync *mod_freesync,
848 const struct dc_stream **streams, int num_streams, 842 struct dc_stream **streams, int num_streams,
849 struct mod_freesync_params *freesync_params) 843 struct mod_freesync_params *freesync_params)
850{ 844{
851 bool freesync_program_required = false; 845 bool freesync_program_required = false;
@@ -935,7 +929,7 @@ void mod_freesync_update_state(struct mod_freesync *mod_freesync,
935 929
936 930
937bool mod_freesync_get_state(struct mod_freesync *mod_freesync, 931bool mod_freesync_get_state(struct mod_freesync *mod_freesync,
938 const struct dc_stream *stream, 932 struct dc_stream *stream,
939 struct mod_freesync_params *freesync_params) 933 struct mod_freesync_params *freesync_params)
940{ 934{
941 unsigned int index = 0; 935 unsigned int index = 0;
@@ -971,7 +965,7 @@ bool mod_freesync_get_state(struct mod_freesync *mod_freesync,
971} 965}
972 966
973bool mod_freesync_set_user_enable(struct mod_freesync *mod_freesync, 967bool mod_freesync_set_user_enable(struct mod_freesync *mod_freesync,
974 const struct dc_stream **streams, int num_streams, 968 struct dc_stream **streams, int num_streams,
975 struct mod_freesync_user_enable *user_enable) 969 struct mod_freesync_user_enable *user_enable)
976{ 970{
977 unsigned int stream_index, map_index; 971 unsigned int stream_index, map_index;
@@ -1023,7 +1017,7 @@ bool mod_freesync_set_user_enable(struct mod_freesync *mod_freesync,
1023} 1017}
1024 1018
1025bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync, 1019bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync,
1026 const struct dc_stream *stream, 1020 struct dc_stream *stream,
1027 struct mod_freesync_user_enable *user_enable) 1021 struct mod_freesync_user_enable *user_enable)
1028{ 1022{
1029 unsigned int index = 0; 1023 unsigned int index = 0;
@@ -1041,7 +1035,7 @@ bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync,
1041} 1035}
1042 1036
1043bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync, 1037bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync,
1044 const struct dc_stream *stream, 1038 struct dc_stream *stream,
1045 bool *is_ramp_active) 1039 bool *is_ramp_active)
1046{ 1040{
1047 unsigned int index = 0; 1041 unsigned int index = 0;
@@ -1060,7 +1054,7 @@ bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync,
1060} 1054}
1061 1055
1062bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync, 1056bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync,
1063 const struct dc_stream *streams, 1057 struct dc_stream *streams,
1064 unsigned int min_refresh, 1058 unsigned int min_refresh,
1065 unsigned int max_refresh, 1059 unsigned int max_refresh,
1066 struct mod_freesync_caps *caps) 1060 struct mod_freesync_caps *caps)
@@ -1113,7 +1107,7 @@ bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync,
1113} 1107}
1114 1108
1115bool mod_freesync_get_min_max(struct mod_freesync *mod_freesync, 1109bool mod_freesync_get_min_max(struct mod_freesync *mod_freesync,
1116 const struct dc_stream *stream, 1110 struct dc_stream *stream,
1117 unsigned int *min_refresh, 1111 unsigned int *min_refresh,
1118 unsigned int *max_refresh) 1112 unsigned int *max_refresh)
1119{ 1113{
@@ -1135,7 +1129,7 @@ bool mod_freesync_get_min_max(struct mod_freesync *mod_freesync,
1135} 1129}
1136 1130
1137bool mod_freesync_get_vmin_vmax(struct mod_freesync *mod_freesync, 1131bool mod_freesync_get_vmin_vmax(struct mod_freesync *mod_freesync,
1138 const struct dc_stream *stream, 1132 struct dc_stream *stream,
1139 unsigned int *vmin, 1133 unsigned int *vmin,
1140 unsigned int *vmax) 1134 unsigned int *vmax)
1141{ 1135{
@@ -1157,7 +1151,7 @@ bool mod_freesync_get_vmin_vmax(struct mod_freesync *mod_freesync,
1157} 1151}
1158 1152
1159bool mod_freesync_get_v_position(struct mod_freesync *mod_freesync, 1153bool mod_freesync_get_v_position(struct mod_freesync *mod_freesync,
1160 const struct dc_stream *stream, 1154 struct dc_stream *stream,
1161 unsigned int *nom_v_pos, 1155 unsigned int *nom_v_pos,
1162 unsigned int *v_pos) 1156 unsigned int *v_pos)
1163{ 1157{
@@ -1185,7 +1179,7 @@ bool mod_freesync_get_v_position(struct mod_freesync *mod_freesync,
1185} 1179}
1186 1180
1187void mod_freesync_notify_mode_change(struct mod_freesync *mod_freesync, 1181void mod_freesync_notify_mode_change(struct mod_freesync *mod_freesync,
1188 const struct dc_stream **streams, int num_streams) 1182 struct dc_stream **streams, int num_streams)
1189{ 1183{
1190 unsigned int stream_index, map_index; 1184 unsigned int stream_index, map_index;
1191 struct freesync_state *state; 1185 struct freesync_state *state;
@@ -1310,7 +1304,7 @@ static void update_timestamps(struct core_freesync *core_freesync,
1310} 1304}
1311 1305
1312static void apply_below_the_range(struct core_freesync *core_freesync, 1306static void apply_below_the_range(struct core_freesync *core_freesync,
1313 const struct dc_stream *stream, unsigned int map_index, 1307 struct dc_stream *stream, unsigned int map_index,
1314 unsigned int last_render_time_in_us) 1308 unsigned int last_render_time_in_us)
1315{ 1309{
1316 unsigned int inserted_frame_duration_in_us = 0; 1310 unsigned int inserted_frame_duration_in_us = 0;
@@ -1409,7 +1403,7 @@ static void apply_below_the_range(struct core_freesync *core_freesync,
1409} 1403}
1410 1404
1411static void apply_fixed_refresh(struct core_freesync *core_freesync, 1405static void apply_fixed_refresh(struct core_freesync *core_freesync,
1412 const struct dc_stream *stream, unsigned int map_index) 1406 struct dc_stream *stream, unsigned int map_index)
1413{ 1407{
1414 unsigned int vmin = 0, vmax = 0; 1408 unsigned int vmin = 0, vmax = 0;
1415 struct freesync_state *state = &core_freesync->map[map_index].state; 1409 struct freesync_state *state = &core_freesync->map[map_index].state;
@@ -1440,7 +1434,7 @@ static void apply_fixed_refresh(struct core_freesync *core_freesync,
1440} 1434}
1441 1435
1442void mod_freesync_pre_update_plane_addresses(struct mod_freesync *mod_freesync, 1436void mod_freesync_pre_update_plane_addresses(struct mod_freesync *mod_freesync,
1443 const struct dc_stream **streams, int num_streams, 1437 struct dc_stream **streams, int num_streams,
1444 unsigned int curr_time_stamp_in_us) 1438 unsigned int curr_time_stamp_in_us)
1445{ 1439{
1446 unsigned int stream_index, map_index, last_render_time_in_us = 0; 1440 unsigned int stream_index, map_index, last_render_time_in_us = 0;