aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarry Wentland <harry.wentland@amd.com>2017-07-24 14:04:27 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:15:37 -0400
commitb73a22d3257f9ec237c46be12d74b58d5a925d8c (patch)
treec55b0c423db3ed022bb5b6fa1f56828eba378bd2
parent89899039356a645c1cebe5a454d3577aa1f42bf2 (diff)
drm/amd/display: Roll core_sink into dc_sink
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/amdgpu/amdgpu_mode.h4
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c2
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c4
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c4
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_link.c60
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_resource.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_sink.c30
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_stream.c15
-rw-r--r--drivers/gpu/drm/amd/display/dc/dc.h19
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/core_types.h21
11 files changed, 72 insertions, 91 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
index c558f700df35..8d939e3b3f15 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
@@ -562,9 +562,9 @@ struct amdgpu_connector {
562 int num_modes; 562 int num_modes;
563 /* The 'old' sink - before an HPD. 563 /* The 'old' sink - before an HPD.
564 * The 'current' sink is in dc_link->sink. */ 564 * The 'current' sink is in dc_link->sink. */
565 const struct dc_sink *dc_sink; 565 struct dc_sink *dc_sink;
566 struct dc_link *dc_link; 566 struct dc_link *dc_link;
567 const struct dc_sink *dc_em_sink; 567 struct dc_sink *dc_em_sink;
568 const struct dc_stream *stream; 568 const struct dc_stream *stream;
569 void *con_priv; 569 void *con_priv;
570 bool dac_load_detect; 570 bool dac_load_detect;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 26fbadba97dd..696a4112c8d9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -697,7 +697,7 @@ void amdgpu_dm_update_connector_after_detect(
697{ 697{
698 struct drm_connector *connector = &aconnector->base; 698 struct drm_connector *connector = &aconnector->base;
699 struct drm_device *dev = connector->dev; 699 struct drm_device *dev = connector->dev;
700 const struct dc_sink *sink; 700 struct dc_sink *sink;
701 701
702 /* MST handled by drm_mst framework */ 702 /* MST handled by drm_mst framework */
703 if (aconnector->mst_mgr.mst_state == true) 703 if (aconnector->mst_mgr.mst_state == true)
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 4885403f5cec..13708bcb83cd 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
@@ -1266,7 +1266,7 @@ int amdgpu_dm_connector_mode_valid(
1266 struct drm_display_mode *mode) 1266 struct drm_display_mode *mode)
1267{ 1267{
1268 int result = MODE_ERROR; 1268 int result = MODE_ERROR;
1269 const struct dc_sink *dc_sink; 1269 struct dc_sink *dc_sink;
1270 struct amdgpu_device *adev = connector->dev->dev_private; 1270 struct amdgpu_device *adev = connector->dev->dev_private;
1271 struct dc_validation_set val_set = { 0 }; 1271 struct dc_validation_set val_set = { 0 };
1272 /* TODO: Unhardcode stream count */ 1272 /* TODO: Unhardcode stream count */
@@ -1535,7 +1535,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector,
1535 struct drm_display_mode *mode, struct dc_validation_set *val_set) 1535 struct drm_display_mode *mode, struct dc_validation_set *val_set)
1536{ 1536{
1537 int result = MODE_ERROR; 1537 int result = MODE_ERROR;
1538 const struct dc_sink *dc_sink = 1538 struct dc_sink *dc_sink =
1539 to_amdgpu_connector(connector)->dc_sink; 1539 to_amdgpu_connector(connector)->dc_sink;
1540 /* TODO: Unhardcode stream count */ 1540 /* TODO: Unhardcode stream count */
1541 struct dc_stream *stream; 1541 struct dc_stream *stream;
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 73740e2a5819..30374ffaae0b 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -939,7 +939,7 @@ static bool dc_commit_context_no_check(struct dc *dc, struct validate_context *c
939 program_timing_sync(core_dc, context); 939 program_timing_sync(core_dc, context);
940 940
941 for (i = 0; i < context->stream_count; i++) { 941 for (i = 0; i < context->stream_count; i++) {
942 const struct core_sink *sink = context->streams[i]->sink; 942 const struct dc_sink *sink = context->streams[i]->sink;
943 943
944 for (j = 0; j < context->stream_status[i].surface_count; j++) { 944 for (j = 0; j < context->stream_status[i].surface_count; j++) {
945 const struct dc_surface *surface = 945 const struct dc_surface *surface =
@@ -1984,7 +1984,7 @@ void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink)
1984 } 1984 }
1985} 1985}
1986 1986
1987void dc_link_remove_remote_sink(struct dc_link *link, const struct dc_sink *sink) 1987void dc_link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink)
1988{ 1988{
1989 int i; 1989 int i;
1990 1990
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
index 428dbff8505b..e7062069d9a1 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -541,8 +541,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
541 struct audio_support *aud_support = &link->dc->res_pool->audio_support; 541 struct audio_support *aud_support = &link->dc->res_pool->audio_support;
542 enum dc_edid_status edid_status; 542 enum dc_edid_status edid_status;
543 struct dc_context *dc_ctx = link->ctx; 543 struct dc_context *dc_ctx = link->ctx;
544 struct dc_sink *dc_sink; 544 struct dc_sink *sink;
545 struct core_sink *sink = NULL;
546 enum dc_connection_type new_connection_type = dc_connection_none; 545 enum dc_connection_type new_connection_type = dc_connection_none;
547 546
548 if (link->connector_signal == SIGNAL_TYPE_VIRTUAL) 547 if (link->connector_signal == SIGNAL_TYPE_VIRTUAL)
@@ -637,22 +636,21 @@ bool dc_link_detect(struct dc_link *link, bool boot)
637 sink_init_data.link = link; 636 sink_init_data.link = link;
638 sink_init_data.sink_signal = sink_caps.signal; 637 sink_init_data.sink_signal = sink_caps.signal;
639 638
640 dc_sink = dc_sink_create(&sink_init_data); 639 sink = dc_sink_create(&sink_init_data);
641 if (!dc_sink) { 640 if (!sink) {
642 DC_ERROR("Failed to create sink!\n"); 641 DC_ERROR("Failed to create sink!\n");
643 return false; 642 return false;
644 } 643 }
645 644
646 dc_sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; 645 sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
647 dc_sink->converter_disable_audio = converter_disable_audio; 646 sink->converter_disable_audio = converter_disable_audio;
648 647
649 sink = DC_SINK_TO_CORE(dc_sink); 648 link->local_sink = sink;
650 link->local_sink = &sink->public;
651 649
652 edid_status = dm_helpers_read_local_edid( 650 edid_status = dm_helpers_read_local_edid(
653 link->ctx, 651 link->ctx,
654 link, 652 link,
655 &sink->public); 653 sink);
656 654
657 switch (edid_status) { 655 switch (edid_status) {
658 case EDID_BAD_CHECKSUM: 656 case EDID_BAD_CHECKSUM:
@@ -669,16 +667,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
669 } 667 }
670 668
671 /* HDMI-DVI Dongle */ 669 /* HDMI-DVI Dongle */
672 if (dc_sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A && 670 if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
673 !dc_sink->edid_caps.edid_hdmi) 671 !sink->edid_caps.edid_hdmi)
674 dc_sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK; 672 sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
675 673
676 /* Connectivity log: detection */ 674 /* Connectivity log: detection */
677 for (i = 0; i < sink->public.dc_edid.length / EDID_BLOCK_SIZE; i++) { 675 for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
678 CONN_DATA_DETECT(link, 676 CONN_DATA_DETECT(link,
679 &sink->public.dc_edid.raw_edid[i * EDID_BLOCK_SIZE], 677 &sink->dc_edid.raw_edid[i * EDID_BLOCK_SIZE],
680 EDID_BLOCK_SIZE, 678 EDID_BLOCK_SIZE,
681 "%s: [Block %d] ", sink->public.edid_caps.display_name, i); 679 "%s: [Block %d] ", sink->edid_caps.display_name, i);
682 } 680 }
683 681
684 dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER, 682 dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
@@ -692,16 +690,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
692 "speaker_flag = %d, " 690 "speaker_flag = %d, "
693 "audio_mode_count = %d\n", 691 "audio_mode_count = %d\n",
694 __func__, 692 __func__,
695 sink->public.edid_caps.manufacturer_id, 693 sink->edid_caps.manufacturer_id,
696 sink->public.edid_caps.product_id, 694 sink->edid_caps.product_id,
697 sink->public.edid_caps.serial_number, 695 sink->edid_caps.serial_number,
698 sink->public.edid_caps.manufacture_week, 696 sink->edid_caps.manufacture_week,
699 sink->public.edid_caps.manufacture_year, 697 sink->edid_caps.manufacture_year,
700 sink->public.edid_caps.display_name, 698 sink->edid_caps.display_name,
701 sink->public.edid_caps.speaker_flags, 699 sink->edid_caps.speaker_flags,
702 sink->public.edid_caps.audio_mode_count); 700 sink->edid_caps.audio_mode_count);
703 701
704 for (i = 0; i < sink->public.edid_caps.audio_mode_count; i++) { 702 for (i = 0; i < sink->edid_caps.audio_mode_count; i++) {
705 dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER, 703 dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
706 "%s: mode number = %d, " 704 "%s: mode number = %d, "
707 "format_code = %d, " 705 "format_code = %d, "
@@ -710,10 +708,10 @@ bool dc_link_detect(struct dc_link *link, bool boot)
710 "sample_size = %d\n", 708 "sample_size = %d\n",
711 __func__, 709 __func__,
712 i, 710 i,
713 sink->public.edid_caps.audio_modes[i].format_code, 711 sink->edid_caps.audio_modes[i].format_code,
714 sink->public.edid_caps.audio_modes[i].channel_count, 712 sink->edid_caps.audio_modes[i].channel_count,
715 sink->public.edid_caps.audio_modes[i].sample_rate, 713 sink->edid_caps.audio_modes[i].sample_rate,
716 sink->public.edid_caps.audio_modes[i].sample_size); 714 sink->edid_caps.audio_modes[i].sample_size);
717 } 715 }
718 716
719 } else { 717 } else {
@@ -732,7 +730,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
732 } 730 }
733 731
734 LINK_INFO("link=%d, dc_sink_in=%p is now %s\n", 732 LINK_INFO("link=%d, dc_sink_in=%p is now %s\n",
735 link->link_index, &sink->public, 733 link->link_index, sink,
736 (sink_caps.signal == SIGNAL_TYPE_NONE ? 734 (sink_caps.signal == SIGNAL_TYPE_NONE ?
737 "Disconnected":"Connected")); 735 "Disconnected":"Connected"));
738 736
@@ -1347,7 +1345,7 @@ enum dc_status dc_link_validate_mode_timing(
1347 struct dc_link *link, 1345 struct dc_link *link,
1348 const struct dc_crtc_timing *timing) 1346 const struct dc_crtc_timing *timing)
1349{ 1347{
1350 uint32_t max_pix_clk = stream->sink->public.dongle_max_pix_clk; 1348 uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk;
1351 1349
1352 /* A hack to avoid failing any modes for EDID override feature on 1350 /* A hack to avoid failing any modes for EDID override feature on
1353 * topology change such as lower quality cable for DP or different dongle 1351 * topology change such as lower quality cable for DP or different dongle
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 7a3d090f8465..7cb572ff3cba 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -1528,7 +1528,7 @@ enum dc_status resource_map_pool_resources(
1528 pipe_ctx->stream_enc); 1528 pipe_ctx->stream_enc);
1529 1529
1530 /* TODO: Add check if ASIC support and EDID audio */ 1530 /* TODO: Add check if ASIC support and EDID audio */
1531 if (!stream->sink->public.converter_disable_audio && 1531 if (!stream->sink->converter_disable_audio &&
1532 dc_is_audio_capable_signal(pipe_ctx->stream->signal) && 1532 dc_is_audio_capable_signal(pipe_ctx->stream->signal) &&
1533 stream->public.audio_info.mode_count) { 1533 stream->public.audio_info.mode_count) {
1534 pipe_ctx->audio = find_first_free_audio( 1534 pipe_ctx->audio = find_first_free_audio(
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
index 1f7985ad5dba..a83f1243a9d1 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
@@ -31,15 +31,15 @@
31 * Private functions 31 * Private functions
32 ******************************************************************************/ 32 ******************************************************************************/
33 33
34static void destruct(struct core_sink *sink) 34static void destruct(struct dc_sink *sink)
35{ 35{
36 if (sink->public.dc_container_id) { 36 if (sink->dc_container_id) {
37 dm_free(sink->public.dc_container_id); 37 dm_free(sink->dc_container_id);
38 sink->public.dc_container_id = NULL; 38 sink->dc_container_id = NULL;
39 } 39 }
40} 40}
41 41
42static bool construct(struct core_sink *sink, const struct dc_sink_init_data *init_params) 42static bool construct(struct dc_sink *sink, const struct dc_sink_init_data *init_params)
43{ 43{
44 44
45 struct dc_link *link = init_params->link; 45 struct dc_link *link = init_params->link;
@@ -47,12 +47,12 @@ static bool construct(struct core_sink *sink, const struct dc_sink_init_data *in
47 if (!link) 47 if (!link)
48 return false; 48 return false;
49 49
50 sink->public.sink_signal = init_params->sink_signal; 50 sink->sink_signal = init_params->sink_signal;
51 sink->link = link; 51 sink->link = link;
52 sink->ctx = link->ctx; 52 sink->ctx = link->ctx;
53 sink->public.dongle_max_pix_clk = init_params->dongle_max_pix_clk; 53 sink->dongle_max_pix_clk = init_params->dongle_max_pix_clk;
54 sink->public.converter_disable_audio = init_params->converter_disable_audio; 54 sink->converter_disable_audio = init_params->converter_disable_audio;
55 sink->public.dc_container_id = NULL; 55 sink->dc_container_id = NULL;
56 56
57 return true; 57 return true;
58} 58}
@@ -61,18 +61,14 @@ static bool construct(struct core_sink *sink, const struct dc_sink_init_data *in
61 * Public functions 61 * Public functions
62 ******************************************************************************/ 62 ******************************************************************************/
63 63
64void dc_sink_retain(const struct dc_sink *dc_sink) 64void dc_sink_retain(struct dc_sink *sink)
65{ 65{
66 struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
67
68 ASSERT(sink->ref_count > 0); 66 ASSERT(sink->ref_count > 0);
69 ++sink->ref_count; 67 ++sink->ref_count;
70} 68}
71 69
72void dc_sink_release(const struct dc_sink *dc_sink) 70void dc_sink_release(struct dc_sink *sink)
73{ 71{
74 struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
75
76 ASSERT(sink->ref_count > 0); 72 ASSERT(sink->ref_count > 0);
77 --sink->ref_count; 73 --sink->ref_count;
78 74
@@ -84,7 +80,7 @@ void dc_sink_release(const struct dc_sink *dc_sink)
84 80
85struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params) 81struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
86{ 82{
87 struct core_sink *sink = dm_alloc(sizeof(*sink)); 83 struct dc_sink *sink = dm_alloc(sizeof(*sink));
88 84
89 if (NULL == sink) 85 if (NULL == sink)
90 goto alloc_fail; 86 goto alloc_fail;
@@ -94,7 +90,7 @@ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
94 90
95 ++sink->ref_count; 91 ++sink->ref_count;
96 92
97 return &sink->public; 93 return sink;
98 94
99construct_fail: 95construct_fail:
100 dm_free(sink); 96 dm_free(sink);
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 a329709de360..5b356ddf5614 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
@@ -46,11 +46,11 @@ struct stream {
46 ******************************************************************************/ 46 ******************************************************************************/
47 47
48static bool construct(struct core_stream *stream, 48static bool construct(struct core_stream *stream,
49 const struct dc_sink *dc_sink_data) 49 struct dc_sink *dc_sink_data)
50{ 50{
51 uint32_t i = 0; 51 uint32_t i = 0;
52 52
53 stream->sink = DC_SINK_TO_CORE(dc_sink_data); 53 stream->sink = dc_sink_data;
54 stream->ctx = stream->sink->ctx; 54 stream->ctx = stream->sink->ctx;
55 stream->public.sink = dc_sink_data; 55 stream->public.sink = dc_sink_data;
56 56
@@ -97,7 +97,7 @@ static bool construct(struct core_stream *stream,
97 97
98static void destruct(struct core_stream *stream) 98static void destruct(struct core_stream *stream)
99{ 99{
100 dc_sink_release(&stream->sink->public); 100 dc_sink_release(stream->sink);
101 if (stream->public.out_transfer_func != NULL) { 101 if (stream->public.out_transfer_func != NULL) {
102 dc_transfer_func_release( 102 dc_transfer_func_release(
103 stream->public.out_transfer_func); 103 stream->public.out_transfer_func);
@@ -130,9 +130,8 @@ void dc_stream_release(const struct dc_stream *public)
130} 130}
131 131
132struct dc_stream *dc_create_stream_for_sink( 132struct dc_stream *dc_create_stream_for_sink(
133 const struct dc_sink *dc_sink) 133 struct dc_sink *sink)
134{ 134{
135 struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
136 struct stream *stream; 135 struct stream *stream;
137 136
138 if (sink == NULL) 137 if (sink == NULL)
@@ -143,7 +142,7 @@ struct dc_stream *dc_create_stream_for_sink(
143 if (NULL == stream) 142 if (NULL == stream)
144 goto alloc_fail; 143 goto alloc_fail;
145 144
146 if (false == construct(&stream->protected, dc_sink)) 145 if (false == construct(&stream->protected, sink))
147 goto construct_fail; 146 goto construct_fail;
148 147
149 stream->ref_count++; 148 stream->ref_count++;
@@ -350,8 +349,8 @@ void dc_stream_log(
350 dm_logger_write(dm_logger, 349 dm_logger_write(dm_logger,
351 log_type, 350 log_type,
352 "\tsink name: %s, serial: %d\n", 351 "\tsink name: %s, serial: %d\n",
353 core_stream->sink->public.edid_caps.display_name, 352 core_stream->sink->edid_caps.display_name,
354 core_stream->sink->public.edid_caps.serial_number); 353 core_stream->sink->edid_caps.serial_number);
355 dm_logger_write(dm_logger, 354 dm_logger_write(dm_logger,
356 log_type, 355 log_type,
357 "\tlink: %d\n", 356 "\tlink: %d\n",
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
index e15e8fb1eefe..77bd54659a8b 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -629,7 +629,7 @@ bool dc_enable_stereo(
629/** 629/**
630 * Create a new default stream for the requested sink 630 * Create a new default stream for the requested sink
631 */ 631 */
632struct dc_stream *dc_create_stream_for_sink(const struct dc_sink *dc_sink); 632struct dc_stream *dc_create_stream_for_sink(struct dc_sink *dc_sink);
633 633
634void dc_stream_retain(const struct dc_stream *dc_stream); 634void dc_stream_retain(const struct dc_stream *dc_stream);
635void dc_stream_release(const struct dc_stream *dc_stream); 635void dc_stream_release(const struct dc_stream *dc_stream);
@@ -712,9 +712,9 @@ struct link_mst_stream_allocation_table {
712 * The currently active signal type (HDMI, DP-SST, DP-MST) is also reported. 712 * The currently active signal type (HDMI, DP-SST, DP-MST) is also reported.
713 */ 713 */
714struct dc_link { 714struct dc_link {
715 const struct dc_sink *remote_sinks[MAX_SINKS_PER_LINK]; 715 struct dc_sink *remote_sinks[MAX_SINKS_PER_LINK];
716 unsigned int sink_count; 716 unsigned int sink_count;
717 const struct dc_sink *local_sink; 717 struct dc_sink *local_sink;
718 unsigned int link_index; 718 unsigned int link_index;
719 enum dc_connection_type type; 719 enum dc_connection_type type;
720 enum signal_type connector_signal; 720 enum signal_type connector_signal;
@@ -825,7 +825,7 @@ struct dc_sink *dc_link_add_remote_sink(
825 825
826void dc_link_remove_remote_sink( 826void dc_link_remove_remote_sink(
827 struct dc_link *link, 827 struct dc_link *link,
828 const struct dc_sink *sink); 828 struct dc_sink *sink);
829 829
830/* Used by diagnostics for virtual link at the moment */ 830/* Used by diagnostics for virtual link at the moment */
831void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink); 831void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink);
@@ -879,10 +879,17 @@ struct dc_sink {
879 void *priv; 879 void *priv;
880 struct stereo_3d_features features_3d[TIMING_3D_FORMAT_MAX]; 880 struct stereo_3d_features features_3d[TIMING_3D_FORMAT_MAX];
881 bool converter_disable_audio; 881 bool converter_disable_audio;
882
883 /* private to DC core */
884 struct dc_link *link;
885 struct dc_context *ctx;
886
887 /* private to dc_sink.c */
888 int ref_count;
882}; 889};
883 890
884void dc_sink_retain(const struct dc_sink *sink); 891void dc_sink_retain(struct dc_sink *sink);
885void dc_sink_release(const struct dc_sink *sink); 892void dc_sink_release(struct dc_sink *sink);
886 893
887const struct audio **dc_get_audios(struct dc *dc); 894const struct audio **dc_get_audios(struct dc *dc);
888 895
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 fe8084e290a3..58701fdb7c94 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
@@ -657,7 +657,7 @@ static enum dc_status bios_parser_crtc_source_select(
657 * encoder block 657 * encoder block
658 * note: video bios clears all FMT setting here. */ 658 * note: video bios clears all FMT setting here. */
659 struct bp_crtc_source_select crtc_source_select = {0}; 659 struct bp_crtc_source_select crtc_source_select = {0};
660 const struct core_sink *sink = pipe_ctx->stream->sink; 660 const struct dc_sink *sink = pipe_ctx->stream->sink;
661 661
662 crtc_source_select.engine_id = pipe_ctx->stream_enc->id; 662 crtc_source_select.engine_id = pipe_ctx->stream_enc->id;
663 crtc_source_select.controller_id = pipe_ctx->pipe_idx + 1; 663 crtc_source_select.controller_id = pipe_ctx->pipe_idx + 1;
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 eed31a827a90..1d733c837854 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
@@ -68,7 +68,7 @@ struct core_stream {
68 68
69 /* field internal to DC */ 69 /* field internal to DC */
70 struct dc_context *ctx; 70 struct dc_context *ctx;
71 const struct core_sink *sink; 71 struct dc_sink *sink;
72 72
73 /* used by DCP and FMT */ 73 /* used by DCP and FMT */
74 struct bit_depth_reduction_params bit_depth_params; 74 struct bit_depth_reduction_params bit_depth_params;
@@ -80,25 +80,6 @@ struct core_stream {
80 struct dc_stream_status status; 80 struct dc_stream_status status;
81}; 81};
82 82
83/************ core_sink *****************/
84
85#define DC_SINK_TO_CORE(dc_sink) \
86 container_of(dc_sink, struct core_sink, public)
87
88struct core_sink {
89 /** The public, read-only (for DM) area of sink. **/
90 struct dc_sink public;
91 /** End-of-public area. **/
92
93 /** The 'protected' area - read/write access, for use only inside DC **/
94 /* not used for now */
95 struct dc_link *link;
96 struct dc_context *ctx;
97
98 /* private to dc_sink.c */
99 int ref_count;
100};
101
102/************ link *****************/ 83/************ link *****************/
103struct link_init_data { 84struct link_init_data {
104 const struct core_dc *dc; 85 const struct core_dc *dc;