diff options
author | Leo (Sunpeng) Li <sunpeng.li@amd.com> | 2017-07-25 20:51:26 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 18:15:46 -0400 |
commit | 4fa086b9b6640818c053c79d4d7104790ba76cb7 (patch) | |
tree | 8ec8380842a1642020ff8df2074677fdefc875d3 /drivers/gpu/drm/amd/display/modules/freesync/freesync.c | |
parent | 2248eb6b4f1fdd7aded987d178a95b021d3a1d91 (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.c | 60 |
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 | ||
113 | struct freesync_entity { | 113 | struct 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 | */ |
231 | static unsigned int map_index_from_stream(struct core_freesync *core_freesync, | 231 | static 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 | ||
246 | bool mod_freesync_add_stream(struct mod_freesync *mod_freesync, | 246 | bool 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 | ||
326 | bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync, | 324 | bool 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 | ||
348 | static void update_stream_freesync_context(struct core_freesync *core_freesync, | 346 | static 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 | ||
374 | static void update_stream(struct core_freesync *core_freesync, | 370 | static 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 | ||
386 | static void calc_freesync_range(struct core_freesync *core_freesync, | 380 | static 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 | ||
461 | static void calc_v_total_from_duration(const struct dc_stream *stream, | 455 | static 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 | ||
469 | static void calc_v_total_for_static_ramp(struct core_freesync *core_freesync, | 463 | static 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 | */ |
565 | static bool set_freesync_on_streams(struct core_freesync *core_freesync, | 559 | static 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 | ||
737 | void mod_freesync_handle_v_update(struct mod_freesync *mod_freesync, | 731 | void 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 | ||
847 | void mod_freesync_update_state(struct mod_freesync *mod_freesync, | 841 | void 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 | ||
937 | bool mod_freesync_get_state(struct mod_freesync *mod_freesync, | 931 | bool 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 | ||
973 | bool mod_freesync_set_user_enable(struct mod_freesync *mod_freesync, | 967 | bool 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 | ||
1025 | bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync, | 1019 | bool 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 | ||
1043 | bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync, | 1037 | bool 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 | ||
1062 | bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync, | 1056 | bool 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 | ||
1115 | bool mod_freesync_get_min_max(struct mod_freesync *mod_freesync, | 1109 | bool 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 | ||
1137 | bool mod_freesync_get_vmin_vmax(struct mod_freesync *mod_freesync, | 1131 | bool 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 | ||
1159 | bool mod_freesync_get_v_position(struct mod_freesync *mod_freesync, | 1153 | bool 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 | ||
1187 | void mod_freesync_notify_mode_change(struct mod_freesync *mod_freesync, | 1181 | void 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 | ||
1312 | static void apply_below_the_range(struct core_freesync *core_freesync, | 1306 | static 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 | ||
1411 | static void apply_fixed_refresh(struct core_freesync *core_freesync, | 1405 | static 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 | ||
1442 | void mod_freesync_pre_update_plane_addresses(struct mod_freesync *mod_freesync, | 1436 | void 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; |