aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch483
1 files changed, 483 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch
new file mode 100644
index 00000000..6448786d
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0662-Revert-drm-amd-display-Roll-core_sink-into-dc_sink.patch
@@ -0,0 +1,483 @@
+From 7697dd45d753138d5fb1fedfa26575e2674fbccf Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Tue, 25 Jul 2017 16:59:15 -0400
+Subject: [PATCH 0662/4131] Revert "drm/amd/display: Roll core_sink into
+ dc_sink"
+
+This reverts commit 1a636edfb1db887198014339a58aade7c688aa10.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 4 +-
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 4 +-
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 4 +-
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 60 +++++++++++-----------
+ drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 2 +-
+ drivers/gpu/drm/amd/display/dc/core/dc_sink.c | 30 ++++++-----
+ drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 15 +++---
+ drivers/gpu/drm/amd/display/dc/dc.h | 19 +++----
+ .../amd/display/dc/dce110/dce110_hw_sequencer.c | 2 +-
+ drivers/gpu/drm/amd/display/dc/inc/core_types.h | 21 +++++++-
+ 11 files changed, 91 insertions(+), 72 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+index 5c527f4..cc4f3d1 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+@@ -566,9 +566,9 @@ struct amdgpu_connector {
+ int num_modes;
+ /* The 'old' sink - before an HPD.
+ * The 'current' sink is in dc_link->sink. */
+- struct dc_sink *dc_sink;
++ const struct dc_sink *dc_sink;
+ struct dc_link *dc_link;
+- struct dc_sink *dc_em_sink;
++ const struct dc_sink *dc_em_sink;
+ const struct dc_stream *stream;
+ void *con_priv;
+ 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 71178c8..8f18058 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(
+ {
+ struct drm_connector *connector = &aconnector->base;
+ struct drm_device *dev = connector->dev;
+- struct dc_sink *sink;
++ const struct dc_sink *sink;
+
+ /* MST handled by drm_mst framework */
+ 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 30b5f9f..e827e22 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
+@@ -1409,7 +1409,7 @@ int amdgpu_dm_connector_mode_valid(
+ struct drm_display_mode *mode)
+ {
+ int result = MODE_ERROR;
+- struct dc_sink *dc_sink;
++ const struct dc_sink *dc_sink;
+ struct amdgpu_device *adev = connector->dev->dev_private;
+ struct dc_validation_set val_set = { 0 };
+ /* TODO: Unhardcode stream count */
+@@ -1679,7 +1679,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector,
+ struct drm_display_mode *mode, struct dc_validation_set *val_set)
+ {
+ int result = MODE_ERROR;
+- struct dc_sink *dc_sink =
++ const struct dc_sink *dc_sink =
+ to_amdgpu_connector(connector)->dc_sink;
+ /* TODO: Unhardcode stream count */
+ 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 30374ff..73740e2 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
+ program_timing_sync(core_dc, context);
+
+ for (i = 0; i < context->stream_count; i++) {
+- const struct dc_sink *sink = context->streams[i]->sink;
++ const struct core_sink *sink = context->streams[i]->sink;
+
+ for (j = 0; j < context->stream_status[i].surface_count; j++) {
+ const struct dc_surface *surface =
+@@ -1984,7 +1984,7 @@ void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink)
+ }
+ }
+
+-void dc_link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink)
++void dc_link_remove_remote_sink(struct dc_link *link, const struct dc_sink *sink)
+ {
+ int i;
+
+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 e706206..428dbff 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -541,7 +541,8 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ struct audio_support *aud_support = &link->dc->res_pool->audio_support;
+ enum dc_edid_status edid_status;
+ struct dc_context *dc_ctx = link->ctx;
+- struct dc_sink *sink;
++ struct dc_sink *dc_sink;
++ struct core_sink *sink = NULL;
+ enum dc_connection_type new_connection_type = dc_connection_none;
+
+ if (link->connector_signal == SIGNAL_TYPE_VIRTUAL)
+@@ -636,21 +637,22 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ sink_init_data.link = link;
+ sink_init_data.sink_signal = sink_caps.signal;
+
+- sink = dc_sink_create(&sink_init_data);
+- if (!sink) {
++ dc_sink = dc_sink_create(&sink_init_data);
++ if (!dc_sink) {
+ DC_ERROR("Failed to create sink!\n");
+ return false;
+ }
+
+- sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
+- sink->converter_disable_audio = converter_disable_audio;
++ dc_sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
++ dc_sink->converter_disable_audio = converter_disable_audio;
+
+- link->local_sink = sink;
++ sink = DC_SINK_TO_CORE(dc_sink);
++ link->local_sink = &sink->public;
+
+ edid_status = dm_helpers_read_local_edid(
+ link->ctx,
+ link,
+- sink);
++ &sink->public);
+
+ switch (edid_status) {
+ case EDID_BAD_CHECKSUM:
+@@ -667,16 +669,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ }
+
+ /* HDMI-DVI Dongle */
+- if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
+- !sink->edid_caps.edid_hdmi)
+- sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
++ if (dc_sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
++ !dc_sink->edid_caps.edid_hdmi)
++ dc_sink->sink_signal = SIGNAL_TYPE_DVI_SINGLE_LINK;
+
+ /* Connectivity log: detection */
+- for (i = 0; i < sink->dc_edid.length / EDID_BLOCK_SIZE; i++) {
++ for (i = 0; i < sink->public.dc_edid.length / EDID_BLOCK_SIZE; i++) {
+ CONN_DATA_DETECT(link,
+- &sink->dc_edid.raw_edid[i * EDID_BLOCK_SIZE],
++ &sink->public.dc_edid.raw_edid[i * EDID_BLOCK_SIZE],
+ EDID_BLOCK_SIZE,
+- "%s: [Block %d] ", sink->edid_caps.display_name, i);
++ "%s: [Block %d] ", sink->public.edid_caps.display_name, i);
+ }
+
+ dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
+@@ -690,16 +692,16 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ "speaker_flag = %d, "
+ "audio_mode_count = %d\n",
+ __func__,
+- sink->edid_caps.manufacturer_id,
+- sink->edid_caps.product_id,
+- sink->edid_caps.serial_number,
+- sink->edid_caps.manufacture_week,
+- sink->edid_caps.manufacture_year,
+- sink->edid_caps.display_name,
+- sink->edid_caps.speaker_flags,
+- sink->edid_caps.audio_mode_count);
+-
+- for (i = 0; i < sink->edid_caps.audio_mode_count; i++) {
++ sink->public.edid_caps.manufacturer_id,
++ sink->public.edid_caps.product_id,
++ sink->public.edid_caps.serial_number,
++ sink->public.edid_caps.manufacture_week,
++ sink->public.edid_caps.manufacture_year,
++ sink->public.edid_caps.display_name,
++ sink->public.edid_caps.speaker_flags,
++ sink->public.edid_caps.audio_mode_count);
++
++ for (i = 0; i < sink->public.edid_caps.audio_mode_count; i++) {
+ dm_logger_write(link->ctx->logger, LOG_DETECTION_EDID_PARSER,
+ "%s: mode number = %d, "
+ "format_code = %d, "
+@@ -708,10 +710,10 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ "sample_size = %d\n",
+ __func__,
+ i,
+- sink->edid_caps.audio_modes[i].format_code,
+- sink->edid_caps.audio_modes[i].channel_count,
+- sink->edid_caps.audio_modes[i].sample_rate,
+- sink->edid_caps.audio_modes[i].sample_size);
++ sink->public.edid_caps.audio_modes[i].format_code,
++ sink->public.edid_caps.audio_modes[i].channel_count,
++ sink->public.edid_caps.audio_modes[i].sample_rate,
++ sink->public.edid_caps.audio_modes[i].sample_size);
+ }
+
+ } else {
+@@ -730,7 +732,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ }
+
+ LINK_INFO("link=%d, dc_sink_in=%p is now %s\n",
+- link->link_index, sink,
++ link->link_index, &sink->public,
+ (sink_caps.signal == SIGNAL_TYPE_NONE ?
+ "Disconnected":"Connected"));
+
+@@ -1345,7 +1347,7 @@ enum dc_status dc_link_validate_mode_timing(
+ struct dc_link *link,
+ const struct dc_crtc_timing *timing)
+ {
+- uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk;
++ uint32_t max_pix_clk = stream->sink->public.dongle_max_pix_clk;
+
+ /* A hack to avoid failing any modes for EDID override feature on
+ * 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 71723fb..ec4714e 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(
+ pipe_ctx->stream_enc);
+
+ /* TODO: Add check if ASIC support and EDID audio */
+- if (!stream->sink->converter_disable_audio &&
++ if (!stream->sink->public.converter_disable_audio &&
+ dc_is_audio_capable_signal(pipe_ctx->stream->signal) &&
+ stream->public.audio_info.mode_count) {
+ 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 a83f124..1f7985a 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 @@
+ * Private functions
+ ******************************************************************************/
+
+-static void destruct(struct dc_sink *sink)
++static void destruct(struct core_sink *sink)
+ {
+- if (sink->dc_container_id) {
+- dm_free(sink->dc_container_id);
+- sink->dc_container_id = NULL;
++ if (sink->public.dc_container_id) {
++ dm_free(sink->public.dc_container_id);
++ sink->public.dc_container_id = NULL;
+ }
+ }
+
+-static bool construct(struct dc_sink *sink, const struct dc_sink_init_data *init_params)
++static bool construct(struct core_sink *sink, const struct dc_sink_init_data *init_params)
+ {
+
+ struct dc_link *link = init_params->link;
+@@ -47,12 +47,12 @@ static bool construct(struct dc_sink *sink, const struct dc_sink_init_data *init
+ if (!link)
+ return false;
+
+- sink->sink_signal = init_params->sink_signal;
++ sink->public.sink_signal = init_params->sink_signal;
+ sink->link = link;
+ sink->ctx = link->ctx;
+- sink->dongle_max_pix_clk = init_params->dongle_max_pix_clk;
+- sink->converter_disable_audio = init_params->converter_disable_audio;
+- sink->dc_container_id = NULL;
++ sink->public.dongle_max_pix_clk = init_params->dongle_max_pix_clk;
++ sink->public.converter_disable_audio = init_params->converter_disable_audio;
++ sink->public.dc_container_id = NULL;
+
+ return true;
+ }
+@@ -61,14 +61,18 @@ static bool construct(struct dc_sink *sink, const struct dc_sink_init_data *init
+ * Public functions
+ ******************************************************************************/
+
+-void dc_sink_retain(struct dc_sink *sink)
++void dc_sink_retain(const struct dc_sink *dc_sink)
+ {
++ struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
++
+ ASSERT(sink->ref_count > 0);
+ ++sink->ref_count;
+ }
+
+-void dc_sink_release(struct dc_sink *sink)
++void dc_sink_release(const struct dc_sink *dc_sink)
+ {
++ struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
++
+ ASSERT(sink->ref_count > 0);
+ --sink->ref_count;
+
+@@ -80,7 +84,7 @@ void dc_sink_release(struct dc_sink *sink)
+
+ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
+ {
+- struct dc_sink *sink = dm_alloc(sizeof(*sink));
++ struct core_sink *sink = dm_alloc(sizeof(*sink));
+
+ if (NULL == sink)
+ goto alloc_fail;
+@@ -90,7 +94,7 @@ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
+
+ ++sink->ref_count;
+
+- return sink;
++ return &sink->public;
+
+ construct_fail:
+ 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 5b356dd..a329709 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 {
+ ******************************************************************************/
+
+ static bool construct(struct core_stream *stream,
+- struct dc_sink *dc_sink_data)
++ const struct dc_sink *dc_sink_data)
+ {
+ uint32_t i = 0;
+
+- stream->sink = dc_sink_data;
++ stream->sink = DC_SINK_TO_CORE(dc_sink_data);
+ stream->ctx = stream->sink->ctx;
+ stream->public.sink = dc_sink_data;
+
+@@ -97,7 +97,7 @@ static bool construct(struct core_stream *stream,
+
+ static void destruct(struct core_stream *stream)
+ {
+- dc_sink_release(stream->sink);
++ dc_sink_release(&stream->sink->public);
+ if (stream->public.out_transfer_func != NULL) {
+ dc_transfer_func_release(
+ stream->public.out_transfer_func);
+@@ -130,8 +130,9 @@ void dc_stream_release(const struct dc_stream *public)
+ }
+
+ struct dc_stream *dc_create_stream_for_sink(
+- struct dc_sink *sink)
++ const struct dc_sink *dc_sink)
+ {
++ struct core_sink *sink = DC_SINK_TO_CORE(dc_sink);
+ struct stream *stream;
+
+ if (sink == NULL)
+@@ -142,7 +143,7 @@ struct dc_stream *dc_create_stream_for_sink(
+ if (NULL == stream)
+ goto alloc_fail;
+
+- if (false == construct(&stream->protected, sink))
++ if (false == construct(&stream->protected, dc_sink))
+ goto construct_fail;
+
+ stream->ref_count++;
+@@ -349,8 +350,8 @@ void dc_stream_log(
+ dm_logger_write(dm_logger,
+ log_type,
+ "\tsink name: %s, serial: %d\n",
+- core_stream->sink->edid_caps.display_name,
+- core_stream->sink->edid_caps.serial_number);
++ core_stream->sink->public.edid_caps.display_name,
++ core_stream->sink->public.edid_caps.serial_number);
+ dm_logger_write(dm_logger,
+ log_type,
+ "\tlink: %d\n",
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 77bd546..e15e8fb 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(
+ /**
+ * Create a new default stream for the requested sink
+ */
+-struct dc_stream *dc_create_stream_for_sink(struct dc_sink *dc_sink);
++struct dc_stream *dc_create_stream_for_sink(const struct dc_sink *dc_sink);
+
+ void dc_stream_retain(const struct dc_stream *dc_stream);
+ void dc_stream_release(const struct dc_stream *dc_stream);
+@@ -712,9 +712,9 @@ struct link_mst_stream_allocation_table {
+ * The currently active signal type (HDMI, DP-SST, DP-MST) is also reported.
+ */
+ struct dc_link {
+- struct dc_sink *remote_sinks[MAX_SINKS_PER_LINK];
++ const struct dc_sink *remote_sinks[MAX_SINKS_PER_LINK];
+ unsigned int sink_count;
+- struct dc_sink *local_sink;
++ const struct dc_sink *local_sink;
+ unsigned int link_index;
+ enum dc_connection_type type;
+ enum signal_type connector_signal;
+@@ -825,7 +825,7 @@ struct dc_sink *dc_link_add_remote_sink(
+
+ void dc_link_remove_remote_sink(
+ struct dc_link *link,
+- struct dc_sink *sink);
++ const struct dc_sink *sink);
+
+ /* Used by diagnostics for virtual link at the moment */
+ void dc_link_set_sink(struct dc_link *link, struct dc_sink *sink);
+@@ -879,17 +879,10 @@ struct dc_sink {
+ void *priv;
+ struct stereo_3d_features features_3d[TIMING_3D_FORMAT_MAX];
+ bool converter_disable_audio;
+-
+- /* private to DC core */
+- struct dc_link *link;
+- struct dc_context *ctx;
+-
+- /* private to dc_sink.c */
+- int ref_count;
+ };
+
+-void dc_sink_retain(struct dc_sink *sink);
+-void dc_sink_release(struct dc_sink *sink);
++void dc_sink_retain(const struct dc_sink *sink);
++void dc_sink_release(const struct dc_sink *sink);
+
+ const struct audio **dc_get_audios(struct dc *dc);
+
+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 58701fd..fe8084e 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(
+ * encoder block
+ * note: video bios clears all FMT setting here. */
+ struct bp_crtc_source_select crtc_source_select = {0};
+- const struct dc_sink *sink = pipe_ctx->stream->sink;
++ const struct core_sink *sink = pipe_ctx->stream->sink;
+
+ crtc_source_select.engine_id = pipe_ctx->stream_enc->id;
+ 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 1d733c8..eed31a8 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 {
+
+ /* field internal to DC */
+ struct dc_context *ctx;
+- struct dc_sink *sink;
++ const struct core_sink *sink;
+
+ /* used by DCP and FMT */
+ struct bit_depth_reduction_params bit_depth_params;
+@@ -80,6 +80,25 @@ struct core_stream {
+ struct dc_stream_status status;
+ };
+
++/************ core_sink *****************/
++
++#define DC_SINK_TO_CORE(dc_sink) \
++ container_of(dc_sink, struct core_sink, public)
++
++struct core_sink {
++ /** The public, read-only (for DM) area of sink. **/
++ struct dc_sink public;
++ /** End-of-public area. **/
++
++ /** The 'protected' area - read/write access, for use only inside DC **/
++ /* not used for now */
++ struct dc_link *link;
++ struct dc_context *ctx;
++
++ /* private to dc_sink.c */
++ int ref_count;
++};
++
+ /************ link *****************/
+ struct link_init_data {
+ const struct core_dc *dc;
+--
+2.7.4
+