aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarry Wentland <harry.wentland@amd.com>2017-07-20 11:43:32 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:15:35 -0400
commite12cfcb1d447cc937d1abc6f4aab8bbe5f88542e (patch)
tree92fc6fef16ac8e946d88ba7136607b304f7f1494
parent08b1688620426ad3e09fc7a98aabc28dda30cde6 (diff)
drm/amd/display: Roll core_surface into dc_surface
Signed-off-by: Harry Wentland <harry.wentland@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c8
-rw-r--r--drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c16
-rw-r--r--drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c26
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c73
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_resource.c42
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_stream.c4
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_surface.c44
-rw-r--r--drivers/gpu/drm/amd/display/dc/dc.h45
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c4
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h2
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c102
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c76
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/core_types.h16
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h4
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/resource.h2
16 files changed, 226 insertions, 240 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
index 44d85b77e252..b247904206ba 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -2345,7 +2345,7 @@ static void amdgpu_dm_commit_surfaces(struct drm_atomic_state *state,
2345 struct drm_plane *plane; 2345 struct drm_plane *plane;
2346 struct drm_plane_state *old_plane_state; 2346 struct drm_plane_state *old_plane_state;
2347 const struct dc_stream *dc_stream_attach; 2347 const struct dc_stream *dc_stream_attach;
2348 const struct dc_surface *dc_surfaces_constructed[MAX_SURFACES]; 2348 struct dc_surface *dc_surfaces_constructed[MAX_SURFACES];
2349 struct amdgpu_crtc *acrtc_attach = to_amdgpu_crtc(pcrtc); 2349 struct amdgpu_crtc *acrtc_attach = to_amdgpu_crtc(pcrtc);
2350 struct dm_crtc_state *acrtc_state = to_dm_crtc_state(pcrtc->state); 2350 struct dm_crtc_state *acrtc_state = to_dm_crtc_state(pcrtc->state);
2351 int planes_count = 0; 2351 int planes_count = 0;
@@ -2624,7 +2624,7 @@ void amdgpu_dm_atomic_commit_tail(
2624 struct dm_connector_state *con_old_state = 2624 struct dm_connector_state *con_old_state =
2625 to_dm_connector_state(old_conn_state); 2625 to_dm_connector_state(old_conn_state);
2626 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(con_new_state->base.crtc); 2626 struct amdgpu_crtc *acrtc = to_amdgpu_crtc(con_new_state->base.crtc);
2627 const struct dc_stream_status *status = NULL; 2627 struct dc_stream_status *status = NULL;
2628 2628
2629 /* Skip any modesets/resets */ 2629 /* Skip any modesets/resets */
2630 if (!acrtc || drm_atomic_crtc_needs_modeset(acrtc->base.state)) 2630 if (!acrtc || drm_atomic_crtc_needs_modeset(acrtc->base.state))
@@ -2649,7 +2649,7 @@ void amdgpu_dm_atomic_commit_tail(
2649 /*TODO How it works with MPO ?*/ 2649 /*TODO How it works with MPO ?*/
2650 if (!dc_commit_surfaces_to_stream( 2650 if (!dc_commit_surfaces_to_stream(
2651 dm->dc, 2651 dm->dc,
2652 (const struct dc_surface **)status->surfaces, 2652 status->surfaces,
2653 status->surface_count, 2653 status->surface_count,
2654 new_acrtc_state->stream)) 2654 new_acrtc_state->stream))
2655 dm_error("%s: Failed to update stream scaling!\n", __func__); 2655 dm_error("%s: Failed to update stream scaling!\n", __func__);
@@ -2793,7 +2793,7 @@ static uint32_t add_val_sets_surface(
2793 struct dc_validation_set *val_sets, 2793 struct dc_validation_set *val_sets,
2794 uint32_t set_count, 2794 uint32_t set_count,
2795 const struct dc_stream *stream, 2795 const struct dc_stream *stream,
2796 const struct dc_surface *surface) 2796 struct dc_surface *surface)
2797{ 2797{
2798 uint32_t i = 0, j = 0; 2798 uint32_t i = 0, j = 0;
2799 2799
diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
index 87666987429e..5ef44ff4bcf8 100644
--- a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
+++ b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
@@ -2597,12 +2597,12 @@ static void populate_initial_data(
2597 ASSERT(pipe[i].surface); 2597 ASSERT(pipe[i].surface);
2598 2598
2599 if (num_displays == 0) { 2599 if (num_displays == 0) {
2600 if (!pipe[i].surface->public.visible) 2600 if (!pipe[i].surface->visible)
2601 data->d0_underlay_mode = bw_def_underlay_only; 2601 data->d0_underlay_mode = bw_def_underlay_only;
2602 else 2602 else
2603 data->d0_underlay_mode = bw_def_blend; 2603 data->d0_underlay_mode = bw_def_blend;
2604 } else { 2604 } else {
2605 if (!pipe[i].surface->public.visible) 2605 if (!pipe[i].surface->visible)
2606 data->d1_underlay_mode = bw_def_underlay_only; 2606 data->d1_underlay_mode = bw_def_underlay_only;
2607 else 2607 else
2608 data->d1_underlay_mode = bw_def_blend; 2608 data->d1_underlay_mode = bw_def_blend;
@@ -2620,7 +2620,7 @@ static void populate_initial_data(
2620 data->v_taps[num_displays + 4] = bw_int_to_fixed(pipe[i].scl_data.taps.v_taps); 2620 data->v_taps[num_displays + 4] = bw_int_to_fixed(pipe[i].scl_data.taps.v_taps);
2621 data->h_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.horz.value); 2621 data->h_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.horz.value);
2622 data->v_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.vert.value); 2622 data->v_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.vert.value);
2623 switch (pipe[i].surface->public.rotation) { 2623 switch (pipe[i].surface->rotation) {
2624 case ROTATION_ANGLE_0: 2624 case ROTATION_ANGLE_0:
2625 data->rotation_angle[num_displays + 4] = bw_int_to_fixed(0); 2625 data->rotation_angle[num_displays + 4] = bw_int_to_fixed(0);
2626 break; 2626 break;
@@ -2636,7 +2636,7 @@ static void populate_initial_data(
2636 default: 2636 default:
2637 break; 2637 break;
2638 } 2638 }
2639 switch (pipe[i].surface->public.format) { 2639 switch (pipe[i].surface->format) {
2640 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr: 2640 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
2641 case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555: 2641 case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
2642 case SURFACE_PIXEL_FORMAT_GRPH_RGB565: 2642 case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
@@ -2670,14 +2670,14 @@ static void populate_initial_data(
2670 data->src_height[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.viewport.height); 2670 data->src_height[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.viewport.height);
2671 data->src_width[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.viewport.width); 2671 data->src_width[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.viewport.width);
2672 data->pitch_in_pixels[num_displays * 2 + j] = bw_int_to_fixed( 2672 data->pitch_in_pixels[num_displays * 2 + j] = bw_int_to_fixed(
2673 pipe[i].bottom_pipe->surface->public.plane_size.grph.surface_pitch); 2673 pipe[i].bottom_pipe->surface->plane_size.grph.surface_pitch);
2674 data->h_taps[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.taps.h_taps); 2674 data->h_taps[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.taps.h_taps);
2675 data->v_taps[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.taps.v_taps); 2675 data->v_taps[num_displays * 2 + j] = bw_int_to_fixed(pipe[i].bottom_pipe->scl_data.taps.v_taps);
2676 data->h_scale_ratio[num_displays * 2 + j] = fixed31_32_to_bw_fixed( 2676 data->h_scale_ratio[num_displays * 2 + j] = fixed31_32_to_bw_fixed(
2677 pipe[i].bottom_pipe->scl_data.ratios.horz.value); 2677 pipe[i].bottom_pipe->scl_data.ratios.horz.value);
2678 data->v_scale_ratio[num_displays * 2 + j] = fixed31_32_to_bw_fixed( 2678 data->v_scale_ratio[num_displays * 2 + j] = fixed31_32_to_bw_fixed(
2679 pipe[i].bottom_pipe->scl_data.ratios.vert.value); 2679 pipe[i].bottom_pipe->scl_data.ratios.vert.value);
2680 switch (pipe[i].bottom_pipe->surface->public.rotation) { 2680 switch (pipe[i].bottom_pipe->surface->rotation) {
2681 case ROTATION_ANGLE_0: 2681 case ROTATION_ANGLE_0:
2682 data->rotation_angle[num_displays * 2 + j] = bw_int_to_fixed(0); 2682 data->rotation_angle[num_displays * 2 + j] = bw_int_to_fixed(0);
2683 break; 2683 break;
@@ -2718,7 +2718,7 @@ static void populate_initial_data(
2718 data->v_taps[num_displays + 4] = bw_int_to_fixed(pipe[i].scl_data.taps.v_taps); 2718 data->v_taps[num_displays + 4] = bw_int_to_fixed(pipe[i].scl_data.taps.v_taps);
2719 data->h_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.horz.value); 2719 data->h_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.horz.value);
2720 data->v_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.vert.value); 2720 data->v_scale_ratio[num_displays + 4] = fixed31_32_to_bw_fixed(pipe[i].scl_data.ratios.vert.value);
2721 switch (pipe[i].surface->public.rotation) { 2721 switch (pipe[i].surface->rotation) {
2722 case ROTATION_ANGLE_0: 2722 case ROTATION_ANGLE_0:
2723 data->rotation_angle[num_displays + 4] = bw_int_to_fixed(0); 2723 data->rotation_angle[num_displays + 4] = bw_int_to_fixed(0);
2724 break; 2724 break;
@@ -2734,7 +2734,7 @@ static void populate_initial_data(
2734 default: 2734 default:
2735 break; 2735 break;
2736 } 2736 }
2737 switch (pipe[i].surface->public.format) { 2737 switch (pipe[i].surface->format) {
2738 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr: 2738 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
2739 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb: 2739 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
2740 case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555: 2740 case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
index 17b28280236f..1651b7548d40 100644
--- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
@@ -238,11 +238,11 @@ static void pipe_ctx_to_e2e_pipe_params (
238 else if (pipe->bottom_pipe != NULL && pipe->bottom_pipe->surface == pipe->surface) 238 else if (pipe->bottom_pipe != NULL && pipe->bottom_pipe->surface == pipe->surface)
239 input->src.is_hsplit = true; 239 input->src.is_hsplit = true;
240 240
241 input->src.dcc = pipe->surface->public.dcc.enable; 241 input->src.dcc = pipe->surface->dcc.enable;
242 input->src.dcc_rate = 1; 242 input->src.dcc_rate = 1;
243 input->src.meta_pitch = pipe->surface->public.dcc.grph.meta_pitch; 243 input->src.meta_pitch = pipe->surface->dcc.grph.meta_pitch;
244 input->src.source_scan = dm_horz; 244 input->src.source_scan = dm_horz;
245 input->src.sw_mode = pipe->surface->public.tiling_info.gfx9.swizzle; 245 input->src.sw_mode = pipe->surface->tiling_info.gfx9.swizzle;
246 246
247 input->src.viewport_width = pipe->scl_data.viewport.width; 247 input->src.viewport_width = pipe->scl_data.viewport.width;
248 input->src.viewport_height = pipe->scl_data.viewport.height; 248 input->src.viewport_height = pipe->scl_data.viewport.height;
@@ -251,7 +251,7 @@ static void pipe_ctx_to_e2e_pipe_params (
251 input->src.cur0_src_width = 128; /* TODO: Cursor calcs, not curently stored */ 251 input->src.cur0_src_width = 128; /* TODO: Cursor calcs, not curently stored */
252 input->src.cur0_bpp = 32; 252 input->src.cur0_bpp = 32;
253 253
254 switch (pipe->surface->public.tiling_info.gfx9.swizzle) { 254 switch (pipe->surface->tiling_info.gfx9.swizzle) {
255 /* for 4/8/16 high tiles */ 255 /* for 4/8/16 high tiles */
256 case DC_SW_LINEAR: 256 case DC_SW_LINEAR:
257 input->src.is_display_sw = 1; 257 input->src.is_display_sw = 1;
@@ -299,7 +299,7 @@ static void pipe_ctx_to_e2e_pipe_params (
299 break; 299 break;
300 } 300 }
301 301
302 switch (pipe->surface->public.rotation) { 302 switch (pipe->surface->rotation) {
303 case ROTATION_ANGLE_0: 303 case ROTATION_ANGLE_0:
304 case ROTATION_ANGLE_180: 304 case ROTATION_ANGLE_180:
305 input->src.source_scan = dm_horz; 305 input->src.source_scan = dm_horz;
@@ -314,7 +314,7 @@ static void pipe_ctx_to_e2e_pipe_params (
314 } 314 }
315 315
316 /* TODO: Fix pixel format mappings */ 316 /* TODO: Fix pixel format mappings */
317 switch (pipe->surface->public.format) { 317 switch (pipe->surface->format) {
318 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr: 318 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
319 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb: 319 case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
320 input->src.source_format = dm_420_8; 320 input->src.source_format = dm_420_8;
@@ -455,7 +455,7 @@ static void dcn_bw_calc_rq_dlg_ttu(
455 true, 455 true,
456 true, 456 true,
457 v->pte_enable == dcn_bw_yes, 457 v->pte_enable == dcn_bw_yes,
458 pipe->surface->public.flip_immediate); 458 pipe->surface->flip_immediate);
459} 459}
460 460
461static void dcn_dml_wm_override( 461static void dcn_dml_wm_override(
@@ -527,7 +527,7 @@ static void dcn_dml_wm_override(
527 true, 527 true,
528 true, 528 true,
529 v->pte_enable == dcn_bw_yes, 529 v->pte_enable == dcn_bw_yes,
530 pipe->surface->public.flip_immediate); 530 pipe->surface->flip_immediate);
531 in_idx++; 531 in_idx++;
532 } 532 }
533 dm_free(input); 533 dm_free(input);
@@ -883,7 +883,7 @@ bool dcn_validate_bandwidth(
883 v->scaler_rec_out_width[input_idx] = pipe->scl_data.recout.width; 883 v->scaler_rec_out_width[input_idx] = pipe->scl_data.recout.width;
884 v->scaler_recout_height[input_idx] = pipe->scl_data.recout.height; 884 v->scaler_recout_height[input_idx] = pipe->scl_data.recout.height;
885 if (pipe->bottom_pipe && pipe->bottom_pipe->surface == pipe->surface) { 885 if (pipe->bottom_pipe && pipe->bottom_pipe->surface == pipe->surface) {
886 if (pipe->surface->public.rotation % 2 == 0) { 886 if (pipe->surface->rotation % 2 == 0) {
887 int viewport_end = pipe->scl_data.viewport.width 887 int viewport_end = pipe->scl_data.viewport.width
888 + pipe->scl_data.viewport.x; 888 + pipe->scl_data.viewport.x;
889 int viewport_b_end = pipe->bottom_pipe->scl_data.viewport.width 889 int viewport_b_end = pipe->bottom_pipe->scl_data.viewport.width
@@ -912,17 +912,17 @@ bool dcn_validate_bandwidth(
912 + pipe->bottom_pipe->scl_data.recout.width; 912 + pipe->bottom_pipe->scl_data.recout.width;
913 } 913 }
914 914
915 v->dcc_enable[input_idx] = pipe->surface->public.dcc.enable ? dcn_bw_yes : dcn_bw_no; 915 v->dcc_enable[input_idx] = pipe->surface->dcc.enable ? dcn_bw_yes : dcn_bw_no;
916 v->source_pixel_format[input_idx] = tl_pixel_format_to_bw_defs( 916 v->source_pixel_format[input_idx] = tl_pixel_format_to_bw_defs(
917 pipe->surface->public.format); 917 pipe->surface->format);
918 v->source_surface_mode[input_idx] = tl_sw_mode_to_bw_defs( 918 v->source_surface_mode[input_idx] = tl_sw_mode_to_bw_defs(
919 pipe->surface->public.tiling_info.gfx9.swizzle); 919 pipe->surface->tiling_info.gfx9.swizzle);
920 v->lb_bit_per_pixel[input_idx] = tl_lb_bpp_to_int(pipe->scl_data.lb_params.depth); 920 v->lb_bit_per_pixel[input_idx] = tl_lb_bpp_to_int(pipe->scl_data.lb_params.depth);
921 v->override_hta_ps[input_idx] = pipe->scl_data.taps.h_taps; 921 v->override_hta_ps[input_idx] = pipe->scl_data.taps.h_taps;
922 v->override_vta_ps[input_idx] = pipe->scl_data.taps.v_taps; 922 v->override_vta_ps[input_idx] = pipe->scl_data.taps.v_taps;
923 v->override_hta_pschroma[input_idx] = pipe->scl_data.taps.h_taps_c; 923 v->override_hta_pschroma[input_idx] = pipe->scl_data.taps.h_taps_c;
924 v->override_vta_pschroma[input_idx] = pipe->scl_data.taps.v_taps_c; 924 v->override_vta_pschroma[input_idx] = pipe->scl_data.taps.v_taps_c;
925 v->source_scan[input_idx] = (pipe->surface->public.rotation % 2) ? dcn_bw_vert : dcn_bw_hor; 925 v->source_scan[input_idx] = (pipe->surface->rotation % 2) ? dcn_bw_vert : dcn_bw_hor;
926 } 926 }
927 if (v->is_line_buffer_bpp_fixed == dcn_bw_yes) 927 if (v->is_line_buffer_bpp_fixed == dcn_bw_yes)
928 v->lb_bit_per_pixel[input_idx] = v->line_buffer_fixed_bpp; 928 v->lb_bit_per_pixel[input_idx] = v->line_buffer_fixed_bpp;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index e89a2e5c8902..569310ab116d 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -946,8 +946,8 @@ static bool dc_commit_context_no_check(struct dc *dc, struct validate_context *c
946 const struct core_sink *sink = context->streams[i]->sink; 946 const struct core_sink *sink = context->streams[i]->sink;
947 947
948 for (j = 0; j < context->stream_status[i].surface_count; j++) { 948 for (j = 0; j < context->stream_status[i].surface_count; j++) {
949 struct core_surface *surface = 949 const struct dc_surface *surface =
950 DC_SURFACE_TO_CORE(context->stream_status[i].surfaces[j]); 950 context->stream_status[i].surfaces[j];
951 951
952 core_dc->hwss.apply_ctx_for_surface(core_dc, surface, context); 952 core_dc->hwss.apply_ctx_for_surface(core_dc, surface, context);
953 953
@@ -1098,7 +1098,7 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc)
1098 1098
1099bool dc_commit_surfaces_to_stream( 1099bool dc_commit_surfaces_to_stream(
1100 struct dc *dc, 1100 struct dc *dc,
1101 const struct dc_surface **new_surfaces, 1101 struct dc_surface **new_surfaces,
1102 uint8_t new_surface_count, 1102 uint8_t new_surface_count,
1103 const struct dc_stream *dc_stream) 1103 const struct dc_stream *dc_stream)
1104{ 1104{
@@ -1189,7 +1189,7 @@ static bool is_surface_in_context(
1189 for (j = 0; j < MAX_PIPES; j++) { 1189 for (j = 0; j < MAX_PIPES; j++) {
1190 const struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j]; 1190 const struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
1191 1191
1192 if (surface == &pipe_ctx->surface->public) { 1192 if (surface == pipe_ctx->surface) {
1193 return true; 1193 return true;
1194 } 1194 }
1195 } 1195 }
@@ -1422,7 +1422,7 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1422 update_surface_trace(dc, srf_updates, surface_count); 1422 update_surface_trace(dc, srf_updates, surface_count);
1423 1423
1424 if (update_type >= UPDATE_TYPE_FULL) { 1424 if (update_type >= UPDATE_TYPE_FULL) {
1425 const struct dc_surface *new_surfaces[MAX_SURFACES] = {0}; 1425 struct dc_surface *new_surfaces[MAX_SURFACES] = {0};
1426 1426
1427 for (i = 0; i < surface_count; i++) 1427 for (i = 0; i < surface_count; i++)
1428 new_surfaces[i] = srf_updates[i].surface; 1428 new_surfaces[i] = srf_updates[i].surface;
@@ -1448,46 +1448,45 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1448 1448
1449 /* save update parameters into surface */ 1449 /* save update parameters into surface */
1450 for (i = 0; i < surface_count; i++) { 1450 for (i = 0; i < surface_count; i++) {
1451 struct core_surface *surface = 1451 struct dc_surface *surface = srf_updates[i].surface;
1452 DC_SURFACE_TO_CORE(srf_updates[i].surface);
1453 1452
1454 if (srf_updates[i].flip_addr) { 1453 if (srf_updates[i].flip_addr) {
1455 surface->public.address = srf_updates[i].flip_addr->address; 1454 surface->address = srf_updates[i].flip_addr->address;
1456 surface->public.flip_immediate = 1455 surface->flip_immediate =
1457 srf_updates[i].flip_addr->flip_immediate; 1456 srf_updates[i].flip_addr->flip_immediate;
1458 } 1457 }
1459 1458
1460 if (srf_updates[i].scaling_info) { 1459 if (srf_updates[i].scaling_info) {
1461 surface->public.scaling_quality = 1460 surface->scaling_quality =
1462 srf_updates[i].scaling_info->scaling_quality; 1461 srf_updates[i].scaling_info->scaling_quality;
1463 surface->public.dst_rect = 1462 surface->dst_rect =
1464 srf_updates[i].scaling_info->dst_rect; 1463 srf_updates[i].scaling_info->dst_rect;
1465 surface->public.src_rect = 1464 surface->src_rect =
1466 srf_updates[i].scaling_info->src_rect; 1465 srf_updates[i].scaling_info->src_rect;
1467 surface->public.clip_rect = 1466 surface->clip_rect =
1468 srf_updates[i].scaling_info->clip_rect; 1467 srf_updates[i].scaling_info->clip_rect;
1469 } 1468 }
1470 1469
1471 if (srf_updates[i].plane_info) { 1470 if (srf_updates[i].plane_info) {
1472 surface->public.color_space = 1471 surface->color_space =
1473 srf_updates[i].plane_info->color_space; 1472 srf_updates[i].plane_info->color_space;
1474 surface->public.format = 1473 surface->format =
1475 srf_updates[i].plane_info->format; 1474 srf_updates[i].plane_info->format;
1476 surface->public.plane_size = 1475 surface->plane_size =
1477 srf_updates[i].plane_info->plane_size; 1476 srf_updates[i].plane_info->plane_size;
1478 surface->public.rotation = 1477 surface->rotation =
1479 srf_updates[i].plane_info->rotation; 1478 srf_updates[i].plane_info->rotation;
1480 surface->public.horizontal_mirror = 1479 surface->horizontal_mirror =
1481 srf_updates[i].plane_info->horizontal_mirror; 1480 srf_updates[i].plane_info->horizontal_mirror;
1482 surface->public.stereo_format = 1481 surface->stereo_format =
1483 srf_updates[i].plane_info->stereo_format; 1482 srf_updates[i].plane_info->stereo_format;
1484 surface->public.tiling_info = 1483 surface->tiling_info =
1485 srf_updates[i].plane_info->tiling_info; 1484 srf_updates[i].plane_info->tiling_info;
1486 surface->public.visible = 1485 surface->visible =
1487 srf_updates[i].plane_info->visible; 1486 srf_updates[i].plane_info->visible;
1488 surface->public.per_pixel_alpha = 1487 surface->per_pixel_alpha =
1489 srf_updates[i].plane_info->per_pixel_alpha; 1488 srf_updates[i].plane_info->per_pixel_alpha;
1490 surface->public.dcc = 1489 surface->dcc =
1491 srf_updates[i].plane_info->dcc; 1490 srf_updates[i].plane_info->dcc;
1492 } 1491 }
1493 1492
@@ -1503,31 +1502,31 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1503 } 1502 }
1504 1503
1505 if (srf_updates[i].gamma && 1504 if (srf_updates[i].gamma &&
1506 srf_updates[i].gamma != surface->public.gamma_correction) { 1505 srf_updates[i].gamma != surface->gamma_correction) {
1507 if (surface->public.gamma_correction != NULL) 1506 if (surface->gamma_correction != NULL)
1508 dc_gamma_release(&surface->public. 1507 dc_gamma_release(&surface->
1509 gamma_correction); 1508 gamma_correction);
1510 1509
1511 dc_gamma_retain(srf_updates[i].gamma); 1510 dc_gamma_retain(srf_updates[i].gamma);
1512 surface->public.gamma_correction = 1511 surface->gamma_correction =
1513 srf_updates[i].gamma; 1512 srf_updates[i].gamma;
1514 } 1513 }
1515 1514
1516 if (srf_updates[i].in_transfer_func && 1515 if (srf_updates[i].in_transfer_func &&
1517 srf_updates[i].in_transfer_func != surface->public.in_transfer_func) { 1516 srf_updates[i].in_transfer_func != surface->in_transfer_func) {
1518 if (surface->public.in_transfer_func != NULL) 1517 if (surface->in_transfer_func != NULL)
1519 dc_transfer_func_release( 1518 dc_transfer_func_release(
1520 surface->public. 1519 surface->
1521 in_transfer_func); 1520 in_transfer_func);
1522 1521
1523 dc_transfer_func_retain( 1522 dc_transfer_func_retain(
1524 srf_updates[i].in_transfer_func); 1523 srf_updates[i].in_transfer_func);
1525 surface->public.in_transfer_func = 1524 surface->in_transfer_func =
1526 srf_updates[i].in_transfer_func; 1525 srf_updates[i].in_transfer_func;
1527 } 1526 }
1528 1527
1529 if (srf_updates[i].hdr_static_metadata) 1528 if (srf_updates[i].hdr_static_metadata)
1530 surface->public.hdr_static_ctx = 1529 surface->hdr_static_ctx =
1531 *(srf_updates[i].hdr_static_metadata); 1530 *(srf_updates[i].hdr_static_metadata);
1532 } 1531 }
1533 1532
@@ -1543,12 +1542,10 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1543 1542
1544 if (update_type > UPDATE_TYPE_FAST) { 1543 if (update_type > UPDATE_TYPE_FAST) {
1545 for (i = 0; i < surface_count; i++) { 1544 for (i = 0; i < surface_count; i++) {
1546 struct core_surface *surface = DC_SURFACE_TO_CORE(srf_updates[i].surface);
1547
1548 for (j = 0; j < core_dc->res_pool->pipe_count; j++) { 1545 for (j = 0; j < core_dc->res_pool->pipe_count; j++) {
1549 struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j]; 1546 struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
1550 1547
1551 if (pipe_ctx->surface != surface) 1548 if (pipe_ctx->surface != srf_updates[i].surface)
1552 continue; 1549 continue;
1553 1550
1554 core_dc->hwss.wait_for_mpcc_disconnect(core_dc->res_pool, pipe_ctx); 1551 core_dc->hwss.wait_for_mpcc_disconnect(core_dc->res_pool, pipe_ctx);
@@ -1561,7 +1558,7 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1561 1558
1562 /* Lock pipes for provided surfaces, or all active if full update*/ 1559 /* Lock pipes for provided surfaces, or all active if full update*/
1563 for (i = 0; i < surface_count; i++) { 1560 for (i = 0; i < surface_count; i++) {
1564 struct core_surface *surface = DC_SURFACE_TO_CORE(srf_updates[i].surface); 1561 struct dc_surface *surface = srf_updates[i].surface;
1565 1562
1566 for (j = 0; j < core_dc->res_pool->pipe_count; j++) { 1563 for (j = 0; j < core_dc->res_pool->pipe_count; j++) {
1567 struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j]; 1564 struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
@@ -1613,7 +1610,7 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1613 1610
1614 /* Perform requested Updates */ 1611 /* Perform requested Updates */
1615 for (i = 0; i < surface_count; i++) { 1612 for (i = 0; i < surface_count; i++) {
1616 struct core_surface *surface = DC_SURFACE_TO_CORE(srf_updates[i].surface); 1613 struct dc_surface *surface = srf_updates[i].surface;
1617 1614
1618 if (update_type == UPDATE_TYPE_MED) 1615 if (update_type == UPDATE_TYPE_MED)
1619 core_dc->hwss.apply_ctx_for_surface( 1616 core_dc->hwss.apply_ctx_for_surface(
@@ -1654,7 +1651,7 @@ void dc_update_surfaces_and_stream(struct dc *dc,
1654 1651
1655 for (j = 0; j < surface_count; j++) { 1652 for (j = 0; j < surface_count; j++) {
1656 if (update_type != UPDATE_TYPE_FULL && 1653 if (update_type != UPDATE_TYPE_FULL &&
1657 srf_updates[j].surface != &pipe_ctx->surface->public) 1654 srf_updates[j].surface != pipe_ctx->surface)
1658 continue; 1655 continue;
1659 if (!pipe_ctx->surface || pipe_ctx->top_pipe) 1656 if (!pipe_ctx->surface || pipe_ctx->top_pipe)
1660 continue; 1657 continue;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index 5acc5cdcda16..303c95432d5b 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -428,7 +428,7 @@ static void rect_swap_helper(struct rect *rect)
428 428
429static void calculate_viewport(struct pipe_ctx *pipe_ctx) 429static void calculate_viewport(struct pipe_ctx *pipe_ctx)
430{ 430{
431 const struct dc_surface *surface = &pipe_ctx->surface->public; 431 const struct dc_surface *surface = pipe_ctx->surface;
432 const struct dc_stream *stream = &pipe_ctx->stream->public; 432 const struct dc_stream *stream = &pipe_ctx->stream->public;
433 struct scaler_data *data = &pipe_ctx->scl_data; 433 struct scaler_data *data = &pipe_ctx->scl_data;
434 struct rect surf_src = surface->src_rect; 434 struct rect surf_src = surface->src_rect;
@@ -446,8 +446,8 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx)
446 sec_split = false; 446 sec_split = false;
447 } 447 }
448 448
449 if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || 449 if (pipe_ctx->surface->rotation == ROTATION_ANGLE_90 ||
450 pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) 450 pipe_ctx->surface->rotation == ROTATION_ANGLE_270)
451 rect_swap_helper(&surf_src); 451 rect_swap_helper(&surf_src);
452 452
453 /* The actual clip is an intersection between stream 453 /* The actual clip is an intersection between stream
@@ -527,14 +527,14 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx)
527 527
528static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip) 528static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip)
529{ 529{
530 const struct dc_surface *surface = &pipe_ctx->surface->public; 530 const struct dc_surface *surface = pipe_ctx->surface;
531 struct core_stream *stream = pipe_ctx->stream; 531 struct core_stream *stream = pipe_ctx->stream;
532 struct rect surf_src = surface->src_rect; 532 struct rect surf_src = surface->src_rect;
533 struct rect surf_clip = surface->clip_rect; 533 struct rect surf_clip = surface->clip_rect;
534 int recout_full_x, recout_full_y; 534 int recout_full_x, recout_full_y;
535 535
536 if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || 536 if (pipe_ctx->surface->rotation == ROTATION_ANGLE_90 ||
537 pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) 537 pipe_ctx->surface->rotation == ROTATION_ANGLE_270)
538 rect_swap_helper(&surf_src); 538 rect_swap_helper(&surf_src);
539 539
540 pipe_ctx->scl_data.recout.x = stream->public.dst.x; 540 pipe_ctx->scl_data.recout.x = stream->public.dst.x;
@@ -605,7 +605,7 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip
605 605
606static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx) 606static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx)
607{ 607{
608 const struct dc_surface *surface = &pipe_ctx->surface->public; 608 const struct dc_surface *surface = pipe_ctx->surface;
609 struct core_stream *stream = pipe_ctx->stream; 609 struct core_stream *stream = pipe_ctx->stream;
610 struct rect surf_src = surface->src_rect; 610 struct rect surf_src = surface->src_rect;
611 const int in_w = stream->public.src.width; 611 const int in_w = stream->public.src.width;
@@ -613,8 +613,8 @@ static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx)
613 const int out_w = stream->public.dst.width; 613 const int out_w = stream->public.dst.width;
614 const int out_h = stream->public.dst.height; 614 const int out_h = stream->public.dst.height;
615 615
616 if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || 616 if (pipe_ctx->surface->rotation == ROTATION_ANGLE_90 ||
617 pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) 617 pipe_ctx->surface->rotation == ROTATION_ANGLE_270)
618 rect_swap_helper(&surf_src); 618 rect_swap_helper(&surf_src);
619 619
620 pipe_ctx->scl_data.ratios.horz = dal_fixed31_32_from_fraction( 620 pipe_ctx->scl_data.ratios.horz = dal_fixed31_32_from_fraction(
@@ -647,13 +647,13 @@ static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx)
647static void calculate_inits_and_adj_vp(struct pipe_ctx *pipe_ctx, struct view *recout_skip) 647static void calculate_inits_and_adj_vp(struct pipe_ctx *pipe_ctx, struct view *recout_skip)
648{ 648{
649 struct scaler_data *data = &pipe_ctx->scl_data; 649 struct scaler_data *data = &pipe_ctx->scl_data;
650 struct rect src = pipe_ctx->surface->public.src_rect; 650 struct rect src = pipe_ctx->surface->src_rect;
651 int vpc_div = (data->format == PIXEL_FORMAT_420BPP8 651 int vpc_div = (data->format == PIXEL_FORMAT_420BPP8
652 || data->format == PIXEL_FORMAT_420BPP10) ? 2 : 1; 652 || data->format == PIXEL_FORMAT_420BPP10) ? 2 : 1;
653 653
654 654
655 if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || 655 if (pipe_ctx->surface->rotation == ROTATION_ANGLE_90 ||
656 pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) { 656 pipe_ctx->surface->rotation == ROTATION_ANGLE_270) {
657 rect_swap_helper(&src); 657 rect_swap_helper(&src);
658 rect_swap_helper(&data->viewport_c); 658 rect_swap_helper(&data->viewport_c);
659 rect_swap_helper(&data->viewport); 659 rect_swap_helper(&data->viewport);
@@ -803,8 +803,8 @@ static void calculate_inits_and_adj_vp(struct pipe_ctx *pipe_ctx, struct view *r
803 data->inits.v_bot = dal_fixed31_32_add(data->inits.v, data->ratios.vert); 803 data->inits.v_bot = dal_fixed31_32_add(data->inits.v, data->ratios.vert);
804 data->inits.v_c_bot = dal_fixed31_32_add(data->inits.v_c, data->ratios.vert_c); 804 data->inits.v_c_bot = dal_fixed31_32_add(data->inits.v_c, data->ratios.vert_c);
805 805
806 if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || 806 if (pipe_ctx->surface->rotation == ROTATION_ANGLE_90 ||
807 pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) { 807 pipe_ctx->surface->rotation == ROTATION_ANGLE_270) {
808 rect_swap_helper(&data->viewport_c); 808 rect_swap_helper(&data->viewport_c);
809 rect_swap_helper(&data->viewport); 809 rect_swap_helper(&data->viewport);
810 } 810 }
@@ -812,7 +812,7 @@ static void calculate_inits_and_adj_vp(struct pipe_ctx *pipe_ctx, struct view *r
812 812
813bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx) 813bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)
814{ 814{
815 const struct dc_surface *surface = &pipe_ctx->surface->public; 815 const struct dc_surface *surface = pipe_ctx->surface;
816 struct dc_crtc_timing *timing = &pipe_ctx->stream->public.timing; 816 struct dc_crtc_timing *timing = &pipe_ctx->stream->public.timing;
817 struct view recout_skip = { 0 }; 817 struct view recout_skip = { 0 };
818 bool res = false; 818 bool res = false;
@@ -822,7 +822,7 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)
822 * Inits require viewport, taps, ratios and recout of split pipe 822 * Inits require viewport, taps, ratios and recout of split pipe
823 */ 823 */
824 pipe_ctx->scl_data.format = convert_pixel_format_to_dalsurface( 824 pipe_ctx->scl_data.format = convert_pixel_format_to_dalsurface(
825 pipe_ctx->surface->public.format); 825 pipe_ctx->surface->format);
826 826
827 calculate_scaling_ratios(pipe_ctx); 827 calculate_scaling_ratios(pipe_ctx);
828 828
@@ -1029,7 +1029,7 @@ static int acquire_first_split_pipe(
1029#endif 1029#endif
1030 1030
1031bool resource_attach_surfaces_to_context( 1031bool resource_attach_surfaces_to_context(
1032 const struct dc_surface * const *surfaces, 1032 struct dc_surface * const *surfaces,
1033 int surface_count, 1033 int surface_count,
1034 const struct dc_stream *dc_stream, 1034 const struct dc_stream *dc_stream,
1035 struct validate_context *context, 1035 struct validate_context *context,
@@ -1077,7 +1077,7 @@ bool resource_attach_surfaces_to_context(
1077 1077
1078 tail_pipe = NULL; 1078 tail_pipe = NULL;
1079 for (i = 0; i < surface_count; i++) { 1079 for (i = 0; i < surface_count; i++) {
1080 struct core_surface *surface = DC_SURFACE_TO_CORE(surfaces[i]); 1080 struct dc_surface *surface = surfaces[i];
1081 struct pipe_ctx *free_pipe = acquire_free_pipe_for_stream( 1081 struct pipe_ctx *free_pipe = acquire_free_pipe_for_stream(
1082 context, pool, dc_stream); 1082 context, pool, dc_stream);
1083 1083
@@ -1358,7 +1358,7 @@ bool resource_is_stream_unchanged(
1358static void copy_pipe_ctx( 1358static void copy_pipe_ctx(
1359 const struct pipe_ctx *from_pipe_ctx, struct pipe_ctx *to_pipe_ctx) 1359 const struct pipe_ctx *from_pipe_ctx, struct pipe_ctx *to_pipe_ctx)
1360{ 1360{
1361 struct core_surface *surface = to_pipe_ctx->surface; 1361 struct dc_surface *surface = to_pipe_ctx->surface;
1362 struct core_stream *stream = to_pipe_ctx->stream; 1362 struct core_stream *stream = to_pipe_ctx->stream;
1363 1363
1364 *to_pipe_ctx = *from_pipe_ctx; 1364 *to_pipe_ctx = *from_pipe_ctx;
@@ -2072,7 +2072,7 @@ static void set_spd_info_packet(
2072 2072
2073static void set_hdr_static_info_packet( 2073static void set_hdr_static_info_packet(
2074 struct encoder_info_packet *info_packet, 2074 struct encoder_info_packet *info_packet,
2075 struct core_surface *surface, 2075 struct dc_surface *surface,
2076 struct core_stream *stream) 2076 struct core_stream *stream)
2077{ 2077{
2078 uint16_t i = 0; 2078 uint16_t i = 0;
@@ -2083,7 +2083,7 @@ static void set_hdr_static_info_packet(
2083 if (!surface) 2083 if (!surface)
2084 return; 2084 return;
2085 2085
2086 hdr_metadata = surface->public.hdr_static_ctx; 2086 hdr_metadata = surface->hdr_static_ctx;
2087 2087
2088 if (!hdr_metadata.hdr_supported) 2088 if (!hdr_metadata.hdr_supported)
2089 return; 2089 return;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
index ead7b63caab7..73712fd6f64a 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
@@ -157,7 +157,7 @@ alloc_fail:
157 return NULL; 157 return NULL;
158} 158}
159 159
160const struct dc_stream_status *dc_stream_get_status( 160struct dc_stream_status *dc_stream_get_status(
161 const struct dc_stream *dc_stream) 161 const struct dc_stream *dc_stream)
162{ 162{
163 uint8_t i; 163 uint8_t i;
@@ -252,7 +252,7 @@ bool dc_stream_set_cursor_position(
252 !pipe_ctx->ipp || !pipe_ctx->surface) 252 !pipe_ctx->ipp || !pipe_ctx->surface)
253 continue; 253 continue;
254 254
255 if (pipe_ctx->surface->public.address.type 255 if (pipe_ctx->surface->address.type
256 == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE) 256 == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
257 pos_cpy.enable = false; 257 pos_cpy.enable = false;
258 258
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
index 3784358d35ef..9a21ea71f4b3 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
@@ -47,33 +47,32 @@ struct gamma {
47/******************************************************************************* 47/*******************************************************************************
48 * Private functions 48 * Private functions
49 ******************************************************************************/ 49 ******************************************************************************/
50static bool construct(struct dc_context *ctx, struct core_surface *surface) 50static bool construct(struct dc_context *ctx, struct dc_surface *surface)
51{ 51{
52 surface->ctx = ctx; 52 surface->ctx = ctx;
53 memset(&surface->public.hdr_static_ctx, 53 memset(&surface->hdr_static_ctx,
54 0, sizeof(struct dc_hdr_static_metadata)); 54 0, sizeof(struct dc_hdr_static_metadata));
55 return true; 55 return true;
56} 56}
57 57
58static void destruct(struct core_surface *surface) 58static void destruct(struct dc_surface *surface)
59{ 59{
60 if (surface->public.gamma_correction != NULL) { 60 if (surface->gamma_correction != NULL) {
61 dc_gamma_release(&surface->public.gamma_correction); 61 dc_gamma_release(&surface->gamma_correction);
62 } 62 }
63 if (surface->public.in_transfer_func != NULL) { 63 if (surface->in_transfer_func != NULL) {
64 dc_transfer_func_release( 64 dc_transfer_func_release(
65 surface->public.in_transfer_func); 65 surface->in_transfer_func);
66 surface->public.in_transfer_func = NULL; 66 surface->in_transfer_func = NULL;
67 } 67 }
68} 68}
69 69
70/******************************************************************************* 70/*******************************************************************************
71 * Public functions 71 * Public functions
72 ******************************************************************************/ 72 ******************************************************************************/
73void enable_surface_flip_reporting(struct dc_surface *dc_surface, 73void enable_surface_flip_reporting(struct dc_surface *surface,
74 uint32_t controller_id) 74 uint32_t controller_id)
75{ 75{
76 struct core_surface *surface = DC_SURFACE_TO_CORE(dc_surface);
77 surface->irq_source = controller_id + DC_IRQ_SOURCE_PFLIP1 - 1; 76 surface->irq_source = controller_id + DC_IRQ_SOURCE_PFLIP1 - 1;
78 /*register_flip_interrupt(surface);*/ 77 /*register_flip_interrupt(surface);*/
79} 78}
@@ -82,7 +81,7 @@ struct dc_surface *dc_create_surface(const struct dc *dc)
82{ 81{
83 struct core_dc *core_dc = DC_TO_CORE(dc); 82 struct core_dc *core_dc = DC_TO_CORE(dc);
84 83
85 struct core_surface *surface = dm_alloc(sizeof(*surface)); 84 struct dc_surface *surface = dm_alloc(sizeof(*surface));
86 85
87 if (NULL == surface) 86 if (NULL == surface)
88 goto alloc_fail; 87 goto alloc_fail;
@@ -92,7 +91,7 @@ struct dc_surface *dc_create_surface(const struct dc *dc)
92 91
93 ++surface->ref_count; 92 ++surface->ref_count;
94 93
95 return &surface->public; 94 return surface;
96 95
97construct_fail: 96construct_fail:
98 dm_free(surface); 97 dm_free(surface);
@@ -104,20 +103,19 @@ alloc_fail:
104const struct dc_surface_status *dc_surface_get_status( 103const struct dc_surface_status *dc_surface_get_status(
105 const struct dc_surface *dc_surface) 104 const struct dc_surface *dc_surface)
106{ 105{
107 struct dc_surface_status *surface_status; 106 const struct dc_surface_status *surface_status;
108 struct core_surface *core_surface = DC_SURFACE_TO_CORE(dc_surface);
109 struct core_dc *core_dc; 107 struct core_dc *core_dc;
110 int i; 108 int i;
111 109
112 if (!dc_surface || 110 if (!dc_surface ||
113 !core_surface->ctx || 111 !dc_surface->ctx ||
114 !core_surface->ctx->dc) { 112 !dc_surface->ctx->dc) {
115 ASSERT(0); 113 ASSERT(0);
116 return NULL; /* remove this if above assert never hit */ 114 return NULL; /* remove this if above assert never hit */
117 } 115 }
118 116
119 surface_status = &core_surface->status; 117 surface_status = &dc_surface->status;
120 core_dc = DC_TO_CORE(core_surface->ctx->dc); 118 core_dc = DC_TO_CORE(dc_surface->ctx->dc);
121 119
122 if (core_dc->current_context == NULL) 120 if (core_dc->current_context == NULL)
123 return NULL; 121 return NULL;
@@ -126,7 +124,7 @@ const struct dc_surface_status *dc_surface_get_status(
126 struct pipe_ctx *pipe_ctx = 124 struct pipe_ctx *pipe_ctx =
127 &core_dc->current_context->res_ctx.pipe_ctx[i]; 125 &core_dc->current_context->res_ctx.pipe_ctx[i];
128 126
129 if (pipe_ctx->surface != core_surface) 127 if (pipe_ctx->surface != dc_surface)
130 continue; 128 continue;
131 129
132 core_dc->hwss.update_pending_status(pipe_ctx); 130 core_dc->hwss.update_pending_status(pipe_ctx);
@@ -135,18 +133,14 @@ const struct dc_surface_status *dc_surface_get_status(
135 return surface_status; 133 return surface_status;
136} 134}
137 135
138void dc_surface_retain(const struct dc_surface *dc_surface) 136void dc_surface_retain(struct dc_surface *surface)
139{ 137{
140 struct core_surface *surface = DC_SURFACE_TO_CORE(dc_surface);
141
142 ASSERT(surface->ref_count > 0); 138 ASSERT(surface->ref_count > 0);
143 ++surface->ref_count; 139 ++surface->ref_count;
144} 140}
145 141
146void dc_surface_release(const struct dc_surface *dc_surface) 142void dc_surface_release(struct dc_surface *surface)
147{ 143{
148 struct core_surface *surface = DC_SURFACE_TO_CORE(dc_surface);
149
150 ASSERT(surface->ref_count > 0); 144 ASSERT(surface->ref_count > 0);
151 --surface->ref_count; 145 --surface->ref_count;
152 146
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
index ee04c3562081..b14bad10db97 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -299,6 +299,18 @@ struct dc_transfer_func {
299 int ref_count; 299 int ref_count;
300}; 300};
301 301
302/*
303 * This structure is filled in by dc_surface_get_status and contains
304 * the last requested address and the currently active address so the called
305 * can determine if there are any outstanding flips
306 */
307struct dc_surface_status {
308 struct dc_plane_address requested_address;
309 struct dc_plane_address current_address;
310 bool is_flip_pending;
311 bool is_right_eye;
312};
313
302struct dc_surface { 314struct dc_surface {
303 struct dc_plane_address address; 315 struct dc_plane_address address;
304 316
@@ -325,6 +337,14 @@ struct dc_surface {
325 bool visible; 337 bool visible;
326 bool flip_immediate; 338 bool flip_immediate;
327 bool horizontal_mirror; 339 bool horizontal_mirror;
340
341 /* private to DC core */
342 struct dc_surface_status status;
343 struct dc_context *ctx;
344
345 /* private to dc_surface.c */
346 enum dc_irq_source irq_source;
347 int ref_count;
328}; 348};
329 349
330struct dc_plane_info { 350struct dc_plane_info {
@@ -348,7 +368,7 @@ struct dc_scaling_info {
348}; 368};
349 369
350struct dc_surface_update { 370struct dc_surface_update {
351 const struct dc_surface *surface; 371 struct dc_surface *surface;
352 372
353 /* isr safe update parameters. null means no updates */ 373 /* isr safe update parameters. null means no updates */
354 struct dc_flip_addrs *flip_addr; 374 struct dc_flip_addrs *flip_addr;
@@ -362,17 +382,6 @@ struct dc_surface_update {
362 struct dc_transfer_func *in_transfer_func; 382 struct dc_transfer_func *in_transfer_func;
363 struct dc_hdr_static_metadata *hdr_static_metadata; 383 struct dc_hdr_static_metadata *hdr_static_metadata;
364}; 384};
365/*
366 * This structure is filled in by dc_surface_get_status and contains
367 * the last requested address and the currently active address so the called
368 * can determine if there are any outstanding flips
369 */
370struct dc_surface_status {
371 struct dc_plane_address requested_address;
372 struct dc_plane_address current_address;
373 bool is_flip_pending;
374 bool is_right_eye;
375};
376 385
377/* 386/*
378 * Create a new surface with default parameters; 387 * Create a new surface with default parameters;
@@ -381,8 +390,8 @@ struct dc_surface *dc_create_surface(const struct dc *dc);
381const struct dc_surface_status *dc_surface_get_status( 390const struct dc_surface_status *dc_surface_get_status(
382 const struct dc_surface *dc_surface); 391 const struct dc_surface *dc_surface);
383 392
384void dc_surface_retain(const struct dc_surface *dc_surface); 393void dc_surface_retain(struct dc_surface *dc_surface);
385void dc_surface_release(const struct dc_surface *dc_surface); 394void dc_surface_release(struct dc_surface *dc_surface);
386 395
387void dc_gamma_retain(const struct dc_gamma *dc_gamma); 396void dc_gamma_retain(const struct dc_gamma *dc_gamma);
388void dc_gamma_release(const struct dc_gamma **dc_gamma); 397void dc_gamma_release(const struct dc_gamma **dc_gamma);
@@ -416,7 +425,7 @@ struct dc_flip_addrs {
416 425
417bool dc_commit_surfaces_to_stream( 426bool dc_commit_surfaces_to_stream(
418 struct dc *dc, 427 struct dc *dc,
419 const struct dc_surface **dc_surfaces, 428 struct dc_surface **dc_surfaces,
420 uint8_t surface_count, 429 uint8_t surface_count,
421 const struct dc_stream *stream); 430 const struct dc_stream *stream);
422 431
@@ -545,7 +554,7 @@ bool dc_stream_get_scanoutpos(const struct dc_stream *stream,
545 */ 554 */
546struct dc_validation_set { 555struct dc_validation_set {
547 const struct dc_stream *stream; 556 const struct dc_stream *stream;
548 const struct dc_surface *surfaces[MAX_SURFACES]; 557 struct dc_surface *surfaces[MAX_SURFACES];
549 uint8_t surface_count; 558 uint8_t surface_count;
550}; 559};
551 560
@@ -627,7 +636,7 @@ void dc_stream_release(const struct dc_stream *dc_stream);
627struct dc_stream_status { 636struct dc_stream_status {
628 int primary_otg_inst; 637 int primary_otg_inst;
629 int surface_count; 638 int surface_count;
630 const struct dc_surface *surfaces[MAX_SURFACE_NUM]; 639 struct dc_surface *surfaces[MAX_SURFACE_NUM];
631 640
632 /* 641 /*
633 * link this stream passes through 642 * link this stream passes through
@@ -635,7 +644,7 @@ struct dc_stream_status {
635 const struct dc_link *link; 644 const struct dc_link *link;
636}; 645};
637 646
638const struct dc_stream_status *dc_stream_get_status( 647struct dc_stream_status *dc_stream_get_status(
639 const struct dc_stream *dc_stream); 648 const struct dc_stream *dc_stream);
640 649
641enum surface_update_type dc_check_update_surfaces_for_stream( 650enum surface_update_type dc_check_update_surfaces_for_stream(
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
index cc3178acfc54..a8c254f66c98 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.c
@@ -193,9 +193,9 @@ void dce_crtc_switch_to_clk_src(struct dce_hwseq *hws,
193} 193}
194 194
195/* Only use LUT for 8 bit formats */ 195/* Only use LUT for 8 bit formats */
196bool dce_use_lut(const struct core_surface *surface) 196bool dce_use_lut(const struct dc_surface *surface)
197{ 197{
198 switch (surface->public.format) { 198 switch (surface->format) {
199 case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888: 199 case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
200 case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888: 200 case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
201 return true; 201 return true;
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
index d62fc526783f..ade7507e99c7 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
@@ -552,5 +552,5 @@ void dce_crtc_switch_to_clk_src(struct dce_hwseq *hws,
552 struct clock_source *clk_src, 552 struct clock_source *clk_src,
553 unsigned int tg_inst); 553 unsigned int tg_inst);
554 554
555bool dce_use_lut(const struct core_surface *surface); 555bool dce_use_lut(const struct dc_surface *surface);
556#endif /*__DCE_HWSEQ_H__*/ 556#endif /*__DCE_HWSEQ_H__*/
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
index efba8d7964eb..cf6bf2098b7c 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
@@ -215,11 +215,11 @@ static bool dce110_enable_display_power_gating(
215} 215}
216 216
217static void build_prescale_params(struct ipp_prescale_params *prescale_params, 217static void build_prescale_params(struct ipp_prescale_params *prescale_params,
218 const struct core_surface *surface) 218 const struct dc_surface *surface)
219{ 219{
220 prescale_params->mode = IPP_PRESCALE_MODE_FIXED_UNSIGNED; 220 prescale_params->mode = IPP_PRESCALE_MODE_FIXED_UNSIGNED;
221 221
222 switch (surface->public.format) { 222 switch (surface->format) {
223 case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888: 223 case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
224 case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888: 224 case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
225 prescale_params->scale = 0x2020; 225 prescale_params->scale = 0x2020;
@@ -240,7 +240,7 @@ static void build_prescale_params(struct ipp_prescale_params *prescale_params,
240 240
241static bool dce110_set_input_transfer_func( 241static bool dce110_set_input_transfer_func(
242 struct pipe_ctx *pipe_ctx, 242 struct pipe_ctx *pipe_ctx,
243 const struct core_surface *surface) 243 const struct dc_surface *surface)
244{ 244{
245 struct input_pixel_processor *ipp = pipe_ctx->ipp; 245 struct input_pixel_processor *ipp = pipe_ctx->ipp;
246 const struct dc_transfer_func *tf = NULL; 246 const struct dc_transfer_func *tf = NULL;
@@ -250,14 +250,14 @@ static bool dce110_set_input_transfer_func(
250 if (ipp == NULL) 250 if (ipp == NULL)
251 return false; 251 return false;
252 252
253 if (surface->public.in_transfer_func) 253 if (surface->in_transfer_func)
254 tf = surface->public.in_transfer_func; 254 tf = surface->in_transfer_func;
255 255
256 build_prescale_params(&prescale_params, surface); 256 build_prescale_params(&prescale_params, surface);
257 ipp->funcs->ipp_program_prescale(ipp, &prescale_params); 257 ipp->funcs->ipp_program_prescale(ipp, &prescale_params);
258 258
259 if (surface->public.gamma_correction && dce_use_lut(surface)) 259 if (surface->gamma_correction && dce_use_lut(surface))
260 ipp->funcs->ipp_program_input_lut(ipp, surface->public.gamma_correction); 260 ipp->funcs->ipp_program_input_lut(ipp, surface->gamma_correction);
261 261
262 if (tf == NULL) { 262 if (tf == NULL) {
263 /* Default case if no input transfer function specified */ 263 /* Default case if no input transfer function specified */
@@ -1857,7 +1857,7 @@ static void set_default_colors(struct pipe_ctx *pipe_ctx)
1857 default_adjust.in_color_space = COLOR_SPACE_SRGB; 1857 default_adjust.in_color_space = COLOR_SPACE_SRGB;
1858 else 1858 else
1859 default_adjust.in_color_space = 1859 default_adjust.in_color_space =
1860 pipe_ctx->surface->public.color_space; 1860 pipe_ctx->surface->color_space;
1861 if (pipe_ctx->stream == NULL) 1861 if (pipe_ctx->stream == NULL)
1862 default_adjust.out_color_space = COLOR_SPACE_SRGB; 1862 default_adjust.out_color_space = COLOR_SPACE_SRGB;
1863 else 1863 else
@@ -1908,16 +1908,16 @@ static void program_surface_visibility(const struct core_dc *dc,
1908 /* For now we are supporting only two pipes */ 1908 /* For now we are supporting only two pipes */
1909 ASSERT(pipe_ctx->bottom_pipe->bottom_pipe == NULL); 1909 ASSERT(pipe_ctx->bottom_pipe->bottom_pipe == NULL);
1910 1910
1911 if (pipe_ctx->bottom_pipe->surface->public.visible) { 1911 if (pipe_ctx->bottom_pipe->surface->visible) {
1912 if (pipe_ctx->surface->public.visible) 1912 if (pipe_ctx->surface->visible)
1913 blender_mode = BLND_MODE_BLENDING; 1913 blender_mode = BLND_MODE_BLENDING;
1914 else 1914 else
1915 blender_mode = BLND_MODE_OTHER_PIPE; 1915 blender_mode = BLND_MODE_OTHER_PIPE;
1916 1916
1917 } else if (!pipe_ctx->surface->public.visible) 1917 } else if (!pipe_ctx->surface->visible)
1918 blank_target = true; 1918 blank_target = true;
1919 1919
1920 } else if (!pipe_ctx->surface->public.visible) 1920 } else if (!pipe_ctx->surface->visible)
1921 blank_target = true; 1921 blank_target = true;
1922 1922
1923 dce_set_blender_mode(dc->hwseq, pipe_ctx->pipe_idx, blender_mode); 1923 dce_set_blender_mode(dc->hwseq, pipe_ctx->pipe_idx, blender_mode);
@@ -1975,7 +1975,7 @@ static void set_plane_config(
1975 struct resource_context *res_ctx) 1975 struct resource_context *res_ctx)
1976{ 1976{
1977 struct mem_input *mi = pipe_ctx->mi; 1977 struct mem_input *mi = pipe_ctx->mi;
1978 struct core_surface *surface = pipe_ctx->surface; 1978 struct dc_surface *surface = pipe_ctx->surface;
1979 struct xfm_grph_csc_adjustment adjust; 1979 struct xfm_grph_csc_adjustment adjust;
1980 struct out_csc_color_matrix tbl_entry; 1980 struct out_csc_color_matrix tbl_entry;
1981 unsigned int i; 1981 unsigned int i;
@@ -2040,42 +2040,42 @@ static void set_plane_config(
2040 2040
2041 mi->funcs->mem_input_program_surface_config( 2041 mi->funcs->mem_input_program_surface_config(
2042 mi, 2042 mi,
2043 surface->public.format, 2043 surface->format,
2044 &surface->public.tiling_info, 2044 &surface->tiling_info,
2045 &surface->public.plane_size, 2045 &surface->plane_size,
2046 surface->public.rotation, 2046 surface->rotation,
2047 NULL, 2047 NULL,
2048 false); 2048 false);
2049 if (mi->funcs->set_blank) 2049 if (mi->funcs->set_blank)
2050 mi->funcs->set_blank(mi, pipe_ctx->surface->public.visible); 2050 mi->funcs->set_blank(mi, pipe_ctx->surface->visible);
2051 2051
2052 if (dc->public.config.gpu_vm_support) 2052 if (dc->public.config.gpu_vm_support)
2053 mi->funcs->mem_input_program_pte_vm( 2053 mi->funcs->mem_input_program_pte_vm(
2054 pipe_ctx->mi, 2054 pipe_ctx->mi,
2055 surface->public.format, 2055 surface->format,
2056 &surface->public.tiling_info, 2056 &surface->tiling_info,
2057 surface->public.rotation); 2057 surface->rotation);
2058} 2058}
2059 2059
2060static void update_plane_addr(const struct core_dc *dc, 2060static void update_plane_addr(const struct core_dc *dc,
2061 struct pipe_ctx *pipe_ctx) 2061 struct pipe_ctx *pipe_ctx)
2062{ 2062{
2063 struct core_surface *surface = pipe_ctx->surface; 2063 struct dc_surface *surface = pipe_ctx->surface;
2064 2064
2065 if (surface == NULL) 2065 if (surface == NULL)
2066 return; 2066 return;
2067 2067
2068 pipe_ctx->mi->funcs->mem_input_program_surface_flip_and_addr( 2068 pipe_ctx->mi->funcs->mem_input_program_surface_flip_and_addr(
2069 pipe_ctx->mi, 2069 pipe_ctx->mi,
2070 &surface->public.address, 2070 &surface->address,
2071 surface->public.flip_immediate); 2071 surface->flip_immediate);
2072 2072
2073 surface->status.requested_address = surface->public.address; 2073 surface->status.requested_address = surface->address;
2074} 2074}
2075 2075
2076void dce110_update_pending_status(struct pipe_ctx *pipe_ctx) 2076void dce110_update_pending_status(struct pipe_ctx *pipe_ctx)
2077{ 2077{
2078 struct core_surface *surface = pipe_ctx->surface; 2078 struct dc_surface *surface = pipe_ctx->surface;
2079 2079
2080 if (surface == NULL) 2080 if (surface == NULL)
2081 return; 2081 return;
@@ -2084,7 +2084,7 @@ void dce110_update_pending_status(struct pipe_ctx *pipe_ctx)
2084 pipe_ctx->mi->funcs->mem_input_is_flip_pending( 2084 pipe_ctx->mi->funcs->mem_input_is_flip_pending(
2085 pipe_ctx->mi); 2085 pipe_ctx->mi);
2086 2086
2087 if (surface->status.is_flip_pending && !surface->public.visible) 2087 if (surface->status.is_flip_pending && !surface->visible)
2088 pipe_ctx->mi->current_address = pipe_ctx->mi->request_address; 2088 pipe_ctx->mi->current_address = pipe_ctx->mi->request_address;
2089 2089
2090 surface->status.current_address = pipe_ctx->mi->current_address; 2090 surface->status.current_address = pipe_ctx->mi->current_address;
@@ -2425,7 +2425,7 @@ static void dce110_program_front_end_for_pipe(
2425{ 2425{
2426 struct mem_input *mi = pipe_ctx->mi; 2426 struct mem_input *mi = pipe_ctx->mi;
2427 struct pipe_ctx *old_pipe = NULL; 2427 struct pipe_ctx *old_pipe = NULL;
2428 struct core_surface *surface = pipe_ctx->surface; 2428 struct dc_surface *surface = pipe_ctx->surface;
2429 struct xfm_grph_csc_adjustment adjust; 2429 struct xfm_grph_csc_adjustment adjust;
2430 struct out_csc_color_matrix tbl_entry; 2430 struct out_csc_color_matrix tbl_entry;
2431 unsigned int i; 2431 unsigned int i;
@@ -2493,21 +2493,21 @@ static void dce110_program_front_end_for_pipe(
2493 2493
2494 mi->funcs->mem_input_program_surface_config( 2494 mi->funcs->mem_input_program_surface_config(
2495 mi, 2495 mi,
2496 surface->public.format, 2496 surface->format,
2497 &surface->public.tiling_info, 2497 &surface->tiling_info,
2498 &surface->public.plane_size, 2498 &surface->plane_size,
2499 surface->public.rotation, 2499 surface->rotation,
2500 NULL, 2500 NULL,
2501 false); 2501 false);
2502 if (mi->funcs->set_blank) 2502 if (mi->funcs->set_blank)
2503 mi->funcs->set_blank(mi, pipe_ctx->surface->public.visible); 2503 mi->funcs->set_blank(mi, pipe_ctx->surface->visible);
2504 2504
2505 if (dc->public.config.gpu_vm_support) 2505 if (dc->public.config.gpu_vm_support)
2506 mi->funcs->mem_input_program_pte_vm( 2506 mi->funcs->mem_input_program_pte_vm(
2507 pipe_ctx->mi, 2507 pipe_ctx->mi,
2508 surface->public.format, 2508 surface->format,
2509 &surface->public.tiling_info, 2509 &surface->tiling_info,
2510 surface->public.rotation); 2510 surface->rotation);
2511 2511
2512 dm_logger_write(dc->ctx->logger, LOG_SURFACE, 2512 dm_logger_write(dc->ctx->logger, LOG_SURFACE,
2513 "Pipe:%d 0x%x: addr hi:0x%x, " 2513 "Pipe:%d 0x%x: addr hi:0x%x, "
@@ -2517,20 +2517,20 @@ static void dce110_program_front_end_for_pipe(
2517 "clip: %d, %d, %d, %d\n", 2517 "clip: %d, %d, %d, %d\n",
2518 pipe_ctx->pipe_idx, 2518 pipe_ctx->pipe_idx,
2519 pipe_ctx->surface, 2519 pipe_ctx->surface,
2520 pipe_ctx->surface->public.address.grph.addr.high_part, 2520 pipe_ctx->surface->address.grph.addr.high_part,
2521 pipe_ctx->surface->public.address.grph.addr.low_part, 2521 pipe_ctx->surface->address.grph.addr.low_part,
2522 pipe_ctx->surface->public.src_rect.x, 2522 pipe_ctx->surface->src_rect.x,
2523 pipe_ctx->surface->public.src_rect.y, 2523 pipe_ctx->surface->src_rect.y,
2524 pipe_ctx->surface->public.src_rect.width, 2524 pipe_ctx->surface->src_rect.width,
2525 pipe_ctx->surface->public.src_rect.height, 2525 pipe_ctx->surface->src_rect.height,
2526 pipe_ctx->surface->public.dst_rect.x, 2526 pipe_ctx->surface->dst_rect.x,
2527 pipe_ctx->surface->public.dst_rect.y, 2527 pipe_ctx->surface->dst_rect.y,
2528 pipe_ctx->surface->public.dst_rect.width, 2528 pipe_ctx->surface->dst_rect.width,
2529 pipe_ctx->surface->public.dst_rect.height, 2529 pipe_ctx->surface->dst_rect.height,
2530 pipe_ctx->surface->public.clip_rect.x, 2530 pipe_ctx->surface->clip_rect.x,
2531 pipe_ctx->surface->public.clip_rect.y, 2531 pipe_ctx->surface->clip_rect.y,
2532 pipe_ctx->surface->public.clip_rect.width, 2532 pipe_ctx->surface->clip_rect.width,
2533 pipe_ctx->surface->public.clip_rect.height); 2533 pipe_ctx->surface->clip_rect.height);
2534 2534
2535 dm_logger_write(dc->ctx->logger, LOG_SURFACE, 2535 dm_logger_write(dc->ctx->logger, LOG_SURFACE,
2536 "Pipe %d: width, height, x, y\n" 2536 "Pipe %d: width, height, x, y\n"
@@ -2549,7 +2549,7 @@ static void dce110_program_front_end_for_pipe(
2549 2549
2550static void dce110_apply_ctx_for_surface( 2550static void dce110_apply_ctx_for_surface(
2551 struct core_dc *dc, 2551 struct core_dc *dc,
2552 struct core_surface *surface, 2552 const struct dc_surface *surface,
2553 struct validate_context *context) 2553 struct validate_context *context)
2554{ 2554{
2555 int i; 2555 int i;
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
index 8b7bc1cc2b7b..0fcb1cf4b4ce 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
@@ -766,7 +766,7 @@ static bool is_surface_pixel_format_supported(struct pipe_ctx *pipe_ctx, unsigne
766 return true; 766 return true;
767 if (!pipe_ctx->surface) 767 if (!pipe_ctx->surface)
768 return false; 768 return false;
769 if (pipe_ctx->surface->public.format < SURFACE_PIXEL_FORMAT_VIDEO_BEGIN) 769 if (pipe_ctx->surface->format < SURFACE_PIXEL_FORMAT_VIDEO_BEGIN)
770 return false; 770 return false;
771 return true; 771 return true;
772} 772}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index b7940876c761..4390023ca6dc 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -945,24 +945,24 @@ static void reset_hw_ctx_wrap(
945static bool patch_address_for_sbs_tb_stereo( 945static bool patch_address_for_sbs_tb_stereo(
946 struct pipe_ctx *pipe_ctx, PHYSICAL_ADDRESS_LOC *addr) 946 struct pipe_ctx *pipe_ctx, PHYSICAL_ADDRESS_LOC *addr)
947{ 947{
948 struct core_surface *surface = pipe_ctx->surface; 948 struct dc_surface *surface = pipe_ctx->surface;
949 bool sec_split = pipe_ctx->top_pipe && 949 bool sec_split = pipe_ctx->top_pipe &&
950 pipe_ctx->top_pipe->surface == pipe_ctx->surface; 950 pipe_ctx->top_pipe->surface == pipe_ctx->surface;
951 if (sec_split && surface->public.address.type == PLN_ADDR_TYPE_GRPH_STEREO && 951 if (sec_split && surface->address.type == PLN_ADDR_TYPE_GRPH_STEREO &&
952 (pipe_ctx->stream->public.timing.timing_3d_format == 952 (pipe_ctx->stream->public.timing.timing_3d_format ==
953 TIMING_3D_FORMAT_SIDE_BY_SIDE || 953 TIMING_3D_FORMAT_SIDE_BY_SIDE ||
954 pipe_ctx->stream->public.timing.timing_3d_format == 954 pipe_ctx->stream->public.timing.timing_3d_format ==
955 TIMING_3D_FORMAT_TOP_AND_BOTTOM)) { 955 TIMING_3D_FORMAT_TOP_AND_BOTTOM)) {
956 *addr = surface->public.address.grph_stereo.left_addr; 956 *addr = surface->address.grph_stereo.left_addr;
957 surface->public.address.grph_stereo.left_addr = 957 surface->address.grph_stereo.left_addr =
958 surface->public.address.grph_stereo.right_addr; 958 surface->address.grph_stereo.right_addr;
959 return true; 959 return true;
960 } else { 960 } else {
961 if (pipe_ctx->stream->public.view_format != VIEW_3D_FORMAT_NONE && 961 if (pipe_ctx->stream->public.view_format != VIEW_3D_FORMAT_NONE &&
962 surface->public.address.type != PLN_ADDR_TYPE_GRPH_STEREO) { 962 surface->address.type != PLN_ADDR_TYPE_GRPH_STEREO) {
963 surface->public.address.type = PLN_ADDR_TYPE_GRPH_STEREO; 963 surface->address.type = PLN_ADDR_TYPE_GRPH_STEREO;
964 surface->public.address.grph_stereo.right_addr = 964 surface->address.grph_stereo.right_addr =
965 surface->public.address.grph_stereo.left_addr; 965 surface->address.grph_stereo.left_addr;
966 } 966 }
967 } 967 }
968 return false; 968 return false;
@@ -972,22 +972,22 @@ static void update_plane_addr(const struct core_dc *dc, struct pipe_ctx *pipe_ct
972{ 972{
973 bool addr_patched = false; 973 bool addr_patched = false;
974 PHYSICAL_ADDRESS_LOC addr; 974 PHYSICAL_ADDRESS_LOC addr;
975 struct core_surface *surface = pipe_ctx->surface; 975 struct dc_surface *surface = pipe_ctx->surface;
976 976
977 if (surface == NULL) 977 if (surface == NULL)
978 return; 978 return;
979 addr_patched = patch_address_for_sbs_tb_stereo(pipe_ctx, &addr); 979 addr_patched = patch_address_for_sbs_tb_stereo(pipe_ctx, &addr);
980 pipe_ctx->mi->funcs->mem_input_program_surface_flip_and_addr( 980 pipe_ctx->mi->funcs->mem_input_program_surface_flip_and_addr(
981 pipe_ctx->mi, 981 pipe_ctx->mi,
982 &surface->public.address, 982 &surface->address,
983 surface->public.flip_immediate); 983 surface->flip_immediate);
984 surface->status.requested_address = surface->public.address; 984 surface->status.requested_address = surface->address;
985 if (addr_patched) 985 if (addr_patched)
986 pipe_ctx->surface->public.address.grph_stereo.left_addr = addr; 986 pipe_ctx->surface->address.grph_stereo.left_addr = addr;
987} 987}
988 988
989static bool dcn10_set_input_transfer_func( 989static bool dcn10_set_input_transfer_func(
990 struct pipe_ctx *pipe_ctx, const struct core_surface *surface) 990 struct pipe_ctx *pipe_ctx, const struct dc_surface *surface)
991{ 991{
992 struct input_pixel_processor *ipp = pipe_ctx->ipp; 992 struct input_pixel_processor *ipp = pipe_ctx->ipp;
993 const struct dc_transfer_func *tf = NULL; 993 const struct dc_transfer_func *tf = NULL;
@@ -996,12 +996,12 @@ static bool dcn10_set_input_transfer_func(
996 if (ipp == NULL) 996 if (ipp == NULL)
997 return false; 997 return false;
998 998
999 if (surface->public.in_transfer_func) 999 if (surface->in_transfer_func)
1000 tf = surface->public.in_transfer_func; 1000 tf = surface->in_transfer_func;
1001 1001
1002 if (surface->public.gamma_correction && dce_use_lut(surface)) 1002 if (surface->gamma_correction && dce_use_lut(surface))
1003 ipp->funcs->ipp_program_input_lut(ipp, 1003 ipp->funcs->ipp_program_input_lut(ipp,
1004 surface->public.gamma_correction); 1004 surface->gamma_correction);
1005 1005
1006 if (tf == NULL) 1006 if (tf == NULL)
1007 ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS); 1007 ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
@@ -1594,7 +1594,7 @@ static void dcn10_power_on_fe(
1594 struct pipe_ctx *pipe_ctx, 1594 struct pipe_ctx *pipe_ctx,
1595 struct validate_context *context) 1595 struct validate_context *context)
1596{ 1596{
1597 struct dc_surface *dc_surface = &pipe_ctx->surface->public; 1597 struct dc_surface *dc_surface = pipe_ctx->surface;
1598 struct dce_hwseq *hws = dc->hwseq; 1598 struct dce_hwseq *hws = dc->hwseq;
1599 1599
1600 power_on_plane(dc->hwseq, 1600 power_on_plane(dc->hwseq,
@@ -1710,7 +1710,7 @@ static void program_csc_matrix(struct pipe_ctx *pipe_ctx,
1710} 1710}
1711static bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx) 1711static bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
1712{ 1712{
1713 if (pipe_ctx->surface->public.visible) 1713 if (pipe_ctx->surface->visible)
1714 return true; 1714 return true;
1715 if (pipe_ctx->bottom_pipe && is_lower_pipe_tree_visible(pipe_ctx->bottom_pipe)) 1715 if (pipe_ctx->bottom_pipe && is_lower_pipe_tree_visible(pipe_ctx->bottom_pipe))
1716 return true; 1716 return true;
@@ -1719,7 +1719,7 @@ static bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
1719 1719
1720static bool is_upper_pipe_tree_visible(struct pipe_ctx *pipe_ctx) 1720static bool is_upper_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
1721{ 1721{
1722 if (pipe_ctx->surface->public.visible) 1722 if (pipe_ctx->surface->visible)
1723 return true; 1723 return true;
1724 if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe)) 1724 if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe))
1725 return true; 1725 return true;
@@ -1728,7 +1728,7 @@ static bool is_upper_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
1728 1728
1729static bool is_pipe_tree_visible(struct pipe_ctx *pipe_ctx) 1729static bool is_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
1730{ 1730{
1731 if (pipe_ctx->surface->public.visible) 1731 if (pipe_ctx->surface->visible)
1732 return true; 1732 return true;
1733 if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe)) 1733 if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe))
1734 return true; 1734 return true;
@@ -1803,12 +1803,12 @@ static void update_dchubp_dpp(
1803 struct dce_hwseq *hws = dc->hwseq; 1803 struct dce_hwseq *hws = dc->hwseq;
1804 struct mem_input *mi = pipe_ctx->mi; 1804 struct mem_input *mi = pipe_ctx->mi;
1805 struct input_pixel_processor *ipp = pipe_ctx->ipp; 1805 struct input_pixel_processor *ipp = pipe_ctx->ipp;
1806 struct core_surface *surface = pipe_ctx->surface; 1806 struct dc_surface *surface = pipe_ctx->surface;
1807 union plane_size size = surface->public.plane_size; 1807 union plane_size size = surface->plane_size;
1808 struct default_adjustment ocsc = {0}; 1808 struct default_adjustment ocsc = {0};
1809 struct tg_color black_color = {0}; 1809 struct tg_color black_color = {0};
1810 struct mpcc_cfg mpcc_cfg; 1810 struct mpcc_cfg mpcc_cfg;
1811 bool per_pixel_alpha = surface->public.per_pixel_alpha && pipe_ctx->bottom_pipe; 1811 bool per_pixel_alpha = surface->per_pixel_alpha && pipe_ctx->bottom_pipe;
1812 1812
1813 /* TODO: proper fix once fpga works */ 1813 /* TODO: proper fix once fpga works */
1814 /* depends on DML calculation, DPP clock value may change dynamically */ 1814 /* depends on DML calculation, DPP clock value may change dynamically */
@@ -1841,12 +1841,12 @@ static void update_dchubp_dpp(
1841 if (dc->public.config.gpu_vm_support) 1841 if (dc->public.config.gpu_vm_support)
1842 mi->funcs->mem_input_program_pte_vm( 1842 mi->funcs->mem_input_program_pte_vm(
1843 pipe_ctx->mi, 1843 pipe_ctx->mi,
1844 surface->public.format, 1844 surface->format,
1845 &surface->public.tiling_info, 1845 &surface->tiling_info,
1846 surface->public.rotation); 1846 surface->rotation);
1847 1847
1848 ipp->funcs->ipp_setup(ipp, 1848 ipp->funcs->ipp_setup(ipp,
1849 surface->public.format, 1849 surface->format,
1850 1, 1850 1,
1851 IPP_OUTPUT_FORMAT_12_BIT_FIX); 1851 IPP_OUTPUT_FORMAT_12_BIT_FIX);
1852 1852
@@ -1892,12 +1892,12 @@ static void update_dchubp_dpp(
1892 1892
1893 mi->funcs->mem_input_program_surface_config( 1893 mi->funcs->mem_input_program_surface_config(
1894 mi, 1894 mi,
1895 surface->public.format, 1895 surface->format,
1896 &surface->public.tiling_info, 1896 &surface->tiling_info,
1897 &size, 1897 &size,
1898 surface->public.rotation, 1898 surface->rotation,
1899 &surface->public.dcc, 1899 &surface->dcc,
1900 surface->public.horizontal_mirror); 1900 surface->horizontal_mirror);
1901 1901
1902 mi->funcs->set_blank(mi, !is_pipe_tree_visible(pipe_ctx)); 1902 mi->funcs->set_blank(mi, !is_pipe_tree_visible(pipe_ctx));
1903} 1903}
@@ -1978,7 +1978,7 @@ static void dcn10_pplib_apply_display_requirements(
1978 1978
1979static void dcn10_apply_ctx_for_surface( 1979static void dcn10_apply_ctx_for_surface(
1980 struct core_dc *dc, 1980 struct core_dc *dc,
1981 struct core_surface *surface, 1981 const struct dc_surface *surface,
1982 struct validate_context *context) 1982 struct validate_context *context)
1983{ 1983{
1984 int i, be_idx; 1984 int i, be_idx;
@@ -2337,7 +2337,7 @@ static bool dcn10_dummy_display_power_gating(
2337 2337
2338void dcn10_update_pending_status(struct pipe_ctx *pipe_ctx) 2338void dcn10_update_pending_status(struct pipe_ctx *pipe_ctx)
2339{ 2339{
2340 struct core_surface *surface = pipe_ctx->surface; 2340 struct dc_surface *surface = pipe_ctx->surface;
2341 struct timing_generator *tg = pipe_ctx->tg; 2341 struct timing_generator *tg = pipe_ctx->tg;
2342 2342
2343 if (surface->ctx->dc->debug.sanity_checks) { 2343 if (surface->ctx->dc->debug.sanity_checks) {
@@ -2355,7 +2355,7 @@ void dcn10_update_pending_status(struct pipe_ctx *pipe_ctx)
2355 2355
2356 /* DCN we read INUSE address in MI, do we still need this wa? */ 2356 /* DCN we read INUSE address in MI, do we still need this wa? */
2357 if (surface->status.is_flip_pending && 2357 if (surface->status.is_flip_pending &&
2358 !surface->public.visible) { 2358 !surface->visible) {
2359 pipe_ctx->mi->current_address = 2359 pipe_ctx->mi->current_address =
2360 pipe_ctx->mi->request_address; 2360 pipe_ctx->mi->request_address;
2361 BREAK_TO_DEBUGGER(); 2361 BREAK_TO_DEBUGGER();
diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_types.h b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
index cc65cfdea66f..07a1aec5a28b 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
@@ -40,23 +40,9 @@ struct core_stream;
40 40
41#define MAX_CLOCK_SOURCES 7 41#define MAX_CLOCK_SOURCES 7
42 42
43/********* core_surface **********/
44#define DC_SURFACE_TO_CORE(dc_surface) \
45 container_of(dc_surface, struct core_surface, public)
46
47#define DC_GAMMA_TO_CORE(dc_gamma) \ 43#define DC_GAMMA_TO_CORE(dc_gamma) \
48 container_of(dc_gamma, struct core_gamma, public) 44 container_of(dc_gamma, struct core_gamma, public)
49 45
50struct core_surface {
51 struct dc_surface public;
52 struct dc_surface_status status;
53 struct dc_context *ctx;
54
55 /* private to dc_surface.c */
56 enum dc_irq_source irq_source;
57 int ref_count;
58};
59
60struct core_gamma { 46struct core_gamma {
61 struct dc_gamma public; 47 struct dc_gamma public;
62 struct dc_context *ctx; 48 struct dc_context *ctx;
@@ -263,7 +249,7 @@ struct resource_pool {
263}; 249};
264 250
265struct pipe_ctx { 251struct pipe_ctx {
266 struct core_surface *surface; 252 struct dc_surface *surface;
267 struct core_stream *stream; 253 struct core_stream *stream;
268 254
269 struct mem_input *mi; 255 struct mem_input *mi;
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
index d865df802c88..2343beb4ef87 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
@@ -59,7 +59,7 @@ struct hw_sequencer_funcs {
59 59
60 void (*apply_ctx_for_surface)( 60 void (*apply_ctx_for_surface)(
61 struct core_dc *dc, 61 struct core_dc *dc,
62 struct core_surface *surface, 62 const struct dc_surface *surface,
63 struct validate_context *context); 63 struct validate_context *context);
64 64
65 void (*set_plane_config)( 65 void (*set_plane_config)(
@@ -88,7 +88,7 @@ struct hw_sequencer_funcs {
88 88
89 bool (*set_input_transfer_func)( 89 bool (*set_input_transfer_func)(
90 struct pipe_ctx *pipe_ctx, 90 struct pipe_ctx *pipe_ctx,
91 const struct core_surface *surface); 91 const struct dc_surface *surface);
92 92
93 bool (*set_output_transfer_func)( 93 bool (*set_output_transfer_func)(
94 struct pipe_ctx *pipe_ctx, 94 struct pipe_ctx *pipe_ctx,
diff --git a/drivers/gpu/drm/amd/display/dc/inc/resource.h b/drivers/gpu/drm/amd/display/dc/inc/resource.h
index 04e5fd1d8c89..ed94df16a2d3 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/resource.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/resource.h
@@ -119,7 +119,7 @@ struct pipe_ctx *resource_get_head_pipe_for_stream(
119 const struct core_stream *stream); 119 const struct core_stream *stream);
120 120
121bool resource_attach_surfaces_to_context( 121bool resource_attach_surfaces_to_context(
122 const struct dc_surface *const *surfaces, 122 struct dc_surface *const *surfaces,
123 int surface_count, 123 int surface_count,
124 const struct dc_stream *dc_stream, 124 const struct dc_stream *dc_stream,
125 struct validate_context *context, 125 struct validate_context *context,